Skip to content

Refactor button icons snapping and apply UI refinements - #247

Merged
guiodic merged 9 commits into
masterfrom
better-snap3
Aug 24, 2026
Merged

Refactor button icons snapping and apply UI refinements#247
guiodic merged 9 commits into
masterfrom
better-snap3

Conversation

@guiodic

@guiodic guiodic commented Aug 24, 2026

Copy link
Copy Markdown
Owner

Riepilogo di Sourcery

Migliora il rendering delle icone dei pulsanti e la spaziatura per ottenere un’interfaccia più nitida e coerente a diverse scale di visualizzazione.

Correzioni di bug:

  • Migliora la coerenza del rendering delle icone dei pulsanti allineando la geometria dei tratti e le larghezze delle penne ai pixel fisici.

Miglioramenti:

  • Refactoring del disegno delle icone per distinguere i tratti orizzontali e verticali allineati ai pixel dalla geometria diagonale e curva non allineata.
  • Aggiunge utilità per l’allineamento delle penne ai pixel fisici e riutilizza la scala della penna configurata per il pulsante in tutte le icone.
  • Perfeziona le icone di massimizzazione, menu, riduzione a icona ed esclusione per ottenere contorni più simmetrici e coerenti.
  • Regola i valori di spaziatura interna dei pulsanti piccoli e molto piccoli e perfeziona il rendering del punto dell’icona di guida contestuale.
Original summary in English

Summary by Sourcery

Improve button icon rendering and spacing for sharper, more consistent UI results across display scales.

Bug Fixes:

  • Improve button icon rendering consistency by aligning stroked geometry and pen widths to physical pixels.

Enhancements:

  • Refactor icon painting to distinguish snapped horizontal and vertical strokes from unsnapped diagonal and curved geometry.
  • Add physical-pixel pen snapping utilities and reuse the button’s configured pen scale across icons.
  • Refine maximize, menu, shade, and exclusion icons for more symmetric, consistent outlines.
  • Adjust tiny and small button padding values and refine context-help icon dot rendering.

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Sorry @guiodic, you have reached your weekly rate limit of 250000 diff characters.

Please try again later or upgrade to continue using Sourcery

@coderabbitai

coderabbitai Bot commented Aug 24, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 2f6d559b-e9c1-4c6e-9e26-994c63e25a9a

📥 Commits

Reviewing files that changed from the base of the PR and between ba16332 and 7e76e0f.

📒 Files selected for processing (16)
  • src/ApplicationMenuButton.h
  • src/Button.cc
  • src/Button.h
  • src/CloseButton.h
  • src/ContextHelpButton.h
  • src/Decoration.cc
  • src/ExcludeFromCaptureButton.h
  • src/KeepAboveButton.h
  • src/KeepBelowButton.h
  • src/MaximizeButton.h
  • src/MinimizeButton.h
  • src/OnAllDesktopsButton.h
  • src/PixelSnapper.cc
  • src/PixelSnapper.h
  • src/SearchButton.cc
  • src/ShadeButton.h

Included review availability: Your plan provides up to 2 included reviews per hour; 1 remains after this review.


📝 Walkthrough

Summary by CodeRabbit

  • Miglioramenti visivi

    • Migliorato il rendering delle icone dei pulsanti, con linee, contorni e forme più nitidi e allineati ai pixel.
    • Ottimizzata la resa delle icone su display con diverse scale e densità di pixel.
    • Uniformata la visualizzazione degli elementi grafici in vari stati dei pulsanti.
  • Interfaccia

    • Aumentata leggermente la spaziatura interna dei pulsanti molto piccoli e piccoli per migliorarne la leggibilità.

Walkthrough

La modifica aggiorna il rendering delle icone. PixelSnapper considera la larghezza fisica della penna. Button espone la scala della penna. Le icone usano snapping specifico o coordinate dirette. Il padding dei pulsanti piccoli aumenta.

Changes

Rendering delle icone

Layer / File(s) Summary
API di snapping per la penna
src/PixelSnapper.h, src/PixelSnapper.cc
PixelSnapper aggiunge lo snapping per punti e rettangoli. Calcola inoltre la larghezza fisica e la larghezza locale compensata della penna.
Stato della penna in Button
src/Button.h, src/Button.cc
Button aggiunge penScale(). setPenWidth accetta snapped. Il rendering delle icone usa m_penScale e ripristina la larghezza della penna.
Geometria scalata delle icone
src/ApplicationMenuButton.h, src/MaximizeButton.h, src/MinimizeButton.h, src/ShadeButton.h, src/ExcludeFromCaptureButton.h
Le icone usano la scala della penna e lo snapping basato sui pixel fisici quando i valori di scala sono validi. MaximizeButton traccia contorni tramite segmenti espliciti.
Geometria non sottoposta a snapping
src/CloseButton.h, src/ContextHelpButton.h, src/KeepAboveButton.h, src/KeepBelowButton.h, src/OnAllDesktopsButton.h, src/SearchButton.cc, src/Decoration.cc
Le icone indicate usano coordinate dirette e non applicano più lo snapping generico. ContextHelpButton usa un’ellisse per il punto finale. buttonPadding() aumenta il padding di ButtonTiny e ButtonSmall.

Estimated code review effort: 4 (Complex) | ~45 minutes

Merge Risk: ⚪ Minimal · up to 7e76e

This UI rendering and spacing refactor is merge-ready after normal checks and review; no actionable merge-blocking risk remains.

Sequence Diagram(s)

sequenceDiagram
  participant Button
  participant ApplicationMenuButton
  participant MaximizeButton
  participant PixelSnapper
  participant QPainter
  Button->>ApplicationMenuButton: paintIcon con penScale
  ApplicationMenuButton->>PixelSnapper: snapForPen per le linee
  PixelSnapper-->>ApplicationMenuButton: coordinate allineate
  ApplicationMenuButton->>QPainter: disegna le linee
  Button->>MaximizeButton: paintIcon con penScale
  MaximizeButton->>PixelSnapper: snappedPenWidth e snapForPen
  PixelSnapper-->>MaximizeButton: larghezza e coordinate fisiche
  MaximizeButton->>QPainter: disegna i contorni
Loading
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 6.38% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 47 functions across 16 files. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed Il titolo descrive in modo conciso il refactoring dello snapping delle icone e le modifiche all’interfaccia.
Description check ✅ Passed La descrizione è pertinente e riassume il rendering delle icone, lo snapping ai pixel fisici e i perfezionamenti dell’interfaccia.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
✨ Simplify code
  • Create PR with simplified code
  • Commit simplified code in branch better-snap3

Warning

Your free Security trial is over. An organization admin can activate billing to continue.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@sourcery-ai

sourcery-ai Bot commented Aug 24, 2026

Copy link
Copy Markdown

Guida del revisore

Esegue il refactoring del disegno delle icone tenendo conto delle larghezze delle penne basate sui pixel fisici e dell’allineamento degli stroke, applica selettivamente il nuovo comportamento di allineamento alle immagini con assi allineati, semplifica la geometria diagonale/curva non sottoposta a snapping e perfeziona il padding dei pulsanti compatti.

Diagramma di sequenza per il disegno delle icone basato sui pixel fisici

sequenceDiagram
    participant Button
    participant PixelSnapper
    participant QPainter
    participant Icon

    Button->>Button: setPenWidth(painter, scale, true)
    Button->>PixelSnapper: snappedPenWidth(nominalLocalPenWidth)
    PixelSnapper->>PixelSnapper: physicalPenWidth(localPenWidth)
    PixelSnapper-->>Button: larghezza della penna locale sottoposta a snapping
    Icon->>PixelSnapper: snapForPen(point, penWidth)
    PixelSnapper-->>Icon: punto allineato alla griglia fisica
    Icon->>QPainter: drawLine or drawRect
    Button->>Button: setPenWidth(painter, scale, false)
