Skip to content

Feature/screenshot beautifier#102

Merged
dimitar-radenkov merged 2 commits into
masterfrom
feature/screenshot-beautifier
May 10, 2026
Merged

Feature/screenshot beautifier#102
dimitar-radenkov merged 2 commits into
masterfrom
feature/screenshot-beautifier

Conversation

@dimitar-radenkov
Copy link
Copy Markdown
Owner

No description provided.

Wraps a captured screenshot in a gradient or solid-color background with
configurable padding, rounded corners, and drop shadow — producing
share-ready images without leaving the app.

- BeautifyBackground enum + BeautifyPresets gradient/solid brush registry
- BeautifierRenderService: off-screen WPF visual tree → RenderTargetBitmap
- BeautifierViewModel: ObservableObject with all controls + Export/Copy commands
- BeautifierWindow: two-panel UI (live Viewbox preview + sidebar controls)
- Beautify button wired into OverlayWindow action bar (full + compact)
- Window lifecycle follows existing pending-window pattern (same as Pin)
Copilot AI review requested due to automatic review settings May 10, 2026 18:29
@codecov-commenter
Copy link
Copy Markdown

@dimitar-radenkov dimitar-radenkov merged commit 1ee5006 into master May 10, 2026
7 checks passed
@dimitar-radenkov dimitar-radenkov deleted the feature/screenshot-beautifier branch May 10, 2026 18:34
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR introduces a “Screenshot Beautifier” workflow and expands the capture/recording infrastructure (selection UI, recording pipeline, update download UI, telemetry, and supporting services), alongside a version bump.

Changes:

  • Add a new Beautifier window + view model and wire it into the main overlay via a new Beautify action.
  • Add/extend capture + recording infrastructure (selection session windows, screen capture/bitmap composition, recording services and helpers).
  • Add/update supporting app services (telemetry, dialogs/message boxes, update download UI/service) and adjust tests/DI wiring.

Reviewed changes

