Social bar v2: fediverse icons resolved via nodeinfo (with redirect-following), persisted software column, icon colors — 112 tests passing, 0 warnings
This commit is contained in:
@@ -254,6 +254,44 @@ public partial class MainWindow : Window
|
||||
private void OpacitySlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
|
||||
=> OpacityValueText.Text = $"{Math.Round(e.NewValue * 100)}%";
|
||||
|
||||
// ─── Social bar drag: vertical only, snaps to top/bottom on release ───
|
||||
private const double SocialBarBottomTop = 1040;
|
||||
private bool _isDraggingSocialBar;
|
||||
private double _socialBarGrabOffsetY;
|
||||
|
||||
private void SocialBar_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
var bar = (FrameworkElement)sender;
|
||||
_isDraggingSocialBar = true;
|
||||
var toCanvas = CanvasGrid.TransformToVisual(bar).Inverse;
|
||||
var p = toCanvas.Transform(e.GetPosition(bar));
|
||||
_socialBarGrabOffsetY = p.Y - Canvas.GetTop(bar);
|
||||
bar.CaptureMouse();
|
||||
e.Handled = true;
|
||||
}
|
||||
|
||||
private void SocialBar_PreviewMouseMove(object sender, MouseEventArgs e)
|
||||
{
|
||||
if (!_isDraggingSocialBar) return;
|
||||
var bar = (FrameworkElement)sender;
|
||||
var toCanvas = CanvasGrid.TransformToVisual(bar).Inverse;
|
||||
var p = toCanvas.Transform(e.GetPosition(bar));
|
||||
Canvas.SetTop(bar, Math.Clamp(p.Y - _socialBarGrabOffsetY, 0, SocialBarBottomTop));
|
||||
e.Handled = true;
|
||||
}
|
||||
|
||||
private void SocialBar_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
if (!_isDraggingSocialBar) return;
|
||||
var bar = (FrameworkElement)sender;
|
||||
var top = Canvas.GetTop(bar);
|
||||
bar.ReleaseMouseCapture();
|
||||
_isDraggingSocialBar = false;
|
||||
var position = top <= SocialBarBottomTop / 2.0 ? SocialBarPosition.Top : SocialBarPosition.Bottom;
|
||||
_viewModel.SetSocialBarPosition(position);
|
||||
e.Handled = true;
|
||||
}
|
||||
|
||||
private void Preview_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
if (OpacityChip.IsMouseOver) return;
|
||||
|
||||
Reference in New Issue
Block a user