Skip to content

Commit cfeb1a3

Browse files
TheJoeFinclaude
andcommitted
feat: add Reset View, Show Word Borders, and Overlay Opacity to View menu
- Reset View resets zoom/pan via middle-click or menu item - Show Word Borders toggles RectanglesCanvas visibility - Overlay Opacity submenu switches between Off and 5% background tint - overlayOpacity field ensures chosen opacity persists through freeze/unfreeze Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 0371720 commit cfeb1a3

2 files changed

Lines changed: 60 additions & 1 deletion

File tree

Text-Grab/Views/GrabFrame.xaml

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -356,6 +356,34 @@
356356
IsCheckable="True"
357357
Tag="ZoomWhenFrozen" />
358358
<Separator />
359+
<MenuItem
360+
x:Name="ResetViewMenuItem"
361+
Click="ResetViewMenuItem_Click"
362+
Header="Reset View"
363+
InputGestureText="Middle Click" />
364+
<Separator />
365+
<MenuItem
366+
x:Name="ShowWordBordersMenuItem"
367+
Click="ShowWordBordersMenuItem_Click"
368+
Header="Show Word Borders"
369+
IsCheckable="True"
370+
IsChecked="True" />
371+
<MenuItem Header="Overlay Opacity">
372+
<MenuItem
373+
x:Name="OverlayOpacityOffMenuItem"
374+
Click="OverlayOpacityMenuItem_Click"
375+
Header="Off"
376+
IsCheckable="True"
377+
Tag="0" />
378+
<MenuItem
379+
x:Name="OverlayOpacityLowMenuItem"
380+
Click="OverlayOpacityMenuItem_Click"
381+
Header="5%"
382+
IsCheckable="True"
383+
IsChecked="True"
384+
Tag="0.05" />
385+
</MenuItem>
386+
<Separator />
359387
<MenuItem
360388
x:Name="CloseOnGrabMenuItem"
361389
Click="CloseOnGrabMenuItem_Click"

Text-Grab/Views/GrabFrame.xaml.cs

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ public partial class GrabFrame : Window
8484
private readonly ObservableCollection<WordBorder> wordBorders = [];
8585
private static readonly Settings DefaultSettings = AppUtilities.TextGrabSettings;
8686
private ScrollBehavior scrollBehavior = ScrollBehavior.Resize;
87+
private double overlayOpacity = 0.05;
8788
private bool isTranslationEnabled = false;
8889
private string translationTargetLanguage = "English";
8990
private readonly DispatcherTimer translationTimer = new();
@@ -3356,7 +3357,7 @@ private void UnfreezeGrabFrame()
33563357
GrabFrameImage.Opacity = 0;
33573358
frameContentImageSource = null;
33583359
historyItem = null;
3359-
RectanglesBorder.Background.Opacity = 0.05;
3360+
RectanglesBorder.Background.Opacity = overlayOpacity;
33603361
FreezeToggleButton.IsChecked = false;
33613362
FreezeToggleButton.Visibility = Visibility.Visible;
33623363
Background = new SolidColorBrush(Colors.Transparent);
@@ -3483,6 +3484,36 @@ private void CloseOnGrabMenuItem_Click(object sender, RoutedEventArgs e)
34833484
DefaultSettings.Save();
34843485
}
34853486

3487+
private void ResetViewMenuItem_Click(object sender, RoutedEventArgs e)
3488+
{
3489+
MainZoomBorder.Reset();
3490+
}
3491+
3492+
private void ShowWordBordersMenuItem_Click(object sender, RoutedEventArgs e)
3493+
{
3494+
RectanglesCanvas.Visibility = ShowWordBordersMenuItem.IsChecked is true
3495+
? Visibility.Visible
3496+
: Visibility.Hidden;
3497+
}
3498+
3499+
private void OverlayOpacityMenuItem_Click(object sender, RoutedEventArgs e)
3500+
{
3501+
if (sender is not MenuItem clicked
3502+
|| clicked.Tag is not string tagStr
3503+
|| !double.TryParse(tagStr, System.Globalization.NumberStyles.Float,
3504+
System.Globalization.CultureInfo.InvariantCulture, out double opacity))
3505+
return;
3506+
3507+
overlayOpacity = opacity;
3508+
3509+
OverlayOpacityOffMenuItem.IsChecked = false;
3510+
OverlayOpacityLowMenuItem.IsChecked = false;
3511+
clicked.IsChecked = true;
3512+
3513+
if (!IsFreezeMode)
3514+
RectanglesBorder.Background.Opacity = overlayOpacity;
3515+
}
3516+
34863517
private void CanExecuteGrab(object sender, CanExecuteRoutedEventArgs e)
34873518
{
34883519
if (string.IsNullOrEmpty(FrameText))

0 commit comments

Comments
 (0)