Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions src/ViewModels/Blame.cs
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,11 @@ public void NavigateToCommit(string commitSHA)
}
}

public Models.Commit GetCommitInfo(string commitSHA)
{
return new Commands.QuerySingleCommit(_repo, commitSHA).Result();
}

private readonly string _repo;
private Models.BlameData _data = null;
}
Expand Down
19 changes: 17 additions & 2 deletions src/Views/Blame.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:m="using:SourceGit.Models"
xmlns:vm="using:SourceGit.ViewModels"
xmlns:v="using:SourceGit.Views"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
Expand Down Expand Up @@ -59,8 +60,22 @@
FontFamily="{DynamicResource Fonts.Monospace}"
FontSize="{Binding Source={x:Static vm:Preferences.Instance}, Path=EditorFontSize}"
TabWidth="{Binding Source={x:Static vm:Preferences.Instance}, Path=EditorTabWidth}"
BlameData="{Binding Data}"/>

BlameData="{Binding Data}">
<v:BlameTextEditor.DataTemplates>
<DataTemplate DataType="m:Commit">
<StackPanel MinWidth="400" Orientation="Vertical">
<Grid ColumnDefinitions="Auto,*,Auto">
<v:Avatar Grid.Column="0" Width="16" Height="16" VerticalAlignment="Center" IsHitTestVisible="False" User="{Binding Author}"/>
<TextBlock Grid.Column="1" Classes="primary" Text="{Binding Author.Name}" Margin="8,0,0,0"/>
<TextBlock Grid.Column="2" Classes="primary" Text="{Binding CommitterTimeStr}" Foreground="{DynamicResource Brush.FG2}" Margin="8,0,0,0"/>
</Grid>

<TextBlock Classes="primary" Margin="0,8,0,0" Text="{Binding Subject}" TextWrapping="Wrap"/>
</StackPanel>
</DataTemplate>
</v:BlameTextEditor.DataTemplates>
</v:BlameTextEditor>

<!-- Not supported mask (for binary files) -->
<StackPanel Orientation="Vertical"
HorizontalAlignment="Center" VerticalAlignment="Center"
Expand Down
45 changes: 36 additions & 9 deletions src/Views/Blame.axaml.cs
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
using System;
using System.Collections.Generic;
using System.Globalization;

using System.Threading.Tasks;
using Avalonia;
using Avalonia.Controls;
using Avalonia.Input;
using Avalonia.Interactivity;
using Avalonia.Media;

using Avalonia.Threading;
using AvaloniaEdit;
using AvaloniaEdit.Document;
using AvaloniaEdit.Editing;
Expand Down Expand Up @@ -162,7 +162,8 @@ protected override void OnPointerMoved(PointerEventArgs e)
break;

var info = _editor.BlameData.LineInfos[lineNumber - 1];
var y = line.GetTextLineVisualYPosition(line.TextLines[0], VisualYPosition.TextTop) - view.VerticalOffset;
var y = line.GetTextLineVisualYPosition(line.TextLines[0], VisualYPosition.TextTop)
- view.VerticalOffset;
var shaLink = new FormattedText(
info.CommitSHA,
CultureInfo.CurrentCulture,
Expand All @@ -175,12 +176,38 @@ protected override void OnPointerMoved(PointerEventArgs e)
if (rect.Contains(pos))
{
Cursor = Cursor.Parse("Hand");

// check if the tooltip is already set
var tooltip = ToolTip.GetTip(this);
if (tooltip is Models.Commit existedCommit && existedCommit.SHA == info.CommitSHA)
return;

if (DataContext is ViewModels.Blame blame)
{
Task.Run(() =>
{
var commit = blame.GetCommitInfo(info.CommitSHA);
if (commit == null)
return;

Dispatcher.UIThread.Invoke(() =>
{
if (IsEffectivelyVisible && IsPointerOver)
{
ToolTip.SetTip(this, commit);
ToolTip.SetIsOpen(this, true);
}
});
});
}

return;
}
}
}

Cursor = Cursor.Default;
Cursor = Cursor.Default;
ToolTip.SetIsOpen(this, false);
}
}

protected override void OnPointerPressed(PointerPressedEventArgs e)
Expand Down Expand Up @@ -230,9 +257,9 @@ protected override void OnPointerPressed(PointerPressedEventArgs e)
private readonly BlameTextEditor _editor = null;
}

public class VerticalSeperatorMargin : AbstractMargin
public class VerticalSeparatorMargin : AbstractMargin
{
public VerticalSeperatorMargin(BlameTextEditor editor)
public VerticalSeparatorMargin(BlameTextEditor editor)
{
_editor = editor;
}
Expand Down Expand Up @@ -284,9 +311,9 @@ public int TabWidth
_textMate = Models.TextMateHelper.CreateForEditor(this);

TextArea.LeftMargins.Add(new LineNumberMargin() { Margin = new Thickness(8, 0) });
TextArea.LeftMargins.Add(new VerticalSeperatorMargin(this));
TextArea.LeftMargins.Add(new VerticalSeparatorMargin(this));
TextArea.LeftMargins.Add(new CommitInfoMargin(this) { Margin = new Thickness(8, 0) });
TextArea.LeftMargins.Add(new VerticalSeperatorMargin(this));
TextArea.LeftMargins.Add(new VerticalSeparatorMargin(this));
TextArea.Caret.PositionChanged += OnTextAreaCaretPositionChanged;
TextArea.LayoutUpdated += OnTextAreaLayoutUpdated;
TextArea.PointerWheelChanged += OnTextAreaPointerWheelChanged;
Expand Down
8 changes: 4 additions & 4 deletions src/Views/TextDiffView.axaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ public TextDiffViewRange(int startIdx, int endIdx)

public class ThemedTextDiffPresenter : TextEditor
{
public class VerticalSeperatorMargin : AbstractMargin
public class VerticalSeparatorMargin : AbstractMargin
{
public override void Render(DrawingContext context)
{
Expand Down Expand Up @@ -1085,9 +1085,9 @@ public class CombinedTextDiffPresenter : ThemedTextDiffPresenter
public CombinedTextDiffPresenter() : base(new TextArea(), new TextDocument())
{
TextArea.LeftMargins.Add(new LineNumberMargin(false, true));
TextArea.LeftMargins.Add(new VerticalSeperatorMargin());
TextArea.LeftMargins.Add(new VerticalSeparatorMargin());
TextArea.LeftMargins.Add(new LineNumberMargin(false, false));
TextArea.LeftMargins.Add(new VerticalSeperatorMargin());
TextArea.LeftMargins.Add(new VerticalSeparatorMargin());
TextArea.LeftMargins.Add(new LineModifyTypeMargin());
}

Expand Down Expand Up @@ -1286,7 +1286,7 @@ public class SingleSideTextDiffPresenter : ThemedTextDiffPresenter
public SingleSideTextDiffPresenter() : base(new TextArea(), new TextDocument())
{
TextArea.LeftMargins.Add(new LineNumberMargin(true, false));
TextArea.LeftMargins.Add(new VerticalSeperatorMargin());
TextArea.LeftMargins.Add(new VerticalSeparatorMargin());
TextArea.LeftMargins.Add(new LineModifyTypeMargin());
}

Expand Down
Loading