Loading

Diagramma di flusso per il rendering delle icone con assi allineati

flowchart TD
    A[Inizio del disegno dell'icona] --> B[Lettura di Button.penScale]
    B --> C[setPenWidth con snapped=true]
    C --> D{Scala fisica disponibile?}
    D -->|Sì| E[Arrotondamento della spaziatura o della geometria in pixel fisici]
    E --> F[snapForPen degli endpoint con assi allineati]
    D -->|No| G[Uso della geometria locale arrotondata di fallback]
    G --> F
    F --> H[Disegno degli stroke con assi allineati]
    H --> I[Ripristino della larghezza predefinita della penna]
    I --> J[Disegno della geometria diagonale o curva senza snapping dei punti]
Loading

Modifiche a livello di file

Modifica Dettagli File
Introduce lo snapping basato sui pixel fisici consapevole della penna e centralizza il calcolo della larghezza della penna sottoposta a snapping.
  • Aggiunge lo snapping di punti e rettangoli tenendo conto delle larghezze degli stroke fisici pari e dispari.
  • Aggiunge funzioni di conversione per le larghezze intere delle penne fisiche e le larghezze locali sottoposte a snapping.
  • Estende la configurazione della penna dei pulsanti per utilizzare facoltativamente larghezze sottoposte a snapping, preservando al contempo la larghezza predefinita nominale.
src/PixelSnapper.cc
src/PixelSnapper.h
src/Button.cc
src/Button.h
Esegue il refactoring del rendering delle icone dei pulsanti per utilizzare il nuovo modello di snapping e migliorare simmetria e allineamento.
  • Rielabora le icone del menu e di massimizzazione attorno a dimensioni e offset interi in pixel fisici.
  • Utilizza lo snapping consapevole della penna per gli stroke orizzontali/verticali e ripristina la penna predefinita dopo il disegno specializzato.
  • Rimuove lo snapping delle coordinate dalle immagini diagonali/curve nei casi in cui potrebbe deformare la geometria.
src/ApplicationMenuButton.h
src/MaximizeButton.h
src/MinimizeButton.h
src/ExcludeFromCaptureButton.h
src/ShadeButton.h
src/CloseButton.h
src/ContextHelpButton.h
src/KeepAboveButton.h
src/KeepBelowButton.h
src/OnAllDesktopsButton.h
src/SearchButton.cc
Modifica la spaziatura dei pulsanti per le dimensioni delle decorazioni minima e piccola.
  • Aumenta i fattori di padding per le modalità dei pulsanti minima e piccola.
src/Decoration.cc

Suggerimenti e comandi

Interagire con Sourcery

  • Avviare una nuova revisione: commenta @sourcery-ai review nella pull request.
  • Continuare le discussioni: rispondi direttamente ai commenti di revisione di Sourcery.
  • Generare una issue GitHub da un commento di revisione: chiedi a Sourcery di creare una issue da un commento di revisione rispondendo a quel commento. Puoi anche rispondere a un commento di revisione con @sourcery-ai issue per creare una issue.
  • Generare il titolo di una pull request: scrivi @sourcery-ai in qualsiasi punto del titolo della pull request per generare un titolo in qualsiasi momento. Puoi anche commentare @sourcery-ai title nella pull request per generare nuovamente il titolo in qualsiasi momento.
  • Generare il riepilogo di una pull request: scrivi @sourcery-ai summary in qualsiasi punto del corpo della pull request per generare un riepilogo della PR esattamente nel punto desiderato. Puoi anche commentare @sourcery-ai summary nella pull request per generare nuovamente il riepilogo in qualsiasi momento.
  • Generare la guida del revisore: commenta @sourcery-ai guide nella pull request per generare nuovamente la guida del revisore in qualsiasi momento.
  • Risolvere tutti i commenti di Sourcery: commenta @sourcery-ai resolve nella pull request per risolvere tutti i commenti di Sourcery. Utile se hai già gestito tutti i commenti e non vuoi più visualizzarli.
  • Ignorare tutte le revisioni di Sourcery: commenta @sourcery-ai dismiss nella pull request per ignorare tutte le revisioni di Sourcery esistenti. Particolarmente utile se vuoi ricominciare da zero con una nuova revisione: non dimenticare di commentare @sourcery-ai review per avviare una nuova revisione!

Personalizzare la tua esperienza

Accedi alla tua dashboard per:

  • Abilitare o disabilitare funzionalità di revisione come il riepilogo della pull request generato da Sourcery, la guida del revisore e altre.
  • Modificare la lingua della revisione.
  • Aggiungere, rimuovere o modificare le istruzioni di revisione personalizzate.
  • Modificare altre impostazioni di revisione.

Ottenere assistenza

Original review guide in English

Reviewer's Guide

Refactors icon painting around physical-pixel-aware pen widths and stroke snapping, selectively applies the new alignment behavior to axis-aligned artwork, simplifies unsnapped diagonal/curved geometry, and refines compact-button padding.

Sequence diagram for physical-pixel-aware icon painting

sequenceDiagram
    participant Button
    participant PixelSnapper
    participant QPainter
    participant Icon

    Button->>Button: setPenWidth(painter, scale, true)
    Button->>PixelSnapper: snappedPenWidth(nominalLocalPenWidth)
    PixelSnapper->>PixelSnapper: physicalPenWidth(localPenWidth)
    PixelSnapper-->>Button: snapped local pen width
    Icon->>PixelSnapper: snapForPen(point, penWidth)
    PixelSnapper-->>Icon: physical-grid-aligned point
    Icon->>QPainter: drawLine or drawRect
    Button->>Button: setPenWidth(painter, scale, false)
Loading

Flow diagram for axis-aligned icon rendering

flowchart TD
    A[Icon paint begins] --> B[Read Button.penScale]
    B --> C[setPenWidth with snapped=true]
    C --> D{Physical scale available?}
    D -->|Yes| E[Round spacing or geometry in physical pixels]
    E --> F[snapForPen axis-aligned endpoints]
    D -->|No| G[Use rounded local fallback geometry]
    G --> F
    F --> H[Draw axis-aligned strokes]
    H --> I[Restore default pen width]
    I --> J[Draw diagonal or curved geometry without point snapping]
Loading

File-Level Changes

Change Details Files
Introduces pen-aware physical-pixel snapping and centralizes snapped pen-width calculation.
  • Adds point and rectangle snapping that accounts for odd/even physical stroke widths.
  • Adds conversion helpers for integer physical pen widths and snapped local widths.
  • Extends button pen setup to optionally use snapped widths while preserving the nominal default width.
src/PixelSnapper.cc
src/PixelSnapper.h
src/Button.cc
src/Button.h
Refactors button icon rendering to use the new snapping model and improve symmetry/alignment.
  • Reworks menu and maximize icons around integer physical-pixel dimensions and offsets.
  • Uses pen-aware snapping for horizontal/vertical strokes and restores the default pen after specialized drawing.
  • Removes coordinate snapping from diagonal/curved artwork where it could distort geometry.
src/ApplicationMenuButton.h
src/MaximizeButton.h
src/MinimizeButton.h
src/ExcludeFromCaptureButton.h
src/ShadeButton.h
src/CloseButton.h
src/ContextHelpButton.h
src/KeepAboveButton.h
src/KeepBelowButton.h
src/OnAllDesktopsButton.h
src/SearchButton.cc
Adjusts button spacing for tiny and small decoration sizes.
  • Increases the padding factors for tiny and small button modes.
src/Decoration.cc

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@guiodic guiodic linked an issue Aug 24, 2026 that may be closed by this pull request
@guiodic
guiodic merged commit c2bcbbd into master Aug 24, 2026
6 checks passed
@guiodic
guiodic deleted the better-snap3 branch August 24, 2026 21:17
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.

"Pixel-Perfect" icons still blurry at different display scales

1 participant