Copilot reviewed 52 out of 126 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
version.json Bump app version to 6.1.
Pointframe/Views/UpdateDownloadWindow.xaml.cs New update download window code-behind (close on VM request).
Pointframe/Views/UpdateDownloadWindow.xaml New update download progress UI.
Pointframe/Views/SettingsWindow.xaml.cs Remove now-unneeded models using (global using).
Pointframe/Views/SelectionMonitorWindow.cs New per-monitor selection UI for region snip.
Pointframe/Views/SelectionBackdropWindow.cs New dimmed snapshot backdrop window for selection.
Pointframe/Views/RecordingOverlayWindow.xaml.cs Recording overlay code-behind adjustments (namespace/usings).
Pointframe/Views/RecordingOverlayWindow.xaml New/updated recording overlay UI with HUD and tool panel.
Pointframe/Views/PinnedScreenshotWindow.xaml.cs New pinned screenshot window (custom resize/drag).
Pointframe/Views/PinnedScreenshotWindow.xaml New pinned screenshot window UI.
Pointframe/Views/OverlayWindow.xaml.cs Wire Beautify flow + factory into overlay lifetime.
Pointframe/Views/OverlayWindow.xaml Add Beautify buttons to full + compact action bars.
Pointframe/Views/OverlayWindow.Selection.cs Add helper for converting overlay rects to screen pixel bounds.
Pointframe/Views/OverlayWindow.RecordingHud.cs New partial with recording HUD helpers/handlers (currently stubs).
Pointframe/Views/OverlayWindow.RecordingAnnotation.cs Remove now-unneeded models using (global using).
Pointframe/Views/OverlayWindow.Recording.cs Remove now-unneeded models using (global using).
Pointframe/Views/OverlayWindow.Layout.cs New overlay layout/session hosting logic (opened image + backdrop + toolbar layout).
Pointframe/Views/OverlayWindow.ColorPicker.cs Add loupe rendering + toolbar sync helpers for color picker.
Pointframe/Views/OverlayToolbarLayoutHelper.cs New helper to compute tool/action bar placement.
Pointframe/Views/CountdownWindow.xaml.cs New countdown window code-behind for delayed capture.
Pointframe/Views/CountdownWindow.xaml New countdown window UI.
Pointframe/Views/BeautifierWindow.xaml.cs New beautifier window code-behind + enum converter.
Pointframe/Views/BeautifierWindow.xaml New beautifier UI (preview + presets + sliders + export/copy).
Pointframe/Views/AboutWindow.xaml.cs New About window code-behind.
Pointframe/Views/AboutWindow.xaml New About window UI.
Pointframe/ViewModels/SettingsViewModel.cs Remove now-unneeded models using (global using).
Pointframe/ViewModels/OverlayViewModel.cs Add Beautify command + event.
Pointframe/ViewModels/BeautifierViewModel.cs New beautifier VM (render/export/copy + settings/telemetry).
Pointframe/ViewModels/AnnotationViewModel.cs Remove now-unneeded models using (global using).
Pointframe/ViewModels/AnnotationStylePresetViewModel.cs Remove now-unneeded models using (global using).
Pointframe/Services/Update/UpdateDownloadWindowService.cs New service to show download window and coordinate download lifecycle.
Pointframe/Services/Update/IUpdateService.cs Remove now-unneeded models using (global using).
Pointframe/Services/Update/IUpdateDownloadService.cs New interface for update download UI flow.
Pointframe/Services/Update/IAutoUpdateService.cs Remove now-unneeded models using (global using).
Pointframe/Services/Update/GitHubUpdateService.cs Remove now-unneeded models using (global using).
Pointframe/Services/Update/AutoUpdateService.cs Remove now-unneeded models using (global using).
Pointframe/Services/Recording/VideoWriterFactory.cs New factory for creating ffmpeg writer.
Pointframe/Services/Recording/ScreenRecordingService.cs New screen recording capture/encode pipeline.
Pointframe/Services/Recording/RecordingOverlayNativeInterop.cs New interop helpers for overlay transparency/window ops.
Pointframe/Services/Recording/RecordingMousePassthroughCoordinator.cs New coordinator for mouse passthrough while recording.
Pointframe/Services/Recording/RecordingHudCoordinator.cs Remove now-unneeded models using (global using).
Pointframe/Services/Recording/RecordingCursorEffectsService.cs Remove now-unneeded models using (global using).
Pointframe/Services/Recording/RecordingAnnotationSurfaceCoordinator.cs Remove now-unneeded models using (global using).
Pointframe/Services/Recording/IVideoWriterFactory.cs New writer factory interface.
Pointframe/Services/Recording/IVideoWriter.cs New writer abstraction.
Pointframe/Services/Recording/IScreenRecordingService.cs New screen recording service abstraction.
Pointframe/Services/Recording/IGifExportService.cs New gif export service interface.
Pointframe/Services/Recording/GifExportService.cs New ffmpeg-based GIF export implementation.
Pointframe/Services/Recording/FFMpegVideoWriter.cs Minor formatting change.
Pointframe/Services/Recording/FfmpegResolver.cs New ffmpeg resolver utility.
Pointframe/Services/Recording/BeautifyPresets.cs New preset background brush provider for beautifier.
Pointframe/Services/Recording/BeautifierRenderService.cs New render-to-bitmap service for beautifier output.
Pointframe/Services/Messaging/UpdateAvailableMessage.cs Remove now-unneeded models using (global using).
Pointframe/Services/Infrastructure/WindowsOcrService.cs New Windows OCR implementation.
Pointframe/Services/Infrastructure/UserSettingsService.cs Remove now-unneeded models using (global using).
Pointframe/Services/Infrastructure/TrayIconManager.cs Remove now-unneeded models using (global using).
Pointframe/Services/Infrastructure/ThemeService.cs Remove now-unneeded models using (global using).
Pointframe/Services/Infrastructure/TelemetryService.cs New telemetry service (Azure Monitor OpenTelemetry exporter).
Pointframe/Services/Infrastructure/TelemetryHeartbeatService.cs New background heartbeat telemetry service.
Pointframe/Services/Infrastructure/ProcessService.cs New process-start abstraction.
Pointframe/Services/Infrastructure/MouseHookService.cs New low-level mouse hook implementation.
Pointframe/Services/Infrastructure/MicrophoneDeviceService.cs New microphone device enumeration/mute control service.
Pointframe/Services/Infrastructure/MessageBoxService.cs New message box abstraction (WPF + native fallback).
Pointframe/Services/Infrastructure/IUserSettingsService.cs Remove now-unneeded models using (global using).
Pointframe/Services/Infrastructure/ITrayIconManager.cs New tray icon manager interface (currently has a namespace/type reference issue).
Pointframe/Services/Infrastructure/IThemeService.cs Remove now-unneeded models using (global using).
Pointframe/Services/Infrastructure/ITelemetryService.cs New telemetry interface.
Pointframe/Services/Infrastructure/IProcessService.cs New process service interface.
Pointframe/Services/Infrastructure/IOcrService.cs New OCR interface.
Pointframe/Services/Infrastructure/IMouseHookService.cs New mouse hook interface + event args.
Pointframe/Services/Infrastructure/IMicrophoneDeviceService.cs New microphone device service interface.
Pointframe/Services/Infrastructure/IMessageBoxService.cs New message box service interface.
Pointframe/Services/Infrastructure/IGlobalHotkeyService.cs Remove now-unneeded models using (global using).
Pointframe/Services/Infrastructure/IFileSystemService.cs New file system abstraction.
Pointframe/Services/Infrastructure/IDialogService.cs New dialog abstraction.
Pointframe/Services/Infrastructure/IAppVersionService.cs New app version service interface.
Pointframe/Services/Infrastructure/IAppErrorHandler.cs New app error handler interface.
Pointframe/Services/Infrastructure/GlobalHotkeyService.cs Remove now-unneeded models using (global using).
Pointframe/Services/Infrastructure/FileSystemService.cs New file system service implementation.
Pointframe/Services/Infrastructure/DialogService.cs New dialog service (OpenFile/Folder/Color).
Pointframe/Services/Infrastructure/AppVersionService.cs New app version provider.
Pointframe/Services/Infrastructure/AppPaths.cs New app path constants (logs/local app data).
Pointframe/Services/Infrastructure/AppErrorHandler.cs New global error handling + recovery behavior.
Pointframe/Services/Capture/SelectionSession.cs New selection session orchestration (per-monitor + whole screen).
Pointframe/Services/Capture/ScreenCaptureService.cs New GDI-based screen capture service.
Pointframe/Services/Capture/OverlayBitmapCapture.cs New overlay bitmap compositor (screen + annotations).
Pointframe/Services/Capture/OpenedImageBitmapCapture.cs New opened-image bitmap compositor.
Pointframe/Services/Capture/IScreenCaptureService.cs New screen capture interface.
Pointframe/Services/Capture/IOverlayBitmapCapture.cs New overlay bitmap capture interface.
Pointframe/Services/Capture/ImageFileService.cs New image file loader + validation.
Pointframe/Services/Capture/IImageFileService.cs New image file service interface.
Pointframe/Services/Capture/IClipboardService.cs New clipboard abstraction.
Pointframe/Services/Capture/ICaptureLaunchService.cs New capture launch interface.
Pointframe/Services/Capture/ClipboardService.cs New clipboard service implementation.
Pointframe/Services/Capture/CaptureLaunchService.cs New service to launch snips/records with optional countdown.
Pointframe/Services/Annotation/IAnnotationGeometryService.cs New annotation geometry service interface.
Pointframe/Services/Annotation/Handlers/TextShapeHandler.cs New text tool handler.
Pointframe/Services/Annotation/Handlers/RectShapeHandler.cs Remove now-unneeded models using (global using).
Pointframe/Services/Annotation/Handlers/PixelRulerShapeHandler.cs Remove now-unneeded models using (global using).
Pointframe/Services/Annotation/Handlers/PenShapeHandler.cs Remove now-unneeded models using (global using).
Pointframe/Services/Annotation/Handlers/NumberShapeHandler.cs New number tool handler.
Pointframe/Services/Annotation/Handlers/LineShapeHandler.cs Remove now-unneeded models using (global using).
Pointframe/Services/Annotation/Handlers/IAnnotationShapeHandler.cs New shape handler interface.
Pointframe/Services/Annotation/Handlers/HighlightShapeHandler.cs Remove now-unneeded models using (global using).
Pointframe/Services/Annotation/Handlers/EllipseShapeHandler.cs Remove now-unneeded models using (global using).
Pointframe/Services/Annotation/Handlers/ColorPickerShapeHandler.cs New no-op handler for color picker tool.
Pointframe/Services/Annotation/Handlers/CalloutShapeHandler.cs Remove now-unneeded models using (global using).
Pointframe/Services/Annotation/Handlers/BlurShapeHandler.cs Remove now-unneeded models using (global using).
Pointframe/Services/Annotation/Handlers/ArrowShapeHandler.cs Remove now-unneeded models using (global using).
Pointframe/Services/Annotation/AnnotationGeometryService.cs New geometry calculations for shapes/arrowheads.
Pointframe/Services/Annotation/AnnotationCanvasRenderer.cs Remove now-unneeded models using (global using).
Pointframe/Services/Annotation/AnnotationCanvasInteractionController.cs New interaction controller (drawing, text/number, color picker).
Pointframe/Native/NativeMethods.cs New Win32 keyboard hook constants/interop.
Pointframe/Native/MonitorDpiHelper.cs New monitor DPI helpers.
Pointframe/Native/DpiAwarenessScope.cs New DPI awareness scope helper.
Pointframe/Models/SelectionSessionResult.cs Move selection session types to Pointframe.Models.
Pointframe/Models/SelectionSessionMode.cs Move selection session enum to Pointframe.Models.
Pointframe/Models/BeautifyBackground.cs New background preset enum for beautifier.
Pointframe/Models/AnnotationTool.cs Move annotation tool enum to Pointframe.Models.
Pointframe/GlobalUsings.cs Add global using for Pointframe.Models.
Pointframe/App.xaml.cs Register beautifier services/factory and update overlay DI wiring.
Pointframe.Tests/OverlayWindowRecordingFlowTests.cs Update overlay ctor calls for new beautifier factory param.
Pointframe.Tests/OverlayWindowLayoutInteractionTests.cs Update overlay ctor calls for new beautifier factory param.
Pointframe.Tests/OverlayWindowInteractionTests.cs Update overlay ctor calls for new beautifier factory param.
Pointframe.Tests/GlobalUsings.cs Add global using for Pointframe.Models in tests.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +155 to +167
[RelayCommand]
private void Beautify()
{
var bitmapCapture = _bitmapCapture;
if (bitmapCapture is null)
{
_logger.LogWarning("Beautify requested before overlay bitmap capture was attached");
return;
}

_telemetry.TrackEvent("beautify_opened");
BeautifyRequested?.Invoke(bitmapCapture.ComposeBitmap(restoreOverlayVisibilityAfterCapture: false));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants