diff --git a/AGENTS.md b/AGENTS.md index 2dd447ec..2431240d 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -21,6 +21,24 @@ - Every user-facing string must be localized through Flutter l10n (`AppLocalizations`) unless there is a technical reason not to localize. - Non-user-facing tokens (e.g., protocol values, file format identifiers, action IDs, binding/runtime markers) must be declared as named `const String` values, not inline literals. +## Tool Design: Brushes & Effects + +- Every pixel-changing tool lives in one **Brush** section and is used the same + way — pick it, then paint. **Effects are brushes too**: tapping one arms it as + a brush (size + strength) and you paint it on. In the panel an effect is a + brush only; whole-layer/selection apply lives on the on-canvas selection + overlay, not the panel. Selection is an orthogonal modifier that clips any + tool and gates none. +- Do not add a separate section, an "effect mode" toggle, or a whole-region + "Apply" button to the panel, and do not make one capability selectable in two + places. +- **Read [BRUSHES_AND_EFFECTS.md](BRUSHES_AND_EFFECTS.md) before adding, moving, + or renaming any tool or effect.** It is the canonical spec and holds the full + invariants (one active tool at a time, region-bounded painting, and the + bipolar-effect no-op commit guard — a strength-0 effect returns the same image + instance, so any commit that disposes its source must check + `identical(processed, source)` before drawing). + ## Current Lint Context - Magic number currently reported: `lib/main.dart` line 108 value `0.35`. diff --git a/BRUSHES_AND_EFFECTS.md b/BRUSHES_AND_EFFECTS.md new file mode 100644 index 00000000..1571cda1 --- /dev/null +++ b/BRUSHES_AND_EFFECTS.md @@ -0,0 +1,163 @@ +# Brushes & Effects — the tool model + +This is the single source of truth for how fPaint organizes the tools that +change pixels. Both the end-user help and the contributor rules point here. + +If you are adding, moving, or renaming a tool, read the +[Design rules for contributors](#design-rules-for-contributors) section first. + +--- + +## The core idea + +**Everything is a brush. Selection is a mask.** + +Every pixel-changing tool lives in one **Brush** section in the side panel and +is used the same way: pick it, then paint. This includes the effects — a blur +or a brightness adjustment is just a brush you paint onto the canvas. + +The interaction shape, not the algorithm, is what unifies them: + +- **Gesture tools** deposit or move pixels along your stroke (pencil, brush, + smudge, shapes, fill, eraser, text). +- **Effects** transform pixels (blur, sharpness, brightness, …). Pick one and + it **arms as a brush**; paint to apply it along your stroke. + +In the left panel an effect *is* a brush — nothing more. There is no separate +"effect mode", no mode toggle, and no per-effect "Apply" button — one flat +palette, one interaction. (Applying an effect to a whole region at once lives +on the on-canvas selection overlay; see [Whole-region apply](#whole-region-apply).) + +--- + +## The one Brush section + +The rail is a single flat grid, in this order: + +**Gesture tools** — Pencil · Brush · Smudge · Line · Rectangle · Circle · Fill · +Eraser · Text. + +**Effects** — Blur · Sharpness · Brightness · Contrast · Grayscale · +Hue/Saturation · Noise · Pixelate · Shadow · Vignette. + +| | Gesture tool | Effect | +|---|---|---| +| Backed by | `ActionType` | `SelectionEffect` | +| Tapping it | selects it as the active tool | arms it as a brush (tap again to disarm) | +| Options shown | that tool's params | brush **size** and **strength** | +| How it applies | paint the stroke | paint the stroke | + +Exactly **one tool is active at a time**: arming an effect deselects the +gesture tool (and swaps in the effect's controls); picking a gesture tool +disarms the effect. The highlight, the options panel, and the actual stroke +behavior always agree on one active tool. + +--- + +## Selection is a modifier, not a mode + +The selection is **orthogonal**: it clips any tool and gates none. + +- With a selection visible, both gesture strokes **and** effects are confined + to it. This holds even while the **selector tool** is active: an armed effect + brush paints (clipped to the selection) instead of starting a new marquee — + the brush wins, the selection just clips it. +- With **no** selection, a stroke paints freely and a whole-region apply targets + the **whole active layer** — an effect is never a silent no-op waiting for a + selection. +- Switching tools never clears the selection. The visible selection marquee is + the cue that the clip is live, and the toolbar's **Cancel Selection** button + (the selector toggle, which flips to a cancel state whenever a selection + exists) clears it. + +--- + +## Painting an effect + +An armed effect is laid down by **painting** it onto a band, the same as any +brush stroke. Painting stays **region-bounded** (cost scales with the brushed +area, not the whole canvas), so it stays off the slow full-canvas image-transfer +path. + +## Whole-region apply + +To filter an entire layer or selection at once (rather than brushing it), use +the **on-canvas selection overlay**: make a selection, then pick the effect from +the overlay popup. That opens a live-preview flow with Apply/Cancel +(`startEffectPreview` / `EffectIntensityControls`, presented in a bottom sheet on +compact layouts). The left-panel Brush section deliberately does **not** carry a +whole-region "Apply" button — in the panel, effects are brushes you paint. + +--- + +## Effect strength: bipolar vs unipolar + +Each effect declares its slider polarity: + +- **Unipolar** (`0 → 1`): Blur, Grayscale, Noise, Pixelate, Shadow, Vignette. + Zero means none; the slider only adds the effect. +- **Bipolar** (centered `− … 0 … +`): **Sharpness, Brightness, Contrast, + Hue/Saturation.** The center (0) is no change and the **sign picks the + direction** — darken/brighten, less/more contrast, hue ±, and for Sharpness, + soften (blur) vs. sharpen. Bipolar effects default to a positive value so the + brush does something out of the box; drag through 0 to reverse. + +Sharpness folds the former separate "Sharpen" and "Edge Soften" into one signed +axis. Heavy blur stays the dedicated **Blur** effect. + +--- + +## Design rules for contributors + +These are the invariants. Breaking one is a design regression, not just a code +change. + +1. **One Brush section, one interaction.** Every pixel-changing tool goes in the + single flat grid and is used by picking-then-painting. Do not add a separate + section, mode, or "effect mode" toggle. + +2. **In the panel, an effect is a brush — full stop.** A new effect must arm as + a brush (size + strength controls) and be applied by painting. Do not add a + whole-region "Apply" button to the panel; whole-region apply is the selection + overlay's job (`startEffectPreview`), keeping the panel purely a brush + palette. + +3. **One capability, one place.** A given effect must not be selectable twice. + (Blur is an effect only. The `blurBrush` `ActionType` and its pixel-brush + engine are kept in code for rendering/export/prefs and a possible fast + Apply-paint path, but it is **not** in the rail.) + +4. **Selection clips, never gates.** Any new tool must honor a visible selection + and must still work with no selection (targeting the whole active layer). + +5. **One active tool at a time.** Arming an effect must disarm the gesture tool + and vice-versa; highlight + options panel + stroke behavior must stay in + agreement. + +6. **Paint stays region-bounded.** Never route a painted effect stroke through a + full-canvas transform — that hits the CPU↔GPU transfer wall. Bound it to the + brushed region. + +7. **Guard the no-op commit.** A bipolar effect at strength 0 returns the *same* + image instance. Any commit path that disposes its captured source **must** + check `identical(processed, source)` and bail before drawing, or it crashes + with "non-genuine Image" (see `commitEffectBrushStroke`). + +8. **Localize and constant-ize.** New tool/effect labels go through + `AppLocalizations`; no inline strings or magic numbers (see + [RULES.md](RULES.md) / [AGENTS.md](AGENTS.md)). + +--- + +## Code map + +| Concern | File | +|---|---| +| The unified rail (one Brush section: grid + active-tool controls) | [lib/panels/tools/tool_family_rail.dart](lib/panels/tools/tool_family_rail.dart) | +| Rail entries + gesture order (`toolRail`, `kGestureToolOrder`) | [lib/models/tool_descriptor.dart](lib/models/tool_descriptor.dart) | +| Gesture tool labels | [lib/models/tool_family.dart](lib/models/tool_family.dart) | +| Effect definitions, polarity, `apply()` | [lib/models/selection_effect.dart](lib/models/selection_effect.dart) | +| Effect display labels | [lib/models/effect_labels.dart](lib/models/effect_labels.dart) | +| Armed effect-brush state | [lib/models/effect_brush_model.dart](lib/models/effect_brush_model.dart) | +| Gesture actions | [lib/models/user_action_drawing.dart](lib/models/user_action_drawing.dart) | +| Paint commit, overlay preview flow, selection clipping | [lib/providers/app_provider_selection_effects.dart](lib/providers/app_provider_selection_effects.dart) | diff --git a/CHANGELOG.md b/CHANGELOG.md index 6d54ca71..1614b871 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,23 @@ All notable changes to this project will be documented in this file. +## [1.9.0] - 2026-07-05 + +### Update + +- Unified brushes and effects into one experience: every pixel tool now lives in a single Brush section and works the same way — pick it, then paint. Effects such as Blur, Brightness, and Sharpness now arm as brushes with their own size and strength and are painted directly onto the canvas. +- Effects are no longer gated by a selection — with nothing selected, an effect targets the whole active layer instead of waiting for a region. +- Selection is now a persistent modifier that clips any tool: a "Clipped to selection" badge with one-tap clear appears while a selection is active, and switching tools no longer clears it. +- Streamlined the tool groups into Draw and Adjust, with Smudge now sitting beside the paint tools. +- Signed sliders for Sharpness, Brightness, Contrast, and Hue/Saturation — the center is no change and the sign picks the direction. Sharpness now folds the former Sharpen and Edge Soften into a single axis. +- Adjust paint mode now has its own brush-size slider instead of borrowing the ambient brush size. +- Reworked the magic-wand ("Edge Detection") selection with a clearer on-canvas workflow and simpler Add/Subtract selection math. + +### Add + +- Toggle to show the top 20 colors used in the current image +- Documents now remember the last selected layer when reopened + ## [1.8.9] - 2026-07-03 ### Update diff --git a/FEATURES.MD b/FEATURES.MD index 9a95a43c..36d34580 100644 --- a/FEATURES.MD +++ b/FEATURES.MD @@ -27,12 +27,33 @@ This document lists the features currently available in fPaint. - Localized UI support (via Flutter localization) - Automatic recovery/restore flow for unsaved artwork on startup +## Tools: Brushes & Effects + +Every pixel-changing tool lives in one **Brush** section and is used the same +way — pick it, then paint. **Effects are brushes too.** + +- **Gesture tools** — Pencil/Freehand, Brush, Smudge, Line, Rectangle, Circle, + Fill, Eraser, Text. +- **Effects** — Blur, Sharpness, Brightness, Contrast, Grayscale, + Hue/Saturation, Noise, Pixelate, Shadow, Vignette. Tapping one **arms it as a + brush** (with size + strength); paint it on. (To filter a whole layer or + selection at once, pick the effect from the on-canvas selection overlay.) + +The **selection** is a modifier that clips any tool and gates none. Bipolar +effects (Sharpness, Brightness, Contrast, Hue/Saturation) use a centered +slider where the sign chooses the direction (e.g. darken ↔ brighten). + +📖 Full design rules and rationale: +**[BRUSHES_AND_EFFECTS.md](BRUSHES_AND_EFFECTS.md).** + ## Drawing and Painting Tools - Freehand painting workflow with adjustable brush settings +- Smudge tool (paint-driven) - Line tool - Rectangle tool - Circle tool +- Eraser tool - Text tool - Fill tool @@ -100,7 +121,7 @@ This document lists the features currently available in fPaint. - Haptic feedback on scale and rotate gestures - Display dimensions while drawing selection rectangles - Updated icon set using SVG assets -- Effects (Blur, Sharpen, Pixelate, Grayscale, Noise, Soften, Vignette) accessible from the selector tool panel without requiring an active selection +- Effects (Blur, Sharpness, Brightness, Contrast, Grayscale, Hue/Saturation, Noise, Pixelate, Shadow, Vignette) live in the Brush section, armed as a brush and painted on; whole-layer/selection apply is available from the on-canvas selection overlay — see [BRUSHES_AND_EFFECTS.md](BRUSHES_AND_EFFECTS.md) ## Quality and Testing Support (Project Capability) diff --git a/README.md b/README.md index 76131f6f..7386815a 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,7 @@ To create a **free alternative to expensive commercial graphics software** throu ## ✨ Features - **Professional Drawing Tools** - Advanced brushes, pressure sensitivity, and precision controls +- **Brushes & Effects** - A unified tool model: *everything is a brush, selection is a mask* — even effects arm as brushes. See [BRUSHES_AND_EFFECTS.md](BRUSHES_AND_EFFECTS.md) - **Layer Management** - Full layer system with blending modes, opacity, and organization - **Selection Tools** - Magic Wand, lasso, rectangle, and advanced selection capabilities - **Color Management** - Professional color picker with palettes, gradients, and color harmony diff --git a/RULES.md b/RULES.md index b18f9506..246a9390 100644 --- a/RULES.md +++ b/RULES.md @@ -14,6 +14,21 @@ - Make sure the tests are passing. - Do not regress code coverage; improving it is encouraged. +## Tool design: Brushes & Effects + +Every pixel-changing tool lives in one **Brush** section and is used the same +way — pick it, then paint. **Effects are brushes too**: tapping one arms it as a +brush (size + strength) and you paint it on. In the panel an effect is a brush +only — no whole-region "Apply" button; whole-layer/selection apply lives on the +on-canvas selection overlay. Selection is an orthogonal modifier that clips any +tool and gates none. Do not add a separate section or mode toggle, and do not +make one capability selectable in two places. + +**Read [BRUSHES_AND_EFFECTS.md](BRUSHES_AND_EFFECTS.md) before adding, moving, +or renaming any tool or effect** — it holds the full invariants (one active +tool at a time, bipolar-effect no-op commit guard, region-bounded painting, +etc.). + ## Platform UX - The app is used primarily on desktop with the Side Panel visible. Effect controls, intensity sliders, and Apply/Cancel actions live in the Side Panel for that context. diff --git a/assets/icons/selector_wand.svg b/assets/icons/selector_wand.svg index 88888162..e73cc0f2 100644 --- a/assets/icons/selector_wand.svg +++ b/assets/icons/selector_wand.svg @@ -1,4 +1,7 @@ - - + + + + + \ No newline at end of file diff --git a/assets/icons/smudge.svg b/assets/icons/smudge.svg new file mode 100644 index 00000000..878eb054 --- /dev/null +++ b/assets/icons/smudge.svg @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/coverage/lcov.info b/coverage/lcov.info index d2f6f89f..c68fea49 100644 --- a/coverage/lcov.info +++ b/coverage/lcov.info @@ -87,29 +87,29 @@ LF:84 LH:82 end_of_record SF:lib/l10n/app_localizations.dart -DA:65,96 -DA:69,25 -DA:70,25 -DA:1315,1 -DA:1317,32 -DA:1319,64 -DA:1322,31 -DA:1323,93 -DA:1325,4 -DA:1329,32 -DA:1331,32 -DA:1332,32 -DA:1333,32 -DA:1334,1 -DA:1335,1 -DA:1336,1 -DA:1337,1 -DA:1340,0 +DA:65,99 +DA:69,26 +DA:70,26 +DA:1303,1 +DA:1305,33 +DA:1307,66 +DA:1310,31 +DA:1311,93 +DA:1313,4 +DA:1317,33 +DA:1319,33 +DA:1320,33 +DA:1321,33 +DA:1322,1 +DA:1323,1 +DA:1324,1 +DA:1325,1 +DA:1328,0 LF:18 LH:17 end_of_record SF:lib/l10n/app_localizations_en.dart -DA:9,64 +DA:9,66 DA:11,3 DA:14,2 DA:17,3 @@ -146,15 +146,15 @@ DA:117,3 DA:120,2 DA:123,2 DA:126,1 -DA:129,3 +DA:129,1 DA:132,3 -DA:135,1 +DA:135,3 DA:138,4 -DA:141,2 -DA:143,2 +DA:141,1 +DA:143,1 DA:146,2 DA:149,2 -DA:152,6 +DA:152,7 DA:155,1 DA:158,4 DA:161,4 @@ -174,163 +174,161 @@ DA:196,1 DA:199,1 DA:202,1 DA:205,1 -DA:208,3 +DA:208,4 DA:211,2 DA:213,2 DA:216,2 -DA:219,5 -DA:222,3 -DA:225,3 -DA:228,4 -DA:231,3 +DA:219,8 +DA:222,5 +DA:225,5 +DA:228,6 +DA:231,5 DA:234,2 -DA:237,5 -DA:240,5 -DA:243,5 -DA:246,3 -DA:249,4 +DA:237,7 +DA:240,7 +DA:243,6 +DA:246,5 +DA:249,6 DA:252,2 -DA:255,4 +DA:255,6 DA:258,4 -DA:261,4 -DA:264,1 +DA:261,1 +DA:263,1 DA:266,1 -DA:269,1 +DA:268,1 DA:271,1 DA:274,1 -DA:277,1 -DA:280,3 -DA:283,4 -DA:286,1 +DA:277,3 +DA:280,4 +DA:283,1 +DA:285,1 DA:288,1 -DA:291,1 +DA:290,1 DA:293,1 -DA:296,1 -DA:298,1 -DA:301,0 -DA:304,3 +DA:295,1 +DA:298,0 +DA:301,3 +DA:304,4 DA:307,4 -DA:310,4 -DA:313,1 -DA:316,2 -DA:319,4 +DA:310,1 +DA:313,2 +DA:316,4 +DA:319,1 DA:322,1 -DA:325,1 -DA:328,2 -DA:331,3 +DA:325,2 +DA:328,3 +DA:331,2 DA:334,2 -DA:337,2 -DA:340,1 -DA:343,3 -DA:346,2 -DA:349,4 -DA:352,2 +DA:337,1 +DA:340,3 +DA:343,2 +DA:346,4 +DA:349,2 +DA:352,4 DA:355,4 -DA:358,4 -DA:361,2 -DA:364,1 -DA:367,3 -DA:371,3 -DA:374,4 +DA:358,2 +DA:361,1 +DA:364,3 +DA:368,3 +DA:371,4 +DA:374,3 DA:377,3 DA:380,3 DA:383,3 DA:386,3 DA:389,3 -DA:392,3 -DA:395,2 -DA:398,3 -DA:401,1 -DA:404,3 +DA:392,2 +DA:395,3 +DA:398,1 +DA:401,3 +DA:404,2 DA:407,2 DA:410,2 -DA:413,2 +DA:413,1 DA:416,1 -DA:419,1 +DA:419,2 DA:422,2 -DA:425,2 -DA:428,1 -DA:430,1 -DA:433,3 -DA:436,2 -DA:439,3 -DA:442,2 -DA:445,3 -DA:448,2 -DA:451,1 -DA:454,2 -DA:457,3 -DA:460,1 -DA:463,5 -DA:466,3 -DA:469,1 -DA:472,3 -DA:475,2 -DA:478,4 -DA:481,2 -DA:484,3 +DA:425,1 +DA:427,1 +DA:430,3 +DA:433,2 +DA:436,3 +DA:439,2 +DA:442,3 +DA:445,2 +DA:448,1 +DA:451,2 +DA:454,3 +DA:457,1 +DA:460,5 +DA:463,3 +DA:466,1 +DA:469,3 +DA:472,2 +DA:475,4 +DA:478,2 +DA:481,3 +DA:483,3 DA:486,3 -DA:489,3 -DA:492,1 -DA:495,2 -DA:498,5 -DA:501,4 -DA:504,3 -DA:507,2 +DA:489,1 +DA:492,2 +DA:495,6 +DA:498,4 +DA:501,3 +DA:504,2 +DA:506,2 DA:509,2 DA:512,2 DA:515,2 -DA:518,2 -DA:521,5 -DA:524,1 -DA:527,4 +DA:518,6 +DA:521,1 +DA:524,4 +DA:526,4 DA:529,4 -DA:532,4 -DA:535,4 -DA:538,3 +DA:532,3 +DA:535,3 +DA:538,4 DA:541,3 -DA:544,4 +DA:544,3 DA:547,3 -DA:550,3 +DA:550,1 DA:553,3 -DA:556,1 -DA:559,3 -DA:562,4 -DA:565,4 -DA:568,3 +DA:556,4 +DA:559,4 +DA:562,0 +DA:565,5 +DA:568,6 DA:571,4 DA:574,5 -DA:577,4 -DA:580,4 -DA:583,3 -DA:586,3 -DA:589,4 -DA:592,4 -DA:595,5 -DA:598,3 -DA:601,4 -DA:604,4 -DA:607,4 -DA:610,3 -DA:613,5 +DA:577,3 +DA:580,3 +DA:583,4 +DA:586,4 +DA:589,6 +DA:592,3 +DA:595,4 +DA:598,5 +DA:601,5 +DA:604,3 +DA:607,6 +DA:610,4 +DA:613,4 DA:616,4 -DA:619,4 -DA:622,4 -DA:625,4 -DA:628,3 -DA:631,4 -DA:634,4 -DA:636,4 -DA:639,5 -DA:642,4 -DA:645,1 -DA:648,1 +DA:619,5 +DA:622,3 +DA:625,5 +DA:628,4 +DA:630,4 +DA:633,6 +DA:636,5 +DA:639,1 +DA:642,1 +DA:646,3 +DA:649,3 DA:652,3 -DA:655,3 -DA:658,3 -DA:661,2 -LF:220 -LH:219 +DA:655,2 +LF:218 +LH:216 end_of_record SF:lib/l10n/app_localizations_es.dart DA:9,2 @@ -369,8 +367,8 @@ DA:112,1 DA:115,1 DA:118,1 DA:121,1 -DA:124,1 -DA:127,0 +DA:124,0 +DA:127,1 DA:130,0 DA:133,0 DA:136,1 @@ -417,33 +415,33 @@ DA:250,0 DA:253,1 DA:256,1 DA:259,1 -DA:262,1 +DA:261,1 DA:264,1 -DA:267,1 +DA:266,1 DA:269,1 DA:272,1 DA:275,1 DA:278,1 DA:281,1 -DA:284,1 +DA:283,1 DA:286,1 -DA:289,1 +DA:288,1 DA:291,1 -DA:294,1 -DA:296,1 -DA:299,0 +DA:293,1 +DA:296,0 +DA:299,1 DA:302,1 DA:305,1 -DA:308,1 -DA:311,0 +DA:308,0 +DA:311,1 DA:314,1 DA:317,1 -DA:320,1 -DA:323,0 -DA:326,1 +DA:320,0 +DA:323,1 +DA:326,0 DA:329,0 DA:332,0 -DA:335,0 +DA:335,1 DA:338,1 DA:341,1 DA:344,1 @@ -453,7 +451,7 @@ DA:353,1 DA:356,1 DA:359,1 DA:362,1 -DA:365,1 +DA:366,1 DA:369,1 DA:372,1 DA:375,1 @@ -473,7 +471,7 @@ DA:414,1 DA:417,1 DA:420,1 DA:423,1 -DA:426,1 +DA:425,1 DA:428,1 DA:431,1 DA:434,1 @@ -492,36 +490,36 @@ DA:470,1 DA:473,1 DA:476,1 DA:479,1 -DA:482,1 +DA:481,1 DA:484,1 -DA:487,1 -DA:490,0 +DA:487,0 +DA:490,1 DA:493,1 DA:496,1 DA:499,1 DA:502,1 -DA:505,1 +DA:504,1 DA:507,1 DA:510,1 DA:513,1 DA:516,1 DA:519,1 DA:522,1 -DA:525,1 +DA:524,1 DA:527,1 DA:530,1 DA:533,1 DA:536,1 -DA:539,1 -DA:542,1 +DA:539,0 +DA:542,0 DA:545,0 -DA:548,0 +DA:548,1 DA:551,0 DA:554,1 -DA:557,0 -DA:560,1 +DA:557,1 +DA:560,0 DA:563,1 -DA:566,0 +DA:566,1 DA:569,1 DA:572,1 DA:575,1 @@ -542,19 +540,17 @@ DA:617,1 DA:620,1 DA:623,1 DA:626,1 -DA:629,1 -DA:632,1 -DA:634,1 +DA:628,1 +DA:631,1 +DA:634,0 DA:637,1 -DA:640,0 -DA:643,1 -DA:646,1 +DA:640,1 +DA:644,1 +DA:647,1 DA:650,1 DA:653,1 -DA:656,1 -DA:659,1 -LF:220 -LH:199 +LF:218 +LH:197 end_of_record SF:lib/l10n/app_localizations_fr.dart DA:9,2 @@ -593,8 +589,8 @@ DA:115,1 DA:118,1 DA:121,1 DA:124,1 -DA:127,1 -DA:130,0 +DA:127,0 +DA:130,1 DA:133,0 DA:136,0 DA:139,1 @@ -641,33 +637,33 @@ DA:253,0 DA:256,1 DA:259,1 DA:262,1 -DA:265,1 +DA:264,1 DA:267,1 -DA:270,1 +DA:269,1 DA:272,1 DA:275,1 DA:278,1 DA:281,1 DA:284,1 -DA:287,1 +DA:286,1 DA:289,1 -DA:292,1 +DA:291,1 DA:294,1 -DA:297,1 -DA:299,1 -DA:302,0 +DA:296,1 +DA:299,0 +DA:302,1 DA:305,1 DA:308,1 -DA:311,1 -DA:314,0 +DA:311,0 +DA:314,1 DA:317,1 DA:320,1 -DA:323,1 -DA:326,0 -DA:329,1 +DA:323,0 +DA:326,1 +DA:329,0 DA:332,0 DA:335,0 -DA:338,0 +DA:338,1 DA:341,1 DA:344,1 DA:347,1 @@ -675,9 +671,9 @@ DA:350,1 DA:353,1 DA:356,1 DA:359,1 -DA:362,1 +DA:363,1 DA:366,1 -DA:369,1 +DA:370,1 DA:373,1 DA:376,1 DA:379,1 @@ -697,7 +693,7 @@ DA:418,1 DA:421,1 DA:424,1 DA:427,1 -DA:430,1 +DA:429,1 DA:432,1 DA:435,1 DA:438,1 @@ -716,36 +712,36 @@ DA:474,1 DA:477,1 DA:480,1 DA:483,1 -DA:486,1 +DA:485,1 DA:488,1 -DA:491,1 -DA:494,0 +DA:491,0 +DA:494,1 DA:497,1 DA:500,1 DA:503,1 DA:506,1 -DA:509,1 +DA:508,1 DA:511,1 DA:514,1 DA:517,1 DA:520,1 DA:523,1 DA:526,1 -DA:529,1 +DA:528,1 DA:531,1 DA:534,1 DA:537,1 DA:540,1 -DA:543,1 -DA:546,1 +DA:543,0 +DA:546,0 DA:549,0 -DA:552,0 +DA:552,1 DA:555,0 DA:558,1 -DA:561,0 -DA:564,1 +DA:561,1 +DA:564,0 DA:567,1 -DA:570,0 +DA:570,1 DA:573,1 DA:576,1 DA:579,1 @@ -766,26 +762,24 @@ DA:621,1 DA:624,1 DA:627,1 DA:630,1 -DA:633,1 -DA:636,1 -DA:638,1 +DA:632,1 +DA:635,1 +DA:638,0 DA:641,1 -DA:644,0 -DA:647,1 -DA:650,1 +DA:644,1 +DA:648,1 +DA:651,1 DA:654,1 DA:657,1 -DA:660,1 -DA:663,1 -LF:220 -LH:199 +LF:218 +LH:197 end_of_record SF:lib/models/selector_model.dart DA:11,5 DA:12,5 -DA:15,4 -DA:16,4 -DA:17,32 +DA:15,5 +DA:16,5 +DA:17,40 DA:31,6 DA:34,4 DA:36,4 @@ -866,12 +860,12 @@ DA:186,3 DA:187,4 DA:189,2 DA:193,1 -DA:200,4 -DA:201,4 -DA:205,8 +DA:200,5 +DA:201,5 +DA:205,10 DA:206,0 -DA:210,4 -DA:211,4 +DA:210,5 +DA:211,5 DA:214,2 DA:215,2 DA:216,1 @@ -893,7 +887,7 @@ DA:244,0 DA:245,0 DA:248,0 DA:250,0 -DA:254,8 +DA:254,10 DA:258,2 DA:263,4 DA:268,2 @@ -941,44 +935,44 @@ SF:lib/models/user_action_drawing.dart DA:12,21 DA:56,1 DA:58,2 -DA:86,6 -DA:87,18 +DA:86,7 +DA:87,21 DA:90,1 DA:92,1 -DA:109,18 -DA:111,6 -DA:112,6 -DA:113,6 -DA:116,6 -DA:117,6 -DA:118,6 -DA:119,6 -DA:122,6 -DA:123,6 -DA:126,6 -DA:127,6 -DA:130,6 -DA:131,6 -DA:132,6 -DA:133,6 -DA:136,6 -DA:137,6 -DA:138,6 -DA:139,6 -DA:140,6 -DA:143,6 -DA:144,6 -DA:145,6 -DA:146,6 -DA:147,6 -DA:150,6 -DA:151,6 -DA:152,6 -DA:155,6 -DA:161,6 -DA:164,6 -DA:165,6 -DA:166,6 +DA:109,21 +DA:111,7 +DA:112,7 +DA:113,7 +DA:116,7 +DA:117,7 +DA:118,7 +DA:119,7 +DA:122,7 +DA:123,7 +DA:126,7 +DA:127,7 +DA:130,7 +DA:131,7 +DA:132,7 +DA:133,7 +DA:136,7 +DA:137,7 +DA:138,7 +DA:139,7 +DA:140,7 +DA:143,7 +DA:144,7 +DA:145,7 +DA:146,7 +DA:147,7 +DA:150,7 +DA:151,7 +DA:152,7 +DA:155,7 +DA:161,7 +DA:164,7 +DA:165,7 +DA:166,7 LF:41 LH:41 end_of_record @@ -989,392 +983,429 @@ DA:19,3 DA:25,9 DA:28,9 DA:31,8 -DA:68,6 -DA:71,16 -DA:74,14 -DA:77,2 -DA:80,0 -DA:83,12 -DA:86,12 -DA:89,10 -DA:94,8 -DA:99,12 -DA:102,6 -DA:105,9 -DA:108,20 -DA:109,20 -DA:110,20 -DA:114,1 -DA:117,1 -DA:118,2 -DA:122,4 -DA:123,4 -DA:124,8 -DA:128,1 -DA:129,2 -DA:130,3 -DA:134,0 -DA:135,0 -DA:136,0 -DA:140,6 -DA:141,6 -DA:142,18 -DA:146,3 +DA:80,6 +DA:83,18 +DA:86,14 +DA:89,2 +DA:92,0 +DA:95,12 +DA:98,14 +DA:101,10 +DA:106,8 +DA:111,12 +DA:114,6 +DA:117,9 +DA:122,6 +DA:125,20 +DA:126,20 +DA:127,20 +DA:131,1 +DA:134,1 +DA:135,2 +DA:139,4 +DA:140,4 +DA:141,8 +DA:145,1 +DA:146,2 DA:147,3 -DA:148,9 -DA:152,3 -DA:155,3 -DA:156,6 -DA:157,3 -DA:161,2 -DA:164,2 -DA:165,4 -DA:166,2 +DA:151,0 +DA:152,0 +DA:153,0 +DA:157,6 +DA:158,6 +DA:159,18 +DA:163,3 +DA:164,3 +DA:165,9 +DA:169,3 DA:172,3 -DA:173,3 +DA:173,6 DA:174,3 -DA:176,2 -DA:177,2 -DA:180,3 -DA:181,3 -DA:185,3 -DA:186,3 -DA:187,2 -DA:188,3 -DA:192,2 -DA:196,2 -DA:197,4 -DA:201,2 -DA:202,4 -DA:210,2 -DA:211,4 -DA:212,4 -DA:213,6 -DA:214,3 -DA:216,2 -DA:217,2 -DA:218,4 -DA:220,2 -DA:222,2 -DA:224,2 -DA:225,2 -DA:229,0 -DA:230,0 -DA:231,0 -DA:232,0 -DA:233,0 -DA:234,0 -DA:235,0 +DA:178,2 +DA:181,2 +DA:182,4 +DA:183,2 +DA:189,3 +DA:190,3 +DA:191,3 +DA:193,2 +DA:194,2 +DA:197,3 +DA:198,3 +DA:202,3 +DA:203,3 +DA:204,2 +DA:205,3 +DA:209,2 +DA:213,2 +DA:214,4 +DA:218,2 +DA:219,4 +DA:227,2 +DA:228,4 +DA:229,4 +DA:230,6 +DA:231,3 +DA:233,2 +DA:234,2 +DA:235,4 +DA:237,2 DA:239,2 -DA:240,4 -DA:241,6 -DA:246,2 -DA:247,2 -DA:248,4 +DA:241,2 +DA:242,2 +DA:246,0 +DA:247,0 +DA:248,0 DA:249,0 -DA:253,2 -DA:254,8 -DA:255,2 -DA:256,2 -DA:265,23 -DA:266,23 -DA:270,23 -DA:271,19 -DA:275,46 -DA:277,23 -DA:278,20 -DA:280,21 -DA:284,23 -DA:286,23 -DA:288,2 -DA:293,23 -DA:294,43 -DA:296,60 -DA:299,60 -DA:301,60 -DA:303,60 -DA:306,100 -DA:308,100 -DA:310,60 -DA:312,60 -DA:314,60 -DA:316,80 -DA:317,60 -DA:318,20 -DA:319,20 -DA:322,40 -DA:323,20 -DA:324,2 -DA:329,20 -DA:333,20 -DA:334,81 -DA:335,60 -DA:337,22 -DA:338,2 -DA:339,2 -DA:340,2 -DA:342,2 -DA:343,2 -DA:344,2 -DA:345,4 -DA:349,20 -DA:356,2 -DA:360,2 -DA:367,2 -DA:374,2 -DA:375,2 -DA:376,2 -DA:377,1 -DA:378,1 -DA:383,2 -DA:384,2 -DA:385,1 -DA:386,1 -DA:391,2 +DA:250,0 +DA:251,0 +DA:252,0 +DA:261,2 +DA:265,2 +DA:266,5 +DA:267,4 +DA:270,3 +DA:272,2 +DA:273,2 +DA:274,2 +DA:276,2 +DA:277,8 +DA:278,2 +DA:280,12 +DA:285,20 +DA:289,40 +DA:290,80 +DA:291,22 +DA:292,2 +DA:294,3 +DA:300,2 +DA:301,4 +DA:302,6 +DA:307,2 +DA:308,2 +DA:309,4 +DA:310,0 +DA:314,2 +DA:315,8 +DA:316,2 +DA:317,2 +DA:326,23 +DA:327,23 +DA:331,23 +DA:332,19 +DA:336,46 +DA:338,23 +DA:339,20 +DA:341,21 +DA:345,23 +DA:347,23 +DA:349,2 +DA:354,23 +DA:355,43 +DA:357,60 +DA:360,60 +DA:362,60 +DA:364,60 +DA:367,100 +DA:369,100 +DA:371,60 +DA:373,60 +DA:375,60 +DA:377,80 +DA:378,60 +DA:379,20 +DA:380,20 +DA:383,40 +DA:384,20 +DA:385,2 +DA:388,20 +DA:389,60 +DA:390,60 +DA:395,20 DA:399,20 -DA:409,4 -LF:150 -LH:138 +DA:400,81 +DA:401,60 +DA:403,22 +DA:404,2 +DA:405,2 +DA:406,2 +DA:408,2 +DA:409,2 +DA:410,2 +DA:411,4 +DA:415,20 +DA:422,2 +DA:426,2 +DA:433,2 +DA:440,2 +DA:441,2 +DA:442,2 +DA:443,1 +DA:444,1 +DA:449,2 +DA:450,2 +DA:451,1 +DA:452,1 +DA:457,2 +DA:465,20 +DA:475,4 +LF:172 +LH:160 end_of_record SF:lib/providers/app_provider.dart -DA:32,19 -DA:36,0 -DA:37,16 +DA:33,19 +DA:37,0 DA:38,16 -DA:39,57 -DA:40,19 -DA:67,19 -DA:68,38 -DA:69,76 -DA:70,38 -DA:71,38 -DA:72,19 -DA:73,38 -DA:77,3 -DA:80,3 -DA:83,1 -DA:84,2 -DA:85,1 -DA:91,16 -DA:96,2 -DA:101,8 -DA:108,7 -DA:111,7 -DA:114,10 -DA:117,8 -DA:120,6 -DA:123,12 -DA:126,8 -DA:128,12 -DA:130,4 -DA:131,4 -DA:138,8 -DA:140,9 -DA:141,3 -DA:143,3 -DA:147,6 -DA:150,3 -DA:151,9 -DA:152,4 -DA:154,5 -DA:156,15 -DA:157,6 -DA:158,10 -DA:159,10 -DA:160,10 -DA:161,10 -DA:162,10 -DA:163,5 -DA:166,4 -DA:167,4 -DA:171,7 -DA:172,14 -DA:176,11 -DA:177,22 -DA:181,2 -DA:182,4 -DA:186,3 -DA:187,6 -DA:188,2 -DA:193,4 -DA:194,8 -DA:210,36 -DA:213,7 -DA:216,7 -DA:220,14 -DA:221,6 -DA:224,14 -DA:225,14 -DA:226,28 -DA:227,12 +DA:39,16 +DA:40,57 +DA:41,19 +DA:73,19 +DA:74,38 +DA:75,76 +DA:76,38 +DA:77,38 +DA:78,19 +DA:79,38 +DA:83,3 +DA:86,3 +DA:89,1 +DA:90,2 +DA:91,1 +DA:97,16 +DA:102,2 +DA:107,8 +DA:114,7 +DA:117,7 +DA:120,10 +DA:123,14 +DA:126,6 +DA:129,12 +DA:132,8 +DA:134,12 +DA:136,4 +DA:137,4 +DA:144,8 +DA:146,9 +DA:147,3 +DA:149,3 +DA:153,6 +DA:156,3 +DA:157,9 +DA:158,4 +DA:160,5 +DA:162,15 +DA:163,6 +DA:164,10 +DA:165,10 +DA:166,10 +DA:167,10 +DA:168,10 +DA:169,5 +DA:172,4 +DA:173,4 +DA:177,8 +DA:178,16 +DA:182,12 +DA:183,24 +DA:187,2 +DA:188,4 +DA:192,3 +DA:193,6 +DA:194,2 +DA:199,4 +DA:200,8 +DA:216,40 +DA:219,7 +DA:222,7 +DA:226,14 +DA:227,6 DA:230,14 -DA:235,5 -DA:236,10 -DA:237,10 -DA:238,5 -DA:242,3 -DA:243,6 -DA:244,6 -DA:245,3 -DA:257,5 -DA:258,5 -DA:262,2 -DA:263,4 -DA:264,4 -DA:268,11 -DA:269,22 -DA:273,10 -DA:274,10 -DA:277,11 -DA:278,10 -DA:281,11 -DA:283,31 -DA:284,2 -DA:285,2 -DA:288,11 -DA:289,22 -DA:292,11 -DA:293,20 -DA:297,20 -DA:298,10 -DA:301,11 -DA:305,20 -DA:311,21 -DA:314,8 -DA:317,4 -DA:320,4 -DA:323,4 -DA:326,10 -DA:329,4 -DA:332,4 +DA:231,14 +DA:232,28 +DA:233,12 +DA:236,14 +DA:241,5 +DA:242,10 +DA:243,10 +DA:244,5 +DA:248,3 +DA:249,6 +DA:250,6 +DA:251,3 +DA:263,5 +DA:264,5 +DA:268,2 +DA:269,4 +DA:270,4 +DA:274,12 +DA:275,24 +DA:279,24 +DA:281,4 +DA:286,11 +DA:287,11 +DA:290,12 +DA:291,11 +DA:294,12 +DA:296,34 +DA:297,2 +DA:298,2 +DA:301,12 +DA:302,24 +DA:305,12 +DA:306,22 +DA:310,22 +DA:311,11 +DA:314,12 +DA:318,22 +DA:324,24 +DA:327,8 +DA:330,4 +DA:333,4 DA:336,4 -DA:341,2 +DA:339,10 DA:342,4 -DA:345,2 -DA:346,2 -DA:352,2 -DA:356,4 -DA:357,2 +DA:345,4 +DA:349,4 +DA:354,2 +DA:355,4 DA:358,2 -DA:363,2 -DA:364,2 -DA:367,2 -DA:368,2 -DA:369,2 -DA:373,3 -DA:374,6 -DA:375,3 -DA:376,3 -DA:377,3 -DA:380,3 -DA:381,4 -DA:382,3 -DA:383,3 -DA:384,3 -DA:385,9 +DA:359,2 +DA:365,2 +DA:369,4 +DA:370,2 +DA:371,2 +DA:376,2 +DA:377,2 +DA:380,2 +DA:381,2 +DA:382,2 +DA:386,3 +DA:387,6 +DA:388,3 DA:389,3 -DA:393,5 -DA:394,3 +DA:390,3 +DA:393,3 +DA:394,4 DA:395,3 DA:396,3 -DA:399,3 -DA:400,3 -DA:403,5 -DA:404,3 -DA:405,3 -DA:406,3 -DA:410,3 -DA:411,3 -DA:415,1 -DA:416,1 -DA:417,1 -DA:418,2 -DA:419,0 -DA:420,0 -DA:427,1 -DA:428,1 -DA:429,1 -DA:430,2 -DA:432,0 -DA:433,0 -DA:438,1 -DA:439,1 -DA:447,10 +DA:397,3 +DA:398,9 +DA:402,3 +DA:406,5 +DA:407,3 +DA:408,3 +DA:409,3 +DA:412,3 +DA:413,3 +DA:416,5 +DA:417,3 +DA:418,3 +DA:419,3 +DA:423,3 +DA:424,3 +DA:428,10 +DA:431,2 +DA:434,2 +DA:437,2 +DA:438,2 +DA:439,2 +DA:440,2 +DA:444,4 +DA:445,4 +DA:448,2 +DA:449,2 DA:450,2 -DA:451,2 -DA:452,2 -DA:453,2 -DA:460,18 -DA:463,5 -DA:464,10 -DA:465,5 -DA:466,5 -DA:473,15 -DA:476,2 -DA:477,4 -DA:478,2 -DA:479,2 -DA:487,10 +DA:454,1 +DA:455,1 +DA:456,1 +DA:457,2 +DA:458,0 +DA:459,0 +DA:466,1 +DA:467,1 +DA:468,1 +DA:469,2 +DA:471,0 +DA:472,0 +DA:477,1 +DA:478,1 +DA:486,10 +DA:489,2 DA:490,2 -DA:491,6 +DA:491,2 DA:492,2 -DA:493,2 -DA:503,4 -DA:504,4 -DA:505,4 -DA:509,1 -DA:510,3 -DA:511,3 -DA:512,3 -DA:513,3 -DA:514,3 -DA:515,1 -DA:516,1 -DA:520,1 -DA:521,2 -DA:528,14 -DA:531,10 -DA:532,20 -DA:533,10 -DA:535,0 -DA:544,14 -DA:547,10 -DA:548,20 -DA:549,10 -DA:551,0 -DA:568,15 -DA:583,2 -DA:584,4 -DA:585,2 -DA:586,2 -DA:590,1 -DA:591,2 -DA:592,1 -DA:593,1 -DA:597,1 -DA:598,2 -DA:599,1 -DA:600,1 -DA:604,2 -DA:605,4 -DA:606,2 -DA:607,2 -DA:611,1 -DA:612,2 -DA:613,1 -DA:614,1 -DA:618,0 -DA:619,0 -DA:620,0 -DA:621,0 -DA:625,0 -DA:626,0 -DA:627,0 -DA:628,0 -DA:635,15 -DA:636,15 -LF:236 -LH:221 +DA:499,18 +DA:502,5 +DA:503,10 +DA:504,5 +DA:505,5 +DA:512,15 +DA:515,2 +DA:516,4 +DA:517,2 +DA:518,2 +DA:526,10 +DA:529,3 +DA:530,9 +DA:531,3 +DA:532,3 +DA:542,4 +DA:543,4 +DA:544,4 +DA:548,1 +DA:549,3 +DA:550,3 +DA:551,3 +DA:552,3 +DA:553,3 +DA:554,1 +DA:555,1 +DA:559,1 +DA:560,2 +DA:567,14 +DA:570,11 +DA:571,22 +DA:572,11 +DA:574,0 +DA:583,14 +DA:586,11 +DA:587,22 +DA:588,11 +DA:590,0 +DA:607,15 +DA:625,2 +DA:626,4 +DA:627,2 +DA:628,2 +DA:632,1 +DA:633,2 +DA:634,1 +DA:635,1 +DA:639,1 +DA:640,2 +DA:641,1 +DA:642,1 +DA:646,2 +DA:647,4 +DA:648,2 +DA:649,2 +DA:656,39 +DA:659,1 +DA:660,2 +DA:661,1 +DA:662,1 +DA:666,0 +DA:667,0 +DA:668,0 +DA:669,0 +DA:673,0 +DA:674,0 +DA:675,0 +DA:676,0 +DA:683,16 +DA:684,16 +LF:251 +LH:236 end_of_record SF:lib/providers/app_provider_selection_effects.dart DA:5,2 @@ -1415,45 +1446,113 @@ DA:93,2 DA:96,2 DA:98,2 DA:99,2 -DA:104,2 DA:109,2 +DA:110,8 DA:113,2 -DA:115,2 +DA:119,6 DA:120,6 -DA:121,6 -DA:123,4 -DA:129,2 -DA:132,2 -DA:134,2 -DA:138,1 -DA:139,1 -DA:143,0 -DA:144,0 -DA:148,2 -DA:149,2 -DA:154,2 -DA:156,4 -DA:157,2 -DA:159,2 -DA:160,4 +DA:124,3 +DA:126,5 +DA:127,2 +DA:138,2 +DA:143,2 +DA:147,2 +DA:152,4 +DA:158,2 DA:161,2 -DA:163,10 -DA:166,2 -DA:170,7 -DA:171,14 -DA:175,0 -DA:176,0 -DA:177,0 -DA:178,0 -DA:182,2 +DA:163,2 +DA:167,1 +DA:168,1 +DA:172,0 +DA:173,0 +DA:177,2 +DA:178,2 DA:183,2 -DA:188,4 -DA:189,2 -DA:191,8 -DA:195,4 -DA:196,2 -LF:75 -LH:68 +DA:185,4 +DA:186,2 +DA:188,2 +DA:189,4 +DA:190,2 +DA:192,10 +DA:195,2 +DA:199,7 +DA:200,14 +DA:204,0 +DA:205,0 +DA:206,0 +DA:207,0 +DA:211,2 +DA:212,2 +DA:217,4 +DA:218,2 +DA:220,8 +DA:224,4 +DA:225,2 +DA:229,3 +DA:230,6 +DA:231,0 +DA:232,0 +DA:234,6 +DA:235,3 +DA:236,3 +DA:240,2 +DA:241,4 +DA:242,2 +DA:243,2 +DA:247,1 +DA:248,2 +DA:249,1 +DA:258,1 +DA:267,3 +DA:271,1 +DA:272,1 +DA:276,4 +DA:277,4 +DA:278,4 +DA:279,4 +DA:280,4 +DA:281,4 +DA:282,1 +DA:283,1 +DA:284,2 +DA:288,5 +DA:289,4 +DA:290,1 +DA:296,1 +DA:299,1 +DA:301,3 +DA:302,1 +DA:306,1 +DA:309,1 +DA:310,1 +DA:312,0 +DA:314,1 +DA:315,2 +DA:316,1 +DA:319,1 +DA:321,2 +DA:322,1 +DA:323,1 +DA:324,3 +DA:325,1 +DA:327,1 +DA:328,3 +DA:329,1 +DA:332,1 +DA:339,1 +DA:344,1 +DA:345,2 +DA:346,3 +DA:348,4 +DA:349,2 +DA:350,3 +DA:351,1 +DA:352,1 +DA:353,1 +DA:356,6 +DA:357,6 +LF:143 +LH:133 end_of_record SF:lib/providers/app_provider_selection.dart DA:26,2 @@ -1464,394 +1563,407 @@ DA:35,2 DA:36,2 DA:37,2 DA:40,2 -DA:44,2 -DA:45,2 -DA:49,4 -DA:50,2 -DA:51,2 -DA:53,2 -DA:54,6 +DA:41,2 +DA:48,3 +DA:49,3 +DA:52,4 +DA:56,2 DA:57,2 -DA:62,0 -DA:63,0 -DA:67,0 -DA:68,0 -DA:72,0 -DA:73,0 -DA:78,0 -DA:82,4 -DA:83,4 -DA:87,0 -DA:88,0 -DA:92,4 -DA:93,4 -DA:97,4 -DA:102,1 -DA:104,1 -DA:106,1 -DA:108,2 -DA:112,2 -DA:113,1 -DA:117,2 -DA:118,2 -DA:122,2 +DA:61,4 +DA:62,2 +DA:63,2 +DA:65,2 +DA:66,6 +DA:69,2 +DA:74,0 +DA:75,0 +DA:79,0 +DA:80,0 +DA:84,0 +DA:85,0 +DA:90,0 +DA:94,4 +DA:95,4 +DA:99,0 +DA:100,0 +DA:104,4 +DA:105,4 +DA:109,4 +DA:114,1 +DA:116,1 +DA:118,1 +DA:120,2 DA:124,2 -DA:125,2 -DA:126,2 -DA:128,2 -DA:130,4 -DA:131,4 -DA:132,4 -DA:133,2 +DA:125,1 +DA:129,2 +DA:130,2 DA:134,2 -DA:138,1 -DA:139,1 -DA:144,1 -DA:156,4 -DA:157,4 -DA:159,12 -DA:160,4 -DA:164,20 -DA:166,4 -DA:167,8 -DA:168,8 +DA:136,2 +DA:137,2 +DA:138,2 +DA:140,2 +DA:142,4 +DA:143,4 +DA:144,4 +DA:145,2 +DA:146,2 +DA:150,1 +DA:151,1 +DA:156,1 +DA:168,4 DA:169,4 -DA:170,20 DA:171,12 -DA:172,8 -DA:179,4 +DA:172,4 +DA:176,20 +DA:178,4 +DA:179,8 DA:180,8 DA:181,4 -DA:182,8 -DA:183,8 +DA:182,20 +DA:183,12 DA:184,8 -DA:185,4 -DA:186,4 -DA:187,4 -DA:188,4 +DA:191,4 +DA:192,8 DA:193,4 +DA:194,8 +DA:195,8 +DA:196,8 +DA:197,4 +DA:198,4 DA:199,4 -DA:200,16 -DA:201,16 -DA:205,1 -DA:206,4 -DA:207,4 -DA:210,8 -DA:216,4 -DA:220,4 -DA:223,4 -DA:224,8 -DA:229,4 -DA:230,4 -DA:233,4 -DA:235,8 -DA:243,4 -DA:250,4 -DA:256,4 -DA:260,4 -DA:265,8 -DA:270,4 -DA:274,4 +DA:200,4 +DA:205,4 +DA:211,4 +DA:212,16 +DA:213,16 +DA:217,1 +DA:218,4 +DA:219,4 +DA:222,8 +DA:228,4 +DA:232,4 +DA:235,4 +DA:236,8 +DA:241,4 +DA:242,4 +DA:245,4 +DA:247,8 +DA:255,4 +DA:262,4 +DA:268,4 +DA:272,4 DA:277,8 DA:282,4 -DA:284,8 -DA:285,8 -DA:286,8 -DA:289,4 -DA:290,12 -DA:291,12 -DA:292,8 -DA:293,8 +DA:286,4 +DA:289,8 +DA:294,4 DA:296,8 -DA:297,4 -DA:305,1 -DA:306,2 -DA:307,1 -DA:311,0 -DA:315,0 -DA:316,0 -DA:317,0 -DA:319,0 -DA:320,0 -DA:321,0 -DA:325,0 -DA:326,0 +DA:297,8 +DA:298,8 +DA:301,4 +DA:302,12 +DA:303,12 +DA:304,8 +DA:305,8 +DA:308,8 +DA:309,4 +DA:317,1 +DA:318,2 +DA:319,1 +DA:323,0 DA:327,0 DA:328,0 DA:329,0 DA:331,0 +DA:332,0 +DA:333,0 +DA:337,0 DA:338,0 DA:339,0 -DA:347,0 -DA:348,0 -DA:349,0 -DA:353,2 -DA:354,2 -DA:355,4 -DA:356,6 -DA:357,0 -DA:358,0 +DA:340,0 +DA:341,0 +DA:343,0 +DA:350,0 +DA:351,0 DA:359,0 DA:360,0 DA:361,0 -DA:362,0 -DA:363,0 -DA:364,0 -DA:365,0 -DA:366,0 -DA:367,0 -DA:370,4 -DA:371,2 -DA:372,2 -DA:376,1 -DA:377,2 -DA:378,1 -DA:382,0 -DA:386,3 -DA:387,3 -DA:391,3 -DA:392,3 -DA:393,6 -DA:397,9 -DA:398,12 -DA:402,3 -DA:407,3 -DA:408,3 -DA:409,3 -DA:410,6 -DA:412,0 -DA:413,0 -DA:414,0 -DA:418,3 -DA:420,6 +DA:365,2 +DA:366,2 +DA:367,4 +DA:368,6 +DA:369,0 +DA:370,0 +DA:371,0 +DA:372,0 +DA:373,0 +DA:374,0 +DA:375,0 +DA:376,0 +DA:377,0 +DA:378,0 +DA:379,0 +DA:382,4 +DA:383,2 +DA:384,2 +DA:388,1 +DA:389,2 +DA:390,1 +DA:394,0 +DA:398,3 +DA:399,3 +DA:403,3 +DA:404,3 +DA:405,6 +DA:409,9 +DA:410,12 +DA:414,3 +DA:419,3 +DA:420,3 +DA:421,3 DA:422,6 -DA:425,6 -DA:427,9 -DA:428,3 -DA:429,6 -DA:430,6 -DA:432,3 -DA:435,9 +DA:424,0 +DA:425,0 +DA:426,0 +DA:430,3 +DA:432,6 +DA:434,6 +DA:437,6 +DA:439,9 +DA:440,3 +DA:441,6 DA:442,6 -DA:443,6 DA:444,3 -DA:445,3 -DA:449,6 -DA:450,6 -DA:452,2 -DA:459,4 -DA:460,4 -DA:461,2 -DA:462,2 +DA:447,9 +DA:454,6 +DA:455,6 +DA:456,3 +DA:457,3 +DA:461,6 +DA:462,6 DA:464,2 -DA:465,2 -DA:469,2 -DA:470,2 -DA:471,2 -DA:473,6 -DA:474,4 -DA:475,4 +DA:471,4 +DA:472,4 +DA:473,2 +DA:474,2 DA:476,2 DA:477,2 DA:481,2 DA:482,2 DA:483,2 -DA:484,2 -DA:485,1 -DA:486,1 -DA:490,4 -DA:491,2 -DA:494,4 -DA:496,3 -DA:497,5 -DA:501,4 -DA:507,4 -DA:508,4 -DA:509,4 -DA:510,4 -DA:511,12 -DA:512,4 -DA:513,20 -DA:514,4 -DA:516,4 -DA:519,8 -DA:520,8 +DA:485,6 +DA:486,4 +DA:487,4 +DA:488,2 +DA:489,2 +DA:493,2 +DA:494,2 +DA:495,2 +DA:496,2 +DA:497,1 +DA:498,1 +DA:502,4 +DA:503,2 +DA:506,4 +DA:508,3 +DA:509,5 +DA:513,4 +DA:519,4 +DA:520,4 +DA:521,4 DA:522,4 -DA:523,8 -DA:533,1 -DA:534,1 -DA:541,1 -DA:542,1 +DA:523,12 +DA:524,4 +DA:525,20 +DA:526,4 +DA:528,4 +DA:531,8 +DA:532,8 +DA:534,4 +DA:535,8 +DA:545,1 DA:546,1 -DA:550,1 -DA:552,1 -DA:557,3 +DA:553,1 +DA:554,1 DA:558,1 -DA:563,1 -DA:565,3 -DA:567,3 +DA:562,1 +DA:564,1 +DA:569,3 DA:570,1 -DA:578,1 -DA:579,1 -DA:581,1 -DA:586,3 -DA:587,1 -DA:591,6 -DA:592,6 -DA:594,1 -DA:596,3 -DA:598,1 -DA:601,1 -DA:606,2 -DA:612,2 -DA:616,4 +DA:575,1 +DA:577,3 +DA:579,3 +DA:582,1 +DA:590,1 +DA:591,1 +DA:593,1 +DA:598,3 +DA:599,1 +DA:603,6 +DA:604,6 +DA:606,1 +DA:608,3 +DA:610,1 +DA:613,1 DA:618,2 -DA:619,6 -DA:620,2 -DA:622,2 -DA:626,6 +DA:624,2 +DA:628,4 DA:630,2 -DA:632,1 -DA:633,3 -DA:634,3 -DA:635,1 -DA:643,4 -DA:647,4 -DA:648,12 -DA:649,4 -DA:650,4 -DA:651,4 -DA:655,12 -DA:656,6 -DA:658,3 -DA:660,6 +DA:631,6 +DA:632,2 +DA:634,2 +DA:638,6 +DA:642,2 +DA:644,1 +DA:645,3 +DA:646,3 +DA:647,1 +DA:655,4 +DA:659,4 +DA:660,12 +DA:661,4 DA:662,4 -DA:664,3 -DA:665,3 -DA:669,6 -DA:670,6 -DA:671,3 -DA:672,3 -DA:676,0 -DA:677,0 -DA:678,0 -DA:682,0 -DA:683,0 -DA:684,0 -DA:688,0 -DA:689,0 -DA:690,0 -DA:694,0 -DA:695,0 -DA:696,0 -DA:700,3 -DA:701,9 -DA:703,9 -DA:706,6 -DA:707,3 -DA:712,2 -DA:713,10 -DA:717,4 -DA:719,2 -DA:721,2 -DA:725,5 -DA:726,9 -DA:727,2 -DA:728,1 -DA:729,1 -DA:733,9 -DA:737,4 -DA:738,4 -DA:739,2 -DA:740,2 -DA:744,2 -DA:745,10 -DA:749,4 +DA:663,4 +DA:667,12 +DA:668,6 +DA:670,3 +DA:672,6 +DA:674,4 +DA:676,3 +DA:677,3 +DA:681,6 +DA:682,6 +DA:683,3 +DA:684,3 +DA:690,1 +DA:691,2 +DA:692,2 +DA:698,1 +DA:703,3 +DA:706,1 +DA:707,2 +DA:708,2 +DA:709,2 +DA:713,0 +DA:714,0 +DA:715,0 +DA:719,0 +DA:720,0 +DA:721,0 +DA:725,0 +DA:726,0 +DA:727,0 +DA:731,0 +DA:732,0 +DA:733,0 +DA:737,3 +DA:738,9 +DA:740,9 +DA:743,6 +DA:744,3 +DA:749,2 +DA:750,10 DA:754,4 -DA:755,4 DA:756,2 -DA:757,2 -DA:763,4 -DA:764,8 -DA:765,0 -DA:770,5 -DA:771,5 -DA:772,10 -DA:773,10 -DA:774,10 -DA:775,15 -DA:776,5 -DA:777,30 -DA:779,10 -DA:780,15 -DA:781,10 -DA:782,5 -DA:783,5 -DA:787,3 -DA:789,3 -DA:790,18 -DA:791,24 -DA:792,6 -DA:798,3 -DA:802,3 -DA:806,0 -DA:809,6 -DA:812,3 -DA:817,2 -DA:818,4 -DA:822,2 -DA:824,2 -DA:825,2 -DA:827,1 -DA:828,1 -DA:829,1 -DA:832,4 -DA:836,5 -DA:840,2 -DA:841,3 -DA:842,5 -DA:844,0 -DA:846,2 -DA:847,2 -DA:848,1 -DA:849,1 -DA:852,2 -DA:858,3 -DA:861,3 -DA:864,6 -DA:875,2 -DA:876,10 -DA:879,3 -DA:884,6 -DA:887,3 -DA:888,3 -DA:891,3 -DA:893,3 -DA:894,3 -DA:898,2 -DA:905,3 -DA:909,1 -DA:910,1 -DA:911,3 -DA:912,3 -DA:914,2 -DA:915,1 -DA:916,2 -DA:918,2 -DA:919,2 -DA:920,1 -DA:921,1 -DA:924,1 -DA:928,4 -DA:929,2 -DA:931,4 -DA:932,6 -DA:933,6 -DA:934,4 -DA:935,4 -DA:936,2 -LF:394 -LH:337 +DA:758,2 +DA:762,5 +DA:763,9 +DA:764,2 +DA:765,1 +DA:766,1 +DA:770,9 +DA:774,4 +DA:775,4 +DA:776,2 +DA:777,2 +DA:781,2 +DA:782,10 +DA:786,4 +DA:791,4 +DA:792,4 +DA:793,2 +DA:794,2 +DA:800,4 +DA:801,8 +DA:802,0 +DA:807,5 +DA:808,5 +DA:809,10 +DA:810,10 +DA:811,10 +DA:812,15 +DA:813,5 +DA:814,30 +DA:816,10 +DA:817,15 +DA:818,10 +DA:819,5 +DA:820,5 +DA:824,4 +DA:826,4 +DA:827,24 +DA:828,32 +DA:829,8 +DA:835,3 +DA:839,3 +DA:843,0 +DA:846,6 +DA:849,3 +DA:854,3 +DA:855,6 +DA:859,4 +DA:861,4 +DA:862,4 +DA:864,2 +DA:865,2 +DA:866,2 +DA:869,8 +DA:873,10 +DA:877,4 +DA:878,6 +DA:879,10 +DA:881,0 +DA:883,4 +DA:884,4 +DA:885,2 +DA:886,2 +DA:889,4 +DA:895,3 +DA:898,3 +DA:901,6 +DA:912,2 +DA:913,10 +DA:916,3 +DA:921,6 +DA:924,3 +DA:925,3 +DA:928,3 +DA:930,3 +DA:931,3 +DA:935,2 +DA:942,3 +DA:946,1 +DA:947,1 +DA:948,3 +DA:949,3 +DA:951,2 +DA:952,1 +DA:953,2 +DA:955,2 +DA:956,2 +DA:957,1 +DA:958,1 +DA:961,1 +DA:965,4 +DA:966,2 +DA:968,4 +DA:969,6 +DA:970,6 +DA:971,4 +DA:972,4 +DA:973,2 +LF:407 +LH:350 end_of_record SF:lib/providers/app_provider_selection_crop.dart DA:5,1 @@ -2040,40 +2152,40 @@ LF:90 LH:65 end_of_record SF:lib/providers/wand_selection_manager.dart -DA:29,4 -DA:32,4 -DA:35,3 -DA:39,6 -DA:40,3 -DA:41,3 -DA:45,3 -DA:46,3 -DA:50,3 -DA:52,3 -DA:53,3 -DA:55,3 -DA:56,3 +DA:29,6 +DA:32,6 +DA:35,4 +DA:39,8 +DA:40,4 +DA:41,4 +DA:45,4 +DA:46,4 +DA:50,4 +DA:52,4 +DA:53,4 +DA:55,4 +DA:56,4 DA:61,12 DA:62,24 DA:63,12 DA:64,12 -DA:68,11 -DA:69,11 -DA:70,11 -DA:74,11 -DA:75,22 -DA:76,11 -DA:77,11 -DA:78,11 +DA:68,12 +DA:69,12 +DA:70,12 +DA:74,12 +DA:75,24 +DA:76,12 +DA:77,12 +DA:78,12 DA:82,4 DA:83,8 -DA:84,1 -DA:85,2 -DA:86,2 -DA:87,1 -DA:88,1 -DA:89,1 -DA:90,1 +DA:84,3 +DA:85,6 +DA:86,6 +DA:87,3 +DA:88,3 +DA:89,3 +DA:90,3 DA:97,4 DA:103,4 DA:104,4 @@ -2083,10 +2195,10 @@ LF:39 LH:39 end_of_record SF:lib/constants/app_interaction_profiles.dart -DA:52,3 -DA:54,3 -DA:56,3 -DA:58,3 +DA:52,4 +DA:54,4 +DA:56,4 +DA:58,4 LF:4 LH:4 end_of_record @@ -2148,249 +2260,249 @@ DA:157,1 DA:158,2 DA:159,1 DA:173,34 -DA:181,1 -DA:182,3 -DA:185,4 +DA:181,0 +DA:182,0 +DA:185,0 LF:55 -LH:55 +LH:52 end_of_record SF:lib/helpers/image_effects.dart DA:10,4 -DA:15,4 -DA:18,4 -DA:22,3 -DA:27,3 -DA:30,3 -DA:31,3 -DA:36,3 -DA:37,9 -DA:43,2 -DA:44,6 -DA:50,4 -DA:55,4 -DA:58,4 -DA:59,4 +DA:17,4 +DA:20,4 +DA:24,4 +DA:29,4 +DA:32,3 +DA:33,3 +DA:38,3 +DA:39,9 +DA:45,2 +DA:46,6 +DA:52,4 +DA:57,4 DA:60,4 DA:61,4 DA:62,4 DA:63,4 DA:64,4 DA:65,4 -DA:68,8 -DA:69,8 -DA:71,4 -DA:72,8 -DA:78,8 -DA:79,4 -DA:92,3 -DA:97,3 -DA:100,3 -DA:101,3 +DA:66,4 +DA:67,4 +DA:70,8 +DA:71,8 +DA:73,4 +DA:74,8 +DA:80,8 +DA:81,4 +DA:94,3 +DA:99,3 DA:102,3 DA:103,3 -DA:104,6 -DA:105,6 -DA:107,3 -DA:110,3 -DA:111,3 -DA:113,9 -DA:114,9 -DA:115,3 -DA:120,3 -DA:123,3 -DA:124,3 -DA:126,9 -DA:127,9 -DA:128,6 -DA:133,3 -DA:137,1 -DA:146,2 -DA:150,2 -DA:153,2 -DA:154,2 +DA:104,3 +DA:105,3 +DA:106,6 +DA:107,6 +DA:109,3 +DA:112,3 +DA:113,3 +DA:115,9 +DA:116,9 +DA:117,3 +DA:122,3 +DA:125,3 +DA:126,3 +DA:128,9 +DA:129,9 +DA:130,6 +DA:135,3 +DA:139,1 +DA:148,2 +DA:152,2 DA:155,2 -DA:177,2 +DA:156,2 +DA:157,2 DA:179,2 -DA:180,2 DA:181,2 DA:182,2 -DA:183,4 +DA:183,2 DA:184,2 +DA:185,4 DA:186,2 -DA:187,4 -DA:194,2 -DA:195,2 -DA:207,2 -DA:211,2 -DA:214,2 -DA:215,2 -DA:216,2 -DA:217,2 -DA:218,6 -DA:220,2 -DA:223,2 -DA:224,2 -DA:226,2 -DA:227,4 -DA:233,4 -DA:234,2 -DA:238,2 -DA:239,2 -DA:244,4 -DA:245,6 -DA:246,4 -DA:247,4 -DA:248,4 -DA:249,14 -DA:254,8 -DA:257,2 -DA:268,3 -DA:274,9 -DA:275,3 -DA:276,3 +DA:188,2 +DA:189,4 +DA:196,2 +DA:197,2 +DA:209,3 +DA:213,3 +DA:216,3 +DA:217,3 +DA:218,3 +DA:219,3 +DA:220,9 +DA:222,3 +DA:225,3 +DA:226,3 +DA:228,3 +DA:229,6 +DA:235,6 +DA:236,3 +DA:240,3 +DA:241,3 +DA:246,6 +DA:247,9 +DA:248,6 +DA:249,6 +DA:250,6 +DA:251,21 +DA:256,12 +DA:259,3 +DA:270,3 +DA:276,9 DA:277,3 +DA:278,3 DA:279,3 -DA:282,3 -DA:283,9 -DA:284,9 +DA:281,3 +DA:284,3 DA:285,9 DA:286,9 -DA:287,3 -DA:288,6 -DA:289,6 +DA:287,9 +DA:288,9 +DA:289,3 DA:290,6 -DA:293,6 -DA:294,15 +DA:291,6 +DA:292,6 DA:295,6 -DA:296,6 +DA:296,15 DA:297,6 -DA:298,3 -DA:299,2 -DA:300,2 -DA:304,6 -DA:305,21 -DA:315,3 -DA:316,3 -DA:317,6 -DA:318,9 -DA:321,3 -DA:322,3 -DA:323,6 -DA:324,9 -DA:331,3 -DA:335,3 -DA:338,3 -DA:339,6 -DA:343,3 -DA:344,3 -DA:345,9 -DA:347,3 -DA:348,6 +DA:298,6 +DA:299,6 +DA:300,3 +DA:301,2 +DA:302,2 +DA:306,6 +DA:307,21 +DA:317,3 +DA:318,3 +DA:319,6 +DA:320,9 +DA:323,3 +DA:324,3 +DA:325,6 +DA:326,9 +DA:333,3 +DA:337,3 +DA:340,3 +DA:341,6 +DA:345,3 +DA:346,3 +DA:347,9 DA:349,3 +DA:350,6 DA:351,3 DA:353,3 DA:355,3 -DA:358,3 -DA:359,6 +DA:357,3 DA:360,3 -DA:368,1 -DA:373,1 -DA:374,1 +DA:361,6 +DA:362,3 +DA:370,1 DA:375,1 DA:376,1 DA:377,1 -DA:378,2 +DA:378,1 DA:379,1 -DA:382,1 -DA:383,2 -DA:397,1 -DA:401,2 -DA:402,1 -DA:405,1 -DA:406,3 -DA:407,2 -DA:408,6 -DA:418,1 -DA:422,3 -DA:423,1 -DA:426,1 -DA:427,3 -DA:428,2 -DA:429,2 -DA:430,5 -DA:431,1 -DA:432,1 -DA:442,1 -DA:446,1 -DA:447,1 -DA:450,1 -DA:451,3 -DA:452,2 -DA:453,2 +DA:380,2 +DA:381,1 +DA:384,1 +DA:385,2 +DA:399,2 +DA:403,4 +DA:404,2 +DA:407,1 +DA:408,3 +DA:409,2 +DA:410,6 +DA:420,1 +DA:424,3 +DA:425,1 +DA:428,1 +DA:429,3 +DA:430,2 +DA:431,2 +DA:432,5 +DA:433,1 +DA:434,1 +DA:444,1 +DA:448,1 +DA:449,1 +DA:452,1 +DA:453,3 DA:454,2 -DA:455,1 -DA:456,4 +DA:455,2 +DA:456,2 DA:457,1 -DA:458,1 +DA:458,4 DA:459,1 DA:460,1 -DA:462,3 -DA:463,3 +DA:461,1 +DA:462,1 DA:464,3 -DA:473,1 -DA:477,1 -DA:478,1 -DA:481,1 -DA:482,3 +DA:465,3 +DA:466,3 +DA:475,1 +DA:479,1 +DA:480,1 DA:483,1 -DA:484,2 -DA:485,2 -DA:486,5 -DA:487,1 -DA:488,4 -DA:489,4 -DA:490,5 -DA:491,5 -DA:499,1 -DA:500,1 +DA:484,3 +DA:485,1 +DA:486,2 +DA:487,2 +DA:488,5 +DA:489,1 +DA:490,4 +DA:491,4 +DA:492,5 +DA:493,5 DA:501,1 DA:502,1 -DA:503,2 -DA:504,2 -DA:505,1 +DA:503,1 +DA:504,1 +DA:505,2 DA:506,2 -DA:507,2 -DA:508,0 -DA:510,5 -DA:512,1 -DA:513,4 -DA:514,0 -DA:515,0 +DA:507,1 +DA:508,2 +DA:509,2 +DA:510,0 +DA:512,5 +DA:514,1 +DA:515,4 +DA:516,0 DA:517,0 -DA:519,2 -DA:520,0 -DA:522,1 -DA:526,1 -DA:527,5 -DA:528,6 -DA:529,2 -DA:531,1 -DA:534,0 -DA:535,1 -DA:538,0 -DA:539,1 -DA:540,0 -DA:543,1 -DA:544,1 -DA:547,0 +DA:519,0 +DA:521,2 +DA:522,0 +DA:524,1 +DA:528,1 +DA:529,5 +DA:530,6 +DA:531,2 +DA:533,1 +DA:536,0 +DA:537,1 +DA:540,1 +DA:541,0 +DA:542,0 +DA:545,0 +DA:546,0 DA:549,0 -DA:553,0 -DA:556,1 -DA:557,4 -DA:558,4 +DA:551,0 +DA:555,0 +DA:558,1 DA:559,4 +DA:560,4 +DA:561,4 LF:234 -LH:223 +LH:221 end_of_record SF:lib/helpers/image_helper.dart DA:12,3 @@ -2540,11 +2652,11 @@ DA:372,8 DA:373,8 DA:381,36 DA:389,23 -DA:390,44 +DA:390,42 DA:391,69 -DA:395,6 -DA:396,12 -DA:397,6 +DA:395,4 +DA:396,8 +DA:397,4 LF:152 LH:142 end_of_record @@ -2674,12 +2786,15 @@ DA:286,3 DA:287,3 DA:290,2 DA:291,0 -DA:296,2 -DA:297,2 -DA:298,2 -DA:300,0 -LF:114 -LH:112 +DA:298,1 +DA:303,3 +DA:304,1 +DA:309,3 +DA:310,3 +DA:311,3 +DA:313,0 +LF:117 +LH:115 end_of_record SF:lib/models/brush_style.dart DA:24,18 @@ -2709,6 +2824,65 @@ DA:65,4 LF:19 LH:19 end_of_record +SF:lib/models/effect_brush_model.dart +DA:22,14 +DA:27,4 +DA:28,4 +DA:29,4 +DA:30,8 +DA:34,3 +DA:35,3 +LF:7 +LH:7 +end_of_record +SF:lib/models/selection_effect.dart +DA:18,2 +DA:114,21 +DA:117,9 +DA:122,12 +DA:125,21 +DA:128,3 +DA:129,9 +DA:139,3 +DA:146,9 +DA:147,1 +DA:148,9 +DA:152,0 +DA:156,2 +DA:157,2 +DA:158,2 +DA:159,8 +DA:162,3 +DA:163,3 +DA:164,3 +DA:165,12 +DA:168,3 +DA:173,3 +DA:176,2 +DA:181,2 +DA:184,1 +DA:189,1 +DA:192,1 +DA:197,1 +DA:200,1 +DA:205,1 +DA:208,2 +DA:213,2 +DA:216,2 +DA:221,2 +DA:224,1 +DA:229,1 +DA:236,2 +DA:241,2 +DA:242,1 +DA:244,2 +DA:245,4 +DA:247,2 +DA:250,2 +DA:255,2 +LF:44 +LH:43 +end_of_record SF:lib/models/effect_preview_model.dart DA:31,3 DA:39,3 @@ -2731,51 +2905,6 @@ DA:58,2 LF:18 LH:18 end_of_record -SF:lib/models/selection_effect.dart -DA:18,2 -DA:114,12 -DA:117,9 -DA:120,12 -DA:123,3 -DA:124,9 -DA:133,3 -DA:138,3 -DA:139,1 -DA:140,9 -DA:144,0 -DA:148,2 -DA:149,2 -DA:150,2 -DA:151,8 -DA:154,3 -DA:155,3 -DA:156,3 -DA:157,12 -DA:160,3 -DA:165,3 -DA:168,1 -DA:173,1 -DA:176,1 -DA:181,1 -DA:184,1 -DA:189,1 -DA:192,1 -DA:197,1 -DA:200,2 -DA:205,2 -DA:208,2 -DA:213,2 -DA:216,1 -DA:221,1 -DA:224,1 -DA:229,1 -DA:232,2 -DA:237,2 -DA:240,2 -DA:245,2 -LF:41 -LH:40 -end_of_record SF:lib/models/visible_model.dart DA:7,6 DA:8,6 @@ -2792,10 +2921,10 @@ DA:55,6 DA:56,6 DA:57,12 DA:58,2 -DA:87,12 -DA:89,24 -DA:90,12 -DA:91,12 +DA:87,13 +DA:89,26 +DA:90,13 +DA:91,13 DA:95,3 DA:96,6 DA:100,8 @@ -3532,26 +3661,26 @@ DA:127,2 DA:131,9 DA:135,30 DA:136,60 -DA:139,16 -DA:140,32 +DA:139,17 +DA:140,34 DA:143,30 DA:144,90 DA:145,150 -DA:150,14 -DA:151,14 -DA:152,14 -DA:153,14 -DA:157,15 -DA:158,30 +DA:150,15 +DA:151,15 +DA:152,15 +DA:153,15 +DA:157,16 +DA:158,32 DA:164,10 -DA:166,14 -DA:167,28 -DA:168,14 +DA:166,15 +DA:167,30 +DA:168,15 DA:174,54 -DA:177,27 -DA:178,27 -DA:179,70 -DA:180,27 +DA:177,28 +DA:178,28 +DA:179,74 +DA:180,28 DA:187,39 DA:190,39 DA:197,8 @@ -3611,16 +3740,16 @@ DA:355,90 DA:358,6 DA:361,15 DA:364,50 -DA:369,26 +DA:369,40 DA:372,30 DA:376,90 DA:377,90 DA:379,30 -DA:381,25 -DA:386,25 -DA:387,25 -DA:388,25 -DA:393,36 +DA:381,26 +DA:386,26 +DA:387,26 +DA:388,26 +DA:393,45 DA:396,3 DA:397,6 DA:398,3 @@ -3635,9 +3764,9 @@ DA:416,3 DA:417,6 DA:418,3 DA:420,3 -DA:424,125 -DA:427,8 -DA:428,16 +DA:424,130 +DA:427,9 +DA:428,18 DA:432,30 DA:433,30 DA:434,60 @@ -3653,20 +3782,20 @@ DA:461,90 DA:462,14 DA:463,2 DA:464,2 -DA:469,14 +DA:469,16 DA:472,12 -DA:475,8 -DA:476,8 -DA:477,12 +DA:475,9 +DA:476,9 +DA:477,16 DA:479,10 -DA:481,8 -DA:482,8 -DA:486,8 +DA:481,9 +DA:482,9 +DA:486,9 DA:487,4 -DA:488,8 -DA:489,8 -DA:490,16 -DA:491,8 +DA:488,9 +DA:489,9 +DA:490,18 +DA:491,9 DA:496,3 DA:497,6 DA:499,3 @@ -3733,25 +3862,25 @@ DA:643,4 DA:644,2 DA:645,2 DA:647,2 -DA:661,5 -DA:662,15 -DA:663,5 -DA:664,5 -DA:676,5 -DA:677,5 -DA:678,10 -DA:680,10 -DA:681,5 -DA:682,8 -DA:683,3 -DA:684,8 -DA:685,3 -DA:687,3 -DA:688,3 -DA:690,8 -DA:696,5 -DA:697,8 -DA:699,10 +DA:661,3 +DA:662,9 +DA:663,3 +DA:664,3 +DA:676,3 +DA:677,3 +DA:678,6 +DA:680,6 +DA:681,3 +DA:682,5 +DA:683,2 +DA:684,4 +DA:685,2 +DA:687,2 +DA:688,2 +DA:690,4 +DA:696,3 +DA:697,4 +DA:699,6 DA:704,10 DA:709,10 DA:710,10 @@ -3769,14 +3898,14 @@ DA:730,10 DA:731,10 DA:732,10 DA:734,10 -DA:741,0 -DA:742,0 -DA:743,0 -DA:744,0 -DA:745,0 -DA:746,0 -DA:747,0 -DA:748,0 +DA:741,1 +DA:742,4 +DA:743,1 +DA:744,2 +DA:745,2 +DA:746,1 +DA:747,5 +DA:748,1 DA:754,3 DA:755,9 DA:756,9 @@ -3836,7 +3965,7 @@ DA:894,1 DA:896,1 DA:897,1 LF:343 -LH:322 +LH:330 end_of_record SF:lib/providers/undo_provider.dart DA:25,31 @@ -3863,12 +3992,12 @@ DA:98,15 DA:105,15 DA:108,30 DA:110,15 -DA:115,9 -DA:116,9 -DA:120,18 -DA:121,18 -DA:122,18 -DA:123,9 +DA:115,10 +DA:116,10 +DA:120,20 +DA:121,20 +DA:122,20 +DA:123,10 DA:127,5 DA:128,5 DA:132,10 @@ -4439,14 +4568,14 @@ DA:90,31 DA:91,62 DA:94,31 DA:95,31 -DA:103,34 +DA:103,36 DA:106,6 DA:107,6 DA:108,6 DA:139,46 -DA:142,10 -DA:143,10 -DA:144,10 +DA:142,11 +DA:143,11 +DA:144,11 DA:151,7 DA:152,14 DA:153,7 @@ -4501,11 +4630,11 @@ DA:276,7 DA:284,7 DA:290,7 DA:291,28 -DA:295,6 -DA:296,12 -DA:297,24 -DA:298,6 -DA:299,6 +DA:295,7 +DA:296,14 +DA:297,28 +DA:298,7 +DA:299,7 DA:304,3 DA:305,6 DA:306,12 @@ -4525,11 +4654,11 @@ DA:394,7 DA:395,7 DA:396,7 DA:397,14 -DA:401,19 -DA:404,20 -DA:405,19 -DA:410,19 -DA:418,43 +DA:401,20 +DA:404,21 +DA:405,20 +DA:410,20 +DA:418,45 DA:419,5 DA:420,5 DA:433,4 @@ -4795,10 +4924,10 @@ DA:177,1 DA:178,0 DA:181,1 DA:182,1 -DA:186,19 -DA:187,23 -DA:188,19 -DA:189,19 +DA:186,20 +DA:187,24 +DA:188,20 +DA:189,20 DA:198,1 DA:199,2 DA:200,1 @@ -4984,18 +5113,18 @@ LF:138 LH:138 end_of_record SF:lib/providers/wand_selection_request.dart -DA:6,3 +DA:6,4 LF:1 LH:1 end_of_record SF:lib/providers/shell_provider.dart DA:39,7 DA:42,7 -DA:45,4 -DA:50,4 +DA:45,5 +DA:50,5 DA:51,2 -DA:60,8 -DA:61,8 +DA:60,9 +DA:61,9 DA:70,8 DA:73,5 DA:74,10 @@ -5010,12 +5139,12 @@ DA:100,4 DA:101,8 DA:102,4 DA:108,0 -DA:111,5 -DA:112,10 -DA:115,5 -DA:116,5 -DA:120,3 -DA:121,6 +DA:111,6 +DA:112,12 +DA:115,6 +DA:116,6 +DA:120,4 +DA:121,8 DA:128,8 DA:131,6 DA:134,5 @@ -5155,316 +5284,326 @@ LH:9 end_of_record SF:lib/files/file_ora.dart DA:20,6 -DA:72,6 DA:73,6 DA:74,6 -DA:79,6 +DA:75,6 DA:80,6 DA:81,6 -DA:87,5 -DA:90,5 +DA:82,6 +DA:88,5 DA:91,5 -DA:93,5 -DA:101,10 -DA:102,5 -DA:105,5 -DA:139,1 -DA:143,1 +DA:92,5 +DA:94,5 +DA:102,10 +DA:103,5 +DA:106,5 +DA:140,1 DA:144,1 -DA:145,2 -DA:149,0 -DA:151,0 -DA:153,0 -DA:156,0 +DA:145,1 +DA:146,2 +DA:150,0 +DA:152,0 +DA:154,0 DA:157,0 -DA:166,1 -DA:172,2 -DA:175,2 -DA:176,3 -DA:177,1 -DA:181,1 -DA:182,2 -DA:185,1 -DA:187,1 -DA:189,2 +DA:158,0 +DA:167,1 +DA:173,2 +DA:176,2 +DA:177,3 +DA:178,1 +DA:182,1 +DA:183,2 +DA:186,1 +DA:189,1 DA:191,1 -DA:194,0 -DA:204,1 -DA:205,1 +DA:192,1 +DA:195,1 +DA:196,1 +DA:199,0 +DA:209,1 DA:210,1 -DA:211,1 -DA:216,3 -DA:220,1 -DA:225,1 -DA:230,1 -DA:231,1 -DA:236,2 -DA:237,1 +DA:215,1 +DA:216,1 +DA:221,3 +DA:228,1 +DA:233,1 DA:238,1 -DA:241,1 -DA:242,1 +DA:239,1 +DA:244,2 +DA:245,1 DA:246,1 -DA:252,1 -DA:253,2 -DA:254,2 -DA:255,1 -DA:257,2 -DA:258,1 +DA:249,1 +DA:250,1 +DA:256,1 +DA:263,1 +DA:264,2 +DA:265,2 DA:266,1 +DA:271,2 DA:272,1 -DA:273,1 -DA:274,1 -DA:275,1 -DA:277,2 -DA:278,2 -DA:280,1 -DA:281,1 -DA:282,2 -DA:283,1 -DA:284,2 +DA:273,2 DA:287,1 -DA:289,1 -DA:290,1 -DA:292,1 -DA:293,1 DA:294,1 -DA:297,2 -DA:298,1 -DA:300,1 -DA:315,1 -DA:316,2 +DA:295,1 +DA:296,1 +DA:303,1 +DA:309,1 +DA:310,1 +DA:311,1 +DA:312,1 +DA:314,2 +DA:315,2 +DA:317,1 +DA:318,1 +DA:319,2 DA:320,1 -DA:321,0 -DA:322,0 +DA:321,2 +DA:324,1 +DA:326,1 +DA:327,1 +DA:329,1 +DA:330,1 +DA:331,1 +DA:334,2 +DA:335,1 DA:337,1 -DA:339,1 -DA:340,1 -DA:342,1 -DA:344,1 -DA:346,1 -DA:348,1 -DA:350,1 DA:352,1 -DA:354,1 -DA:356,1 -DA:358,1 -DA:360,1 -DA:362,1 -DA:364,1 -DA:366,1 -DA:368,1 -DA:370,1 -DA:372,1 -DA:380,6 -DA:382,6 -DA:384,1 -DA:386,1 -DA:388,1 -DA:390,1 -DA:392,1 -DA:394,1 -DA:396,1 -DA:398,1 -DA:400,1 -DA:402,1 -DA:404,1 -DA:406,1 -DA:408,0 -DA:410,0 -DA:412,0 -DA:414,0 +DA:353,2 +DA:357,1 +DA:358,0 +DA:359,0 +DA:374,1 +DA:376,1 +DA:377,1 +DA:379,1 +DA:381,1 +DA:383,1 +DA:385,1 +DA:387,1 +DA:389,1 +DA:391,1 +DA:393,1 +DA:395,1 +DA:397,1 +DA:399,1 +DA:401,1 +DA:403,1 +DA:405,1 +DA:407,1 +DA:409,1 +DA:417,6 +DA:419,6 +DA:421,1 +DA:423,1 +DA:425,1 +DA:427,1 DA:429,1 -DA:436,6 -DA:438,1 +DA:431,1 +DA:433,1 +DA:435,1 +DA:437,1 DA:439,1 DA:441,1 -DA:446,3 +DA:443,1 +DA:445,0 +DA:447,0 DA:449,0 -DA:474,2 -DA:475,2 -DA:476,6 -DA:477,2 -DA:484,2 -DA:486,4 -DA:487,2 -DA:492,2 -DA:493,2 -DA:496,0 -DA:497,0 -DA:500,0 -DA:508,2 -DA:509,4 -DA:510,4 -DA:511,4 -DA:537,6 -DA:541,12 -DA:542,12 -DA:543,6 -DA:544,6 -DA:547,6 -DA:548,6 -DA:550,6 -DA:555,6 -DA:559,6 -DA:560,18 -DA:561,6 -DA:562,6 -DA:563,6 -DA:564,6 -DA:565,6 -DA:566,12 -DA:567,12 -DA:568,6 -DA:571,6 -DA:572,2 -DA:573,2 -DA:577,5 -DA:578,5 -DA:579,5 -DA:586,6 -DA:590,11 -DA:591,10 -DA:592,3 -DA:593,2 -DA:594,2 -DA:595,1 -DA:599,5 -DA:600,5 -DA:601,5 -DA:602,5 -DA:606,10 -DA:607,10 -DA:608,20 -DA:609,20 -DA:611,6 -DA:613,12 -DA:615,5 -DA:617,6 -DA:620,12 -DA:621,6 -DA:622,6 +DA:451,0 +DA:466,1 +DA:473,6 +DA:475,1 +DA:476,1 +DA:478,1 +DA:483,3 +DA:486,0 +DA:511,2 +DA:512,2 +DA:513,6 +DA:514,2 +DA:521,2 +DA:523,4 +DA:524,2 +DA:529,2 +DA:530,2 +DA:533,0 +DA:534,0 +DA:537,0 +DA:545,2 +DA:546,4 +DA:547,4 +DA:548,4 +DA:574,6 +DA:578,12 +DA:579,12 +DA:580,6 +DA:581,6 +DA:584,6 +DA:585,6 +DA:587,6 +DA:592,6 +DA:596,6 +DA:597,18 +DA:598,6 +DA:599,6 +DA:600,6 +DA:601,6 +DA:602,6 +DA:603,12 +DA:604,12 +DA:605,6 +DA:606,12 +DA:609,6 +DA:610,3 +DA:611,3 +DA:615,5 +DA:616,5 +DA:617,5 DA:624,6 -DA:625,6 -DA:626,6 -DA:628,24 -DA:630,6 -DA:632,24 -DA:635,6 -DA:637,6 -DA:638,6 -DA:639,6 -DA:641,12 -DA:642,6 -DA:644,6 -DA:646,0 -DA:648,0 -DA:650,0 -DA:652,6 -DA:656,6 -DA:657,0 -DA:659,0 -DA:660,0 -DA:661,0 -DA:666,6 -DA:673,12 -DA:674,6 +DA:628,11 +DA:629,10 +DA:630,3 +DA:631,2 +DA:632,2 +DA:633,1 +DA:637,5 +DA:638,5 +DA:639,5 +DA:640,5 +DA:644,10 +DA:645,10 +DA:646,20 +DA:647,20 +DA:649,6 +DA:651,12 +DA:653,5 +DA:655,6 +DA:658,12 +DA:659,6 +DA:660,6 +DA:662,6 +DA:663,6 +DA:664,6 +DA:666,24 +DA:668,6 +DA:670,24 +DA:673,6 DA:675,6 +DA:676,6 DA:677,6 +DA:679,12 DA:680,6 -DA:683,12 -DA:684,12 -DA:685,6 -DA:687,6 -DA:688,12 -DA:689,3 -DA:690,1 -DA:691,1 -DA:692,1 -DA:693,1 -DA:694,1 -DA:695,1 -DA:697,1 -DA:705,5 -DA:715,5 -DA:736,6 -DA:739,6 -DA:740,1 +DA:682,6 +DA:684,0 +DA:686,0 +DA:688,0 +DA:690,6 +DA:694,6 +DA:695,0 +DA:697,0 +DA:698,0 +DA:699,0 +DA:704,6 +DA:711,12 +DA:712,6 +DA:713,6 +DA:715,6 +DA:718,6 +DA:721,12 +DA:722,12 +DA:723,6 +DA:725,6 +DA:726,12 +DA:727,3 +DA:728,1 +DA:729,1 +DA:730,1 +DA:731,1 +DA:732,1 +DA:733,1 +DA:735,1 DA:743,5 -DA:744,10 -DA:746,15 -DA:747,15 -DA:748,5 -DA:749,20 -DA:751,5 -DA:757,5 -DA:758,10 -DA:759,5 -DA:760,10 -DA:764,5 -DA:765,10 -DA:766,5 -DA:767,5 -DA:769,5 -DA:771,5 -DA:772,5 -DA:773,10 -DA:774,10 -DA:777,5 -DA:782,6 -DA:783,12 -DA:787,5 -DA:791,5 -DA:794,5 -DA:799,5 -DA:800,5 -DA:806,5 -DA:808,5 -DA:813,5 -DA:814,5 -DA:820,5 -DA:824,5 -DA:834,5 -DA:836,5 -DA:837,10 -DA:839,0 -DA:845,5 +DA:753,5 +DA:774,6 +DA:777,6 +DA:778,1 +DA:781,5 +DA:782,10 +DA:784,15 +DA:785,15 +DA:786,5 +DA:787,20 +DA:789,5 +DA:795,5 +DA:796,10 +DA:797,5 +DA:798,10 +DA:802,5 +DA:803,10 +DA:804,5 +DA:805,5 +DA:807,5 +DA:809,5 +DA:810,5 +DA:811,10 +DA:812,10 +DA:815,5 +DA:820,6 +DA:821,14 +DA:825,5 +DA:829,5 +DA:832,5 +DA:837,5 +DA:838,5 +DA:844,5 DA:846,5 -DA:847,5 DA:851,5 -DA:855,5 -DA:856,10 -DA:857,10 -DA:858,20 -DA:860,5 -DA:863,5 -DA:864,5 -DA:866,5 -DA:867,5 -DA:868,5 -DA:869,10 -DA:870,10 +DA:852,5 +DA:858,5 +DA:862,5 DA:872,5 -DA:873,5 DA:874,5 -DA:875,5 -DA:876,5 -DA:878,5 -DA:893,6 -DA:897,12 -DA:898,6 -DA:899,6 -DA:901,6 -DA:903,6 -DA:904,12 -DA:905,12 -DA:906,12 -DA:908,6 -DA:911,1 -DA:913,12 -DA:914,12 -DA:915,12 -LF:309 -LH:285 +DA:875,10 +DA:877,0 +DA:883,5 +DA:884,5 +DA:885,5 +DA:889,5 +DA:893,5 +DA:894,10 +DA:895,10 +DA:896,20 +DA:898,5 +DA:901,5 +DA:902,5 +DA:904,5 +DA:905,5 +DA:906,5 +DA:907,10 +DA:908,10 +DA:910,5 +DA:911,5 +DA:912,5 +DA:913,5 +DA:914,5 +DA:916,5 +DA:931,6 +DA:935,12 +DA:936,6 +DA:937,6 +DA:938,6 +DA:940,6 +DA:942,6 +DA:943,12 +DA:944,12 +DA:945,12 +DA:947,6 +DA:950,1 +DA:953,6 +DA:955,12 +DA:956,12 +DA:957,12 +LF:319 +LH:295 end_of_record SF:lib/helpers/list_helper.dart DA:28,6 @@ -5765,11 +5904,11 @@ DA:29,1 DA:46,1 DA:71,1 DA:86,1 -DA:104,1 -DA:105,1 -DA:107,1 -DA:114,1 -DA:116,1 +DA:104,2 +DA:105,2 +DA:107,2 +DA:114,2 +DA:116,2 DA:134,1 DA:145,2 DA:150,0 @@ -6057,162 +6196,168 @@ LF:292 LH:235 end_of_record SF:lib/widgets/canvas_gesture_handler.dart -DA:34,5 -DA:41,5 -DA:42,5 -DA:86,5 -DA:89,5 -DA:90,5 -DA:93,5 -DA:95,5 -DA:96,5 -DA:97,5 -DA:99,5 -DA:100,1 -DA:101,4 -DA:102,0 -DA:105,5 -DA:106,0 -DA:107,0 -DA:108,0 -DA:109,0 -DA:112,0 -DA:115,0 -DA:116,0 -DA:119,0 -DA:120,0 -DA:125,1 -DA:126,2 +DA:36,5 +DA:43,5 +DA:44,5 +DA:109,5 +DA:112,5 +DA:113,5 +DA:116,5 +DA:118,5 +DA:119,5 +DA:120,5 +DA:122,5 +DA:125,5 +DA:126,5 DA:127,5 -DA:131,2 -DA:132,2 -DA:136,0 -DA:137,0 +DA:128,5 +DA:129,1 +DA:130,4 +DA:131,0 +DA:137,5 +DA:138,0 +DA:139,0 DA:140,0 DA:141,0 -DA:143,0 DA:144,0 -DA:145,0 DA:147,0 -DA:150,0 -DA:154,0 -DA:157,0 -DA:158,0 -DA:162,0 -DA:165,4 -DA:166,8 -DA:167,8 -DA:168,16 -DA:169,4 -DA:171,12 -DA:173,12 -DA:175,2 -DA:177,12 -DA:178,4 -DA:182,1 -DA:185,4 -DA:186,8 -DA:187,8 -DA:188,12 -DA:189,3 -DA:191,9 -DA:192,1 -DA:198,9 -DA:199,3 -DA:203,1 -DA:206,4 -DA:207,8 -DA:208,12 -DA:209,4 -DA:210,12 -DA:211,12 -DA:212,4 -DA:214,4 -DA:216,1 -DA:219,0 -DA:220,0 -DA:221,0 -DA:222,0 -DA:223,0 -DA:224,0 -DA:225,0 -DA:228,0 -DA:231,10 -DA:240,1 -DA:250,1 +DA:148,0 +DA:151,0 +DA:152,0 +DA:157,1 +DA:158,2 +DA:159,5 +DA:163,2 +DA:164,2 +DA:168,0 +DA:169,0 +DA:172,0 +DA:173,0 +DA:175,0 +DA:176,0 +DA:177,0 +DA:179,0 +DA:182,0 +DA:186,0 +DA:189,0 +DA:190,0 +DA:194,0 +DA:197,5 +DA:198,10 +DA:199,10 +DA:200,20 +DA:201,5 +DA:203,15 +DA:205,15 +DA:207,2 +DA:209,15 +DA:210,5 +DA:214,1 +DA:217,5 +DA:218,10 +DA:219,10 +DA:220,16 +DA:221,4 +DA:223,12 +DA:224,1 +DA:230,12 +DA:231,4 +DA:235,1 +DA:238,4 +DA:239,8 +DA:240,12 +DA:241,4 +DA:242,12 +DA:243,12 +DA:244,4 +DA:246,4 +DA:248,1 DA:251,1 -DA:255,0 -DA:256,0 -DA:261,1 -DA:268,1 -DA:269,1 -DA:270,2 -DA:271,2 -DA:272,2 -DA:273,2 -DA:274,2 -DA:275,2 -DA:281,0 -DA:282,1 -DA:288,1 -DA:289,1 -DA:290,1 -DA:291,5 +DA:252,2 +DA:253,3 +DA:254,1 +DA:255,3 +DA:256,3 +DA:257,1 +DA:260,0 +DA:263,10 +DA:273,5 +DA:274,5 +DA:281,1 +DA:291,1 DA:292,1 -DA:294,1 -DA:297,1 -DA:306,0 -DA:311,0 -DA:312,0 -DA:313,0 -DA:317,0 -DA:321,0 +DA:296,0 +DA:297,0 +DA:302,1 +DA:309,1 +DA:310,1 +DA:311,2 +DA:312,2 +DA:313,2 +DA:314,2 +DA:315,2 +DA:316,2 DA:322,0 -DA:323,0 -DA:324,0 -DA:325,0 -DA:327,0 -DA:329,0 -DA:334,0 -DA:335,0 -DA:336,0 -DA:340,0 -DA:348,0 -DA:349,0 -DA:350,0 -DA:351,0 +DA:323,1 +DA:329,1 +DA:330,1 +DA:331,1 +DA:332,5 +DA:333,1 +DA:335,1 +DA:338,1 +DA:347,0 DA:352,0 DA:353,0 -DA:355,0 -LF:127 -LH:70 -end_of_record -SF:lib/widgets/canvas_gesture_handler_pixel_brush.dart -DA:7,0 -DA:11,0 -DA:12,0 -DA:15,0 -DA:17,0 -DA:19,0 -DA:21,0 -DA:22,0 -DA:23,0 -DA:24,0 -DA:25,0 -DA:26,0 -DA:28,0 -DA:30,0 -DA:34,3 -DA:37,6 -DA:38,6 -DA:39,3 -DA:40,3 -DA:41,3 -DA:57,0 +DA:354,0 +DA:358,0 +DA:362,0 +DA:363,0 +DA:364,0 +DA:365,0 +DA:366,0 +DA:368,0 +DA:370,0 +DA:375,0 +DA:376,0 +DA:377,0 +DA:381,0 +DA:389,0 +DA:390,0 +DA:391,0 +DA:392,0 +DA:393,0 +DA:394,0 +DA:396,0 +LF:133 +LH:83 +end_of_record +SF:lib/widgets/canvas_gesture_handler_pixel_brush.dart +DA:7,1 +DA:11,1 +DA:12,7 +DA:15,2 +DA:17,1 +DA:19,1 +DA:21,3 +DA:22,1 +DA:23,2 +DA:24,2 +DA:25,4 +DA:26,4 +DA:28,2 +DA:30,2 +DA:34,4 +DA:37,8 +DA:38,8 +DA:39,4 +DA:40,4 +DA:41,4 +DA:42,4 DA:58,0 DA:59,0 DA:60,0 -DA:64,0 +DA:61,0 DA:65,0 DA:66,0 DA:67,0 @@ -6221,23 +6366,23 @@ DA:69,0 DA:70,0 DA:71,0 DA:72,0 -DA:74,0 -DA:76,0 -DA:81,0 +DA:73,0 +DA:75,0 +DA:77,0 DA:82,0 DA:83,0 DA:84,0 DA:85,0 DA:86,0 DA:87,0 -DA:95,0 -DA:97,0 +DA:88,0 +DA:96,0 DA:98,0 DA:99,0 DA:100,0 DA:101,0 DA:102,0 -DA:104,0 +DA:103,0 DA:105,0 DA:106,0 DA:107,0 @@ -6249,132 +6394,132 @@ DA:112,0 DA:113,0 DA:114,0 DA:115,0 -DA:123,0 +DA:116,0 DA:124,0 DA:125,0 -DA:128,0 +DA:126,0 DA:129,0 DA:130,0 -DA:133,0 +DA:131,0 DA:134,0 DA:135,0 DA:136,0 DA:137,0 -DA:139,0 +DA:138,0 DA:140,0 DA:141,0 DA:142,0 -DA:146,0 -DA:149,0 +DA:143,0 +DA:147,0 DA:150,0 -DA:156,0 -DA:159,0 -DA:161,0 -DA:166,0 +DA:151,0 +DA:157,0 +DA:160,0 +DA:162,0 DA:167,0 -DA:169,0 -DA:180,0 -DA:189,0 +DA:168,0 +DA:170,0 +DA:181,0 DA:190,0 DA:191,0 DA:192,0 DA:193,0 DA:194,0 DA:195,0 -DA:198,0 +DA:196,0 DA:199,0 -DA:201,0 +DA:200,0 DA:202,0 -DA:206,0 -DA:211,0 +DA:203,0 +DA:207,0 DA:212,0 -DA:214,0 +DA:213,0 DA:215,0 DA:216,0 DA:217,0 DA:218,0 -DA:221,0 +DA:219,0 DA:222,0 -DA:224,0 +DA:223,0 DA:225,0 DA:226,0 -DA:230,0 -DA:232,0 +DA:227,0 +DA:231,0 DA:233,0 -DA:237,0 +DA:234,0 DA:238,0 DA:239,0 DA:240,0 DA:241,0 -DA:249,0 +DA:242,0 DA:250,0 -DA:254,0 +DA:251,0 DA:255,0 -DA:259,0 -DA:262,0 -DA:272,0 +DA:256,0 +DA:260,0 +DA:263,0 DA:273,0 -DA:276,0 +DA:274,0 DA:277,0 -DA:279,0 -DA:286,0 +DA:278,0 +DA:280,0 DA:287,0 DA:288,0 DA:289,0 -DA:291,0 +DA:290,0 DA:292,0 DA:293,0 -DA:295,0 +DA:294,0 DA:296,0 -DA:298,0 +DA:297,0 DA:299,0 DA:300,0 DA:301,0 DA:302,0 -DA:309,0 -DA:316,0 -DA:320,0 +DA:303,0 +DA:310,0 +DA:317,0 DA:321,0 DA:322,0 DA:323,0 -DA:328,5 +DA:324,0 DA:329,5 DA:330,5 DA:331,5 DA:332,5 DA:333,5 DA:334,5 -DA:338,0 +DA:335,5 DA:339,0 -DA:342,0 +DA:340,0 DA:343,0 -DA:357,0 -DA:367,0 +DA:344,0 +DA:358,0 DA:368,0 DA:369,0 DA:370,0 DA:371,0 DA:372,0 -DA:375,0 +DA:373,0 DA:376,0 -DA:378,0 +DA:377,0 DA:379,0 DA:380,0 DA:381,0 -DA:384,0 -DA:388,0 -DA:393,0 +DA:382,0 +DA:385,0 +DA:389,0 DA:394,0 DA:395,0 -DA:399,0 -DA:401,0 +DA:396,0 +DA:400,0 DA:402,0 -DA:406,0 -DA:410,0 +DA:403,0 +DA:407,0 DA:411,0 DA:412,0 -DA:419,0 -DA:423,0 +DA:413,0 +DA:420,0 DA:424,0 DA:425,0 DA:426,0 @@ -6387,22 +6532,23 @@ DA:432,0 DA:433,0 DA:434,0 DA:435,0 -DA:445,0 -DA:452,0 +DA:436,0 +DA:446,0 DA:453,0 -DA:455,0 +DA:454,0 DA:456,0 DA:457,0 DA:458,0 DA:459,0 DA:460,0 -DA:462,0 +DA:461,0 DA:463,0 DA:464,0 DA:465,0 DA:466,0 -LF:213 -LH:13 +DA:467,0 +LF:214 +LH:28 end_of_record SF:lib/widgets/canvas_gesture_handler_state_methods.dart DA:13,2 @@ -6411,28 +6557,28 @@ DA:15,4 DA:30,0 DA:31,0 DA:32,0 -DA:37,3 -DA:38,12 +DA:37,4 +DA:38,16 DA:39,0 DA:40,0 DA:41,0 -DA:46,3 +DA:46,4 DA:47,0 DA:48,0 DA:55,3 DA:56,3 DA:57,3 -DA:63,4 -DA:64,12 +DA:63,5 +DA:64,15 DA:65,3 DA:66,1 DA:67,1 DA:68,2 -DA:76,3 -DA:80,3 +DA:76,4 +DA:80,4 DA:81,0 DA:82,0 -DA:86,3 +DA:86,4 DA:87,0 DA:88,0 DA:97,1 @@ -6458,201 +6604,255 @@ DA:142,1 DA:143,5 DA:146,1 DA:147,1 -DA:151,4 -DA:155,12 -DA:158,12 -DA:160,12 -DA:162,12 -DA:164,2 -DA:165,2 -DA:166,8 -DA:167,2 -DA:169,3 -DA:170,0 -DA:174,0 -DA:175,0 -DA:176,0 -DA:177,0 -DA:179,3 -DA:181,3 -DA:182,6 -DA:183,3 -DA:184,9 -DA:185,3 -DA:188,6 -DA:189,6 -DA:190,3 -DA:195,4 -DA:199,4 -DA:203,6 -DA:205,8 -DA:207,3 -DA:208,0 -DA:209,0 -DA:212,3 -DA:213,0 -DA:214,0 -DA:219,3 -DA:220,0 -DA:221,0 -DA:225,15 -DA:227,1 -DA:231,3 -DA:236,0 -DA:237,0 -DA:238,0 -DA:239,0 -DA:244,6 -DA:246,6 -DA:250,6 -DA:251,1 -DA:252,6 -DA:253,1 -DA:254,6 -DA:255,6 -DA:256,4 -DA:258,1 -DA:259,2 -DA:268,4 -DA:272,4 -DA:276,15 -DA:280,6 -DA:282,3 -DA:286,6 -DA:289,10 -DA:291,2 -DA:295,6 -DA:297,3 -DA:301,6 -DA:302,2 -DA:306,6 -DA:307,1 -DA:311,3 -DA:316,2 -DA:321,2 -DA:322,2 -DA:325,2 -DA:327,7 -DA:334,2 -DA:340,8 -DA:341,0 -DA:342,0 -DA:348,0 -DA:349,0 -DA:350,0 -DA:354,4 -DA:355,2 -DA:358,0 -DA:363,0 -DA:364,0 -DA:372,0 -DA:378,0 -DA:382,0 -DA:384,0 -DA:394,0 -DA:399,0 +DA:156,5 +DA:157,10 +DA:158,6 +DA:159,6 +DA:162,4 +DA:166,12 +DA:169,12 +DA:170,4 +DA:172,12 +DA:174,2 +DA:175,2 +DA:176,8 +DA:177,2 +DA:179,6 +DA:180,0 +DA:184,0 +DA:185,0 +DA:186,0 +DA:188,0 +DA:190,0 +DA:191,0 +DA:193,3 +DA:195,3 +DA:196,3 +DA:197,3 +DA:198,6 +DA:199,3 +DA:200,9 +DA:201,3 +DA:204,6 +DA:205,6 +DA:206,3 +DA:213,1 +DA:217,1 +DA:218,1 +DA:219,5 +DA:220,3 +DA:222,2 +DA:223,1 +DA:224,1 +DA:225,1 +DA:230,0 +DA:231,0 +DA:232,0 +DA:233,0 +DA:236,0 +DA:238,0 +DA:239,0 +DA:240,0 +DA:242,0 +DA:243,0 +DA:248,5 +DA:252,5 +DA:256,8 +DA:257,4 +DA:259,4 +DA:260,0 +DA:261,0 +DA:264,4 +DA:265,0 +DA:266,0 +DA:271,3 +DA:272,0 +DA:273,0 +DA:277,20 +DA:279,3 +DA:280,0 +DA:282,1 +DA:287,8 +DA:292,2 +DA:293,1 +DA:294,1 +DA:295,1 +DA:300,6 +DA:302,6 +DA:306,6 +DA:307,1 +DA:308,6 +DA:309,1 +DA:310,6 +DA:311,6 +DA:312,4 +DA:314,1 +DA:315,2 +DA:324,5 +DA:328,5 +DA:332,20 +DA:336,8 +DA:338,4 +DA:342,8 +DA:344,4 +DA:346,2 +DA:350,8 +DA:352,4 +DA:356,8 +DA:357,2 +DA:361,8 +DA:362,1 +DA:366,4 +DA:371,2 +DA:376,2 +DA:377,2 +DA:381,7 +DA:382,6 +DA:385,2 +DA:386,1 +DA:387,2 +DA:388,1 +DA:389,2 +DA:390,3 +DA:392,2 DA:400,0 -DA:401,0 -DA:402,0 -DA:403,0 DA:404,0 -DA:406,0 +DA:405,0 DA:409,0 DA:410,0 DA:411,0 -DA:412,0 DA:414,0 -DA:417,0 +DA:415,0 DA:418,0 DA:419,0 DA:420,0 -DA:421,0 -DA:424,0 -DA:425,0 -DA:426,0 -DA:427,0 -DA:430,0 -DA:434,0 -DA:435,0 -DA:436,0 -DA:440,1 -DA:441,1 -DA:442,2 -DA:446,4 -DA:451,4 -DA:452,4 -DA:454,2 -DA:455,2 -DA:456,0 +DA:423,0 +DA:428,3 +DA:429,3 +DA:430,3 +DA:431,3 +DA:437,2 +DA:443,8 +DA:444,0 +DA:445,0 +DA:451,0 +DA:452,0 +DA:453,0 +DA:457,4 DA:458,2 -DA:459,0 -DA:460,0 -DA:461,2 -DA:468,2 -DA:469,2 -DA:470,0 -DA:471,0 -DA:472,0 -DA:477,3 -DA:478,6 -DA:479,6 -DA:482,0 -DA:483,0 -DA:484,0 -DA:492,2 -DA:493,4 -DA:494,2 -DA:495,2 -DA:497,2 -DA:498,2 -DA:499,2 -DA:500,2 -DA:503,4 -DA:504,1 -DA:505,1 -DA:506,1 -DA:507,1 -DA:509,1 -DA:521,3 -DA:525,9 -DA:527,6 +DA:461,0 +DA:466,0 +DA:467,0 +DA:475,0 +DA:481,0 +DA:485,0 +DA:487,0 +DA:497,0 +DA:502,0 +DA:503,0 +DA:504,0 +DA:505,0 +DA:506,0 +DA:507,0 +DA:509,0 +DA:512,0 +DA:513,0 +DA:514,0 +DA:515,0 +DA:517,0 +DA:520,0 +DA:521,0 +DA:522,0 +DA:523,0 +DA:524,0 +DA:527,0 DA:528,0 -DA:532,6 +DA:529,0 +DA:530,0 DA:533,0 -DA:540,9 -DA:541,3 -DA:542,3 -DA:543,3 -DA:544,3 -DA:545,3 -DA:546,3 -DA:547,3 -DA:548,3 -DA:550,3 -DA:556,1 -DA:557,1 -DA:558,0 +DA:537,0 +DA:538,0 +DA:539,0 +DA:543,1 +DA:544,1 +DA:545,2 +DA:549,5 +DA:554,5 +DA:555,5 +DA:557,2 +DA:558,2 DA:559,0 +DA:561,2 +DA:562,0 +DA:563,0 DA:564,2 -DA:569,8 -DA:573,1 -DA:574,1 -DA:575,1 -DA:579,2 -DA:580,3 -DA:581,3 -DA:583,1 -DA:584,1 -DA:590,1 -DA:592,2 -DA:593,1 -DA:594,1 -DA:600,3 -DA:604,3 -DA:608,3 -DA:609,3 -LF:246 -LH:166 +DA:571,2 +DA:572,2 +DA:573,0 +DA:574,0 +DA:575,0 +DA:580,4 +DA:581,8 +DA:582,6 +DA:585,0 +DA:586,0 +DA:587,0 +DA:595,2 +DA:596,4 +DA:597,2 +DA:598,2 +DA:600,2 +DA:601,2 +DA:602,2 +DA:603,2 +DA:606,4 +DA:607,1 +DA:608,1 +DA:609,1 +DA:610,1 +DA:612,1 +DA:624,4 +DA:628,12 +DA:630,8 +DA:631,1 +DA:635,6 +DA:636,0 +DA:640,6 +DA:641,0 +DA:648,9 +DA:649,3 +DA:650,3 +DA:651,3 +DA:652,3 +DA:653,3 +DA:654,3 +DA:655,3 +DA:656,3 +DA:658,3 +DA:664,1 +DA:665,1 +DA:666,0 +DA:667,0 +DA:672,2 +DA:677,8 +DA:681,1 +DA:682,1 +DA:683,1 +DA:687,2 +DA:688,3 +DA:689,3 +DA:691,1 +DA:692,1 +DA:698,1 +DA:700,2 +DA:701,1 +DA:702,1 +DA:708,4 +DA:712,4 +DA:716,3 +DA:717,3 +LF:300 +LH:199 end_of_record SF:lib/widgets/text_editor_dialog.dart DA:14,3 @@ -6909,8 +7109,8 @@ LF:120 LH:91 end_of_record SF:lib/widgets/app_buttons.dart -DA:44,23 -DA:46,23 +DA:44,24 +DA:46,24 DA:47,8 DA:48,6 DA:71,18 @@ -6925,7 +7125,7 @@ DA:89,18 DA:91,18 DA:92,14 DA:93,2 -DA:101,25 +DA:101,26 DA:122,15 DA:129,15 DA:131,15 @@ -6972,10 +7172,10 @@ DA:254,11 DA:255,11 DA:256,11 DA:257,11 -DA:270,25 -DA:290,50 -DA:341,25 -DA:342,25 +DA:270,26 +DA:290,52 +DA:341,26 +DA:342,26 DA:351,21 DA:352,42 DA:357,21 @@ -6983,40 +7183,40 @@ DA:365,21 DA:366,63 DA:367,84 DA:370,21 -DA:378,25 -DA:380,25 -DA:381,25 -DA:382,25 -DA:384,98 -DA:386,25 -DA:387,25 -DA:388,50 -DA:389,50 -DA:390,25 -DA:391,25 -DA:392,50 -DA:393,50 -DA:394,25 -DA:395,50 -DA:396,25 -DA:397,50 -DA:404,25 -DA:405,92 -DA:406,92 -DA:407,75 -DA:408,50 -DA:409,54 -DA:410,50 -DA:411,54 -DA:412,54 -DA:413,25 -DA:414,50 +DA:378,26 +DA:380,26 +DA:381,26 +DA:382,26 +DA:384,101 +DA:386,26 +DA:387,26 +DA:388,52 +DA:389,52 +DA:390,26 +DA:391,26 +DA:392,52 +DA:393,52 +DA:394,26 +DA:395,52 +DA:396,26 +DA:397,52 +DA:404,26 +DA:405,94 +DA:406,94 +DA:407,78 +DA:408,52 +DA:409,57 +DA:410,52 +DA:411,57 +DA:412,57 +DA:413,26 +DA:414,52 DA:415,2 DA:416,2 -DA:421,50 -DA:422,11 -DA:423,22 -DA:424,22 +DA:421,52 +DA:422,12 +DA:423,24 +DA:424,24 DA:432,1 DA:433,1 DA:434,3 @@ -7026,16 +7226,16 @@ DA:439,3 DA:442,2 DA:443,2 DA:444,6 -DA:447,92 +DA:447,94 DA:450,21 DA:451,21 DA:452,21 DA:453,42 DA:454,42 -DA:458,25 -DA:459,25 +DA:458,26 +DA:459,26 DA:460,42 -DA:462,25 +DA:462,26 DA:463,2 DA:468,1 DA:469,2 @@ -7071,35 +7271,35 @@ LF:158 LH:137 end_of_record SF:lib/widgets/app_icon.dart -DA:8,20 -DA:26,23 -DA:28,23 -DA:29,69 -DA:31,23 -DA:32,46 -DA:33,23 -DA:41,23 -DA:42,23 +DA:8,21 +DA:26,24 +DA:28,24 +DA:29,72 +DA:31,24 +DA:32,48 +DA:33,24 +DA:41,24 +DA:42,24 DA:43,34 -DA:49,16 +DA:49,17 LF:11 LH:11 end_of_record SF:lib/widgets/app_tooltip.dart -DA:6,15 -DA:13,15 -DA:14,15 -DA:19,15 -DA:21,15 -DA:22,15 -DA:25,15 -DA:27,15 +DA:6,16 +DA:13,16 +DA:14,16 +DA:19,16 +DA:21,16 +DA:22,16 +DA:25,16 +DA:27,16 DA:28,2 DA:29,2 -DA:30,30 -DA:34,15 -DA:35,16 -DA:36,15 +DA:30,32 +DA:34,16 +DA:35,17 +DA:36,16 DA:40,1 DA:41,2 DA:42,1 @@ -7385,7 +7585,7 @@ DA:71,5 DA:72,5 DA:74,5 DA:75,5 -DA:76,13 +DA:76,15 DA:79,15 DA:89,3 DA:90,3 @@ -7419,18 +7619,18 @@ LF:52 LH:52 end_of_record SF:lib/widgets/app_text.dart -DA:36,25 -DA:64,26 -DA:66,26 -DA:67,26 -DA:68,26 -DA:69,17 -DA:70,15 +DA:36,26 +DA:64,27 +DA:66,27 +DA:67,27 +DA:68,27 +DA:69,18 +DA:70,16 DA:71,5 DA:72,1 -DA:75,26 +DA:75,27 DA:76,18 -DA:79,130 +DA:79,135 LF:12 LH:12 end_of_record @@ -7680,14 +7880,14 @@ DA:193,7 DA:194,7 DA:198,7 DA:199,14 -DA:200,15 -DA:201,15 -DA:203,5 +DA:200,9 +DA:201,9 +DA:203,3 DA:204,0 DA:206,0 -DA:209,10 -DA:210,5 -DA:212,5 +DA:209,6 +DA:210,3 +DA:212,3 DA:217,14 DA:218,21 DA:222,7 @@ -7697,10 +7897,10 @@ DA:228,7 DA:229,14 DA:230,7 DA:231,7 -DA:234,5 -DA:235,15 -DA:238,5 -DA:239,15 +DA:234,3 +DA:235,9 +DA:238,3 +DA:239,9 DA:242,7 DA:243,7 LF:64 @@ -8075,85 +8275,85 @@ LH:244 end_of_record SF:lib/widgets/top_colors.dart DA:28,5 -DA:59,5 -DA:60,5 -DA:66,5 -DA:68,5 -DA:69,5 -DA:72,5 -DA:74,10 -DA:75,5 -DA:78,5 -DA:80,5 -DA:81,20 -DA:82,20 -DA:84,10 -DA:85,20 -DA:86,15 -DA:89,5 -DA:93,5 -DA:95,5 -DA:96,5 -DA:98,9 -DA:99,8 -DA:100,4 -DA:101,4 -DA:102,4 -DA:103,4 -DA:104,4 -DA:106,8 -DA:107,3 -DA:110,4 -DA:111,4 -DA:112,8 +DA:59,3 +DA:60,3 +DA:66,3 +DA:68,3 +DA:69,3 +DA:72,3 +DA:74,6 +DA:75,3 +DA:78,3 +DA:80,3 +DA:81,12 +DA:82,12 +DA:84,6 +DA:85,12 +DA:86,9 +DA:89,3 +DA:93,3 +DA:95,3 +DA:96,3 +DA:98,5 +DA:99,4 +DA:100,2 +DA:101,2 +DA:102,2 +DA:103,2 +DA:104,2 +DA:106,4 +DA:107,0 +DA:110,2 +DA:111,2 +DA:112,4 DA:115,1 DA:116,4 -DA:119,5 -DA:121,5 -DA:122,5 -DA:123,10 +DA:119,3 +DA:121,3 +DA:122,3 +DA:123,6 DA:124,0 DA:126,0 DA:127,0 DA:128,0 DA:130,0 -DA:134,5 -DA:135,5 -DA:136,5 -DA:137,15 -DA:138,5 -DA:157,5 -DA:158,5 -DA:161,14 -DA:162,12 -DA:163,12 -DA:165,12 -DA:166,8 -DA:170,9 -DA:171,8 -DA:172,12 -DA:173,4 -DA:176,12 -DA:177,12 -DA:178,4 -DA:183,10 -DA:184,6 -DA:185,1 -DA:187,3 -DA:189,1 -DA:191,3 -DA:193,1 -DA:197,14 -DA:201,5 -DA:202,10 -DA:206,20 -DA:210,10 -DA:211,13 -DA:212,12 -DA:215,3 -DA:216,9 +DA:134,3 +DA:135,3 +DA:136,3 +DA:137,9 +DA:138,3 +DA:157,3 +DA:158,3 +DA:161,8 +DA:162,6 +DA:163,6 +DA:165,6 +DA:166,4 +DA:170,5 +DA:171,4 +DA:172,6 +DA:173,2 +DA:176,6 +DA:177,6 +DA:178,2 +DA:183,6 +DA:184,3 +DA:185,0 +DA:187,0 +DA:189,0 +DA:191,0 +DA:193,0 +DA:197,8 +DA:201,3 +DA:202,6 +DA:206,12 +DA:210,6 +DA:211,7 +DA:212,4 +DA:215,1 +DA:216,3 LF:78 -LH:73 +LH:67 end_of_record SF:lib/widgets/transparent_background.dart DA:16,6 @@ -8176,622 +8376,421 @@ DA:73,0 DA:81,6 DA:87,24 DA:88,6 -DA:89,6 -DA:90,6 -DA:91,6 -DA:92,6 -DA:93,6 -DA:96,6 -DA:97,12 -DA:98,6 -DA:100,18 -DA:101,18 -DA:102,30 -DA:103,6 -DA:104,6 -DA:105,12 -DA:106,12 -DA:110,12 -DA:115,6 -LF:37 -LH:36 -end_of_record -SF:lib/widgets/text_alignment_dropdown.dart -DA:9,3 -DA:20,3 -DA:22,3 -DA:24,3 -DA:26,3 -DA:27,3 -DA:28,3 -DA:30,9 -DA:32,3 -DA:34,9 -DA:36,3 -DA:38,9 -DA:41,1 -DA:45,2 -LF:14 -LH:14 -end_of_record -SF:lib/widgets/text_style_toggle_buttons.dart -DA:9,3 -DA:18,3 -DA:20,3 -DA:22,3 -DA:23,3 -DA:26,9 -DA:27,2 -DA:28,4 -DA:29,2 -DA:30,6 -DA:35,3 -DA:38,9 -DA:39,1 -DA:40,2 -DA:41,1 -DA:42,3 -DA:52,2 -DA:56,4 -DA:58,2 -DA:61,1 -LF:20 -LH:20 -end_of_record -SF:lib/panels/side_panel/recent_files_dialog.dart -DA:27,0 -DA:35,1 -DA:39,1 -DA:43,1 -DA:46,1 -DA:47,2 -DA:52,1 -DA:66,1 -DA:67,1 -DA:73,1 -DA:75,1 -DA:76,1 -DA:79,1 -DA:81,3 -DA:82,1 -DA:83,3 -DA:85,1 -DA:86,1 -DA:89,1 -DA:90,1 -DA:91,1 -DA:95,1 -DA:96,2 -DA:97,1 -DA:98,1 -DA:99,2 -DA:100,1 -DA:104,2 -DA:106,1 -DA:108,2 -DA:110,2 -DA:112,1 -DA:113,1 -DA:114,1 -DA:116,1 -DA:117,2 -DA:118,2 -DA:119,0 -DA:120,0 -DA:121,0 -DA:122,0 -DA:123,0 -DA:125,0 -DA:128,1 -DA:130,4 -DA:131,1 -DA:132,2 -DA:136,0 -DA:141,1 -DA:142,1 -DA:143,1 -DA:144,1 -DA:145,0 -DA:146,1 -DA:148,1 -DA:149,0 -DA:150,0 -DA:151,0 -DA:152,0 -DA:154,0 -DA:157,1 -DA:167,1 -DA:168,1 -DA:169,1 -DA:170,1 -DA:187,1 -DA:188,1 -DA:189,1 -DA:190,1 -DA:192,1 -DA:193,1 -DA:194,1 -DA:195,1 -DA:196,1 -DA:197,1 -DA:200,1 -DA:204,1 -DA:205,1 -DA:206,1 -DA:221,1 -DA:222,1 -DA:223,1 -DA:224,1 -DA:231,0 -DA:232,0 -DA:233,0 -DA:234,0 -DA:235,0 -DA:238,0 -DA:242,1 -DA:243,2 -DA:244,1 -DA:245,1 -DA:248,2 -DA:249,1 -DA:255,1 -DA:256,1 -DA:257,1 -DA:259,1 -DA:260,1 -DA:265,1 -DA:273,0 -DA:274,0 -DA:277,0 -DA:278,0 -DA:285,0 -DA:286,0 -DA:287,0 -DA:288,0 -DA:289,0 -DA:294,0 -DA:295,0 -DA:296,0 -DA:303,0 -DA:308,0 -DA:309,0 -DA:311,0 -DA:315,0 -DA:319,0 -DA:322,0 -DA:330,0 -DA:331,0 -DA:332,0 -DA:333,0 -DA:334,0 -DA:336,0 -DA:337,0 -DA:342,0 -DA:347,0 -DA:349,0 -DA:353,0 -DA:356,0 -DA:358,0 -DA:359,0 -DA:365,1 -DA:380,1 -DA:381,1 -DA:389,1 -DA:391,1 -DA:392,1 -DA:393,1 -DA:396,1 -DA:398,5 -DA:399,5 -DA:400,1 -DA:402,1 -DA:403,2 -DA:404,1 -DA:406,1 -DA:408,1 -DA:409,1 -DA:410,1 -DA:411,1 -DA:412,1 -DA:413,1 -DA:416,1 -DA:420,1 -DA:421,1 -DA:423,1 -DA:424,1 -DA:425,1 -DA:426,1 -DA:427,1 -DA:428,2 -DA:434,1 -DA:435,1 -DA:437,1 -DA:438,3 -DA:451,1 -DA:452,1 -DA:453,1 -DA:454,1 -DA:458,1 -DA:459,2 -DA:460,2 -DA:461,1 -DA:462,1 -DA:464,1 -DA:466,1 -DA:467,1 -DA:470,1 -DA:476,1 -DA:477,1 -DA:494,1 -DA:495,2 -DA:497,7 -DA:498,1 -DA:502,2 -DA:503,1 -DA:504,1 -DA:507,0 -DA:508,0 -DA:509,0 -DA:510,0 -DA:518,1 -DA:519,2 -DA:520,2 -DA:521,1 -DA:522,1 -DA:523,1 -DA:524,0 -DA:525,0 -DA:526,0 -DA:527,0 -DA:533,0 -DA:534,0 -DA:538,0 -DA:539,0 -DA:540,0 -DA:545,0 -DA:546,0 -DA:547,0 -DA:548,0 -DA:555,1 -DA:556,2 -DA:558,7 -DA:559,1 -DA:560,0 -DA:563,2 -DA:564,1 -DA:565,1 -DA:568,0 -DA:569,0 -DA:570,0 -DA:571,0 -DA:579,0 -DA:580,0 -DA:581,0 -DA:582,0 -DA:583,0 -DA:584,0 -DA:585,0 -DA:586,0 -DA:587,0 -DA:588,0 -DA:593,0 -DA:594,0 -DA:599,0 -DA:600,0 -DA:601,0 -DA:606,0 -DA:608,0 -DA:610,0 -DA:611,0 -DA:612,0 -DA:613,0 -DA:619,0 -DA:620,0 -DA:621,0 -DA:622,0 -DA:630,1 -DA:634,1 -DA:635,2 -DA:636,1 -DA:637,1 -DA:638,1 -DA:641,1 -LF:257 -LH:157 -end_of_record -SF:lib/files/export_download_non_web.dart -DA:35,1 -DA:40,1 -DA:43,1 -DA:44,2 -DA:50,1 -DA:54,3 -DA:74,0 -DA:79,0 -DA:82,0 -DA:83,0 -DA:89,0 -DA:94,0 -DA:107,0 -DA:112,0 -DA:115,0 -DA:116,0 -DA:122,1 -DA:127,3 -DA:132,0 -DA:137,0 -DA:140,0 -DA:141,0 -DA:147,0 -DA:152,0 -DA:154,0 -DA:155,0 -DA:156,0 -DA:163,1 -DA:171,1 -DA:179,1 -DA:180,0 -DA:182,2 -DA:184,1 -DA:191,1 -DA:199,0 -DA:204,0 -DA:205,0 -DA:206,0 -DA:207,0 -DA:212,0 -DA:217,0 -DA:222,0 -DA:227,0 -DA:230,0 -DA:231,0 -DA:237,0 -DA:242,0 -LF:47 -LH:14 +DA:89,6 +DA:90,6 +DA:91,6 +DA:92,6 +DA:93,6 +DA:96,6 +DA:97,12 +DA:98,6 +DA:100,18 +DA:101,18 +DA:102,30 +DA:103,6 +DA:104,6 +DA:105,12 +DA:106,12 +DA:110,12 +DA:115,6 +LF:37 +LH:36 end_of_record -SF:lib/files/export_file_name.dart -DA:12,2 -DA:13,2 -DA:17,2 -DA:18,2 -DA:20,4 -DA:21,1 -DA:24,4 -DA:27,2 -DA:28,2 -DA:29,2 -DA:31,2 -LF:11 -LH:11 +SF:lib/widgets/text_alignment_dropdown.dart +DA:9,3 +DA:20,3 +DA:22,3 +DA:24,3 +DA:26,3 +DA:27,3 +DA:28,3 +DA:30,9 +DA:32,3 +DA:34,9 +DA:36,3 +DA:38,9 +DA:41,1 +DA:45,2 +LF:14 +LH:14 end_of_record -SF:lib/files/export_prepare.dart -DA:11,2 -DA:12,4 -DA:13,2 -DA:15,2 -DA:19,2 -DA:20,2 -DA:23,4 +SF:lib/widgets/text_style_toggle_buttons.dart +DA:9,3 +DA:18,3 +DA:20,3 +DA:22,3 +DA:23,3 +DA:26,9 DA:27,2 -DA:28,2 +DA:28,4 DA:29,2 -DA:33,1 -DA:34,1 -DA:35,1 -DA:39,2 +DA:30,6 +DA:35,3 +DA:38,9 +DA:39,1 DA:40,2 -DA:41,2 -DA:45,1 -DA:46,1 -DA:47,1 -DA:51,0 -DA:52,0 -DA:53,0 -DA:54,0 -LF:23 -LH:19 +DA:41,1 +DA:42,3 +DA:52,2 +DA:56,4 +DA:58,2 +DA:61,1 +LF:20 +LH:20 end_of_record -SF:lib/files/file_tiff.dart -DA:29,1 -DA:30,1 -DA:31,1 -DA:33,1 -DA:40,1 -DA:41,2 -DA:42,1 +SF:lib/panels/side_panel/recent_files_dialog.dart +DA:27,0 +DA:35,1 +DA:39,1 DA:43,1 -DA:44,2 -DA:45,1 DA:46,1 +DA:47,2 DA:52,1 -DA:72,1 +DA:66,1 +DA:67,1 DA:73,1 -DA:75,4 +DA:75,1 DA:76,1 -DA:77,2 -DA:78,2 DA:79,1 -DA:80,1 +DA:81,3 +DA:82,1 +DA:83,3 +DA:85,1 DA:86,1 -DA:87,1 DA:89,1 DA:90,1 DA:91,1 -DA:96,1 -DA:103,1 -DA:104,1 -DA:105,1 +DA:95,1 +DA:96,2 +DA:97,1 +DA:98,1 +DA:99,2 +DA:100,1 +DA:104,2 +DA:106,1 +DA:108,2 +DA:110,2 +DA:112,1 +DA:113,1 +DA:114,1 DA:116,1 -DA:120,1 +DA:117,2 +DA:118,2 +DA:119,0 +DA:120,0 +DA:121,0 DA:122,0 -DA:125,1 -DA:126,2 -DA:127,2 -DA:128,2 -DA:129,2 -DA:133,1 -DA:134,1 -DA:139,3 -DA:142,0 -DA:150,1 -DA:154,1 -DA:156,1 +DA:123,0 +DA:125,0 +DA:128,1 +DA:130,4 +DA:131,1 +DA:132,2 +DA:136,0 +DA:141,1 +DA:142,1 +DA:143,1 +DA:144,1 +DA:145,0 +DA:146,1 +DA:148,1 +DA:149,0 +DA:150,0 +DA:151,0 +DA:152,0 +DA:154,0 DA:157,1 -DA:158,1 -DA:159,2 -DA:160,4 -DA:172,1 -DA:173,1 -DA:174,1 -DA:180,1 -DA:181,0 -DA:182,1 -DA:186,1 -DA:187,5 -DA:198,0 -DA:202,0 -DA:203,0 -DA:207,0 -DA:208,0 -DA:209,0 -DA:212,0 -DA:216,0 -DA:217,0 -DA:219,0 -DA:229,1 -DA:239,1 -DA:251,1 -DA:255,2 -DA:259,2 -DA:260,1 -DA:261,1 -DA:265,1 -DA:266,1 -DA:268,2 -DA:269,1 -DA:270,2 -DA:274,2 -DA:276,2 -DA:277,1 -DA:280,2 -DA:281,1 -DA:284,1 -DA:285,1 -DA:287,2 -DA:288,1 -DA:293,1 -DA:297,1 -DA:303,1 -DA:304,1 +DA:167,1 +DA:168,1 +DA:169,1 +DA:170,1 +DA:187,1 +DA:188,1 +DA:189,1 +DA:190,1 +DA:192,1 +DA:193,1 +DA:194,1 +DA:195,1 +DA:196,1 +DA:197,1 +DA:200,1 +DA:204,1 +DA:205,1 +DA:206,1 +DA:221,1 +DA:222,1 +DA:223,1 +DA:224,1 +DA:231,0 +DA:232,0 +DA:233,0 +DA:234,0 +DA:235,0 +DA:238,0 +DA:242,1 +DA:243,2 +DA:244,1 +DA:245,1 +DA:248,2 +DA:249,1 +DA:255,1 +DA:256,1 +DA:257,1 +DA:259,1 +DA:260,1 +DA:265,1 +DA:273,0 +DA:274,0 +DA:277,0 +DA:278,0 +DA:285,0 +DA:286,0 +DA:287,0 +DA:288,0 +DA:289,0 +DA:294,0 +DA:295,0 +DA:296,0 +DA:303,0 +DA:308,0 +DA:309,0 DA:311,0 -DA:316,1 -DA:317,1 -DA:318,1 -DA:320,2 -DA:323,1 -DA:324,1 -DA:325,1 -DA:326,1 -DA:330,1 -DA:334,1 -DA:335,1 -DA:336,1 -DA:341,0 -DA:350,1 -DA:351,1 -DA:353,1 -DA:354,0 -DA:362,0 -DA:363,0 -DA:364,0 -DA:365,0 -DA:366,0 -DA:369,1 -DA:373,3 -DA:374,2 -DA:378,4 +DA:315,0 +DA:319,0 +DA:322,0 +DA:330,0 +DA:331,0 +DA:332,0 +DA:333,0 +DA:334,0 +DA:336,0 +DA:337,0 +DA:342,0 +DA:347,0 +DA:349,0 +DA:353,0 +DA:356,0 +DA:358,0 +DA:359,0 +DA:365,1 +DA:380,1 DA:381,1 -DA:385,3 -DA:386,2 -DA:390,1 +DA:389,1 +DA:391,1 +DA:392,1 DA:393,1 -DA:397,3 -DA:398,2 +DA:396,1 +DA:398,5 +DA:399,5 +DA:400,1 DA:402,1 +DA:403,2 +DA:404,1 DA:406,1 -DA:410,3 -DA:411,2 -DA:415,2 -DA:416,2 -DA:417,1 -DA:420,5 +DA:408,1 +DA:409,1 +DA:410,1 +DA:411,1 +DA:412,1 +DA:413,1 +DA:416,1 +DA:420,1 DA:421,1 -DA:425,2 +DA:423,1 +DA:424,1 +DA:425,1 DA:426,1 -DA:430,1 -DA:431,3 -DA:432,3 -DA:433,1 -DA:434,2 -DA:436,1 +DA:427,1 +DA:428,2 +DA:434,1 +DA:435,1 DA:437,1 -DA:438,1 -DA:439,1 -DA:443,1 -DA:447,4 -DA:448,4 -DA:449,4 +DA:438,3 +DA:451,1 +DA:452,1 +DA:453,1 DA:454,1 -DA:458,4 +DA:458,1 +DA:459,2 +DA:460,2 +DA:461,1 DA:462,1 -DA:468,2 -DA:469,2 -DA:470,2 -DA:471,2 -DA:472,2 -DA:474,1 -DA:475,1 +DA:464,1 +DA:466,1 +DA:467,1 +DA:470,1 +DA:476,1 DA:477,1 -DA:485,1 -DA:503,0 -DA:504,0 +DA:494,1 +DA:495,2 +DA:497,7 +DA:498,1 +DA:502,2 +DA:503,1 +DA:504,1 +DA:507,0 +DA:508,0 +DA:509,0 DA:510,0 -DA:511,0 -DA:512,0 -DA:514,0 -DA:516,0 +DA:518,1 +DA:519,2 +DA:520,2 +DA:521,1 +DA:522,1 +DA:523,1 +DA:524,0 DA:525,0 -DA:535,1 -DA:536,1 -DA:541,1 -DA:542,1 -DA:546,1 -DA:547,1 -DA:548,2 -DA:549,1 -DA:550,1 -DA:551,1 -DA:554,2 -DA:555,2 -DA:561,1 +DA:526,0 +DA:527,0 +DA:533,0 +DA:534,0 +DA:538,0 +DA:539,0 +DA:540,0 +DA:545,0 +DA:546,0 +DA:547,0 +DA:548,0 +DA:555,1 +DA:556,2 +DA:558,7 +DA:559,1 +DA:560,0 +DA:563,2 +DA:564,1 +DA:565,1 DA:568,0 -DA:574,1 -DA:578,1 -DA:579,1 -DA:580,2 -DA:584,1 -DA:585,1 -DA:586,1 -DA:589,0 -DA:590,0 -DA:599,1 -DA:600,1 -DA:601,2 -DA:602,1 -DA:604,1 -LF:197 -LH:165 +DA:569,0 +DA:570,0 +DA:571,0 +DA:579,0 +DA:580,0 +DA:581,0 +DA:582,0 +DA:583,0 +DA:584,0 +DA:585,0 +DA:586,0 +DA:587,0 +DA:588,0 +DA:593,0 +DA:594,0 +DA:599,0 +DA:600,0 +DA:601,0 +DA:606,0 +DA:608,0 +DA:610,0 +DA:611,0 +DA:612,0 +DA:613,0 +DA:619,0 +DA:620,0 +DA:621,0 +DA:622,0 +DA:630,1 +DA:634,1 +DA:635,2 +DA:636,1 +DA:637,1 +DA:638,1 +DA:641,1 +LF:257 +LH:157 +end_of_record +SF:lib/files/export_download_non_web.dart +DA:35,1 +DA:40,1 +DA:43,1 +DA:44,2 +DA:50,2 +DA:54,6 +DA:74,0 +DA:79,0 +DA:82,0 +DA:83,0 +DA:89,0 +DA:94,0 +DA:107,0 +DA:112,0 +DA:115,0 +DA:116,0 +DA:122,1 +DA:127,3 +DA:132,0 +DA:137,0 +DA:140,0 +DA:141,0 +DA:147,0 +DA:152,0 +DA:154,0 +DA:155,0 +DA:156,0 +DA:163,1 +DA:171,1 +DA:179,1 +DA:180,0 +DA:182,2 +DA:184,1 +DA:191,1 +DA:199,0 +DA:204,0 +DA:205,0 +DA:206,0 +DA:207,0 +DA:212,0 +DA:217,0 +DA:222,0 +DA:227,0 +DA:230,0 +DA:231,0 +DA:237,0 +DA:242,0 +LF:47 +LH:14 +end_of_record +SF:lib/files/export_file_name.dart +DA:12,2 +DA:13,2 +DA:17,2 +DA:18,2 +DA:20,4 +DA:21,1 +DA:24,4 +DA:27,2 +DA:28,2 +DA:29,2 +DA:31,2 +LF:11 +LH:11 +end_of_record +SF:lib/files/export_prepare.dart +DA:11,3 +DA:12,6 +DA:13,2 +DA:15,3 +DA:19,3 +DA:20,3 +DA:23,6 +DA:27,3 +DA:28,3 +DA:29,3 +DA:33,1 +DA:34,1 +DA:35,1 +DA:39,2 +DA:40,2 +DA:41,2 +DA:45,1 +DA:46,1 +DA:47,1 +DA:51,0 +DA:52,0 +DA:53,0 +DA:54,0 +LF:23 +LH:19 end_of_record SF:lib/files/file_tiff_encoder.dart DA:4,1 @@ -8938,97 +8937,306 @@ DA:317,1 DA:323,1 DA:324,1 DA:325,1 -DA:329,1 -DA:336,2 -DA:337,0 +DA:329,1 +DA:336,2 +DA:337,1 +DA:345,1 +DA:346,1 +DA:348,1 +DA:352,1 +DA:353,3 +DA:356,2 +DA:357,1 +DA:358,1 +DA:361,2 +DA:365,1 +DA:366,1 +DA:367,1 +DA:368,0 +DA:371,3 +DA:375,1 +DA:376,2 +DA:380,1 +DA:381,3 +DA:384,2 +DA:385,1 +DA:386,1 +DA:389,2 +DA:393,1 +DA:394,2 +DA:398,1 +DA:402,1 +DA:403,1 +DA:411,1 +DA:412,1 +DA:413,1 +DA:414,1 +DA:415,3 +DA:419,1 +DA:423,1 +DA:424,4 +DA:429,4 +DA:430,3 +DA:431,1 +DA:432,2 +DA:433,5 +DA:434,5 +DA:435,5 +DA:436,2 +DA:442,3 +DA:443,3 +DA:444,1 +DA:445,2 +DA:446,5 +DA:447,5 +DA:448,5 +DA:449,2 +DA:457,1 +DA:461,1 +DA:465,1 +DA:469,0 +DA:470,0 +DA:474,1 +DA:475,1 +DA:476,1 +DA:477,0 +DA:480,4 +DA:485,1 +DA:493,1 +DA:512,1 +DA:517,1 +DA:518,5 +DA:519,4 +DA:521,1 +DA:522,3 +DA:523,1 +DA:524,1 +DA:526,4 +DA:538,1 +DA:539,3 +DA:541,2 +DA:542,1 +DA:543,3 +DA:548,1 +DA:549,2 +DA:553,3 +DA:556,2 +DA:557,1 +DA:558,1 +DA:561,2 +DA:562,0 +DA:563,0 +LF:233 +LH:227 +end_of_record +SF:lib/files/file_tiff.dart +DA:29,1 +DA:30,1 +DA:31,1 +DA:33,1 +DA:40,1 +DA:44,2 +DA:45,1 +DA:46,1 +DA:47,2 +DA:48,1 +DA:49,1 +DA:56,1 +DA:76,1 +DA:77,1 +DA:79,4 +DA:80,1 +DA:81,2 +DA:82,2 +DA:83,1 +DA:84,1 +DA:90,1 +DA:91,1 +DA:93,3 +DA:94,1 +DA:95,1 +DA:100,1 +DA:107,1 +DA:108,1 +DA:109,1 +DA:120,1 +DA:124,1 +DA:126,0 +DA:129,1 +DA:130,2 +DA:131,2 +DA:132,2 +DA:133,2 +DA:137,1 +DA:138,1 +DA:143,3 +DA:146,0 +DA:154,1 +DA:158,1 +DA:161,1 +DA:162,1 +DA:163,1 +DA:164,2 +DA:165,1 +DA:167,1 +DA:168,1 +DA:169,1 +DA:171,2 +DA:180,1 +DA:181,1 +DA:182,1 +DA:193,1 +DA:194,1 +DA:195,1 +DA:201,1 +DA:202,0 +DA:203,1 +DA:207,1 +DA:208,5 +DA:219,0 +DA:223,0 +DA:224,0 +DA:228,0 +DA:229,0 +DA:230,0 +DA:233,0 +DA:237,0 +DA:238,0 +DA:240,0 +DA:250,1 +DA:260,1 +DA:272,1 +DA:276,2 +DA:280,2 +DA:281,1 +DA:282,1 +DA:286,1 +DA:287,1 +DA:289,2 +DA:290,1 +DA:291,2 +DA:295,2 +DA:297,2 +DA:298,1 +DA:301,2 +DA:302,1 +DA:305,1 +DA:306,1 +DA:308,2 +DA:309,1 +DA:314,1 +DA:318,1 +DA:324,1 +DA:325,1 +DA:332,0 +DA:337,1 +DA:338,1 +DA:339,1 +DA:341,2 +DA:344,1 DA:345,1 DA:346,1 -DA:348,1 -DA:352,1 -DA:353,3 -DA:356,2 +DA:347,1 +DA:351,1 +DA:355,1 +DA:356,1 DA:357,1 -DA:358,1 -DA:361,2 -DA:365,1 -DA:366,1 -DA:367,1 -DA:368,0 -DA:371,3 -DA:375,1 -DA:376,2 -DA:380,1 -DA:381,3 -DA:384,2 -DA:385,1 -DA:386,1 -DA:389,2 -DA:393,1 -DA:394,2 -DA:398,1 +DA:362,0 +DA:371,1 +DA:372,1 +DA:374,1 +DA:375,0 +DA:383,0 +DA:384,0 +DA:385,0 +DA:386,0 +DA:387,0 +DA:390,1 +DA:394,3 +DA:395,2 +DA:399,4 DA:402,1 -DA:403,1 +DA:406,3 +DA:407,2 DA:411,1 -DA:412,1 -DA:413,1 DA:414,1 -DA:415,3 -DA:419,1 +DA:418,3 +DA:419,2 DA:423,1 -DA:424,4 -DA:429,4 -DA:430,3 -DA:431,1 +DA:427,1 +DA:431,3 DA:432,2 -DA:433,5 -DA:434,5 -DA:435,5 DA:436,2 -DA:442,3 -DA:443,3 -DA:444,1 -DA:445,2 -DA:446,5 -DA:447,5 -DA:448,5 -DA:449,2 +DA:437,2 +DA:438,1 +DA:441,5 +DA:442,1 +DA:446,2 +DA:447,1 +DA:451,1 +DA:452,3 +DA:453,3 +DA:454,1 +DA:455,2 DA:457,1 -DA:461,1 -DA:465,1 -DA:469,0 -DA:470,0 -DA:474,1 +DA:458,1 +DA:459,1 +DA:460,1 +DA:464,1 +DA:468,4 +DA:469,4 +DA:470,4 DA:475,1 -DA:476,1 -DA:477,0 -DA:480,4 +DA:479,4 DA:485,1 -DA:493,1 -DA:512,1 -DA:517,1 -DA:518,5 -DA:519,4 -DA:521,1 -DA:522,3 -DA:523,1 -DA:524,1 -DA:526,4 -DA:538,1 -DA:539,3 -DA:541,2 -DA:542,1 -DA:543,3 -DA:548,1 -DA:549,2 -DA:553,3 -DA:556,2 -DA:557,1 -DA:558,1 -DA:561,2 -DA:562,0 -DA:563,0 -LF:233 -LH:226 +DA:491,2 +DA:492,2 +DA:493,2 +DA:494,2 +DA:495,2 +DA:497,1 +DA:498,1 +DA:500,1 +DA:509,1 +DA:531,0 +DA:532,0 +DA:538,0 +DA:539,0 +DA:540,0 +DA:542,0 +DA:544,0 +DA:553,0 +DA:563,1 +DA:564,1 +DA:569,1 +DA:570,1 +DA:574,1 +DA:575,1 +DA:576,2 +DA:577,1 +DA:578,1 +DA:579,1 +DA:580,1 +DA:583,2 +DA:584,2 +DA:590,1 +DA:598,0 +DA:604,1 +DA:608,1 +DA:609,1 +DA:610,2 +DA:614,1 +DA:615,1 +DA:616,1 +DA:619,0 +DA:620,0 +DA:629,1 +DA:630,1 +DA:631,2 +DA:632,1 +DA:634,1 +LF:205 +LH:173 end_of_record SF:lib/files/save_backup.dart DA:9,0 @@ -9274,97 +9482,103 @@ DA:187,0 DA:188,0 DA:189,0 DA:190,0 -DA:196,0 DA:197,0 -DA:199,0 +DA:198,0 DA:200,0 -DA:204,0 -DA:221,0 -DA:226,0 -DA:232,0 -DA:233,0 +DA:201,0 +DA:205,0 +DA:222,0 +DA:228,0 +DA:234,0 DA:235,0 DA:237,0 -DA:238,0 -DA:240,0 +DA:239,0 DA:241,0 DA:243,0 -DA:244,0 DA:245,0 -DA:253,0 -DA:254,0 -DA:258,0 -DA:263,0 -DA:268,3 -DA:289,1 -DA:290,3 -DA:299,0 -DA:306,0 -DA:308,0 -DA:309,0 -DA:310,0 -DA:311,0 -DA:312,0 -DA:318,0 -DA:324,0 -DA:331,0 -DA:332,0 -DA:334,0 +DA:247,0 +DA:248,0 +DA:249,0 +DA:256,0 +DA:259,0 +DA:260,0 +DA:261,0 +DA:266,0 +DA:271,0 +DA:282,0 +DA:291,0 +DA:292,0 +DA:293,0 +DA:297,3 +DA:318,1 +DA:319,3 +DA:328,0 +DA:335,0 +DA:337,0 +DA:338,0 +DA:339,0 DA:340,0 -DA:346,0 -DA:351,0 -DA:359,0 +DA:341,0 +DA:347,0 +DA:353,0 DA:360,0 DA:361,0 -DA:362,0 DA:363,0 -DA:366,0 -DA:373,0 -DA:381,0 -DA:382,0 -DA:383,0 -DA:384,0 -DA:404,0 -DA:408,0 -DA:409,0 +DA:369,0 +DA:375,0 +DA:380,0 +DA:388,0 +DA:389,0 +DA:390,0 +DA:391,0 +DA:392,0 +DA:395,0 +DA:402,0 DA:410,0 +DA:411,0 DA:412,0 DA:413,0 -DA:414,0 -DA:418,0 -DA:419,0 -DA:423,0 -DA:425,0 -DA:426,0 -DA:427,0 -DA:428,0 -DA:429,0 -DA:430,0 -DA:431,0 -DA:432,0 DA:433,0 -DA:435,0 -DA:436,0 DA:437,0 -DA:444,0 +DA:438,0 +DA:439,0 +DA:441,0 +DA:442,0 +DA:443,0 +DA:447,0 DA:448,0 -DA:449,0 +DA:452,0 +DA:454,0 +DA:455,0 +DA:456,0 +DA:457,0 +DA:458,0 DA:459,0 DA:460,0 DA:461,0 DA:462,0 -DA:463,0 DA:464,0 -DA:470,0 -DA:475,0 -DA:476,0 -DA:479,0 -DA:480,0 -DA:482,0 -DA:483,0 -DA:484,0 -DA:486,0 -LF:155 +DA:465,0 +DA:466,0 +DA:473,0 +DA:477,0 +DA:478,0 +DA:488,0 +DA:489,0 +DA:490,0 +DA:491,0 +DA:492,0 +DA:493,0 +DA:499,0 +DA:504,0 +DA:505,0 +DA:508,0 +DA:509,0 +DA:511,0 +DA:512,0 +DA:513,0 +DA:515,0 +LF:161 LH:3 end_of_record SF:lib/widgets/confirm_discard_dialog.dart @@ -9389,65 +9603,68 @@ LH:16 end_of_record SF:lib/files/save.dart DA:18,0 -DA:32,2 -DA:33,6 -DA:35,2 +DA:34,3 DA:37,2 -DA:38,2 +DA:38,6 DA:40,2 DA:42,2 DA:43,2 DA:45,2 DA:47,2 -DA:56,0 +DA:48,2 +DA:50,2 +DA:52,2 DA:61,0 -DA:62,0 -DA:63,0 -DA:64,0 -DA:65,0 +DA:66,0 +DA:67,0 DA:68,0 DA:69,0 DA:70,0 -DA:82,1 +DA:73,0 +DA:74,0 +DA:75,0 DA:87,1 -DA:88,1 -DA:90,0 -DA:91,0 -DA:92,0 -DA:97,1 -DA:98,0 -DA:101,0 -DA:104,1 -DA:105,0 -DA:108,0 -DA:111,1 -DA:112,1 -DA:115,2 -DA:118,0 -DA:119,0 -DA:120,0 +DA:92,1 +DA:93,1 +DA:95,0 +DA:96,0 +DA:97,0 +DA:102,1 +DA:103,1 +DA:106,2 +DA:109,1 +DA:110,0 +DA:113,0 +DA:116,1 +DA:117,1 +DA:120,2 DA:123,0 +DA:124,0 DA:125,0 -DA:126,0 -DA:127,0 +DA:128,0 DA:130,0 DA:131,0 -DA:134,0 -DA:137,0 -DA:138,0 -DA:141,0 -DA:146,1 -DA:147,0 -DA:150,0 -DA:151,0 -DA:152,0 -DA:159,1 -DA:164,1 -DA:165,1 -DA:167,1 -DA:175,0 -LF:58 -LH:23 +DA:132,0 +DA:135,0 +DA:136,0 +DA:139,0 +DA:142,0 +DA:143,0 +DA:146,0 +DA:152,1 +DA:153,2 +DA:156,1 +DA:157,0 +DA:160,0 +DA:161,0 +DA:162,0 +DA:169,1 +DA:174,1 +DA:175,1 +DA:177,1 +DA:185,0 +LF:61 +LH:28 end_of_record SF:lib/files/webp_bit_writer.dart DA:12,3 @@ -10138,7 +10355,7 @@ LF:124 LH:47 end_of_record SF:lib/main_screen.dart -DA:21,1 +DA:21,2 DA:25,3 DA:27,3 DA:28,3 @@ -10209,7 +10426,7 @@ LF:67 LH:56 end_of_record SF:lib/pages/platforms_page.dart -DA:24,1 +DA:24,2 DA:26,2 DA:28,2 DA:30,2 @@ -10268,7 +10485,7 @@ LF:55 LH:52 end_of_record SF:lib/pages/settings_page.dart -DA:13,1 +DA:13,2 DA:15,2 DA:16,2 DA:24,2 @@ -10455,28 +10672,28 @@ DA:263,6 DA:270,1 DA:271,2 DA:274,2 -DA:281,1 -DA:287,1 -DA:293,1 -DA:299,1 -DA:305,1 -DA:311,1 -DA:317,1 -DA:323,1 -DA:329,1 -DA:335,1 -DA:341,1 -DA:347,1 -DA:353,1 -DA:359,1 -DA:365,1 -DA:371,1 -DA:377,1 -DA:383,1 -DA:389,1 -DA:395,1 -DA:401,1 -DA:407,1 +DA:281,2 +DA:287,2 +DA:293,2 +DA:299,2 +DA:305,2 +DA:311,2 +DA:317,2 +DA:323,2 +DA:329,2 +DA:335,2 +DA:341,2 +DA:347,2 +DA:353,2 +DA:359,2 +DA:365,2 +DA:371,2 +DA:377,2 +DA:383,2 +DA:389,2 +DA:395,2 +DA:401,2 +DA:407,2 DA:411,3 DA:412,3 DA:414,3 @@ -10997,348 +11214,395 @@ LF:299 LH:270 end_of_record SF:lib/widgets/main_view.dart -DA:32,1 -DA:36,4 +DA:33,2 DA:37,4 -DA:42,4 -DA:44,4 -DA:46,4 -DA:48,4 -DA:50,4 +DA:38,4 +DA:43,4 +DA:45,4 +DA:47,4 +DA:49,4 DA:51,4 -DA:52,8 -DA:53,4 -DA:56,8 -DA:57,4 +DA:52,4 +DA:53,8 +DA:54,4 +DA:57,8 DA:58,4 DA:59,4 -DA:63,4 +DA:60,4 DA:64,4 DA:65,4 DA:66,4 -DA:68,4 -DA:69,4 -DA:70,4 -DA:71,4 -DA:77,4 -DA:78,1 -DA:79,1 +DA:67,4 +DA:71,8 +DA:73,4 +DA:74,4 +DA:75,4 +DA:76,4 +DA:82,4 DA:83,1 DA:84,1 -DA:85,1 -DA:86,1 -DA:87,1 -DA:88,2 +DA:88,1 +DA:89,1 DA:90,1 DA:91,1 DA:92,1 -DA:93,1 -DA:94,1 -DA:95,2 -DA:101,6 -DA:102,2 -DA:103,2 -DA:104,2 -DA:105,8 +DA:93,2 +DA:95,1 +DA:96,1 +DA:97,1 +DA:98,1 +DA:99,1 +DA:100,2 DA:106,2 -DA:111,6 -DA:112,2 -DA:114,6 -DA:115,10 -DA:117,6 -DA:118,10 -DA:119,2 -DA:120,2 -DA:121,8 -DA:122,2 -DA:128,8 -DA:129,2 -DA:130,2 -DA:131,1 -DA:133,3 -DA:134,6 -DA:136,3 -DA:137,6 -DA:138,1 -DA:139,6 -DA:140,6 -DA:141,1 -DA:142,2 -DA:152,4 -DA:153,0 -DA:155,0 -DA:156,0 -DA:157,0 -DA:159,0 -DA:160,0 -DA:164,4 -DA:165,0 -DA:167,0 -DA:168,0 -DA:169,0 +DA:107,2 +DA:108,2 +DA:109,2 +DA:110,8 +DA:111,2 +DA:116,2 +DA:117,2 +DA:119,6 +DA:120,10 +DA:122,6 +DA:123,10 +DA:124,2 +DA:125,2 +DA:126,8 +DA:127,2 +DA:134,4 +DA:135,0 +DA:136,0 +DA:137,0 +DA:138,0 +DA:139,0 +DA:140,0 +DA:146,8 +DA:147,2 +DA:148,2 +DA:149,1 +DA:151,3 +DA:152,6 +DA:154,3 +DA:155,6 +DA:156,1 +DA:157,6 +DA:158,6 +DA:159,1 +DA:160,2 +DA:170,4 DA:171,0 -DA:172,0 -DA:179,8 -DA:180,2 -DA:181,2 +DA:173,0 +DA:174,0 +DA:175,0 +DA:177,0 +DA:178,0 DA:182,4 -DA:184,2 -DA:185,4 -DA:188,4 -DA:189,2 -DA:190,2 -DA:191,4 -DA:192,0 -DA:193,0 -DA:195,0 -DA:196,0 -DA:197,0 -DA:201,0 -DA:202,0 -DA:206,0 -DA:207,0 -DA:209,0 +DA:183,0 +DA:185,0 +DA:186,0 +DA:187,0 +DA:189,0 +DA:190,0 +DA:197,8 +DA:198,3 +DA:199,3 +DA:200,6 +DA:202,3 +DA:203,6 +DA:206,6 +DA:207,4 +DA:208,4 +DA:209,6 DA:210,0 -DA:212,0 +DA:211,0 DA:213,0 -DA:215,1 -DA:216,2 -DA:217,0 -DA:221,1 -DA:222,0 -DA:226,1 +DA:214,0 +DA:215,0 +DA:219,0 +DA:220,0 +DA:224,0 +DA:225,0 +DA:227,0 DA:228,0 -DA:229,0 -DA:230,1 -DA:231,1 -DA:233,0 -DA:234,0 +DA:230,0 +DA:231,0 +DA:233,1 +DA:234,2 DA:235,0 -DA:239,0 -DA:242,0 -DA:251,8 +DA:239,1 +DA:240,0 +DA:244,1 +DA:246,0 +DA:247,0 +DA:248,1 +DA:249,1 +DA:251,0 DA:252,0 -DA:255,0 -DA:256,0 +DA:253,0 DA:257,0 -DA:258,0 -DA:263,5 -DA:268,8 -DA:269,2 -DA:270,2 -DA:271,2 -DA:272,4 -DA:273,2 -DA:274,2 -DA:275,4 -DA:276,4 -DA:277,2 -DA:278,4 -DA:281,3 -DA:282,1 -DA:283,2 -DA:285,2 -DA:298,0 -DA:304,0 -DA:305,0 -DA:307,0 -DA:308,0 -DA:309,0 -DA:310,0 -DA:311,0 -DA:313,0 -DA:314,0 -DA:315,0 -DA:324,4 -DA:325,4 -DA:336,4 -DA:337,4 -DA:338,4 -DA:339,4 -DA:340,8 -DA:341,8 +DA:260,0 +DA:269,8 +DA:270,0 +DA:273,0 +DA:274,0 +DA:275,0 +DA:276,0 +DA:281,5 +DA:286,8 +DA:287,2 +DA:288,2 +DA:289,2 +DA:290,4 +DA:291,2 +DA:292,2 +DA:293,4 +DA:294,4 +DA:295,2 +DA:296,4 +DA:299,3 +DA:300,1 +DA:301,2 +DA:303,2 +DA:316,0 +DA:322,0 +DA:323,0 +DA:325,0 +DA:326,0 +DA:327,0 +DA:328,0 +DA:329,0 +DA:331,0 +DA:332,0 +DA:333,0 DA:342,4 -DA:343,8 -DA:345,4 -DA:346,8 -DA:347,8 -DA:358,0 -DA:359,0 -DA:360,0 -DA:361,0 -DA:367,2 -DA:373,2 -DA:375,2 -DA:377,4 -DA:378,2 -DA:379,2 -DA:380,2 -DA:387,2 +DA:343,4 +DA:354,4 +DA:355,4 +DA:356,4 +DA:357,4 +DA:358,8 +DA:359,8 +DA:360,4 +DA:361,8 +DA:363,4 +DA:364,8 +DA:365,8 +DA:376,0 +DA:377,0 +DA:378,0 +DA:379,0 +DA:385,2 DA:391,2 DA:393,2 -DA:394,2 -DA:395,2 -DA:396,10 -DA:399,2 -DA:400,6 -DA:401,2 -DA:402,2 -DA:404,2 -DA:405,4 -DA:406,2 -DA:408,4 -DA:410,4 +DA:395,4 +DA:396,2 +DA:397,2 +DA:398,2 +DA:405,2 +DA:409,2 +DA:411,2 DA:412,2 DA:413,2 -DA:414,2 -DA:415,2 -DA:416,2 +DA:414,10 DA:417,2 -DA:418,2 +DA:418,6 DA:419,2 -DA:421,4 +DA:420,2 DA:422,2 +DA:423,4 DA:424,2 -DA:427,2 +DA:426,4 +DA:428,4 +DA:430,2 +DA:431,2 DA:432,2 -DA:434,6 -DA:445,1 -DA:446,1 -DA:447,3 -DA:448,3 -DA:449,2 -DA:450,3 -DA:452,2 -DA:453,2 -DA:454,3 -DA:465,1 -DA:498,1 -DA:500,2 -DA:504,4 -DA:505,4 -DA:510,1 -DA:511,2 -DA:512,1 -DA:513,1 -DA:514,1 -DA:515,1 +DA:433,2 +DA:434,2 +DA:435,2 +DA:436,2 +DA:437,2 +DA:439,4 +DA:440,2 +DA:442,2 +DA:445,2 +DA:450,2 +DA:452,6 +DA:463,1 +DA:464,1 +DA:465,3 +DA:466,3 +DA:467,2 +DA:468,3 +DA:470,2 +DA:471,2 +DA:472,3 +DA:483,1 DA:516,1 -DA:518,1 -DA:519,2 -DA:520,1 -DA:521,5 -DA:522,1 -DA:523,1 -DA:524,1 +DA:518,2 +DA:522,4 +DA:523,4 +DA:528,1 +DA:529,2 DA:530,1 +DA:531,1 +DA:532,1 +DA:533,1 +DA:534,1 DA:536,1 DA:537,2 DA:538,1 -DA:539,3 -DA:540,3 -DA:546,1 -DA:547,1 -DA:548,2 -DA:550,2 -DA:551,3 -DA:552,2 -DA:553,2 -DA:559,2 -DA:560,1 -DA:561,1 -DA:562,1 -DA:563,1 +DA:539,5 +DA:540,1 +DA:541,1 +DA:542,1 +DA:548,1 +DA:554,1 +DA:555,2 +DA:556,1 +DA:557,3 +DA:558,3 DA:564,1 -DA:566,0 -DA:568,0 -DA:569,0 -DA:570,0 -DA:571,0 +DA:565,1 +DA:566,2 +DA:568,2 +DA:569,3 +DA:570,2 +DA:571,2 +DA:577,2 +DA:578,1 +DA:579,1 DA:580,1 -DA:590,1 -DA:591,1 -DA:596,2 -DA:599,1 -DA:601,1 -DA:603,2 -DA:604,1 -DA:607,1 +DA:581,1 +DA:582,1 +DA:584,1 +DA:586,2 +DA:587,0 +DA:588,0 +DA:589,0 +DA:598,1 +DA:608,1 DA:609,1 -DA:610,1 -DA:611,1 -DA:612,2 -DA:614,1 -DA:615,2 -DA:616,2 -DA:617,2 -DA:618,2 -DA:619,2 +DA:614,2 +DA:617,1 +DA:619,1 +DA:621,2 +DA:622,1 +DA:625,1 +DA:627,1 +DA:628,1 +DA:629,1 +DA:630,2 DA:632,1 -DA:655,1 -DA:657,2 -DA:661,4 -DA:662,4 -DA:665,1 -DA:667,1 -DA:668,2 -DA:669,1 -DA:670,1 -DA:671,1 -DA:672,1 -DA:677,3 -DA:678,4 -DA:681,3 -DA:682,2 -DA:683,5 -DA:684,3 +DA:633,2 +DA:634,2 +DA:635,2 +DA:636,2 +DA:637,2 +DA:650,1 +DA:673,1 +DA:675,2 +DA:679,4 +DA:680,4 +DA:683,1 DA:685,1 +DA:686,2 +DA:687,1 DA:688,1 DA:689,1 DA:690,1 -DA:691,1 -DA:693,1 -DA:694,1 -DA:696,1 -DA:697,1 -DA:698,1 -DA:699,1 -DA:700,1 -DA:701,1 -DA:705,1 -DA:707,3 -DA:708,2 -DA:709,3 -DA:710,3 -DA:711,3 -LF:313 -LH:254 +DA:695,3 +DA:696,4 +DA:699,3 +DA:700,2 +DA:701,5 +DA:702,3 +DA:703,1 +DA:706,1 +DA:707,1 +DA:708,1 +DA:709,1 +DA:711,1 +DA:712,1 +DA:714,1 +DA:715,1 +DA:716,1 +DA:717,1 +DA:718,1 +DA:719,1 +DA:723,1 +DA:725,3 +DA:726,2 +DA:727,3 +DA:728,3 +DA:729,3 +LF:321 +LH:258 end_of_record SF:lib/models/effect_labels.dart -DA:5,4 -DA:10,4 +DA:5,7 +DA:10,7 +DA:11,7 +DA:12,6 +DA:13,5 +DA:14,6 +DA:15,5 +DA:16,6 +DA:17,5 +DA:18,6 +DA:19,5 +DA:20,6 +DA:21,6 +DA:22,6 +DA:23,6 +DA:24,5 +DA:25,5 +DA:26,5 +DA:27,5 +DA:28,5 +DA:29,5 +LF:21 +LH:21 +end_of_record +SF:lib/models/tool_descriptor.dart +DA:30,4 +DA:33,4 +DA:42,20 +DA:45,24 +DA:49,8 +DA:50,8 +DA:51,8 +LF:7 +LH:7 +end_of_record +SF:lib/models/tool_family.dart +DA:9,4 DA:11,4 DA:12,4 -DA:13,3 +DA:13,4 DA:14,4 -DA:15,3 +DA:15,4 DA:16,4 -DA:17,3 -DA:18,4 -DA:19,3 +DA:17,4 +DA:18,0 +DA:19,4 DA:20,4 DA:21,4 DA:22,4 DA:23,4 -DA:24,3 -DA:25,3 -DA:26,3 -DA:27,3 -DA:28,3 -DA:29,3 -DA:30,3 -DA:31,3 -LF:23 -LH:23 +DA:24,4 +DA:25,4 +DA:26,4 +DA:27,4 +DA:28,4 +DA:29,4 +DA:30,4 +DA:32,1 +DA:33,1 +DA:34,1 +DA:35,1 +DA:36,1 +LF:26 +LH:25 end_of_record SF:lib/panels/layers/blend_mode.dart DA:20,4 @@ -12060,7 +12324,7 @@ LF:19 LH:19 end_of_record SF:lib/panels/side_panel/menu.dart -DA:23,1 +DA:23,2 DA:25,4 DA:27,4 DA:28,4 @@ -12201,7 +12465,7 @@ LF:65 LH:31 end_of_record SF:lib/panels/side_panel/top_menu_and_layers_panel.dart -DA:13,1 +DA:13,2 DA:15,2 DA:17,2 DA:18,2 @@ -12264,371 +12528,264 @@ LF:59 LH:51 end_of_record SF:lib/panels/tools/tools_panel.dart -DA:37,3 +DA:33,3 +DA:40,3 +DA:42,3 DA:44,3 DA:46,3 -DA:47,3 +DA:48,3 DA:49,3 +DA:50,3 DA:51,3 +DA:52,3 DA:53,3 DA:54,3 -DA:55,3 DA:56,3 -DA:59,3 -DA:60,3 DA:61,3 DA:62,3 -DA:63,3 -DA:65,3 -DA:66,3 -DA:67,3 -DA:69,3 +DA:64,3 +DA:70,3 +DA:71,3 +DA:72,3 +DA:74,3 +DA:75,3 DA:77,3 -DA:78,3 -DA:79,3 -DA:80,3 -DA:82,3 -DA:87,3 -DA:88,3 -DA:90,3 -DA:96,3 -DA:97,3 -DA:98,3 +DA:94,3 DA:100,3 -DA:101,3 -DA:103,3 -DA:122,3 -DA:128,3 -DA:129,5 -DA:131,5 -DA:133,3 -DA:134,2 -DA:135,3 -DA:142,1 -DA:144,1 -DA:146,0 -DA:149,0 -DA:151,0 -DA:152,0 -DA:154,0 -DA:155,0 -DA:157,0 -DA:163,2 -DA:167,2 -DA:169,2 -DA:170,2 -DA:171,2 -DA:172,2 -DA:174,1 -DA:175,2 -DA:176,0 -DA:180,2 -DA:182,2 +DA:101,5 +DA:103,5 +DA:105,3 +DA:106,2 +DA:107,3 +DA:114,1 +DA:116,1 +DA:118,0 +DA:121,0 +DA:123,0 +DA:124,0 +DA:126,0 +DA:127,0 +DA:129,0 +DA:135,2 +DA:139,2 +DA:141,2 +DA:142,2 +DA:143,2 +DA:144,2 +DA:146,1 +DA:147,2 +DA:148,0 +DA:152,2 +DA:154,2 +DA:155,2 +DA:156,2 +DA:157,1 +DA:158,1 +DA:165,3 +DA:172,3 +DA:173,3 +DA:174,3 +DA:175,3 +DA:176,3 +DA:178,9 +DA:179,3 +DA:180,3 +DA:181,3 +DA:182,1 DA:183,2 DA:184,2 -DA:185,1 +DA:185,2 DA:186,1 -DA:193,3 -DA:200,3 -DA:201,3 -DA:202,3 +DA:188,0 +DA:194,3 DA:203,3 -DA:204,3 -DA:206,9 DA:207,3 DA:208,3 DA:209,3 -DA:210,1 -DA:211,2 -DA:212,2 -DA:213,2 -DA:214,1 -DA:216,0 -DA:222,3 -DA:231,3 -DA:236,3 -DA:238,3 -DA:239,3 -DA:240,3 -DA:241,3 -DA:242,3 -DA:243,3 -DA:244,2 -DA:246,3 -DA:247,3 -DA:248,3 -DA:249,3 -DA:250,3 +DA:210,3 +DA:213,3 +DA:214,2 +DA:215,2 +DA:216,2 +DA:217,2 +DA:218,2 +DA:220,2 +DA:224,2 +DA:226,2 +DA:227,2 +DA:229,6 +DA:230,1 +DA:231,1 +DA:237,2 +DA:239,2 +DA:240,2 +DA:242,6 +DA:243,1 +DA:244,1 +DA:245,1 DA:251,2 -DA:253,3 -DA:255,3 -DA:256,3 -DA:257,3 -DA:258,3 -DA:259,2 -DA:261,3 -DA:263,3 -DA:264,3 -DA:265,3 -DA:266,3 -DA:267,0 -DA:269,3 -DA:271,3 -DA:272,3 -DA:273,3 -DA:274,3 -DA:275,1 -DA:276,1 -DA:279,3 -DA:281,3 -DA:282,3 -DA:283,3 -DA:284,3 -DA:285,1 -DA:286,1 -DA:289,3 -DA:291,3 -DA:292,3 -DA:293,3 -DA:294,3 -DA:295,1 -DA:296,1 -DA:299,3 +DA:253,2 +DA:254,2 +DA:256,6 +DA:257,1 +DA:258,1 +DA:259,1 +DA:269,6 +DA:270,2 +DA:271,2 +DA:273,2 +DA:274,2 +DA:276,4 +DA:277,4 +DA:280,3 +DA:281,1 +DA:287,3 +DA:293,10 +DA:294,6 +DA:296,12 +DA:297,4 +DA:300,3 DA:301,3 DA:302,3 -DA:303,3 DA:304,3 -DA:305,1 -DA:306,1 +DA:306,3 DA:309,3 DA:310,3 -DA:311,3 -DA:312,3 -DA:313,3 -DA:314,1 -DA:315,1 -DA:318,3 -DA:320,3 -DA:321,3 -DA:322,3 -DA:323,3 -DA:324,1 -DA:325,1 -DA:333,3 -DA:337,3 -DA:338,3 -DA:339,3 -DA:340,3 -DA:343,3 -DA:344,2 -DA:345,2 -DA:346,2 -DA:347,2 -DA:348,2 -DA:350,2 -DA:354,2 -DA:356,2 -DA:357,2 -DA:359,6 -DA:360,1 -DA:361,1 -DA:367,2 -DA:369,2 -DA:370,2 -DA:372,6 +DA:311,2 +DA:312,2 +DA:316,2 +DA:319,0 +DA:320,0 +DA:325,3 +DA:327,3 +DA:330,3 +DA:333,0 +DA:334,0 +DA:341,3 +DA:342,1 +DA:343,1 +DA:345,1 +DA:346,1 +DA:347,1 +DA:349,1 +DA:350,1 +DA:351,1 +DA:352,0 +DA:353,0 +DA:355,0 +DA:356,0 +DA:357,0 +DA:358,0 +DA:359,0 +DA:364,1 +DA:366,1 +DA:368,1 +DA:372,4 DA:373,1 DA:374,1 -DA:375,1 -DA:381,2 -DA:383,2 -DA:384,2 -DA:386,6 -DA:387,1 -DA:388,1 -DA:389,1 -DA:399,6 -DA:400,2 +DA:382,3 +DA:383,3 +DA:384,3 +DA:385,3 +DA:386,3 +DA:387,3 +DA:389,3 +DA:390,3 +DA:391,1 +DA:392,1 +DA:394,1 +DA:395,0 +DA:399,3 DA:401,2 DA:403,2 DA:404,2 -DA:406,4 -DA:407,4 -DA:410,3 -DA:411,1 -DA:417,3 -DA:421,10 -DA:422,6 -DA:424,12 -DA:425,4 -DA:428,3 -DA:429,3 -DA:430,3 -DA:432,3 -DA:434,3 -DA:437,3 -DA:438,3 -DA:439,2 +DA:411,3 +DA:412,3 +DA:416,3 +DA:417,1 +DA:421,3 +DA:422,0 +DA:426,3 +DA:427,6 +DA:435,2 DA:440,2 +DA:441,2 +DA:442,2 +DA:443,2 DA:444,2 -DA:447,0 +DA:445,2 +DA:446,0 DA:448,0 -DA:453,3 -DA:455,3 -DA:458,3 -DA:461,0 -DA:462,0 -DA:469,3 -DA:470,1 -DA:471,1 -DA:473,1 -DA:474,1 -DA:475,1 -DA:477,1 -DA:478,1 -DA:479,1 -DA:480,0 -DA:481,0 -DA:483,0 -DA:484,0 -DA:485,0 -DA:486,0 -DA:487,0 +DA:449,0 +DA:450,0 +DA:451,0 +DA:453,0 +DA:454,0 +DA:455,0 +DA:456,0 +DA:457,0 +DA:458,0 +DA:460,0 +DA:466,2 +DA:468,2 +DA:469,2 +DA:470,2 +DA:477,2 +DA:482,2 +DA:483,4 +DA:484,4 +DA:486,1 +DA:487,1 +DA:488,1 +DA:491,1 DA:492,1 -DA:494,1 -DA:496,1 -DA:500,4 -DA:501,1 -DA:502,1 -DA:510,3 -DA:511,3 -DA:512,3 -DA:513,3 -DA:514,3 -DA:515,3 -DA:517,3 -DA:518,3 -DA:519,1 -DA:520,1 -DA:522,1 -DA:523,0 -DA:527,3 -DA:529,2 -DA:531,2 -DA:532,2 -DA:539,3 -DA:540,3 -DA:544,3 -DA:545,1 +DA:493,1 +DA:496,2 +DA:497,2 +DA:498,2 +DA:499,2 +DA:503,2 +DA:506,2 +DA:507,4 +DA:508,2 +DA:509,1 +DA:510,1 +DA:519,2 +DA:521,2 +DA:523,2 +DA:524,2 +DA:525,2 +DA:526,2 +DA:528,3 +DA:535,3 +DA:545,3 +DA:546,3 +DA:547,3 DA:549,3 -DA:550,0 -DA:554,3 -DA:555,6 -DA:563,2 -DA:568,2 -DA:569,2 -DA:570,2 -DA:571,2 -DA:572,2 -DA:573,2 -DA:574,0 -DA:576,0 -DA:577,0 -DA:578,0 -DA:579,0 -DA:581,0 -DA:582,0 -DA:583,0 -DA:584,0 -DA:585,0 -DA:586,0 -DA:588,0 -DA:594,2 -DA:596,2 -DA:597,2 -DA:598,2 -DA:605,2 -DA:610,2 -DA:611,4 -DA:612,4 -DA:614,1 -DA:615,1 -DA:616,1 -DA:619,1 -DA:620,1 -DA:621,1 -DA:624,2 -DA:625,2 -DA:626,2 -DA:627,2 +DA:550,3 +DA:551,3 +DA:553,3 +DA:555,1 +DA:556,1 +DA:564,3 +DA:565,3 +DA:572,3 +DA:574,3 +DA:585,3 +DA:600,3 +DA:601,3 +DA:607,3 +DA:609,3 +DA:610,6 +DA:611,6 +DA:612,3 +DA:614,4 +DA:615,6 +DA:621,2 DA:631,2 -DA:634,2 -DA:635,4 -DA:636,2 -DA:637,1 -DA:638,1 -DA:647,2 -DA:649,2 -DA:651,2 -DA:652,2 -DA:653,2 -DA:654,2 -DA:656,3 -DA:663,3 -DA:673,3 -DA:674,3 -DA:675,3 -DA:677,3 -DA:678,3 -DA:679,3 -DA:681,3 -DA:683,1 -DA:684,1 -DA:692,3 -DA:693,3 -DA:700,3 -DA:702,3 -DA:711,3 -DA:715,3 -DA:720,3 -DA:723,3 -DA:724,3 -DA:739,0 -DA:749,0 -DA:750,0 -DA:754,0 -DA:756,0 -DA:757,0 -DA:759,0 -DA:761,0 -DA:762,0 -DA:763,0 -DA:764,0 -DA:766,0 -DA:767,0 -DA:768,0 -DA:769,0 -DA:770,0 -DA:771,0 -DA:772,0 -DA:773,0 -DA:774,0 -DA:775,0 -DA:779,0 -DA:780,0 -DA:784,0 -DA:789,0 -DA:791,0 -DA:792,0 -DA:793,0 -DA:794,0 -DA:803,0 -DA:804,0 -DA:805,0 -DA:811,3 -DA:821,3 -DA:830,3 -LF:363 -LH:296 +DA:640,2 +LF:256 +LH:222 end_of_record SF:lib/widgets/side_panel_header.dart DA:7,3 @@ -12648,6 +12805,83 @@ DA:43,3 LF:14 LH:13 end_of_record +SF:lib/panels/tools/tool_family_rail.dart +DA:24,3 +DA:35,3 +DA:37,3 +DA:39,3 +DA:43,6 +DA:44,3 +DA:45,3 +DA:47,3 +DA:48,3 +DA:55,3 +DA:56,3 +DA:57,6 +DA:59,3 +DA:64,3 +DA:67,3 +DA:68,6 +DA:70,3 +DA:71,3 +DA:72,3 +DA:74,3 +DA:75,3 +DA:76,3 +DA:79,9 +DA:80,1 +DA:88,1 +DA:93,1 +DA:95,1 +DA:97,1 +DA:98,1 +DA:100,1 +DA:101,1 +DA:102,2 +DA:104,1 +DA:105,0 +DA:107,1 +DA:109,1 +DA:110,2 +DA:111,5 +DA:112,1 +DA:114,0 +DA:123,3 +DA:125,3 +DA:127,3 +DA:129,3 +DA:131,3 +DA:133,3 +DA:135,3 +DA:137,3 +DA:139,3 +DA:140,3 +DA:141,3 +DA:142,0 +DA:143,0 +DA:144,0 +DA:145,0 +DA:152,3 +DA:158,6 +DA:159,3 +DA:161,3 +DA:162,3 +DA:163,3 +DA:164,3 +DA:165,3 +DA:166,3 +DA:167,3 +DA:170,4 +DA:174,3 +DA:175,3 +DA:176,3 +DA:177,3 +DA:179,6 +DA:180,3 +DA:183,4 +LF:73 +LH:67 +end_of_record SF:lib/widgets/brush_intensity_picker.dart DA:11,0 DA:16,0 @@ -12735,57 +12969,6 @@ DA:98,2 LF:31 LH:31 end_of_record -SF:lib/widgets/effect_intensity_controls.dart -DA:22,2 -DA:48,2 -DA:49,2 -DA:55,2 -DA:57,2 -DA:58,10 -DA:59,10 -DA:62,2 -DA:64,8 -DA:69,2 -DA:71,2 -DA:74,2 -DA:75,2 -DA:76,4 -DA:77,4 -DA:78,6 -DA:79,2 -DA:80,8 -DA:83,1 -DA:84,3 -DA:85,3 -DA:88,2 -DA:89,2 -DA:90,6 -DA:93,6 -DA:94,2 -DA:95,6 -DA:98,0 -DA:99,0 -DA:100,0 -DA:103,2 -DA:104,2 -DA:105,2 -DA:106,4 -DA:107,0 -DA:108,0 -DA:109,0 -DA:111,6 -DA:113,2 -DA:114,4 -DA:115,1 -DA:116,3 -DA:117,0 -DA:118,0 -DA:123,3 -DA:124,3 -DA:126,6 -LF:47 -LH:39 -end_of_record SF:lib/widgets/gradient_color_list_editor.dart DA:32,3 DA:45,3 @@ -12991,7 +13174,7 @@ LF:36 LH:33 end_of_record SF:lib/widgets/text_attributes_widget.dart -DA:19,1 +DA:19,2 DA:26,1 DA:28,1 DA:29,1 @@ -13104,7 +13287,7 @@ DA:89,10 DA:90,8 DA:91,4 DA:92,4 -DA:94,7 +DA:94,8 DA:95,0 DA:96,0 DA:98,0 @@ -13115,26 +13298,26 @@ DA:110,1 DA:111,1 DA:112,1 DA:113,1 -DA:118,3 -DA:119,3 -DA:120,3 -DA:121,8 -DA:122,3 +DA:118,4 +DA:119,4 +DA:120,4 +DA:121,12 +DA:122,4 DA:127,4 DA:128,4 -DA:132,6 -DA:134,3 -DA:137,3 -DA:138,3 -DA:140,3 -DA:141,6 -DA:142,3 -DA:145,3 -DA:150,3 -DA:151,3 -DA:152,3 -DA:154,3 -DA:167,11 +DA:132,8 +DA:134,4 +DA:137,4 +DA:138,4 +DA:140,4 +DA:141,8 +DA:142,4 +DA:145,4 +DA:150,4 +DA:151,4 +DA:152,4 +DA:154,4 +DA:167,12 DA:171,0 DA:173,0 DA:176,0 @@ -13149,22 +13332,22 @@ LF:68 LH:53 end_of_record SF:lib/widgets/overlay_control_widgets.dart -DA:31,6 -DA:53,12 -DA:57,6 -DA:71,6 -DA:72,6 -DA:75,6 -DA:77,6 -DA:80,6 +DA:31,7 +DA:53,14 +DA:57,7 +DA:71,7 +DA:72,7 +DA:75,7 +DA:77,7 +DA:80,7 DA:83,5 -DA:84,6 -DA:86,6 -DA:87,6 -DA:101,6 -DA:119,6 -DA:143,6 -DA:151,6 +DA:84,7 +DA:86,7 +DA:87,7 +DA:101,7 +DA:119,7 +DA:143,7 +DA:151,7 DA:160,1 DA:161,0 DA:162,0 @@ -13181,37 +13364,37 @@ DA:179,0 DA:180,0 DA:181,0 DA:182,0 -DA:194,4 -DA:207,4 -DA:225,5 -DA:226,5 -DA:231,5 -DA:232,5 -DA:233,5 -DA:234,5 -DA:235,5 -DA:238,5 -DA:239,5 -DA:240,5 -DA:246,5 -DA:255,5 -DA:259,5 -DA:260,5 -DA:261,5 -DA:262,5 -DA:263,5 -DA:264,5 -DA:267,5 -DA:268,5 -DA:269,5 -DA:275,5 -DA:283,4 -DA:291,4 -DA:292,4 -DA:298,4 -DA:300,4 -DA:301,4 -DA:303,4 +DA:194,5 +DA:207,5 +DA:225,6 +DA:226,6 +DA:231,6 +DA:232,6 +DA:233,6 +DA:234,6 +DA:235,6 +DA:238,6 +DA:239,6 +DA:240,6 +DA:246,6 +DA:255,6 +DA:259,6 +DA:260,6 +DA:261,6 +DA:262,6 +DA:263,6 +DA:264,6 +DA:267,6 +DA:268,6 +DA:269,6 +DA:275,6 +DA:283,5 +DA:291,5 +DA:292,5 +DA:298,5 +DA:300,5 +DA:301,5 +DA:303,5 DA:315,3 DA:323,3 DA:326,3 @@ -13219,61 +13402,61 @@ DA:327,3 DA:328,3 DA:336,3 DA:337,3 -DA:354,4 -DA:397,4 -DA:399,8 -DA:401,4 -DA:402,16 -DA:403,16 -DA:404,4 -DA:405,4 -DA:406,4 +DA:354,5 +DA:397,5 +DA:399,10 +DA:401,5 +DA:402,20 +DA:403,20 +DA:404,5 +DA:405,5 +DA:406,5 DA:407,9 -DA:408,4 -DA:409,4 -DA:410,4 -DA:411,4 -DA:414,4 -DA:415,4 -DA:416,8 -DA:417,8 -DA:419,4 -DA:420,4 -DA:422,20 -DA:423,20 -DA:458,6 -DA:460,6 -DA:461,12 -DA:462,18 -DA:463,12 -DA:467,6 -DA:469,12 -DA:470,6 -DA:474,6 -DA:475,6 -DA:476,6 +DA:408,5 +DA:409,5 +DA:410,5 +DA:411,5 +DA:414,5 +DA:415,5 +DA:416,10 +DA:417,10 +DA:419,5 +DA:420,5 +DA:422,25 +DA:423,25 +DA:458,7 +DA:460,7 +DA:461,14 +DA:462,21 +DA:463,14 +DA:467,7 +DA:469,14 +DA:470,7 +DA:474,7 +DA:475,7 +DA:476,7 DA:477,3 DA:478,6 DA:479,2 -DA:492,4 -DA:519,4 -DA:525,4 +DA:492,5 +DA:519,5 +DA:525,5 DA:526,2 DA:528,0 DA:529,0 -DA:532,4 +DA:532,5 DA:533,2 DA:534,2 -DA:535,4 -DA:546,4 +DA:535,5 +DA:546,5 DA:554,4 DA:557,2 -DA:558,4 -DA:559,8 -DA:563,16 +DA:558,5 +DA:559,10 +DA:563,20 DA:565,0 DA:572,2 -DA:575,4 +DA:575,5 LF:125 LH:113 end_of_record @@ -13328,29 +13511,26 @@ DA:130,1 DA:131,2 DA:132,1 DA:133,1 -DA:140,6 -DA:141,3 -DA:143,3 +DA:136,1 +DA:143,6 DA:144,3 -DA:145,3 -DA:150,0 -DA:151,0 -DA:154,3 -DA:156,3 +DA:146,3 +DA:147,3 +DA:148,3 +DA:153,0 +DA:154,0 DA:157,3 -DA:158,3 +DA:159,3 DA:160,3 -DA:163,0 -DA:164,0 -DA:167,3 -DA:168,3 -DA:171,9 -DA:172,1 +DA:161,3 +DA:163,3 +DA:166,0 +DA:167,0 DA:173,3 -DA:176,3 -DA:177,3 -DA:180,9 -DA:181,1 +DA:174,3 +DA:177,9 +DA:178,1 +DA:179,3 DA:182,3 DA:185,3 DA:186,3 @@ -13358,69 +13538,70 @@ DA:189,9 DA:190,1 DA:191,3 DA:194,3 -DA:195,3 -DA:198,0 -DA:199,0 -DA:200,0 +DA:197,3 +DA:198,3 DA:201,0 DA:202,0 DA:203,0 DA:204,0 DA:205,0 +DA:206,0 +DA:207,0 DA:208,0 -DA:212,3 -DA:213,3 -DA:216,0 -DA:217,0 -DA:218,0 +DA:211,0 +DA:215,3 +DA:216,3 DA:219,0 DA:220,0 DA:221,0 -DA:225,3 -DA:234,3 +DA:222,0 +DA:223,0 +DA:224,0 +DA:228,3 DA:237,3 -DA:243,3 -DA:245,2 -DA:257,3 -DA:267,3 -DA:268,3 -DA:272,3 -DA:274,3 -DA:276,9 -DA:278,6 -DA:279,2 -DA:281,2 +DA:240,3 +DA:246,3 +DA:248,2 +DA:260,3 +DA:270,3 +DA:271,3 +DA:275,3 +DA:277,3 +DA:279,9 +DA:281,6 DA:282,2 -DA:289,1 -DA:294,1 -DA:295,1 -DA:296,6 -DA:299,1 -DA:301,1 +DA:284,2 +DA:285,2 +DA:292,1 +DA:297,1 +DA:298,1 +DA:299,6 DA:302,1 -DA:303,1 DA:304,1 DA:305,1 +DA:306,1 +DA:307,1 DA:308,1 -DA:309,2 DA:311,1 -DA:313,1 +DA:312,2 DA:314,1 -DA:315,1 -DA:318,2 -DA:323,1 -DA:324,2 -DA:329,1 -DA:333,1 -DA:334,0 -DA:335,0 -DA:340,2 -DA:341,2 -DA:342,0 -DA:343,0 -DA:347,1 -LF:141 -LH:118 +DA:316,1 +DA:317,1 +DA:318,1 +DA:321,2 +DA:326,1 +DA:327,2 +DA:332,1 +DA:336,1 +DA:337,0 +DA:338,0 +DA:343,2 +DA:344,2 +DA:345,0 +DA:346,0 +DA:350,1 +LF:139 +LH:116 end_of_record SF:lib/widgets/toolbar_icon_button.dart DA:7,3 @@ -13461,7 +13642,7 @@ LF:27 LH:27 end_of_record SF:lib/widgets/canvas_panel.dart -DA:7,1 +DA:7,2 DA:9,4 DA:11,4 DA:15,12 @@ -13558,6 +13739,58 @@ DA:148,1 LF:47 LH:46 end_of_record +SF:lib/widgets/effect_intensity_controls.dart +DA:22,2 +DA:48,2 +DA:49,2 +DA:55,2 +DA:57,2 +DA:58,10 +DA:59,10 +DA:62,2 +DA:64,8 +DA:69,2 +DA:71,2 +DA:74,2 +DA:75,2 +DA:76,4 +DA:77,4 +DA:78,6 +DA:79,2 +DA:80,8 +DA:81,3 +DA:83,1 +DA:84,3 +DA:85,3 +DA:88,2 +DA:89,2 +DA:90,6 +DA:93,6 +DA:94,2 +DA:95,6 +DA:98,0 +DA:99,0 +DA:100,0 +DA:103,2 +DA:104,2 +DA:105,2 +DA:106,4 +DA:107,0 +DA:108,0 +DA:109,0 +DA:111,6 +DA:113,2 +DA:114,4 +DA:115,1 +DA:116,3 +DA:117,0 +DA:118,0 +DA:123,3 +DA:124,3 +DA:126,6 +LF:48 +LH:40 +end_of_record SF:lib/widgets/effect_preview_bottom_sheet.dart DA:14,1 DA:19,1 @@ -13701,46 +13934,46 @@ LF:120 LH:103 end_of_record SF:lib/widgets/marching_ants_path.dart -DA:16,5 -DA:32,5 -DA:33,5 -DA:40,5 -DA:42,5 -DA:43,10 -DA:46,5 -DA:49,5 -DA:51,10 -DA:52,5 -DA:55,5 -DA:57,5 -DA:58,5 -DA:59,5 -DA:60,5 -DA:61,5 -DA:62,10 -DA:63,10 -DA:64,10 -DA:65,15 -DA:80,5 -DA:99,5 -DA:102,5 -DA:103,5 -DA:104,5 -DA:106,5 -DA:108,5 -DA:109,10 -DA:113,5 -DA:114,5 -DA:116,5 -DA:119,5 -DA:121,15 -DA:123,10 -DA:124,5 -DA:125,5 -DA:126,5 -DA:129,5 -DA:134,5 -DA:137,7 +DA:16,6 +DA:32,6 +DA:33,6 +DA:40,6 +DA:42,6 +DA:43,12 +DA:46,6 +DA:49,6 +DA:51,12 +DA:52,6 +DA:55,6 +DA:57,6 +DA:58,6 +DA:59,6 +DA:60,6 +DA:61,6 +DA:62,12 +DA:63,12 +DA:64,12 +DA:65,18 +DA:80,6 +DA:99,6 +DA:102,6 +DA:103,6 +DA:104,6 +DA:106,6 +DA:108,6 +DA:109,12 +DA:113,6 +DA:114,6 +DA:116,6 +DA:119,6 +DA:121,18 +DA:123,12 +DA:124,6 +DA:125,6 +DA:126,6 +DA:129,6 +DA:134,6 +DA:137,8 DA:138,2 DA:139,2 DA:140,6 @@ -13760,7 +13993,7 @@ DA:160,2 DA:161,2 DA:163,2 DA:164,2 -DA:169,5 +DA:169,6 LF:60 LH:60 end_of_record @@ -13853,61 +14086,61 @@ LF:84 LH:78 end_of_record SF:lib/widgets/selector_widget.dart -DA:40,3 -DA:101,3 -DA:102,3 -DA:107,1 -DA:171,4 -DA:172,4 -DA:173,4 -DA:174,4 -DA:175,10 -DA:176,10 -DA:177,10 -DA:178,10 -DA:188,3 -DA:190,6 -DA:194,3 -DA:195,3 -DA:197,2 -DA:198,3 -DA:199,3 -DA:200,3 -DA:201,10 -DA:202,9 -DA:203,3 -DA:208,3 -DA:209,12 -DA:210,12 -DA:213,6 -DA:214,2 -DA:216,15 -DA:218,3 -DA:219,9 -DA:220,9 -DA:221,3 -DA:229,6 -DA:230,2 -DA:231,2 -DA:232,2 +DA:40,4 +DA:101,4 +DA:102,4 +DA:107,2 +DA:171,6 +DA:172,6 +DA:173,6 +DA:174,6 +DA:175,15 +DA:176,15 +DA:177,15 +DA:178,15 +DA:188,4 +DA:190,8 +DA:194,4 +DA:195,4 +DA:197,3 +DA:198,4 +DA:199,4 +DA:200,4 +DA:201,14 +DA:202,12 +DA:203,4 +DA:208,4 +DA:209,16 +DA:210,16 +DA:213,8 +DA:214,3 +DA:216,20 +DA:218,4 +DA:219,12 +DA:220,11 +DA:221,4 +DA:229,8 +DA:230,3 +DA:231,3 +DA:232,3 DA:235,2 DA:236,3 -DA:237,2 -DA:238,2 -DA:242,4 -DA:243,2 -DA:244,2 -DA:245,4 -DA:247,2 +DA:237,3 +DA:238,3 +DA:242,6 +DA:243,3 +DA:244,3 +DA:245,6 +DA:247,3 DA:248,1 DA:249,5 DA:250,1 -DA:252,2 -DA:258,3 -DA:259,3 -DA:260,3 -DA:261,3 -DA:262,3 +DA:252,3 +DA:258,4 +DA:259,4 +DA:260,4 +DA:261,4 +DA:262,4 DA:267,1 DA:268,3 DA:269,1 @@ -13924,42 +14157,42 @@ DA:285,1 DA:286,1 DA:287,2 DA:288,1 -DA:293,3 -DA:299,3 -DA:300,3 -DA:301,3 -DA:302,3 -DA:303,3 -DA:309,3 -DA:310,3 -DA:316,4 -DA:317,9 -DA:319,15 -DA:320,3 -DA:324,3 -DA:326,12 -DA:327,3 -DA:328,6 -DA:329,3 -DA:330,12 -DA:331,6 -DA:333,3 -DA:334,15 -DA:335,6 -DA:338,6 -DA:339,3 -DA:340,3 -DA:343,3 -DA:344,3 -DA:345,3 -DA:349,6 +DA:293,4 +DA:299,4 +DA:300,4 +DA:301,4 +DA:302,4 +DA:303,4 +DA:309,4 +DA:310,4 +DA:316,6 +DA:317,12 +DA:319,20 +DA:320,4 +DA:324,4 +DA:326,16 +DA:327,4 +DA:328,8 +DA:329,4 +DA:330,16 +DA:331,8 +DA:333,4 +DA:334,20 +DA:335,8 +DA:338,8 +DA:339,4 +DA:340,4 +DA:343,4 +DA:344,4 +DA:345,4 +DA:349,8 DA:351,2 DA:352,3 DA:353,2 -DA:354,3 -DA:356,3 -DA:357,3 -DA:361,6 +DA:354,4 +DA:356,4 +DA:357,4 +DA:361,8 DA:363,2 DA:364,1 DA:365,3 @@ -13970,10 +14203,10 @@ DA:371,1 DA:372,1 DA:373,3 DA:375,2 -DA:376,3 -DA:378,3 -DA:379,3 -DA:383,6 +DA:376,4 +DA:378,4 +DA:379,4 +DA:383,8 DA:385,2 DA:386,1 DA:387,2 @@ -13987,29 +14220,29 @@ DA:396,1 DA:397,1 DA:398,3 DA:400,2 -DA:401,3 -DA:403,3 -DA:404,3 -DA:409,6 -DA:415,2 -DA:416,2 -DA:419,2 -DA:420,2 -DA:421,2 +DA:401,4 +DA:403,4 +DA:404,4 +DA:409,8 +DA:415,3 +DA:416,3 +DA:419,3 +DA:420,3 +DA:421,3 DA:428,2 -DA:430,2 -DA:431,2 -DA:438,2 -DA:440,2 -DA:444,4 -DA:451,3 -DA:455,5 -DA:456,3 -DA:462,3 -DA:467,6 -DA:468,9 -DA:472,3 -DA:473,6 +DA:430,3 +DA:431,3 +DA:438,3 +DA:440,3 +DA:444,6 +DA:451,4 +DA:455,7 +DA:456,4 +DA:462,4 +DA:467,8 +DA:468,12 +DA:472,4 +DA:473,8 DA:476,1 DA:477,2 DA:481,1 @@ -14021,23 +14254,23 @@ DA:486,1 DA:487,1 DA:488,1 DA:489,1 -DA:494,3 -DA:495,10 +DA:494,4 +DA:495,12 DA:496,6 DA:497,2 DA:498,4 DA:499,4 -DA:502,3 -DA:503,3 +DA:502,4 +DA:503,4 DA:504,0 -DA:505,3 +DA:505,4 DA:506,0 -DA:507,3 -DA:509,3 +DA:507,4 +DA:509,4 DA:510,0 DA:511,0 DA:512,0 -DA:514,3 +DA:514,4 DA:521,1 DA:523,2 DA:524,1 @@ -14063,16 +14296,16 @@ DA:566,3 DA:567,1 DA:570,1 DA:571,4 -DA:574,3 -DA:575,6 +DA:574,4 +DA:575,8 DA:576,0 -DA:577,6 -DA:580,3 -DA:585,3 -DA:586,3 -DA:596,2 -DA:597,2 -DA:603,4 +DA:577,8 +DA:580,4 +DA:585,4 +DA:586,4 +DA:596,3 +DA:597,3 +DA:603,6 DA:606,1 DA:607,2 DA:610,1 @@ -14099,14 +14332,14 @@ DA:646,0 DA:648,1 DA:649,2 DA:650,2 -DA:657,2 -DA:667,2 -DA:668,2 -DA:672,2 -DA:674,2 -DA:676,6 -DA:681,4 -DA:682,4 +DA:657,3 +DA:667,3 +DA:668,3 +DA:672,3 +DA:674,3 +DA:676,9 +DA:681,6 +DA:682,6 DA:683,2 DA:689,1 DA:690,1 @@ -14133,7 +14366,7 @@ LF:276 LH:266 end_of_record SF:lib/widgets/text_editor.dart -DA:14,1 +DA:14,2 DA:16,1 DA:17,1 DA:25,1 @@ -14573,7 +14806,7 @@ LF:388 LH:299 end_of_record SF:lib/widgets/shortcuts_help.dart -DA:11,1 +DA:11,2 DA:12,3 DA:14,3 DA:15,3 diff --git a/fcheck_files.svg b/fcheck_files.svg index f71b9f49..d05f48e5 100644 --- a/fcheck_files.svg +++ b/fcheck_files.svg @@ -1,5 +1,5 @@ - + @@ -233,38 +233,38 @@ 1 2 - -3 - -4 - -5 - -6 - -7 - -8 - -9 - -10 - -11 - -12 - -13 - -14 - -15 - -16 - -17 - -18 + +3 + +4 + +5 + +6 + +7 + +8 + +9 + +10 + +11 + +12 + +13 + +14 + +15 + +16 + +17 + +18 File: /Users/jp/src/github/vteam/fPaint/lib/main.dart File: /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection_crop.dart File: /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection_effects.dart @@ -285,33 +285,33 @@ File: /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/side_panel.dart File: /Users/jp/src/github/vteam/fPaint/lib/recovery/draft_recovery_storage_io.dart File: /Users/jp/src/github/vteam/fPaint/lib/recovery/draft_recovery_storage_web.dart -File: /Users/jp/src/github/vteam/fPaint/lib/recovery/draft_recovery_storage.dart -File: /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tools_panel.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_gesture_handler.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/shell_selection_sub_toolbar.dart -File: /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/menu.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/selector_widget.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/text_editor.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/magnifying_eye_dropper.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/transform_widget.dart -File: /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/top_menu_and_layers_panel.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/fill_widget.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/shortcuts_help.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_panel.dart +File: /Users/jp/src/github/vteam/fPaint/lib/recovery/draft_recovery_storage.dart +File: /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tools_panel.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_gesture_handler.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/shell_selection_sub_toolbar.dart +File: /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/menu.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/selector_widget.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/text_editor.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/magnifying_eye_dropper.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/transform_widget.dart +File: /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/top_menu_and_layers_panel.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/fill_widget.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/shortcuts_help.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_panel.dart File: /Users/jp/src/github/vteam/fPaint/lib/widgets/overlay_control_widgets.dart File: /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_tools.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/side_panel_header.dart -File: /Users/jp/src/github/vteam/fPaint/lib/helpers/draft_flusher.dart -File: /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/recent_files_dialog.dart -File: /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/share_panel.dart -File: /Users/jp/src/github/vteam/fPaint/lib/files/save.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/text_editor_dialog.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/effect_preview_bottom_sheet.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/toolbar_icon_button.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/marching_ants_path.dart -File: /Users/jp/src/github/vteam/fPaint/lib/helpers/shortcut_tooltip.dart -File: /Users/jp/src/github/vteam/fPaint/lib/panels/layers/layer_selector.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/text_attributes_widget.dart +File: /Users/jp/src/github/vteam/fPaint/lib/helpers/draft_flusher.dart +File: /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/recent_files_dialog.dart +File: /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/share_panel.dart +File: /Users/jp/src/github/vteam/fPaint/lib/files/save.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/text_editor_dialog.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/effect_preview_bottom_sheet.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/toolbar_icon_button.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/marching_ants_path.dart +File: /Users/jp/src/github/vteam/fPaint/lib/helpers/shortcut_tooltip.dart +File: /Users/jp/src/github/vteam/fPaint/lib/panels/layers/layer_selector.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/text_attributes_widget.dart +File: /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tool_family_rail.dart File: /Users/jp/src/github/vteam/fPaint/lib/widgets/gradient_color_list_editor.dart File: /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/canvas_settings.dart File: /Users/jp/src/github/vteam/fPaint/lib/widgets/brush_style_picker.dart @@ -323,3147 +323,3235 @@ File: /Users/jp/src/github/vteam/fPaint/lib/helpers/smudge_helper.dart File: /Users/jp/src/github/vteam/fPaint/lib/widgets/draw_rect.dart File: /Users/jp/src/github/vteam/fPaint/lib/models/menu_model.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/color_picker_dialog.dart -File: /Users/jp/src/github/vteam/fPaint/lib/files/import_files.dart -File: /Users/jp/src/github/vteam/fPaint/lib/helpers/shortcuts_constants.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/effect_intensity_controls.dart -File: /Users/jp/src/github/vteam/fPaint/lib/files/export_download_non_web.dart -File: /Users/jp/src/github/vteam/fPaint/lib/files/export_download_web.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/brush_size_picker.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/text_formatting_controls.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/tool_attribute_widget.dart -File: /Users/jp/src/github/vteam/fPaint/lib/panels/layers/layer_thumbnail.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/nine_grid_selector.dart -File: /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/attribution_dialog.dart -File: /Users/jp/src/github/vteam/fPaint/lib/panels/layers/blend_mode.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/container_slider.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/truncated_text.dart -File: /Users/jp/src/github/vteam/fPaint/lib/models/version.dart -File: /Users/jp/src/github/vteam/fPaint/lib/providers/shell_provider.dart -File: /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_canvas.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/base_picker.dart -File: /Users/jp/src/github/vteam/fPaint/lib/files/file_tiff.dart -File: /Users/jp/src/github/vteam/fPaint/lib/models/effect_labels.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/color_selector.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/confirm_discard_dialog.dart -File: /Users/jp/src/github/vteam/fPaint/lib/files/export_file_name.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/top_colors.dart -File: /Users/jp/src/github/vteam/fPaint/lib/files/export_prepare.dart -File: /Users/jp/src/github/vteam/fPaint/lib/files/save_backup.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/text_alignment_dropdown.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/text_style_toggle_buttons.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/color_wheel_selector.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/image_painter.dart -File: /Users/jp/src/github/vteam/fPaint/lib/models/dependency_versions.dart -File: /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart -File: /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/color_preview.dart -File: /Users/jp/src/github/vteam/fPaint/lib/files/file_ora.dart -File: /Users/jp/src/github/vteam/fPaint/lib/files/file_heic.dart -File: /Users/jp/src/github/vteam/fPaint/lib/files/file_heic_web.dart -File: /Users/jp/src/github/vteam/fPaint/lib/files/file_jpeg.dart -File: /Users/jp/src/github/vteam/fPaint/lib/files/file_webp.dart -File: /Users/jp/src/github/vteam/fPaint/lib/files/tiff_constants.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart -File: /Users/jp/src/github/vteam/fPaint/lib/files/file_operation_exception.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/transparent_background.dart -File: /Users/jp/src/github/vteam/fPaint/lib/helpers/list_helper.dart -File: /Users/jp/src/github/vteam/fPaint/lib/providers/layer_provider_storage_export.dart -File: /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection_commit.dart -File: /Users/jp/src/github/vteam/fPaint/lib/files/webp_encoder.dart -File: /Users/jp/src/github/vteam/fPaint/lib/providers/layer_crop_state.dart -File: /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/app_snackbar.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/app_dropdown.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/app_slider.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/app_text_field.dart -File: /Users/jp/src/github/vteam/fPaint/lib/files/webp_vp8l_encoder.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/app_dialog.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/app_popup_menu.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/app_bottom_sheet.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/app_list_tile.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/app_card.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/app_divider.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/app_scaffold.dart -File: /Users/jp/src/github/vteam/fPaint/lib/providers/app_preferences.dart -File: /Users/jp/src/github/vteam/fPaint/lib/providers/layers_provider.dart -File: /Users/jp/src/github/vteam/fPaint/lib/models/selector_model.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/app_overlay.dart -File: /Users/jp/src/github/vteam/fPaint/lib/models/text_tool_state.dart -File: /Users/jp/src/github/vteam/fPaint/lib/models/transform_model.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/app_button_row.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/app_text.dart -File: /Users/jp/src/github/vteam/fPaint/lib/providers/wand_selection_manager.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/app_progress.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/app_switch.dart -File: /Users/jp/src/github/vteam/fPaint/lib/models/effect_preview_model.dart -File: /Users/jp/src/github/vteam/fPaint/lib/files/webp_transform_codec.dart -File: /Users/jp/src/github/vteam/fPaint/lib/models/image_placement_model.dart -File: /Users/jp/src/github/vteam/fPaint/lib/models/selection_effect.dart -File: /Users/jp/src/github/vteam/fPaint/lib/providers/layer_provider.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/app_buttons.dart -File: /Users/jp/src/github/vteam/fPaint/lib/helpers/transform_helper.dart -File: /Users/jp/src/github/vteam/fPaint/lib/providers/undo_provider.dart -File: /Users/jp/src/github/vteam/fPaint/lib/models/image_placement_layer_restore_state.dart -File: /Users/jp/src/github/vteam/fPaint/lib/providers/macos_bookmark_service.dart -File: /Users/jp/src/github/vteam/fPaint/lib/providers/fill_service.dart -File: /Users/jp/src/github/vteam/fPaint/lib/models/canvas_resize.dart -File: /Users/jp/src/github/vteam/fPaint/lib/files/webp_huffman_codec.dart -File: /Users/jp/src/github/vteam/fPaint/lib/providers/wand_selection_request.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/app_overlay_menu_item.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/app_overlay_surface.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/app_icon.dart -File: /Users/jp/src/github/vteam/fPaint/lib/models/user_action_drawing.dart -File: /Users/jp/src/github/vteam/fPaint/lib/models/fill_model.dart -File: /Users/jp/src/github/vteam/fPaint/lib/files/webp_encoder_shared.dart -File: /Users/jp/src/github/vteam/fPaint/lib/files/webp_bit_writer.dart -File: /Users/jp/src/github/vteam/fPaint/lib/widgets/app_tooltip.dart -File: /Users/jp/src/github/vteam/fPaint/lib/models/render_helper.dart -File: /Users/jp/src/github/vteam/fPaint/lib/helpers/image_effects.dart -File: /Users/jp/src/github/vteam/fPaint/lib/providers/flood_fill.dart -File: /Users/jp/src/github/vteam/fPaint/lib/files/webp_cl_symbol.dart -File: /Users/jp/src/github/vteam/fPaint/lib/models/app_icon_enum.dart -File: /Users/jp/src/github/vteam/fPaint/lib/helpers/image_helper.dart -File: /Users/jp/src/github/vteam/fPaint/lib/models/text_object.dart -File: /Users/jp/src/github/vteam/fPaint/lib/helpers/draw_path_helper.dart -File: /Users/jp/src/github/vteam/fPaint/lib/models/visible_model.dart -File: /Users/jp/src/github/vteam/fPaint/lib/models/brush_style.dart -File: /Users/jp/src/github/vteam/fPaint/lib/models/halftone_fill.dart -File: /Users/jp/src/github/vteam/fPaint/lib/helpers/log_helper.dart -File: /Users/jp/src/github/vteam/fPaint/lib/helpers/color_helper.dart -File: /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart -File: /Users/jp/src/github/vteam/fPaint/lib/constants/app_interaction_profiles.dart -File: /Users/jp/src/github/vteam/fPaint/lib/constants/app_text_style.dart -File: /Users/jp/src/github/vteam/fPaint/lib/constants/app_halftone.dart -File: /Users/jp/src/github/vteam/fPaint/lib/constants/app_defaults.dart -File: /Users/jp/src/github/vteam/fPaint/lib/constants/app_config.dart -File: /Users/jp/src/github/vteam/fPaint/lib/constants/app_effects.dart -File: /Users/jp/src/github/vteam/fPaint/lib/constants/app_flood_fill.dart -File: /Users/jp/src/github/vteam/fPaint/lib/constants/app_radius.dart -File: /Users/jp/src/github/vteam/fPaint/lib/constants/app_spacing.dart -File: /Users/jp/src/github/vteam/fPaint/lib/constants/app_stroke.dart -File: /Users/jp/src/github/vteam/fPaint/lib/constants/app_visual.dart -File: /Users/jp/src/github/vteam/fPaint/lib/constants/file_extensions.dart -File: /Users/jp/src/github/vteam/fPaint/lib/constants/keys.dart -File: /Users/jp/src/github/vteam/fPaint/lib/constants/app_interaction.dart -File: /Users/jp/src/github/vteam/fPaint/lib/constants/app_colors.dart -File: /Users/jp/src/github/vteam/fPaint/lib/constants/app_font_size.dart -File: /Users/jp/src/github/vteam/fPaint/lib/constants/app_layout.dart -File: /Users/jp/src/github/vteam/fPaint/lib/constants/app_limits.dart -File: /Users/jp/src/github/vteam/fPaint/lib/constants/app_math.dart -File: /Users/jp/src/github/vteam/fPaint/lib/constants/app_strings.dart -File: /Users/jp/src/github/vteam/fPaint/lib/constants/interaction_input_modality.dart -File: /Users/jp/src/github/vteam/fPaint/lib/constants/interaction_layout_profile.dart - - - /Users/jp/src/github/vteam/fPaint/lib/widgets/fill_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/marching_ants_path.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/color_picker_dialog.dart +File: /Users/jp/src/github/vteam/fPaint/lib/files/import_files.dart +File: /Users/jp/src/github/vteam/fPaint/lib/helpers/shortcuts_constants.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/side_panel_header.dart +File: /Users/jp/src/github/vteam/fPaint/lib/files/export_download_non_web.dart +File: /Users/jp/src/github/vteam/fPaint/lib/files/export_download_web.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/brush_size_picker.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/text_formatting_controls.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/tool_attribute_widget.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/effect_intensity_controls.dart +File: /Users/jp/src/github/vteam/fPaint/lib/models/tool_descriptor.dart +File: /Users/jp/src/github/vteam/fPaint/lib/panels/layers/layer_thumbnail.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/nine_grid_selector.dart +File: /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/attribution_dialog.dart +File: /Users/jp/src/github/vteam/fPaint/lib/panels/layers/blend_mode.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/container_slider.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/truncated_text.dart +File: /Users/jp/src/github/vteam/fPaint/lib/models/version.dart +File: /Users/jp/src/github/vteam/fPaint/lib/providers/shell_provider.dart +File: /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_canvas.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/base_picker.dart +File: /Users/jp/src/github/vteam/fPaint/lib/models/effect_labels.dart +File: /Users/jp/src/github/vteam/fPaint/lib/files/file_tiff.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/color_selector.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/confirm_discard_dialog.dart +File: /Users/jp/src/github/vteam/fPaint/lib/files/export_file_name.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/top_colors.dart +File: /Users/jp/src/github/vteam/fPaint/lib/files/export_prepare.dart +File: /Users/jp/src/github/vteam/fPaint/lib/files/save_backup.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/text_alignment_dropdown.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/text_style_toggle_buttons.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/color_wheel_selector.dart +File: /Users/jp/src/github/vteam/fPaint/lib/models/tool_family.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/image_painter.dart +File: /Users/jp/src/github/vteam/fPaint/lib/models/dependency_versions.dart +File: /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart +File: /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/color_preview.dart +File: /Users/jp/src/github/vteam/fPaint/lib/files/file_ora.dart +File: /Users/jp/src/github/vteam/fPaint/lib/files/file_heic.dart +File: /Users/jp/src/github/vteam/fPaint/lib/files/file_heic_web.dart +File: /Users/jp/src/github/vteam/fPaint/lib/files/file_jpeg.dart +File: /Users/jp/src/github/vteam/fPaint/lib/files/file_webp.dart +File: /Users/jp/src/github/vteam/fPaint/lib/files/tiff_constants.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart +File: /Users/jp/src/github/vteam/fPaint/lib/files/file_operation_exception.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/transparent_background.dart +File: /Users/jp/src/github/vteam/fPaint/lib/helpers/list_helper.dart +File: /Users/jp/src/github/vteam/fPaint/lib/providers/layer_provider_storage_export.dart +File: /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection_commit.dart +File: /Users/jp/src/github/vteam/fPaint/lib/files/webp_encoder.dart +File: /Users/jp/src/github/vteam/fPaint/lib/providers/layer_crop_state.dart +File: /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/app_snackbar.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/app_slider.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/app_dropdown.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/app_text_field.dart +File: /Users/jp/src/github/vteam/fPaint/lib/files/webp_vp8l_encoder.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/app_dialog.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/app_popup_menu.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/app_bottom_sheet.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/app_list_tile.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/app_card.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/app_divider.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/app_scaffold.dart +File: /Users/jp/src/github/vteam/fPaint/lib/providers/app_preferences.dart +File: /Users/jp/src/github/vteam/fPaint/lib/providers/layers_provider.dart +File: /Users/jp/src/github/vteam/fPaint/lib/models/selector_model.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/app_overlay.dart +File: /Users/jp/src/github/vteam/fPaint/lib/models/text_tool_state.dart +File: /Users/jp/src/github/vteam/fPaint/lib/models/transform_model.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/app_button_row.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/app_text.dart +File: /Users/jp/src/github/vteam/fPaint/lib/providers/wand_selection_manager.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/app_progress.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/app_switch.dart +File: /Users/jp/src/github/vteam/fPaint/lib/models/effect_preview_model.dart +File: /Users/jp/src/github/vteam/fPaint/lib/files/webp_transform_codec.dart +File: /Users/jp/src/github/vteam/fPaint/lib/models/effect_brush_model.dart +File: /Users/jp/src/github/vteam/fPaint/lib/models/image_placement_model.dart +File: /Users/jp/src/github/vteam/fPaint/lib/models/selection_effect.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/app_buttons.dart +File: /Users/jp/src/github/vteam/fPaint/lib/helpers/transform_helper.dart +File: /Users/jp/src/github/vteam/fPaint/lib/providers/layer_provider.dart +File: /Users/jp/src/github/vteam/fPaint/lib/providers/undo_provider.dart +File: /Users/jp/src/github/vteam/fPaint/lib/models/image_placement_layer_restore_state.dart +File: /Users/jp/src/github/vteam/fPaint/lib/providers/macos_bookmark_service.dart +File: /Users/jp/src/github/vteam/fPaint/lib/providers/fill_service.dart +File: /Users/jp/src/github/vteam/fPaint/lib/models/canvas_resize.dart +File: /Users/jp/src/github/vteam/fPaint/lib/files/webp_huffman_codec.dart +File: /Users/jp/src/github/vteam/fPaint/lib/providers/wand_selection_request.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/app_overlay_menu_item.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/app_overlay_surface.dart +File: /Users/jp/src/github/vteam/fPaint/lib/models/user_action_drawing.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/app_icon.dart +File: /Users/jp/src/github/vteam/fPaint/lib/models/fill_model.dart +File: /Users/jp/src/github/vteam/fPaint/lib/files/webp_encoder_shared.dart +File: /Users/jp/src/github/vteam/fPaint/lib/files/webp_bit_writer.dart +File: /Users/jp/src/github/vteam/fPaint/lib/widgets/app_tooltip.dart +File: /Users/jp/src/github/vteam/fPaint/lib/models/render_helper.dart +File: /Users/jp/src/github/vteam/fPaint/lib/helpers/image_effects.dart +File: /Users/jp/src/github/vteam/fPaint/lib/providers/flood_fill.dart +File: /Users/jp/src/github/vteam/fPaint/lib/files/webp_cl_symbol.dart +File: /Users/jp/src/github/vteam/fPaint/lib/models/app_icon_enum.dart +File: /Users/jp/src/github/vteam/fPaint/lib/helpers/image_helper.dart +File: /Users/jp/src/github/vteam/fPaint/lib/models/text_object.dart +File: /Users/jp/src/github/vteam/fPaint/lib/helpers/draw_path_helper.dart +File: /Users/jp/src/github/vteam/fPaint/lib/models/visible_model.dart +File: /Users/jp/src/github/vteam/fPaint/lib/models/brush_style.dart +File: /Users/jp/src/github/vteam/fPaint/lib/models/halftone_fill.dart +File: /Users/jp/src/github/vteam/fPaint/lib/helpers/log_helper.dart +File: /Users/jp/src/github/vteam/fPaint/lib/helpers/color_helper.dart +File: /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart +File: /Users/jp/src/github/vteam/fPaint/lib/constants/app_interaction_profiles.dart +File: /Users/jp/src/github/vteam/fPaint/lib/constants/app_text_style.dart +File: /Users/jp/src/github/vteam/fPaint/lib/constants/app_halftone.dart +File: /Users/jp/src/github/vteam/fPaint/lib/constants/app_defaults.dart +File: /Users/jp/src/github/vteam/fPaint/lib/constants/app_config.dart +File: /Users/jp/src/github/vteam/fPaint/lib/constants/app_effects.dart +File: /Users/jp/src/github/vteam/fPaint/lib/constants/app_flood_fill.dart +File: /Users/jp/src/github/vteam/fPaint/lib/constants/app_radius.dart +File: /Users/jp/src/github/vteam/fPaint/lib/constants/app_spacing.dart +File: /Users/jp/src/github/vteam/fPaint/lib/constants/app_stroke.dart +File: /Users/jp/src/github/vteam/fPaint/lib/constants/app_visual.dart +File: /Users/jp/src/github/vteam/fPaint/lib/constants/file_extensions.dart +File: /Users/jp/src/github/vteam/fPaint/lib/constants/keys.dart +File: /Users/jp/src/github/vteam/fPaint/lib/constants/app_interaction.dart +File: /Users/jp/src/github/vteam/fPaint/lib/constants/app_colors.dart +File: /Users/jp/src/github/vteam/fPaint/lib/constants/app_font_size.dart +File: /Users/jp/src/github/vteam/fPaint/lib/constants/app_layout.dart +File: /Users/jp/src/github/vteam/fPaint/lib/constants/app_limits.dart +File: /Users/jp/src/github/vteam/fPaint/lib/constants/app_math.dart +File: /Users/jp/src/github/vteam/fPaint/lib/constants/app_strings.dart +File: /Users/jp/src/github/vteam/fPaint/lib/constants/interaction_input_modality.dart +File: /Users/jp/src/github/vteam/fPaint/lib/constants/interaction_layout_profile.dart + + + /Users/jp/src/github/vteam/fPaint/lib/files/file_ora.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/list_helper.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/app_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_button_row.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_canvas.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart - + + /Users/jp/src/github/vteam/fPaint/lib/files/import_files.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_canvas.dart + + + /Users/jp/src/github/vteam/fPaint/lib/constants/app_text_style.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/app_colors.dart - + /Users/jp/src/github/vteam/fPaint/lib/constants/app_interaction_profiles.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/app_interaction.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/layers/layer_selector.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/panels/layers/blend_mode.dart + + /Users/jp/src/github/vteam/fPaint/lib/main_screen.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/main_view.dart - - /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/app_interaction_profiles.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/export_download_non_web.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/file_tiff.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/color_preview.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/transparent_background.dart + + /Users/jp/src/github/vteam/fPaint/lib/helpers/image_helper.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/color_helper.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/text_editor_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/text_formatting_controls.dart + + /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/app_interaction_profiles.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_canvas.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/share_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/export_download_non_web.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/layer_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/user_action_drawing.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/save.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/export_download_web.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_preferences.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/app_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_button_row.dart - - /Users/jp/src/github/vteam/fPaint/lib/helpers/image_helper.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/color_helper.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/color_preview.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/transparent_background.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/import_files.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_canvas.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_preferences.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/share_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/export_download_web.dart + + /Users/jp/src/github/vteam/fPaint/lib/models/user_action_drawing.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/app_icon_enum.dart - - /Users/jp/src/github/vteam/fPaint/lib/models/render_helper.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/halftone_fill.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/app_dropdown.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_overlay.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/menu.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/recent_files_dialog.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/menu.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/share_panel.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/file_ora.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/list_helper.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tools_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_tools.dart - - /Users/jp/src/github/vteam/fPaint/lib/main_screen.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/main_view.dart + + /Users/jp/src/github/vteam/fPaint/lib/models/selector_model.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/transform_helper.dart - - /Users/jp/src/github/vteam/fPaint/lib/main.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/recovery/draft_recovery_controller.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_gesture_handler.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/draft_flusher.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tools_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_tools.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/app_buttons.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_icon.dart - + /Users/jp/src/github/vteam/fPaint/lib/files/webp_huffman_codec.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/webp_cl_symbol.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/layers_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/layer_provider.dart + + /Users/jp/src/github/vteam/fPaint/lib/main.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/recovery/draft_recovery_controller.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/layers_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/layer_provider.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/layers/layer_selector.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/panels/layers/layer_thumbnail.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/app_icon.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/app_icon_enum.dart + + /Users/jp/src/github/vteam/fPaint/lib/models/render_helper.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/halftone_fill.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/wand_selection_manager.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/fill_service.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/text_editor.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/text_editor_dialog.dart - + /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/layers_provider.dart - + /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/layers_provider.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_gesture_handler.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/draft_flusher.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/file_webp.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/webp_encoder.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_snackbar.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/webp_encoder.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/webp_vp8l_encoder.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tools_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/side_panel_header.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/export_download_web.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/file_tiff.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/layers/layer_selector.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/container_slider.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_snackbar.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/fill_service.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/flood_fill.dart + + /Users/jp/src/github/vteam/fPaint/lib/main.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/main_screen.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/menu.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/share_panel.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/file_ora.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/layer_provider_storage_export.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/share_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/export_download_non_web.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/app_icon.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/app_icon_enum.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/effect_intensity_controls.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/effect_labels.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/save.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/export_download_non_web.dart - - /Users/jp/src/github/vteam/fPaint/lib/helpers/color_helper.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/main_view.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_gesture_handler.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/main_view.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_gesture_handler.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/app_list_tile.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_switch.dart - + /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/app_text_style.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/app_list_tile.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_switch.dart + + /Users/jp/src/github/vteam/fPaint/lib/helpers/color_helper.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/app_dropdown.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_overlay.dart + + /Users/jp/src/github/vteam/fPaint/lib/helpers/image_helper.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/log_helper.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/export_download_non_web.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/file_tiff.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_gesture_handler.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_tools.dart - - /Users/jp/src/github/vteam/fPaint/lib/models/selector_model.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/transform_helper.dart + + /Users/jp/src/github/vteam/fPaint/lib/constants/app_text_style.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/app_font_size.dart - - /Users/jp/src/github/vteam/fPaint/lib/main_screen.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/shell_top_bar.dart + + /Users/jp/src/github/vteam/fPaint/lib/models/render_helper.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/brush_style.dart - + /Users/jp/src/github/vteam/fPaint/lib/models/fill_model.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/draw_path_helper.dart - - /Users/jp/src/github/vteam/fPaint/lib/models/render_helper.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/brush_style.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/import_files.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/shell_provider.dart - - /Users/jp/src/github/vteam/fPaint/lib/constants/app_text_style.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/app_font_size.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/menu.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/save.dart - - /Users/jp/src/github/vteam/fPaint/lib/models/user_action_drawing.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/app_icon_enum.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/menu.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/recent_files_dialog.dart - - /Users/jp/src/github/vteam/fPaint/lib/models/user_action_drawing.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/text_object.dart + + /Users/jp/src/github/vteam/fPaint/lib/main_screen.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/shell_top_bar.dart - - /Users/jp/src/github/vteam/fPaint/lib/main.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/main_screen.dart + + /Users/jp/src/github/vteam/fPaint/lib/shell_top_bar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/shell_selection_sub_toolbar.dart - - /Users/jp/src/github/vteam/fPaint/lib/shell_top_bar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/shell_selection_sub_toolbar.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/share_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/export_download_web.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/webp_encoder.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/webp_vp8l_encoder.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/fill_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/marching_ants_path.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/file_webp.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/webp_encoder.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/text_editor_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/text_formatting_controls.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/text_editor.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/text_editor_dialog.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/wand_selection_manager.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/fill_service.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/file_ora.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/layer_provider_storage_export.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/fill_service.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/flood_fill.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_gesture_handler.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_tools.dart + + /Users/jp/src/github/vteam/fPaint/lib/main.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/pages/settings_page.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/save.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/export_download_web.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/top_menu_and_layers_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/panels/layers/layer_selector.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/import_files.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/shell_provider.dart + + /Users/jp/src/github/vteam/fPaint/lib/models/fill_model.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/visible_model.dart - - /Users/jp/src/github/vteam/fPaint/lib/helpers/image_helper.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/log_helper.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/side_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tools_panel.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/selector_model.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/about.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/version.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/file_ora.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/file_operation_exception.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/color_preview.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart - - /Users/jp/src/github/vteam/fPaint/lib/constants/app_halftone.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/app_limits.dart + + /Users/jp/src/github/vteam/fPaint/lib/models/user_action_drawing.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/text_object.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/layers/layer_selector.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/truncated_text.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/layers_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/layer_provider.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/side_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tools_panel.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_slider.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/menu.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/save.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/layers_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/layer_provider.dart - - /Users/jp/src/github/vteam/fPaint/lib/pages/settings_page.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/shortcuts.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/export_prepare.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/file_webp.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/app_buttons.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_icon.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/wand_selection_manager.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/wand_selection_request.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/import_files.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/file_tiff.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/wand_selection_manager.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/wand_selection_request.dart - - /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/app_halftone.dart + + /Users/jp/src/github/vteam/fPaint/lib/shell_top_bar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/menu.dart - - /Users/jp/src/github/vteam/fPaint/lib/main_screen.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/side_panel.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/recent_files_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/import_files.dart - - /Users/jp/src/github/vteam/fPaint/lib/shell_top_bar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/menu.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/file_ora.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/file_operation_exception.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/wand_selection_manager.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/wand_selection_request.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/selector_model.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/wand_selection_manager.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/wand_selection_request.dart + + /Users/jp/src/github/vteam/fPaint/lib/constants/app_halftone.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/app_limits.dart - - /Users/jp/src/github/vteam/fPaint/lib/models/transform_model.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/transform_helper.dart + + /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/app_halftone.dart - - /Users/jp/src/github/vteam/fPaint/lib/main.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/pages/settings_page.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/export_download_web.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/export_file_name.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/color_preview.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart + + /Users/jp/src/github/vteam/fPaint/lib/pages/settings_page.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/shortcuts.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/save.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/export_download_non_web.dart + + /Users/jp/src/github/vteam/fPaint/lib/main_screen.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/side_panel.dart - - /Users/jp/src/github/vteam/fPaint/lib/models/fill_model.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/visible_model.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/effect_preview_bottom_sheet.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/effect_intensity_controls.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/export_download_web.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/file_tiff.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/webp_transform_codec.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/webp_huffman_codec.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/export_download_web.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/export_file_name.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/export_prepare.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/file_jpeg.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/export_prepare.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/file_webp.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/layers_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/undo_provider.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_dropdown.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/recent_files_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/import_files.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/shell_selection_sub_toolbar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/overlay_control_widgets.dart - - /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/app_defaults.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tool_family_rail.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/tool_descriptor.dart - - /Users/jp/src/github/vteam/fPaint/lib/constants/app_halftone.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/app_math.dart + + /Users/jp/src/github/vteam/fPaint/lib/main.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/pages/platforms_page.dart - - /Users/jp/src/github/vteam/fPaint/lib/constants/app_interaction_profiles.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/app_layout.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/layer_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/render_helper.dart - - /Users/jp/src/github/vteam/fPaint/lib/constants/app_defaults.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/app_interaction.dart + + /Users/jp/src/github/vteam/fPaint/lib/models/transform_model.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/transform_helper.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/app_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_overlay.dart + + /Users/jp/src/github/vteam/fPaint/lib/models/effect_labels.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/layers/layer_selector.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/panels/layers/layer_thumbnail.dart + + /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/app_defaults.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_slider.dart + + /Users/jp/src/github/vteam/fPaint/lib/constants/app_halftone.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/app_math.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/webp_transform_codec.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/webp_huffman_codec.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/export_download_non_web.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/export_file_name.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/layers_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/undo_provider.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/layers/layer_selector.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/panels/layers/blend_mode.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/file_heic.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/file_operation_exception.dart + + /Users/jp/src/github/vteam/fPaint/lib/constants/app_interaction_profiles.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/app_layout.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/top_menu_and_layers_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/panels/layers/layer_selector.dart + + /Users/jp/src/github/vteam/fPaint/lib/constants/app_defaults.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/app_interaction.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/shell_selection_sub_toolbar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/overlay_control_widgets.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/canvas_settings.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/nine_grid_selector.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/export_prepare.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/file_jpeg.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/import_files.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/file_tiff.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/app_buttons.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_tooltip.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/app_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_overlay.dart - - /Users/jp/src/github/vteam/fPaint/lib/main.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/pages/platforms_page.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/file_heic.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/file_operation_exception.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/export_download_non_web.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/export_file_name.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/attribution_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/dependency_versions.dart - - /Users/jp/src/github/vteam/fPaint/lib/recovery/draft_recovery_storage_io.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/recovery/draft_recovery_storage.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/layer_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/user_action_drawing.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/export_prepare.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/file_heic_web.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/text_tool_state.dart - - /Users/jp/src/github/vteam/fPaint/lib/models/user_action_drawing.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/brush_style.dart + + /Users/jp/src/github/vteam/fPaint/lib/models/tool_descriptor.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/tool_family.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/brush_size_picker.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/base_picker.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection_commit.dart - - /Users/jp/src/github/vteam/fPaint/lib/models/user_action_drawing.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/brush_style.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/selector_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/marching_ants_path.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/text_formatting_controls.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/text_alignment_dropdown.dart + + /Users/jp/src/github/vteam/fPaint/lib/recovery/draft_recovery_storage_io.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/recovery/draft_recovery_storage.dart - - /Users/jp/src/github/vteam/fPaint/lib/models/effect_labels.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/export_download_web.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/export_prepare.dart - - /Users/jp/src/github/vteam/fPaint/lib/models/render_helper.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/text_object.dart + + /Users/jp/src/github/vteam/fPaint/lib/recovery/draft_recovery_controller.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/recovery/draft_recovery_storage_io.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/export_download_web.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/export_prepare.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/layers/layer_selector.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/container_slider.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/app_slider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_text.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/text_formatting_controls.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/text_alignment_dropdown.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/attribution_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/dependency_versions.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/export_prepare.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/file_heic_web.dart - - /Users/jp/src/github/vteam/fPaint/lib/recovery/draft_recovery_controller.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/recovery/draft_recovery_storage_io.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/file_tiff.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/tiff_constants.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/app_button_row.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_buttons.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_text_field.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_text_field.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/file_heic_web.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/file_operation_exception.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/text_tool_state.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/app_popup_menu.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_overlay.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection_commit.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_gesture_handler.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/text_editor_dialog.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/file_heic_web.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/file_operation_exception.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/layers/layer_thumbnail.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/image_painter.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/main_view.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/selector_widget.dart + + /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/app_config.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/app_popup_menu.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_overlay.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/brush_size_picker.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/base_picker.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/about.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/version.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/main_view.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/selector_widget.dart - - /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/app_config.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/text_attributes_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/tool_attribute_widget.dart - - /Users/jp/src/github/vteam/fPaint/lib/models/image_placement_layer_restore_state.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/user_action_drawing.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/shell_selection_sub_toolbar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/effect_preview_bottom_sheet.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/export_download_non_web.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/export_prepare.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/app_buttons.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_tooltip.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/layers/layer_thumbnail.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/image_painter.dart + + /Users/jp/src/github/vteam/fPaint/lib/models/render_helper.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/text_object.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/layer_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/render_helper.dart + + /Users/jp/src/github/vteam/fPaint/lib/recovery/draft_recovery_controller.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/recovery/draft_recovery_storage_web.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/effect_preview_bottom_sheet.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/effect_intensity_controls.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/layers/layer_selector.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/truncated_text.dart - + /Users/jp/src/github/vteam/fPaint/lib/files/export_prepare.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/file_heic.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_gesture_handler.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/text_editor_dialog.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/transform_model.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/app_bottom_sheet.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_overlay.dart + + /Users/jp/src/github/vteam/fPaint/lib/constants/app_text_style.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/app_strings.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/main_view.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/text_editor.dart + + /Users/jp/src/github/vteam/fPaint/lib/recovery/draft_recovery_storage_web.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/recovery/draft_recovery_storage.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/file_jpeg.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/file_operation_exception.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/app_button_row.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_buttons.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection_commit.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/app_bottom_sheet.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_overlay.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/canvas_settings.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/nine_grid_selector.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/color_picker_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/color_selector.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/shell_selection_sub_toolbar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/effect_preview_bottom_sheet.dart + + /Users/jp/src/github/vteam/fPaint/lib/models/user_action_drawing.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/brush_style.dart - - /Users/jp/src/github/vteam/fPaint/lib/models/user_action_drawing.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/halftone_fill.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/text_formatting_controls.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/text_style_toggle_buttons.dart - - /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/app_effects.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/import_files.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/confirm_discard_dialog.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/import_files.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/confirm_discard_dialog.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection_commit.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/selector_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/overlay_control_widgets.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/file_jpeg.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/file_operation_exception.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/text_formatting_controls.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/text_style_toggle_buttons.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/fill_service.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/fill_model.dart - - /Users/jp/src/github/vteam/fPaint/lib/constants/app_text_style.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/app_strings.dart + + /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/app_effects.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/webp_huffman_codec.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/webp_bit_writer.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/selector_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/overlay_control_widgets.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/fill_service.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/fill_model.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/shell_selection_sub_toolbar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/toolbar_icon_button.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/transform_model.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/main_view.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/text_editor.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/text_attributes_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/tool_attribute_widget.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/text_attributes_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/text_formatting_controls.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/selector_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/marching_ants_path.dart + + /Users/jp/src/github/vteam/fPaint/lib/models/image_placement_layer_restore_state.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/user_action_drawing.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/color_picker_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/color_selector.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/export_download_non_web.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/export_prepare.dart - - /Users/jp/src/github/vteam/fPaint/lib/recovery/draft_recovery_controller.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/recovery/draft_recovery_storage_web.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/app_slider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_text.dart - - /Users/jp/src/github/vteam/fPaint/lib/recovery/draft_recovery_storage_web.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/recovery/draft_recovery_storage.dart + + /Users/jp/src/github/vteam/fPaint/lib/models/user_action_drawing.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/brush_style.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/file_tiff.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/tiff_constants.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/webp_huffman_codec.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/webp_bit_writer.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/export_download_non_web.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/save_backup.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/file_webp.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/file_operation_exception.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/fill_service.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/user_action_drawing.dart + + /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/app_flood_fill.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/side_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/top_menu_and_layers_panel.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/confirm_discard_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/webp_huffman_codec.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/webp_encoder_shared.dart + + /Users/jp/src/github/vteam/fPaint/lib/helpers/image_effects.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/image_helper.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/app_preferences.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/macos_bookmark_service.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/text_editor_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/color_picker_dialog.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/shell_selection_sub_toolbar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/toolbar_icon_button.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/about.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/attribution_dialog.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/main_view.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/magnifying_eye_dropper.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/top_colors.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/color_preview.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_dialog.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/text_attributes_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/brush_size_picker.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/text_attributes_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/text_formatting_controls.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/export_download_non_web.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/save_backup.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/file_webp.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/file_operation_exception.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/effect_intensity_controls.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/effect_labels.dart - - /Users/jp/src/github/vteam/fPaint/lib/helpers/image_effects.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/image_helper.dart + + /Users/jp/src/github/vteam/fPaint/lib/models/user_action_drawing.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/halftone_fill.dart - + /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/layer_crop_state.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/export_prepare.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/file_ora.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_dialog.dart - - /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/app_flood_fill.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/webp_huffman_codec.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/webp_encoder_shared.dart + + + + /Users/jp/src/github/vteam/fPaint/lib/widgets/main_view.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/magnifying_eye_dropper.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/top_colors.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/color_preview.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/app_preferences.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/macos_bookmark_service.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/confirm_discard_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/side_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/top_menu_and_layers_panel.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/layers_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/canvas_resize.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/export_prepare.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/file_ora.dart - - /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/app_radius.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/magnifying_eye_dropper.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/overlay_control_widgets.dart - + /Users/jp/src/github/vteam/fPaint/lib/models/selection_effect.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/image_effects.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/webp_vp8l_encoder.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/webp_transform_codec.dart + + /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/app_radius.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/magnifying_eye_dropper.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/overlay_control_widgets.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/main_view.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/transform_widget.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/main_view.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/transform_widget.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/shell_selection_sub_toolbar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/shortcut_tooltip.dart - - /Users/jp/src/github/vteam/fPaint/lib/constants/app_interaction_profiles.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/interaction_input_modality.dart + + /Users/jp/src/github/vteam/fPaint/lib/models/tool_descriptor.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/effect_labels.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/text_attributes_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/brush_size_picker.dart + + /Users/jp/src/github/vteam/fPaint/lib/constants/app_interaction_profiles.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/interaction_input_modality.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_popup_menu.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/text_editor_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/color_picker_dialog.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/layers_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/canvas_resize.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/top_menu_and_layers_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/side_panel_header.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/webp_vp8l_encoder.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/webp_transform_codec.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/app_snackbar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_progress.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/fill_service.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/user_action_drawing.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/app_overlay.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_overlay_menu_item.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/wand_selection_manager.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/shell_selection_sub_toolbar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/shortcut_tooltip.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/app_snackbar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_progress.dart - - /Users/jp/src/github/vteam/fPaint/lib/models/image_placement_model.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/image_placement_layer_restore_state.dart + + /Users/jp/src/github/vteam/fPaint/lib/constants/app_interaction_profiles.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/interaction_layout_profile.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/top_colors.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart + + /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/app_spacing.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/wand_selection_manager.dart + + /Users/jp/src/github/vteam/fPaint/lib/helpers/shortcut_tooltip.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/shortcuts_constants.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/about.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/attribution_dialog.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/app_overlay.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_overlay_menu_item.dart - - /Users/jp/src/github/vteam/fPaint/lib/constants/app_interaction_profiles.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/interaction_layout_profile.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/color_picker_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/top_colors.dart - - /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/app_spacing.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/top_colors.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/color_picker_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/top_colors.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/transform_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/overlay_control_widgets.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_bottom_sheet.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/transform_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/overlay_control_widgets.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/main_view.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/fill_widget.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_list_tile.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_panel_painter.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/app_overlay.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_overlay_surface.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_panel_painter.dart + + /Users/jp/src/github/vteam/fPaint/lib/models/image_placement_model.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/image_placement_layer_restore_state.dart - + /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/app_stroke.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/main_view.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/fill_widget.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_list_tile.dart - - /Users/jp/src/github/vteam/fPaint/lib/helpers/shortcut_tooltip.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/shortcuts_constants.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tool_family_rail.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/side_panel_header.dart - + /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/app_visual.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_card.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_divider.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/menu.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/canvas_settings.dart - - /Users/jp/src/github/vteam/fPaint/lib/models/effect_preview_model.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/selection_effect.dart + + /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/file_extensions.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/text_alignment_dropdown.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tools_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/text_attributes_widget.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/shortcuts.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/shortcuts_help.dart - - /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/file_extensions.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/main_view.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_panel.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/main_view.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_panel.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/text_alignment_dropdown.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/effect_preview_model.dart + + /Users/jp/src/github/vteam/fPaint/lib/models/effect_preview_model.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/selection_effect.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/menu.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/canvas_settings.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/effect_preview_model.dart - - /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/keys.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_divider.dart - + /Users/jp/src/github/vteam/fPaint/lib/panels/layers/layer_selector.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/color_picker_dialog.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_scaffold.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tools_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tool_family_rail.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tools_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/text_attributes_widget.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/text_attributes_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/color_picker_dialog.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tools_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/gradient_color_list_editor.dart + + /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/keys.dart + + + + /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_scaffold.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/color_picker_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/color_wheel_selector.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/image_placement_model.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tools_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/gradient_color_list_editor.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/text_attributes_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/color_picker_dialog.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/effect_brush_model.dart + + + + /Users/jp/src/github/vteam/fPaint/lib/models/effect_brush_model.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/selection_effect.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/gradient_color_list_editor.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/color_picker_dialog.dart - + + /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/image_placement_model.dart + + + + /Users/jp/src/github/vteam/fPaint/lib/models/tool_family.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart + + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/menu.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/about.dart - + /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tools_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/brush_style_picker.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/magnifying_eye_dropper.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/draw_rect.dart - + /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tools_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/halftone_size_picker.dart - + /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tools_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/tolerance_picker.dart - + /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tools_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/brush_intensity_picker.dart - + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/menu.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/menu_model.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_gesture_handler.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/smudge_helper.dart - - /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/app_interaction.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/layer_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/draw_path_helper.dart - - /Users/jp/src/github/vteam/fPaint/lib/main.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/shortcuts.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_tools.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_canvas.dart - - /Users/jp/src/github/vteam/fPaint/lib/models/selection_effect.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/app_icon_enum.dart + + /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/app_interaction.dart + + + + /Users/jp/src/github/vteam/fPaint/lib/recovery/draft_recovery_controller.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/recovery/draft_recovery_storage.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/main_view.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_tools.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/layers_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/user_action_drawing.dart + + /Users/jp/src/github/vteam/fPaint/lib/main.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/shortcuts.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/color_picker_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/layer_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/image_helper.dart + + /Users/jp/src/github/vteam/fPaint/lib/models/selection_effect.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/app_icon_enum.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_tools.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_canvas.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/layer_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/text_object.dart - - /Users/jp/src/github/vteam/fPaint/lib/recovery/draft_recovery_controller.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/recovery/draft_recovery_storage.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/import_files.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/fill_service.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/halftone_fill.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/app_buttons.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/app_icon_enum.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tools_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/color_picker_dialog.dart + + /Users/jp/src/github/vteam/fPaint/lib/shell_top_bar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/recent_files_dialog.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/import_files.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart - - /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/app_colors.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/save.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/file_tiff.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/side_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/side_panel_header.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tools_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/color_picker_dialog.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/shell_selection_sub_toolbar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/shortcuts_constants.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/layer_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/text_object.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/fill_service.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/halftone_fill.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/shell_selection_sub_toolbar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/shortcuts_constants.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/main_view.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/overlay_control_widgets.dart - - /Users/jp/src/github/vteam/fPaint/lib/helpers/image_helper.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/app_colors.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/save.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/export_file_name.dart + + /Users/jp/src/github/vteam/fPaint/lib/helpers/image_helper.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - - /Users/jp/src/github/vteam/fPaint/lib/models/text_object.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/layers_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/user_action_drawing.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/file_tiff.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/file_operation_exception.dart + + /Users/jp/src/github/vteam/fPaint/lib/helpers/transform_helper.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/image_helper.dart - - /Users/jp/src/github/vteam/fPaint/lib/shell_top_bar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/overlay_control_widgets.dart + + /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/app_font_size.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/import_files.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/file_ora.dart + + /Users/jp/src/github/vteam/fPaint/lib/shell_top_bar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/share_panel.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/color_selector.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/list_helper.dart + + /Users/jp/src/github/vteam/fPaint/lib/shell_top_bar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/overlay_control_widgets.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/base_picker.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/color_picker_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/color_preview.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/app_buttons.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/app_icon_enum.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/recent_files_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_canvas.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/recent_files_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/confirm_discard_dialog.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/base_picker.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/layer_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/draw_path_helper.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/color_selector.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/list_helper.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/color_picker_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/color_preview.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/import_files.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/file_ora.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/effect_intensity_controls.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/save.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/export_file_name.dart - - /Users/jp/src/github/vteam/fPaint/lib/helpers/transform_helper.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/image_helper.dart + + /Users/jp/src/github/vteam/fPaint/lib/models/text_object.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - - /Users/jp/src/github/vteam/fPaint/lib/shell_top_bar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/recent_files_dialog.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/layer_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/image_helper.dart - - /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/app_font_size.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/recent_files_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/shell_provider.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tools_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/effect_intensity_controls.dart + + /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/app_layout.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection_commit.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/selector_model.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/import_files.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/file_heic.dart - - /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/app_layout.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/color_selector.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/transparent_background.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/color_selector.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/transparent_background.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/recent_files_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/confirm_discard_dialog.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/recent_files_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_canvas.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_overlay.dart - + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/menu.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/import_files.dart - - /Users/jp/src/github/vteam/fPaint/lib/shell_top_bar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/share_panel.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection_commit.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/selector_model.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/effect_intensity_controls.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/file_tiff.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/file_operation_exception.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_overlay.dart + + /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/app_limits.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/import_files.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/file_heic.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/undo_provider.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/save.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/file_tiff.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/import_files.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/file_heic_web.dart - + /Users/jp/src/github/vteam/fPaint/lib/files/webp_vp8l_encoder.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/webp_huffman_codec.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/undo_provider.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/share_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/shell_provider.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/import_files.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/file_heic_web.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/save.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/shell_provider.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/save.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/save_backup.dart + + /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/app_math.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/recent_files_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/shell_provider.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/save.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/save_backup.dart - - /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/app_limits.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/image_placement_layer_restore_state.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/image_placement_layer_restore_state.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/color_selector.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart - + /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tools_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/brush_size_picker.dart - + /Users/jp/src/github/vteam/fPaint/lib/models/brush_style.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/app_popup_menu.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_buttons.dart + + /Users/jp/src/github/vteam/fPaint/lib/shell_top_bar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/toolbar_icon_button.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/color_selector.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/fill_service.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/image_helper.dart - - /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/app_math.dart + + /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/app_strings.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/share_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/shell_provider.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/app_popup_menu.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_buttons.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_button_row.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/confirm_discard_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/confirm_discard_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/main_view.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/effect_preview_bottom_sheet.dart + + + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/top_menu_and_layers_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/side_panel_header.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/top_colors.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/transparent_background.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/fill_service.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/image_helper.dart + + /Users/jp/src/github/vteam/fPaint/lib/models/halftone_fill.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/brush_size_picker.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/save.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/shell_provider.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_button_row.dart - - /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/app_strings.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/fill_service.dart - - /Users/jp/src/github/vteam/fPaint/lib/models/halftone_fill.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tools_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/tool_attribute_widget.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/main_view.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/effect_preview_bottom_sheet.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/text_attributes_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/color_selector.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/fill_service.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_text.dart - + /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/interaction_input_modality.dart - - /Users/jp/src/github/vteam/fPaint/lib/shell_top_bar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/toolbar_icon_button.dart - - - - /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_text.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/webp_transform_codec.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/webp_bit_writer.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tools_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/tool_attribute_widget.dart + + /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/interaction_layout_profile.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/top_colors.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/webp_transform_codec.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/webp_bit_writer.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/effect_intensity_controls.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart - - /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/interaction_layout_profile.dart + + /Users/jp/src/github/vteam/fPaint/lib/shell_top_bar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/shortcut_tooltip.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/text_attributes_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/color_selector.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_progress.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/shortcuts_help.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/shortcuts_constants.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_progress.dart - - - - /Users/jp/src/github/vteam/fPaint/lib/shell_top_bar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/shortcut_tooltip.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/effect_intensity_controls.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart - + /Users/jp/src/github/vteam/fPaint/lib/files/webp_transform_codec.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/webp_encoder_shared.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/fill_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/color_picker_dialog.dart + + /Users/jp/src/github/vteam/fPaint/lib/models/tool_descriptor.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_switch.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/color_wheel_selector.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/transparent_background.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tool_family_rail.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/effect_labels.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/layers/blend_mode.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/fill_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/color_picker_dialog.dart + + + + /Users/jp/src/github/vteam/fPaint/lib/widgets/color_wheel_selector.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/transparent_background.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/color_wheel_selector.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/brush_style_picker.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/base_picker.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/canvas_settings.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/shell_provider.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/layers/blend_mode.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/halftone_size_picker.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/base_picker.dart - + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/canvas_settings.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/shell_provider.dart + + + /Users/jp/src/github/vteam/fPaint/lib/widgets/tolerance_picker.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/base_picker.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/brush_intensity_picker.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/base_picker.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/layer_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/color_helper.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/layers_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/image_helper.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/color_picker_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/import_files.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/file_operation_exception.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection_commit.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/image_placement_layer_restore_state.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/color_picker_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/overlay_control_widgets.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_tools.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/layers_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/image_helper.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/overlay_control_widgets.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart - + /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tools_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_canvas.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/share_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/file_heic_web.dart - - - - /Users/jp/src/github/vteam/fPaint/lib/shell_top_bar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/shortcuts_constants.dart - - - - /Users/jp/src/github/vteam/fPaint/lib/widgets/app_icon.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/recent_files_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/file_ora.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_tools.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/share_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/file_heic.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/import_files.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/file_operation_exception.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/side_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/side_panel_header.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/shell_selection_sub_toolbar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/effect_labels.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_canvas.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/user_action_drawing.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/webp_vp8l_encoder.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/webp_bit_writer.dart + + /Users/jp/src/github/vteam/fPaint/lib/shell_top_bar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/shortcuts_constants.dart - + + /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection_commit.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/image_placement_layer_restore_state.dart + + + /Users/jp/src/github/vteam/fPaint/lib/models/transform_model.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/visible_model.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/import_files.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_canvas.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/share_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/file_heic.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_buttons.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_gesture_handler.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_canvas.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/share_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/file_heic_web.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/user_action_drawing.dart + + /Users/jp/src/github/vteam/fPaint/lib/models/selector_model.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/draw_path_helper.dart - + /Users/jp/src/github/vteam/fPaint/lib/models/selector_model.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/draw_path_helper.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/selector_model.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/layer_provider_storage_export.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/layer_provider.dart - - /Users/jp/src/github/vteam/fPaint/lib/models/selector_model.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/draw_path_helper.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/webp_vp8l_encoder.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/webp_bit_writer.dart - - /Users/jp/src/github/vteam/fPaint/lib/shell_top_bar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/import_files.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/selector_model.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/selector_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/effect_labels.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/app_icon.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/recent_files_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/file_ora.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/import_files.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_buttons.dart + + /Users/jp/src/github/vteam/fPaint/lib/shell_top_bar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/import_files.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/webp_vp8l_encoder.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/webp_encoder_shared.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_gesture_handler.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_canvas.dart - - /Users/jp/src/github/vteam/fPaint/lib/models/fill_model.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + /Users/jp/src/github/vteam/fPaint/lib/models/text_tool_state.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/text_object.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_gesture_handler.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/shell_provider.dart + + /Users/jp/src/github/vteam/fPaint/lib/recovery/draft_recovery_controller.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/draft_flusher.dart - - /Users/jp/src/github/vteam/fPaint/lib/models/selector_model.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/visible_model.dart + + /Users/jp/src/github/vteam/fPaint/lib/models/fill_model.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/color_picker_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/transparent_background.dart - + /Users/jp/src/github/vteam/fPaint/lib/files/file_ora.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/layers_provider.dart - - /Users/jp/src/github/vteam/fPaint/lib/models/text_tool_state.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/text_object.dart + + /Users/jp/src/github/vteam/fPaint/lib/models/selector_model.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/visible_model.dart - + /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/fill_model.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/menu.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_canvas.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_gesture_handler.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/shell_provider.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/layer_provider_storage_export.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/layer_provider.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/webp_vp8l_encoder.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/webp_encoder_shared.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/shell_selection_sub_toolbar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/shell_provider.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/recent_files_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tools_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/effect_labels.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/layer_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/color_helper.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/recent_files_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/selector_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/effect_labels.dart - - /Users/jp/src/github/vteam/fPaint/lib/recovery/draft_recovery_controller.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/draft_flusher.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/side_panel_header.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/menu.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/shell_provider.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/menu.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_canvas.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tools_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/color_selector.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/recent_files_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/transform_model.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/shell_selection_sub_toolbar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/shell_provider.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/recent_files_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tools_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/color_selector.dart - + /Users/jp/src/github/vteam/fPaint/lib/providers/undo_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/log_helper.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/app_tooltip.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/transform_model.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/selector_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/shell_provider.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/menu.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/shell_provider.dart - + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/share_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/brush_size_picker.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/selector_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/shell_provider.dart + + + + /Users/jp/src/github/vteam/fPaint/lib/widgets/app_tooltip.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/models/render_helper.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/app_button_row.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/app_icon_enum.dart - + /Users/jp/src/github/vteam/fPaint/lib/providers/macos_bookmark_service.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/log_helper.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/effect_preview_bottom_sheet.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/text_editor_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart - - /Users/jp/src/github/vteam/fPaint/lib/models/effect_preview_model.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/visible_model.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/brush_size_picker.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart - - /Users/jp/src/github/vteam/fPaint/lib/helpers/image_effects.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tools_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/top_colors.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/wand_selection_manager.dart + + /Users/jp/src/github/vteam/fPaint/lib/models/effect_preview_model.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/visible_model.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tools_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/top_colors.dart + + /Users/jp/src/github/vteam/fPaint/lib/helpers/image_effects.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/layers/layer_thumbnail.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/transparent_background.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/effect_preview_bottom_sheet.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/flood_fill.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/wand_selection_manager.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/effect_preview_bottom_sheet.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/text_alignment_dropdown.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_dropdown.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/transform_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/shell_provider.dart - + + /Users/jp/src/github/vteam/fPaint/lib/providers/flood_fill.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + + /Users/jp/src/github/vteam/fPaint/lib/widgets/tool_attribute_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/text_alignment_dropdown.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_dropdown.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/layers/layer_selector.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/color_preview.dart - - /Users/jp/src/github/vteam/fPaint/lib/models/image_placement_model.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/visible_model.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/layers/layer_thumbnail.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/transparent_background.dart - + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/top_menu_and_layers_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/shell_provider.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/layers/layer_selector.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/color_preview.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/layers/layer_selector.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/text_attributes_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/color_preview.dart + + /Users/jp/src/github/vteam/fPaint/lib/models/image_placement_model.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/visible_model.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/layers/layer_selector.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/text_attributes_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/color_preview.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/attribution_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/layers/layer_selector.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/gradient_color_list_editor.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/color_preview.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tool_family_rail.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/layers/blend_mode.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/gradient_color_list_editor.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/color_preview.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/layers/layer_selector.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/text_attributes_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/container_slider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tool_family_rail.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/text_attributes_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/attribution_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/gradient_color_list_editor.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/truncated_text.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/layers/blend_mode.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart - + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/canvas_settings.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart - + + /Users/jp/src/github/vteam/fPaint/lib/widgets/container_slider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart + + + + /Users/jp/src/github/vteam/fPaint/lib/widgets/truncated_text.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart + + + /Users/jp/src/github/vteam/fPaint/lib/widgets/brush_style_picker.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/halftone_size_picker.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/tolerance_picker.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart - + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/about.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/brush_intensity_picker.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/layers_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/color_helper.dart - - - - /Users/jp/src/github/vteam/fPaint/lib/widgets/shortcuts.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/shell_provider.dart - - - - /Users/jp/src/github/vteam/fPaint/lib/widgets/main_view.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_canvas.dart - - - + /Users/jp/src/github/vteam/fPaint/lib/main_screen.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/import_files.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/effect_intensity_controls.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_slider.dart - - - - /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tools_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart - - - + /Users/jp/src/github/vteam/fPaint/lib/providers/app_preferences.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/log_helper.dart - + /Users/jp/src/github/vteam/fPaint/lib/models/selection_effect.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/overlay_control_widgets.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/image_helper.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/shortcuts.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/shell_provider.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/import_files.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/layers_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/color_helper.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/shortcuts.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_canvas.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/main_view.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_canvas.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_gesture_handler.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/main_view.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/shell_provider.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/selection_effect.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/import_files.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart - + /Users/jp/src/github/vteam/fPaint/lib/shell_top_bar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_canvas.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tools_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_gesture_handler.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/main_view.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/shell_provider.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tools_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/color_preview.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/layer_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/shortcuts.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_canvas.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tools_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/color_preview.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tools_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart - + /Users/jp/src/github/vteam/fPaint/lib/providers/layers_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/log_helper.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/text_object.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/image_helper.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/app_buttons.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/selection_effect.dart - + /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/transform_helper.dart - - /Users/jp/src/github/vteam/fPaint/lib/shell_top_bar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/shell_provider.dart - - - - /Users/jp/src/github/vteam/fPaint/lib/widgets/shell_selection_sub_toolbar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/app_buttons.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/file_tiff.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/layers_provider.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/text_object.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/effect_intensity_controls.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_snackbar.dart + + /Users/jp/src/github/vteam/fPaint/lib/shell_top_bar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/shell_provider.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/side_panel_header.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart + + /Users/jp/src/github/vteam/fPaint/lib/helpers/transform_helper.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_gesture_handler.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/layer_provider_storage_export.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/user_action_drawing.dart + + /Users/jp/src/github/vteam/fPaint/lib/main.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/draft_flusher.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/shell_selection_sub_toolbar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/shell_selection_sub_toolbar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart - - /Users/jp/src/github/vteam/fPaint/lib/helpers/transform_helper.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/file_tiff.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/layers_provider.dart - + /Users/jp/src/github/vteam/fPaint/lib/files/webp_encoder.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/webp_encoder_shared.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/effect_intensity_controls.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/layer_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - - /Users/jp/src/github/vteam/fPaint/lib/main.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/draft_flusher.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/recent_files_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/recent_files_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/shell_selection_sub_toolbar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/undo_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/share_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/image_placement_layer_restore_state.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/save.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/file_operation_exception.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/menu.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/image_placement_layer_restore_state.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/text_alignment_dropdown.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_text.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/share_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/undo_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/save.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/file_operation_exception.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/menu.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_tooltip.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/layer_provider_storage_export.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/user_action_drawing.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/selector_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/text_editor.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_tooltip.dart - + /Users/jp/src/github/vteam/fPaint/lib/main.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/save.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/layer_crop_state.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/user_action_drawing.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/text_editor_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart + + + + /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/fill_service.dart - + + /Users/jp/src/github/vteam/fPaint/lib/widgets/text_editor.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart + + + /Users/jp/src/github/vteam/fPaint/lib/widgets/shortcuts.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/confirm_discard_dialog.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/fill_service.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/layer_crop_state.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/user_action_drawing.dart + + + + /Users/jp/src/github/vteam/fPaint/lib/widgets/effect_preview_bottom_sheet.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart - + /Users/jp/src/github/vteam/fPaint/lib/providers/fill_service.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/text_editor_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/effect_intensity_controls.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_slider.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/text_style_toggle_buttons.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/text_tool_state.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/export_prepare.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/layers_provider.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/effect_intensity_controls.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_snackbar.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/transform_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart + + /Users/jp/src/github/vteam/fPaint/lib/models/canvas_resize.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/effect_preview_bottom_sheet.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/toolbar_icon_button.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart - - /Users/jp/src/github/vteam/fPaint/lib/models/canvas_resize.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/transform_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/toolbar_icon_button.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/export_prepare.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/layers_provider.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/top_menu_and_layers_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/effect_intensity_controls.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/fill_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/top_menu_and_layers_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart - + /Users/jp/src/github/vteam/fPaint/lib/files/save_backup.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_preferences.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/shortcuts_help.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/fill_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart + + + + /Users/jp/src/github/vteam/fPaint/lib/panels/layers/layer_selector.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/app_overlay_menu_item.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/app_overlay_surface.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/shortcuts_help.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/layers/layer_selector.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/app_overlay_surface.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/text_attributes_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart - + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/canvas_settings.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/brush_style_picker.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/halftone_size_picker.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/tolerance_picker.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart - + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/about.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/brush_intensity_picker.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart - - /Users/jp/src/github/vteam/fPaint/lib/recovery/draft_recovery_controller.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/shell_provider.dart - - - + /Users/jp/src/github/vteam/fPaint/lib/providers/app_preferences.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/main_view.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/user_action_drawing.dart + + /Users/jp/src/github/vteam/fPaint/lib/recovery/draft_recovery_controller.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/shell_provider.dart - - /Users/jp/src/github/vteam/fPaint/lib/recovery/draft_recovery_controller.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_canvas.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/shortcuts.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/import_files.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_preferences.dart + + /Users/jp/src/github/vteam/fPaint/lib/recovery/draft_recovery_controller.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_canvas.dart - - /Users/jp/src/github/vteam/fPaint/lib/shell_top_bar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/user_action_drawing.dart - + /Users/jp/src/github/vteam/fPaint/lib/main_screen.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/shell_provider.dart - - /Users/jp/src/github/vteam/fPaint/lib/main.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/import_files.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_tools.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart + + + + /Users/jp/src/github/vteam/fPaint/lib/files/import_files.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_preferences.dart - + /Users/jp/src/github/vteam/fPaint/lib/providers/layers_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_tools.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/app_snackbar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/log_helper.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/main_view.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/color_picker_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/layers_provider.dart - + + /Users/jp/src/github/vteam/fPaint/lib/shell_top_bar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart + + + /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tools_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/app_snackbar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/log_helper.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/color_preview.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_icon.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/shortcuts.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart + + /Users/jp/src/github/vteam/fPaint/lib/main.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/import_files.dart + + + + /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_gesture_handler.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart + + + + /Users/jp/src/github/vteam/fPaint/lib/shell_top_bar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart - + /Users/jp/src/github/vteam/fPaint/lib/models/selector_model.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_gesture_handler.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/side_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart - - /Users/jp/src/github/vteam/fPaint/lib/shell_top_bar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/effect_intensity_controls.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_button_row.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/side_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/shell_selection_sub_toolbar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/color_preview.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_icon.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/recent_files_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/app_overlay.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/layer_provider_storage_export.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/image_helper.dart + + /Users/jp/src/github/vteam/fPaint/lib/models/effect_labels.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/selection_effect.dart - + /Users/jp/src/github/vteam/fPaint/lib/files/export_download_non_web.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/layers_provider.dart - + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/side_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/effect_intensity_controls.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_button_row.dart - - - - /Users/jp/src/github/vteam/fPaint/lib/widgets/shell_selection_sub_toolbar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/layer_provider_storage_export.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/image_helper.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/save_backup.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/macos_bookmark_service.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/menu.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/recent_files_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/export_download_non_web.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_preferences.dart - + /Users/jp/src/github/vteam/fPaint/lib/files/export_download_web.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/layers_provider.dart - - /Users/jp/src/github/vteam/fPaint/lib/models/effect_labels.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/selection_effect.dart - - - - /Users/jp/src/github/vteam/fPaint/lib/files/export_download_non_web.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_preferences.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/save_backup.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/macos_bookmark_service.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/menu.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/share_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart - + /Users/jp/src/github/vteam/fPaint/lib/models/transform_model.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/selector_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart - - - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/share_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart - - - + /Users/jp/src/github/vteam/fPaint/lib/files/export_download_web.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_preferences.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/app_button_row.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/selector_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/text_editor.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/magnifying_eye_dropper.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/app_button_row.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/app_text.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/shell_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/canvas_resize.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/magnifying_eye_dropper.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/effect_preview_bottom_sheet.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart - + + /Users/jp/src/github/vteam/fPaint/lib/providers/wand_selection_manager.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + + /Users/jp/src/github/vteam/fPaint/lib/providers/shell_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/canvas_resize.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/wand_selection_manager.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/shell_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/canvas_resize.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/app_progress.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/text_style_toggle_buttons.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_buttons.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/app_switch.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/gradient_color_list_editor.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_text_field.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/app_switch.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/text_style_toggle_buttons.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_buttons.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/shortcuts_help.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tool_family_rail.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_slider.dart - + /Users/jp/src/github/vteam/fPaint/lib/models/effect_preview_model.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + + /Users/jp/src/github/vteam/fPaint/lib/widgets/shortcuts_help.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart + + + /Users/jp/src/github/vteam/fPaint/lib/panels/layers/layer_selector.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/text_attributes_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart - + + /Users/jp/src/github/vteam/fPaint/lib/models/effect_brush_model.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + + + /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tool_family_rail.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart + + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/canvas_settings.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart - - /Users/jp/src/github/vteam/fPaint/lib/main.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/shell_provider.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/shortcuts.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart - + /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/image_helper.dart + + /Users/jp/src/github/vteam/fPaint/lib/main.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/shell_provider.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/shortcuts.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/image_helper.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tools_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/app_snackbar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/main_view.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_canvas.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/fill_model.dart - - - + /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_tools.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/selector_model.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/app_snackbar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tools_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/file_ora.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/image_helper.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_canvas.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/fill_model.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/export_download_non_web.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/macos_bookmark_service.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/app_slider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/pages/settings_page.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/color_preview.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/app_icon_enum.dart - - - - /Users/jp/src/github/vteam/fPaint/lib/shell_top_bar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/file_ora.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/image_helper.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/app_dropdown.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_gesture_handler.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_gesture_handler.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/color_preview.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/app_icon_enum.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/nine_grid_selector.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/canvas_resize.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/text_editor_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/text_tool_state.dart - - /Users/jp/src/github/vteam/fPaint/lib/recovery/draft_recovery_controller.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/file_ora.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/export_download_non_web.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/macos_bookmark_service.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/shell_selection_sub_toolbar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart + + /Users/jp/src/github/vteam/fPaint/lib/shell_top_bar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart - - /Users/jp/src/github/vteam/fPaint/lib/pages/platforms_page.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/app_dropdown.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/app_slider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/shell_selection_sub_toolbar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/effect_intensity_controls.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/selection_effect.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/recent_files_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_preferences.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/text_editor_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/text_tool_state.dart + + /Users/jp/src/github/vteam/fPaint/lib/pages/platforms_page.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart - + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/side_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/app_text_field.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + /Users/jp/src/github/vteam/fPaint/lib/recovery/draft_recovery_controller.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/files/file_ora.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/menu.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/app_text_field.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/recent_files_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_preferences.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/nine_grid_selector.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/canvas_resize.dart - + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/share_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_preferences.dart - + /Users/jp/src/github/vteam/fPaint/lib/files/save.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/layers_provider.dart - + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/menu.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart + + + + /Users/jp/src/github/vteam/fPaint/lib/files/save.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_preferences.dart + + + /Users/jp/src/github/vteam/fPaint/lib/widgets/app_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/text_editor.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/save.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_preferences.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/app_popup_menu.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/app_popup_menu.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/text_attributes_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/text_tool_state.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/app_bottom_sheet.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/panels/layers/layer_thumbnail.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/layer_provider.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/app_list_tile.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/text_attributes_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/text_tool_state.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/effect_intensity_controls.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/selection_effect.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/app_card.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/app_divider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + /Users/jp/src/github/vteam/fPaint/lib/models/tool_descriptor.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/selection_effect.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/app_scaffold.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/app_divider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/save.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/macos_bookmark_service.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/app_scaffold.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_gesture_handler.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/selector_model.dart + + /Users/jp/src/github/vteam/fPaint/lib/models/tool_family.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/user_action_drawing.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/color_picker_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_icon.dart + + /Users/jp/src/github/vteam/fPaint/lib/main.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/shortcuts.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart - + /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_canvas.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/image_helper.dart - - /Users/jp/src/github/vteam/fPaint/lib/main.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/l10n/app_localizations.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_gesture_handler.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/selector_model.dart - - /Users/jp/src/github/vteam/fPaint/lib/main_screen.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/main_view.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/main_view.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/color_preview.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/color_helper.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/shell_selection_sub_toolbar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/selector_model.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/color_preview.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/color_helper.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/color_picker_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_icon.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/text_editor.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/text_tool_state.dart + + /Users/jp/src/github/vteam/fPaint/lib/main_screen.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/recent_files_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/macos_bookmark_service.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/save.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/macos_bookmark_service.dart - - /Users/jp/src/github/vteam/fPaint/lib/shell_top_bar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/text_editor.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/text_tool_state.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/file_tiff.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/image_helper.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_gesture_handler.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_preferences.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/transparent_background.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_gesture_handler.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_preferences.dart + + /Users/jp/src/github/vteam/fPaint/lib/shell_top_bar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart - + /Users/jp/src/github/vteam/fPaint/lib/pages/settings_page.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart - + /Users/jp/src/github/vteam/fPaint/lib/files/file_ora.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/log_helper.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/selector_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/selector_model.dart - + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/side_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/transform_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/transform_model.dart + + /Users/jp/src/github/vteam/fPaint/lib/pages/platforms_page.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/effect_intensity_controls.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_icon.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/recent_files_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/macos_bookmark_service.dart - - /Users/jp/src/github/vteam/fPaint/lib/pages/platforms_page.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/transform_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/transform_model.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/file_heic.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/log_helper.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/file_tiff.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/image_helper.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/layer_provider_storage_export.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/file_heic.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/log_helper.dart - + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/menu.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_preferences.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/file_heic_web.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/log_helper.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/layer_provider_storage_export.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/magnifying_eye_dropper.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/layers_provider.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/file_heic_web.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/log_helper.dart - + /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_tools.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/fill_service.dart - + + /Users/jp/src/github/vteam/fPaint/lib/widgets/magnifying_eye_dropper.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/layers_provider.dart + + + /Users/jp/src/github/vteam/fPaint/lib/widgets/top_colors.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/image_helper.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/top_menu_and_layers_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/layers_provider.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/effect_preview_bottom_sheet.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/selection_effect.dart - + /Users/jp/src/github/vteam/fPaint/lib/panels/layers/layer_selector.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/undo_provider.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/effect_preview_bottom_sheet.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/selection_effect.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/top_colors.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/app_icon_enum.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/top_colors.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/app_icon_enum.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/effect_intensity_controls.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_icon.dart + + + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/top_menu_and_layers_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/layers_provider.dart + + + + /Users/jp/src/github/vteam/fPaint/lib/models/tool_descriptor.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/user_action_drawing.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/nine_grid_selector.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_icon.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/layers_provider.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/gradient_color_list_editor.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_buttons.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/text_style_toggle_buttons.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/app_icon_enum.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/text_style_toggle_buttons.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/app_icon_enum.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tool_family_rail.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_buttons.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_panel_painter.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/layer_provider.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tool_family_rail.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/selection_effect.dart - - /Users/jp/src/github/vteam/fPaint/lib/recovery/draft_recovery_controller.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/gradient_color_list_editor.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_buttons.dart - - /Users/jp/src/github/vteam/fPaint/lib/main.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_panel_painter.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/layer_provider.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_tools.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/user_action_drawing.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/color_picker_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/app_icon_enum.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/overlay_control_widgets.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_icon.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_gesture_handler.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/transform_helper.dart - + /Users/jp/src/github/vteam/fPaint/lib/files/import_files.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/image_helper.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/color_picker_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/app_icon_enum.dart + + /Users/jp/src/github/vteam/fPaint/lib/recovery/draft_recovery_controller.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tools_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/selection_effect.dart + + /Users/jp/src/github/vteam/fPaint/lib/main.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/material_free.dart - - /Users/jp/src/github/vteam/fPaint/lib/recovery/draft_recovery_controller.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_snackbar.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_tools.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/fill_model.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_selection.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/overlay_control_widgets.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_icon.dart - + /Users/jp/src/github/vteam/fPaint/lib/main_screen.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/selector_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/transform_helper.dart + + /Users/jp/src/github/vteam/fPaint/lib/recovery/draft_recovery_controller.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_snackbar.dart + + + + /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_tools.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/user_action_drawing.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/color_preview.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_gesture_handler.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/undo_provider.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/file_tiff.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/log_helper.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_gesture_handler.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/selection_effect.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_gesture_handler.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/image_placement_layer_restore_state.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/recent_files_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_icon.dart + + + + /Users/jp/src/github/vteam/fPaint/lib/widgets/shell_selection_sub_toolbar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/selection_effect.dart - + /Users/jp/src/github/vteam/fPaint/lib/files/file_ora.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/side_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_preferences.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/selector_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/transform_helper.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/shell_selection_sub_toolbar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/selection_effect.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/share_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_icon.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/recent_files_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_icon.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_gesture_handler.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/image_placement_layer_restore_state.dart + + + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/side_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_preferences.dart + + + + /Users/jp/src/github/vteam/fPaint/lib/files/file_tiff.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/log_helper.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/main_view.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/transform_model.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/selector_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/selection_effect.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/share_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_icon.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/file_jpeg.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/transform_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/transform_helper.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/file_jpeg.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/top_colors.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/color_helper.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/top_colors.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/color_helper.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/save_backup.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/log_helper.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/nine_grid_selector.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/app_icon_enum.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/layers/layer_selector.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_icon.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/save_backup.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/log_helper.dart + + /Users/jp/src/github/vteam/fPaint/lib/models/tool_descriptor.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/app_icon_enum.dart + + + + /Users/jp/src/github/vteam/fPaint/lib/widgets/text_attributes_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_icon.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/gradient_color_list_editor.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/fill_model.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/layers/layer_selector.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_icon.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/nine_grid_selector.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/app_icon_enum.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/text_attributes_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_icon.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tool_family_rail.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/user_action_drawing.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/brush_style_picker.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_icon.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/halftone_size_picker.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_icon.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/tolerance_picker.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_icon.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/color_picker_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/log_helper.dart + + /Users/jp/src/github/vteam/fPaint/lib/recovery/draft_recovery_controller.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_preferences.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tools_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/user_action_drawing.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tools_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_icon.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_gesture_handler.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/fill_model.dart + + /Users/jp/src/github/vteam/fPaint/lib/providers/shell_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - - /Users/jp/src/github/vteam/fPaint/lib/providers/shell_provider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/color_picker_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/log_helper.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/overlay_control_widgets.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/app_icon_enum.dart - - /Users/jp/src/github/vteam/fPaint/lib/main.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_gesture_handler.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/fill_model.dart - - /Users/jp/src/github/vteam/fPaint/lib/recovery/draft_recovery_controller.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_preferences.dart + + /Users/jp/src/github/vteam/fPaint/lib/main.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/color_picker_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/color_helper.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_gesture_handler.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/user_action_drawing.dart - - - - /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tools_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_icon.dart - - - - /Users/jp/src/github/vteam/fPaint/lib/main_screen.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_preferences.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tools_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/fill_model.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tools_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/fill_model.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tools_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/user_action_drawing.dart - + /Users/jp/src/github/vteam/fPaint/lib/files/import_files.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/log_helper.dart - + /Users/jp/src/github/vteam/fPaint/lib/providers/app_provider_canvas.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/main_view.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/selection_effect.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/shell_selection_sub_toolbar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/user_action_drawing.dart + + /Users/jp/src/github/vteam/fPaint/lib/main_screen.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_preferences.dart + + + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/recent_files_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/image_helper.dart - + /Users/jp/src/github/vteam/fPaint/lib/pages/settings_page.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_preferences.dart - + + /Users/jp/src/github/vteam/fPaint/lib/widgets/shell_selection_sub_toolbar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_icon.dart + + + + /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_gesture_handler.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/user_action_drawing.dart + + + /Users/jp/src/github/vteam/fPaint/lib/widgets/base_picker.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/shell_selection_sub_toolbar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_icon.dart - - - - /Users/jp/src/github/vteam/fPaint/lib/files/file_tiff.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/menu.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_icon.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/recent_files_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/image_helper.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/recent_files_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/app_icon_enum.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/menu.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_icon.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/shell_selection_sub_toolbar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/user_action_drawing.dart - + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/share_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/image_helper.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/recent_files_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/app_icon_enum.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/share_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/app_icon_enum.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/share_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/app_icon_enum.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/text_editor_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/text_object.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/text_editor.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/user_action_drawing.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/file_tiff.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/selector_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/widgets/app_icon.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/color_selector.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/text_editor_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/text_object.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/text_editor.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/user_action_drawing.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/text_editor_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/app_icon_enum.dart - + /Users/jp/src/github/vteam/fPaint/lib/files/export_file_name.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/top_colors.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - - - + /Users/jp/src/github/vteam/fPaint/lib/widgets/fill_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/fill_model.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/toolbar_icon_button.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/app_icon_enum.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/save_backup.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/top_colors.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/brush_style_picker.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/brush_style.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/save_backup.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/text_alignment_dropdown.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/layers/layer_selector.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/app_icon_enum.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/layers/layer_selector.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/app_icon_enum.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/brush_style_picker.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/brush_style.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/text_style_toggle_buttons.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/text_alignment_dropdown.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/color_wheel_selector.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/text_style_toggle_buttons.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/text_attributes_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/app_icon_enum.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/image_painter.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/color_wheel_selector.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/gradient_color_list_editor.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/app_icon_enum.dart - + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/canvas_settings.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/app_icon_enum.dart - + + /Users/jp/src/github/vteam/fPaint/lib/widgets/image_painter.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + + /Users/jp/src/github/vteam/fPaint/lib/widgets/brush_style_picker.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/app_icon_enum.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/halftone_size_picker.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/app_icon_enum.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/tolerance_picker.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/app_icon_enum.dart - + /Users/jp/src/github/vteam/fPaint/lib/helpers/smudge_helper.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/image_helper.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/color_picker_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + /Users/jp/src/github/vteam/fPaint/lib/main.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_preferences.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_gesture_handler.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/text_object.dart - - /Users/jp/src/github/vteam/fPaint/lib/main.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/app_preferences.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/shortcuts.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/user_action_drawing.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/main_view.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/user_action_drawing.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/color_picker_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - - /Users/jp/src/github/vteam/fPaint/lib/shell_top_bar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/user_action_drawing.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/main_view.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/fill_model.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/shortcuts.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/user_action_drawing.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_gesture_handler.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/image_helper.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tools_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/app_icon_enum.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/main_view.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/user_action_drawing.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_gesture_handler.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/image_helper.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/import_files.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/main_view.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/fill_model.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tools_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/app_icon_enum.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/import_files.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/selector_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/draw_path_helper.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/selector_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/draw_path_helper.dart + + /Users/jp/src/github/vteam/fPaint/lib/shell_top_bar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/user_action_drawing.dart + + + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/recent_files_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/log_helper.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/shell_selection_sub_toolbar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/app_icon_enum.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/effect_intensity_controls.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/side_panel_header.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/menu.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/app_icon_enum.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/text_editor.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/text_object.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/recent_files_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/log_helper.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/export_download_non_web.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/export_download_non_web.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + /Users/jp/src/github/vteam/fPaint/lib/files/save.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/log_helper.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/selector_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/app_icon_enum.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/magnifying_eye_dropper.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/image_helper.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/brush_size_picker.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - - /Users/jp/src/github/vteam/fPaint/lib/files/save.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/log_helper.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/magnifying_eye_dropper.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/app_icon_enum.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/magnifying_eye_dropper.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/app_icon_enum.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/tool_attribute_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/transform_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/app_icon_enum.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/tool_attribute_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/effect_intensity_controls.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/panels/layers/layer_thumbnail.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/nine_grid_selector.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/attribution_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/container_slider.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/truncated_text.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/overlay_control_widgets.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/shell_top_bar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/app_icon_enum.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/side_panel_header.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/recent_files_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/main.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/providers/undo_provider.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/recent_files_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - - - + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/share_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/files/save.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/text_editor_dialog.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/effect_preview_bottom_sheet.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/toolbar_icon_button.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/marching_ants_path.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/panels/layers/layer_selector.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/text_attributes_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + + /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tool_family_rail.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + + /Users/jp/src/github/vteam/fPaint/lib/widgets/gradient_color_list_editor.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/canvas_settings.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/halftone_size_picker.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/tolerance_picker.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/about.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/brush_intensity_picker.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_panel_painter.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/helpers/smudge_helper.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/draw_rect.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/panels/tools/tools_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_gesture_handler.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + /Users/jp/src/github/vteam/fPaint/lib/pages/settings_page.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/app_icon_enum.dart - - /Users/jp/src/github/vteam/fPaint/lib/pages/settings_page.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/app_icon_enum.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/canvas_gesture_handler.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/pages/platforms_page.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/models/app_icon_enum.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/shell_selection_sub_toolbar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - - /Users/jp/src/github/vteam/fPaint/lib/recovery/draft_recovery_storage_io.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/log_helper.dart + + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/menu.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - - /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/menu.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + /Users/jp/src/github/vteam/fPaint/lib/recovery/draft_recovery_storage_io.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/log_helper.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/selector_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/text_editor.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/magnifying_eye_dropper.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/transform_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/top_menu_and_layers_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/fill_widget.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/shortcuts_help.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - - /Users/jp/src/github/vteam/fPaint/lib/widgets/shortcuts.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + /Users/jp/src/github/vteam/fPaint/lib/recovery/draft_recovery_controller.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/log_helper.dart - - /Users/jp/src/github/vteam/fPaint/lib/recovery/draft_recovery_controller.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/log_helper.dart + + /Users/jp/src/github/vteam/fPaint/lib/widgets/shortcuts.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/widgets/main_view.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/shell_top_bar.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/panels/side_panel/side_panel.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - - /Users/jp/src/github/vteam/fPaint/lib/recovery/draft_recovery_controller.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart + + /Users/jp/src/github/vteam/fPaint/lib/main.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/log_helper.dart - - /Users/jp/src/github/vteam/fPaint/lib/main.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/helpers/log_helper.dart + + /Users/jp/src/github/vteam/fPaint/lib/recovery/draft_recovery_controller.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/main_screen.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/pages/settings_page.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/pages/platforms_page.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart - + /Users/jp/src/github/vteam/fPaint/lib/main.dart ▶ /Users/jp/src/github/vteam/fPaint/lib/constants/constants.dart @@ -3558,7 +3646,7 @@ 11. main_screen.dart - 201. app_localizations.dart + 211. app_localizations.dart 2. app_provider.dart 3. app_provider_canvas.dart 4. app_provider_selection.dart @@ -3571,13 +3659,14 @@ 11. fill_widget.dart 12. magnifying_eye_dropper.dart 13. material_free.dart -14. selection_effect.dart -15. selector_widget.dart -16. shell_provider.dart -17. text_editor.dart -18. transform_model.dart -19. transform_widget.dart -20. user_action_drawing.dartmain_view.dart +14. overlay_control_widgets.dart +15. selection_effect.dart +16. selector_widget.dart +17. shell_provider.dart +18. text_editor.dart +19. transform_model.dart +20. transform_widget.dart +21. user_action_drawing.dartmain_view.dart 11. main_screen.dart @@ -3625,46 +3714,42 @@ 11. draft_recovery_storage.dartdraft_recovery_storage_web.dart - - 31. draft_recovery_controller.dart + + 31. draft_recovery_controller.dart 2. draft_recovery_storage_io.dart -3. draft_recovery_storage_web.dartdraft_recovery_storage.dart +3. draft_recovery_storage_web.dartdraft_recovery_storage.dart - - 11. side_panel.dart - - 271. app_icon.dart + <path d="M 1128.0,185.0 L 1116.0,178.0 Q 1113.0,178.0 1113.0,181.0 L 1113.0,189.0 Q 1113.0,192.0 1116.0,192.0 Z" fill="#3b82f6"/> + <text x="1117.68" y="186.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. side_panel.dart + + 231. app_icon.dart 2. app_icon_enum.dart 3. app_localizations.dart 4. app_provider.dart 5. app_provider_canvas.dart -6. app_provider_selection.dart -7. app_provider_tools.dart -8. brush_intensity_picker.dart -9. brush_size_picker.dart -10. brush_style_picker.dart -11. color_picker_dialog.dart -12. color_preview.dart -13. color_selector.dart -14. constants.dart -15. effect_intensity_controls.dart -16. effect_labels.dart -17. fill_model.dart -18. gradient_color_list_editor.dart -19. halftone_size_picker.dart -20. material_free.dart -21. selection_effect.dart -22. side_panel_header.dart -23. text_attributes_widget.dart -24. tolerance_picker.dart -25. tool_attribute_widget.dart -26. top_colors.dart -27. user_action_drawing.darttools_panel.dart - - - 11. main_view.dart - - 191. app_localizations.dart +6. app_provider_tools.dart +7. brush_intensity_picker.dart +8. brush_size_picker.dart +9. brush_style_picker.dart +10. color_picker_dialog.dart +11. color_preview.dart +12. color_selector.dart +13. constants.dart +14. fill_model.dart +15. gradient_color_list_editor.dart +16. halftone_size_picker.dart +17. material_free.dart +18. text_attributes_widget.dart +19. tolerance_picker.dart +20. tool_attribute_widget.dart +21. tool_family_rail.dart +22. top_colors.dart +23. user_action_drawing.darttools_panel.dart + + + 11. main_view.dart + + 211. app_localizations.dart 2. app_preferences.dart 3. app_provider.dart 4. app_provider_canvas.dart @@ -3676,18 +3761,20 @@ 10. image_helper.dart 11. image_placement_layer_restore_state.dart 12. material_free.dart -13. selector_model.dart -14. shell_provider.dart -15. smudge_helper.dart -16. text_editor_dialog.dart -17. text_object.dart -18. undo_provider.dart -19. user_action_drawing.dartcanvas_gesture_handler.dart - - - 11. shell_top_bar.dart - - 171. app_icon.dart +13. selection_effect.dart +14. selector_model.dart +15. shell_provider.dart +16. smudge_helper.dart +17. text_editor_dialog.dart +18. text_object.dart +19. transform_helper.dart +20. undo_provider.dart +21. user_action_drawing.dartcanvas_gesture_handler.dart + + + 11. shell_top_bar.dart + + 171. app_icon.dart 2. app_icon_enum.dart 3. app_localizations.dart 4. app_provider.dart @@ -3703,12 +3790,12 @@ 14. shortcut_tooltip.dart 15. shortcuts_constants.dart 16. toolbar_icon_button.dart -17. user_action_drawing.dartshell_selection_sub_toolbar.dart +17. user_action_drawing.dartshell_selection_sub_toolbar.dart - - 11. shell_top_bar.dart - - 161. about.dart + <path d="M 1128.0,395.0 L 1116.0,388.0 Q 1113.0,388.0 1113.0,391.0 L 1113.0,399.0 Q 1113.0,402.0 1116.0,402.0 Z" fill="#3b82f6"/> + <text x="1117.68" y="396.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. shell_top_bar.dart + + 161. about.dart 2. app_icon.dart 3. app_icon_enum.dart 4. app_localizations.dart @@ -3723,12 +3810,12 @@ 13. recent_files_dialog.dart 14. save.dart 15. share_panel.dart -16. shell_provider.dartmenu.dart +16. shell_provider.dartmenu.dart - - 11. main_view.dart - - 131. app_icon.dart + <path d="M 1128.0,465.0 L 1116.0,458.0 Q 1113.0,458.0 1113.0,461.0 L 1113.0,469.0 Q 1113.0,472.0 1116.0,472.0 Z" fill="#3b82f6"/> + <text x="1117.68" y="466.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. main_view.dart + + 131. app_icon.dart 2. app_icon_enum.dart 3. app_localizations.dart 4. constants.dart @@ -3740,81 +3827,82 @@ 10. selection_effect.dart 11. selector_model.dart 12. shell_provider.dart -13. transform_helper.dartselector_widget.dart +13. transform_helper.dartselector_widget.dart - - 11. main_view.dart - - 81. app_localizations.dart + <path d="M 1128.0,535.0 L 1116.0,528.0 Q 1113.0,528.0 1113.0,531.0 L 1113.0,539.0 Q 1113.0,542.0 1116.0,542.0 Z" fill="#3b82f6"/> + <text x="1117.68" y="536.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. main_view.dart + + 81. app_localizations.dart 2. app_provider.dart 3. constants.dart 4. material_free.dart 5. text_editor_dialog.dart 6. text_object.dart 7. text_tool_state.dart -8. user_action_drawing.darttext_editor.dart +8. user_action_drawing.darttext_editor.dart - - 11. main_view.dart - - 71. app_icon_enum.dart + <path d="M 1128.0,605.0 L 1116.0,598.0 Q 1113.0,598.0 1113.0,601.0 L 1113.0,609.0 Q 1113.0,612.0 1116.0,612.0 Z" fill="#3b82f6"/> + <text x="1117.68" y="606.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. main_view.dart + + 71. app_icon_enum.dart 2. constants.dart 3. draw_rect.dart 4. image_helper.dart 5. layers_provider.dart 6. material_free.dart -7. overlay_control_widgets.dartmagnifying_eye_dropper.dart +7. overlay_control_widgets.dartmagnifying_eye_dropper.dart - - 11. main_view.dart - - 71. app_icon_enum.dart + <path d="M 1128.0,675.0 L 1116.0,668.0 Q 1113.0,668.0 1113.0,671.0 L 1113.0,679.0 Q 1113.0,682.0 1116.0,682.0 Z" fill="#3b82f6"/> + <text x="1117.68" y="676.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. main_view.dart + + 71. app_icon_enum.dart 2. app_localizations.dart 3. constants.dart 4. overlay_control_widgets.dart 5. shell_provider.dart 6. transform_helper.dart -7. transform_model.darttransform_widget.dart +7. transform_model.darttransform_widget.dart - - 11. side_panel.dart - - 61. app_localizations.dart + <path d="M 1128.0,745.0 L 1116.0,738.0 Q 1113.0,738.0 1113.0,741.0 L 1113.0,749.0 Q 1113.0,752.0 1116.0,752.0 Z" fill="#3b82f6"/> + <text x="1117.68" y="746.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. side_panel.dart + + 61. app_localizations.dart 2. constants.dart 3. layer_selector.dart 4. layers_provider.dart 5. shell_provider.dart -6. side_panel_header.darttop_menu_and_layers_panel.dart +6. side_panel_header.darttop_menu_and_layers_panel.dart - - 11. main_view.dart - - 51. app_localizations.dart + <path d="M 1128.0,815.0 L 1116.0,808.0 Q 1113.0,808.0 1113.0,811.0 L 1113.0,819.0 Q 1113.0,822.0 1116.0,822.0 Z" fill="#3b82f6"/> + <text x="1117.68" y="816.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. main_view.dart + + 51. app_localizations.dart 2. color_picker_dialog.dart 3. constants.dart 4. fill_model.dart -5. marching_ants_path.dartfill_widget.dart +5. marching_ants_path.dartfill_widget.dart - - 11. shortcuts.dart - - 41. app_localizations.dart + <path d="M 1128.0,885.0 L 1116.0,878.0 Q 1113.0,878.0 1113.0,881.0 L 1113.0,889.0 Q 1113.0,892.0 1116.0,892.0 Z" fill="#3b82f6"/> + <text x="1117.68" y="886.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. shortcuts.dart + + 41. app_localizations.dart 2. constants.dart 3. material_free.dart -4. shortcuts_constants.dartshortcuts_help.dart +4. shortcuts_constants.dartshortcuts_help.dart - - 11. main_view.dart - - 21. canvas_panel_painter.dart -2. layers_provider.dartcanvas_panel.dart + + 11. main_view.dart + + 21. canvas_panel_painter.dart +2. layers_provider.dartcanvas_panel.dart - 51. magnifying_eye_dropper.dart -2. selector_widget.dart -3. shell_selection_sub_toolbar.dart -4. shell_top_bar.dart -5. transform_widget.dart + 61. magnifying_eye_dropper.dart +2. main_view.dart +3. selector_widget.dart +4. shell_selection_sub_toolbar.dart +5. shell_top_bar.dart +6. transform_widget.dart 51. app_icon.dart 2. app_icon_enum.dart @@ -3836,23 +3924,15 @@ 7. user_action_drawing.dartapp_provider_tools.dart - 31. side_panel.dart -2. tools_panel.dart -3. top_menu_and_layers_panel.dart - - 21. constants.dart -2. material_free.dartside_panel_header.dart - - - 31. canvas_gesture_handler.dart + <text x="1771.68" y="256.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">3</text><title>1. canvas_gesture_handler.dart 2. draft_recovery_controller.dart -3. main.dartdraft_flusher.dart +3. main.dartdraft_flusher.dart - - 21. menu.dart + <path d="M 1782.0,325.0 L 1770.0,318.0 Q 1767.0,318.0 1767.0,321.0 L 1767.0,329.0 Q 1767.0,332.0 1770.0,332.0 Z" fill="#3b82f6"/> + <text x="1771.68" y="326.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">2</text><title>1. menu.dart 2. shell_top_bar.dart - - 161. app_icon.dart + <path d="M 1998.0,325.0 L 1982.0,317.4 Q 1979.0,317.4 1979.0,320.4 L 1979.0,329.6 Q 1979.0,332.6 1982.0,332.6 Z" fill="#10b981"/> + <text x="1984.72" y="326.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold" textLength="10.120000000000001" lengthAdjust="spacingAndGlyphs">16</text><title>1. app_icon.dart 2. app_icon_enum.dart 3. app_localizations.dart 4. app_preferences.dart @@ -3867,13 +3947,13 @@ 13. log_helper.dart 14. macos_bookmark_service.dart 15. material_free.dart -16. shell_provider.dartrecent_files_dialog.dart +16. shell_provider.dartrecent_files_dialog.dart - - 21. menu.dart + <path d="M 1782.0,395.0 L 1770.0,388.0 Q 1767.0,388.0 1767.0,391.0 L 1767.0,399.0 Q 1767.0,402.0 1770.0,402.0 Z" fill="#3b82f6"/> + <text x="1771.68" y="396.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">2</text><title>1. menu.dart 2. shell_top_bar.dart - - 131. app_icon.dart + <path d="M 1998.0,395.0 L 1982.0,387.4 Q 1979.0,387.4 1979.0,390.4 L 1979.0,399.6 Q 1979.0,402.6 1982.0,402.6 Z" fill="#10b981"/> + <text x="1984.72" y="396.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold" textLength="10.120000000000001" lengthAdjust="spacingAndGlyphs">13</text><title>1. app_icon.dart 2. app_icon_enum.dart 3. app_localizations.dart 4. app_preferences.dart @@ -3885,13 +3965,13 @@ 10. file_heic_web.dart 11. image_helper.dart 12. material_free.dart -13. shell_provider.dartshare_panel.dart +13. shell_provider.dartshare_panel.dart - - 21. main.dart + <path d="M 1782.0,465.0 L 1770.0,458.0 Q 1767.0,458.0 1767.0,461.0 L 1767.0,469.0 Q 1767.0,472.0 1770.0,472.0 Z" fill="#3b82f6"/> + <text x="1771.68" y="466.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">2</text><title>1. main.dart 2. menu.dart - - 121. app_preferences.dart + <path d="M 1998.0,465.0 L 1982.0,457.4 Q 1979.0,457.4 1979.0,460.4 L 1979.0,469.6 Q 1979.0,472.6 1982.0,472.6 Z" fill="#10b981"/> + <text x="1984.72" y="466.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold" textLength="10.120000000000001" lengthAdjust="spacingAndGlyphs">12</text><title>1. app_preferences.dart 2. constants.dart 3. export_download_non_web.dart 4. export_download_web.dart @@ -3902,57 +3982,57 @@ 9. log_helper.dart 10. macos_bookmark_service.dart 11. save_backup.dart -12. shell_provider.dartsave.dart +12. shell_provider.dartsave.dart - - 21. canvas_gesture_handler.dart + <path d="M 1782.0,535.0 L 1770.0,528.0 Q 1767.0,528.0 1767.0,531.0 L 1767.0,539.0 Q 1767.0,542.0 1770.0,542.0 Z" fill="#3b82f6"/> + <text x="1771.68" y="536.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">2</text><title>1. canvas_gesture_handler.dart 2. text_editor.dart - - 81. app_icon_enum.dart + <path d="M 1996.0,535.0 L 1984.0,528.0 Q 1981.0,528.0 1981.0,531.0 L 1981.0,539.0 Q 1981.0,542.0 1984.0,542.0 Z" fill="#10b981"/> + <text x="1985.68" y="536.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">8</text><title>1. app_icon_enum.dart 2. app_localizations.dart 3. color_picker_dialog.dart 4. constants.dart 5. material_free.dart 6. text_formatting_controls.dart 7. text_object.dart -8. text_tool_state.darttext_editor_dialog.dart +8. text_tool_state.darttext_editor_dialog.dart - - 21. main_view.dart + <path d="M 1782.0,605.0 L 1770.0,598.0 Q 1767.0,598.0 1767.0,601.0 L 1767.0,609.0 Q 1767.0,612.0 1770.0,612.0 Z" fill="#3b82f6"/> + <text x="1771.68" y="606.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">2</text><title>1. main_view.dart 2. shell_selection_sub_toolbar.dart - - 71. app_localizations.dart + <path d="M 1996.0,605.0 L 1984.0,598.0 Q 1981.0,598.0 1981.0,601.0 L 1981.0,609.0 Q 1981.0,612.0 1984.0,612.0 Z" fill="#10b981"/> + <text x="1985.68" y="606.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">7</text><title>1. app_localizations.dart 2. app_provider.dart 3. app_provider_selection.dart 4. constants.dart 5. effect_intensity_controls.dart 6. material_free.dart -7. selection_effect.darteffect_preview_bottom_sheet.dart +7. selection_effect.darteffect_preview_bottom_sheet.dart - - 21. shell_selection_sub_toolbar.dart + <path d="M 1782.0,675.0 L 1770.0,668.0 Q 1767.0,668.0 1767.0,671.0 L 1767.0,679.0 Q 1767.0,682.0 1770.0,682.0 Z" fill="#3b82f6"/> + <text x="1771.68" y="676.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">2</text><title>1. shell_selection_sub_toolbar.dart 2. shell_top_bar.dart - - 31. app_icon_enum.dart + <path d="M 1996.0,675.0 L 1984.0,668.0 Q 1981.0,668.0 1981.0,671.0 L 1981.0,679.0 Q 1981.0,682.0 1984.0,682.0 Z" fill="#10b981"/> + <text x="1985.68" y="676.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">3</text><title>1. app_icon_enum.dart 2. constants.dart -3. material_free.darttoolbar_icon_button.dart +3. material_free.darttoolbar_icon_button.dart - - 21. fill_widget.dart + <path d="M 1782.0,745.0 L 1770.0,738.0 Q 1767.0,738.0 1767.0,741.0 L 1767.0,749.0 Q 1767.0,752.0 1770.0,752.0 Z" fill="#3b82f6"/> + <text x="1771.68" y="746.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">2</text><title>1. fill_widget.dart 2. selector_widget.dart - - 11. constants.dartmarching_ants_path.dart + + 11. constants.dartmarching_ants_path.dart - - 21. shell_selection_sub_toolbar.dart + <path d="M 1782.0,815.0 L 1770.0,808.0 Q 1767.0,808.0 1767.0,811.0 L 1767.0,819.0 Q 1767.0,822.0 1770.0,822.0 Z" fill="#3b82f6"/> + <text x="1771.68" y="816.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">2</text><title>1. shell_selection_sub_toolbar.dart 2. shell_top_bar.dart - - 11. shortcuts_constants.dartshortcut_tooltip.dart + + 11. shortcuts_constants.dartshortcut_tooltip.dart - - 11. top_menu_and_layers_panel.dart - - 141. app_icon.dart + <path d="M 1782.0,885.0 L 1770.0,878.0 Q 1767.0,878.0 1767.0,881.0 L 1767.0,889.0 Q 1767.0,892.0 1770.0,892.0 Z" fill="#3b82f6"/> + <text x="1771.68" y="886.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. top_menu_and_layers_panel.dart + + 141. app_icon.dart 2. app_icon_enum.dart 3. app_localizations.dart 4. app_provider.dart @@ -3965,12 +4045,12 @@ 11. layer_thumbnail.dart 12. material_free.dart 13. truncated_text.dart -14. undo_provider.dartlayer_selector.dart +14. undo_provider.dartlayer_selector.dart - - 11. tools_panel.dart - - 131. app_icon.dart + <path d="M 1782.0,955.0 L 1770.0,948.0 Q 1767.0,948.0 1767.0,951.0 L 1767.0,959.0 Q 1767.0,962.0 1770.0,962.0 Z" fill="#3b82f6"/> + <text x="1771.68" y="956.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. tools_panel.dart + + 131. app_icon.dart 2. app_icon_enum.dart 3. app_localizations.dart 4. app_provider.dart @@ -3982,7 +4062,22 @@ 10. material_free.dart 11. text_formatting_controls.dart 12. text_tool_state.dart -13. tool_attribute_widget.darttext_attributes_widget.dart +13. tool_attribute_widget.darttext_attributes_widget.dart + + + 11. tools_panel.dart + + 111. app_buttons.dart +2. app_localizations.dart +3. app_provider.dart +4. app_provider_selection.dart +5. app_slider.dart +6. constants.dart +7. effect_labels.dart +8. selection_effect.dart +9. side_panel_header.dart +10. tool_descriptor.dart +11. user_action_drawing.darttool_family_rail.dart 11. tools_panel.dart @@ -4074,15 +4169,15 @@ 11. menu.dartmenu_model.dart - - 61. fill_widget.dart + <path d="M 2668.0,115.0 L 2656.0,108.0 Q 2653.0,108.0 2653.0,111.0 L 2653.0,119.0 Q 2653.0,122.0 2656.0,122.0 Z" fill="#3b82f6"/> + <text x="2657.68" y="116.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">6</text><title>1. fill_widget.dart 2. gradient_color_list_editor.dart 3. layer_selector.dart 4. text_attributes_widget.dart 5. text_editor_dialog.dart 6. tools_panel.dart - - 131. app_icon.dart + <path d="M 2884.0,115.0 L 2868.0,107.4 Q 2865.0,107.4 2865.0,110.4 L 2865.0,119.6 Q 2865.0,122.6 2868.0,122.6 Z" fill="#10b981"/> + <text x="2870.72" y="116.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold" textLength="10.120000000000001" lengthAdjust="spacingAndGlyphs">13</text><title>1. app_icon.dart 2. app_icon_enum.dart 3. app_localizations.dart 4. color_helper.dart @@ -4094,16 +4189,16 @@ 10. log_helper.dart 11. material_free.dart 12. top_colors.dart -13. transparent_background.dartcolor_picker_dialog.dart +13. transparent_background.dartcolor_picker_dialog.dart - - 51. main.dart + <path d="M 2668.0,185.0 L 2656.0,178.0 Q 2653.0,178.0 2653.0,181.0 L 2653.0,189.0 Q 2653.0,192.0 2656.0,192.0 Z" fill="#3b82f6"/> + <text x="2657.68" y="186.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">5</text><title>1. main.dart 2. main_screen.dart 3. menu.dart 4. recent_files_dialog.dart 5. shell_top_bar.dart - - 151. app_localizations.dart + <path d="M 2884.0,185.0 L 2868.0,177.4 Q 2865.0,177.4 2865.0,180.4 L 2865.0,189.6 Q 2865.0,192.6 2868.0,192.6 Z" fill="#10b981"/> + <text x="2870.72" y="186.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold" textLength="10.120000000000001" lengthAdjust="spacingAndGlyphs">15</text><title>1. app_localizations.dart 2. app_preferences.dart 3. app_provider.dart 4. app_provider_canvas.dart @@ -4117,121 +4212,138 @@ 12. image_helper.dart 13. log_helper.dart 14. material_free.dart -15. shell_provider.dartimport_files.dart +15. shell_provider.dartimport_files.dart - - 41. shell_selection_sub_toolbar.dart + <path d="M 2668.0,255.0 L 2656.0,248.0 Q 2653.0,248.0 2653.0,251.0 L 2653.0,259.0 Q 2653.0,262.0 2656.0,262.0 Z" fill="#3b82f6"/> + <text x="2657.68" y="256.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">4</text><title>1. shell_selection_sub_toolbar.dart 2. shell_top_bar.dart 3. shortcut_tooltip.dart -4. shortcuts_help.dartshortcuts_constants.dart +4. shortcuts_help.dartshortcuts_constants.dart - - 21. effect_preview_bottom_sheet.dart -2. tools_panel.dart - - 101. app_button_row.dart -2. app_icon.dart -3. app_localizations.dart -4. app_provider.dart -5. app_provider_selection.dart -6. app_slider.dart -7. app_snackbar.dart -8. constants.dart -9. effect_labels.dart -10. selection_effect.darteffect_intensity_controls.dart + + 31. side_panel.dart +2. tool_family_rail.dart +3. top_menu_and_layers_panel.dart + + 21. constants.dart +2. material_free.dartside_panel_header.dart - - 21. save.dart + <path d="M 2668.0,395.0 L 2656.0,388.0 Q 2653.0,388.0 2653.0,391.0 L 2653.0,399.0 Q 2653.0,402.0 2656.0,402.0 Z" fill="#3b82f6"/> + <text x="2657.68" y="396.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">2</text><title>1. save.dart 2. share_panel.dart - - 81. app_preferences.dart + <path d="M 2882.0,395.0 L 2870.0,388.0 Q 2867.0,388.0 2867.0,391.0 L 2867.0,399.0 Q 2867.0,402.0 2870.0,402.0 Z" fill="#10b981"/> + <text x="2871.68" y="396.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">8</text><title>1. app_preferences.dart 2. constants.dart 3. export_file_name.dart 4. export_prepare.dart 5. file_tiff.dart 6. layers_provider.dart 7. macos_bookmark_service.dart -8. save_backup.dartexport_download_non_web.dart +8. save_backup.dartexport_download_non_web.dart - - 21. save.dart + <path d="M 2668.0,465.0 L 2656.0,458.0 Q 2653.0,458.0 2653.0,461.0 L 2653.0,469.0 Q 2653.0,472.0 2656.0,472.0 Z" fill="#3b82f6"/> + <text x="2657.68" y="466.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">2</text><title>1. save.dart 2. share_panel.dart - - 51. app_preferences.dart + <path d="M 2882.0,465.0 L 2870.0,458.0 Q 2867.0,458.0 2867.0,461.0 L 2867.0,469.0 Q 2867.0,472.0 2870.0,472.0 Z" fill="#10b981"/> + <text x="2871.68" y="466.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">5</text><title>1. app_preferences.dart 2. export_file_name.dart 3. export_prepare.dart 4. file_tiff.dart -5. layers_provider.dartexport_download_web.dart +5. layers_provider.dartexport_download_web.dart - - 21. text_attributes_widget.dart + <path d="M 2668.0,535.0 L 2656.0,528.0 Q 2653.0,528.0 2653.0,531.0 L 2653.0,539.0 Q 2653.0,542.0 2656.0,542.0 Z" fill="#3b82f6"/> + <text x="2657.68" y="536.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">2</text><title>1. text_attributes_widget.dart 2. tools_panel.dart - - 41. app_localizations.dart + <path d="M 2882.0,535.0 L 2870.0,528.0 Q 2867.0,528.0 2867.0,531.0 L 2867.0,539.0 Q 2867.0,542.0 2870.0,542.0 Z" fill="#10b981"/> + <text x="2871.68" y="536.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">4</text><title>1. app_localizations.dart 2. base_picker.dart 3. constants.dart -4. material_free.dartbrush_size_picker.dart +4. material_free.dartbrush_size_picker.dart - - 21. text_attributes_widget.dart + <path d="M 2668.0,605.0 L 2656.0,598.0 Q 2653.0,598.0 2653.0,601.0 L 2653.0,609.0 Q 2653.0,612.0 2656.0,612.0 Z" fill="#3b82f6"/> + <text x="2657.68" y="606.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">2</text><title>1. text_attributes_widget.dart 2. text_editor_dialog.dart - - 21. text_alignment_dropdown.dart -2. text_style_toggle_buttons.darttext_formatting_controls.dart + + 21. text_alignment_dropdown.dart +2. text_style_toggle_buttons.darttext_formatting_controls.dart - - 21. text_attributes_widget.dart + <path d="M 2668.0,675.0 L 2656.0,668.0 Q 2653.0,668.0 2653.0,671.0 L 2653.0,679.0 Q 2653.0,682.0 2656.0,682.0 Z" fill="#3b82f6"/> + <text x="2657.68" y="676.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">2</text><title>1. text_attributes_widget.dart 2. tools_panel.dart - - 21. constants.dart -2. material_free.darttool_attribute_widget.dart - - - 11. layer_selector.dart - - 41. constants.dart + <path d="M 2882.0,675.0 L 2870.0,668.0 Q 2867.0,668.0 2867.0,671.0 L 2867.0,679.0 Q 2867.0,682.0 2870.0,682.0 Z" fill="#10b981"/> + <text x="2871.68" y="676.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">2</text><title>1. constants.dart +2. material_free.darttool_attribute_widget.dart + + + 11. effect_preview_bottom_sheet.dart + + 101. app_button_row.dart +2. app_icon.dart +3. app_localizations.dart +4. app_provider.dart +5. app_provider_selection.dart +6. app_slider.dart +7. app_snackbar.dart +8. constants.dart +9. effect_labels.dart +10. selection_effect.darteffect_intensity_controls.dart + + + 11. tool_family_rail.dart + + 61. app_icon_enum.dart +2. app_localizations.dart +3. effect_labels.dart +4. selection_effect.dart +5. tool_family.dart +6. user_action_drawing.darttool_descriptor.dart + + + 11. layer_selector.dart + + 41. constants.dart 2. image_painter.dart 3. layer_provider.dart -4. transparent_background.dartlayer_thumbnail.dart +4. transparent_background.dartlayer_thumbnail.dart - - 11. canvas_settings.dart - - 41. app_icon.dart + <path d="M 2668.0,955.0 L 2656.0,948.0 Q 2653.0,948.0 2653.0,951.0 L 2653.0,959.0 Q 2653.0,962.0 2656.0,962.0 Z" fill="#3b82f6"/> + <text x="2657.68" y="956.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. canvas_settings.dart + + 41. app_icon.dart 2. app_icon_enum.dart 3. canvas_resize.dart -4. constants.dartnine_grid_selector.dart +4. constants.dartnine_grid_selector.dart - - 11. about.dart - - 31. constants.dart + <path d="M 2668.0,1025.0 L 2656.0,1018.0 Q 2653.0,1018.0 2653.0,1021.0 L 2653.0,1029.0 Q 2653.0,1032.0 2656.0,1032.0 Z" fill="#3b82f6"/> + <text x="2657.68" y="1026.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. about.dart + + 31. constants.dart 2. dependency_versions.dart -3. material_free.dartattribution_dialog.dart - - - 11. layer_selector.dart - - 21. app_localizations.dart -2. material_free.dartblend_mode.dart - - - 11. layer_selector.dart - - 21. constants.dart -2. material_free.dartcontainer_slider.dart - - - 11. layer_selector.dart - - 21. constants.dart -2. material_free.darttruncated_text.dart - - - 11. about.dartversion.dart - - - 171. canvas_gesture_handler.dart +3. material_free.dartattribution_dialog.dart + + + 11. layer_selector.dart + + 21. app_localizations.dart +2. material_free.dartblend_mode.dart + + + 11. layer_selector.dart + + 21. constants.dart +2. material_free.dartcontainer_slider.dart + + + 11. layer_selector.dart + + 21. constants.dart +2. material_free.darttruncated_text.dart + + + 11. about.dartversion.dart + + + 171. canvas_gesture_handler.dart 2. canvas_settings.dart 3. draft_recovery_controller.dart 4. import_files.dart @@ -4248,12 +4360,12 @@ 15. shortcuts.dart 16. top_menu_and_layers_panel.dart 17. transform_widget.dart - - 31. canvas_resize.dart -2. constants.dartshell_provider.dart + + 31. canvas_resize.dart +2. constants.dartshell_provider.dart - - 101. app_provider_tools.dart + <path d="M 3650.0,185.0 L 3634.0,177.4 Q 3631.0,177.4 3631.0,180.4 L 3631.0,189.6 Q 3631.0,192.6 3634.0,192.6 Z" fill="#3b82f6"/> + <text x="3636.72" y="186.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold" textLength="10.120000000000001" lengthAdjust="spacingAndGlyphs">10</text><title>1. app_provider_tools.dart 2. canvas_gesture_handler.dart 3. draft_recovery_controller.dart 4. import_files.dart @@ -4263,136 +4375,143 @@ 8. shell_top_bar.dart 9. shortcuts.dart 10. tools_panel.dart - - 51. app_provider.dart + <path d="M 3862.0,185.0 L 3850.0,178.0 Q 3847.0,178.0 3847.0,181.0 L 3847.0,189.0 Q 3847.0,192.0 3850.0,192.0 Z" fill="#10b981"/> + <text x="3851.68" y="186.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">5</text><title>1. app_provider.dart 2. app_provider_selection.dart 3. constants.dart 4. fill_model.dart -5. image_helper.dartapp_provider_canvas.dart +5. image_helper.dartapp_provider_canvas.dart - - 51. brush_intensity_picker.dart + <path d="M 3648.0,255.0 L 3636.0,248.0 Q 3633.0,248.0 3633.0,251.0 L 3633.0,259.0 Q 3633.0,262.0 3636.0,262.0 Z" fill="#3b82f6"/> + <text x="3637.68" y="256.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">5</text><title>1. brush_intensity_picker.dart 2. brush_size_picker.dart 3. brush_style_picker.dart 4. halftone_size_picker.dart 5. tolerance_picker.dart - - 21. constants.dart -2. material_free.dartbase_picker.dart + + 21. constants.dart +2. material_free.dartbase_picker.dart - - 41. export_download_non_web.dart + <path d="M 3648.0,325.0 L 3636.0,318.0 Q 3633.0,318.0 3633.0,321.0 L 3633.0,329.0 Q 3633.0,332.0 3636.0,332.0 Z" fill="#3b82f6"/> + <text x="3637.68" y="326.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">5</text><title>1. effect_intensity_controls.dart +2. selector_widget.dart +3. shell_selection_sub_toolbar.dart +4. tool_descriptor.dart +5. tool_family_rail.dart + + 21. app_localizations.dart +2. selection_effect.darteffect_labels.dart + + + 41. export_download_non_web.dart 2. export_download_web.dart 3. import_files.dart 4. save.dart - - 61. constants.dart + <path d="M 3862.0,395.0 L 3850.0,388.0 Q 3847.0,388.0 3847.0,391.0 L 3847.0,399.0 Q 3847.0,402.0 3850.0,402.0 Z" fill="#10b981"/> + <text x="3851.68" y="396.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">6</text><title>1. constants.dart 2. file_operation_exception.dart 3. image_helper.dart 4. layers_provider.dart 5. log_helper.dart -6. tiff_constants.dartfile_tiff.dart - - - 41. effect_intensity_controls.dart -2. selector_widget.dart -3. shell_selection_sub_toolbar.dart -4. tools_panel.dart - - 21. app_localizations.dart -2. selection_effect.darteffect_labels.dart +6. tiff_constants.dartfile_tiff.dart - - 31. color_picker_dialog.dart + <path d="M 3648.0,465.0 L 3636.0,458.0 Q 3633.0,458.0 3633.0,461.0 L 3633.0,469.0 Q 3633.0,472.0 3636.0,472.0 Z" fill="#3b82f6"/> + <text x="3637.68" y="466.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">3</text><title>1. color_picker_dialog.dart 2. text_attributes_widget.dart 3. tools_panel.dart - - 41. constants.dart + <path d="M 3862.0,465.0 L 3850.0,458.0 Q 3847.0,458.0 3847.0,461.0 L 3847.0,469.0 Q 3847.0,472.0 3850.0,472.0 Z" fill="#10b981"/> + <text x="3851.68" y="466.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">4</text><title>1. constants.dart 2. list_helper.dart 3. material_free.dart -4. transparent_background.dartcolor_selector.dart +4. transparent_background.dartcolor_selector.dart - - 31. import_files.dart + <path d="M 3648.0,535.0 L 3636.0,528.0 Q 3633.0,528.0 3633.0,531.0 L 3633.0,539.0 Q 3633.0,542.0 3636.0,542.0 Z" fill="#3b82f6"/> + <text x="3637.68" y="536.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">3</text><title>1. import_files.dart 2. recent_files_dialog.dart 3. shortcuts.dart - - 21. app_localizations.dart -2. material_free.dartconfirm_discard_dialog.dart + + 21. app_localizations.dart +2. material_free.dartconfirm_discard_dialog.dart - - 31. export_download_non_web.dart + <path d="M 3648.0,605.0 L 3636.0,598.0 Q 3633.0,598.0 3633.0,601.0 L 3633.0,609.0 Q 3633.0,612.0 3636.0,612.0 Z" fill="#3b82f6"/> + <text x="3637.68" y="606.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">3</text><title>1. export_download_non_web.dart 2. export_download_web.dart 3. save.dart - - 11. constants.dartexport_file_name.dart + + 11. constants.dartexport_file_name.dart - - 21. color_picker_dialog.dart + <path d="M 3648.0,675.0 L 3636.0,668.0 Q 3633.0,668.0 3633.0,671.0 L 3633.0,679.0 Q 3633.0,682.0 3636.0,682.0 Z" fill="#3b82f6"/> + <text x="3637.68" y="676.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">2</text><title>1. color_picker_dialog.dart 2. tools_panel.dart - - 81. app_icon_enum.dart + <path d="M 3862.0,675.0 L 3850.0,668.0 Q 3847.0,668.0 3847.0,671.0 L 3847.0,679.0 Q 3847.0,682.0 3850.0,682.0 Z" fill="#10b981"/> + <text x="3851.68" y="676.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">8</text><title>1. app_icon_enum.dart 2. app_localizations.dart 3. color_helper.dart 4. color_preview.dart 5. constants.dart 6. image_helper.dart 7. material_free.dart -8. transparent_background.darttop_colors.dart +8. transparent_background.darttop_colors.dart - - 21. export_download_non_web.dart + <path d="M 3648.0,745.0 L 3636.0,738.0 Q 3633.0,738.0 3633.0,741.0 L 3633.0,749.0 Q 3633.0,752.0 3636.0,752.0 Z" fill="#3b82f6"/> + <text x="3637.68" y="746.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">2</text><title>1. export_download_non_web.dart 2. export_download_web.dart - - 61. file_heic.dart + <path d="M 3862.0,745.0 L 3850.0,738.0 Q 3847.0,738.0 3847.0,741.0 L 3847.0,749.0 Q 3847.0,752.0 3850.0,752.0 Z" fill="#10b981"/> + <text x="3851.68" y="746.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">6</text><title>1. file_heic.dart 2. file_heic_web.dart 3. file_jpeg.dart 4. file_ora.dart 5. file_webp.dart -6. layers_provider.dartexport_prepare.dart +6. layers_provider.dartexport_prepare.dart - - 21. export_download_non_web.dart + <path d="M 3648.0,815.0 L 3636.0,808.0 Q 3633.0,808.0 3633.0,811.0 L 3633.0,819.0 Q 3633.0,822.0 3636.0,822.0 Z" fill="#3b82f6"/> + <text x="3637.68" y="816.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">2</text><title>1. export_download_non_web.dart 2. save.dart - - 41. app_preferences.dart + <path d="M 3862.0,815.0 L 3850.0,808.0 Q 3847.0,808.0 3847.0,811.0 L 3847.0,819.0 Q 3847.0,822.0 3850.0,822.0 Z" fill="#10b981"/> + <text x="3851.68" y="816.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">4</text><title>1. app_preferences.dart 2. constants.dart 3. log_helper.dart -4. macos_bookmark_service.dartsave_backup.dart +4. macos_bookmark_service.dartsave_backup.dart - - 11. text_formatting_controls.dart - - 41. app_dropdown.dart + <path d="M 3648.0,885.0 L 3636.0,878.0 Q 3633.0,878.0 3633.0,881.0 L 3633.0,889.0 Q 3633.0,892.0 3636.0,892.0 Z" fill="#3b82f6"/> + <text x="3637.68" y="886.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. text_formatting_controls.dart + + 41. app_dropdown.dart 2. app_localizations.dart 3. app_text.dart -4. constants.darttext_alignment_dropdown.dart +4. constants.darttext_alignment_dropdown.dart - - 11. text_formatting_controls.dart - - 41. app_buttons.dart + <path d="M 3648.0,955.0 L 3636.0,948.0 Q 3633.0,948.0 3633.0,951.0 L 3633.0,959.0 Q 3633.0,962.0 3636.0,962.0 Z" fill="#3b82f6"/> + <text x="3637.68" y="956.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. text_formatting_controls.dart + + 41. app_buttons.dart 2. app_icon_enum.dart 3. constants.dart -4. text_tool_state.darttext_style_toggle_buttons.dart +4. text_tool_state.darttext_style_toggle_buttons.dart - - 11. color_picker_dialog.dart - - 31. constants.dart + <path d="M 3648.0,1025.0 L 3636.0,1018.0 Q 3633.0,1018.0 3633.0,1021.0 L 3633.0,1029.0 Q 3633.0,1032.0 3636.0,1032.0 Z" fill="#3b82f6"/> + <text x="3637.68" y="1026.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. color_picker_dialog.dart + + 31. constants.dart 2. material_free.dart -3. transparent_background.dartcolor_wheel_selector.dart +3. transparent_background.dartcolor_wheel_selector.dart - - 11. layer_thumbnail.dart - - 11. constants.dartimage_painter.dart + + 11. tool_descriptor.dart + + 21. app_localizations.dart +2. user_action_drawing.darttool_family.dart - - 11. attribution_dialog.dartdependency_versions.dart + + 11. layer_thumbnail.dart + + 11. constants.dartimage_painter.dart - - 391. about.dart + <path d="M 3648.0,1235.0 L 3636.0,1228.0 Q 3633.0,1228.0 3633.0,1231.0 L 3633.0,1239.0 Q 3633.0,1242.0 3636.0,1242.0 Z" fill="#3b82f6"/> + <text x="3637.68" y="1236.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. attribution_dialog.dartdependency_versions.dart + + + 421. about.dart 2. blend_mode.dart 3. brush_intensity_picker.dart 4. brush_size_picker.dart @@ -4427,13 +4546,16 @@ 33. text_editor.dart 34. text_editor_dialog.dart 35. tolerance_picker.dart -36. tools_panel.dart -37. top_colors.dart -38. top_menu_and_layers_panel.dart -39. transform_widget.dartapp_localizations.dart - - - 131. app_provider_canvas.dart +36. tool_descriptor.dart +37. tool_family.dart +38. tool_family_rail.dart +39. tools_panel.dart +40. top_colors.dart +41. top_menu_and_layers_panel.dart +42. transform_widget.dartapp_localizations.dart + + + 131. app_provider_canvas.dart 2. app_provider_tools.dart 3. canvas_gesture_handler.dart 4. effect_intensity_controls.dart @@ -4445,9 +4567,9 @@ 10. shell_top_bar.dart 11. shortcuts.dart 12. side_panel.dart -13. tools_panel.dart - - 131. app_provider.dart +13. tool_family_rail.dart + + 131. app_provider.dart 2. app_provider_selection_commit.dart 3. constants.dart 4. fill_service.dart @@ -4459,70 +4581,70 @@ 10. transform_helper.dart 11. transform_model.dart 12. user_action_drawing.dart -13. wand_selection_manager.dartapp_provider_selection.dart +13. wand_selection_manager.dartapp_provider_selection.dart - - 61. color_picker_dialog.dart + <path d="M 4618.0,255.0 L 4606.0,248.0 Q 4603.0,248.0 4603.0,251.0 L 4603.0,259.0 Q 4603.0,262.0 4606.0,262.0 Z" fill="#3b82f6"/> + <text x="4607.68" y="256.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">6</text><title>1. color_picker_dialog.dart 2. gradient_color_list_editor.dart 3. layer_selector.dart 4. text_attributes_widget.dart 5. tools_panel.dart 6. top_colors.dart - - 61. app_icon.dart + <path d="M 4832.0,255.0 L 4820.0,248.0 Q 4817.0,248.0 4817.0,251.0 L 4817.0,259.0 Q 4817.0,262.0 4820.0,262.0 Z" fill="#10b981"/> + <text x="4821.68" y="256.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">6</text><title>1. app_icon.dart 2. app_icon_enum.dart 3. color_helper.dart 4. constants.dart 5. material_free.dart -6. transparent_background.dartcolor_preview.dart +6. transparent_background.dartcolor_preview.dart - - 41. draft_recovery_controller.dart + <path d="M 4618.0,325.0 L 4606.0,318.0 Q 4603.0,318.0 4603.0,321.0 L 4603.0,329.0 Q 4603.0,332.0 4606.0,332.0 Z" fill="#3b82f6"/> + <text x="4607.68" y="326.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">4</text><title>1. draft_recovery_controller.dart 2. export_prepare.dart 3. import_files.dart 4. recent_files_dialog.dart - - 71. constants.dart + <path d="M 4832.0,325.0 L 4820.0,318.0 Q 4817.0,318.0 4817.0,321.0 L 4817.0,329.0 Q 4817.0,332.0 4820.0,332.0 Z" fill="#10b981"/> + <text x="4821.68" y="326.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">7</text><title>1. constants.dart 2. file_operation_exception.dart 3. image_helper.dart 4. layer_provider_storage_export.dart 5. layers_provider.dart 6. list_helper.dart -7. log_helper.dartfile_ora.dart +7. log_helper.dartfile_ora.dart - - 31. export_prepare.dart + <path d="M 4618.0,395.0 L 4606.0,388.0 Q 4603.0,388.0 4603.0,391.0 L 4603.0,399.0 Q 4603.0,402.0 4606.0,402.0 Z" fill="#3b82f6"/> + <text x="4607.68" y="396.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">3</text><title>1. export_prepare.dart 2. import_files.dart 3. share_panel.dart - - 21. file_operation_exception.dart -2. log_helper.dartfile_heic.dart + + 21. file_operation_exception.dart +2. log_helper.dartfile_heic.dart - - 31. export_prepare.dart + <path d="M 4618.0,465.0 L 4606.0,458.0 Q 4603.0,458.0 4603.0,461.0 L 4603.0,469.0 Q 4603.0,472.0 4606.0,472.0 Z" fill="#3b82f6"/> + <text x="4607.68" y="466.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">3</text><title>1. export_prepare.dart 2. import_files.dart 3. share_panel.dart - - 21. file_operation_exception.dart -2. log_helper.dartfile_heic_web.dart - - - 11. export_prepare.dart - - 21. constants.dart -2. file_operation_exception.dartfile_jpeg.dart - - - 11. export_prepare.dart - - 21. file_operation_exception.dart -2. webp_encoder.dartfile_webp.dart - - - 11. file_tiff.darttiff_constants.dart - - - 451. about.dart + <path d="M 4832.0,465.0 L 4820.0,458.0 Q 4817.0,458.0 4817.0,461.0 L 4817.0,469.0 Q 4817.0,472.0 4820.0,472.0 Z" fill="#10b981"/> + <text x="4821.68" y="466.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">2</text><title>1. file_operation_exception.dart +2. log_helper.dartfile_heic_web.dart + + + 11. export_prepare.dart + + 21. constants.dart +2. file_operation_exception.dartfile_jpeg.dart + + + 11. export_prepare.dart + + 21. file_operation_exception.dart +2. webp_encoder.dartfile_webp.dart + + + 11. file_tiff.darttiff_constants.dart + + + 451. about.dart 2. attribution_dialog.dart 3. base_picker.dart 4. blend_mode.dart @@ -4567,8 +4689,8 @@ 43. tools_panel.dart 44. top_colors.dart 45. truncated_text.dart - - 181. app_bottom_sheet.dart + <path d="M 5724.0,115.0 L 5708.0,107.4 Q 5705.0,107.4 5705.0,110.4 L 5705.0,119.6 Q 5705.0,122.6 5708.0,122.6 Z" fill="#10b981"/> + <text x="5710.72" y="116.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold" textLength="10.120000000000001" lengthAdjust="spacingAndGlyphs">18</text><title>1. app_bottom_sheet.dart 2. app_button_row.dart 3. app_buttons.dart 4. app_card.dart @@ -4585,60 +4707,60 @@ 15. app_switch.dart 16. app_text.dart 17. app_text_field.dart -18. app_tooltip.dartmaterial_free.dart +18. app_tooltip.dartmaterial_free.dart - - 81. file_heic.dart + <path d="M 5508.0,185.0 L 5496.0,178.0 Q 5493.0,178.0 5493.0,181.0 L 5493.0,189.0 Q 5493.0,192.0 5496.0,192.0 Z" fill="#3b82f6"/> + <text x="5497.68" y="186.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">8</text><title>1. file_heic.dart 2. file_heic_web.dart 3. file_jpeg.dart 4. file_ora.dart 5. file_tiff.dart 6. file_webp.dart 7. import_files.dart -8. save.dartfile_operation_exception.dart +8. save.dartfile_operation_exception.dart - - 61. color_picker_dialog.dart + <path d="M 5508.0,255.0 L 5496.0,248.0 Q 5493.0,248.0 5493.0,251.0 L 5493.0,259.0 Q 5493.0,262.0 5496.0,262.0 Z" fill="#3b82f6"/> + <text x="5497.68" y="256.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">6</text><title>1. color_picker_dialog.dart 2. color_preview.dart 3. color_selector.dart 4. color_wheel_selector.dart 5. layer_thumbnail.dart 6. top_colors.dart - - 11. constants.darttransparent_background.dart + + 11. constants.darttransparent_background.dart - - 21. color_selector.dart -2. file_ora.dartlist_helper.dart + + 21. color_selector.dart +2. file_ora.dartlist_helper.dart - - 11. file_ora.dart - - 41. constants.dart + <path d="M 5508.0,395.0 L 5496.0,388.0 Q 5493.0,388.0 5493.0,391.0 L 5493.0,399.0 Q 5493.0,402.0 5496.0,402.0 Z" fill="#3b82f6"/> + <text x="5497.68" y="396.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. file_ora.dart + + 41. constants.dart 2. image_helper.dart 3. layer_provider.dart -4. user_action_drawing.dartlayer_provider_storage_export.dart +4. user_action_drawing.dartlayer_provider_storage_export.dart - - 11. app_provider_selection.dart - - 31. app_provider.dart + <path d="M 5508.0,465.0 L 5496.0,458.0 Q 5493.0,458.0 5493.0,461.0 L 5493.0,469.0 Q 5493.0,472.0 5496.0,472.0 Z" fill="#3b82f6"/> + <text x="5497.68" y="466.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. app_provider_selection.dart + + 31. app_provider.dart 2. image_placement_layer_restore_state.dart -3. selector_model.dartapp_provider_selection_commit.dart +3. selector_model.dartapp_provider_selection_commit.dart - - 11. file_webp.dart - - 21. webp_encoder_shared.dart -2. webp_vp8l_encoder.dartwebp_encoder.dart + + 11. file_webp.dart + + 21. webp_encoder_shared.dart +2. webp_vp8l_encoder.dartwebp_encoder.dart - - 11. app_provider_selection.dart - - 11. user_action_drawing.dartlayer_crop_state.dart + + 11. app_provider_selection.dart + + 11. user_action_drawing.dartlayer_crop_state.dart - - 241. app_provider_canvas.dart + <path d="M 6328.0,115.0 L 6312.0,107.4 Q 6309.0,107.4 6309.0,110.4 L 6309.0,119.6 Q 6309.0,122.6 6312.0,122.6 Z" fill="#3b82f6"/> + <text x="6314.72" y="116.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold" textLength="10.120000000000001" lengthAdjust="spacingAndGlyphs">25</text><title>1. app_provider_canvas.dart 2. app_provider_selection.dart 3. app_provider_selection_commit.dart 4. app_provider_tools.dart @@ -4661,105 +4783,108 @@ 21. side_panel.dart 22. text_attributes_widget.dart 23. text_editor.dart -24. tools_panel.dart - - 171. app_preferences.dart +24. tool_family_rail.dart +25. tools_panel.dart + + 181. app_preferences.dart 2. constants.dart -3. effect_preview_model.dart -4. fill_model.dart -5. fill_service.dart -6. image_helper.dart -7. image_placement_layer_restore_state.dart -8. image_placement_model.dart -9. layers_provider.dart -10. selector_model.dart -11. text_object.dart -12. text_tool_state.dart -13. transform_model.dart -14. undo_provider.dart -15. user_action_drawing.dart -16. wand_selection_manager.dartapp_provider.dart - - - 31. draft_recovery_controller.dart +3. effect_brush_model.dart +4. effect_preview_model.dart +5. fill_model.dart +6. fill_service.dart +7. image_helper.dart +8. image_placement_layer_restore_state.dart +9. image_placement_model.dart +10. layers_provider.dart +11. selector_model.dart +12. text_object.dart +13. text_tool_state.dart +14. transform_model.dart +15. undo_provider.dart +16. user_action_drawing.dart +17. wand_selection_manager.dartapp_provider.dart + + + 31. draft_recovery_controller.dart 2. effect_intensity_controls.dart 3. material_free.dart - - 31. app_progress.dart + <path d="M 6540.0,185.0 L 6528.0,178.0 Q 6525.0,178.0 6525.0,181.0 L 6525.0,189.0 Q 6525.0,192.0 6528.0,192.0 Z" fill="#10b981"/> + <text x="6529.68" y="186.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">3</text><title>1. app_progress.dart 2. constants.dart -3. log_helper.dartapp_snackbar.dart +3. log_helper.dartapp_snackbar.dart - - 21. material_free.dart -2. text_alignment_dropdown.dart - - 21. app_overlay.dart -2. constants.dartapp_dropdown.dart + + 31. effect_intensity_controls.dart +2. material_free.dart +3. tool_family_rail.dart + + 21. app_text.dart +2. constants.dartapp_slider.dart - - 21. effect_intensity_controls.dart -2. material_free.dart - - 21. app_text.dart -2. constants.dartapp_slider.dart + + 21. material_free.dart +2. text_alignment_dropdown.dart + + 21. app_overlay.dart +2. constants.dartapp_dropdown.dart - - 21. gradient_color_list_editor.dart + <path d="M 6326.0,395.0 L 6314.0,388.0 Q 6311.0,388.0 6311.0,391.0 L 6311.0,399.0 Q 6311.0,402.0 6314.0,402.0 Z" fill="#3b82f6"/> + <text x="6315.68" y="396.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">2</text><title>1. gradient_color_list_editor.dart 2. material_free.dart - - 11. constants.dartapp_text_field.dart + + 11. constants.dartapp_text_field.dart - - 11. webp_encoder.dart - - 41. webp_bit_writer.dart + <path d="M 6326.0,465.0 L 6314.0,458.0 Q 6311.0,458.0 6311.0,461.0 L 6311.0,469.0 Q 6311.0,472.0 6314.0,472.0 Z" fill="#3b82f6"/> + <text x="6315.68" y="466.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. webp_encoder.dart + + 41. webp_bit_writer.dart 2. webp_encoder_shared.dart 3. webp_huffman_codec.dart -4. webp_transform_codec.dartwebp_vp8l_encoder.dart +4. webp_transform_codec.dartwebp_vp8l_encoder.dart - - 11. material_free.dart - - 31. app_button_row.dart + <path d="M 6326.0,535.0 L 6314.0,528.0 Q 6311.0,528.0 6311.0,531.0 L 6311.0,539.0 Q 6311.0,542.0 6314.0,542.0 Z" fill="#3b82f6"/> + <text x="6315.68" y="536.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. material_free.dart + + 31. app_button_row.dart 2. app_overlay.dart -3. constants.dartapp_dialog.dart +3. constants.dartapp_dialog.dart - - 11. material_free.dart - - 31. app_buttons.dart + <path d="M 6326.0,605.0 L 6314.0,598.0 Q 6311.0,598.0 6311.0,601.0 L 6311.0,609.0 Q 6311.0,612.0 6314.0,612.0 Z" fill="#3b82f6"/> + <text x="6315.68" y="606.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. material_free.dart + + 31. app_buttons.dart 2. app_overlay.dart -3. constants.dartapp_popup_menu.dart - - - 11. material_free.dart - - 21. app_overlay.dart -2. constants.dartapp_bottom_sheet.dart - - - 11. material_free.dart - - 21. app_switch.dart -2. constants.dartapp_list_tile.dart - - - 11. material_free.dart - - 11. constants.dartapp_card.dart - - - 11. material_free.dart - - 11. constants.dartapp_divider.dart - - - 11. material_free.dart - - 11. constants.dartapp_scaffold.dart - - - 151. app_provider.dart +3. constants.dartapp_popup_menu.dart + + + 11. material_free.dart + + 21. app_overlay.dart +2. constants.dartapp_bottom_sheet.dart + + + 11. material_free.dart + + 21. app_switch.dart +2. constants.dartapp_list_tile.dart + + + 11. material_free.dart + + 11. constants.dartapp_card.dart + + + 11. material_free.dart + + 11. constants.dartapp_divider.dart + + + 11. material_free.dart + + 11. constants.dartapp_scaffold.dart + + + 151. app_provider.dart 2. canvas_gesture_handler.dart 3. draft_recovery_controller.dart 4. export_download_non_web.dart @@ -4774,13 +4899,13 @@ 13. settings_page.dart 14. share_panel.dart 15. side_panel.dart - - 31. constants.dart + <path d="M 7358.0,115.0 L 7346.0,108.0 Q 7343.0,108.0 7343.0,111.0 L 7343.0,119.0 Q 7343.0,122.0 7346.0,122.0 Z" fill="#10b981"/> + <text x="7347.68" y="116.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">3</text><title>1. constants.dart 2. log_helper.dart -3. macos_bookmark_service.dartapp_preferences.dart +3. macos_bookmark_service.dartapp_preferences.dart - - 121. app_provider.dart + <path d="M 7146.0,185.0 L 7130.0,177.4 Q 7127.0,177.4 7127.0,180.4 L 7127.0,189.6 Q 7127.0,192.6 7130.0,192.6 Z" fill="#3b82f6"/> + <text x="7132.72" y="186.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold" textLength="10.120000000000001" lengthAdjust="spacingAndGlyphs">12</text><title>1. app_provider.dart 2. canvas_panel.dart 3. color_picker_dialog.dart 4. export_download_non_web.dart @@ -4791,260 +4916,249 @@ 9. magnifying_eye_dropper.dart 10. save.dart 11. top_menu_and_layers_panel.dart - - 91. canvas_resize.dart + <path d="M 7358.0,185.0 L 7346.0,178.0 Q 7343.0,178.0 7343.0,181.0 L 7343.0,189.0 Q 7343.0,192.0 7346.0,192.0 Z" fill="#10b981"/> + <text x="7347.68" y="186.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">9</text><title>1. canvas_resize.dart 2. color_helper.dart 3. constants.dart 4. image_helper.dart 5. layer_provider.dart 6. log_helper.dart 7. undo_provider.dart -8. user_action_drawing.dartlayers_provider.dart +8. user_action_drawing.dartlayers_provider.dart - - 71. app_provider.dart + <path d="M 7144.0,255.0 L 7132.0,248.0 Q 7129.0,248.0 7129.0,251.0 L 7129.0,259.0 Q 7129.0,262.0 7132.0,262.0 Z" fill="#3b82f6"/> + <text x="7133.68" y="256.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">7</text><title>1. app_provider.dart 2. app_provider_selection.dart 3. app_provider_selection_commit.dart 4. app_provider_tools.dart 5. canvas_gesture_handler.dart 6. selector_widget.dart 7. shell_selection_sub_toolbar.dart - - 51. constants.dart + <path d="M 7358.0,255.0 L 7346.0,248.0 Q 7343.0,248.0 7343.0,251.0 L 7343.0,259.0 Q 7343.0,262.0 7346.0,262.0 Z" fill="#10b981"/> + <text x="7347.68" y="256.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">5</text><title>1. constants.dart 2. draw_path_helper.dart 3. transform_helper.dart -4. visible_model.dartselector_model.dart +4. visible_model.dartselector_model.dart - - 51. app_bottom_sheet.dart + <path d="M 7144.0,325.0 L 7132.0,318.0 Q 7129.0,318.0 7129.0,321.0 L 7129.0,329.0 Q 7129.0,332.0 7132.0,332.0 Z" fill="#3b82f6"/> + <text x="7133.68" y="326.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">5</text><title>1. app_bottom_sheet.dart 2. app_dialog.dart 3. app_dropdown.dart 4. app_popup_menu.dart 5. material_free.dart - - 31. app_overlay_menu_item.dart + <path d="M 7358.0,325.0 L 7346.0,318.0 Q 7343.0,318.0 7343.0,321.0 L 7343.0,329.0 Q 7343.0,332.0 7346.0,332.0 Z" fill="#10b981"/> + <text x="7347.68" y="326.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">3</text><title>1. app_overlay_menu_item.dart 2. app_overlay_surface.dart -3. constants.dartapp_overlay.dart +3. constants.dartapp_overlay.dart - - 51. app_provider.dart + <path d="M 7144.0,395.0 L 7132.0,388.0 Q 7129.0,388.0 7129.0,391.0 L 7129.0,399.0 Q 7129.0,402.0 7132.0,402.0 Z" fill="#3b82f6"/> + <text x="7133.68" y="396.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">5</text><title>1. app_provider.dart 2. text_attributes_widget.dart 3. text_editor.dart 4. text_editor_dialog.dart 5. text_style_toggle_buttons.dart - - 11. text_object.darttext_tool_state.dart + + 11. text_object.darttext_tool_state.dart - - 41. app_provider.dart + <path d="M 7144.0,465.0 L 7132.0,458.0 Q 7129.0,458.0 7129.0,461.0 L 7129.0,469.0 Q 7129.0,472.0 7132.0,472.0 Z" fill="#3b82f6"/> + <text x="7133.68" y="466.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">4</text><title>1. app_provider.dart 2. app_provider_selection.dart 3. main_view.dart 4. transform_widget.dart - - 31. constants.dart + <path d="M 7358.0,465.0 L 7346.0,458.0 Q 7343.0,458.0 7343.0,461.0 L 7343.0,469.0 Q 7343.0,472.0 7346.0,472.0 Z" fill="#10b981"/> + <text x="7347.68" y="466.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">3</text><title>1. constants.dart 2. transform_helper.dart -3. visible_model.darttransform_model.dart +3. visible_model.darttransform_model.dart - - 31. app_dialog.dart + <path d="M 7144.0,535.0 L 7132.0,528.0 Q 7129.0,528.0 7129.0,531.0 L 7129.0,539.0 Q 7129.0,542.0 7132.0,542.0 Z" fill="#3b82f6"/> + <text x="7133.68" y="536.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">3</text><title>1. app_dialog.dart 2. effect_intensity_controls.dart 3. material_free.dart - - 31. app_buttons.dart + <path d="M 7358.0,535.0 L 7346.0,528.0 Q 7343.0,528.0 7343.0,531.0 L 7343.0,539.0 Q 7343.0,542.0 7346.0,542.0 Z" fill="#10b981"/> + <text x="7347.68" y="536.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">3</text><title>1. app_buttons.dart 2. app_icon_enum.dart -3. constants.dartapp_button_row.dart +3. constants.dartapp_button_row.dart - - 31. app_slider.dart + <path d="M 7144.0,605.0 L 7132.0,598.0 Q 7129.0,598.0 7129.0,601.0 L 7129.0,609.0 Q 7129.0,612.0 7132.0,612.0 Z" fill="#3b82f6"/> + <text x="7133.68" y="606.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">3</text><title>1. app_slider.dart 2. material_free.dart 3. text_alignment_dropdown.dart - - 11. constants.dartapp_text.dart + + 11. constants.dartapp_text.dart - - 21. app_provider.dart + <path d="M 7144.0,675.0 L 7132.0,668.0 Q 7129.0,668.0 7129.0,671.0 L 7129.0,679.0 Q 7129.0,682.0 7132.0,682.0 Z" fill="#3b82f6"/> + <text x="7133.68" y="676.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">2</text><title>1. app_provider.dart 2. app_provider_selection.dart - - 41. constants.dart + <path d="M 7358.0,675.0 L 7346.0,668.0 Q 7343.0,668.0 7343.0,671.0 L 7343.0,679.0 Q 7343.0,682.0 7346.0,682.0 Z" fill="#10b981"/> + <text x="7347.68" y="676.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">4</text><title>1. constants.dart 2. fill_service.dart -3. wand_selection_request.dartwand_selection_manager.dart +3. wand_selection_request.dartwand_selection_manager.dart - - 21. app_snackbar.dart + <path d="M 7144.0,745.0 L 7132.0,738.0 Q 7129.0,738.0 7129.0,741.0 L 7129.0,749.0 Q 7129.0,752.0 7132.0,752.0 Z" fill="#3b82f6"/> + <text x="7133.68" y="746.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">2</text><title>1. app_snackbar.dart 2. material_free.dart - - 11. constants.dartapp_progress.dart + + 11. constants.dartapp_progress.dart - - 21. app_list_tile.dart + <path d="M 7144.0,815.0 L 7132.0,808.0 Q 7129.0,808.0 7129.0,811.0 L 7129.0,819.0 Q 7129.0,822.0 7132.0,822.0 Z" fill="#3b82f6"/> + <text x="7133.68" y="816.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">2</text><title>1. app_list_tile.dart 2. material_free.dart - - 11. constants.dartapp_switch.dart + + 11. constants.dartapp_switch.dart - - 11. app_provider.dart - - 31. constants.dart + <path d="M 7144.0,885.0 L 7132.0,878.0 Q 7129.0,878.0 7129.0,881.0 L 7129.0,889.0 Q 7129.0,892.0 7132.0,892.0 Z" fill="#3b82f6"/> + <text x="7133.68" y="886.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. app_provider.dart + + 31. constants.dart 2. selection_effect.dart -3. visible_model.darteffect_preview_model.dart +3. visible_model.darteffect_preview_model.dart - - 11. webp_vp8l_encoder.dart - - 31. webp_bit_writer.dart + <path d="M 7144.0,955.0 L 7132.0,948.0 Q 7129.0,948.0 7129.0,951.0 L 7129.0,959.0 Q 7129.0,962.0 7132.0,962.0 Z" fill="#3b82f6"/> + <text x="7133.68" y="956.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. webp_vp8l_encoder.dart + + 31. webp_bit_writer.dart 2. webp_encoder_shared.dart -3. webp_huffman_codec.dartwebp_transform_codec.dart - - - 11. app_provider.dart - - 21. image_placement_layer_restore_state.dart -2. visible_model.dartimage_placement_model.dart - - - 91. app_provider_selection.dart -2. effect_intensity_controls.dart -3. effect_labels.dart -4. effect_preview_bottom_sheet.dart -5. effect_preview_model.dart -6. main_view.dart -7. selector_widget.dart -8. shell_selection_sub_toolbar.dart -9. tools_panel.dart - - 31. app_icon_enum.dart +3. webp_huffman_codec.dartwebp_transform_codec.dart + + + 11. app_provider.dart + + 21. constants.dart +2. selection_effect.darteffect_brush_model.dart + + + 11. app_provider.dart + + 21. image_placement_layer_restore_state.dart +2. visible_model.dartimage_placement_model.dart + + + 121. app_provider_selection.dart +2. canvas_gesture_handler.dart +3. effect_brush_model.dart +4. effect_intensity_controls.dart +5. effect_labels.dart +6. effect_preview_bottom_sheet.dart +7. effect_preview_model.dart +8. main_view.dart +9. selector_widget.dart +10. shell_selection_sub_toolbar.dart +11. tool_descriptor.dart +12. tool_family_rail.dart + + 31. app_icon_enum.dart 2. constants.dart -3. image_effects.dartselection_effect.dart +3. image_effects.dartselection_effect.dart + + + 61. app_button_row.dart +2. app_popup_menu.dart +3. gradient_color_list_editor.dart +4. material_free.dart +5. text_style_toggle_buttons.dart +6. tool_family_rail.dart + + 41. app_icon.dart +2. app_icon_enum.dart +3. app_tooltip.dart +4. constants.dartapp_buttons.dart - - 51. canvas_panel_painter.dart + <path d="M 7922.0,255.0 L 7910.0,248.0 Q 7907.0,248.0 7907.0,251.0 L 7907.0,259.0 Q 7907.0,262.0 7910.0,262.0 Z" fill="#3b82f6"/> + <text x="7911.68" y="256.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">6</text><title>1. app_provider_selection.dart +2. canvas_gesture_handler.dart +3. selector_model.dart +4. selector_widget.dart +5. transform_model.dart +6. transform_widget.dart + + 21. constants.dart +2. image_helper.darttransform_helper.dart + + + 51. canvas_panel_painter.dart 2. layer_provider_storage_export.dart 3. layer_thumbnail.dart 4. layers_provider.dart - - 71. color_helper.dart + <path d="M 8136.0,325.0 L 8124.0,318.0 Q 8121.0,318.0 8121.0,321.0 L 8121.0,329.0 Q 8121.0,332.0 8124.0,332.0 Z" fill="#10b981"/> + <text x="8125.68" y="326.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">7</text><title>1. color_helper.dart 2. constants.dart 3. draw_path_helper.dart 4. image_helper.dart 5. render_helper.dart 6. text_object.dart -7. user_action_drawing.dartlayer_provider.dart - - - 51. app_button_row.dart -2. app_popup_menu.dart -3. gradient_color_list_editor.dart -4. material_free.dart -5. text_style_toggle_buttons.dart - - 41. app_icon.dart -2. app_icon_enum.dart -3. app_tooltip.dart -4. constants.dartapp_buttons.dart +7. user_action_drawing.dartlayer_provider.dart - - 51. app_provider_selection.dart -2. selector_model.dart -3. selector_widget.dart -4. transform_model.dart -5. transform_widget.dart - - 21. constants.dart -2. image_helper.darttransform_helper.dart - - - 51. app_provider.dart + <path d="M 7922.0,395.0 L 7910.0,388.0 Q 7907.0,388.0 7907.0,391.0 L 7907.0,399.0 Q 7907.0,402.0 7910.0,402.0 Z" fill="#3b82f6"/> + <text x="7911.68" y="396.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">5</text><title>1. app_provider.dart 2. canvas_gesture_handler.dart 3. layer_selector.dart 4. layers_provider.dart 5. main.dart - - 21. constants.dart -2. log_helper.dartundo_provider.dart + + 21. constants.dart +2. log_helper.dartundo_provider.dart - - 51. app_provider.dart + <path d="M 7922.0,465.0 L 7910.0,458.0 Q 7907.0,458.0 7907.0,461.0 L 7907.0,469.0 Q 7907.0,472.0 7910.0,472.0 Z" fill="#3b82f6"/> + <text x="7911.68" y="466.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">5</text><title>1. app_provider.dart 2. app_provider_selection.dart 3. app_provider_selection_commit.dart 4. canvas_gesture_handler.dart 5. image_placement_model.dart - - 11. user_action_drawing.dartimage_placement_layer_restore_state.dart + + 11. user_action_drawing.dartimage_placement_layer_restore_state.dart - - 51. app_preferences.dart + <path d="M 7922.0,535.0 L 7910.0,528.0 Q 7907.0,528.0 7907.0,531.0 L 7907.0,539.0 Q 7907.0,542.0 7910.0,542.0 Z" fill="#3b82f6"/> + <text x="7911.68" y="536.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">5</text><title>1. app_preferences.dart 2. export_download_non_web.dart 3. recent_files_dialog.dart 4. save.dart 5. save_backup.dart - - 11. log_helper.dartmacos_bookmark_service.dart + + 11. log_helper.dartmacos_bookmark_service.dart - - 41. app_provider.dart + <path d="M 7922.0,605.0 L 7910.0,598.0 Q 7907.0,598.0 7907.0,601.0 L 7907.0,609.0 Q 7907.0,612.0 7910.0,612.0 Z" fill="#3b82f6"/> + <text x="7911.68" y="606.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">4</text><title>1. app_provider.dart 2. app_provider_selection.dart 3. app_provider_tools.dart 4. wand_selection_manager.dart - - 61. constants.dart + <path d="M 8136.0,605.0 L 8124.0,598.0 Q 8121.0,598.0 8121.0,601.0 L 8121.0,609.0 Q 8121.0,612.0 8124.0,612.0 Z" fill="#10b981"/> + <text x="8125.68" y="606.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">6</text><title>1. constants.dart 2. fill_model.dart 3. flood_fill.dart 4. halftone_fill.dart 5. image_helper.dart -6. user_action_drawing.dartfill_service.dart +6. user_action_drawing.dartfill_service.dart - - 41. layers_provider.dart + <path d="M 7922.0,675.0 L 7910.0,668.0 Q 7907.0,668.0 7907.0,671.0 L 7907.0,679.0 Q 7907.0,682.0 7910.0,682.0 Z" fill="#3b82f6"/> + <text x="7911.68" y="676.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">4</text><title>1. layers_provider.dart 2. nine_grid_selector.dart 3. shell_provider.dart - - 11. constants.dartcanvas_resize.dart + + 11. constants.dartcanvas_resize.dart - - 21. webp_transform_codec.dart + <path d="M 7922.0,745.0 L 7910.0,738.0 Q 7907.0,738.0 7907.0,741.0 L 7907.0,749.0 Q 7907.0,752.0 7910.0,752.0 Z" fill="#3b82f6"/> + <text x="7911.68" y="746.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">2</text><title>1. webp_transform_codec.dart 2. webp_vp8l_encoder.dart - - 31. webp_bit_writer.dart + <path d="M 8136.0,745.0 L 8124.0,738.0 Q 8121.0,738.0 8121.0,741.0 L 8121.0,749.0 Q 8121.0,752.0 8124.0,752.0 Z" fill="#10b981"/> + <text x="8125.68" y="746.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">3</text><title>1. webp_bit_writer.dart 2. webp_cl_symbol.dart -3. webp_encoder_shared.dartwebp_huffman_codec.dart +3. webp_encoder_shared.dartwebp_huffman_codec.dart - - 21. wand_selection_manager.dartwand_selection_request.dart + + 21. wand_selection_manager.dartwand_selection_request.dart - - 11. app_overlay.dart - - 11. constants.dartapp_overlay_menu_item.dart + + 11. app_overlay.dart + + 11. constants.dartapp_overlay_menu_item.dart - - 11. app_overlay.dart - - 11. constants.dartapp_overlay_surface.dart - - - 171. app_buttons.dart -2. brush_style_picker.dart -3. color_picker_dialog.dart -4. color_preview.dart -5. effect_intensity_controls.dart -6. halftone_size_picker.dart -7. layer_selector.dart -8. menu.dart -9. nine_grid_selector.dart -10. overlay_control_widgets.dart -11. recent_files_dialog.dart -12. selector_widget.dart -13. share_panel.dart -14. shell_selection_sub_toolbar.dart -15. text_attributes_widget.dart -16. tolerance_picker.dart -17. tools_panel.dart - - 21. app_icon_enum.dart -2. constants.dartapp_icon.dart + + 11. app_overlay.dart + + 11. constants.dartapp_overlay_surface.dart - - 161. app_provider.dart + <path d="M 8650.0,115.0 L 8634.0,107.4 Q 8631.0,107.4 8631.0,110.4 L 8631.0,119.6 Q 8631.0,122.6 8634.0,122.6 Z" fill="#3b82f6"/> + <text x="8636.72" y="116.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold" textLength="10.120000000000001" lengthAdjust="spacingAndGlyphs">19</text><title>1. app_provider.dart 2. app_provider_selection.dart 3. app_provider_tools.dart 4. canvas_gesture_handler.dart @@ -5059,15 +5173,40 @@ 13. shell_top_bar.dart 14. shortcuts.dart 15. text_editor.dart -16. tools_panel.dart - - 51. app_icon_enum.dart +16. tool_descriptor.dart +17. tool_family.dart +18. tool_family_rail.dart +19. tools_panel.dart + + 51. app_icon_enum.dart 2. brush_style.dart 3. halftone_fill.dart -4. text_object.dartuser_action_drawing.dart +4. text_object.dartuser_action_drawing.dart + + + 171. app_buttons.dart +2. brush_style_picker.dart +3. color_picker_dialog.dart +4. color_preview.dart +5. effect_intensity_controls.dart +6. halftone_size_picker.dart +7. layer_selector.dart +8. menu.dart +9. nine_grid_selector.dart +10. overlay_control_widgets.dart +11. recent_files_dialog.dart +12. selector_widget.dart +13. share_panel.dart +14. shell_selection_sub_toolbar.dart +15. text_attributes_widget.dart +16. tolerance_picker.dart +17. tools_panel.dart + + 21. app_icon_enum.dart +2. constants.dartapp_icon.dart - - 91. app_provider.dart + <path d="M 8648.0,255.0 L 8636.0,248.0 Q 8633.0,248.0 8633.0,251.0 L 8633.0,259.0 Q 8633.0,262.0 8636.0,262.0 Z" fill="#3b82f6"/> + <text x="8637.68" y="256.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">9</text><title>1. app_provider.dart 2. app_provider_canvas.dart 3. app_provider_tools.dart 4. canvas_gesture_handler.dart @@ -5076,52 +5215,52 @@ 7. gradient_color_list_editor.dart 8. main_view.dart 9. tools_panel.dart - - 31. constants.dart + <path d="M 8862.0,255.0 L 8850.0,248.0 Q 8847.0,248.0 8847.0,251.0 L 8847.0,259.0 Q 8847.0,262.0 8850.0,262.0 Z" fill="#10b981"/> + <text x="8851.68" y="256.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">3</text><title>1. constants.dart 2. draw_path_helper.dart -3. visible_model.dartfill_model.dart +3. visible_model.dartfill_model.dart - - 41. webp_encoder.dart + <path d="M 8648.0,325.0 L 8636.0,318.0 Q 8633.0,318.0 8633.0,321.0 L 8633.0,329.0 Q 8633.0,332.0 8636.0,332.0 Z" fill="#3b82f6"/> + <text x="8637.68" y="326.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">4</text><title>1. webp_encoder.dart 2. webp_huffman_codec.dart 3. webp_transform_codec.dart -4. webp_vp8l_encoder.dartwebp_encoder_shared.dart +4. webp_vp8l_encoder.dartwebp_encoder_shared.dart - - 31. webp_huffman_codec.dart + <path d="M 8648.0,395.0 L 8636.0,388.0 Q 8633.0,388.0 8633.0,391.0 L 8633.0,399.0 Q 8633.0,402.0 8636.0,402.0 Z" fill="#3b82f6"/> + <text x="8637.68" y="396.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">3</text><title>1. webp_huffman_codec.dart 2. webp_transform_codec.dart -3. webp_vp8l_encoder.dartwebp_bit_writer.dart +3. webp_vp8l_encoder.dartwebp_bit_writer.dart - - 21. app_buttons.dart + <path d="M 8648.0,465.0 L 8636.0,458.0 Q 8633.0,458.0 8633.0,461.0 L 8633.0,469.0 Q 8633.0,472.0 8636.0,472.0 Z" fill="#3b82f6"/> + <text x="8637.68" y="466.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">2</text><title>1. app_buttons.dart 2. material_free.dart - - 11. constants.dartapp_tooltip.dart + + 11. constants.dartapp_tooltip.dart - - 11. layer_provider.dart - - 41. brush_style.dart + <path d="M 8648.0,535.0 L 8636.0,528.0 Q 8633.0,528.0 8633.0,531.0 L 8633.0,539.0 Q 8633.0,542.0 8636.0,542.0 Z" fill="#3b82f6"/> + <text x="8637.68" y="536.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. layer_provider.dart + + 41. brush_style.dart 2. constants.dart 3. halftone_fill.dart -4. text_object.dartrender_helper.dart +4. text_object.dartrender_helper.dart - - 11. selection_effect.dart - - 21. constants.dart -2. image_helper.dartimage_effects.dart + + 11. selection_effect.dart + + 21. constants.dart +2. image_helper.dartimage_effects.dart - - 11. fill_service.dart - - 11. constants.dartflood_fill.dart + + 11. fill_service.dart + + 11. constants.dartflood_fill.dart - - 11. webp_huffman_codec.dartwebp_cl_symbol.dart + + 11. webp_huffman_codec.dartwebp_cl_symbol.dart - - 311. app_button_row.dart + <path d="M 9296.0,115.0 L 9280.0,107.4 Q 9277.0,107.4 9277.0,110.4 L 9277.0,119.6 Q 9277.0,122.6 9280.0,122.6 Z" fill="#3b82f6"/> + <text x="9282.72" y="116.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold" textLength="10.120000000000001" lengthAdjust="spacingAndGlyphs">32</text><title>1. app_button_row.dart 2. app_buttons.dart 3. app_icon.dart 4. brush_style_picker.dart @@ -5147,14 +5286,15 @@ 24. text_editor_dialog.dart 25. text_style_toggle_buttons.dart 26. tolerance_picker.dart -27. toolbar_icon_button.dart -28. tools_panel.dart -29. top_colors.dart -30. transform_widget.dart -31. user_action_drawing.dartapp_icon_enum.dart - - - 181. app_provider.dart +27. tool_descriptor.dart +28. toolbar_icon_button.dart +29. tools_panel.dart +30. top_colors.dart +31. transform_widget.dart +32. user_action_drawing.dartapp_icon_enum.dart + + + 181. app_provider.dart 2. app_provider_canvas.dart 3. app_provider_selection.dart 4. canvas_gesture_handler.dart @@ -5172,13 +5312,13 @@ 16. smudge_helper.dart 17. top_colors.dart 18. transform_helper.dart - - 31. color_helper.dart + <path d="M 9508.0,185.0 L 9496.0,178.0 Q 9493.0,178.0 9493.0,181.0 L 9493.0,189.0 Q 9493.0,192.0 9496.0,192.0 Z" fill="#10b981"/> + <text x="9497.68" y="186.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">3</text><title>1. color_helper.dart 2. constants.dart -3. log_helper.dartimage_helper.dart +3. log_helper.dartimage_helper.dart - - 81. app_provider.dart + <path d="M 9294.0,255.0 L 9282.0,248.0 Q 9279.0,248.0 9279.0,251.0 L 9279.0,259.0 Q 9279.0,262.0 9282.0,262.0 Z" fill="#3b82f6"/> + <text x="9283.68" y="256.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">8</text><title>1. app_provider.dart 2. canvas_gesture_handler.dart 3. layer_provider.dart 4. render_helper.dart @@ -5186,38 +5326,38 @@ 6. text_editor_dialog.dart 7. text_tool_state.dart 8. user_action_drawing.dart - - 11. constants.darttext_object.dart + + 11. constants.darttext_object.dart - - 51. fill_model.dart + <path d="M 9294.0,325.0 L 9282.0,318.0 Q 9279.0,318.0 9279.0,321.0 L 9279.0,329.0 Q 9279.0,332.0 9282.0,332.0 Z" fill="#3b82f6"/> + <text x="9283.68" y="326.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">5</text><title>1. fill_model.dart 2. layer_provider.dart 3. selector_model.dart -4. selector_widget.dartdraw_path_helper.dart +4. selector_widget.dartdraw_path_helper.dart - - 51. effect_preview_model.dart + <path d="M 9294.0,395.0 L 9282.0,388.0 Q 9279.0,388.0 9279.0,391.0 L 9279.0,399.0 Q 9279.0,402.0 9282.0,402.0 Z" fill="#3b82f6"/> + <text x="9283.68" y="396.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">5</text><title>1. effect_preview_model.dart 2. fill_model.dart 3. image_placement_model.dart 4. selector_model.dart -5. transform_model.dartvisible_model.dart +5. transform_model.dartvisible_model.dart - - 41. brush_style_picker.dart + <path d="M 9294.0,465.0 L 9282.0,458.0 Q 9279.0,458.0 9279.0,461.0 L 9279.0,469.0 Q 9279.0,472.0 9282.0,472.0 Z" fill="#3b82f6"/> + <text x="9283.68" y="466.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">4</text><title>1. brush_style_picker.dart 2. render_helper.dart 3. user_action_drawing.dart - - 11. constants.dartbrush_style.dart + + 11. constants.dartbrush_style.dart - - 31. fill_service.dart + <path d="M 9294.0,535.0 L 9282.0,528.0 Q 9279.0,528.0 9279.0,531.0 L 9279.0,539.0 Q 9279.0,542.0 9282.0,542.0 Z" fill="#3b82f6"/> + <text x="9283.68" y="536.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">3</text><title>1. fill_service.dart 2. render_helper.dart 3. user_action_drawing.dart - - 11. constants.darthalftone_fill.dart + + 11. constants.darthalftone_fill.dart - - 181. app_preferences.dart + <path d="M 9804.0,115.0 L 9788.0,107.4 Q 9785.0,107.4 9785.0,110.4 L 9785.0,119.6 Q 9785.0,122.6 9788.0,122.6 Z" fill="#3b82f6"/> + <text x="9790.72" y="116.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold" textLength="10.120000000000001" lengthAdjust="spacingAndGlyphs">18</text><title>1. app_preferences.dart 2. app_snackbar.dart 3. color_picker_dialog.dart 4. draft_recovery_controller.dart @@ -5234,20 +5374,20 @@ 15. recent_files_dialog.dart 16. save.dart 17. save_backup.dart -18. undo_provider.dartlog_helper.dart +18. undo_provider.dartlog_helper.dart - - 61. color_picker_dialog.dart + <path d="M 9802.0,185.0 L 9790.0,178.0 Q 9787.0,178.0 9787.0,181.0 L 9787.0,189.0 Q 9787.0,192.0 9790.0,192.0 Z" fill="#3b82f6"/> + <text x="9791.68" y="186.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">6</text><title>1. color_picker_dialog.dart 2. color_preview.dart 3. image_helper.dart 4. layer_provider.dart 5. layers_provider.dart 6. top_colors.dart - - 11. constants.dartcolor_helper.dart + + 11. constants.dartcolor_helper.dart - - 1121. about.dart + <path d="M 10268.0,115.0 L 10248.0,106.8 Q 10245.0,106.8 10245.0,109.8 L 10245.0,120.2 Q 10245.0,123.2 10248.0,123.2 Z" fill="#3b82f6"/> + <text x="10251.76" y="116.0" text-anchor="middle" fill="white" font-size="6.8" font-weight="bold" textLength="11.96" lengthAdjust="spacingAndGlyphs">114</text><title>1. about.dart 2. app_bottom_sheet.dart 3. app_button_row.dart 4. app_buttons.dart @@ -5290,77 +5430,79 @@ 41. container_slider.dart 42. draft_recovery_controller.dart 43. draw_rect.dart -44. effect_intensity_controls.dart -45. effect_preview_bottom_sheet.dart -46. effect_preview_model.dart -47. export_download_non_web.dart -48. export_file_name.dart -49. file_jpeg.dart -50. file_ora.dart -51. file_tiff.dart -52. fill_model.dart -53. fill_service.dart -54. fill_widget.dart -55. flood_fill.dart -56. gradient_color_list_editor.dart -57. halftone_fill.dart -58. halftone_size_picker.dart -59. image_effects.dart -60. image_helper.dart -61. image_painter.dart -62. import_files.dart -63. layer_provider.dart -64. layer_provider_storage_export.dart -65. layer_selector.dart -66. layer_thumbnail.dart -67. layers_provider.dart -68. magnifying_eye_dropper.dart -69. main.dart -70. main_screen.dart -71. main_view.dart -72. marching_ants_path.dart -73. menu.dart -74. nine_grid_selector.dart -75. overlay_control_widgets.dart -76. platforms_page.dart -77. recent_files_dialog.dart -78. render_helper.dart -79. save.dart -80. save_backup.dart -81. selection_effect.dart -82. selector_model.dart -83. selector_widget.dart -84. settings_page.dart -85. share_panel.dart -86. shell_provider.dart -87. shell_selection_sub_toolbar.dart -88. shell_top_bar.dart -89. shortcuts.dart -90. shortcuts_help.dart -91. side_panel.dart -92. side_panel_header.dart -93. smudge_helper.dart -94. text_alignment_dropdown.dart -95. text_attributes_widget.dart -96. text_editor.dart -97. text_editor_dialog.dart -98. text_object.dart -99. text_style_toggle_buttons.dart -100. tolerance_picker.dart -101. tool_attribute_widget.dart -102. toolbar_icon_button.dart -103. tools_panel.dart -104. top_colors.dart -105. top_menu_and_layers_panel.dart -106. transform_helper.dart -107. transform_model.dart -108. transform_widget.dart -109. transparent_background.dart -110. truncated_text.dart -111. undo_provider.dart -112. wand_selection_manager.dart - - 221. app_colors.dart +44. effect_brush_model.dart +45. effect_intensity_controls.dart +46. effect_preview_bottom_sheet.dart +47. effect_preview_model.dart +48. export_download_non_web.dart +49. export_file_name.dart +50. file_jpeg.dart +51. file_ora.dart +52. file_tiff.dart +53. fill_model.dart +54. fill_service.dart +55. fill_widget.dart +56. flood_fill.dart +57. gradient_color_list_editor.dart +58. halftone_fill.dart +59. halftone_size_picker.dart +60. image_effects.dart +61. image_helper.dart +62. image_painter.dart +63. import_files.dart +64. layer_provider.dart +65. layer_provider_storage_export.dart +66. layer_selector.dart +67. layer_thumbnail.dart +68. layers_provider.dart +69. magnifying_eye_dropper.dart +70. main.dart +71. main_screen.dart +72. main_view.dart +73. marching_ants_path.dart +74. menu.dart +75. nine_grid_selector.dart +76. overlay_control_widgets.dart +77. platforms_page.dart +78. recent_files_dialog.dart +79. render_helper.dart +80. save.dart +81. save_backup.dart +82. selection_effect.dart +83. selector_model.dart +84. selector_widget.dart +85. settings_page.dart +86. share_panel.dart +87. shell_provider.dart +88. shell_selection_sub_toolbar.dart +89. shell_top_bar.dart +90. shortcuts.dart +91. shortcuts_help.dart +92. side_panel.dart +93. side_panel_header.dart +94. smudge_helper.dart +95. text_alignment_dropdown.dart +96. text_attributes_widget.dart +97. text_editor.dart +98. text_editor_dialog.dart +99. text_object.dart +100. text_style_toggle_buttons.dart +101. tolerance_picker.dart +102. tool_attribute_widget.dart +103. tool_family_rail.dart +104. toolbar_icon_button.dart +105. tools_panel.dart +106. top_colors.dart +107. top_menu_and_layers_panel.dart +108. transform_helper.dart +109. transform_model.dart +110. transform_widget.dart +111. transparent_background.dart +112. truncated_text.dart +113. undo_provider.dart +114. wand_selection_manager.dart + + 221. app_colors.dart 2. app_config.dart 3. app_defaults.dart 4. app_effects.dart @@ -5381,95 +5523,95 @@ 19. file_extensions.dart 20. interaction_input_modality.dart 21. interaction_layout_profile.dart -22. keys.dartconstants.dart +22. keys.dartconstants.dart - - 11. constants.dart - - 41. app_interaction.dart + <path d="M 10584.0,115.0 L 10572.0,108.0 Q 10569.0,108.0 10569.0,111.0 L 10569.0,119.0 Q 10569.0,122.0 10572.0,122.0 Z" fill="#3b82f6"/> + <text x="10573.68" y="116.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. constants.dart + + 41. app_interaction.dart 2. app_layout.dart 3. interaction_input_modality.dart -4. interaction_layout_profile.dartapp_interaction_profiles.dart +4. interaction_layout_profile.dartapp_interaction_profiles.dart - - 11. constants.dart - - 31. app_colors.dart + <path d="M 10584.0,185.0 L 10572.0,178.0 Q 10569.0,178.0 10569.0,181.0 L 10569.0,189.0 Q 10569.0,192.0 10572.0,192.0 Z" fill="#3b82f6"/> + <text x="10573.68" y="186.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. constants.dart + + 31. app_colors.dart 2. app_font_size.dart -3. app_strings.dartapp_text_style.dart +3. app_strings.dartapp_text_style.dart - - 11. constants.dart - - 21. app_limits.dart -2. app_math.dartapp_halftone.dart + + 11. constants.dart + + 21. app_limits.dart +2. app_math.dartapp_halftone.dart - - 11. constants.dart - - 11. app_interaction.dartapp_defaults.dart + + 11. constants.dart + + 11. app_interaction.dartapp_defaults.dart - - 11. constants.dartapp_config.dart + + 11. constants.dartapp_config.dart - - 11. constants.dartapp_effects.dart + + 11. constants.dartapp_effects.dart - - 11. constants.dartapp_flood_fill.dart + + 11. constants.dartapp_flood_fill.dart - - 11. constants.dartapp_radius.dart + + 11. constants.dartapp_radius.dart - - 11. constants.dartapp_spacing.dart + + 11. constants.dartapp_spacing.dart - - 11. constants.dartapp_stroke.dart + + 11. constants.dartapp_stroke.dart - - 11. constants.dartapp_visual.dart + + 11. constants.dartapp_visual.dart - - 11. constants.dartfile_extensions.dart + + 11. constants.dartfile_extensions.dart - - 11. constants.dartkeys.dart + + 11. constants.dartkeys.dart - - 31. app_defaults.dart + <path d="M 10904.0,115.0 L 10892.0,108.0 Q 10889.0,108.0 10889.0,111.0 L 10889.0,119.0 Q 10889.0,122.0 10892.0,122.0 Z" fill="#3b82f6"/> + <text x="10893.68" y="116.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">3</text><title>1. app_defaults.dart 2. app_interaction_profiles.dart -3. constants.dartapp_interaction.dart +3. constants.dartapp_interaction.dart - - 21. app_text_style.dart -2. constants.dartapp_colors.dart + + 21. app_text_style.dart +2. constants.dartapp_colors.dart - - 21. app_text_style.dart -2. constants.dartapp_font_size.dart + + 21. app_text_style.dart +2. constants.dartapp_font_size.dart - - 21. app_interaction_profiles.dart -2. constants.dartapp_layout.dart + + 21. app_interaction_profiles.dart +2. constants.dartapp_layout.dart - - 21. app_halftone.dart -2. constants.dartapp_limits.dart + + 21. app_halftone.dart +2. constants.dartapp_limits.dart - - 21. app_halftone.dart -2. constants.dartapp_math.dart + + 21. app_halftone.dart +2. constants.dartapp_math.dart - - 21. app_text_style.dart -2. constants.dartapp_strings.dart + + 21. app_text_style.dart +2. constants.dartapp_strings.dart - - 21. app_interaction_profiles.dart -2. constants.dartinteraction_input_modality.dart + + 21. app_interaction_profiles.dart +2. constants.dartinteraction_input_modality.dart - - 21. app_interaction_profiles.dart -2. constants.dartinteraction_layout_profile.dart + + 21. app_interaction_profiles.dart +2. constants.dartinteraction_layout_profile.dart diff --git a/fcheck_folders.svg b/fcheck_folders.svg index 5abc2b78..41e72c91 100644 --- a/fcheck_folders.svg +++ b/fcheck_folders.svg @@ -1,5 +1,5 @@ - + @@ -234,43 +234,43 @@ . ▶ ... - + . ▶ l10n - + . ▶ constants - + . ▶ files - + . ▶ helpers - + . ▶ models - + . ▶ panels - + . ▶ providers - + . ▶ widgets - + . ▶ recovery - + . ▶ pages @@ -278,200 +278,200 @@ panels ▶ side_panel - + panels ▶ tools - + panels ▶ layers -Folder: . +Folder: . Folder: ... -Folder: l10n +Folder: l10n -Folder: constants +Folder: constants -Folder: files +Folder: files -Folder: helpers +Folder: helpers -Folder: models +Folder: models -Folder: panels +Folder: panels Folder: panels/side_panel -Folder: panels/tools +Folder: panels/tools -Folder: panels/layers +Folder: panels/layers -Folder: providers +Folder: providers -Folder: widgets +Folder: widgets -Folder: recovery +Folder: recovery -Folder: pages +Folder: pages panels/side_panel ▶ panels/tools - + panels/side_panel ▶ panels/layers - + recovery ▶ files - + helpers ▶ constants - - models ▶ l10n - - - + providers ▶ models - + files ▶ widgets - + + models ▶ l10n + + + models ▶ helpers - + pages ▶ widgets - + panels ▶ files - + recovery ▶ widgets - + models ▶ constants - + providers ▶ helpers - + panels ▶ widgets - + providers ▶ constants - + widgets ▶ providers - + widgets ▶ models - + files ▶ providers - + pages ▶ providers - + recovery ▶ providers - + widgets ▶ l10n - + widgets ▶ helpers - + pages ▶ models - + panels ▶ providers - + widgets ▶ constants - + files ▶ l10n - + files ▶ helpers - + pages ▶ l10n - + panels ▶ models - + recovery ▶ helpers - + files ▶ constants - + pages ▶ constants - + recovery ▶ constants - + panels ▶ l10n - + panels ▶ helpers - + panels ▶ constants @@ -479,39 +479,39 @@ ... ▶ panels - + ... ▶ recovery - + ... ▶ pages - + ... ▶ files - + ... ▶ widgets - + ... ▶ providers - + ... ▶ models - + ... ▶ l10n - + ... ▶ helpers - + ... ▶ constants @@ -526,15 +526,15 @@ 8. providers 9. recovery 10. widgets - - 61. ... + + 61. ... 2. files 3. models 4. pages 5. panels 6. widgets - - 91. ... + <path d="M 298.0,6765.0 L 286.0,6758.0 Q 283.0,6758.0 283.0,6761.0 L 283.0,6769.0 Q 283.0,6772.0 286.0,6772.0 Z" fill="#3b82f6"/> + <text x="287.68" y="6766.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">9</text><title>1. ... 2. files 3. helpers 4. models @@ -543,34 +543,34 @@ 7. providers 8. recovery 9. widgets - - 31. ... + <path d="M 298.0,1521.0 L 286.0,1514.0 Q 283.0,1514.0 283.0,1517.0 L 283.0,1525.0 Q 283.0,1528.0 286.0,1528.0 Z" fill="#3b82f6"/> + <text x="287.68" y="1522.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">3</text><title>1. ... 2. panels 3. recovery - - 51. constants + <path d="M 282.0,1532.0 L 294.0,1525.0 Q 297.0,1525.0 297.0,1528.0 L 297.0,1536.0 Q 297.0,1539.0 294.0,1539.0 Z" fill="#10b981"/> + <text x="292.32" y="1533.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">5</text><title>1. constants 2. helpers 3. l10n 4. providers 5. widgets - - 71. ... + <path d="M 298.0,6323.0 L 286.0,6316.0 Q 283.0,6316.0 283.0,6319.0 L 283.0,6327.0 Q 283.0,6330.0 286.0,6330.0 Z" fill="#3b82f6"/> + <text x="287.68" y="6324.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">7</text><title>1. ... 2. files 3. models 4. panels 5. providers 6. recovery 7. widgets - - 11. constants - - 51. ... + <path d="M 282.0,6334.0 L 294.0,6327.0 Q 297.0,6327.0 297.0,6330.0 L 297.0,6338.0 Q 297.0,6341.0 294.0,6341.0 Z" fill="#10b981"/> + <text x="292.32" y="6335.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. constants + + 51. ... 2. pages 3. panels 4. providers 5. widgets - - 31. constants + <path d="M 282.0,5386.0 L 294.0,5379.0 Q 297.0,5379.0 297.0,5382.0 L 297.0,5390.0 Q 297.0,5393.0 294.0,5393.0 Z" fill="#10b981"/> + <text x="292.32" y="5387.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">3</text><title>1. constants 2. helpers 3. l10n @@ -588,43 +588,43 @@ 2. panels/tools 11. panels/side_panel - - 11. panels/side_panel - - 61. ... + <path d="M 362.0,915.0 L 350.0,908.0 Q 347.0,908.0 347.0,911.0 L 347.0,919.0 Q 347.0,922.0 350.0,922.0 Z" fill="#3b82f6"/> + <text x="351.68" y="916.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. panels/side_panel + + 61. ... 2. files 3. pages 4. panels 5. recovery 6. widgets - - 31. constants + <path d="M 282.0,4592.0 L 294.0,4585.0 Q 297.0,4585.0 297.0,4588.0 L 297.0,4596.0 Q 297.0,4599.0 294.0,4599.0 Z" fill="#10b981"/> + <text x="292.32" y="4593.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">3</text><title>1. constants 2. helpers 3. models - - 51. ... + <path d="M 298.0,2347.0 L 286.0,2340.0 Q 283.0,2340.0 283.0,2343.0 L 283.0,2351.0 Q 283.0,2354.0 286.0,2354.0 Z" fill="#3b82f6"/> + <text x="287.68" y="2348.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">5</text><title>1. ... 2. files 3. pages 4. panels 5. recovery - - 51. constants + <path d="M 282.0,2358.0 L 294.0,2351.0 Q 297.0,2351.0 297.0,2354.0 L 297.0,2362.0 Q 297.0,2365.0 294.0,2365.0 Z" fill="#10b981"/> + <text x="292.32" y="2359.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">5</text><title>1. constants 2. helpers 3. l10n 4. models 5. providers - - 11. ... - - 51. constants + <path d="M 298.0,1149.0 L 286.0,1142.0 Q 283.0,1142.0 283.0,1145.0 L 283.0,1153.0 Q 283.0,1156.0 286.0,1156.0 Z" fill="#3b82f6"/> + <text x="287.68" y="1150.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. ... + + 51. constants 2. files 3. helpers 4. providers 5. widgets - - 11. ... - - 51. constants + <path d="M 298.0,1367.0 L 286.0,1360.0 Q 283.0,1360.0 283.0,1363.0 L 283.0,1371.0 Q 283.0,1374.0 286.0,1374.0 Z" fill="#3b82f6"/> + <text x="287.68" y="1368.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. ... + + 51. constants 2. l10n 3. models 4. providers @@ -632,84 +632,87 @@ <rect x="290.0" y="202.0" width="380.0" height="28.0" rx="5.0" ry="5.0" class="fileNode"><title>File: main_screen.dart File: shell_top_bar.dart File: shell_top_bar_responsive_groups.dart -File: l10n/app_localizations.dart -File: constants/constants.dart -File: constants/app_interaction_profiles.dart -File: constants/app_text_style.dart -File: constants/app_halftone.dart -File: constants/app_defaults.dart -File: constants/app_config.dart -File: constants/app_effects.dart -File: constants/app_flood_fill.dart -File: constants/app_radius.dart -File: constants/app_spacing.dart -File: constants/app_stroke.dart -File: constants/app_visual.dart -File: constants/file_extensions.dart -File: constants/keys.dart -File: constants/app_colors.dart -File: constants/app_font_size.dart -File: constants/app_layout.dart -File: constants/app_limits.dart -File: constants/app_math.dart -File: constants/app_strings.dart -File: constants/interaction_input_modality.dart -File: constants/interaction_layout_profile.dart -File: constants/app_interaction.dart -File: files/import_files.dart -File: files/save.dart -File: files/export_download_non_web.dart -File: files/export_download_web.dart -File: files/export_prepare.dart -File: files/file_ora.dart -File: files/file_tiff.dart -File: files/save_backup.dart -File: files/file_jpeg.dart -File: files/file_webp.dart -File: files/webp_encoder.dart -File: files/webp_vp8l_encoder.dart -File: files/webp_transform_codec.dart -File: files/webp_huffman_codec.dart -File: files/file_heic.dart -File: files/file_heic_web.dart -File: files/export_file_name.dart -File: files/file_tiff_encoder.dart -File: files/tiff_constants.dart -File: files/webp_cl_symbol.dart -File: files/webp_bit_writer.dart -File: files/webp_encoder_shared.dart -File: files/file_operation_exception.dart -File: helpers/image_effects.dart -File: helpers/smudge_helper.dart -File: helpers/transform_helper.dart -File: helpers/image_helper.dart -File: helpers/shortcut_tooltip.dart -File: helpers/color_helper.dart -File: helpers/list_helper.dart -File: helpers/draft_flusher.dart -File: helpers/shortcuts_constants.dart -File: helpers/draw_path_helper.dart -File: helpers/log_helper.dart -File: models/selector_model.dart -File: models/render_helper.dart -File: models/effect_preview_model.dart -File: models/transform_model.dart -File: models/fill_model.dart -File: models/image_placement_model.dart -File: models/effect_labels.dart -File: models/selection_effect.dart -File: models/canvas_resize.dart -File: models/image_placement_layer_restore_state.dart -File: models/user_action_drawing.dart -File: models/halftone_fill.dart -File: models/brush_style.dart -File: models/text_tool_state.dart -File: models/text_object.dart -File: models/dependency_versions.dart -File: models/menu_model.dart -File: models/version.dart -File: models/visible_model.dart -File: models/app_icon_enum.dart +File: l10n/app_localizations.dart +File: constants/constants.dart +File: constants/app_interaction_profiles.dart +File: constants/app_text_style.dart +File: constants/app_halftone.dart +File: constants/app_defaults.dart +File: constants/app_config.dart +File: constants/app_effects.dart +File: constants/app_flood_fill.dart +File: constants/app_radius.dart +File: constants/app_spacing.dart +File: constants/app_stroke.dart +File: constants/app_visual.dart +File: constants/file_extensions.dart +File: constants/keys.dart +File: constants/app_colors.dart +File: constants/app_font_size.dart +File: constants/app_layout.dart +File: constants/app_limits.dart +File: constants/app_math.dart +File: constants/app_strings.dart +File: constants/interaction_input_modality.dart +File: constants/interaction_layout_profile.dart +File: constants/app_interaction.dart +File: files/import_files.dart +File: files/save.dart +File: files/export_download_non_web.dart +File: files/export_download_web.dart +File: files/export_prepare.dart +File: files/file_ora.dart +File: files/file_tiff.dart +File: files/save_backup.dart +File: files/file_jpeg.dart +File: files/file_webp.dart +File: files/webp_encoder.dart +File: files/webp_vp8l_encoder.dart +File: files/webp_transform_codec.dart +File: files/webp_huffman_codec.dart +File: files/file_heic.dart +File: files/file_heic_web.dart +File: files/export_file_name.dart +File: files/file_tiff_encoder.dart +File: files/tiff_constants.dart +File: files/webp_cl_symbol.dart +File: files/webp_bit_writer.dart +File: files/webp_encoder_shared.dart +File: files/file_operation_exception.dart +File: helpers/image_effects.dart +File: helpers/smudge_helper.dart +File: helpers/transform_helper.dart +File: helpers/image_helper.dart +File: helpers/shortcut_tooltip.dart +File: helpers/color_helper.dart +File: helpers/list_helper.dart +File: helpers/draft_flusher.dart +File: helpers/shortcuts_constants.dart +File: helpers/draw_path_helper.dart +File: helpers/log_helper.dart +File: models/tool_descriptor.dart +File: models/selector_model.dart +File: models/render_helper.dart +File: models/effect_preview_model.dart +File: models/transform_model.dart +File: models/fill_model.dart +File: models/effect_brush_model.dart +File: models/image_placement_model.dart +File: models/tool_family.dart +File: models/effect_labels.dart +File: models/selection_effect.dart +File: models/canvas_resize.dart +File: models/image_placement_layer_restore_state.dart +File: models/user_action_drawing.dart +File: models/halftone_fill.dart +File: models/brush_style.dart +File: models/text_tool_state.dart +File: models/text_object.dart +File: models/dependency_versions.dart +File: models/menu_model.dart +File: models/version.dart +File: models/visible_model.dart +File: models/app_icon_enum.dart File: panels/side_panel/menu.dart File: panels/side_panel/recent_files_dialog.dart File: panels/side_panel/share_panel.dart @@ -719,130 +722,135 @@ File: panels/side_panel/about.dart File: panels/side_panel/attribution_dialog.dart File: panels/tools/tools_panel.dart -File: panels/layers/layer_selector.dart -File: panels/layers/layer_thumbnail.dart -File: panels/layers/blend_mode.dart -File: providers/app_provider_tools.dart -File: providers/app_provider_canvas.dart -File: providers/app_provider_selection.dart -File: providers/layer_provider_storage_export.dart -File: providers/app_provider_selection_commit.dart -File: providers/app_provider.dart -File: providers/layers_provider.dart -File: providers/layer_provider.dart -File: providers/wand_selection_manager.dart -File: providers/fill_service.dart -File: providers/app_preferences.dart -File: providers/shell_provider.dart -File: providers/undo_provider.dart -File: providers/flood_fill.dart -File: providers/layer_crop_state.dart -File: providers/macos_bookmark_service.dart -File: providers/app_provider_selection_crop.dart -File: providers/app_provider_selection_effects.dart -File: providers/layer_provider_display_cache.dart -File: providers/layer_provider_live_preview.dart -File: providers/layer_provider_transform.dart -File: providers/wand_selection_request.dart -File: widgets/main_view.dart -File: widgets/canvas_gesture_handler.dart -File: widgets/shell_selection_sub_toolbar.dart -File: widgets/selector_widget.dart -File: widgets/text_attributes_widget.dart -File: widgets/shortcuts.dart -File: widgets/gradient_color_list_editor.dart -File: widgets/text_editor.dart -File: widgets/text_editor_dialog.dart -File: widgets/magnifying_eye_dropper.dart -File: widgets/transform_widget.dart -File: widgets/effect_preview_bottom_sheet.dart -File: widgets/effect_intensity_controls.dart -File: widgets/brush_style_picker.dart -File: widgets/halftone_size_picker.dart -File: widgets/tolerance_picker.dart -File: widgets/fill_widget.dart -File: widgets/color_picker_dialog.dart -File: widgets/top_colors.dart -File: widgets/color_preview.dart -File: widgets/overlay_control_widgets.dart -File: widgets/brush_intensity_picker.dart -File: widgets/nine_grid_selector.dart -File: widgets/shortcuts_help.dart -File: widgets/brush_size_picker.dart -File: widgets/color_selector.dart -File: widgets/color_wheel_selector.dart -File: widgets/toolbar_icon_button.dart -File: widgets/canvas_panel.dart -File: widgets/canvas_panel_painter.dart -File: widgets/container_slider.dart -File: widgets/truncated_text.dart -File: widgets/text_formatting_controls.dart -File: widgets/text_alignment_dropdown.dart -File: widgets/text_style_toggle_buttons.dart -File: widgets/tool_attribute_widget.dart -File: widgets/confirm_discard_dialog.dart -File: widgets/side_panel_header.dart -File: widgets/base_picker.dart -File: widgets/material_free.dart -File: widgets/app_dialog.dart -File: widgets/app_popup_menu.dart -File: widgets/app_button_row.dart -File: widgets/app_buttons.dart -File: widgets/app_snackbar.dart -File: widgets/app_bottom_sheet.dart -File: widgets/app_list_tile.dart -File: widgets/app_dropdown.dart -File: widgets/app_overlay.dart -File: widgets/app_slider.dart -File: widgets/app_icon.dart -File: widgets/app_card.dart -File: widgets/app_divider.dart -File: widgets/app_overlay_menu_item.dart -File: widgets/app_overlay_surface.dart -File: widgets/app_scaffold.dart -File: widgets/draw_rect.dart -File: widgets/image_painter.dart -File: widgets/app_progress.dart -File: widgets/app_switch.dart -File: widgets/app_text_field.dart -File: widgets/app_tooltip.dart -File: widgets/marching_ants_path.dart -File: widgets/app_text.dart -File: widgets/transparent_background.dart -File: widgets/canvas_gesture_handler_pixel_brush.dart -File: widgets/canvas_gesture_handler_state_methods.dart -File: recovery/draft_recovery_controller.dart -File: recovery/draft_recovery_storage_io.dart -File: recovery/draft_recovery_storage_web.dart -File: recovery/draft_recovery_storage.dart -File: pages/settings_page.dart -File: pages/platforms_page.dart - - +File: panels/tools/tool_family_rail.dart +File: panels/layers/layer_selector.dart +File: panels/layers/layer_thumbnail.dart +File: panels/layers/blend_mode.dart +File: providers/app_provider_tools.dart +File: providers/app_provider_canvas.dart +File: providers/app_provider_selection.dart +File: providers/layer_provider_storage_export.dart +File: providers/app_provider_selection_commit.dart +File: providers/app_provider.dart +File: providers/layers_provider.dart +File: providers/layer_provider.dart +File: providers/wand_selection_manager.dart +File: providers/fill_service.dart +File: providers/app_preferences.dart +File: providers/shell_provider.dart +File: providers/undo_provider.dart +File: providers/flood_fill.dart +File: providers/layer_crop_state.dart +File: providers/macos_bookmark_service.dart +File: providers/app_provider_selection_crop.dart +File: providers/app_provider_selection_effects.dart +File: providers/layer_provider_display_cache.dart +File: providers/layer_provider_live_preview.dart +File: providers/layer_provider_transform.dart +File: providers/wand_selection_request.dart +File: widgets/main_view.dart +File: widgets/canvas_gesture_handler.dart +File: widgets/shell_selection_sub_toolbar.dart +File: widgets/selector_widget.dart +File: widgets/text_attributes_widget.dart +File: widgets/shortcuts.dart +File: widgets/gradient_color_list_editor.dart +File: widgets/text_editor.dart +File: widgets/text_editor_dialog.dart +File: widgets/magnifying_eye_dropper.dart +File: widgets/transform_widget.dart +File: widgets/effect_preview_bottom_sheet.dart +File: widgets/effect_intensity_controls.dart +File: widgets/brush_style_picker.dart +File: widgets/halftone_size_picker.dart +File: widgets/tolerance_picker.dart +File: widgets/fill_widget.dart +File: widgets/color_picker_dialog.dart +File: widgets/top_colors.dart +File: widgets/color_preview.dart +File: widgets/overlay_control_widgets.dart +File: widgets/brush_intensity_picker.dart +File: widgets/nine_grid_selector.dart +File: widgets/shortcuts_help.dart +File: widgets/brush_size_picker.dart +File: widgets/color_selector.dart +File: widgets/color_wheel_selector.dart +File: widgets/toolbar_icon_button.dart +File: widgets/canvas_panel.dart +File: widgets/canvas_panel_painter.dart +File: widgets/container_slider.dart +File: widgets/truncated_text.dart +File: widgets/text_formatting_controls.dart +File: widgets/text_alignment_dropdown.dart +File: widgets/text_style_toggle_buttons.dart +File: widgets/tool_attribute_widget.dart +File: widgets/confirm_discard_dialog.dart +File: widgets/side_panel_header.dart +File: widgets/base_picker.dart +File: widgets/material_free.dart +File: widgets/app_dialog.dart +File: widgets/app_popup_menu.dart +File: widgets/app_button_row.dart +File: widgets/app_buttons.dart +File: widgets/app_snackbar.dart +File: widgets/app_bottom_sheet.dart +File: widgets/app_list_tile.dart +File: widgets/app_dropdown.dart +File: widgets/app_overlay.dart +File: widgets/app_slider.dart +File: widgets/app_icon.dart +File: widgets/app_card.dart +File: widgets/app_divider.dart +File: widgets/app_overlay_menu_item.dart +File: widgets/app_overlay_surface.dart +File: widgets/app_scaffold.dart +File: widgets/draw_rect.dart +File: widgets/image_painter.dart +File: widgets/app_progress.dart +File: widgets/app_switch.dart +File: widgets/app_text_field.dart +File: widgets/app_tooltip.dart +File: widgets/marching_ants_path.dart +File: widgets/app_text.dart +File: widgets/transparent_background.dart +File: widgets/canvas_gesture_handler_pixel_brush.dart +File: widgets/canvas_gesture_handler_state_methods.dart +File: recovery/draft_recovery_controller.dart +File: recovery/draft_recovery_storage_io.dart +File: recovery/draft_recovery_storage_web.dart +File: recovery/draft_recovery_storage.dart +File: pages/settings_page.dart +File: pages/platforms_page.dart + + constants/app_text_style.dart ▶ constants/app_colors.dart - + helpers/color_helper.dart ▶ constants/constants.dart + + + models/tool_descriptor.dart ▶ models/tool_family.dart + shell_top_bar.dart ▶ panels/side_panel/menu.dart - + files/webp_huffman_codec.dart ▶ files/webp_cl_symbol.dart - + widgets/app_overlay.dart ▶ widgets/app_overlay_menu_item.dart - + providers/fill_service.dart ▶ providers/flood_fill.dart - + helpers/image_helper.dart ▶ helpers/color_helper.dart @@ -850,47 +858,47 @@ panels/side_panel/side_panel.dart ▶ panels/side_panel/top_menu_and_layers_panel.dart - + providers/app_provider_selection.dart ▶ providers/app_provider_selection_commit.dart - + widgets/app_dialog.dart ▶ widgets/app_button_row.dart - + constants/constants.dart ▶ constants/app_interaction_profiles.dart - + files/export_download_web.dart ▶ files/export_prepare.dart - + files/export_prepare.dart ▶ files/file_ora.dart - + files/file_webp.dart ▶ files/webp_encoder.dart - + files/save.dart ▶ files/export_download_non_web.dart - + files/webp_encoder.dart ▶ files/webp_vp8l_encoder.dart - + files/webp_transform_codec.dart ▶ files/webp_huffman_codec.dart - + files/webp_vp8l_encoder.dart ▶ files/webp_transform_codec.dart - + helpers/transform_helper.dart ▶ helpers/image_helper.dart @@ -902,23 +910,23 @@ main_screen.dart ▶ shell_top_bar.dart - + models/effect_labels.dart ▶ models/selection_effect.dart - + models/image_placement_layer_restore_state.dart ▶ models/user_action_drawing.dart - + models/text_tool_state.dart ▶ models/text_object.dart - + models/user_action_drawing.dart ▶ models/halftone_fill.dart - + panels/layers/layer_selector.dart ▶ panels/layers/layer_thumbnail.dart @@ -930,83 +938,87 @@ panels/side_panel/menu.dart ▶ panels/side_panel/recent_files_dialog.dart - + + panels/tools/tools_panel.dart ▶ panels/tools/tool_family_rail.dart + + + providers/app_provider_canvas.dart ▶ providers/app_provider_selection.dart - + providers/app_provider_selection_commit.dart ▶ providers/app_provider.dart - + providers/app_provider_tools.dart ▶ providers/app_provider_canvas.dart - + providers/wand_selection_manager.dart ▶ providers/fill_service.dart - + recovery/draft_recovery_controller.dart ▶ recovery/draft_recovery_storage_io.dart - + recovery/draft_recovery_storage_web.dart ▶ recovery/draft_recovery_storage.dart - + widgets/app_button_row.dart ▶ widgets/app_buttons.dart - + widgets/app_dropdown.dart ▶ widgets/app_overlay.dart - + widgets/base_picker.dart ▶ widgets/material_free.dart - + widgets/canvas_panel.dart ▶ widgets/canvas_panel_painter.dart - + widgets/color_picker_dialog.dart ▶ widgets/top_colors.dart - + widgets/effect_preview_bottom_sheet.dart ▶ widgets/effect_intensity_controls.dart - + widgets/fill_widget.dart ▶ widgets/color_picker_dialog.dart - + widgets/main_view.dart ▶ widgets/canvas_gesture_handler.dart - + widgets/material_free.dart ▶ widgets/app_dialog.dart - + widgets/text_editor.dart ▶ widgets/text_editor_dialog.dart - + widgets/text_formatting_controls.dart ▶ widgets/text_alignment_dropdown.dart - + widgets/top_colors.dart ▶ widgets/color_preview.dart - + constants/app_text_style.dart ▶ constants/app_font_size.dart - + widgets/text_editor_dialog.dart ▶ widgets/color_picker_dialog.dart @@ -1014,59 +1026,59 @@ panels/side_panel/side_panel.dart ▶ panels/tools/tools_panel.dart - + files/file_heic_web.dart ▶ files/file_operation_exception.dart - + widgets/app_overlay.dart ▶ widgets/app_overlay_surface.dart - + providers/app_preferences.dart ▶ providers/macos_bookmark_service.dart - + files/export_prepare.dart ▶ files/file_jpeg.dart - + helpers/shortcut_tooltip.dart ▶ helpers/shortcuts_constants.dart - - models/image_placement_model.dart ▶ models/image_placement_layer_restore_state.dart + + models/effect_brush_model.dart ▶ models/selection_effect.dart - + providers/app_provider_selection.dart ▶ providers/app_provider.dart - + widgets/app_bottom_sheet.dart ▶ widgets/app_overlay.dart - + widgets/main_view.dart ▶ widgets/selector_widget.dart - + constants/constants.dart ▶ constants/app_text_style.dart - + files/export_download_non_web.dart ▶ files/export_prepare.dart - + files/webp_vp8l_encoder.dart ▶ files/webp_huffman_codec.dart - + helpers/smudge_helper.dart ▶ helpers/image_helper.dart - + panels/layers/layer_selector.dart ▶ panels/layers/blend_mode.dart @@ -1074,155 +1086,155 @@ panels/side_panel/menu.dart ▶ panels/side_panel/share_panel.dart - + providers/app_provider_tools.dart ▶ providers/app_provider_selection.dart - + recovery/draft_recovery_controller.dart ▶ recovery/draft_recovery_storage_web.dart - + widgets/app_popup_menu.dart ▶ widgets/app_buttons.dart - + widgets/color_picker_dialog.dart ▶ widgets/color_preview.dart - + widgets/material_free.dart ▶ widgets/app_popup_menu.dart - + widgets/side_panel_header.dart ▶ widgets/material_free.dart - + widgets/text_formatting_controls.dart ▶ widgets/text_style_toggle_buttons.dart - + providers/app_provider.dart ▶ providers/layers_provider.dart - + providers/app_provider.dart ▶ providers/layers_provider.dart - + providers/layers_provider.dart ▶ providers/layer_provider.dart - + providers/layers_provider.dart ▶ providers/layer_provider.dart - + constants/app_halftone.dart ▶ constants/app_limits.dart - + panels/side_panel/top_menu_and_layers_panel.dart ▶ panels/layers/layer_selector.dart - + widgets/color_picker_dialog.dart ▶ widgets/color_selector.dart - + files/webp_huffman_codec.dart ▶ files/webp_bit_writer.dart - + helpers/image_helper.dart ▶ helpers/log_helper.dart - + widgets/app_buttons.dart ▶ widgets/app_icon.dart - + widgets/canvas_gesture_handler.dart ▶ widgets/text_editor_dialog.dart - - models/effect_preview_model.dart ▶ models/selection_effect.dart + + models/image_placement_model.dart ▶ models/image_placement_layer_restore_state.dart panels/side_panel/menu.dart ▶ panels/side_panel/canvas_settings.dart - + providers/app_provider_canvas.dart ▶ providers/app_provider.dart - + constants/constants.dart ▶ constants/app_halftone.dart - + files/export_download_web.dart ▶ files/file_tiff.dart - + helpers/image_effects.dart ▶ helpers/image_helper.dart - + providers/app_provider.dart ▶ providers/wand_selection_manager.dart - + widgets/confirm_discard_dialog.dart ▶ widgets/material_free.dart - + widgets/material_free.dart ▶ widgets/app_button_row.dart - + files/save.dart ▶ files/export_download_web.dart - + models/user_action_drawing.dart ▶ models/brush_style.dart - + models/user_action_drawing.dart ▶ models/brush_style.dart - + recovery/draft_recovery_storage_io.dart ▶ recovery/draft_recovery_storage.dart - + providers/fill_service.dart ▶ models/fill_model.dart - + constants/app_defaults.dart ▶ constants/app_interaction.dart - + widgets/app_list_tile.dart ▶ widgets/app_switch.dart - + helpers/image_helper.dart ▶ constants/constants.dart - + widgets/color_picker_dialog.dart ▶ widgets/color_wheel_selector.dart - + files/file_heic.dart ▶ files/file_operation_exception.dart - + widgets/main_view.dart ▶ widgets/text_editor.dart @@ -1230,75 +1242,79 @@ panels/side_panel/menu.dart ▶ panels/side_panel/about.dart - + + models/tool_family.dart ▶ models/user_action_drawing.dart + + + providers/app_provider_tools.dart ▶ providers/app_provider.dart - + constants/constants.dart ▶ constants/app_defaults.dart - + files/export_download_non_web.dart ▶ files/file_tiff.dart - + models/user_action_drawing.dart ▶ models/text_object.dart - + providers/app_provider.dart ▶ providers/fill_service.dart - + widgets/material_free.dart ▶ widgets/app_buttons.dart - + widgets/tool_attribute_widget.dart ▶ widgets/material_free.dart - + recovery/draft_recovery_controller.dart ▶ recovery/draft_recovery_storage.dart - + panels/side_panel/recent_files_dialog.dart ▶ files/import_files.dart - + widgets/app_slider.dart ▶ widgets/app_text.dart - + providers/wand_selection_manager.dart ▶ providers/wand_selection_request.dart - + providers/wand_selection_manager.dart ▶ providers/wand_selection_request.dart - + helpers/transform_helper.dart ▶ constants/constants.dart - + widgets/transform_widget.dart ▶ widgets/overlay_control_widgets.dart - + models/user_action_drawing.dart ▶ models/app_icon_enum.dart - + widgets/main_view.dart ▶ widgets/magnifying_eye_dropper.dart - + files/webp_huffman_codec.dart ▶ files/webp_encoder_shared.dart - + widgets/truncated_text.dart ▶ widgets/material_free.dart @@ -1306,39 +1322,47 @@ shell_top_bar.dart ▶ panels/side_panel/recent_files_dialog.dart - + + models/effect_preview_model.dart ▶ models/selection_effect.dart + + + constants/constants.dart ▶ constants/app_config.dart - + files/export_download_non_web.dart ▶ files/save_backup.dart - + widgets/material_free.dart ▶ widgets/app_snackbar.dart - + providers/layer_provider_storage_export.dart ▶ providers/layer_provider.dart - + panels/side_panel/share_panel.dart ▶ files/export_download_non_web.dart - + helpers/smudge_helper.dart ▶ constants/constants.dart - - models/render_helper.dart ▶ models/halftone_fill.dart + + models/selection_effect.dart ▶ models/app_icon_enum.dart - + + models/tool_descriptor.dart ▶ models/effect_labels.dart + + + widgets/container_slider.dart ▶ widgets/material_free.dart - + widgets/shell_selection_sub_toolbar.dart ▶ widgets/effect_preview_bottom_sheet.dart @@ -1346,2487 +1370,2551 @@ shell_top_bar.dart ▶ panels/side_panel/share_panel.dart - + files/webp_transform_codec.dart ▶ files/webp_bit_writer.dart - + constants/constants.dart ▶ constants/app_effects.dart - + widgets/material_free.dart ▶ widgets/app_bottom_sheet.dart - + files/export_prepare.dart ▶ files/file_webp.dart - + providers/app_provider.dart ▶ providers/app_preferences.dart - - helpers/image_effects.dart ▶ constants/constants.dart + + models/selection_effect.dart ▶ helpers/image_effects.dart - - widgets/toolbar_icon_button.dart ▶ widgets/material_free.dart + + helpers/image_effects.dart ▶ constants/constants.dart - - models/render_helper.dart ▶ models/brush_style.dart + + widgets/toolbar_icon_button.dart ▶ widgets/material_free.dart main_screen.dart ▶ panels/side_panel/side_panel.dart - + + models/tool_descriptor.dart ▶ models/selection_effect.dart + + + widgets/main_view.dart ▶ widgets/transform_widget.dart - + files/webp_transform_codec.dart ▶ files/webp_encoder_shared.dart - + constants/constants.dart ▶ constants/app_flood_fill.dart - + widgets/app_popup_menu.dart ▶ widgets/app_overlay.dart - + providers/app_provider_selection.dart ▶ providers/wand_selection_manager.dart - + files/import_files.dart ▶ files/file_ora.dart - + main.dart ▶ recovery/draft_recovery_controller.dart - + + models/text_object.dart ▶ constants/constants.dart + + + widgets/color_wheel_selector.dart ▶ widgets/material_free.dart - - models/selection_effect.dart ▶ models/app_icon_enum.dart + + models/render_helper.dart ▶ models/halftone_fill.dart - + widgets/gradient_color_list_editor.dart ▶ widgets/color_picker_dialog.dart - + files/webp_vp8l_encoder.dart ▶ files/webp_bit_writer.dart - + constants/constants.dart ▶ constants/app_radius.dart - + widgets/material_free.dart ▶ widgets/app_list_tile.dart - + providers/layers_provider.dart ▶ providers/undo_provider.dart - + files/save.dart ▶ files/file_tiff.dart - + panels/side_panel/menu.dart ▶ files/import_files.dart - + + models/brush_style.dart ▶ constants/constants.dart + + + widgets/brush_size_picker.dart ▶ widgets/base_picker.dart - - models/image_placement_model.dart ▶ models/visible_model.dart + + models/render_helper.dart ▶ models/brush_style.dart - + widgets/magnifying_eye_dropper.dart ▶ widgets/overlay_control_widgets.dart - + files/webp_vp8l_encoder.dart ▶ files/webp_encoder_shared.dart - + constants/constants.dart ▶ constants/app_spacing.dart - + widgets/app_dialog.dart ▶ widgets/app_overlay.dart - + providers/app_provider.dart ▶ providers/undo_provider.dart - + files/import_files.dart ▶ files/file_tiff.dart - + panels/side_panel/menu.dart ▶ files/save.dart - - models/text_object.dart ▶ constants/constants.dart + + models/halftone_fill.dart ▶ constants/constants.dart - + widgets/color_selector.dart ▶ widgets/material_free.dart - models/render_helper.dart ▶ models/text_object.dart + models/tool_descriptor.dart ▶ models/user_action_drawing.dart - + files/webp_encoder.dart ▶ files/webp_encoder_shared.dart - + widgets/main_view.dart ▶ widgets/effect_preview_bottom_sheet.dart - + constants/constants.dart ▶ constants/app_stroke.dart - + widgets/material_free.dart ▶ widgets/app_dropdown.dart - + providers/app_provider_selection.dart ▶ providers/fill_service.dart - + files/save.dart ▶ files/save_backup.dart - + panels/side_panel/share_panel.dart ▶ files/export_download_web.dart - + widgets/brush_size_picker.dart ▶ widgets/material_free.dart - - models/fill_model.dart ▶ models/visible_model.dart + + models/image_placement_model.dart ▶ models/visible_model.dart - + widgets/gradient_color_list_editor.dart ▶ widgets/color_preview.dart - + constants/constants.dart ▶ constants/app_visual.dart - + files/export_prepare.dart ▶ files/file_heic.dart - + providers/app_provider_tools.dart ▶ providers/fill_service.dart - + widgets/material_free.dart ▶ widgets/app_overlay.dart - + main.dart ▶ pages/settings_page.dart - models/transform_model.dart ▶ models/visible_model.dart + models/render_helper.dart ▶ models/text_object.dart - + widgets/app_snackbar.dart ▶ widgets/app_progress.dart - + widgets/text_attributes_widget.dart ▶ widgets/color_picker_dialog.dart - + constants/constants.dart ▶ constants/file_extensions.dart - + providers/app_provider_selection.dart ▶ providers/layer_crop_state.dart - + files/export_prepare.dart ▶ files/file_heic_web.dart - + widgets/text_style_toggle_buttons.dart ▶ widgets/app_buttons.dart - + providers/layer_provider.dart ▶ models/render_helper.dart - + recovery/draft_recovery_controller.dart ▶ files/file_ora.dart - - models/effect_preview_model.dart ▶ models/visible_model.dart + + models/fill_model.dart ▶ models/visible_model.dart - + widgets/shortcuts_help.dart ▶ widgets/material_free.dart - + widgets/text_attributes_widget.dart ▶ widgets/color_preview.dart - + constants/constants.dart ▶ constants/keys.dart - + files/file_tiff.dart ▶ files/tiff_constants.dart - + widgets/material_free.dart ▶ widgets/app_slider.dart - + main.dart ▶ pages/platforms_page.dart - + providers/app_provider.dart ▶ models/selector_model.dart - + widgets/brush_intensity_picker.dart ▶ widgets/base_picker.dart - + models/effect_labels.dart ▶ l10n/app_localizations.dart - + widgets/main_view.dart ▶ widgets/fill_widget.dart - + constants/constants.dart ▶ constants/app_colors.dart - + files/export_download_web.dart ▶ files/export_file_name.dart - + widgets/material_free.dart ▶ widgets/app_card.dart - + panels/side_panel/recent_files_dialog.dart ▶ files/file_ora.dart - + providers/app_provider_selection_commit.dart ▶ models/selector_model.dart - - models/selector_model.dart ▶ models/visible_model.dart + + widgets/brush_intensity_picker.dart ▶ widgets/material_free.dart - - widgets/brush_intensity_picker.dart ▶ widgets/material_free.dart + + models/transform_model.dart ▶ models/visible_model.dart - + widgets/selector_widget.dart ▶ widgets/overlay_control_widgets.dart - + constants/app_halftone.dart ▶ constants/app_math.dart - + files/file_webp.dart ▶ files/file_operation_exception.dart - + widgets/material_free.dart ▶ widgets/app_divider.dart - + shell_top_bar.dart ▶ files/import_files.dart - + providers/app_provider.dart ▶ models/effect_preview_model.dart - - models/selection_effect.dart ▶ helpers/image_effects.dart + + widgets/shell_selection_sub_toolbar.dart ▶ widgets/overlay_control_widgets.dart - - widgets/shell_selection_sub_toolbar.dart ▶ widgets/overlay_control_widgets.dart + + models/tool_family.dart ▶ l10n/app_localizations.dart - + constants/app_interaction_profiles.dart ▶ constants/app_layout.dart - + files/export_download_non_web.dart ▶ files/export_file_name.dart - + widgets/text_alignment_dropdown.dart ▶ widgets/app_dropdown.dart - + main_screen.dart ▶ files/import_files.dart - - models/brush_style.dart ▶ constants/constants.dart + + providers/app_provider_selection.dart ▶ models/selector_model.dart - - providers/layer_crop_state.dart ▶ models/user_action_drawing.dart + + models/effect_preview_model.dart ▶ models/visible_model.dart - + widgets/shortcuts.dart ▶ widgets/shortcuts_help.dart - + widgets/material_free.dart ▶ widgets/app_scaffold.dart - + constants/constants.dart ▶ constants/app_font_size.dart - + files/file_jpeg.dart ▶ files/file_operation_exception.dart - + main.dart ▶ files/import_files.dart - - models/halftone_fill.dart ▶ constants/constants.dart + + providers/app_provider_tools.dart ▶ models/selector_model.dart - - widgets/overlay_control_widgets.dart ▶ widgets/material_free.dart + + models/selector_model.dart ▶ models/visible_model.dart - - widgets/app_buttons.dart ▶ widgets/app_tooltip.dart + + widgets/main_view.dart ▶ widgets/overlay_control_widgets.dart - - constants/constants.dart ▶ constants/app_layout.dart + + widgets/overlay_control_widgets.dart ▶ widgets/material_free.dart - - files/import_files.dart ▶ files/file_heic.dart + + widgets/app_buttons.dart ▶ widgets/app_tooltip.dart - - models/canvas_resize.dart ▶ constants/constants.dart + + constants/constants.dart ▶ constants/app_layout.dart - - providers/shell_provider.dart ▶ models/canvas_resize.dart + + files/import_files.dart ▶ files/file_heic.dart - - providers/shell_provider.dart ▶ models/canvas_resize.dart + + models/tool_descriptor.dart ▶ models/app_icon_enum.dart - + widgets/color_preview.dart ▶ widgets/material_free.dart - + widgets/material_free.dart ▶ widgets/app_progress.dart - + constants/app_text_style.dart ▶ constants/app_strings.dart - + files/import_files.dart ▶ files/file_heic_web.dart - + main.dart ▶ files/save.dart - + models/transform_model.dart ▶ helpers/transform_helper.dart - + providers/app_provider.dart ▶ models/transform_model.dart - + widgets/material_free.dart ▶ widgets/app_switch.dart - + widgets/text_attributes_widget.dart ▶ widgets/brush_size_picker.dart - + constants/constants.dart ▶ constants/app_limits.dart - + files/save.dart ▶ files/export_file_name.dart - - models/selector_model.dart ▶ helpers/transform_helper.dart - - - - providers/app_provider_selection.dart ▶ models/selector_model.dart + + providers/layer_crop_state.dart ▶ models/user_action_drawing.dart - + widgets/material_free.dart ▶ widgets/app_text_field.dart - + widgets/text_attributes_widget.dart ▶ widgets/color_selector.dart - + constants/constants.dart ▶ constants/app_math.dart - + files/file_tiff.dart ▶ files/file_operation_exception.dart - - models/fill_model.dart ▶ helpers/draw_path_helper.dart + + models/canvas_resize.dart ▶ constants/constants.dart - + providers/app_provider.dart ▶ models/fill_model.dart - + widgets/material_free.dart ▶ widgets/app_tooltip.dart - + widgets/top_colors.dart ▶ widgets/material_free.dart - + constants/app_interaction_profiles.dart ▶ constants/interaction_input_modality.dart - + files/file_ora.dart ▶ files/file_operation_exception.dart - - models/selection_effect.dart ▶ constants/constants.dart - - - - providers/app_provider.dart ▶ models/image_placement_model.dart - - - + widgets/material_free.dart ▶ widgets/app_text.dart - + widgets/color_picker_dialog.dart ▶ widgets/material_free.dart - + files/save.dart ▶ files/file_operation_exception.dart - + constants/constants.dart ▶ constants/app_strings.dart - - providers/app_provider_tools.dart ▶ models/selector_model.dart + + providers/shell_provider.dart ▶ models/canvas_resize.dart + + + + providers/shell_provider.dart ▶ models/canvas_resize.dart - + widgets/tolerance_picker.dart ▶ widgets/base_picker.dart - + files/import_files.dart ▶ files/file_operation_exception.dart - + constants/app_interaction_profiles.dart ▶ constants/interaction_layout_profile.dart - - models/fill_model.dart ▶ constants/constants.dart - - - + pages/settings_page.dart ▶ widgets/shortcuts.dart - - providers/app_provider_selection.dart ▶ models/transform_model.dart + + models/tool_descriptor.dart ▶ l10n/app_localizations.dart - + widgets/halftone_size_picker.dart ▶ widgets/base_picker.dart - + constants/constants.dart ▶ constants/interaction_input_modality.dart - + panels/side_panel/share_panel.dart ▶ files/file_heic.dart - + + models/selection_effect.dart ▶ constants/constants.dart + + + widgets/text_alignment_dropdown.dart ▶ widgets/app_text.dart - - providers/fill_service.dart ▶ models/user_action_drawing.dart + + providers/app_provider.dart ▶ models/effect_brush_model.dart - + widgets/text_editor_dialog.dart ▶ widgets/text_formatting_controls.dart - + constants/app_interaction_profiles.dart ▶ constants/app_interaction.dart - + panels/side_panel/share_panel.dart ▶ files/file_heic_web.dart - - providers/fill_service.dart ▶ models/halftone_fill.dart + + providers/app_provider.dart ▶ models/image_placement_model.dart - + widgets/tolerance_picker.dart ▶ widgets/material_free.dart - + constants/constants.dart ▶ constants/interaction_layout_profile.dart - + panels/tools/tools_panel.dart ▶ widgets/text_attributes_widget.dart - - providers/layers_provider.dart ▶ models/canvas_resize.dart + + models/fill_model.dart ▶ helpers/draw_path_helper.dart - + + providers/app_provider_selection.dart ▶ models/transform_model.dart + + + widgets/brush_style_picker.dart ▶ widgets/base_picker.dart - + constants/constants.dart ▶ constants/app_interaction.dart - + panels/tools/tools_panel.dart ▶ widgets/gradient_color_list_editor.dart - + + models/effect_brush_model.dart ▶ constants/constants.dart + + + providers/app_provider_canvas.dart ▶ models/fill_model.dart - + widgets/halftone_size_picker.dart ▶ widgets/material_free.dart - + main_screen.dart ▶ widgets/main_view.dart - + widgets/canvas_panel.dart ▶ providers/layers_provider.dart - - providers/layer_provider.dart ▶ models/user_action_drawing.dart + + providers/fill_service.dart ▶ models/user_action_drawing.dart - + widgets/shell_selection_sub_toolbar.dart ▶ widgets/toolbar_icon_button.dart - - panels/tools/tools_panel.dart ▶ widgets/effect_intensity_controls.dart + + panels/tools/tools_panel.dart ▶ widgets/brush_style_picker.dart + + + + models/fill_model.dart ▶ constants/constants.dart - - providers/app_provider.dart ▶ models/image_placement_layer_restore_state.dart + + providers/app_provider_tools.dart ▶ models/fill_model.dart - + widgets/brush_style_picker.dart ▶ widgets/material_free.dart - + shell_top_bar.dart ▶ widgets/shell_selection_sub_toolbar.dart - - providers/app_provider_tools.dart ▶ models/fill_model.dart + + providers/fill_service.dart ▶ models/halftone_fill.dart - + widgets/effect_preview_bottom_sheet.dart ▶ widgets/material_free.dart - - providers/layers_provider.dart ▶ models/user_action_drawing.dart + + providers/layers_provider.dart ▶ models/canvas_resize.dart - + widgets/main_view.dart ▶ widgets/canvas_panel.dart - - panels/tools/tools_panel.dart ▶ widgets/brush_style_picker.dart + + panels/layers/layer_selector.dart ▶ widgets/color_picker_dialog.dart - - providers/app_provider.dart ▶ models/user_action_drawing.dart + + models/selector_model.dart ▶ helpers/transform_helper.dart - + widgets/nine_grid_selector.dart ▶ widgets/app_icon.dart - - providers/app_provider_selection.dart ▶ models/selection_effect.dart + + providers/layer_provider.dart ▶ models/user_action_drawing.dart - + widgets/text_attributes_widget.dart ▶ widgets/text_formatting_controls.dart - + main.dart ▶ widgets/shortcuts.dart - - widgets/effect_intensity_controls.dart ▶ widgets/app_button_row.dart + + providers/app_provider.dart ▶ models/image_placement_layer_restore_state.dart - - providers/app_provider_selection_commit.dart ▶ models/image_placement_layer_restore_state.dart + + widgets/effect_intensity_controls.dart ▶ widgets/app_button_row.dart - - providers/app_provider_selection.dart ▶ models/image_placement_layer_restore_state.dart + + providers/layers_provider.dart ▶ models/user_action_drawing.dart - + widgets/magnifying_eye_dropper.dart ▶ widgets/material_free.dart - - panels/layers/layer_selector.dart ▶ widgets/color_picker_dialog.dart + + panels/tools/tools_panel.dart ▶ widgets/halftone_size_picker.dart - - providers/layer_provider.dart ▶ models/text_object.dart + + providers/app_provider.dart ▶ models/user_action_drawing.dart - + widgets/overlay_control_widgets.dart ▶ widgets/app_icon.dart - - panels/tools/tools_panel.dart ▶ widgets/halftone_size_picker.dart + + panels/layers/layer_selector.dart ▶ widgets/color_preview.dart - - providers/layer_provider_storage_export.dart ▶ models/user_action_drawing.dart + + providers/app_provider_selection.dart ▶ models/selection_effect.dart - + widgets/color_preview.dart ▶ widgets/app_icon.dart - providers/app_provider.dart ▶ models/text_tool_state.dart + providers/app_provider_selection_commit.dart ▶ models/image_placement_layer_restore_state.dart - + widgets/shortcuts.dart ▶ widgets/confirm_discard_dialog.dart - - providers/app_provider_selection.dart ▶ models/user_action_drawing.dart + + providers/app_provider_selection.dart ▶ models/image_placement_layer_restore_state.dart - + widgets/text_attributes_widget.dart ▶ widgets/tool_attribute_widget.dart - - providers/app_provider.dart ▶ models/text_object.dart + + providers/layer_provider.dart ▶ models/text_object.dart - + widgets/text_editor_dialog.dart ▶ widgets/material_free.dart - - providers/app_provider_tools.dart ▶ models/user_action_drawing.dart + + providers/layer_provider_storage_export.dart ▶ models/user_action_drawing.dart - + widgets/effect_intensity_controls.dart ▶ widgets/app_snackbar.dart - - models/selector_model.dart ▶ helpers/draw_path_helper.dart - - - - models/selector_model.dart ▶ helpers/draw_path_helper.dart + + providers/app_provider.dart ▶ models/text_tool_state.dart - + widgets/text_editor.dart ▶ widgets/material_free.dart - + panels/tools/tools_panel.dart ▶ widgets/tolerance_picker.dart - - models/transform_model.dart ▶ constants/constants.dart + + providers/app_provider_selection.dart ▶ models/user_action_drawing.dart - + widgets/color_picker_dialog.dart ▶ widgets/app_icon.dart - - models/effect_preview_model.dart ▶ constants/constants.dart + + providers/app_provider.dart ▶ models/text_object.dart - + widgets/shortcuts.dart ▶ widgets/material_free.dart - - models/render_helper.dart ▶ constants/constants.dart + + widgets/text_attributes_widget.dart ▶ widgets/material_free.dart - - widgets/text_attributes_widget.dart ▶ widgets/material_free.dart + + models/selector_model.dart ▶ helpers/draw_path_helper.dart - - models/selector_model.dart ▶ constants/constants.dart + + models/selector_model.dart ▶ helpers/draw_path_helper.dart - + widgets/tolerance_picker.dart ▶ widgets/app_icon.dart - - providers/fill_service.dart ▶ helpers/image_helper.dart + + providers/app_provider_tools.dart ▶ models/user_action_drawing.dart - + widgets/halftone_size_picker.dart ▶ widgets/app_icon.dart - - providers/macos_bookmark_service.dart ▶ helpers/log_helper.dart + + models/transform_model.dart ▶ constants/constants.dart - + widgets/selector_widget.dart ▶ widgets/material_free.dart - - providers/layer_provider.dart ▶ helpers/image_helper.dart + + models/effect_preview_model.dart ▶ constants/constants.dart - + widgets/brush_style_picker.dart ▶ widgets/app_icon.dart - - providers/layers_provider.dart ▶ helpers/image_helper.dart + + models/render_helper.dart ▶ constants/constants.dart - + widgets/effect_intensity_controls.dart ▶ widgets/app_slider.dart - - providers/app_provider.dart ▶ helpers/image_helper.dart + + models/selector_model.dart ▶ constants/constants.dart - + widgets/gradient_color_list_editor.dart ▶ widgets/app_buttons.dart - - providers/layer_provider.dart ▶ helpers/color_helper.dart + + providers/fill_service.dart ▶ helpers/image_helper.dart - + widgets/shell_selection_sub_toolbar.dart ▶ widgets/material_free.dart - - providers/undo_provider.dart ▶ helpers/log_helper.dart + + providers/macos_bookmark_service.dart ▶ helpers/log_helper.dart - + widgets/canvas_gesture_handler.dart ▶ widgets/material_free.dart - - panels/layers/layer_selector.dart ▶ widgets/color_preview.dart + + panels/tools/tools_panel.dart ▶ widgets/color_picker_dialog.dart - - providers/layers_provider.dart ▶ helpers/color_helper.dart + + providers/layer_provider.dart ▶ helpers/image_helper.dart - + widgets/color_wheel_selector.dart ▶ widgets/transparent_background.dart - - providers/app_preferences.dart ▶ helpers/log_helper.dart + + providers/layers_provider.dart ▶ helpers/image_helper.dart - + widgets/effect_intensity_controls.dart ▶ widgets/app_icon.dart - - panels/tools/tools_panel.dart ▶ widgets/color_picker_dialog.dart + + panels/tools/tools_panel.dart ▶ widgets/top_colors.dart - - providers/app_provider_selection.dart ▶ helpers/transform_helper.dart + + providers/app_provider.dart ▶ helpers/image_helper.dart - + widgets/color_selector.dart ▶ widgets/transparent_background.dart - - providers/layer_provider_storage_export.dart ▶ helpers/image_helper.dart + + providers/layer_provider.dart ▶ helpers/color_helper.dart - + widgets/main_view.dart ▶ widgets/material_free.dart - - panels/tools/tools_panel.dart ▶ widgets/top_colors.dart + + panels/tools/tools_panel.dart ▶ widgets/color_preview.dart - - providers/flood_fill.dart ▶ constants/constants.dart + + providers/undo_provider.dart ▶ helpers/log_helper.dart - + widgets/color_preview.dart ▶ widgets/transparent_background.dart - - providers/app_provider_selection.dart ▶ helpers/image_helper.dart + + providers/layers_provider.dart ▶ helpers/color_helper.dart - + widgets/fill_widget.dart ▶ widgets/marching_ants_path.dart - - providers/undo_provider.dart ▶ constants/constants.dart + + providers/app_preferences.dart ▶ helpers/log_helper.dart - + widgets/text_attributes_widget.dart ▶ widgets/app_icon.dart - - providers/app_provider_canvas.dart ▶ helpers/image_helper.dart + + providers/app_provider_selection.dart ▶ helpers/transform_helper.dart - + widgets/top_colors.dart ▶ widgets/transparent_background.dart - - providers/layer_provider.dart ▶ helpers/draw_path_helper.dart + + providers/layer_provider_storage_export.dart ▶ helpers/image_helper.dart - + widgets/color_picker_dialog.dart ▶ widgets/transparent_background.dart - - providers/shell_provider.dart ▶ constants/constants.dart + + providers/flood_fill.dart ▶ constants/constants.dart - + widgets/magnifying_eye_dropper.dart ▶ widgets/draw_rect.dart - - providers/app_preferences.dart ▶ constants/constants.dart + + providers/app_provider_selection.dart ▶ helpers/image_helper.dart - + widgets/selector_widget.dart ▶ widgets/app_icon.dart - - panels/tools/tools_panel.dart ▶ widgets/color_preview.dart + + panels/tools/tools_panel.dart ▶ widgets/brush_intensity_picker.dart - - providers/fill_service.dart ▶ constants/constants.dart + + providers/undo_provider.dart ▶ constants/constants.dart - + widgets/canvas_panel_painter.dart ▶ providers/layer_provider.dart - - providers/layers_provider.dart ▶ helpers/log_helper.dart + + providers/app_provider_canvas.dart ▶ helpers/image_helper.dart - + widgets/shell_selection_sub_toolbar.dart ▶ widgets/app_icon.dart - - providers/wand_selection_manager.dart ▶ constants/constants.dart + + providers/layer_provider.dart ▶ helpers/draw_path_helper.dart - + widgets/gradient_color_list_editor.dart ▶ widgets/app_text_field.dart - + widgets/color_picker_dialog.dart ▶ providers/layers_provider.dart - - providers/layer_provider.dart ▶ constants/constants.dart - - - - providers/layers_provider.dart ▶ constants/constants.dart + + providers/shell_provider.dart ▶ constants/constants.dart - + widgets/selector_widget.dart ▶ widgets/marching_ants_path.dart - - providers/app_provider.dart ▶ constants/constants.dart + + providers/app_preferences.dart ▶ constants/constants.dart - + widgets/effect_intensity_controls.dart ▶ providers/app_provider_selection.dart - - providers/layer_provider_storage_export.dart ▶ constants/constants.dart + + providers/layers_provider.dart ▶ helpers/log_helper.dart - + widgets/effect_preview_bottom_sheet.dart ▶ providers/app_provider_selection.dart - - providers/app_provider_selection.dart ▶ constants/constants.dart + + providers/fill_service.dart ▶ constants/constants.dart - + files/import_files.dart ▶ widgets/confirm_discard_dialog.dart - - widgets/effect_intensity_controls.dart ▶ providers/app_provider.dart + + providers/wand_selection_manager.dart ▶ constants/constants.dart - - files/import_files.dart ▶ widgets/material_free.dart + + widgets/effect_intensity_controls.dart ▶ providers/app_provider.dart - - widgets/app_icon.dart ▶ models/app_icon_enum.dart + + providers/layer_provider.dart ▶ constants/constants.dart - + widgets/effect_preview_bottom_sheet.dart ▶ providers/app_provider.dart - - widgets/shortcuts.dart ▶ providers/app_provider_canvas.dart + + providers/layers_provider.dart ▶ constants/constants.dart - - providers/app_provider_canvas.dart ▶ constants/constants.dart + + files/import_files.dart ▶ widgets/material_free.dart - - widgets/magnifying_eye_dropper.dart ▶ providers/layers_provider.dart + + providers/app_provider.dart ▶ constants/constants.dart - - widgets/shortcuts.dart ▶ providers/app_provider_selection.dart + + widgets/shortcuts.dart ▶ providers/app_provider_canvas.dart - - widgets/text_editor.dart ▶ providers/app_provider.dart + + providers/layer_provider_storage_export.dart ▶ constants/constants.dart - - widgets/app_buttons.dart ▶ models/app_icon_enum.dart + + widgets/shortcuts.dart ▶ providers/app_provider_selection.dart + + + + providers/app_provider_selection.dart ▶ constants/constants.dart - + pages/platforms_page.dart ▶ widgets/material_free.dart - + + widgets/app_icon.dart ▶ models/app_icon_enum.dart + + + + widgets/magnifying_eye_dropper.dart ▶ providers/layers_provider.dart + + + widgets/canvas_gesture_handler.dart ▶ providers/app_provider_tools.dart - - widgets/transparent_background.dart ▶ constants/constants.dart + + providers/app_provider_canvas.dart ▶ constants/constants.dart - - panels/tools/tools_panel.dart ▶ widgets/brush_intensity_picker.dart + + widgets/text_editor.dart ▶ providers/app_provider.dart - - widgets/app_button_row.dart ▶ models/app_icon_enum.dart + + widgets/app_buttons.dart ▶ models/app_icon_enum.dart - + pages/settings_page.dart ▶ widgets/material_free.dart - + widgets/canvas_gesture_handler.dart ▶ providers/app_provider_canvas.dart - + widgets/main_view.dart ▶ providers/app_provider_tools.dart - + widgets/shell_selection_sub_toolbar.dart ▶ providers/app_provider_selection.dart - + widgets/shortcuts.dart ▶ providers/app_provider.dart - + widgets/canvas_gesture_handler.dart ▶ providers/app_provider_selection.dart - + widgets/main_view.dart ▶ providers/app_provider_canvas.dart - + widgets/text_attributes_widget.dart ▶ providers/app_provider.dart - + widgets/transform_widget.dart ▶ providers/shell_provider.dart - + widgets/main_view.dart ▶ providers/app_provider_selection.dart - + + widgets/shell_selection_sub_toolbar.dart ▶ providers/app_provider.dart + + + + widgets/transparent_background.dart ▶ constants/constants.dart + + + panels/tools/tools_panel.dart ▶ widgets/brush_size_picker.dart - - widgets/app_text.dart ▶ constants/constants.dart + + widgets/canvas_gesture_handler.dart ▶ providers/app_provider.dart - - widgets/shell_selection_sub_toolbar.dart ▶ providers/app_provider.dart + + widgets/app_button_row.dart ▶ models/app_icon_enum.dart - + panels/tools/tools_panel.dart ▶ widgets/color_selector.dart - - widgets/marching_ants_path.dart ▶ constants/constants.dart + + widgets/app_text.dart ▶ constants/constants.dart - + panels/layers/layer_selector.dart ▶ widgets/container_slider.dart - - widgets/text_style_toggle_buttons.dart ▶ models/text_tool_state.dart + + widgets/main_view.dart ▶ providers/app_provider.dart - - widgets/canvas_gesture_handler.dart ▶ providers/app_provider.dart + + widgets/marching_ants_path.dart ▶ constants/constants.dart - + panels/layers/layer_selector.dart ▶ widgets/truncated_text.dart - - widgets/app_tooltip.dart ▶ constants/constants.dart - - - - widgets/main_view.dart ▶ providers/app_provider.dart + + widgets/shortcuts.dart ▶ providers/shell_provider.dart - + panels/side_panel/canvas_settings.dart ▶ widgets/nine_grid_selector.dart - - widgets/app_text_field.dart ▶ constants/constants.dart + + widgets/text_style_toggle_buttons.dart ▶ models/text_tool_state.dart - - widgets/shortcuts.dart ▶ providers/shell_provider.dart + + recovery/draft_recovery_controller.dart ▶ widgets/app_snackbar.dart - - recovery/draft_recovery_controller.dart ▶ widgets/app_snackbar.dart + + widgets/app_tooltip.dart ▶ constants/constants.dart - - widgets/app_switch.dart ▶ constants/constants.dart + + widgets/selector_widget.dart ▶ providers/shell_provider.dart - + panels/layers/blend_mode.dart ▶ widgets/material_free.dart - - widgets/app_progress.dart ▶ constants/constants.dart + + widgets/app_text_field.dart ▶ constants/constants.dart - - widgets/selector_widget.dart ▶ providers/shell_provider.dart + + widgets/canvas_gesture_handler.dart ▶ providers/app_preferences.dart + + + + widgets/shell_selection_sub_toolbar.dart ▶ providers/shell_provider.dart + + + + panels/layers/layer_selector.dart ▶ widgets/material_free.dart + + + + widgets/app_switch.dart ▶ constants/constants.dart + + + + widgets/canvas_gesture_handler.dart ▶ providers/shell_provider.dart - + panels/tools/tools_panel.dart ▶ widgets/tool_attribute_widget.dart - - widgets/image_painter.dart ▶ constants/constants.dart + + widgets/app_progress.dart ▶ constants/constants.dart - - widgets/canvas_gesture_handler.dart ▶ providers/app_preferences.dart + + widgets/canvas_gesture_handler.dart ▶ providers/undo_provider.dart - - widgets/shell_selection_sub_toolbar.dart ▶ providers/shell_provider.dart + + widgets/main_view.dart ▶ providers/shell_provider.dart - - panels/layers/layer_selector.dart ▶ widgets/material_free.dart + + panels/tools/tool_family_rail.dart ▶ widgets/side_panel_header.dart - - widgets/draw_rect.dart ▶ constants/constants.dart + + widgets/image_painter.dart ▶ constants/constants.dart - + shell_top_bar.dart ▶ widgets/overlay_control_widgets.dart - - widgets/text_style_toggle_buttons.dart ▶ models/app_icon_enum.dart + + widgets/draw_rect.dart ▶ constants/constants.dart - - widgets/canvas_gesture_handler.dart ▶ providers/shell_provider.dart + + shell_top_bar.dart ▶ widgets/toolbar_icon_button.dart - - panels/tools/tools_panel.dart ▶ widgets/side_panel_header.dart + + widgets/text_style_toggle_buttons.dart ▶ models/app_icon_enum.dart - - widgets/app_scaffold.dart ▶ constants/constants.dart + + panels/tools/tools_panel.dart ▶ widgets/material_free.dart - - widgets/nine_grid_selector.dart ▶ models/canvas_resize.dart + + widgets/app_scaffold.dart ▶ constants/constants.dart - - widgets/canvas_gesture_handler.dart ▶ providers/undo_provider.dart + + widgets/fill_widget.dart ▶ models/fill_model.dart - - widgets/main_view.dart ▶ providers/shell_provider.dart + + widgets/nine_grid_selector.dart ▶ models/canvas_resize.dart - - panels/tools/tools_panel.dart ▶ widgets/material_free.dart + + panels/tools/tool_family_rail.dart ▶ widgets/app_buttons.dart - + widgets/app_overlay_surface.dart ▶ constants/constants.dart - - shell_top_bar.dart ▶ widgets/toolbar_icon_button.dart + + panels/side_panel/recent_files_dialog.dart ▶ widgets/confirm_discard_dialog.dart - + widgets/confirm_discard_dialog.dart ▶ l10n/app_localizations.dart - + panels/side_panel/attribution_dialog.dart ▶ widgets/material_free.dart - + widgets/app_overlay_menu_item.dart ▶ constants/constants.dart - - widgets/fill_widget.dart ▶ models/fill_model.dart - - - + panels/side_panel/top_menu_and_layers_panel.dart ▶ widgets/side_panel_header.dart - + widgets/app_divider.dart ▶ constants/constants.dart - + panels/side_panel/about.dart ▶ widgets/material_free.dart - + widgets/app_card.dart ▶ constants/constants.dart - + widgets/text_alignment_dropdown.dart ▶ l10n/app_localizations.dart - + panels/side_panel/side_panel.dart ▶ widgets/side_panel_header.dart - + widgets/app_icon.dart ▶ constants/constants.dart - + + widgets/transform_widget.dart ▶ models/transform_model.dart + + + panels/side_panel/canvas_settings.dart ▶ widgets/material_free.dart - + widgets/app_slider.dart ▶ constants/constants.dart - + widgets/toolbar_icon_button.dart ▶ models/app_icon_enum.dart - - panels/side_panel/recent_files_dialog.dart ▶ widgets/confirm_discard_dialog.dart + + panels/side_panel/side_panel.dart ▶ widgets/material_free.dart - + widgets/app_overlay.dart ▶ constants/constants.dart - - panels/side_panel/side_panel.dart ▶ widgets/material_free.dart + + panels/side_panel/share_panel.dart ▶ widgets/material_free.dart - + widgets/app_snackbar.dart ▶ helpers/log_helper.dart - - widgets/transform_widget.dart ▶ models/transform_model.dart - - - - panels/side_panel/share_panel.dart ▶ widgets/material_free.dart + + panels/side_panel/recent_files_dialog.dart ▶ widgets/material_free.dart - + widgets/app_dropdown.dart ▶ constants/constants.dart - + widgets/effect_intensity_controls.dart ▶ models/effect_labels.dart - - panels/side_panel/recent_files_dialog.dart ▶ widgets/material_free.dart + + panels/side_panel/menu.dart ▶ widgets/material_free.dart - + widgets/app_list_tile.dart ▶ constants/constants.dart - + widgets/effect_intensity_controls.dart ▶ models/selection_effect.dart - - panels/side_panel/menu.dart ▶ widgets/material_free.dart + + widgets/selector_widget.dart ▶ models/selector_model.dart - - widgets/app_bottom_sheet.dart ▶ constants/constants.dart + + shell_top_bar.dart ▶ widgets/material_free.dart - - widgets/effect_preview_bottom_sheet.dart ▶ models/selection_effect.dart + + widgets/app_bottom_sheet.dart ▶ constants/constants.dart - - shell_top_bar.dart ▶ widgets/material_free.dart + + files/file_ora.dart ▶ providers/layer_provider_storage_export.dart - - widgets/app_snackbar.dart ▶ constants/constants.dart + + widgets/effect_preview_bottom_sheet.dart ▶ models/selection_effect.dart - - widgets/nine_grid_selector.dart ▶ models/app_icon_enum.dart + + widgets/gradient_color_list_editor.dart ▶ models/fill_model.dart - - widgets/selector_widget.dart ▶ models/selector_model.dart + + widgets/shell_selection_sub_toolbar.dart ▶ models/selector_model.dart - + main_screen.dart ▶ widgets/material_free.dart - - widgets/app_buttons.dart ▶ constants/constants.dart + + widgets/app_snackbar.dart ▶ constants/constants.dart - - widgets/gradient_color_list_editor.dart ▶ models/fill_model.dart + + widgets/canvas_gesture_handler.dart ▶ models/selector_model.dart - - widgets/shell_selection_sub_toolbar.dart ▶ models/selector_model.dart + + widgets/nine_grid_selector.dart ▶ models/app_icon_enum.dart + + + + panels/layers/layer_selector.dart ▶ widgets/app_icon.dart - + main.dart ▶ widgets/material_free.dart - + + widgets/app_buttons.dart ▶ constants/constants.dart + + + + files/file_tiff.dart ▶ providers/layers_provider.dart + + + widgets/app_button_row.dart ▶ constants/constants.dart - + widgets/brush_size_picker.dart ▶ l10n/app_localizations.dart - - files/file_ora.dart ▶ providers/layer_provider_storage_export.dart + + files/file_ora.dart ▶ providers/layers_provider.dart - - widgets/brush_style_picker.dart ▶ models/brush_style.dart + + files/import_files.dart ▶ providers/app_provider_canvas.dart - - widgets/canvas_gesture_handler.dart ▶ models/selector_model.dart + + widgets/brush_style_picker.dart ▶ models/brush_style.dart - + widgets/overlay_control_widgets.dart ▶ models/app_icon_enum.dart - + widgets/app_popup_menu.dart ▶ constants/constants.dart - + widgets/shortcuts_help.dart ▶ l10n/app_localizations.dart - - widgets/color_preview.dart ▶ models/app_icon_enum.dart + + panels/tools/tool_family_rail.dart ▶ widgets/app_slider.dart - - panels/layers/layer_selector.dart ▶ widgets/app_icon.dart + + files/export_prepare.dart ▶ providers/layers_provider.dart + + + + widgets/color_preview.dart ▶ models/app_icon_enum.dart - + widgets/app_dialog.dart ▶ constants/constants.dart - - files/file_tiff.dart ▶ providers/layers_provider.dart + + files/export_download_web.dart ▶ providers/layers_provider.dart - - widgets/top_colors.dart ▶ models/app_icon_enum.dart + + files/save_backup.dart ▶ providers/app_preferences.dart - - widgets/brush_intensity_picker.dart ▶ l10n/app_localizations.dart + + widgets/canvas_gesture_handler.dart ▶ models/fill_model.dart - - files/file_ora.dart ▶ providers/layers_provider.dart + + widgets/main_view.dart ▶ models/transform_model.dart - - files/import_files.dart ▶ providers/app_provider_canvas.dart + + widgets/top_colors.dart ▶ models/app_icon_enum.dart - - widgets/color_picker_dialog.dart ▶ models/app_icon_enum.dart + + widgets/brush_intensity_picker.dart ▶ l10n/app_localizations.dart - - widgets/base_picker.dart ▶ constants/constants.dart + + panels/tools/tools_panel.dart ▶ widgets/app_icon.dart - - widgets/overlay_control_widgets.dart ▶ l10n/app_localizations.dart + + files/export_download_non_web.dart ▶ providers/layers_provider.dart - - files/export_prepare.dart ▶ providers/layers_provider.dart + + widgets/color_picker_dialog.dart ▶ models/app_icon_enum.dart - - widgets/canvas_gesture_handler.dart ▶ models/fill_model.dart + + widgets/main_view.dart ▶ models/fill_model.dart - - widgets/main_view.dart ▶ models/transform_model.dart + + widgets/base_picker.dart ▶ constants/constants.dart - - widgets/selector_widget.dart ▶ models/effect_labels.dart + + widgets/overlay_control_widgets.dart ▶ l10n/app_localizations.dart - - widgets/text_editor.dart ▶ models/user_action_drawing.dart + + files/import_files.dart ▶ providers/app_provider.dart - - widgets/side_panel_header.dart ▶ constants/constants.dart + + files/save.dart ▶ providers/layers_provider.dart - - panels/tools/tools_panel.dart ▶ widgets/app_icon.dart + + widgets/selector_widget.dart ▶ models/effect_labels.dart - - files/export_download_web.dart ▶ providers/layers_provider.dart + + widgets/text_editor.dart ▶ models/user_action_drawing.dart - - files/save_backup.dart ▶ providers/app_preferences.dart + + panels/layers/layer_thumbnail.dart ▶ widgets/image_painter.dart - - widgets/main_view.dart ▶ models/fill_model.dart + + widgets/side_panel_header.dart ▶ constants/constants.dart - + widgets/selector_widget.dart ▶ models/selection_effect.dart - + widgets/shell_selection_sub_toolbar.dart ▶ models/effect_labels.dart - + widgets/tolerance_picker.dart ▶ models/app_icon_enum.dart - + widgets/top_colors.dart ▶ l10n/app_localizations.dart - - files/export_download_non_web.dart ▶ providers/layers_provider.dart + + files/export_download_web.dart ▶ providers/app_preferences.dart - + widgets/halftone_size_picker.dart ▶ models/app_icon_enum.dart - + widgets/shell_selection_sub_toolbar.dart ▶ models/selection_effect.dart - + widgets/shortcuts.dart ▶ models/user_action_drawing.dart - + widgets/text_editor_dialog.dart ▶ models/text_tool_state.dart - + widgets/tool_attribute_widget.dart ▶ constants/constants.dart - + widgets/color_picker_dialog.dart ▶ l10n/app_localizations.dart - - files/import_files.dart ▶ providers/app_provider.dart + + files/export_download_non_web.dart ▶ providers/app_preferences.dart - - files/save.dart ▶ providers/layers_provider.dart + + files/save_backup.dart ▶ providers/macos_bookmark_service.dart - + widgets/brush_style_picker.dart ▶ models/app_icon_enum.dart - - widgets/text_editor.dart ▶ models/text_tool_state.dart + + widgets/canvas_gesture_handler.dart ▶ models/selection_effect.dart - - widgets/text_editor_dialog.dart ▶ models/text_object.dart + + widgets/text_editor.dart ▶ models/text_tool_state.dart - - panels/layers/layer_thumbnail.dart ▶ widgets/image_painter.dart + + widgets/text_editor_dialog.dart ▶ models/text_object.dart - + widgets/text_style_toggle_buttons.dart ▶ constants/constants.dart - + widgets/fill_widget.dart ▶ l10n/app_localizations.dart - + + files/save.dart ▶ providers/app_preferences.dart + + + widgets/main_view.dart ▶ models/selection_effect.dart - + widgets/text_editor.dart ▶ models/text_object.dart - + widgets/text_alignment_dropdown.dart ▶ constants/constants.dart - + widgets/color_selector.dart ▶ helpers/list_helper.dart - + widgets/tolerance_picker.dart ▶ l10n/app_localizations.dart - - files/export_download_web.dart ▶ providers/app_preferences.dart + + files/import_files.dart ▶ providers/app_preferences.dart - + + files/save.dart ▶ providers/shell_provider.dart + + + widgets/canvas_gesture_handler.dart ▶ models/image_placement_layer_restore_state.dart - + widgets/shell_selection_sub_toolbar.dart ▶ models/user_action_drawing.dart - + widgets/halftone_size_picker.dart ▶ l10n/app_localizations.dart - - files/export_download_non_web.dart ▶ providers/app_preferences.dart - - - - files/save_backup.dart ▶ providers/macos_bookmark_service.dart + + files/import_files.dart ▶ providers/shell_provider.dart - + widgets/canvas_gesture_handler.dart ▶ models/user_action_drawing.dart - + widgets/text_attributes_widget.dart ▶ models/text_tool_state.dart - + widgets/transform_widget.dart ▶ models/app_icon_enum.dart - + widgets/truncated_text.dart ▶ constants/constants.dart - + widgets/brush_style_picker.dart ▶ l10n/app_localizations.dart - - files/save.dart ▶ providers/app_preferences.dart - - - + widgets/magnifying_eye_dropper.dart ▶ models/app_icon_enum.dart - + widgets/main_view.dart ▶ models/user_action_drawing.dart - + + panels/layers/layer_thumbnail.dart ▶ widgets/transparent_background.dart + + + widgets/container_slider.dart ▶ constants/constants.dart - - widgets/effect_intensity_controls.dart ▶ l10n/app_localizations.dart + + recovery/draft_recovery_controller.dart ▶ providers/app_provider_canvas.dart - - files/import_files.dart ▶ providers/app_preferences.dart + + panels/side_panel/share_panel.dart ▶ widgets/app_icon.dart - - files/save.dart ▶ providers/shell_provider.dart + + widgets/effect_intensity_controls.dart ▶ l10n/app_localizations.dart + + + + files/export_download_non_web.dart ▶ providers/macos_bookmark_service.dart - + widgets/text_editor_dialog.dart ▶ models/app_icon_enum.dart - + widgets/canvas_panel_painter.dart ▶ constants/constants.dart - + widgets/shortcuts_help.dart ▶ helpers/shortcuts_constants.dart - + widgets/top_colors.dart ▶ helpers/image_helper.dart - + + panels/side_panel/recent_files_dialog.dart ▶ widgets/app_icon.dart + + + widgets/effect_preview_bottom_sheet.dart ▶ l10n/app_localizations.dart - - files/import_files.dart ▶ providers/shell_provider.dart + + files/save.dart ▶ providers/macos_bookmark_service.dart - + widgets/color_preview.dart ▶ helpers/color_helper.dart - - panels/side_panel/share_panel.dart ▶ widgets/app_icon.dart + + panels/side_panel/menu.dart ▶ widgets/app_icon.dart + + + + pages/settings_page.dart ▶ providers/app_preferences.dart - + widgets/transform_widget.dart ▶ l10n/app_localizations.dart - + widgets/canvas_gesture_handler.dart ▶ models/text_object.dart - + widgets/gradient_color_list_editor.dart ▶ models/app_icon_enum.dart - - panels/layers/layer_thumbnail.dart ▶ widgets/transparent_background.dart - - - + widgets/toolbar_icon_button.dart ▶ constants/constants.dart - - recovery/draft_recovery_controller.dart ▶ providers/app_provider_canvas.dart - - - + widgets/top_colors.dart ▶ helpers/color_helper.dart - - panels/side_panel/recent_files_dialog.dart ▶ widgets/app_icon.dart - - - - files/export_download_non_web.dart ▶ providers/macos_bookmark_service.dart - - - + widgets/color_wheel_selector.dart ▶ constants/constants.dart - - widgets/color_picker_dialog.dart ▶ helpers/color_helper.dart + + recovery/draft_recovery_controller.dart ▶ providers/app_provider.dart - - panels/side_panel/menu.dart ▶ widgets/app_icon.dart + + widgets/color_picker_dialog.dart ▶ helpers/color_helper.dart - + widgets/text_editor_dialog.dart ▶ l10n/app_localizations.dart - - files/save.dart ▶ providers/macos_bookmark_service.dart - - - + widgets/text_attributes_widget.dart ▶ models/app_icon_enum.dart - + widgets/color_selector.dart ▶ constants/constants.dart - - pages/settings_page.dart ▶ providers/app_preferences.dart - - - + widgets/text_editor.dart ▶ l10n/app_localizations.dart - + widgets/selector_widget.dart ▶ models/app_icon_enum.dart - + widgets/brush_size_picker.dart ▶ constants/constants.dart - + widgets/gradient_color_list_editor.dart ▶ l10n/app_localizations.dart - + widgets/shell_selection_sub_toolbar.dart ▶ models/app_icon_enum.dart - + widgets/shortcuts_help.dart ▶ constants/constants.dart - - recovery/draft_recovery_controller.dart ▶ providers/app_provider.dart - - - + widgets/nine_grid_selector.dart ▶ constants/constants.dart - + widgets/transform_widget.dart ▶ helpers/transform_helper.dart - + widgets/text_attributes_widget.dart ▶ l10n/app_localizations.dart - + + panels/layers/layer_selector.dart ▶ providers/app_provider_selection.dart + + + widgets/brush_intensity_picker.dart ▶ constants/constants.dart - + + recovery/draft_recovery_controller.dart ▶ providers/app_preferences.dart + + + widgets/color_picker_dialog.dart ▶ helpers/log_helper.dart - + widgets/selector_widget.dart ▶ l10n/app_localizations.dart - + widgets/overlay_control_widgets.dart ▶ constants/constants.dart - + + recovery/draft_recovery_controller.dart ▶ providers/shell_provider.dart + + + widgets/magnifying_eye_dropper.dart ▶ helpers/image_helper.dart - + widgets/shell_selection_sub_toolbar.dart ▶ l10n/app_localizations.dart - + widgets/color_preview.dart ▶ constants/constants.dart - + + panels/tools/tools_panel.dart ▶ providers/app_provider_tools.dart + + + widgets/canvas_gesture_handler.dart ▶ l10n/app_localizations.dart - - panels/layers/layer_selector.dart ▶ providers/app_provider_selection.dart + + panels/layers/layer_selector.dart ▶ providers/app_provider.dart - + widgets/top_colors.dart ▶ constants/constants.dart - - recovery/draft_recovery_controller.dart ▶ providers/app_preferences.dart + + panels/tools/tool_family_rail.dart ▶ providers/app_provider_selection.dart - - widgets/main_view.dart ▶ l10n/app_localizations.dart + + panels/tools/tools_panel.dart ▶ providers/app_provider_canvas.dart - - widgets/color_picker_dialog.dart ▶ constants/constants.dart + + widgets/main_view.dart ▶ l10n/app_localizations.dart - - recovery/draft_recovery_controller.dart ▶ providers/shell_provider.dart + + panels/layers/layer_thumbnail.dart ▶ providers/layer_provider.dart - - panels/tools/tools_panel.dart ▶ providers/app_provider_tools.dart + + widgets/color_picker_dialog.dart ▶ constants/constants.dart - + widgets/fill_widget.dart ▶ constants/constants.dart - - panels/tools/tools_panel.dart ▶ providers/app_provider_canvas.dart - - - - panels/layers/layer_selector.dart ▶ providers/app_provider.dart - - - + widgets/tolerance_picker.dart ▶ constants/constants.dart - + widgets/selector_widget.dart ▶ helpers/transform_helper.dart - - panels/tools/tools_panel.dart ▶ providers/app_provider_selection.dart + + panels/tools/tool_family_rail.dart ▶ providers/app_provider.dart - - panels/layers/layer_thumbnail.dart ▶ providers/layer_provider.dart - - - + widgets/halftone_size_picker.dart ▶ constants/constants.dart - + widgets/canvas_gesture_handler.dart ▶ helpers/smudge_helper.dart - + + panels/tools/tools_panel.dart ▶ providers/app_provider.dart + + + + widgets/canvas_gesture_handler.dart ▶ helpers/transform_helper.dart + + + widgets/effect_intensity_controls.dart ▶ constants/constants.dart - + widgets/canvas_gesture_handler.dart ▶ helpers/image_helper.dart - + widgets/shell_selection_sub_toolbar.dart ▶ helpers/shortcut_tooltip.dart - - panels/tools/tools_panel.dart ▶ providers/app_provider.dart + + panels/layers/layer_selector.dart ▶ providers/undo_provider.dart - + widgets/effect_preview_bottom_sheet.dart ▶ constants/constants.dart - + widgets/transform_widget.dart ▶ constants/constants.dart - + widgets/magnifying_eye_dropper.dart ▶ constants/constants.dart - - panels/layers/layer_selector.dart ▶ providers/undo_provider.dart + + panels/side_panel/side_panel.dart ▶ providers/app_provider_selection.dart - + widgets/text_editor_dialog.dart ▶ constants/constants.dart - + + panels/side_panel/recent_files_dialog.dart ▶ providers/app_provider_canvas.dart + + + widgets/canvas_gesture_handler.dart ▶ helpers/draft_flusher.dart - + widgets/selector_widget.dart ▶ helpers/draw_path_helper.dart - + widgets/shell_selection_sub_toolbar.dart ▶ helpers/shortcuts_constants.dart - + widgets/text_editor.dart ▶ constants/constants.dart - - panels/side_panel/side_panel.dart ▶ providers/app_provider_selection.dart - - - - widgets/gradient_color_list_editor.dart ▶ constants/constants.dart - - - - panels/side_panel/recent_files_dialog.dart ▶ providers/app_provider_canvas.dart - - - - widgets/shortcuts.dart ▶ constants/constants.dart - - - + panels/side_panel/canvas_settings.dart ▶ providers/app_provider.dart - + panels/side_panel/menu.dart ▶ providers/app_provider_canvas.dart - + panels/side_panel/recent_files_dialog.dart ▶ providers/app_provider_selection.dart - + panels/side_panel/top_menu_and_layers_panel.dart ▶ providers/layers_provider.dart - - widgets/text_attributes_widget.dart ▶ constants/constants.dart + + widgets/gradient_color_list_editor.dart ▶ constants/constants.dart - + panels/side_panel/side_panel.dart ▶ providers/app_provider.dart - - widgets/selector_widget.dart ▶ constants/constants.dart + + widgets/shortcuts.dart ▶ constants/constants.dart - + panels/side_panel/share_panel.dart ▶ providers/app_provider.dart - - widgets/shell_selection_sub_toolbar.dart ▶ constants/constants.dart + + widgets/text_attributes_widget.dart ▶ constants/constants.dart - + panels/side_panel/recent_files_dialog.dart ▶ providers/app_provider.dart - - widgets/canvas_gesture_handler.dart ▶ constants/constants.dart + + widgets/selector_widget.dart ▶ constants/constants.dart - + panels/side_panel/menu.dart ▶ providers/app_provider.dart - - widgets/main_view.dart ▶ constants/constants.dart + + widgets/shell_selection_sub_toolbar.dart ▶ constants/constants.dart - + panels/side_panel/top_menu_and_layers_panel.dart ▶ providers/shell_provider.dart - + + widgets/canvas_gesture_handler.dart ▶ constants/constants.dart + + + panels/side_panel/canvas_settings.dart ▶ providers/shell_provider.dart - + panels/side_panel/side_panel.dart ▶ providers/app_preferences.dart - + shell_top_bar.dart ▶ providers/app_provider_canvas.dart - + + widgets/main_view.dart ▶ constants/constants.dart + + + panels/side_panel/share_panel.dart ▶ providers/app_preferences.dart - + shell_top_bar.dart ▶ providers/app_provider_selection.dart - + panels/side_panel/recent_files_dialog.dart ▶ providers/app_preferences.dart - + panels/side_panel/share_panel.dart ▶ providers/shell_provider.dart - + panels/side_panel/menu.dart ▶ providers/app_preferences.dart - + panels/side_panel/recent_files_dialog.dart ▶ providers/shell_provider.dart - + panels/side_panel/menu.dart ▶ providers/shell_provider.dart - + shell_top_bar.dart ▶ providers/app_provider.dart - + main_screen.dart ▶ providers/app_provider.dart - - files/file_heic_web.dart ▶ helpers/log_helper.dart + + panels/tools/tool_family_rail.dart ▶ models/tool_descriptor.dart - + main.dart ▶ providers/app_provider.dart - - files/file_heic.dart ▶ helpers/log_helper.dart + + panels/side_panel/recent_files_dialog.dart ▶ providers/macos_bookmark_service.dart - - panels/side_panel/recent_files_dialog.dart ▶ providers/macos_bookmark_service.dart + + files/file_heic_web.dart ▶ helpers/log_helper.dart - + + files/file_heic.dart ▶ helpers/log_helper.dart + + + files/import_files.dart ▶ l10n/app_localizations.dart - + pages/platforms_page.dart ▶ models/app_icon_enum.dart - + files/file_tiff.dart ▶ helpers/image_helper.dart - + pages/settings_page.dart ▶ models/app_icon_enum.dart - - files/export_file_name.dart ▶ constants/constants.dart - - - - files/file_ora.dart ▶ helpers/image_helper.dart - - - + main_screen.dart ▶ providers/app_preferences.dart - + shell_top_bar.dart ▶ providers/shell_provider.dart - - pages/platforms_page.dart ▶ l10n/app_localizations.dart + + files/export_file_name.dart ▶ constants/constants.dart - - panels/tools/tools_panel.dart ▶ models/fill_model.dart + + files/file_ora.dart ▶ helpers/image_helper.dart - + main.dart ▶ providers/app_preferences.dart - + main_screen.dart ▶ providers/shell_provider.dart - - files/file_ora.dart ▶ helpers/list_helper.dart + + panels/tools/tools_panel.dart ▶ models/fill_model.dart - - pages/settings_page.dart ▶ l10n/app_localizations.dart + + main.dart ▶ providers/shell_provider.dart - - main.dart ▶ providers/shell_provider.dart + + pages/platforms_page.dart ▶ l10n/app_localizations.dart + + + + main.dart ▶ providers/undo_provider.dart + + + + files/file_ora.dart ▶ helpers/list_helper.dart - - panels/tools/tools_panel.dart ▶ models/effect_labels.dart + + pages/settings_page.dart ▶ l10n/app_localizations.dart - - main.dart ▶ providers/undo_provider.dart + + panels/tools/tool_family_rail.dart ▶ models/effect_labels.dart - + files/import_files.dart ▶ helpers/image_helper.dart - + files/save_backup.dart ▶ helpers/log_helper.dart - - panels/tools/tools_panel.dart ▶ models/selection_effect.dart + + panels/tools/tool_family_rail.dart ▶ models/selection_effect.dart - + files/file_tiff.dart ▶ helpers/log_helper.dart - + files/file_ora.dart ▶ helpers/log_helper.dart - + files/file_jpeg.dart ▶ constants/constants.dart - - panels/tools/tools_panel.dart ▶ models/user_action_drawing.dart + + panels/tools/tool_family_rail.dart ▶ models/user_action_drawing.dart - + files/save_backup.dart ▶ constants/constants.dart - + + panels/tools/tools_panel.dart ▶ models/user_action_drawing.dart + + + files/file_tiff.dart ▶ constants/constants.dart - + files/file_ora.dart ▶ constants/constants.dart - + files/save.dart ▶ helpers/log_helper.dart - + files/import_files.dart ▶ helpers/log_helper.dart - + panels/layers/layer_selector.dart ▶ models/app_icon_enum.dart - + files/export_download_non_web.dart ▶ constants/constants.dart - + files/save.dart ▶ constants/constants.dart - + panels/layers/blend_mode.dart ▶ l10n/app_localizations.dart - + files/import_files.dart ▶ constants/constants.dart - - panels/side_panel/attribution_dialog.dart ▶ models/dependency_versions.dart + + panels/layers/layer_selector.dart ▶ l10n/app_localizations.dart - - panels/layers/layer_selector.dart ▶ l10n/app_localizations.dart + + panels/side_panel/attribution_dialog.dart ▶ models/dependency_versions.dart - + panels/tools/tools_panel.dart ▶ models/app_icon_enum.dart - + pages/platforms_page.dart ▶ constants/constants.dart - - panels/side_panel/about.dart ▶ models/version.dart - - - + pages/settings_page.dart ▶ constants/constants.dart - + recovery/draft_recovery_controller.dart ▶ helpers/draft_flusher.dart - + + panels/side_panel/about.dart ▶ models/version.dart + + + + panels/tools/tool_family_rail.dart ▶ l10n/app_localizations.dart + + + panels/tools/tools_panel.dart ▶ l10n/app_localizations.dart - + recovery/draft_recovery_storage_io.dart ▶ helpers/log_helper.dart - + recovery/draft_recovery_controller.dart ▶ helpers/log_helper.dart - + panels/side_panel/canvas_settings.dart ▶ models/app_icon_enum.dart - + panels/side_panel/menu.dart ▶ models/menu_model.dart - + shell_top_bar.dart ▶ models/user_action_drawing.dart - + panels/side_panel/about.dart ▶ l10n/app_localizations.dart - + panels/side_panel/share_panel.dart ▶ models/app_icon_enum.dart - - panels/side_panel/top_menu_and_layers_panel.dart ▶ l10n/app_localizations.dart + + recovery/draft_recovery_controller.dart ▶ constants/constants.dart - - panels/side_panel/recent_files_dialog.dart ▶ models/app_icon_enum.dart + + panels/side_panel/top_menu_and_layers_panel.dart ▶ l10n/app_localizations.dart - - recovery/draft_recovery_controller.dart ▶ constants/constants.dart + + panels/side_panel/recent_files_dialog.dart ▶ models/app_icon_enum.dart - + panels/side_panel/canvas_settings.dart ▶ l10n/app_localizations.dart - + panels/side_panel/menu.dart ▶ models/app_icon_enum.dart - + panels/side_panel/side_panel.dart ▶ l10n/app_localizations.dart - + panels/side_panel/share_panel.dart ▶ l10n/app_localizations.dart - + panels/side_panel/recent_files_dialog.dart ▶ l10n/app_localizations.dart - + panels/side_panel/menu.dart ▶ l10n/app_localizations.dart - + panels/layers/layer_thumbnail.dart ▶ constants/constants.dart - - shell_top_bar.dart ▶ models/app_icon_enum.dart + + panels/layers/layer_selector.dart ▶ constants/constants.dart - - panels/layers/layer_selector.dart ▶ constants/constants.dart + + shell_top_bar.dart ▶ models/app_icon_enum.dart - + panels/side_panel/share_panel.dart ▶ helpers/image_helper.dart - + panels/side_panel/recent_files_dialog.dart ▶ helpers/image_helper.dart - + + panels/tools/tool_family_rail.dart ▶ constants/constants.dart + + + shell_top_bar.dart ▶ l10n/app_localizations.dart - + panels/tools/tools_panel.dart ▶ constants/constants.dart - + main.dart ▶ l10n/app_localizations.dart - + panels/side_panel/attribution_dialog.dart ▶ constants/constants.dart - + panels/side_panel/about.dart ▶ constants/constants.dart - + panels/side_panel/top_menu_and_layers_panel.dart ▶ constants/constants.dart - + panels/side_panel/recent_files_dialog.dart ▶ helpers/log_helper.dart - + panels/side_panel/canvas_settings.dart ▶ constants/constants.dart - + shell_top_bar.dart ▶ helpers/shortcut_tooltip.dart - + panels/side_panel/side_panel.dart ▶ constants/constants.dart - + panels/side_panel/share_panel.dart ▶ constants/constants.dart - + panels/side_panel/recent_files_dialog.dart ▶ constants/constants.dart - + panels/side_panel/menu.dart ▶ constants/constants.dart - + shell_top_bar.dart ▶ helpers/shortcuts_constants.dart - + main.dart ▶ helpers/draft_flusher.dart - + main.dart ▶ helpers/log_helper.dart - + shell_top_bar.dart ▶ constants/constants.dart - + main_screen.dart ▶ constants/constants.dart - + main.dart ▶ constants/constants.dart @@ -3884,49 +3972,52 @@ 18. widgets/toolbar_icon_button.dartshell_top_bar.dart shell_top_bar_responsive_groups.dart - - 391. files/import_files.dart + <path d="M 654.0,6235.0 L 670.0,6227.4 Q 673.0,6227.4 673.0,6230.4 L 673.0,6239.6 Q 673.0,6242.6 670.0,6242.6 Z" fill="#3b82f6"/> + <text x="667.28" y="6236.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold" textLength="10.120000000000001" lengthAdjust="spacingAndGlyphs">42</text><title>1. files/import_files.dart 2. main.dart 3. models/effect_labels.dart -4. pages/platforms_page.dart -5. pages/settings_page.dart -6. panels/layers/blend_mode.dart -7. panels/layers/layer_selector.dart -8. panels/side_panel/about.dart -9. panels/side_panel/canvas_settings.dart -10. panels/side_panel/menu.dart -11. panels/side_panel/recent_files_dialog.dart -12. panels/side_panel/share_panel.dart -13. panels/side_panel/side_panel.dart -14. panels/side_panel/top_menu_and_layers_panel.dart -15. panels/tools/tools_panel.dart -16. shell_top_bar.dart -17. widgets/brush_intensity_picker.dart -18. widgets/brush_size_picker.dart -19. widgets/brush_style_picker.dart -20. widgets/canvas_gesture_handler.dart -21. widgets/color_picker_dialog.dart -22. widgets/confirm_discard_dialog.dart -23. widgets/effect_intensity_controls.dart -24. widgets/effect_preview_bottom_sheet.dart -25. widgets/fill_widget.dart -26. widgets/gradient_color_list_editor.dart -27. widgets/halftone_size_picker.dart -28. widgets/main_view.dart -29. widgets/overlay_control_widgets.dart -30. widgets/selector_widget.dart -31. widgets/shell_selection_sub_toolbar.dart -32. widgets/shortcuts_help.dart -33. widgets/text_alignment_dropdown.dart -34. widgets/text_attributes_widget.dart -35. widgets/text_editor.dart -36. widgets/text_editor_dialog.dart -37. widgets/tolerance_picker.dart -38. widgets/top_colors.dart -39. widgets/transform_widget.dartapp_localizations.dart - - - 1121. files/export_download_non_web.dart +4. models/tool_descriptor.dart +5. models/tool_family.dart +6. pages/platforms_page.dart +7. pages/settings_page.dart +8. panels/layers/blend_mode.dart +9. panels/layers/layer_selector.dart +10. panels/side_panel/about.dart +11. panels/side_panel/canvas_settings.dart +12. panels/side_panel/menu.dart +13. panels/side_panel/recent_files_dialog.dart +14. panels/side_panel/share_panel.dart +15. panels/side_panel/side_panel.dart +16. panels/side_panel/top_menu_and_layers_panel.dart +17. panels/tools/tool_family_rail.dart +18. panels/tools/tools_panel.dart +19. shell_top_bar.dart +20. widgets/brush_intensity_picker.dart +21. widgets/brush_size_picker.dart +22. widgets/brush_style_picker.dart +23. widgets/canvas_gesture_handler.dart +24. widgets/color_picker_dialog.dart +25. widgets/confirm_discard_dialog.dart +26. widgets/effect_intensity_controls.dart +27. widgets/effect_preview_bottom_sheet.dart +28. widgets/fill_widget.dart +29. widgets/gradient_color_list_editor.dart +30. widgets/halftone_size_picker.dart +31. widgets/main_view.dart +32. widgets/overlay_control_widgets.dart +33. widgets/selector_widget.dart +34. widgets/shell_selection_sub_toolbar.dart +35. widgets/shortcuts_help.dart +36. widgets/text_alignment_dropdown.dart +37. widgets/text_attributes_widget.dart +38. widgets/text_editor.dart +39. widgets/text_editor_dialog.dart +40. widgets/tolerance_picker.dart +41. widgets/top_colors.dart +42. widgets/transform_widget.dartapp_localizations.dart + + + 1141. files/export_download_non_web.dart 2. files/export_file_name.dart 3. files/file_jpeg.dart 4. files/file_ora.dart @@ -3943,103 +4034,105 @@ 15. main_screen.dart 16. models/brush_style.dart 17. models/canvas_resize.dart -18. models/effect_preview_model.dart -19. models/fill_model.dart -20. models/halftone_fill.dart -21. models/render_helper.dart -22. models/selection_effect.dart -23. models/selector_model.dart -24. models/text_object.dart -25. models/transform_model.dart -26. pages/platforms_page.dart -27. pages/settings_page.dart -28. panels/layers/layer_selector.dart -29. panels/layers/layer_thumbnail.dart -30. panels/side_panel/about.dart -31. panels/side_panel/attribution_dialog.dart -32. panels/side_panel/canvas_settings.dart -33. panels/side_panel/menu.dart -34. panels/side_panel/recent_files_dialog.dart -35. panels/side_panel/share_panel.dart -36. panels/side_panel/side_panel.dart -37. panels/side_panel/top_menu_and_layers_panel.dart -38. panels/tools/tools_panel.dart -39. providers/app_preferences.dart -40. providers/app_provider.dart -41. providers/app_provider_canvas.dart -42. providers/app_provider_selection.dart -43. providers/fill_service.dart -44. providers/flood_fill.dart -45. providers/layer_provider.dart -46. providers/layer_provider_storage_export.dart -47. providers/layers_provider.dart -48. providers/shell_provider.dart -49. providers/undo_provider.dart -50. providers/wand_selection_manager.dart -51. recovery/draft_recovery_controller.dart -52. shell_top_bar.dart -53. widgets/app_bottom_sheet.dart -54. widgets/app_button_row.dart -55. widgets/app_buttons.dart -56. widgets/app_card.dart -57. widgets/app_dialog.dart -58. widgets/app_divider.dart -59. widgets/app_dropdown.dart -60. widgets/app_icon.dart -61. widgets/app_list_tile.dart -62. widgets/app_overlay.dart -63. widgets/app_overlay_menu_item.dart -64. widgets/app_overlay_surface.dart -65. widgets/app_popup_menu.dart -66. widgets/app_progress.dart -67. widgets/app_scaffold.dart -68. widgets/app_slider.dart -69. widgets/app_snackbar.dart -70. widgets/app_switch.dart -71. widgets/app_text.dart -72. widgets/app_text_field.dart -73. widgets/app_tooltip.dart -74. widgets/base_picker.dart -75. widgets/brush_intensity_picker.dart -76. widgets/brush_size_picker.dart -77. widgets/canvas_gesture_handler.dart -78. widgets/canvas_panel_painter.dart -79. widgets/color_picker_dialog.dart -80. widgets/color_preview.dart -81. widgets/color_selector.dart -82. widgets/color_wheel_selector.dart -83. widgets/container_slider.dart -84. widgets/draw_rect.dart -85. widgets/effect_intensity_controls.dart -86. widgets/effect_preview_bottom_sheet.dart -87. widgets/fill_widget.dart -88. widgets/gradient_color_list_editor.dart -89. widgets/halftone_size_picker.dart -90. widgets/image_painter.dart -91. widgets/magnifying_eye_dropper.dart -92. widgets/main_view.dart -93. widgets/marching_ants_path.dart -94. widgets/nine_grid_selector.dart -95. widgets/overlay_control_widgets.dart -96. widgets/selector_widget.dart -97. widgets/shell_selection_sub_toolbar.dart -98. widgets/shortcuts.dart -99. widgets/shortcuts_help.dart -100. widgets/side_panel_header.dart -101. widgets/text_alignment_dropdown.dart -102. widgets/text_attributes_widget.dart -103. widgets/text_editor.dart -104. widgets/text_editor_dialog.dart -105. widgets/text_style_toggle_buttons.dart -106. widgets/tolerance_picker.dart -107. widgets/tool_attribute_widget.dart -108. widgets/toolbar_icon_button.dart -109. widgets/top_colors.dart -110. widgets/transform_widget.dart -111. widgets/transparent_background.dart -112. widgets/truncated_text.dart - - 221. constants/app_colors.dart +18. models/effect_brush_model.dart +19. models/effect_preview_model.dart +20. models/fill_model.dart +21. models/halftone_fill.dart +22. models/render_helper.dart +23. models/selection_effect.dart +24. models/selector_model.dart +25. models/text_object.dart +26. models/transform_model.dart +27. pages/platforms_page.dart +28. pages/settings_page.dart +29. panels/layers/layer_selector.dart +30. panels/layers/layer_thumbnail.dart +31. panels/side_panel/about.dart +32. panels/side_panel/attribution_dialog.dart +33. panels/side_panel/canvas_settings.dart +34. panels/side_panel/menu.dart +35. panels/side_panel/recent_files_dialog.dart +36. panels/side_panel/share_panel.dart +37. panels/side_panel/side_panel.dart +38. panels/side_panel/top_menu_and_layers_panel.dart +39. panels/tools/tool_family_rail.dart +40. panels/tools/tools_panel.dart +41. providers/app_preferences.dart +42. providers/app_provider.dart +43. providers/app_provider_canvas.dart +44. providers/app_provider_selection.dart +45. providers/fill_service.dart +46. providers/flood_fill.dart +47. providers/layer_provider.dart +48. providers/layer_provider_storage_export.dart +49. providers/layers_provider.dart +50. providers/shell_provider.dart +51. providers/undo_provider.dart +52. providers/wand_selection_manager.dart +53. recovery/draft_recovery_controller.dart +54. shell_top_bar.dart +55. widgets/app_bottom_sheet.dart +56. widgets/app_button_row.dart +57. widgets/app_buttons.dart +58. widgets/app_card.dart +59. widgets/app_dialog.dart +60. widgets/app_divider.dart +61. widgets/app_dropdown.dart +62. widgets/app_icon.dart +63. widgets/app_list_tile.dart +64. widgets/app_overlay.dart +65. widgets/app_overlay_menu_item.dart +66. widgets/app_overlay_surface.dart +67. widgets/app_popup_menu.dart +68. widgets/app_progress.dart +69. widgets/app_scaffold.dart +70. widgets/app_slider.dart +71. widgets/app_snackbar.dart +72. widgets/app_switch.dart +73. widgets/app_text.dart +74. widgets/app_text_field.dart +75. widgets/app_tooltip.dart +76. widgets/base_picker.dart +77. widgets/brush_intensity_picker.dart +78. widgets/brush_size_picker.dart +79. widgets/canvas_gesture_handler.dart +80. widgets/canvas_panel_painter.dart +81. widgets/color_picker_dialog.dart +82. widgets/color_preview.dart +83. widgets/color_selector.dart +84. widgets/color_wheel_selector.dart +85. widgets/container_slider.dart +86. widgets/draw_rect.dart +87. widgets/effect_intensity_controls.dart +88. widgets/effect_preview_bottom_sheet.dart +89. widgets/fill_widget.dart +90. widgets/gradient_color_list_editor.dart +91. widgets/halftone_size_picker.dart +92. widgets/image_painter.dart +93. widgets/magnifying_eye_dropper.dart +94. widgets/main_view.dart +95. widgets/marching_ants_path.dart +96. widgets/nine_grid_selector.dart +97. widgets/overlay_control_widgets.dart +98. widgets/selector_widget.dart +99. widgets/shell_selection_sub_toolbar.dart +100. widgets/shortcuts.dart +101. widgets/shortcuts_help.dart +102. widgets/side_panel_header.dart +103. widgets/text_alignment_dropdown.dart +104. widgets/text_attributes_widget.dart +105. widgets/text_editor.dart +106. widgets/text_editor_dialog.dart +107. widgets/text_style_toggle_buttons.dart +108. widgets/tolerance_picker.dart +109. widgets/tool_attribute_widget.dart +110. widgets/toolbar_icon_button.dart +111. widgets/top_colors.dart +112. widgets/transform_widget.dart +113. widgets/transparent_background.dart +114. widgets/truncated_text.dart + + 221. constants/app_colors.dart 2. constants/app_config.dart 3. constants/app_defaults.dart 4. constants/app_effects.dart @@ -4060,106 +4153,106 @@ 19. constants/file_extensions.dart 20. constants/interaction_input_modality.dart 21. constants/interaction_layout_profile.dart -22. constants/keys.dartconstants.dart +22. constants/keys.dartconstants.dart - - 11. constants/constants.dart - - 41. constants/app_interaction.dart + <path d="M 656.0,6831.0 L 668.0,6824.0 Q 671.0,6824.0 671.0,6827.0 L 671.0,6835.0 Q 671.0,6838.0 668.0,6838.0 Z" fill="#3b82f6"/> + <text x="666.32" y="6832.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. constants/constants.dart + + 41. constants/app_interaction.dart 2. constants/app_layout.dart 3. constants/interaction_input_modality.dart -4. constants/interaction_layout_profile.dartapp_interaction_profiles.dart - - - 11. constants/constants.dart - - 31. constants/app_colors.dart -2. constants/app_font_size.dart -3. constants/app_strings.dartapp_text_style.dart - - - 11. constants/constants.dart - - 21. constants/app_limits.dart -2. constants/app_math.dartapp_halftone.dart - - - 11. constants/constants.dart - - 11. constants/app_interaction.dartapp_defaults.dart - - - 11. constants/constants.dartapp_config.dart +4. constants/interaction_layout_profile.dartapp_interaction_profiles.dart - 11. constants/constants.dartapp_effects.dart + 11. constants/constants.dart + + 31. constants/app_colors.dart +2. constants/app_font_size.dart +3. constants/app_strings.dartapp_text_style.dart - 11. constants/constants.dartapp_flood_fill.dart + 11. constants/constants.dart + + 21. constants/app_limits.dart +2. constants/app_math.dartapp_halftone.dart - 11. constants/constants.dartapp_radius.dart + 11. constants/constants.dart + + 11. constants/app_interaction.dartapp_defaults.dart - 11. constants/constants.dartapp_spacing.dart + 11. constants/constants.dartapp_config.dart - 11. constants/constants.dartapp_stroke.dart + 11. constants/constants.dartapp_effects.dart - 11. constants/constants.dartapp_visual.dart + 11. constants/constants.dartapp_flood_fill.dart - 11. constants/constants.dartfile_extensions.dart + 11. constants/constants.dartapp_radius.dart - 11. constants/constants.dartkeys.dart + 11. constants/constants.dartapp_spacing.dart - 21. constants/app_text_style.dart -2. constants/constants.dartapp_colors.dart + 11. constants/constants.dartapp_stroke.dart - 21. constants/app_text_style.dart -2. constants/constants.dartapp_font_size.dart + 11. constants/constants.dartapp_visual.dart - 21. constants/app_interaction_profiles.dart -2. constants/constants.dartapp_layout.dart + 11. constants/constants.dartfile_extensions.dart - 21. constants/app_halftone.dart -2. constants/constants.dartapp_limits.dart + 11. constants/constants.dartkeys.dart - 21. constants/app_halftone.dart -2. constants/constants.dartapp_math.dart + 21. constants/app_text_style.dart +2. constants/constants.dartapp_colors.dart 21. constants/app_text_style.dart -2. constants/constants.dartapp_strings.dart +2. constants/constants.dartapp_font_size.dart 21. constants/app_interaction_profiles.dart -2. constants/constants.dartinteraction_input_modality.dart +2. constants/constants.dartapp_layout.dart - 21. constants/app_interaction_profiles.dart -2. constants/constants.dartinteraction_layout_profile.dart + 21. constants/app_halftone.dart +2. constants/constants.dartapp_limits.dart - 31. constants/app_defaults.dart + <text x="666.32" y="7376.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">2</text><title>1. constants/app_halftone.dart +2. constants/constants.dartapp_math.dart + + + 21. constants/app_text_style.dart +2. constants/constants.dartapp_strings.dart + + + 21. constants/app_interaction_profiles.dart +2. constants/constants.dartinteraction_input_modality.dart + + + 21. constants/app_interaction_profiles.dart +2. constants/constants.dartinteraction_layout_profile.dart + + + 31. constants/app_defaults.dart 2. constants/app_interaction_profiles.dart -3. constants/constants.dartapp_interaction.dart +3. constants/constants.dartapp_interaction.dart - - 51. main.dart + <path d="M 656.0,1555.0 L 668.0,1548.0 Q 671.0,1548.0 671.0,1551.0 L 671.0,1559.0 Q 671.0,1562.0 668.0,1562.0 Z" fill="#3b82f6"/> + <text x="666.32" y="1556.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">5</text><title>1. main.dart 2. main_screen.dart 3. panels/side_panel/menu.dart 4. panels/side_panel/recent_files_dialog.dart 5. shell_top_bar.dart - - 151. constants/constants.dart + <path d="M 674.0,1566.0 L 658.0,1558.4 Q 655.0,1558.4 655.0,1561.4 L 655.0,1570.6 Q 655.0,1573.6 658.0,1573.6 Z" fill="#10b981"/> + <text x="660.72" y="1567.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold" textLength="10.120000000000001" lengthAdjust="spacingAndGlyphs">15</text><title>1. constants/constants.dart 2. files/file_heic.dart 3. files/file_heic_web.dart 4. files/file_operation_exception.dart @@ -4173,13 +4266,13 @@ 12. providers/app_provider_canvas.dart 13. providers/shell_provider.dart 14. widgets/confirm_discard_dialog.dart -15. widgets/material_free.dartimport_files.dart +15. widgets/material_free.dartimport_files.dart - - 21. main.dart + <path d="M 656.0,1587.0 L 668.0,1580.0 Q 671.0,1580.0 671.0,1583.0 L 671.0,1591.0 Q 671.0,1594.0 668.0,1594.0 Z" fill="#3b82f6"/> + <text x="666.32" y="1588.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">2</text><title>1. main.dart 2. panels/side_panel/menu.dart - - 121. constants/constants.dart + <path d="M 674.0,1598.0 L 658.0,1590.4 Q 655.0,1590.4 655.0,1593.4 L 655.0,1602.6 Q 655.0,1605.6 658.0,1605.6 Z" fill="#10b981"/> + <text x="660.72" y="1599.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold" textLength="10.120000000000001" lengthAdjust="spacingAndGlyphs">12</text><title>1. constants/constants.dart 2. files/export_download_non_web.dart 3. files/export_download_web.dart 4. files/export_file_name.dart @@ -4190,126 +4283,118 @@ 9. providers/app_preferences.dart 10. providers/layers_provider.dart 11. providers/macos_bookmark_service.dart -12. providers/shell_provider.dartsave.dart +12. providers/shell_provider.dartsave.dart - - 21. files/save.dart + <path d="M 656.0,1619.0 L 668.0,1612.0 Q 671.0,1612.0 671.0,1615.0 L 671.0,1623.0 Q 671.0,1626.0 668.0,1626.0 Z" fill="#3b82f6"/> + <text x="666.32" y="1620.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">2</text><title>1. files/save.dart 2. panels/side_panel/share_panel.dart - - 81. constants/constants.dart + <path d="M 672.0,1630.0 L 660.0,1623.0 Q 657.0,1623.0 657.0,1626.0 L 657.0,1634.0 Q 657.0,1637.0 660.0,1637.0 Z" fill="#10b981"/> + <text x="661.68" y="1631.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">8</text><title>1. constants/constants.dart 2. files/export_file_name.dart 3. files/export_prepare.dart 4. files/file_tiff.dart 5. files/save_backup.dart 6. providers/app_preferences.dart 7. providers/layers_provider.dart -8. providers/macos_bookmark_service.dartexport_download_non_web.dart +8. providers/macos_bookmark_service.dartexport_download_non_web.dart - - 21. files/save.dart + <path d="M 656.0,1651.0 L 668.0,1644.0 Q 671.0,1644.0 671.0,1647.0 L 671.0,1655.0 Q 671.0,1658.0 668.0,1658.0 Z" fill="#3b82f6"/> + <text x="666.32" y="1652.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">2</text><title>1. files/save.dart 2. panels/side_panel/share_panel.dart - - 51. files/export_file_name.dart + <path d="M 672.0,1662.0 L 660.0,1655.0 Q 657.0,1655.0 657.0,1658.0 L 657.0,1666.0 Q 657.0,1669.0 660.0,1669.0 Z" fill="#10b981"/> + <text x="661.68" y="1663.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">5</text><title>1. files/export_file_name.dart 2. files/export_prepare.dart 3. files/file_tiff.dart 4. providers/app_preferences.dart -5. providers/layers_provider.dartexport_download_web.dart +5. providers/layers_provider.dartexport_download_web.dart - - 21. files/export_download_non_web.dart + <path d="M 656.0,1683.0 L 668.0,1676.0 Q 671.0,1676.0 671.0,1679.0 L 671.0,1687.0 Q 671.0,1690.0 668.0,1690.0 Z" fill="#3b82f6"/> + <text x="666.32" y="1684.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">2</text><title>1. files/export_download_non_web.dart 2. files/export_download_web.dart - - 61. files/file_heic.dart + <path d="M 672.0,1694.0 L 660.0,1687.0 Q 657.0,1687.0 657.0,1690.0 L 657.0,1698.0 Q 657.0,1701.0 660.0,1701.0 Z" fill="#10b981"/> + <text x="661.68" y="1695.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">6</text><title>1. files/file_heic.dart 2. files/file_heic_web.dart 3. files/file_jpeg.dart 4. files/file_ora.dart 5. files/file_webp.dart -6. providers/layers_provider.dartexport_prepare.dart +6. providers/layers_provider.dartexport_prepare.dart - - 41. files/export_prepare.dart + <path d="M 656.0,1715.0 L 668.0,1708.0 Q 671.0,1708.0 671.0,1711.0 L 671.0,1719.0 Q 671.0,1722.0 668.0,1722.0 Z" fill="#3b82f6"/> + <text x="666.32" y="1716.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">4</text><title>1. files/export_prepare.dart 2. files/import_files.dart 3. panels/side_panel/recent_files_dialog.dart 4. recovery/draft_recovery_controller.dart - - 71. constants/constants.dart + <path d="M 672.0,1726.0 L 660.0,1719.0 Q 657.0,1719.0 657.0,1722.0 L 657.0,1730.0 Q 657.0,1733.0 660.0,1733.0 Z" fill="#10b981"/> + <text x="661.68" y="1727.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">7</text><title>1. constants/constants.dart 2. files/file_operation_exception.dart 3. helpers/image_helper.dart 4. helpers/list_helper.dart 5. helpers/log_helper.dart 6. providers/layer_provider_storage_export.dart -7. providers/layers_provider.dartfile_ora.dart +7. providers/layers_provider.dartfile_ora.dart - - 41. files/export_download_non_web.dart + <path d="M 656.0,1747.0 L 668.0,1740.0 Q 671.0,1740.0 671.0,1743.0 L 671.0,1751.0 Q 671.0,1754.0 668.0,1754.0 Z" fill="#3b82f6"/> + <text x="666.32" y="1748.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">4</text><title>1. files/export_download_non_web.dart 2. files/export_download_web.dart 3. files/import_files.dart 4. files/save.dart - - 61. constants/constants.dart + <path d="M 672.0,1758.0 L 660.0,1751.0 Q 657.0,1751.0 657.0,1754.0 L 657.0,1762.0 Q 657.0,1765.0 660.0,1765.0 Z" fill="#10b981"/> + <text x="661.68" y="1759.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">6</text><title>1. constants/constants.dart 2. files/file_operation_exception.dart 3. files/tiff_constants.dart 4. helpers/image_helper.dart 5. helpers/log_helper.dart -6. providers/layers_provider.dartfile_tiff.dart +6. providers/layers_provider.dartfile_tiff.dart - - 21. files/export_download_non_web.dart + <path d="M 656.0,1779.0 L 668.0,1772.0 Q 671.0,1772.0 671.0,1775.0 L 671.0,1783.0 Q 671.0,1786.0 668.0,1786.0 Z" fill="#3b82f6"/> + <text x="666.32" y="1780.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">2</text><title>1. files/export_download_non_web.dart 2. files/save.dart - - 41. constants/constants.dart + <path d="M 672.0,1790.0 L 660.0,1783.0 Q 657.0,1783.0 657.0,1786.0 L 657.0,1794.0 Q 657.0,1797.0 660.0,1797.0 Z" fill="#10b981"/> + <text x="661.68" y="1791.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">4</text><title>1. constants/constants.dart 2. helpers/log_helper.dart 3. providers/app_preferences.dart -4. providers/macos_bookmark_service.dartsave_backup.dart - - - 11. files/export_prepare.dart - - 21. constants/constants.dart -2. files/file_operation_exception.dartfile_jpeg.dart +4. providers/macos_bookmark_service.dartsave_backup.dart 11. files/export_prepare.dart - 21. files/file_operation_exception.dart -2. files/webp_encoder.dartfile_webp.dart + 21. constants/constants.dart +2. files/file_operation_exception.dartfile_jpeg.dart - 11. files/file_webp.dart + 11. files/export_prepare.dart - 21. files/webp_encoder_shared.dart -2. files/webp_vp8l_encoder.dartwebp_encoder.dart + 21. files/file_operation_exception.dart +2. files/webp_encoder.dartfile_webp.dart - 11. files/webp_encoder.dart + 11. files/file_webp.dart - 41. files/webp_bit_writer.dart -2. files/webp_encoder_shared.dart -3. files/webp_huffman_codec.dart -4. files/webp_transform_codec.dartwebp_vp8l_encoder.dart + 21. files/webp_encoder_shared.dart +2. files/webp_vp8l_encoder.dartwebp_encoder.dart - 11. files/webp_vp8l_encoder.dart + 11. files/webp_encoder.dart - 31. files/webp_bit_writer.dart + <text x="661.68" y="1919.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">4</text><title>1. files/webp_bit_writer.dart 2. files/webp_encoder_shared.dart -3. files/webp_huffman_codec.dartwebp_transform_codec.dart +3. files/webp_huffman_codec.dart +4. files/webp_transform_codec.dartwebp_vp8l_encoder.dart - 21. files/webp_transform_codec.dart -2. files/webp_vp8l_encoder.dart + 11. files/webp_vp8l_encoder.dart 31. files/webp_bit_writer.dart -2. files/webp_cl_symbol.dart -3. files/webp_encoder_shared.dartwebp_huffman_codec.dart +2. files/webp_encoder_shared.dart +3. files/webp_huffman_codec.dartwebp_transform_codec.dart - 31. files/export_prepare.dart -2. files/import_files.dart -3. panels/side_panel/share_panel.dart + 21. files/webp_transform_codec.dart +2. files/webp_vp8l_encoder.dart - 21. files/file_operation_exception.dart -2. helpers/log_helper.dartfile_heic.dart + 31. files/webp_bit_writer.dart +2. files/webp_cl_symbol.dart +3. files/webp_encoder_shared.dartwebp_huffman_codec.dart 31. files/export_prepare.dart @@ -4317,67 +4402,76 @@ 3. panels/side_panel/share_panel.dart 21. files/file_operation_exception.dart -2. helpers/log_helper.dartfile_heic_web.dart +2. helpers/log_helper.dartfile_heic.dart - 31. files/export_download_non_web.dart -2. files/export_download_web.dart -3. files/save.dart + 31. files/export_prepare.dart +2. files/import_files.dart +3. panels/side_panel/share_panel.dart - 11. constants/constants.dartexport_file_name.dart -file_tiff_encoder.dart + 21. files/file_operation_exception.dart +2. helpers/log_helper.dartfile_heic_web.dart - - 11. files/file_tiff.darttiff_constants.dart + + 31. files/export_download_non_web.dart +2. files/export_download_web.dart +3. files/save.dart + + 11. constants/constants.dartexport_file_name.dart +file_tiff_encoder.dart - 11. files/webp_huffman_codec.dartwebp_cl_symbol.dart + 11. files/file_tiff.darttiff_constants.dart - 31. files/webp_huffman_codec.dart -2. files/webp_transform_codec.dart -3. files/webp_vp8l_encoder.dartwebp_bit_writer.dart + 11. files/webp_huffman_codec.dartwebp_cl_symbol.dart - 41. files/webp_encoder.dart + <text x="666.32" y="2196.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">3</text><title>1. files/webp_huffman_codec.dart +2. files/webp_transform_codec.dart +3. files/webp_vp8l_encoder.dartwebp_bit_writer.dart + + + 41. files/webp_encoder.dart 2. files/webp_huffman_codec.dart 3. files/webp_transform_codec.dart -4. files/webp_vp8l_encoder.dartwebp_encoder_shared.dart +4. files/webp_vp8l_encoder.dartwebp_encoder_shared.dart - - 81. files/file_heic.dart + <path d="M 656.0,2259.0 L 668.0,2252.0 Q 671.0,2252.0 671.0,2255.0 L 671.0,2263.0 Q 671.0,2266.0 668.0,2266.0 Z" fill="#3b82f6"/> + <text x="666.32" y="2260.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">8</text><title>1. files/file_heic.dart 2. files/file_heic_web.dart 3. files/file_jpeg.dart 4. files/file_ora.dart 5. files/file_tiff.dart 6. files/file_webp.dart 7. files/import_files.dart -8. files/save.dartfile_operation_exception.dart - - - 11. models/selection_effect.dart - - 21. constants/constants.dart -2. helpers/image_helper.dartimage_effects.dart - - - 11. widgets/canvas_gesture_handler.dart - - 21. constants/constants.dart -2. helpers/image_helper.dartsmudge_helper.dart - - - 51. models/selector_model.dart +8. files/save.dartfile_operation_exception.dart + + + 11. models/selection_effect.dart + + 21. constants/constants.dart +2. helpers/image_helper.dartimage_effects.dart + + + 11. widgets/canvas_gesture_handler.dart + + 21. constants/constants.dart +2. helpers/image_helper.dartsmudge_helper.dart + + + 61. models/selector_model.dart 2. models/transform_model.dart 3. providers/app_provider_selection.dart -4. widgets/selector_widget.dart -5. widgets/transform_widget.dart - - 21. constants/constants.dart -2. helpers/image_helper.darttransform_helper.dart - - - 181. files/file_ora.dart +4. widgets/canvas_gesture_handler.dart +5. widgets/selector_widget.dart +6. widgets/transform_widget.dart + + 21. constants/constants.dart +2. helpers/image_helper.darttransform_helper.dart + + + 181. files/file_ora.dart 2. files/file_tiff.dart 3. files/import_files.dart 4. helpers/image_effects.dart @@ -4395,50 +4489,50 @@ 16. widgets/canvas_gesture_handler.dart 17. widgets/magnifying_eye_dropper.dart 18. widgets/top_colors.dart - - 31. constants/constants.dart + <path d="M 672.0,6464.0 L 660.0,6457.0 Q 657.0,6457.0 657.0,6460.0 L 657.0,6468.0 Q 657.0,6471.0 660.0,6471.0 Z" fill="#10b981"/> + <text x="661.68" y="6465.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">3</text><title>1. constants/constants.dart 2. helpers/color_helper.dart -3. helpers/log_helper.dartimage_helper.dart +3. helpers/log_helper.dartimage_helper.dart - - 21. shell_top_bar.dart + <path d="M 656.0,6485.0 L 668.0,6478.0 Q 671.0,6478.0 671.0,6481.0 L 671.0,6489.0 Q 671.0,6492.0 668.0,6492.0 Z" fill="#3b82f6"/> + <text x="666.32" y="6486.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">2</text><title>1. shell_top_bar.dart 2. widgets/shell_selection_sub_toolbar.dart - - 11. helpers/shortcuts_constants.dartshortcut_tooltip.dart + + 11. helpers/shortcuts_constants.dartshortcut_tooltip.dart - - 61. helpers/image_helper.dart + <path d="M 656.0,6517.0 L 668.0,6510.0 Q 671.0,6510.0 671.0,6513.0 L 671.0,6521.0 Q 671.0,6524.0 668.0,6524.0 Z" fill="#3b82f6"/> + <text x="666.32" y="6518.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">6</text><title>1. helpers/image_helper.dart 2. providers/layer_provider.dart 3. providers/layers_provider.dart 4. widgets/color_picker_dialog.dart 5. widgets/color_preview.dart 6. widgets/top_colors.dart - - 11. constants/constants.dartcolor_helper.dart + + 11. constants/constants.dartcolor_helper.dart - - 21. files/file_ora.dart -2. widgets/color_selector.dartlist_helper.dart + + 21. files/file_ora.dart +2. widgets/color_selector.dartlist_helper.dart - - 31. main.dart + <path d="M 656.0,6581.0 L 668.0,6574.0 Q 671.0,6574.0 671.0,6577.0 L 671.0,6585.0 Q 671.0,6588.0 668.0,6588.0 Z" fill="#3b82f6"/> + <text x="666.32" y="6582.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">3</text><title>1. main.dart 2. recovery/draft_recovery_controller.dart -3. widgets/canvas_gesture_handler.dartdraft_flusher.dart +3. widgets/canvas_gesture_handler.dartdraft_flusher.dart - - 41. helpers/shortcut_tooltip.dart + <path d="M 656.0,6613.0 L 668.0,6606.0 Q 671.0,6606.0 671.0,6609.0 L 671.0,6617.0 Q 671.0,6620.0 668.0,6620.0 Z" fill="#3b82f6"/> + <text x="666.32" y="6614.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">4</text><title>1. helpers/shortcut_tooltip.dart 2. shell_top_bar.dart 3. widgets/shell_selection_sub_toolbar.dart -4. widgets/shortcuts_help.dartshortcuts_constants.dart +4. widgets/shortcuts_help.dartshortcuts_constants.dart - - 51. models/fill_model.dart + <path d="M 656.0,6645.0 L 668.0,6638.0 Q 671.0,6638.0 671.0,6641.0 L 671.0,6649.0 Q 671.0,6652.0 668.0,6652.0 Z" fill="#3b82f6"/> + <text x="666.32" y="6646.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">5</text><title>1. models/fill_model.dart 2. models/selector_model.dart 3. providers/layer_provider.dart -4. widgets/selector_widget.dartdraw_path_helper.dart +4. widgets/selector_widget.dartdraw_path_helper.dart - - 181. files/file_heic.dart + <path d="M 654.0,6677.0 L 670.0,6669.4 Q 673.0,6669.4 673.0,6672.4 L 673.0,6681.6 Q 673.0,6684.6 670.0,6684.6 Z" fill="#3b82f6"/> + <text x="667.28" y="6678.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold" textLength="10.120000000000001" lengthAdjust="spacingAndGlyphs">18</text><title>1. files/file_heic.dart 2. files/file_heic_web.dart 3. files/file_ora.dart 4. files/file_tiff.dart @@ -4455,49 +4549,59 @@ 15. recovery/draft_recovery_controller.dart 16. recovery/draft_recovery_storage_io.dart 17. widgets/app_snackbar.dart -18. widgets/color_picker_dialog.dartlog_helper.dart +18. widgets/color_picker_dialog.dartlog_helper.dart - - 71. providers/app_provider.dart + <path d="M 656.0,5409.0 L 668.0,5402.0 Q 671.0,5402.0 671.0,5405.0 L 671.0,5413.0 Q 671.0,5416.0 668.0,5416.0 Z" fill="#3b82f6"/> + <text x="666.32" y="5410.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. panels/tools/tool_family_rail.dart + + 61. l10n/app_localizations.dart +2. models/app_icon_enum.dart +3. models/effect_labels.dart +4. models/selection_effect.dart +5. models/tool_family.dart +6. models/user_action_drawing.darttool_descriptor.dart + + + 71. providers/app_provider.dart 2. providers/app_provider_selection.dart 3. providers/app_provider_selection_commit.dart 4. providers/app_provider_tools.dart 5. widgets/canvas_gesture_handler.dart 6. widgets/selector_widget.dart 7. widgets/shell_selection_sub_toolbar.dart - - 51. constants/constants.dart + <path d="M 672.0,5452.0 L 660.0,5445.0 Q 657.0,5445.0 657.0,5448.0 L 657.0,5456.0 Q 657.0,5459.0 660.0,5459.0 Z" fill="#10b981"/> + <text x="661.68" y="5453.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">5</text><title>1. constants/constants.dart 2. helpers/draw_path_helper.dart 3. helpers/transform_helper.dart -4. models/visible_model.dartselector_model.dart +4. models/visible_model.dartselector_model.dart - - 11. providers/layer_provider.dart - - 41. constants/constants.dart + <path d="M 656.0,5473.0 L 668.0,5466.0 Q 671.0,5466.0 671.0,5469.0 L 671.0,5477.0 Q 671.0,5480.0 668.0,5480.0 Z" fill="#3b82f6"/> + <text x="666.32" y="5474.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. providers/layer_provider.dart + + 41. constants/constants.dart 2. models/brush_style.dart 3. models/halftone_fill.dart -4. models/text_object.dartrender_helper.dart +4. models/text_object.dartrender_helper.dart - - 11. providers/app_provider.dart - - 31. constants/constants.dart + <path d="M 656.0,5505.0 L 668.0,5498.0 Q 671.0,5498.0 671.0,5501.0 L 671.0,5509.0 Q 671.0,5512.0 668.0,5512.0 Z" fill="#3b82f6"/> + <text x="666.32" y="5506.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. providers/app_provider.dart + + 31. constants/constants.dart 2. models/selection_effect.dart -3. models/visible_model.darteffect_preview_model.dart +3. models/visible_model.darteffect_preview_model.dart - - 41. providers/app_provider.dart + <path d="M 656.0,5537.0 L 668.0,5530.0 Q 671.0,5530.0 671.0,5533.0 L 671.0,5541.0 Q 671.0,5544.0 668.0,5544.0 Z" fill="#3b82f6"/> + <text x="666.32" y="5538.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">4</text><title>1. providers/app_provider.dart 2. providers/app_provider_selection.dart 3. widgets/main_view.dart 4. widgets/transform_widget.dart - - 31. constants/constants.dart + <path d="M 672.0,5548.0 L 660.0,5541.0 Q 657.0,5541.0 657.0,5544.0 L 657.0,5552.0 Q 657.0,5555.0 660.0,5555.0 Z" fill="#10b981"/> + <text x="661.68" y="5549.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">3</text><title>1. constants/constants.dart 2. helpers/transform_helper.dart -3. models/visible_model.darttransform_model.dart +3. models/visible_model.darttransform_model.dart - - 91. panels/tools/tools_panel.dart + <path d="M 656.0,5569.0 L 668.0,5562.0 Q 671.0,5562.0 671.0,5565.0 L 671.0,5573.0 Q 671.0,5576.0 668.0,5576.0 Z" fill="#3b82f6"/> + <text x="666.32" y="5570.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">9</text><title>1. panels/tools/tools_panel.dart 2. providers/app_provider.dart 3. providers/app_provider_canvas.dart 4. providers/app_provider_tools.dart @@ -4506,105 +4610,124 @@ 7. widgets/fill_widget.dart 8. widgets/gradient_color_list_editor.dart 9. widgets/main_view.dart - - 31. constants/constants.dart -2. helpers/draw_path_helper.dart -3. models/visible_model.dartfill_model.dart - - - 11. providers/app_provider.dart - - 21. models/image_placement_layer_restore_state.dart -2. models/visible_model.dartimage_placement_model.dart - - - 41. panels/tools/tools_panel.dart -2. widgets/effect_intensity_controls.dart -3. widgets/selector_widget.dart -4. widgets/shell_selection_sub_toolbar.dart - 21. l10n/app_localizations.dart -2. models/selection_effect.darteffect_labels.dart + 31. constants/constants.dart +2. helpers/draw_path_helper.dart +3. models/visible_model.dartfill_model.dart - 91. models/effect_labels.dart -2. models/effect_preview_model.dart -3. panels/tools/tools_panel.dart -4. providers/app_provider_selection.dart -5. widgets/effect_intensity_controls.dart -6. widgets/effect_preview_bottom_sheet.dart -7. widgets/main_view.dart -8. widgets/selector_widget.dart -9. widgets/shell_selection_sub_toolbar.dart + 11. providers/app_provider.dart - 31. constants/constants.dart -2. helpers/image_effects.dart -3. models/app_icon_enum.dartselection_effect.dart + 21. constants/constants.dart +2. models/selection_effect.darteffect_brush_model.dart - 41. providers/layers_provider.dart -2. providers/shell_provider.dart -3. widgets/nine_grid_selector.dart + 11. providers/app_provider.dart - 11. constants/constants.dartcanvas_resize.dart + 21. models/image_placement_layer_restore_state.dart +2. models/visible_model.dartimage_placement_model.dart - 51. models/image_placement_model.dart + <text x="666.32" y="5666.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. models/tool_descriptor.dart + + 21. l10n/app_localizations.dart +2. models/user_action_drawing.darttool_family.dart + + + 51. models/tool_descriptor.dart +2. panels/tools/tool_family_rail.dart +3. widgets/effect_intensity_controls.dart +4. widgets/selector_widget.dart +5. widgets/shell_selection_sub_toolbar.dart + + 21. l10n/app_localizations.dart +2. models/selection_effect.darteffect_labels.dart + + + 121. models/effect_brush_model.dart +2. models/effect_labels.dart +3. models/effect_preview_model.dart +4. models/tool_descriptor.dart +5. panels/tools/tool_family_rail.dart +6. providers/app_provider_selection.dart +7. widgets/canvas_gesture_handler.dart +8. widgets/effect_intensity_controls.dart +9. widgets/effect_preview_bottom_sheet.dart +10. widgets/main_view.dart +11. widgets/selector_widget.dart +12. widgets/shell_selection_sub_toolbar.dart + + 31. constants/constants.dart +2. helpers/image_effects.dart +3. models/app_icon_enum.dartselection_effect.dart + + + 41. providers/layers_provider.dart +2. providers/shell_provider.dart +3. widgets/nine_grid_selector.dart + + 11. constants/constants.dartcanvas_resize.dart + + + 51. models/image_placement_model.dart 2. providers/app_provider.dart 3. providers/app_provider_selection.dart 4. providers/app_provider_selection_commit.dart 5. widgets/canvas_gesture_handler.dart - - 11. models/user_action_drawing.dartimage_placement_layer_restore_state.dart + + 11. models/user_action_drawing.dartimage_placement_layer_restore_state.dart - - 161. models/image_placement_layer_restore_state.dart -2. panels/tools/tools_panel.dart -3. providers/app_provider.dart -4. providers/app_provider_selection.dart -5. providers/app_provider_tools.dart -6. providers/fill_service.dart -7. providers/layer_crop_state.dart -8. providers/layer_provider.dart -9. providers/layer_provider_storage_export.dart -10. providers/layers_provider.dart -11. shell_top_bar.dart -12. widgets/canvas_gesture_handler.dart -13. widgets/main_view.dart -14. widgets/shell_selection_sub_toolbar.dart -15. widgets/shortcuts.dart -16. widgets/text_editor.dart - - 51. models/app_icon_enum.dart + <path d="M 654.0,5825.0 L 670.0,5817.4 Q 673.0,5817.4 673.0,5820.4 L 673.0,5829.6 Q 673.0,5832.6 670.0,5832.6 Z" fill="#3b82f6"/> + <text x="667.28" y="5826.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold" textLength="10.120000000000001" lengthAdjust="spacingAndGlyphs">19</text><title>1. models/image_placement_layer_restore_state.dart +2. models/tool_descriptor.dart +3. models/tool_family.dart +4. panels/tools/tool_family_rail.dart +5. panels/tools/tools_panel.dart +6. providers/app_provider.dart +7. providers/app_provider_selection.dart +8. providers/app_provider_tools.dart +9. providers/fill_service.dart +10. providers/layer_crop_state.dart +11. providers/layer_provider.dart +12. providers/layer_provider_storage_export.dart +13. providers/layers_provider.dart +14. shell_top_bar.dart +15. widgets/canvas_gesture_handler.dart +16. widgets/main_view.dart +17. widgets/shell_selection_sub_toolbar.dart +18. widgets/shortcuts.dart +19. widgets/text_editor.dart + + 51. models/app_icon_enum.dart 2. models/brush_style.dart 3. models/halftone_fill.dart -4. models/text_object.dartuser_action_drawing.dart +4. models/text_object.dartuser_action_drawing.dart - - 31. models/render_helper.dart + <path d="M 656.0,5857.0 L 668.0,5850.0 Q 671.0,5850.0 671.0,5853.0 L 671.0,5861.0 Q 671.0,5864.0 668.0,5864.0 Z" fill="#3b82f6"/> + <text x="666.32" y="5858.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">3</text><title>1. models/render_helper.dart 2. models/user_action_drawing.dart 3. providers/fill_service.dart - - 11. constants/constants.darthalftone_fill.dart + + 11. constants/constants.darthalftone_fill.dart - - 41. models/render_helper.dart + <path d="M 656.0,5889.0 L 668.0,5882.0 Q 671.0,5882.0 671.0,5885.0 L 671.0,5893.0 Q 671.0,5896.0 668.0,5896.0 Z" fill="#3b82f6"/> + <text x="666.32" y="5890.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">4</text><title>1. models/render_helper.dart 2. models/user_action_drawing.dart 3. widgets/brush_style_picker.dart - - 11. constants/constants.dartbrush_style.dart + + 11. constants/constants.dartbrush_style.dart - - 51. providers/app_provider.dart + <path d="M 656.0,5921.0 L 668.0,5914.0 Q 671.0,5914.0 671.0,5917.0 L 671.0,5925.0 Q 671.0,5928.0 668.0,5928.0 Z" fill="#3b82f6"/> + <text x="666.32" y="5922.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">5</text><title>1. providers/app_provider.dart 2. widgets/text_attributes_widget.dart 3. widgets/text_editor.dart 4. widgets/text_editor_dialog.dart 5. widgets/text_style_toggle_buttons.dart - - 11. models/text_object.darttext_tool_state.dart + + 11. models/text_object.darttext_tool_state.dart - - 81. models/render_helper.dart + <path d="M 656.0,5953.0 L 668.0,5946.0 Q 671.0,5946.0 671.0,5949.0 L 671.0,5957.0 Q 671.0,5960.0 668.0,5960.0 Z" fill="#3b82f6"/> + <text x="666.32" y="5954.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">8</text><title>1. models/render_helper.dart 2. models/text_tool_state.dart 3. models/user_action_drawing.dart 4. providers/app_provider.dart @@ -4612,57 +4735,58 @@ 6. widgets/canvas_gesture_handler.dart 7. widgets/text_editor.dart 8. widgets/text_editor_dialog.dart - - 11. constants/constants.darttext_object.dart + + 11. constants/constants.darttext_object.dart - - 11. panels/side_panel/attribution_dialog.dartdependency_versions.dart + + 11. panels/side_panel/attribution_dialog.dartdependency_versions.dart - - 11. panels/side_panel/menu.dartmenu_model.dart + + 11. panels/side_panel/menu.dartmenu_model.dart - - 11. panels/side_panel/about.dartversion.dart + + 11. panels/side_panel/about.dartversion.dart - - 51. models/effect_preview_model.dart + <path d="M 656.0,6081.0 L 668.0,6074.0 Q 671.0,6074.0 671.0,6077.0 L 671.0,6085.0 Q 671.0,6088.0 668.0,6088.0 Z" fill="#3b82f6"/> + <text x="666.32" y="6082.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">5</text><title>1. models/effect_preview_model.dart 2. models/fill_model.dart 3. models/image_placement_model.dart 4. models/selector_model.dart -5. models/transform_model.dartvisible_model.dart +5. models/transform_model.dartvisible_model.dart - - 311. models/selection_effect.dart -2. models/user_action_drawing.dart -3. pages/platforms_page.dart -4. pages/settings_page.dart -5. panels/layers/layer_selector.dart -6. panels/side_panel/canvas_settings.dart -7. panels/side_panel/menu.dart -8. panels/side_panel/recent_files_dialog.dart -9. panels/side_panel/share_panel.dart -10. panels/tools/tools_panel.dart -11. shell_top_bar.dart -12. widgets/app_button_row.dart -13. widgets/app_buttons.dart -14. widgets/app_icon.dart -15. widgets/brush_style_picker.dart -16. widgets/color_picker_dialog.dart -17. widgets/color_preview.dart -18. widgets/gradient_color_list_editor.dart -19. widgets/halftone_size_picker.dart -20. widgets/magnifying_eye_dropper.dart -21. widgets/nine_grid_selector.dart -22. widgets/overlay_control_widgets.dart -23. widgets/selector_widget.dart -24. widgets/shell_selection_sub_toolbar.dart -25. widgets/text_attributes_widget.dart -26. widgets/text_editor_dialog.dart -27. widgets/text_style_toggle_buttons.dart -28. widgets/tolerance_picker.dart -29. widgets/toolbar_icon_button.dart -30. widgets/top_colors.dart -31. widgets/transform_widget.dartapp_icon_enum.dart + + 321. models/selection_effect.dart +2. models/tool_descriptor.dart +3. models/user_action_drawing.dart +4. pages/platforms_page.dart +5. pages/settings_page.dart +6. panels/layers/layer_selector.dart +7. panels/side_panel/canvas_settings.dart +8. panels/side_panel/menu.dart +9. panels/side_panel/recent_files_dialog.dart +10. panels/side_panel/share_panel.dart +11. panels/tools/tools_panel.dart +12. shell_top_bar.dart +13. widgets/app_button_row.dart +14. widgets/app_buttons.dart +15. widgets/app_icon.dart +16. widgets/brush_style_picker.dart +17. widgets/color_picker_dialog.dart +18. widgets/color_preview.dart +19. widgets/gradient_color_list_editor.dart +20. widgets/halftone_size_picker.dart +21. widgets/magnifying_eye_dropper.dart +22. widgets/nine_grid_selector.dart +23. widgets/overlay_control_widgets.dart +24. widgets/selector_widget.dart +25. widgets/shell_selection_sub_toolbar.dart +26. widgets/text_attributes_widget.dart +27. widgets/text_editor_dialog.dart +28. widgets/text_style_toggle_buttons.dart +29. widgets/tolerance_picker.dart +30. widgets/toolbar_icon_button.dart +31. widgets/top_colors.dart +32. widgets/transform_widget.dartapp_icon_enum.dart 11. shell_top_bar.dart @@ -4776,38 +4900,49 @@ 11. panels/side_panel/side_panel.dart - 271. constants/constants.dart + <text x="636.72" y="807.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold" textLength="10.120000000000001" lengthAdjust="spacingAndGlyphs">23</text><title>1. constants/constants.dart 2. l10n/app_localizations.dart 3. models/app_icon_enum.dart -4. models/effect_labels.dart -5. models/fill_model.dart -6. models/selection_effect.dart -7. models/user_action_drawing.dart -8. providers/app_provider.dart -9. providers/app_provider_canvas.dart -10. providers/app_provider_selection.dart -11. providers/app_provider_tools.dart -12. widgets/app_icon.dart -13. widgets/brush_intensity_picker.dart -14. widgets/brush_size_picker.dart -15. widgets/brush_style_picker.dart -16. widgets/color_picker_dialog.dart -17. widgets/color_preview.dart -18. widgets/color_selector.dart -19. widgets/effect_intensity_controls.dart -20. widgets/gradient_color_list_editor.dart -21. widgets/halftone_size_picker.dart -22. widgets/material_free.dart -23. widgets/side_panel_header.dart -24. widgets/text_attributes_widget.dart -25. widgets/tolerance_picker.dart -26. widgets/tool_attribute_widget.dart -27. widgets/top_colors.darttools_panel.dart - - - 11. panels/side_panel/top_menu_and_layers_panel.dart - - 141. constants/constants.dart +4. models/fill_model.dart +5. models/user_action_drawing.dart +6. panels/tools/tool_family_rail.dart +7. providers/app_provider.dart +8. providers/app_provider_canvas.dart +9. providers/app_provider_tools.dart +10. widgets/app_icon.dart +11. widgets/brush_intensity_picker.dart +12. widgets/brush_size_picker.dart +13. widgets/brush_style_picker.dart +14. widgets/color_picker_dialog.dart +15. widgets/color_preview.dart +16. widgets/color_selector.dart +17. widgets/gradient_color_list_editor.dart +18. widgets/halftone_size_picker.dart +19. widgets/material_free.dart +20. widgets/text_attributes_widget.dart +21. widgets/tolerance_picker.dart +22. widgets/tool_attribute_widget.dart +23. widgets/top_colors.darttools_panel.dart + + + 11. panels/tools/tools_panel.dart + + 111. constants/constants.dart +2. l10n/app_localizations.dart +3. models/effect_labels.dart +4. models/selection_effect.dart +5. models/tool_descriptor.dart +6. models/user_action_drawing.dart +7. providers/app_provider.dart +8. providers/app_provider_selection.dart +9. widgets/app_buttons.dart +10. widgets/app_slider.dart +11. widgets/side_panel_header.darttool_family_rail.dart + + + 11. panels/side_panel/top_menu_and_layers_panel.dart + + 141. constants/constants.dart 2. l10n/app_localizations.dart 3. models/app_icon_enum.dart 4. panels/layers/blend_mode.dart @@ -4820,37 +4955,37 @@ 11. widgets/color_preview.dart 12. widgets/container_slider.dart 13. widgets/material_free.dart -14. widgets/truncated_text.dartlayer_selector.dart - - - 11. panels/layers/layer_selector.dart - - 41. constants/constants.dart -2. providers/layer_provider.dart -3. widgets/image_painter.dart -4. widgets/transparent_background.dartlayer_thumbnail.dart +14. widgets/truncated_text.dartlayer_selector.dart 11. panels/layers/layer_selector.dart - 21. l10n/app_localizations.dart -2. widgets/material_free.dartblend_mode.dart + 41. constants/constants.dart +2. providers/layer_provider.dart +3. widgets/image_painter.dart +4. widgets/transparent_background.dartlayer_thumbnail.dart + + + 11. panels/layers/layer_selector.dart + + 21. l10n/app_localizations.dart +2. widgets/material_free.dartblend_mode.dart - - 31. panels/tools/tools_panel.dart + <path d="M 656.0,4615.0 L 668.0,4608.0 Q 671.0,4608.0 671.0,4611.0 L 671.0,4619.0 Q 671.0,4622.0 668.0,4622.0 Z" fill="#3b82f6"/> + <text x="666.32" y="4616.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">3</text><title>1. panels/tools/tools_panel.dart 2. widgets/canvas_gesture_handler.dart 3. widgets/main_view.dart - - 71. models/fill_model.dart + <path d="M 672.0,4626.0 L 660.0,4619.0 Q 657.0,4619.0 657.0,4622.0 L 657.0,4630.0 Q 657.0,4633.0 660.0,4633.0 Z" fill="#10b981"/> + <text x="661.68" y="4627.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">7</text><title>1. models/fill_model.dart 2. models/selector_model.dart 3. models/user_action_drawing.dart 4. providers/app_provider.dart 5. providers/app_provider_canvas.dart 6. providers/app_provider_selection.dart -7. providers/fill_service.dartapp_provider_tools.dart +7. providers/fill_service.dartapp_provider_tools.dart - - 101. files/import_files.dart + <path d="M 654.0,4647.0 L 670.0,4639.4 Q 673.0,4639.4 673.0,4642.4 L 673.0,4651.6 Q 673.0,4654.6 670.0,4654.6 Z" fill="#3b82f6"/> + <text x="667.28" y="4648.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold" textLength="10.120000000000001" lengthAdjust="spacingAndGlyphs">10</text><title>1. files/import_files.dart 2. panels/side_panel/menu.dart 3. panels/side_panel/recent_files_dialog.dart 4. panels/tools/tools_panel.dart @@ -4860,18 +4995,18 @@ 8. widgets/canvas_gesture_handler.dart 9. widgets/main_view.dart 10. widgets/shortcuts.dart - - 51. constants/constants.dart + <path d="M 672.0,4658.0 L 660.0,4651.0 Q 657.0,4651.0 657.0,4654.0 L 657.0,4662.0 Q 657.0,4665.0 660.0,4665.0 Z" fill="#10b981"/> + <text x="661.68" y="4659.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">5</text><title>1. constants/constants.dart 2. helpers/image_helper.dart 3. models/fill_model.dart 4. providers/app_provider.dart -5. providers/app_provider_selection.dartapp_provider_canvas.dart +5. providers/app_provider_selection.dartapp_provider_canvas.dart - - 131. panels/layers/layer_selector.dart + <path d="M 654.0,4679.0 L 670.0,4671.4 Q 673.0,4671.4 673.0,4674.4 L 673.0,4683.6 Q 673.0,4686.6 670.0,4686.6 Z" fill="#3b82f6"/> + <text x="667.28" y="4680.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold" textLength="10.120000000000001" lengthAdjust="spacingAndGlyphs">13</text><title>1. panels/layers/layer_selector.dart 2. panels/side_panel/recent_files_dialog.dart 3. panels/side_panel/side_panel.dart -4. panels/tools/tools_panel.dart +4. panels/tools/tool_family_rail.dart 5. providers/app_provider_canvas.dart 6. providers/app_provider_tools.dart 7. shell_top_bar.dart @@ -4881,8 +5016,8 @@ 11. widgets/main_view.dart 12. widgets/shell_selection_sub_toolbar.dart 13. widgets/shortcuts.dart - - 131. constants/constants.dart + <path d="M 674.0,4690.0 L 658.0,4682.4 Q 655.0,4682.4 655.0,4685.4 L 655.0,4694.6 Q 655.0,4697.6 658.0,4697.6 Z" fill="#10b981"/> + <text x="660.72" y="4691.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold" textLength="10.120000000000001" lengthAdjust="spacingAndGlyphs">13</text><title>1. constants/constants.dart 2. helpers/image_helper.dart 3. helpers/transform_helper.dart 4. models/image_placement_layer_restore_state.dart @@ -4894,25 +5029,25 @@ 10. providers/app_provider_selection_commit.dart 11. providers/fill_service.dart 12. providers/layer_crop_state.dart -13. providers/wand_selection_manager.dartapp_provider_selection.dart +13. providers/wand_selection_manager.dartapp_provider_selection.dart - - 11. files/file_ora.dart - - 41. constants/constants.dart + <path d="M 656.0,4711.0 L 668.0,4704.0 Q 671.0,4704.0 671.0,4707.0 L 671.0,4715.0 Q 671.0,4718.0 668.0,4718.0 Z" fill="#3b82f6"/> + <text x="666.32" y="4712.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. files/file_ora.dart + + 41. constants/constants.dart 2. helpers/image_helper.dart 3. models/user_action_drawing.dart -4. providers/layer_provider.dartlayer_provider_storage_export.dart +4. providers/layer_provider.dartlayer_provider_storage_export.dart - - 11. providers/app_provider_selection.dart - - 31. models/image_placement_layer_restore_state.dart + <path d="M 656.0,4743.0 L 668.0,4736.0 Q 671.0,4736.0 671.0,4739.0 L 671.0,4747.0 Q 671.0,4750.0 668.0,4750.0 Z" fill="#3b82f6"/> + <text x="666.32" y="4744.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. providers/app_provider_selection.dart + + 31. models/image_placement_layer_restore_state.dart 2. models/selector_model.dart -3. providers/app_provider.dartapp_provider_selection_commit.dart +3. providers/app_provider.dartapp_provider_selection_commit.dart - - 241. files/import_files.dart + <path d="M 654.0,4775.0 L 670.0,4767.4 Q 673.0,4767.4 673.0,4770.4 L 673.0,4779.6 Q 673.0,4782.6 670.0,4782.6 Z" fill="#3b82f6"/> + <text x="667.28" y="4776.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold" textLength="10.120000000000001" lengthAdjust="spacingAndGlyphs">25</text><title>1. files/import_files.dart 2. main.dart 3. main_screen.dart 4. panels/layers/layer_selector.dart @@ -4921,41 +5056,43 @@ 7. panels/side_panel/recent_files_dialog.dart 8. panels/side_panel/share_panel.dart 9. panels/side_panel/side_panel.dart -10. panels/tools/tools_panel.dart -11. providers/app_provider_canvas.dart -12. providers/app_provider_selection.dart -13. providers/app_provider_selection_commit.dart -14. providers/app_provider_tools.dart -15. recovery/draft_recovery_controller.dart -16. shell_top_bar.dart -17. widgets/canvas_gesture_handler.dart -18. widgets/effect_intensity_controls.dart -19. widgets/effect_preview_bottom_sheet.dart -20. widgets/main_view.dart -21. widgets/shell_selection_sub_toolbar.dart -22. widgets/shortcuts.dart -23. widgets/text_attributes_widget.dart -24. widgets/text_editor.dart - - 171. constants/constants.dart +10. panels/tools/tool_family_rail.dart +11. panels/tools/tools_panel.dart +12. providers/app_provider_canvas.dart +13. providers/app_provider_selection.dart +14. providers/app_provider_selection_commit.dart +15. providers/app_provider_tools.dart +16. recovery/draft_recovery_controller.dart +17. shell_top_bar.dart +18. widgets/canvas_gesture_handler.dart +19. widgets/effect_intensity_controls.dart +20. widgets/effect_preview_bottom_sheet.dart +21. widgets/main_view.dart +22. widgets/shell_selection_sub_toolbar.dart +23. widgets/shortcuts.dart +24. widgets/text_attributes_widget.dart +25. widgets/text_editor.dart + + 181. constants/constants.dart 2. helpers/image_helper.dart -3. models/effect_preview_model.dart -4. models/fill_model.dart -5. models/image_placement_layer_restore_state.dart -6. models/image_placement_model.dart -7. models/selector_model.dart -8. models/text_object.dart -9. models/text_tool_state.dart -10. models/transform_model.dart -11. models/user_action_drawing.dart -12. providers/app_preferences.dart -13. providers/fill_service.dart -14. providers/layers_provider.dart -15. providers/undo_provider.dart -16. providers/wand_selection_manager.dartapp_provider.dart +3. models/effect_brush_model.dart +4. models/effect_preview_model.dart +5. models/fill_model.dart +6. models/image_placement_layer_restore_state.dart +7. models/image_placement_model.dart +8. models/selector_model.dart +9. models/text_object.dart +10. models/text_tool_state.dart +11. models/transform_model.dart +12. models/user_action_drawing.dart +13. providers/app_preferences.dart +14. providers/fill_service.dart +15. providers/layers_provider.dart +16. providers/undo_provider.dart +17. providers/wand_selection_manager.dartapp_provider.dart - - 121. files/export_download_non_web.dart + <path d="M 654.0,4807.0 L 670.0,4799.4 Q 673.0,4799.4 673.0,4802.4 L 673.0,4811.6 Q 673.0,4814.6 670.0,4814.6 Z" fill="#3b82f6"/> + <text x="667.28" y="4808.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold" textLength="10.120000000000001" lengthAdjust="spacingAndGlyphs">12</text><title>1. files/export_download_non_web.dart 2. files/export_download_web.dart 3. files/export_prepare.dart 4. files/file_ora.dart @@ -4966,53 +5103,53 @@ 9. widgets/canvas_panel.dart 10. widgets/color_picker_dialog.dart 11. widgets/magnifying_eye_dropper.dart - - 91. constants/constants.dart + <path d="M 672.0,4818.0 L 660.0,4811.0 Q 657.0,4811.0 657.0,4814.0 L 657.0,4822.0 Q 657.0,4825.0 660.0,4825.0 Z" fill="#10b981"/> + <text x="661.68" y="4819.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">9</text><title>1. constants/constants.dart 2. helpers/color_helper.dart 3. helpers/image_helper.dart 4. helpers/log_helper.dart 5. models/canvas_resize.dart 6. models/user_action_drawing.dart 7. providers/layer_provider.dart -8. providers/undo_provider.dartlayers_provider.dart +8. providers/undo_provider.dartlayers_provider.dart - - 51. panels/layers/layer_thumbnail.dart + <path d="M 656.0,4839.0 L 668.0,4832.0 Q 671.0,4832.0 671.0,4835.0 L 671.0,4843.0 Q 671.0,4846.0 668.0,4846.0 Z" fill="#3b82f6"/> + <text x="666.32" y="4840.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">5</text><title>1. panels/layers/layer_thumbnail.dart 2. providers/layer_provider_storage_export.dart 3. providers/layers_provider.dart 4. widgets/canvas_panel_painter.dart - - 71. constants/constants.dart + <path d="M 672.0,4850.0 L 660.0,4843.0 Q 657.0,4843.0 657.0,4846.0 L 657.0,4854.0 Q 657.0,4857.0 660.0,4857.0 Z" fill="#10b981"/> + <text x="661.68" y="4851.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">7</text><title>1. constants/constants.dart 2. helpers/color_helper.dart 3. helpers/draw_path_helper.dart 4. helpers/image_helper.dart 5. models/render_helper.dart 6. models/text_object.dart -7. models/user_action_drawing.dartlayer_provider.dart +7. models/user_action_drawing.dartlayer_provider.dart - - 21. providers/app_provider.dart + <path d="M 656.0,4871.0 L 668.0,4864.0 Q 671.0,4864.0 671.0,4867.0 L 671.0,4875.0 Q 671.0,4878.0 668.0,4878.0 Z" fill="#3b82f6"/> + <text x="666.32" y="4872.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">2</text><title>1. providers/app_provider.dart 2. providers/app_provider_selection.dart - - 41. constants/constants.dart + <path d="M 672.0,4882.0 L 660.0,4875.0 Q 657.0,4875.0 657.0,4878.0 L 657.0,4886.0 Q 657.0,4889.0 660.0,4889.0 Z" fill="#10b981"/> + <text x="661.68" y="4883.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">4</text><title>1. constants/constants.dart 2. providers/fill_service.dart -3. providers/wand_selection_request.dartwand_selection_manager.dart +3. providers/wand_selection_request.dartwand_selection_manager.dart - - 41. providers/app_provider.dart + <path d="M 656.0,4903.0 L 668.0,4896.0 Q 671.0,4896.0 671.0,4899.0 L 671.0,4907.0 Q 671.0,4910.0 668.0,4910.0 Z" fill="#3b82f6"/> + <text x="666.32" y="4904.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">4</text><title>1. providers/app_provider.dart 2. providers/app_provider_selection.dart 3. providers/app_provider_tools.dart 4. providers/wand_selection_manager.dart - - 61. constants/constants.dart + <path d="M 672.0,4914.0 L 660.0,4907.0 Q 657.0,4907.0 657.0,4910.0 L 657.0,4918.0 Q 657.0,4921.0 660.0,4921.0 Z" fill="#10b981"/> + <text x="661.68" y="4915.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">6</text><title>1. constants/constants.dart 2. helpers/image_helper.dart 3. models/fill_model.dart 4. models/halftone_fill.dart 5. models/user_action_drawing.dart -6. providers/flood_fill.dartfill_service.dart +6. providers/flood_fill.dartfill_service.dart - - 151. files/export_download_non_web.dart + <path d="M 654.0,4935.0 L 670.0,4927.4 Q 673.0,4927.4 673.0,4930.4 L 673.0,4939.6 Q 673.0,4942.6 670.0,4942.6 Z" fill="#3b82f6"/> + <text x="667.28" y="4936.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold" textLength="10.120000000000001" lengthAdjust="spacingAndGlyphs">15</text><title>1. files/export_download_non_web.dart 2. files/export_download_web.dart 3. files/import_files.dart 4. files/save.dart @@ -5027,13 +5164,13 @@ 13. providers/app_provider.dart 14. recovery/draft_recovery_controller.dart 15. widgets/canvas_gesture_handler.dart - - 31. constants/constants.dart + <path d="M 672.0,4946.0 L 660.0,4939.0 Q 657.0,4939.0 657.0,4942.0 L 657.0,4950.0 Q 657.0,4953.0 660.0,4953.0 Z" fill="#10b981"/> + <text x="661.68" y="4947.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">3</text><title>1. constants/constants.dart 2. helpers/log_helper.dart -3. providers/macos_bookmark_service.dartapp_preferences.dart +3. providers/macos_bookmark_service.dartapp_preferences.dart - - 171. files/import_files.dart + <path d="M 654.0,4967.0 L 670.0,4959.4 Q 673.0,4959.4 673.0,4962.4 L 673.0,4971.6 Q 673.0,4974.6 670.0,4974.6 Z" fill="#3b82f6"/> + <text x="667.28" y="4968.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold" textLength="10.120000000000001" lengthAdjust="spacingAndGlyphs">17</text><title>1. files/import_files.dart 2. files/save.dart 3. main.dart 4. main_screen.dart @@ -5050,51 +5187,51 @@ 15. widgets/shell_selection_sub_toolbar.dart 16. widgets/shortcuts.dart 17. widgets/transform_widget.dart - - 31. constants/constants.dart -2. models/canvas_resize.dartshell_provider.dart + + 31. constants/constants.dart +2. models/canvas_resize.dartshell_provider.dart - - 51. main.dart + <path d="M 656.0,4999.0 L 668.0,4992.0 Q 671.0,4992.0 671.0,4995.0 L 671.0,5003.0 Q 671.0,5006.0 668.0,5006.0 Z" fill="#3b82f6"/> + <text x="666.32" y="5000.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">5</text><title>1. main.dart 2. panels/layers/layer_selector.dart 3. providers/app_provider.dart 4. providers/layers_provider.dart 5. widgets/canvas_gesture_handler.dart - - 21. constants/constants.dart -2. helpers/log_helper.dartundo_provider.dart - - - 11. providers/fill_service.dart - 11. constants/constants.dartflood_fill.dart + 21. constants/constants.dart +2. helpers/log_helper.dartundo_provider.dart - 11. providers/app_provider_selection.dart + 11. providers/fill_service.dart - 11. models/user_action_drawing.dartlayer_crop_state.dart + 11. constants/constants.dartflood_fill.dart - 51. files/export_download_non_web.dart + <text x="666.32" y="5064.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. providers/app_provider_selection.dart + + 11. models/user_action_drawing.dartlayer_crop_state.dart + + + 51. files/export_download_non_web.dart 2. files/save.dart 3. files/save_backup.dart 4. panels/side_panel/recent_files_dialog.dart 5. providers/app_preferences.dart - - 11. helpers/log_helper.dartmacos_bookmark_service.dart -app_provider_selection_crop.dart -app_provider_selection_effects.dart -layer_provider_display_cache.dart -layer_provider_live_preview.dart -layer_provider_transform.dart - - - 21. providers/wand_selection_manager.dartwand_selection_request.dart - - - 11. main_screen.dart - - 201. constants/constants.dart + <path d="M 672.0,5106.0 L 660.0,5099.0 Q 657.0,5099.0 657.0,5102.0 L 657.0,5110.0 Q 657.0,5113.0 660.0,5113.0 Z" fill="#10b981"/> + <text x="661.68" y="5107.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. helpers/log_helper.dartmacos_bookmark_service.dart +app_provider_selection_crop.dart +app_provider_selection_effects.dart +layer_provider_display_cache.dart +layer_provider_live_preview.dart +layer_provider_transform.dart + + + 21. providers/wand_selection_manager.dartwand_selection_request.dart + + + 11. main_screen.dart + + 211. constants/constants.dart 2. l10n/app_localizations.dart 3. models/fill_model.dart 4. models/selection_effect.dart @@ -5111,37 +5248,40 @@ 15. widgets/fill_widget.dart 16. widgets/magnifying_eye_dropper.dart 17. widgets/material_free.dart -18. widgets/selector_widget.dart -19. widgets/text_editor.dart -20. widgets/transform_widget.dartmain_view.dart +18. widgets/overlay_control_widgets.dart +19. widgets/selector_widget.dart +20. widgets/text_editor.dart +21. widgets/transform_widget.dartmain_view.dart - - 11. widgets/main_view.dart - - 191. constants/constants.dart + <path d="M 656.0,2413.0 L 668.0,2406.0 Q 671.0,2406.0 671.0,2409.0 L 671.0,2417.0 Q 671.0,2420.0 668.0,2420.0 Z" fill="#3b82f6"/> + <text x="666.32" y="2414.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. widgets/main_view.dart + + 211. constants/constants.dart 2. helpers/draft_flusher.dart 3. helpers/image_helper.dart 4. helpers/smudge_helper.dart -5. l10n/app_localizations.dart -6. models/fill_model.dart -7. models/image_placement_layer_restore_state.dart -8. models/selector_model.dart -9. models/text_object.dart -10. models/user_action_drawing.dart -11. providers/app_preferences.dart -12. providers/app_provider.dart -13. providers/app_provider_canvas.dart -14. providers/app_provider_selection.dart -15. providers/app_provider_tools.dart -16. providers/shell_provider.dart -17. providers/undo_provider.dart -18. widgets/material_free.dart -19. widgets/text_editor_dialog.dartcanvas_gesture_handler.dart +5. helpers/transform_helper.dart +6. l10n/app_localizations.dart +7. models/fill_model.dart +8. models/image_placement_layer_restore_state.dart +9. models/selection_effect.dart +10. models/selector_model.dart +11. models/text_object.dart +12. models/user_action_drawing.dart +13. providers/app_preferences.dart +14. providers/app_provider.dart +15. providers/app_provider_canvas.dart +16. providers/app_provider_selection.dart +17. providers/app_provider_tools.dart +18. providers/shell_provider.dart +19. providers/undo_provider.dart +20. widgets/material_free.dart +21. widgets/text_editor_dialog.dartcanvas_gesture_handler.dart - - 11. shell_top_bar.dart - - 171. constants/constants.dart + <path d="M 656.0,2445.0 L 668.0,2438.0 Q 671.0,2438.0 671.0,2441.0 L 671.0,2449.0 Q 671.0,2452.0 668.0,2452.0 Z" fill="#3b82f6"/> + <text x="666.32" y="2446.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. shell_top_bar.dart + + 171. constants/constants.dart 2. helpers/shortcut_tooltip.dart 3. helpers/shortcuts_constants.dart 4. l10n/app_localizations.dart @@ -5157,12 +5297,12 @@ 14. widgets/effect_preview_bottom_sheet.dart 15. widgets/material_free.dart 16. widgets/overlay_control_widgets.dart -17. widgets/toolbar_icon_button.dartshell_selection_sub_toolbar.dart +17. widgets/toolbar_icon_button.dartshell_selection_sub_toolbar.dart - - 11. widgets/main_view.dart - - 131. constants/constants.dart + <path d="M 656.0,2477.0 L 668.0,2470.0 Q 671.0,2470.0 671.0,2473.0 L 671.0,2481.0 Q 671.0,2484.0 668.0,2484.0 Z" fill="#3b82f6"/> + <text x="666.32" y="2478.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. widgets/main_view.dart + + 131. constants/constants.dart 2. helpers/draw_path_helper.dart 3. helpers/transform_helper.dart 4. l10n/app_localizations.dart @@ -5174,12 +5314,12 @@ 10. widgets/app_icon.dart 11. widgets/marching_ants_path.dart 12. widgets/material_free.dart -13. widgets/overlay_control_widgets.dartselector_widget.dart +13. widgets/overlay_control_widgets.dartselector_widget.dart - - 11. panels/tools/tools_panel.dart - - 131. constants/constants.dart + <path d="M 656.0,2509.0 L 668.0,2502.0 Q 671.0,2502.0 671.0,2505.0 L 671.0,2513.0 Q 671.0,2516.0 668.0,2516.0 Z" fill="#3b82f6"/> + <text x="666.32" y="2510.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. panels/tools/tools_panel.dart + + 131. constants/constants.dart 2. l10n/app_localizations.dart 3. models/app_icon_enum.dart 4. models/text_tool_state.dart @@ -5191,13 +5331,13 @@ 10. widgets/color_selector.dart 11. widgets/material_free.dart 12. widgets/text_formatting_controls.dart -13. widgets/tool_attribute_widget.darttext_attributes_widget.dart +13. widgets/tool_attribute_widget.darttext_attributes_widget.dart - - 21. main.dart + <path d="M 656.0,2541.0 L 668.0,2534.0 Q 671.0,2534.0 671.0,2537.0 L 671.0,2545.0 Q 671.0,2548.0 668.0,2548.0 Z" fill="#3b82f6"/> + <text x="666.32" y="2542.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">2</text><title>1. main.dart 2. pages/settings_page.dart - - 91. constants/constants.dart + <path d="M 672.0,2552.0 L 660.0,2545.0 Q 657.0,2545.0 657.0,2548.0 L 657.0,2556.0 Q 657.0,2559.0 660.0,2559.0 Z" fill="#10b981"/> + <text x="661.68" y="2553.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">9</text><title>1. constants/constants.dart 2. models/user_action_drawing.dart 3. providers/app_provider.dart 4. providers/app_provider_canvas.dart @@ -5205,84 +5345,83 @@ 6. providers/shell_provider.dart 7. widgets/confirm_discard_dialog.dart 8. widgets/material_free.dart -9. widgets/shortcuts_help.dartshortcuts.dart +9. widgets/shortcuts_help.dartshortcuts.dart - - 11. panels/tools/tools_panel.dart - - 81. constants/constants.dart + <path d="M 656.0,2573.0 L 668.0,2566.0 Q 671.0,2566.0 671.0,2569.0 L 671.0,2577.0 Q 671.0,2580.0 668.0,2580.0 Z" fill="#3b82f6"/> + <text x="666.32" y="2574.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. panels/tools/tools_panel.dart + + 81. constants/constants.dart 2. l10n/app_localizations.dart 3. models/app_icon_enum.dart 4. models/fill_model.dart 5. widgets/app_buttons.dart 6. widgets/app_text_field.dart 7. widgets/color_picker_dialog.dart -8. widgets/color_preview.dartgradient_color_list_editor.dart +8. widgets/color_preview.dartgradient_color_list_editor.dart - - 11. widgets/main_view.dart - - 81. constants/constants.dart + <path d="M 656.0,2605.0 L 668.0,2598.0 Q 671.0,2598.0 671.0,2601.0 L 671.0,2609.0 Q 671.0,2612.0 668.0,2612.0 Z" fill="#3b82f6"/> + <text x="666.32" y="2606.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. widgets/main_view.dart + + 81. constants/constants.dart 2. l10n/app_localizations.dart 3. models/text_object.dart 4. models/text_tool_state.dart 5. models/user_action_drawing.dart 6. providers/app_provider.dart 7. widgets/material_free.dart -8. widgets/text_editor_dialog.darttext_editor.dart +8. widgets/text_editor_dialog.darttext_editor.dart - - 21. widgets/canvas_gesture_handler.dart + <path d="M 656.0,2637.0 L 668.0,2630.0 Q 671.0,2630.0 671.0,2633.0 L 671.0,2641.0 Q 671.0,2644.0 668.0,2644.0 Z" fill="#3b82f6"/> + <text x="666.32" y="2638.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">2</text><title>1. widgets/canvas_gesture_handler.dart 2. widgets/text_editor.dart - - 81. constants/constants.dart + <path d="M 672.0,2648.0 L 660.0,2641.0 Q 657.0,2641.0 657.0,2644.0 L 657.0,2652.0 Q 657.0,2655.0 660.0,2655.0 Z" fill="#10b981"/> + <text x="661.68" y="2649.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">8</text><title>1. constants/constants.dart 2. l10n/app_localizations.dart 3. models/app_icon_enum.dart 4. models/text_object.dart 5. models/text_tool_state.dart 6. widgets/color_picker_dialog.dart 7. widgets/material_free.dart -8. widgets/text_formatting_controls.darttext_editor_dialog.dart +8. widgets/text_formatting_controls.darttext_editor_dialog.dart - - 11. widgets/main_view.dart - - 71. constants/constants.dart + <path d="M 656.0,2669.0 L 668.0,2662.0 Q 671.0,2662.0 671.0,2665.0 L 671.0,2673.0 Q 671.0,2676.0 668.0,2676.0 Z" fill="#3b82f6"/> + <text x="666.32" y="2670.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. widgets/main_view.dart + + 71. constants/constants.dart 2. helpers/image_helper.dart 3. models/app_icon_enum.dart 4. providers/layers_provider.dart 5. widgets/draw_rect.dart 6. widgets/material_free.dart -7. widgets/overlay_control_widgets.dartmagnifying_eye_dropper.dart +7. widgets/overlay_control_widgets.dartmagnifying_eye_dropper.dart - - 11. widgets/main_view.dart - - 71. constants/constants.dart + <path d="M 656.0,2701.0 L 668.0,2694.0 Q 671.0,2694.0 671.0,2697.0 L 671.0,2705.0 Q 671.0,2708.0 668.0,2708.0 Z" fill="#3b82f6"/> + <text x="666.32" y="2702.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. widgets/main_view.dart + + 71. constants/constants.dart 2. helpers/transform_helper.dart 3. l10n/app_localizations.dart 4. models/app_icon_enum.dart 5. models/transform_model.dart 6. providers/shell_provider.dart -7. widgets/overlay_control_widgets.darttransform_widget.dart +7. widgets/overlay_control_widgets.darttransform_widget.dart - - 21. widgets/main_view.dart + <path d="M 656.0,2733.0 L 668.0,2726.0 Q 671.0,2726.0 671.0,2729.0 L 671.0,2737.0 Q 671.0,2740.0 668.0,2740.0 Z" fill="#3b82f6"/> + <text x="666.32" y="2734.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">2</text><title>1. widgets/main_view.dart 2. widgets/shell_selection_sub_toolbar.dart - - 71. constants/constants.dart + <path d="M 672.0,2744.0 L 660.0,2737.0 Q 657.0,2737.0 657.0,2740.0 L 657.0,2748.0 Q 657.0,2751.0 660.0,2751.0 Z" fill="#10b981"/> + <text x="661.68" y="2745.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">7</text><title>1. constants/constants.dart 2. l10n/app_localizations.dart 3. models/selection_effect.dart 4. providers/app_provider.dart 5. providers/app_provider_selection.dart 6. widgets/effect_intensity_controls.dart -7. widgets/material_free.darteffect_preview_bottom_sheet.dart +7. widgets/material_free.darteffect_preview_bottom_sheet.dart - - 21. panels/tools/tools_panel.dart -2. widgets/effect_preview_bottom_sheet.dart - - 101. constants/constants.dart + <path d="M 656.0,2765.0 L 668.0,2758.0 Q 671.0,2758.0 671.0,2761.0 L 671.0,2769.0 Q 671.0,2772.0 668.0,2772.0 Z" fill="#3b82f6"/> + <text x="666.32" y="2766.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. widgets/effect_preview_bottom_sheet.dart + + 101. constants/constants.dart 2. l10n/app_localizations.dart 3. models/effect_labels.dart 4. models/selection_effect.dart @@ -5291,27 +5430,17 @@ 7. widgets/app_button_row.dart 8. widgets/app_icon.dart 9. widgets/app_slider.dart -10. widgets/app_snackbar.darteffect_intensity_controls.dart - - - 11. panels/tools/tools_panel.dart - - 61. l10n/app_localizations.dart -2. models/app_icon_enum.dart -3. models/brush_style.dart -4. widgets/app_icon.dart -5. widgets/base_picker.dart -6. widgets/material_free.dartbrush_style_picker.dart +10. widgets/app_snackbar.darteffect_intensity_controls.dart 11. panels/tools/tools_panel.dart - 61. constants/constants.dart -2. l10n/app_localizations.dart -3. models/app_icon_enum.dart + <text x="661.68" y="2809.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">6</text><title>1. l10n/app_localizations.dart +2. models/app_icon_enum.dart +3. models/brush_style.dart 4. widgets/app_icon.dart 5. widgets/base_picker.dart -6. widgets/material_free.darthalftone_size_picker.dart +6. widgets/material_free.dartbrush_style_picker.dart 11. panels/tools/tools_panel.dart @@ -5321,26 +5450,36 @@ 3. models/app_icon_enum.dart 4. widgets/app_icon.dart 5. widgets/base_picker.dart -6. widgets/material_free.darttolerance_picker.dart +6. widgets/material_free.darthalftone_size_picker.dart - 11. widgets/main_view.dart + 11. panels/tools/tools_panel.dart - 51. constants/constants.dart + <text x="661.68" y="2873.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">6</text><title>1. constants/constants.dart +2. l10n/app_localizations.dart +3. models/app_icon_enum.dart +4. widgets/app_icon.dart +5. widgets/base_picker.dart +6. widgets/material_free.darttolerance_picker.dart + + + 11. widgets/main_view.dart + + 51. constants/constants.dart 2. l10n/app_localizations.dart 3. models/fill_model.dart 4. widgets/color_picker_dialog.dart -5. widgets/marching_ants_path.dartfill_widget.dart +5. widgets/marching_ants_path.dartfill_widget.dart - - 61. panels/layers/layer_selector.dart + <path d="M 656.0,2925.0 L 668.0,2918.0 Q 671.0,2918.0 671.0,2921.0 L 671.0,2929.0 Q 671.0,2932.0 668.0,2932.0 Z" fill="#3b82f6"/> + <text x="666.32" y="2926.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">6</text><title>1. panels/layers/layer_selector.dart 2. panels/tools/tools_panel.dart 3. widgets/fill_widget.dart 4. widgets/gradient_color_list_editor.dart 5. widgets/text_attributes_widget.dart 6. widgets/text_editor_dialog.dart - - 131. constants/constants.dart + <path d="M 674.0,2936.0 L 658.0,2928.4 Q 655.0,2928.4 655.0,2931.4 L 655.0,2940.6 Q 655.0,2943.6 658.0,2943.6 Z" fill="#10b981"/> + <text x="660.72" y="2937.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold" textLength="10.120000000000001" lengthAdjust="spacingAndGlyphs">13</text><title>1. constants/constants.dart 2. helpers/color_helper.dart 3. helpers/log_helper.dart 4. l10n/app_localizations.dart @@ -5352,189 +5491,190 @@ 10. widgets/color_wheel_selector.dart 11. widgets/material_free.dart 12. widgets/top_colors.dart -13. widgets/transparent_background.dartcolor_picker_dialog.dart +13. widgets/transparent_background.dartcolor_picker_dialog.dart - - 21. panels/tools/tools_panel.dart + <path d="M 656.0,2957.0 L 668.0,2950.0 Q 671.0,2950.0 671.0,2953.0 L 671.0,2961.0 Q 671.0,2964.0 668.0,2964.0 Z" fill="#3b82f6"/> + <text x="666.32" y="2958.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">2</text><title>1. panels/tools/tools_panel.dart 2. widgets/color_picker_dialog.dart - - 81. constants/constants.dart + <path d="M 672.0,2968.0 L 660.0,2961.0 Q 657.0,2961.0 657.0,2964.0 L 657.0,2972.0 Q 657.0,2975.0 660.0,2975.0 Z" fill="#10b981"/> + <text x="661.68" y="2969.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">8</text><title>1. constants/constants.dart 2. helpers/color_helper.dart 3. helpers/image_helper.dart 4. l10n/app_localizations.dart 5. models/app_icon_enum.dart 6. widgets/color_preview.dart 7. widgets/material_free.dart -8. widgets/transparent_background.darttop_colors.dart +8. widgets/transparent_background.darttop_colors.dart - - 61. panels/layers/layer_selector.dart + <path d="M 656.0,2989.0 L 668.0,2982.0 Q 671.0,2982.0 671.0,2985.0 L 671.0,2993.0 Q 671.0,2996.0 668.0,2996.0 Z" fill="#3b82f6"/> + <text x="666.32" y="2990.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">6</text><title>1. panels/layers/layer_selector.dart 2. panels/tools/tools_panel.dart 3. widgets/color_picker_dialog.dart 4. widgets/gradient_color_list_editor.dart 5. widgets/text_attributes_widget.dart 6. widgets/top_colors.dart - - 61. constants/constants.dart + <path d="M 672.0,3000.0 L 660.0,2993.0 Q 657.0,2993.0 657.0,2996.0 L 657.0,3004.0 Q 657.0,3007.0 660.0,3007.0 Z" fill="#10b981"/> + <text x="661.68" y="3001.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">6</text><title>1. constants/constants.dart 2. helpers/color_helper.dart 3. models/app_icon_enum.dart 4. widgets/app_icon.dart 5. widgets/material_free.dart -6. widgets/transparent_background.dartcolor_preview.dart +6. widgets/transparent_background.dartcolor_preview.dart - - 51. shell_top_bar.dart + <path d="M 656.0,3021.0 L 668.0,3014.0 Q 671.0,3014.0 671.0,3017.0 L 671.0,3025.0 Q 671.0,3028.0 668.0,3028.0 Z" fill="#3b82f6"/> + <text x="666.32" y="3022.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">6</text><title>1. shell_top_bar.dart 2. widgets/magnifying_eye_dropper.dart -3. widgets/selector_widget.dart -4. widgets/shell_selection_sub_toolbar.dart -5. widgets/transform_widget.dart - - 51. constants/constants.dart +3. widgets/main_view.dart +4. widgets/selector_widget.dart +5. widgets/shell_selection_sub_toolbar.dart +6. widgets/transform_widget.dart + + 51. constants/constants.dart 2. l10n/app_localizations.dart 3. models/app_icon_enum.dart 4. widgets/app_icon.dart -5. widgets/material_free.dartoverlay_control_widgets.dart - - - 11. panels/tools/tools_panel.dart - - 41. constants/constants.dart -2. l10n/app_localizations.dart -3. widgets/base_picker.dart -4. widgets/material_free.dartbrush_intensity_picker.dart +5. widgets/material_free.dartoverlay_control_widgets.dart - 11. panels/side_panel/canvas_settings.dart + 11. panels/tools/tools_panel.dart 41. constants/constants.dart -2. models/app_icon_enum.dart -3. models/canvas_resize.dart -4. widgets/app_icon.dartnine_grid_selector.dart +2. l10n/app_localizations.dart +3. widgets/base_picker.dart +4. widgets/material_free.dartbrush_intensity_picker.dart - 11. widgets/shortcuts.dart + 11. panels/side_panel/canvas_settings.dart 41. constants/constants.dart -2. helpers/shortcuts_constants.dart -3. l10n/app_localizations.dart -4. widgets/material_free.dartshortcuts_help.dart +2. models/app_icon_enum.dart +3. models/canvas_resize.dart +4. widgets/app_icon.dartnine_grid_selector.dart - 21. panels/tools/tools_panel.dart -2. widgets/text_attributes_widget.dart + 11. widgets/shortcuts.dart 41. constants/constants.dart -2. l10n/app_localizations.dart -3. widgets/base_picker.dart -4. widgets/material_free.dartbrush_size_picker.dart +2. helpers/shortcuts_constants.dart +3. l10n/app_localizations.dart +4. widgets/material_free.dartshortcuts_help.dart - 31. panels/tools/tools_panel.dart -2. widgets/color_picker_dialog.dart -3. widgets/text_attributes_widget.dart + 21. panels/tools/tools_panel.dart +2. widgets/text_attributes_widget.dart 41. constants/constants.dart -2. helpers/list_helper.dart -3. widgets/material_free.dart -4. widgets/transparent_background.dartcolor_selector.dart +2. l10n/app_localizations.dart +3. widgets/base_picker.dart +4. widgets/material_free.dartbrush_size_picker.dart - 11. widgets/color_picker_dialog.dart + 31. panels/tools/tools_panel.dart +2. widgets/color_picker_dialog.dart +3. widgets/text_attributes_widget.dart - 31. constants/constants.dart -2. widgets/material_free.dart -3. widgets/transparent_background.dartcolor_wheel_selector.dart + 41. constants/constants.dart +2. helpers/list_helper.dart +3. widgets/material_free.dart +4. widgets/transparent_background.dartcolor_selector.dart - 21. shell_top_bar.dart -2. widgets/shell_selection_sub_toolbar.dart + 11. widgets/color_picker_dialog.dart 31. constants/constants.dart -2. models/app_icon_enum.dart -3. widgets/material_free.darttoolbar_icon_button.dart +2. widgets/material_free.dart +3. widgets/transparent_background.dartcolor_wheel_selector.dart - 11. widgets/main_view.dart + 21. shell_top_bar.dart +2. widgets/shell_selection_sub_toolbar.dart - 21. providers/layers_provider.dart -2. widgets/canvas_panel_painter.dartcanvas_panel.dart + 31. constants/constants.dart +2. models/app_icon_enum.dart +3. widgets/material_free.darttoolbar_icon_button.dart - 11. widgets/canvas_panel.dart + 11. widgets/main_view.dart - 21. constants/constants.dart -2. providers/layer_provider.dartcanvas_panel_painter.dart + 21. providers/layers_provider.dart +2. widgets/canvas_panel_painter.dartcanvas_panel.dart - 11. panels/layers/layer_selector.dart + 11. widgets/canvas_panel.dart 21. constants/constants.dart -2. widgets/material_free.dartcontainer_slider.dart +2. providers/layer_provider.dartcanvas_panel_painter.dart 11. panels/layers/layer_selector.dart 21. constants/constants.dart -2. widgets/material_free.darttruncated_text.dart +2. widgets/material_free.dartcontainer_slider.dart - 21. widgets/text_attributes_widget.dart -2. widgets/text_editor_dialog.dart + 11. panels/layers/layer_selector.dart - 21. widgets/text_alignment_dropdown.dart -2. widgets/text_style_toggle_buttons.darttext_formatting_controls.dart + 21. constants/constants.dart +2. widgets/material_free.darttruncated_text.dart - 11. widgets/text_formatting_controls.dart + 21. widgets/text_attributes_widget.dart +2. widgets/text_editor_dialog.dart - 41. constants/constants.dart -2. l10n/app_localizations.dart -3. widgets/app_dropdown.dart -4. widgets/app_text.darttext_alignment_dropdown.dart + 21. widgets/text_alignment_dropdown.dart +2. widgets/text_style_toggle_buttons.darttext_formatting_controls.dart 11. widgets/text_formatting_controls.dart 41. constants/constants.dart -2. models/app_icon_enum.dart -3. models/text_tool_state.dart -4. widgets/app_buttons.darttext_style_toggle_buttons.dart +2. l10n/app_localizations.dart +3. widgets/app_dropdown.dart +4. widgets/app_text.darttext_alignment_dropdown.dart - 21. panels/tools/tools_panel.dart -2. widgets/text_attributes_widget.dart + 11. widgets/text_formatting_controls.dart - 21. constants/constants.dart -2. widgets/material_free.darttool_attribute_widget.dart + 41. constants/constants.dart +2. models/app_icon_enum.dart +3. models/text_tool_state.dart +4. widgets/app_buttons.darttext_style_toggle_buttons.dart - 31. files/import_files.dart -2. panels/side_panel/recent_files_dialog.dart -3. widgets/shortcuts.dart + 21. panels/tools/tools_panel.dart +2. widgets/text_attributes_widget.dart - 21. l10n/app_localizations.dart -2. widgets/material_free.dartconfirm_discard_dialog.dart + 21. constants/constants.dart +2. widgets/material_free.darttool_attribute_widget.dart - 31. panels/side_panel/side_panel.dart -2. panels/side_panel/top_menu_and_layers_panel.dart -3. panels/tools/tools_panel.dart + 31. files/import_files.dart +2. panels/side_panel/recent_files_dialog.dart +3. widgets/shortcuts.dart - 21. constants/constants.dart -2. widgets/material_free.dartside_panel_header.dart + 21. l10n/app_localizations.dart +2. widgets/material_free.dartconfirm_discard_dialog.dart - 51. widgets/brush_intensity_picker.dart + <text x="666.32" y="3566.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">3</text><title>1. panels/side_panel/side_panel.dart +2. panels/side_panel/top_menu_and_layers_panel.dart +3. panels/tools/tool_family_rail.dart + + 21. constants/constants.dart +2. widgets/material_free.dartside_panel_header.dart + + + 51. widgets/brush_intensity_picker.dart 2. widgets/brush_size_picker.dart 3. widgets/brush_style_picker.dart 4. widgets/halftone_size_picker.dart 5. widgets/tolerance_picker.dart - - 21. constants/constants.dart -2. widgets/material_free.dartbase_picker.dart + + 21. constants/constants.dart +2. widgets/material_free.dartbase_picker.dart - - 451. files/import_files.dart + <path d="M 654.0,3629.0 L 670.0,3621.4 Q 673.0,3621.4 673.0,3624.4 L 673.0,3633.6 Q 673.0,3636.6 670.0,3636.6 Z" fill="#3b82f6"/> + <text x="667.28" y="3630.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold" textLength="10.120000000000001" lengthAdjust="spacingAndGlyphs">45</text><title>1. files/import_files.dart 2. main.dart 3. main_screen.dart 4. pages/platforms_page.dart @@ -5579,8 +5719,8 @@ 43. widgets/toolbar_icon_button.dart 44. widgets/top_colors.dart 45. widgets/truncated_text.dart - - 181. widgets/app_bottom_sheet.dart + <path d="M 674.0,3640.0 L 658.0,3632.4 Q 655.0,3632.4 655.0,3635.4 L 655.0,3644.6 Q 655.0,3647.6 658.0,3647.6 Z" fill="#10b981"/> + <text x="660.72" y="3641.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold" textLength="10.120000000000001" lengthAdjust="spacingAndGlyphs">18</text><title>1. widgets/app_bottom_sheet.dart 2. widgets/app_button_row.dart 3. widgets/app_buttons.dart 4. widgets/app_card.dart @@ -5597,91 +5737,93 @@ 15. widgets/app_switch.dart 16. widgets/app_text.dart 17. widgets/app_text_field.dart -18. widgets/app_tooltip.dartmaterial_free.dart - - - 11. widgets/material_free.dart - - 31. constants/constants.dart -2. widgets/app_button_row.dart -3. widgets/app_overlay.dartapp_dialog.dart +18. widgets/app_tooltip.dartmaterial_free.dart 11. widgets/material_free.dart 31. constants/constants.dart -2. widgets/app_buttons.dart -3. widgets/app_overlay.dartapp_popup_menu.dart +2. widgets/app_button_row.dart +3. widgets/app_overlay.dartapp_dialog.dart - 31. widgets/app_dialog.dart -2. widgets/effect_intensity_controls.dart -3. widgets/material_free.dart + 11. widgets/material_free.dart 31. constants/constants.dart -2. models/app_icon_enum.dart -3. widgets/app_buttons.dartapp_button_row.dart +2. widgets/app_buttons.dart +3. widgets/app_overlay.dartapp_popup_menu.dart - 51. widgets/app_button_row.dart -2. widgets/app_popup_menu.dart -3. widgets/gradient_color_list_editor.dart -4. widgets/material_free.dart -5. widgets/text_style_toggle_buttons.dart + 31. widgets/app_dialog.dart +2. widgets/effect_intensity_controls.dart +3. widgets/material_free.dart - 41. constants/constants.dart + <text x="661.68" y="3737.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">3</text><title>1. constants/constants.dart 2. models/app_icon_enum.dart -3. widgets/app_icon.dart -4. widgets/app_tooltip.dartapp_buttons.dart +3. widgets/app_buttons.dartapp_button_row.dart - 31. recovery/draft_recovery_controller.dart -2. widgets/effect_intensity_controls.dart -3. widgets/material_free.dart + 61. panels/tools/tool_family_rail.dart +2. widgets/app_button_row.dart +3. widgets/app_popup_menu.dart +4. widgets/gradient_color_list_editor.dart +5. widgets/material_free.dart +6. widgets/text_style_toggle_buttons.dart - 31. constants/constants.dart -2. helpers/log_helper.dart -3. widgets/app_progress.dartapp_snackbar.dart + 41. constants/constants.dart +2. models/app_icon_enum.dart +3. widgets/app_icon.dart +4. widgets/app_tooltip.dartapp_buttons.dart - 11. widgets/material_free.dart + 31. recovery/draft_recovery_controller.dart +2. widgets/effect_intensity_controls.dart +3. widgets/material_free.dart - 21. constants/constants.dart -2. widgets/app_overlay.dartapp_bottom_sheet.dart + 31. constants/constants.dart +2. helpers/log_helper.dart +3. widgets/app_progress.dartapp_snackbar.dart 11. widgets/material_free.dart 21. constants/constants.dart -2. widgets/app_switch.dartapp_list_tile.dart +2. widgets/app_overlay.dartapp_bottom_sheet.dart - 21. widgets/material_free.dart -2. widgets/text_alignment_dropdown.dart + 11. widgets/material_free.dart 21. constants/constants.dart -2. widgets/app_overlay.dartapp_dropdown.dart +2. widgets/app_switch.dartapp_list_tile.dart - 51. widgets/app_bottom_sheet.dart + <text x="666.32" y="3886.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">2</text><title>1. widgets/material_free.dart +2. widgets/text_alignment_dropdown.dart + + 21. constants/constants.dart +2. widgets/app_overlay.dartapp_dropdown.dart + + + 51. widgets/app_bottom_sheet.dart 2. widgets/app_dialog.dart 3. widgets/app_dropdown.dart 4. widgets/app_popup_menu.dart 5. widgets/material_free.dart - - 31. constants/constants.dart + <path d="M 672.0,3928.0 L 660.0,3921.0 Q 657.0,3921.0 657.0,3924.0 L 657.0,3932.0 Q 657.0,3935.0 660.0,3935.0 Z" fill="#10b981"/> + <text x="661.68" y="3929.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">3</text><title>1. constants/constants.dart 2. widgets/app_overlay_menu_item.dart -3. widgets/app_overlay_surface.dartapp_overlay.dart +3. widgets/app_overlay_surface.dartapp_overlay.dart - - 21. widgets/effect_intensity_controls.dart -2. widgets/material_free.dart - - 21. constants/constants.dart -2. widgets/app_text.dartapp_slider.dart + + 31. panels/tools/tool_family_rail.dart +2. widgets/effect_intensity_controls.dart +3. widgets/material_free.dart + + 21. constants/constants.dart +2. widgets/app_text.dartapp_slider.dart - - 171. panels/layers/layer_selector.dart + <path d="M 654.0,3981.0 L 670.0,3973.4 Q 673.0,3973.4 673.0,3976.4 L 673.0,3985.6 Q 673.0,3988.6 670.0,3988.6 Z" fill="#3b82f6"/> + <text x="667.28" y="3982.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold" textLength="10.120000000000001" lengthAdjust="spacingAndGlyphs">17</text><title>1. panels/layers/layer_selector.dart 2. panels/side_panel/menu.dart 3. panels/side_panel/recent_files_dialog.dart 4. panels/side_panel/share_panel.dart @@ -5698,98 +5840,98 @@ 15. widgets/shell_selection_sub_toolbar.dart 16. widgets/text_attributes_widget.dart 17. widgets/tolerance_picker.dart - - 21. constants/constants.dart -2. models/app_icon_enum.dartapp_icon.dart - - - 11. widgets/material_free.dart - 11. constants/constants.dartapp_card.dart + 21. constants/constants.dart +2. models/app_icon_enum.dartapp_icon.dart 11. widgets/material_free.dart - 11. constants/constants.dartapp_divider.dart + 11. constants/constants.dartapp_card.dart - 11. widgets/app_overlay.dart + 11. widgets/material_free.dart - 11. constants/constants.dartapp_overlay_menu_item.dart + 11. constants/constants.dartapp_divider.dart 11. widgets/app_overlay.dart - 11. constants/constants.dartapp_overlay_surface.dart + 11. constants/constants.dartapp_overlay_menu_item.dart - 11. widgets/material_free.dart + 11. widgets/app_overlay.dart - 11. constants/constants.dartapp_scaffold.dart + 11. constants/constants.dartapp_overlay_surface.dart - 11. widgets/magnifying_eye_dropper.dart + 11. widgets/material_free.dart - 11. constants/constants.dartdraw_rect.dart + 11. constants/constants.dartapp_scaffold.dart - 11. panels/layers/layer_thumbnail.dart + 11. widgets/magnifying_eye_dropper.dart - 11. constants/constants.dartimage_painter.dart + 11. constants/constants.dartdraw_rect.dart - 21. widgets/app_snackbar.dart -2. widgets/material_free.dart + 11. panels/layers/layer_thumbnail.dart - 11. constants/constants.dartapp_progress.dart + 11. constants/constants.dartimage_painter.dart - 21. widgets/app_list_tile.dart + <text x="666.32" y="4238.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">2</text><title>1. widgets/app_snackbar.dart 2. widgets/material_free.dart - 11. constants/constants.dartapp_switch.dart + 11. constants/constants.dartapp_progress.dart - 21. widgets/gradient_color_list_editor.dart + <text x="666.32" y="4270.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">2</text><title>1. widgets/app_list_tile.dart 2. widgets/material_free.dart - 11. constants/constants.dartapp_text_field.dart + 11. constants/constants.dartapp_switch.dart - 21. widgets/app_buttons.dart + <text x="666.32" y="4302.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">2</text><title>1. widgets/gradient_color_list_editor.dart 2. widgets/material_free.dart - 11. constants/constants.dartapp_tooltip.dart + 11. constants/constants.dartapp_text_field.dart - 21. widgets/fill_widget.dart -2. widgets/selector_widget.dart + 21. widgets/app_buttons.dart +2. widgets/material_free.dart - 11. constants/constants.dartmarching_ants_path.dart + 11. constants/constants.dartapp_tooltip.dart - 31. widgets/app_slider.dart -2. widgets/material_free.dart -3. widgets/text_alignment_dropdown.dart + 21. widgets/fill_widget.dart +2. widgets/selector_widget.dart - 11. constants/constants.dartapp_text.dart + 11. constants/constants.dartmarching_ants_path.dart - 61. panels/layers/layer_thumbnail.dart + <text x="666.32" y="4398.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">3</text><title>1. widgets/app_slider.dart +2. widgets/material_free.dart +3. widgets/text_alignment_dropdown.dart + + 11. constants/constants.dartapp_text.dart + + + 61. panels/layers/layer_thumbnail.dart 2. widgets/color_picker_dialog.dart 3. widgets/color_preview.dart 4. widgets/color_selector.dart 5. widgets/color_wheel_selector.dart 6. widgets/top_colors.dart - - 11. constants/constants.darttransparent_background.dart -canvas_gesture_handler_pixel_brush.dart -canvas_gesture_handler_state_methods.dart - - - 11. main.dart - - 121. constants/constants.dart + <path d="M 672.0,4440.0 L 660.0,4433.0 Q 657.0,4433.0 657.0,4436.0 L 657.0,4444.0 Q 657.0,4447.0 660.0,4447.0 Z" fill="#10b981"/> + <text x="661.68" y="4441.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. constants/constants.darttransparent_background.dart +canvas_gesture_handler_pixel_brush.dart +canvas_gesture_handler_state_methods.dart + + + 11. main.dart + + 121. constants/constants.dart 2. files/file_ora.dart 3. helpers/draft_flusher.dart 4. helpers/log_helper.dart @@ -5800,56 +5942,56 @@ 9. recovery/draft_recovery_storage.dart 10. recovery/draft_recovery_storage_io.dart 11. recovery/draft_recovery_storage_web.dart -12. widgets/app_snackbar.dartdraft_recovery_controller.dart - - - 11. recovery/draft_recovery_controller.dart - - 21. helpers/log_helper.dart -2. recovery/draft_recovery_storage.dartdraft_recovery_storage_io.dart +12. widgets/app_snackbar.dartdraft_recovery_controller.dart 11. recovery/draft_recovery_controller.dart - 11. recovery/draft_recovery_storage.dartdraft_recovery_storage_web.dart + 21. helpers/log_helper.dart +2. recovery/draft_recovery_storage.dartdraft_recovery_storage_io.dart - 31. recovery/draft_recovery_controller.dart + <text x="666.32" y="1248.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. recovery/draft_recovery_controller.dart + + 11. recovery/draft_recovery_storage.dartdraft_recovery_storage_web.dart + + + 31. recovery/draft_recovery_controller.dart 2. recovery/draft_recovery_storage_io.dart -3. recovery/draft_recovery_storage_web.dartdraft_recovery_storage.dart +3. recovery/draft_recovery_storage_web.dartdraft_recovery_storage.dart - - 11. main.dart - - 61. constants/constants.dart + <path d="M 656.0,1401.0 L 668.0,1394.0 Q 671.0,1394.0 671.0,1397.0 L 671.0,1405.0 Q 671.0,1408.0 668.0,1408.0 Z" fill="#3b82f6"/> + <text x="666.32" y="1402.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. main.dart + + 61. constants/constants.dart 2. l10n/app_localizations.dart 3. models/app_icon_enum.dart 4. providers/app_preferences.dart 5. widgets/material_free.dart -6. widgets/shortcuts.dartsettings_page.dart +6. widgets/shortcuts.dartsettings_page.dart - - 11. main.dart - - 41. constants/constants.dart + <path d="M 656.0,1433.0 L 668.0,1426.0 Q 671.0,1426.0 671.0,1429.0 L 671.0,1437.0 Q 671.0,1440.0 668.0,1440.0 Z" fill="#3b82f6"/> + <text x="666.32" y="1434.0" text-anchor="middle" fill="white" font-size="8.0" font-weight="bold">1</text><title>1. main.dart + + 41. constants/constants.dart 2. l10n/app_localizations.dart 3. models/app_icon_enum.dart -4. widgets/material_free.dartplatforms_page.dart +4. widgets/material_free.dartplatforms_page.dart -fpaint v1.8.9+1 +fpaint v1.9.0+1 ... - l10n - constants - files - helpers - models + l10n + constants + files + helpers + models panels side_panel tools - layers - providers - widgets - recovery - pages + layers + providers + widgets + recovery + pages diff --git a/fcheck_loc.svg b/fcheck_loc.svg index 4c0ea0aa..3f1ec9d9 100644 --- a/fcheck_loc.svg +++ b/fcheck_loc.svg @@ -53,22142 +53,22292 @@ -fpaint 1.8.9+1 -32,790 LOC +fpaint 1.9.0+1 +33,435 LOC 13 Folders > -188 Files +192 Files > -382 Classes +387 Classes > -1,687 Functions/Methods +1,727 Functions/Methods - 32,790 LOC Folder: lib + 33,435 LOC Folder: lib lib - 32,790 LOC + 33,435 LOC - - - - - 11,471 LOC Folder: lib/widgets + + + + + 11,625 LOC Folder: lib/widgets widgets - 11,471 LOC + 11,625 LOC - - - - + + + + 738 LOC File: lib/widgets/transform_widget.dart transform_widget.dart - 738 LOC + 738 LOC - - - - + + + + 494 LOC in Class: _TransformWidgetState File: lib/widgets/transform_widget.dart _TransformWidgetState - 494 LOC + 494 LOC - - - - + + + + 83 LOC in Method: _TransformWidgetState.build() File: lib/widgets/transform_widget.dart - - build - 83 + + build + 83 - - - - + + + + 2 LOC in Method: _TransformWidgetState.canvasOffset() File: lib/widgets/transform_widget.dart - - canvasOffset - 2 + + canvasOffset + 2 - - - - + + + + 2 LOC in Method: _TransformWidgetState.canvasScale() File: lib/widgets/transform_widget.dart - - canvasScale - 2 + + canvasScale + 2 - - - - + + + + 2 LOC in Method: _TransformWidgetState.model() File: lib/widgets/transform_widget.dart - - model - 2 + + model + 2 - - - - + + + + 2 LOC in Method: _TransformWidgetState.onCancel() File: lib/widgets/transform_widget.dart - - onCancel - 2 + + onCancel + 2 - - - - + + + + 2 LOC in Method: _TransformWidgetState.onChanged() File: lib/widgets/transform_widget.dart - - onChanged - 2 + + onChanged + 2 - - - - + + + + 2 LOC in Method: _TransformWidgetState.onConfirm() File: lib/widgets/transform_widget.dart - - onConfirm - 2 + + onConfirm + 2 - - - - + + + + 2 LOC in Method: _TransformWidgetState.onEscapePressed() File: lib/widgets/transform_widget.dart - - onEscapePressed - 2 + + onEscapePressed + 2 - - - - + + + + 29 LOC in Method: _TransformWidgetState._buildCenterHandle() File: lib/widgets/transform_widget.dart - - _buildCenterHandle - 29 + + _buildCenterHandle + 29 - - - - + + + + 30 LOC in Method: _TransformWidgetState._buildCornerHandle() File: lib/widgets/transform_widget.dart - - _buildCornerHandle - 30 + + _buildCornerHandle + 30 - - - - + + + + 31 LOC in Method: _TransformWidgetState._buildEdgeDragZone() File: lib/widgets/transform_widget.dart - - _buildEdgeDragZone - 31 + + _buildEdgeDragZone + 31 - - - - + + + + 57 LOC in Method: _TransformWidgetState._buildEdgeDragZones() File: lib/widgets/transform_widget.dart - - _buildEdgeDragZones - 57 + + _buildEdgeDragZones + 57 - - - - + + + + 30 LOC in Method: _TransformWidgetState._buildEdgeHandle() File: lib/widgets/transform_widget.dart - - _buildEdgeHandle - 30 + + _buildEdgeHandle + 30 - - - - + + + + 195 LOC in Method: _TransformWidgetState._buildModeControls() File: lib/widgets/transform_widget.dart - - _buildModeControls - 195 + + _buildModeControls + 195 - - - - + + + + 10 LOC in Method: _TransformWidgetState._screenQuadBottom() File: lib/widgets/transform_widget.dart - - _screenQuadBottom - 10 + + _screenQuadBottom + 10 - - - - + + + + 10 LOC in Method: _TransformWidgetState._screenQuadTop() File: lib/widgets/transform_widget.dart - - _screenQuadTop - 10 + + _screenQuadTop + 10 - - - - + + + + 3 LOC in Method: _TransformWidgetState._toScreen() File: lib/widgets/transform_widget.dart - - _toScreen - 3 + + _toScreen + 3 - - - - + + + + 139 LOC in Class: _TransformPreviewPainter File: lib/widgets/transform_widget.dart - _TransformPreviewPainter - 139 LOC + _TransformPreviewPainter + 139 LOC - - - - + + + + 7 LOC in Method: _TransformPreviewPainter._TransformPreviewPainter() File: lib/widgets/transform_widget.dart - - _TransformPreviewPainter - 7 + + _TransformPreviewPainter + 7 - - - - + + + + 39 LOC in Method: _TransformPreviewPainter.paint() File: lib/widgets/transform_widget.dart - - paint - 39 + + paint + 39 - - - - + + + + 67 LOC in Method: _TransformPreviewPainter._edgePath() File: lib/widgets/transform_widget.dart - - _edgePath - 67 + + _edgePath + 67 - - - - + + + + 10 LOC in Method: _TransformPreviewPainter.shouldRepaint() File: lib/widgets/transform_widget.dart - - shouldRepaint - 10 + + shouldRepaint + 10 - - - - + + + + 77 LOC in Class: TransformEdgeDragZone File: lib/widgets/transform_widget.dart - TransformEdgeDragZone - 77 LOC + TransformEdgeDragZone + 77 LOC - - - - + + + + 13 LOC in Method: TransformEdgeDragZone.TransformEdgeDragZone() File: lib/widgets/transform_widget.dart - - TransformEdgeDragZone - 13 + + TransformEdgeDragZone + 13 - - - - + + + + 34 LOC in Method: TransformEdgeDragZone.build() File: lib/widgets/transform_widget.dart - - build - 34 + + build + 34 - - - - + + + + 9 LOC in Method: TransformEdgeDragZone._toScreenDelta() File: lib/widgets/transform_widget.dart - - _toScreenDelta - 9 + + _toScreenDelta + 9 - - - - + + + + 28 LOC in Class: TransformWidget File: lib/widgets/transform_widget.dart - TransformWidget - 28 LOC + TransformWidget + 28 LOC - - - - - 621 LOC File: lib/widgets/main_view.dart + + + + + 642 LOC File: lib/widgets/canvas_gesture_handler_state_methods.dart - main_view.dart - 621 LOC + canvas_gesture_handler_state_methods.dart + 642 LOC - - - - - 304 LOC in Class: MainViewState + <rect x="349.51269875876756" y="135.0" width="241.68177859502543" height="374.5447743350035" rx="5.00" ry="5.00" fill="#9eb89a" fill-opacity="0.45"/> + <rect x="349.51269875876756" y="135.0" width="241.68177859502543" height="374.5447743350035" rx="5.00" ry="5.00" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="349.51269875876756" y="135.0" width="241.68177859502543" height="374.5447743350035" rx="5.00" ry="5.00" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8" stroke-dasharray="6,4"/> + <rect x="349.51269875876756" y="135.0" width="241.68177859502543" height="374.5447743350035" rx="5.00" ry="5.00" fill="transparent" pointer-events="all"> + <title>642 LOC in Class: <...> + +File: lib/widgets/canvas_gesture_handler_state_methods.dart + + <...> + 642 LOC + + + + + + 27 LOC in Method: ._applySelectionModifierMath() + +File: lib/widgets/canvas_gesture_handler_state_methods.dart + + + _applySelectionModifierMath + 27 + + + + + + + + 17 LOC in Method: ._canStartDrawingOnSelectedLayer() + +File: lib/widgets/canvas_gesture_handler_state_methods.dart + + + _canStartDrawingOnSelectedLayer + 17 + + + + + + + + 4 LOC in Method: ._clearSelectionTapTracking() + +File: lib/widgets/canvas_gesture_handler_state_methods.dart + + + _clearSelectionTapTracking + 4 + + + + + + + + 13 LOC in Method: ._getDistanceBetweenTouchPoints() + +File: lib/widgets/canvas_gesture_handler_state_methods.dart + + + _getDistanceBetweenTouchPoints + 13 + + + + + + + + 18 LOC in Method: ._handleEyeDropperPointerStart() + +File: lib/widgets/canvas_gesture_handler_state_methods.dart + + + _handleEyeDropperPointerStart + 18 + + + + + + + + 26 LOC in Method: ._handleFillPointerStart() + +File: lib/widgets/canvas_gesture_handler_state_methods.dart + + + _handleFillPointerStart + 26 + + + + + + + + 21 LOC in Method: ._handleMultiTouchUpdate() + +File: lib/widgets/canvas_gesture_handler_state_methods.dart + + + _handleMultiTouchUpdate + 21 + + + + + + + + 10 LOC in Method: ._isSelectionGesture() + +File: lib/widgets/canvas_gesture_handler_state_methods.dart + + + _isSelectionGesture + 10 + + + + + + + + 47 LOC in Method: ._handlePointerEnd() + +File: lib/widgets/canvas_gesture_handler_state_methods.dart + + + _handlePointerEnd + 47 + + + + + + + + 18 LOC in Method: ._startEffectBrushStroke() + +File: lib/widgets/canvas_gesture_handler_state_methods.dart + + + _startEffectBrushStroke + 18 + + + + + + + + 17 LOC in Method: ._commitEffectBrushStroke() + +File: lib/widgets/canvas_gesture_handler_state_methods.dart + + + _commitEffectBrushStroke + 17 + + + + + + + + 64 LOC in Method: ._handlePointerMove() + +File: lib/widgets/canvas_gesture_handler_state_methods.dart + + + _handlePointerMove + 64 + + + + + + + + 38 LOC in Method: ._handlePointerStart() + +File: lib/widgets/canvas_gesture_handler_state_methods.dart + + + _handlePointerStart + 38 + + + + + + + + 28 LOC in Method: ._handleSelectionPointerStart() + +File: lib/widgets/canvas_gesture_handler_state_methods.dart + + + _handleSelectionPointerStart + 28 + + + + + + + + 28 LOC in Method: ._updateWandToleranceFromDrag() + +File: lib/widgets/canvas_gesture_handler_state_methods.dart + + + _updateWandToleranceFromDrag + 28 + + + + + + + + 6 LOC in Method: ._clearWandDragAnchor() + +File: lib/widgets/canvas_gesture_handler_state_methods.dart + + + _clearWandDragAnchor + 6 + + + + + + + + 23 LOC in Method: ._handleTextPointerStart() + +File: lib/widgets/canvas_gesture_handler_state_methods.dart + + + _handleTextPointerStart + 23 + + + + + + + + 12 LOC in Method: ._handleUserPanningTheCanvas() + +File: lib/widgets/canvas_gesture_handler_state_methods.dart + + + _handleUserPanningTheCanvas + 12 + + + + + + + + 18 LOC in Method: ._handleUserScalingTheCanvas() + +File: lib/widgets/canvas_gesture_handler_state_methods.dart + + + _handleUserScalingTheCanvas + 18 + + + + + + + + 46 LOC in Method: ._initializeGradientFill() + +File: lib/widgets/canvas_gesture_handler_state_methods.dart + + + _initializeGradientFill + 46 + + + + + + + + 5 LOC in Method: ._isSampleAllLayersModifierPressed() + +File: lib/widgets/canvas_gesture_handler_state_methods.dart + + + _isSampleAllLayersModifierPressed + 5 + + + + + + + + 20 LOC in Method: ._registerInputModality() + +File: lib/widgets/canvas_gesture_handler_state_methods.dart + + + _registerInputModality + 20 + + + + + + + + 9 LOC in Method: ._restoreSelectionMath() + +File: lib/widgets/canvas_gesture_handler_state_methods.dart + + + _restoreSelectionMath + 9 + + + + + + + + 5 LOC in Method: ._shouldShowDrawingToolPreview() + +File: lib/widgets/canvas_gesture_handler_state_methods.dart + + + _shouldShowDrawingToolPreview + 5 + + + + + + + + 5 LOC in Method: ._showLockedLayerMessage() + +File: lib/widgets/canvas_gesture_handler_state_methods.dart + + + _showLockedLayerMessage + 5 + + + + + + + + 30 LOC in Method: ._showTextDialog() + +File: lib/widgets/canvas_gesture_handler_state_methods.dart + + + _showTextDialog + 30 + + + + + + + + 36 LOC in Method: ._startDrawingPointer() + +File: lib/widgets/canvas_gesture_handler_state_methods.dart + + + _startDrawingPointer + 36 + + + + + + + + 6 LOC in Method: ._supportsHoverPreview() + +File: lib/widgets/canvas_gesture_handler_state_methods.dart + + + _supportsHoverPreview + 6 + + + + + + + + 32 LOC in Method: ._tryCloseStraightLineSelectionOnDoubleTap() + +File: lib/widgets/canvas_gesture_handler_state_methods.dart + + + _tryCloseStraightLineSelectionOnDoubleTap + 32 + + + + + + + + 13 LOC in Method: ._updateDrawingToolPreview() + +File: lib/widgets/canvas_gesture_handler_state_methods.dart + + + _updateDrawingToolPreview + 13 + + + + + + + + + + 637 LOC File: lib/widgets/main_view.dart + + main_view.dart + 637 LOC + + + + + + 320 LOC in Class: MainViewState File: lib/widgets/main_view.dart - MainViewState - 304 LOC + MainViewState + 320 LOC - - - - - 236 LOC in Method: MainViewState.build() + <rect x="59.0" y="567.5447743350035" width="203.00649561880593" height="122.58189945753423" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="59.0" y="567.5447743350035" width="203.00649561880593" height="122.58189945753423" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="59.0" y="567.5447743350035" width="203.00649561880593" height="122.58189945753423" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="59.0" y="567.5447743350035" width="203.00649561880593" height="122.58189945753423" fill="transparent" pointer-events="all"> + <title>252 LOC in Method: MainViewState.build() File: lib/widgets/main_view.dart - - build - 236 + + build + 252 - - - - + + + + 22 LOC in Method: MainViewState._buildEyeDropper() File: lib/widgets/main_view.dart - - _buildEyeDropper - 22 + + _buildEyeDropper + 22 - - - - + + + + 37 LOC in Method: MainViewState._displayCanvas() File: lib/widgets/main_view.dart - - _displayCanvas - 37 + + _displayCanvas + 37 - - - - + + + + 6 LOC in Method: MainViewState._showLockedLayerMessage() File: lib/widgets/main_view.dart - - _showLockedLayerMessage - 6 + + _showLockedLayerMessage + 6 - - - - + + + + 98 LOC in Class: _PixelBrushGestureMarqueePainter File: lib/widgets/main_view.dart - _PixelBrushGestureMarqueePainter - 98 LOC + _PixelBrushGestureMarqueePainter + 98 LOC - - - - + + + + 6 LOC in Method: _PixelBrushGestureMarqueePainter._PixelBrushGestureMarqueePainter() File: lib/widgets/main_view.dart - - _PixelBrushGestureMarqueePainter - 6 + + _PixelBrushGestureMarqueePainter + 6 - - - - + + + + 30 LOC in Method: _PixelBrushGestureMarqueePainter.paint() File: lib/widgets/main_view.dart - - paint - 30 + + paint + 30 - - - - + + + + 9 LOC in Method: _PixelBrushGestureMarqueePainter._drawDashedCentreLine() File: lib/widgets/main_view.dart - - _drawDashedCentreLine - 9 + + _drawDashedCentreLine + 9 - - - - + + + + 15 LOC in Method: _PixelBrushGestureMarqueePainter._dashPath() File: lib/widgets/main_view.dart - - _dashPath - 15 + + _dashPath + 15 - - - - + + + + 6 LOC in Method: _PixelBrushGestureMarqueePainter._dashPaint() File: lib/widgets/main_view.dart - - _dashPaint - 6 + + _dashPaint + 6 - - - - + + + + 7 LOC in Method: _PixelBrushGestureMarqueePainter.shouldRepaint() File: lib/widgets/main_view.dart - - shouldRepaint - 7 + + shouldRepaint + 7 - - - - + + + + 78 LOC in Class: _PixelBrushProcessingShimmerPainter File: lib/widgets/main_view.dart - _PixelBrushProcessingShimmerPainter - 78 LOC + _PixelBrushProcessingShimmerPainter + 78 LOC - - - - + + + + 7 LOC in Method: _PixelBrushProcessingShimmerPainter._PixelBrushProcessingShimmerPainter() File: lib/widgets/main_view.dart - - _PixelBrushProcessingShimmerPainter - 7 + + _PixelBrushProcessingShimmerPainter + 7 - - - - + + + + 46 LOC in Method: _PixelBrushProcessingShimmerPainter.paint() File: lib/widgets/main_view.dart - - paint - 46 + + paint + 46 - - - - + + + + 8 LOC in Method: _PixelBrushProcessingShimmerPainter.shouldRepaint() File: lib/widgets/main_view.dart - - shouldRepaint - 8 + + shouldRepaint + 8 - - - - + + + + 44 LOC in Class: _BrushSizePreviewOverlayPainter File: lib/widgets/main_view.dart - _BrushSizePreviewOverlayPainter - 44 LOC + _BrushSizePreviewOverlayPainter + 44 LOC - - - - + + + + 1 LOC in Method: _BrushSizePreviewOverlayPainter._BrushSizePreviewOverlayPainter() File: lib/widgets/main_view.dart - - _BrushSizePreviewOverlayPainter - 1 + + _BrushSizePreviewOverlayPainter + 1 - - - - + + + + 36 LOC in Method: _BrushSizePreviewOverlayPainter.paint() File: lib/widgets/main_view.dart - - paint - 36 + + paint + 36 - - - - + + + + 4 LOC in Method: _BrushSizePreviewOverlayPainter.shouldRepaint() File: lib/widgets/main_view.dart - - shouldRepaint - 4 + + shouldRepaint + 4 - - - - + + + + 31 LOC in Class: _PixelBrushProcessingShimmerState File: lib/widgets/main_view.dart - _PixelBrushProcessingShimmerState - 31 LOC + _PixelBrushProcessingShimmerState + 31 LOC - - - - + + + + 5 LOC in Method: _PixelBrushProcessingShimmerState.dispose() File: lib/widgets/main_view.dart - - dispose - 5 + + dispose + 5 - - - - + + + + 18 LOC in Method: _PixelBrushProcessingShimmerState.build() File: lib/widgets/main_view.dart - - build - 18 + + build + 18 - - - - + + + + 19 LOC in Class: _BrushSizePreviewOverlay File: lib/widgets/main_view.dart - _BrushSizePreviewOverlay - 19 LOC + _BrushSizePreviewOverlay + 19 LOC - - - - + + + + 4 LOC in Method: _BrushSizePreviewOverlay._BrushSizePreviewOverlay() File: lib/widgets/main_view.dart - - _BrushSizePreviewOverlay - 4 + + _BrushSizePreviewOverlay + 4 - - - - + + + + 11 LOC in Method: _BrushSizePreviewOverlay.build() File: lib/widgets/main_view.dart - - build - 11 + + build + 11 - - - - + + + + 18 LOC in Class: _PixelBrushProcessingShimmer File: lib/widgets/main_view.dart - _PixelBrushProcessingShimmer - 18 LOC + _PixelBrushProcessingShimmer + 18 LOC - - - - + + + + 6 LOC in Method: _PixelBrushProcessingShimmer._PixelBrushProcessingShimmer() File: lib/widgets/main_view.dart - - _PixelBrushProcessingShimmer - 6 + + _PixelBrushProcessingShimmer + 6 - - - - + + + + 2 LOC in Method: _PixelBrushProcessingShimmer.createState() File: lib/widgets/main_view.dart - - createState - 2 + + createState + 2 - - - - + + + + 18 LOC in Class: <...> File: lib/widgets/main_view.dart - <...> - 18 LOC + <...> + 18 LOC - - - - + + + + 18 LOC in Function: _pixelBrushStrokePath() File: lib/widgets/main_view.dart - - _pixelBrushStrokePath - 18 + + _pixelBrushStrokePath + 18 - - - - + + + + 11 LOC in Class: MainView File: lib/widgets/main_view.dart - MainView - 11 LOC - - - - - - 4 LOC in Method: MainView.MainView() - -File: lib/widgets/main_view.dart - - - MainView - 4 - - - - - - - - 2 LOC in Method: MainView.createState() - -File: lib/widgets/main_view.dart - - - createState - 2 - - + MainView + 11 LOC - - - - + + + + 595 LOC File: lib/widgets/selector_widget.dart - selector_widget.dart - 595 LOC + selector_widget.dart + 595 LOC - - - - + + + + 444 LOC in Class: _SelectionRectWidgetState File: lib/widgets/selector_widget.dart - _SelectionRectWidgetState - 444 LOC + _SelectionRectWidgetState + 444 LOC - - - - + + + + 72 LOC in Method: _SelectionRectWidgetState.build() File: lib/widgets/selector_widget.dart - - build - 72 + + build + 72 - - - - + + + + 2 LOC in Method: _SelectionRectWidgetState.onEscapePressed() File: lib/widgets/selector_widget.dart - - onEscapePressed - 2 + + onEscapePressed + 2 - - - - + + + + 6 LOC in Method: _SelectionRectWidgetState._beginRotateFeedback() File: lib/widgets/selector_widget.dart - - _beginRotateFeedback - 6 + + _beginRotateFeedback + 6 - - - - + + + + 6 LOC in Method: _SelectionRectWidgetState._beginScaleFeedback() File: lib/widgets/selector_widget.dart - - _beginScaleFeedback - 6 + + _beginScaleFeedback + 6 - - - - + + + + 8 LOC in Method: _SelectionRectWidgetState._beginTranslateFeedback() File: lib/widgets/selector_widget.dart - - _beginTranslateFeedback - 8 + + _beginTranslateFeedback + 8 - - - - + + + + 166 LOC in Method: _SelectionRectWidgetState._buildModeControls() File: lib/widgets/selector_widget.dart - - _buildModeControls - 166 + + _buildModeControls + 166 - - - - + + + + 9 LOC in Method: _SelectionRectWidgetState._controlGroupContentWidth() File: lib/widgets/selector_widget.dart - - _controlGroupContentWidth - 9 + + _controlGroupContentWidth + 9 - - - - + + + + 4 LOC in Method: _SelectionRectWidgetState._controlSurfaceWidth() File: lib/widgets/selector_widget.dart - - _controlSurfaceWidth - 4 + + _controlSurfaceWidth + 4 - - - - + + + + 3 LOC in Method: _SelectionRectWidgetState._duplicateMoveCreatesNewLayer() File: lib/widgets/selector_widget.dart - - _duplicateMoveCreatesNewLayer - 3 + + _duplicateMoveCreatesNewLayer + 3 - - - - + + + + 12 LOC in Method: _SelectionRectWidgetState._endFeedback() File: lib/widgets/selector_widget.dart - - _endFeedback - 12 + + _endFeedback + 12 - - - - + + + + 25 LOC in Method: _SelectionRectWidgetState._feedbackLabel() File: lib/widgets/selector_widget.dart - - _feedbackLabel - 25 + + _feedbackLabel + 25 - - - - + + + + 16 LOC in Method: _SelectionRectWidgetState._flushDuplicateMove() File: lib/widgets/selector_widget.dart - - _flushDuplicateMove - 16 + + _flushDuplicateMove + 16 - - - - + + + + 8 LOC in Method: _SelectionRectWidgetState._handleCopy() File: lib/widgets/selector_widget.dart - - _handleCopy - 8 + + _handleCopy + 8 - - - - + + + + 4 LOC in Method: _SelectionRectWidgetState._handleDuplicate() File: lib/widgets/selector_widget.dart - - _handleDuplicate - 4 + + _handleDuplicate + 4 - - - - + + + + 18 LOC in Method: _SelectionRectWidgetState._handleMoveDelta() File: lib/widgets/selector_widget.dart - - _handleMoveDelta - 18 + + _handleMoveDelta + 18 - - - - + + + + 3 LOC in Method: _SelectionRectWidgetState._isApplePlatform() File: lib/widgets/selector_widget.dart - - _isApplePlatform - 3 + + _isApplePlatform + 3 - - - - + + + + 4 LOC in Method: _SelectionRectWidgetState._isFeedbackVisible() File: lib/widgets/selector_widget.dart - - _isFeedbackVisible - 4 + + _isFeedbackVisible + 4 - - - - + + + + 25 LOC in Method: _SelectionRectWidgetState._selectionToolbarWidth() File: lib/widgets/selector_widget.dart - - _selectionToolbarWidth - 25 + + _selectionToolbarWidth + 25 - - - - + + + + 7 LOC in Method: _SelectionRectWidgetState._shouldDuplicateMoveGesture() File: lib/widgets/selector_widget.dart - - _shouldDuplicateMoveGesture - 7 + + _shouldDuplicateMoveGesture + 7 - - - - + + + + 11 LOC in Method: _SelectionRectWidgetState._updateResizeFeedback() File: lib/widgets/selector_widget.dart - - _updateResizeFeedback - 11 + + _updateResizeFeedback + 11 - - - - + + + + 13 LOC in Method: _SelectionRectWidgetState._updateRotateFeedback() File: lib/widgets/selector_widget.dart - - _updateRotateFeedback - 13 + + _updateRotateFeedback + 13 - - - - + + + + 13 LOC in Method: _SelectionRectWidgetState._updateScaleFeedback() File: lib/widgets/selector_widget.dart - - _updateScaleFeedback - 13 + + _updateScaleFeedback + 13 - - - - + + + + 59 LOC in Class: SelectionRectWidget File: lib/widgets/selector_widget.dart - SelectionRectWidget - 59 LOC + SelectionRectWidget + 59 LOC - - - - + + + + 24 LOC in Method: SelectionRectWidget.SelectionRectWidget() File: lib/widgets/selector_widget.dart - - SelectionRectWidget - 24 + + SelectionRectWidget + 24 - - - - + + + + 2 LOC in Method: SelectionRectWidget.createState() File: lib/widgets/selector_widget.dart - - createState - 2 + + createState + 2 - - - - + + + + 55 LOC in Class: _EffectsPopupButtonState File: lib/widgets/selector_widget.dart - _EffectsPopupButtonState - 55 LOC + _EffectsPopupButtonState + 55 LOC - - - - + + + + 14 LOC in Method: _EffectsPopupButtonState.build() File: lib/widgets/selector_widget.dart - - build - 14 + + build + 14 - - - - + + + + 39 LOC in Method: _EffectsPopupButtonState._showEffectsMenu() File: lib/widgets/selector_widget.dart - - _showEffectsMenu - 39 + + _showEffectsMenu + 39 - - - - + + + + 15 LOC in Class: _EffectsPopupButton File: lib/widgets/selector_widget.dart - _EffectsPopupButton - 15 LOC + _EffectsPopupButton + 15 LOC - - - - + + + + 6 LOC in Method: _EffectsPopupButton._EffectsPopupButton() File: lib/widgets/selector_widget.dart - - _EffectsPopupButton - 6 + + _EffectsPopupButton + 6 - - - - + + + + 2 LOC in Method: _EffectsPopupButton.createState() File: lib/widgets/selector_widget.dart - - createState - 2 + + createState + 2 - - - - + + + + 14 LOC in Class: _HandleDescriptor File: lib/widgets/selector_widget.dart - _HandleDescriptor - 14 LOC + _HandleDescriptor + 14 LOC + - - - - - 5 LOC in Method: _HandleDescriptor._HandleDescriptor() + <rect x="896.8989261549254" y="339.57358544381" width="16.703367816204555" height="66.39669001246466" rx="5.00" ry="5.00" fill="#9eb89a" fill-opacity="0.45"/> + <rect x="896.8989261549254" y="339.57358544381" width="16.703367816204555" height="66.39669001246466" rx="5.00" ry="5.00" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="896.8989261549254" y="339.57358544381" width="16.703367816204555" height="66.39669001246466" rx="5.00" ry="5.00" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8" stroke-dasharray="6,4"/> + <rect x="896.8989261549254" y="339.57358544381" width="16.703367816204555" height="66.39669001246466" rx="5.00" ry="5.00" fill="transparent" pointer-events="all"> + <title>8 LOC in Class: <...> File: lib/widgets/selector_widget.dart - - _HandleDescriptor - 5 - + <...> + 8 LOC - - - - - 8 LOC in Class: <...> + <rect x="601.194477353793" y="415.97027545627463" width="320.40781661733706" height="290.1563983362631" fill="#1f6f8b" fill-opacity="0.62"/> + <rect x="601.194477353793" y="415.97027545627463" width="320.40781661733706" height="290.1563983362631" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="601.194477353793" y="415.97027545627463" width="320.40781661733706" height="290.1563983362631" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="601.194477353793" y="415.97027545627463" width="320.40781661733706" height="290.1563983362631" fill="transparent" pointer-events="all"> + <title>570 LOC File: lib/widgets/color_wheel_selector.dart + + color_wheel_selector.dart + 570 LOC + + + + + + 220 LOC in Class: _ColorWheelSelectorState -File: lib/widgets/selector_widget.dart +File: lib/widgets/color_wheel_selector.dart - <...> - 8 LOC + _ColorWheelSelectorState + 220 LOC - - - - - 1 LOC in Function: _topLeft() + <rect x="790.6665943250146" y="528.7144581023656" width="22.011208257665288" height="23.338019325916513" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="790.6665943250146" y="528.7144581023656" width="22.011208257665288" height="23.338019325916513" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="790.6665943250146" y="528.7144581023656" width="22.011208257665288" height="23.338019325916513" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="790.6665943250146" y="528.7144581023656" width="22.011208257665288" height="23.338019325916513" fill="transparent" pointer-events="all"> + <title>5 LOC in Method: _ColorWheelSelectorState.initState() -File: lib/widgets/selector_widget.dart +File: lib/widgets/color_wheel_selector.dart - - _topLeft - 1 + + initState + 5 - - - - - 1 LOC in Function: _topRight() + <rect x="744.4430569839175" y="559.8318172035877" width="46.2235373410971" height="15.55867955061101" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="744.4430569839175" y="559.8318172035877" width="46.2235373410971" height="15.55867955061101" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="744.4430569839175" y="559.8318172035877" width="46.2235373410971" height="15.55867955061101" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="744.4430569839175" y="559.8318172035877" width="46.2235373410971" height="15.55867955061101" fill="transparent" pointer-events="all"> + <title>7 LOC in Method: _ColorWheelSelectorState.didUpdateWidget() -File: lib/widgets/selector_widget.dart +File: lib/widgets/color_wheel_selector.dart - - _topRight - 1 + + didUpdateWidget + 7 - - - - - 1 LOC in Function: _bottomLeft() + <rect x="617.194477353793" y="463.97027545627463" width="71.00101906898249" height="111.42022129792397" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="617.194477353793" y="463.97027545627463" width="71.00101906898249" height="111.42022129792397" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="617.194477353793" y="463.97027545627463" width="71.00101906898249" height="111.42022129792397" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="617.194477353793" y="463.97027545627463" width="71.00101906898249" height="111.42022129792397" fill="transparent" pointer-events="all"> + <title>77 LOC in Method: _ColorWheelSelectorState.build() -File: lib/widgets/selector_widget.dart +File: lib/widgets/color_wheel_selector.dart - - _bottomLeft - 1 + + build + 77 - - - - - 1 LOC in Function: _bottomRight() + <rect x="744.4430569839175" y="528.7144581023656" width="46.2235373410971" height="31.117359101222014" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="744.4430569839175" y="528.7144581023656" width="46.2235373410971" height="31.117359101222014" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="744.4430569839175" y="528.7144581023656" width="46.2235373410971" height="31.117359101222014" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="744.4430569839175" y="528.7144581023656" width="46.2235373410971" height="31.117359101222014" fill="transparent" pointer-events="all"> + <title>14 LOC in Method: _ColorWheelSelectorState._currentWheelGeometry() -File: lib/widgets/selector_widget.dart +File: lib/widgets/color_wheel_selector.dart - - _bottomRight - 1 + + _currentWheelGeometry + 14 - - - - - 1 LOC in Function: _centerLeft() + <rect x="790.6665943250146" y="552.0524774282821" width="22.011208257665288" height="23.338019325916513" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="790.6665943250146" y="552.0524774282821" width="22.011208257665288" height="23.338019325916513" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="790.6665943250146" y="552.0524774282821" width="22.011208257665288" height="23.338019325916513" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="790.6665943250146" y="552.0524774282821" width="22.011208257665288" height="23.338019325916513" fill="transparent" pointer-events="all"> + <title>5 LOC in Method: _ColorWheelSelectorState._notifyColorChanged() -File: lib/widgets/selector_widget.dart +File: lib/widgets/color_wheel_selector.dart - - _centerLeft - 1 + + _notifyColorChanged + 5 - - - - - 1 LOC in Function: _centerRight() + <rect x="744.4430569839175" y="463.97027545627463" width="42.84507281782754" height="64.74418264609095" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="744.4430569839175" y="463.97027545627463" width="42.84507281782754" height="64.74418264609095" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="744.4430569839175" y="463.97027545627463" width="42.84507281782754" height="64.74418264609095" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="744.4430569839175" y="463.97027545627463" width="42.84507281782754" height="64.74418264609095" fill="transparent" pointer-events="all"> + <title>27 LOC in Method: _ColorWheelSelectorState._resolveDragTarget() -File: lib/widgets/selector_widget.dart +File: lib/widgets/color_wheel_selector.dart - - _centerRight - 1 + + _resolveDragTarget + 27 - - - - - 1 LOC in Function: _centerTop() + <rect x="787.2881298017451" y="463.97027545627463" width="25.389672780934845" height="64.74418264609095" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="787.2881298017451" y="463.97027545627463" width="25.389672780934845" height="64.74418264609095" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="787.2881298017451" y="463.97027545627463" width="25.389672780934845" height="64.74418264609095" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="787.2881298017451" y="463.97027545627463" width="25.389672780934845" height="64.74418264609095" fill="transparent" pointer-events="all"> + <title>16 LOC in Method: _ColorWheelSelectorState._syncFromColor() -File: lib/widgets/selector_widget.dart +File: lib/widgets/color_wheel_selector.dart - - _centerTop - 1 + + _syncFromColor + 16 - - - - - 1 LOC in Function: _centerBottom() + <rect x="688.1954964227755" y="463.97027545627463" width="56.24756056114195" height="111.42022129792397" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="688.1954964227755" y="463.97027545627463" width="56.24756056114195" height="111.42022129792397" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="688.1954964227755" y="463.97027545627463" width="56.24756056114195" height="111.42022129792397" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="688.1954964227755" y="463.97027545627463" width="56.24756056114195" height="111.42022129792397" fill="transparent" pointer-events="all"> + <title>61 LOC in Method: _ColorWheelSelectorState._updateFromLocalPosition() -File: lib/widgets/selector_widget.dart +File: lib/widgets/color_wheel_selector.dart - - _centerBottom - 1 + + _updateFromLocalPosition + 61 - - - - - - 570 LOC File: lib/widgets/color_wheel_selector.dart - - color_wheel_selector.dart - 570 LOC - - - - - - 220 LOC in Class: _ColorWheelSelectorState - -File: lib/widgets/color_wheel_selector.dart - - _ColorWheelSelectorState - 220 LOC - - - - - - 5 LOC in Method: _ColorWheelSelectorState.initState() - -File: lib/widgets/color_wheel_selector.dart - - - initState - 5 - - - - - - - - 7 LOC in Method: _ColorWheelSelectorState.didUpdateWidget() - -File: lib/widgets/color_wheel_selector.dart - - - didUpdateWidget - 7 - - - - - - - - 77 LOC in Method: _ColorWheelSelectorState.build() - -File: lib/widgets/color_wheel_selector.dart - - - build - 77 - - - - - - - - 14 LOC in Method: _ColorWheelSelectorState._currentWheelGeometry() - -File: lib/widgets/color_wheel_selector.dart - - - _currentWheelGeometry - 14 - - - - - - - - 5 LOC in Method: _ColorWheelSelectorState._notifyColorChanged() - -File: lib/widgets/color_wheel_selector.dart - - - _notifyColorChanged - 5 - - - - - - - - 27 LOC in Method: _ColorWheelSelectorState._resolveDragTarget() - -File: lib/widgets/color_wheel_selector.dart - - - _resolveDragTarget - 27 - - - - - - - - 16 LOC in Method: _ColorWheelSelectorState._syncFromColor() - -File: lib/widgets/color_wheel_selector.dart - - - _syncFromColor - 16 - - - - - - - - 61 LOC in Method: _ColorWheelSelectorState._updateFromLocalPosition() - -File: lib/widgets/color_wheel_selector.dart - - - _updateFromLocalPosition - 61 - - - - - - - - + + + + 176 LOC in Class: <...> File: lib/widgets/color_wheel_selector.dart - <...> - 176 LOC + <...> + 176 LOC - - - - + + + + 27 LOC in Function: _buildWheelGeometry() File: lib/widgets/color_wheel_selector.dart - - _buildWheelGeometry - 27 + + _buildWheelGeometry + 27 - - - - + + + + 3 LOC in Function: _degreesToRadians() File: lib/widgets/color_wheel_selector.dart - - _degreesToRadians - 3 + + _degreesToRadians + 3 - - - - + + + + 3 LOC in Function: _normalizeDegrees() File: lib/widgets/color_wheel_selector.dart - - _normalizeDegrees - 3 + + _normalizeDegrees + 3 - - - - + + + + 11 LOC in Function: _offsetOnCircle() File: lib/widgets/color_wheel_selector.dart - - _offsetOnCircle - 11 + + _offsetOnCircle + 11 - - - - + + + + 3 LOC in Function: _radiansToDegrees() File: lib/widgets/color_wheel_selector.dart - - _radiansToDegrees - 3 + + _radiansToDegrees + 3 - - - - + + + + 11 LOC in Function: _triangleWeightsForHsv() File: lib/widgets/color_wheel_selector.dart - - _triangleWeightsForHsv - 11 + + _triangleWeightsForHsv + 11 - - - - + + + + 11 LOC in Function: _trianglePointForWeights() File: lib/widgets/color_wheel_selector.dart - - _trianglePointForWeights - 11 + + _trianglePointForWeights + 11 - - - - + + + + 49 LOC in Function: _triangleBestPointForColor() File: lib/widgets/color_wheel_selector.dart - - _triangleBestPointForColor - 49 + + _triangleBestPointForColor + 49 - - - - + + + + 11 LOC in Function: _triangleColorForWeights() File: lib/widgets/color_wheel_selector.dart - - _triangleColorForWeights - 11 + + _triangleColorForWeights + 11 - - - - + + + + 6 LOC in Function: _colorDistanceSquared() File: lib/widgets/color_wheel_selector.dart - - _colorDistanceSquared - 6 + + _colorDistanceSquared + 6 - - - - + + + + 8 LOC in Function: _weightedTriangleChannel() File: lib/widgets/color_wheel_selector.dart - - _weightedTriangleChannel - 8 + + _weightedTriangleChannel + 8 - - - - + + + + 33 LOC in Function: _triangleWeightsForPoint() File: lib/widgets/color_wheel_selector.dart - - _triangleWeightsForPoint - 33 + + _triangleWeightsForPoint + 33 - - - - + + + + 128 LOC in Class: _ColorWheelPainter File: lib/widgets/color_wheel_selector.dart - _ColorWheelPainter - 128 LOC + _ColorWheelPainter + 128 LOC - - - - + + + + 7 LOC in Method: _ColorWheelPainter._ColorWheelPainter() File: lib/widgets/color_wheel_selector.dart - - _ColorWheelPainter - 7 + + _ColorWheelPainter + 7 - - - - + + + + 106 LOC in Method: _ColorWheelPainter.paint() File: lib/widgets/color_wheel_selector.dart - - paint - 106 + + paint + 106 - - - - + + + + 8 LOC in Method: _ColorWheelPainter.shouldRepaint() File: lib/widgets/color_wheel_selector.dart - - shouldRepaint - 8 + + shouldRepaint + 8 - - - - + + + + 31 LOC in Class: _WheelAlphaGradientPainter File: lib/widgets/color_wheel_selector.dart - _WheelAlphaGradientPainter - 31 LOC + _WheelAlphaGradientPainter + 31 LOC - - - - + + + + 6 LOC in Method: _WheelAlphaGradientPainter._WheelAlphaGradientPainter() File: lib/widgets/color_wheel_selector.dart - - _WheelAlphaGradientPainter - 6 + + _WheelAlphaGradientPainter + 6 - - - - + + + + 12 LOC in Method: _WheelAlphaGradientPainter.paint() File: lib/widgets/color_wheel_selector.dart - - paint - 12 + + paint + 12 - - - - + + + + 7 LOC in Method: _WheelAlphaGradientPainter.shouldRepaint() File: lib/widgets/color_wheel_selector.dart - - shouldRepaint - 7 + + shouldRepaint + 7 - - - - + + + + 15 LOC in Class: ColorWheelSelector File: lib/widgets/color_wheel_selector.dart - ColorWheelSelector - 15 LOC + ColorWheelSelector + 15 LOC - - - - + + + + 6 LOC in Method: ColorWheelSelector.ColorWheelSelector() File: lib/widgets/color_wheel_selector.dart - - ColorWheelSelector - 6 + + ColorWheelSelector + 6 - - - - + + + + 2 LOC in Method: ColorWheelSelector.createState() File: lib/widgets/color_wheel_selector.dart - - createState - 2 - - - - - - - - - - 540 LOC File: lib/widgets/canvas_gesture_handler_state_methods.dart - - canvas_gesture_handler_state_methods.dart - 540 LOC - - - - - - 540 LOC in Class: <...> - -File: lib/widgets/canvas_gesture_handler_state_methods.dart - - <...> - 540 LOC - - - - - - 27 LOC in Method: ._applySelectionModifierMath() - -File: lib/widgets/canvas_gesture_handler_state_methods.dart - - - _applySelectionModifierMath - 27 - - - - - - - - 17 LOC in Method: ._canStartDrawingOnSelectedLayer() - -File: lib/widgets/canvas_gesture_handler_state_methods.dart - - - _canStartDrawingOnSelectedLayer - 17 - - - - - - - - 4 LOC in Method: ._clearSelectionTapTracking() - -File: lib/widgets/canvas_gesture_handler_state_methods.dart - - - _clearSelectionTapTracking - 4 - - - - - - - - 13 LOC in Method: ._getDistanceBetweenTouchPoints() - -File: lib/widgets/canvas_gesture_handler_state_methods.dart - - - _getDistanceBetweenTouchPoints - 13 - - - - - - - - 18 LOC in Method: ._handleEyeDropperPointerStart() - -File: lib/widgets/canvas_gesture_handler_state_methods.dart - - - _handleEyeDropperPointerStart - 18 - - - - - - - - 26 LOC in Method: ._handleFillPointerStart() - -File: lib/widgets/canvas_gesture_handler_state_methods.dart - - - _handleFillPointerStart - 26 - - - - - - - - 21 LOC in Method: ._handleMultiTouchUpdate() - -File: lib/widgets/canvas_gesture_handler_state_methods.dart - - - _handleMultiTouchUpdate - 21 - - - - - - - - 42 LOC in Method: ._handlePointerEnd() - -File: lib/widgets/canvas_gesture_handler_state_methods.dart - - - _handlePointerEnd - 42 - - - - - - - - 61 LOC in Method: ._handlePointerMove() - -File: lib/widgets/canvas_gesture_handler_state_methods.dart - - - _handlePointerMove - 61 - - - - - - - - 39 LOC in Method: ._handlePointerStart() - -File: lib/widgets/canvas_gesture_handler_state_methods.dart - - - _handlePointerStart - 39 - - - - - - - - 16 LOC in Method: ._handleSelectionPointerStart() - -File: lib/widgets/canvas_gesture_handler_state_methods.dart - - - _handleSelectionPointerStart - 16 - - - - - - - - 23 LOC in Method: ._handleTextPointerStart() - -File: lib/widgets/canvas_gesture_handler_state_methods.dart - - - _handleTextPointerStart - 23 - - - - - - - - 12 LOC in Method: ._handleUserPanningTheCanvas() - -File: lib/widgets/canvas_gesture_handler_state_methods.dart - - - _handleUserPanningTheCanvas - 12 - - - - - - - - 18 LOC in Method: ._handleUserScalingTheCanvas() - -File: lib/widgets/canvas_gesture_handler_state_methods.dart - - - _handleUserScalingTheCanvas - 18 - - - - - - - - 46 LOC in Method: ._initializeGradientFill() - -File: lib/widgets/canvas_gesture_handler_state_methods.dart - - - _initializeGradientFill - 46 - - - - - - - - 5 LOC in Method: ._isSampleAllLayersModifierPressed() - -File: lib/widgets/canvas_gesture_handler_state_methods.dart - - - _isSampleAllLayersModifierPressed - 5 - - - - - - - - 20 LOC in Method: ._registerInputModality() - -File: lib/widgets/canvas_gesture_handler_state_methods.dart - - - _registerInputModality - 20 - - - - - - - - 9 LOC in Method: ._restoreSelectionMath() - -File: lib/widgets/canvas_gesture_handler_state_methods.dart - - - _restoreSelectionMath - 9 - - - - - - - - 5 LOC in Method: ._shouldShowDrawingToolPreview() - -File: lib/widgets/canvas_gesture_handler_state_methods.dart - - - _shouldShowDrawingToolPreview - 5 - - - - - - - - 5 LOC in Method: ._showLockedLayerMessage() - -File: lib/widgets/canvas_gesture_handler_state_methods.dart - - - _showLockedLayerMessage - 5 - - - - - - - - 30 LOC in Method: ._showTextDialog() - -File: lib/widgets/canvas_gesture_handler_state_methods.dart - - - _showTextDialog - 30 - - - - - - - - 32 LOC in Method: ._startDrawingPointer() - -File: lib/widgets/canvas_gesture_handler_state_methods.dart - - - _startDrawingPointer - 32 - - - - - - - - 6 LOC in Method: ._supportsHoverPreview() - -File: lib/widgets/canvas_gesture_handler_state_methods.dart - - - _supportsHoverPreview - 6 - - - - - - - - 32 LOC in Method: ._tryCloseStraightLineSelectionOnDoubleTap() - -File: lib/widgets/canvas_gesture_handler_state_methods.dart - - - _tryCloseStraightLineSelectionOnDoubleTap - 32 - - - - - - - - 13 LOC in Method: ._updateDrawingToolPreview() - -File: lib/widgets/canvas_gesture_handler_state_methods.dart - - - _updateDrawingToolPreview - 13 + + createState + 2 - - - - + + + + 500 LOC File: lib/widgets/overlay_control_widgets.dart - overlay_control_widgets.dart - 500 LOC + overlay_control_widgets.dart + 500 LOC - - - - + + + + 382 LOC in Class: <...> File: lib/widgets/overlay_control_widgets.dart - <...> - 382 LOC + <...> + 382 LOC - - - - + + + + 73 LOC in Function: buildOverlayButton() File: lib/widgets/overlay_control_widgets.dart - - buildOverlayButton - 73 + + buildOverlayButton + 73 - - - - + + + + 40 LOC in Function: buildOverlayCircleButton() File: lib/widgets/overlay_control_widgets.dart - - buildOverlayCircleButton - 40 + + buildOverlayCircleButton + 40 - - - - + + + + 45 LOC in Function: _buildOverlayButtonContent() File: lib/widgets/overlay_control_widgets.dart - - _buildOverlayButtonContent - 45 + + _buildOverlayButtonContent + 45 - - - - + + + + 35 LOC in Function: buildOverlayModeButton() File: lib/widgets/overlay_control_widgets.dart - - buildOverlayModeButton - 35 + + buildOverlayModeButton + 35 - - - - + + + + 29 LOC in Function: buildOverlayFeedbackBubble() File: lib/widgets/overlay_control_widgets.dart - - buildOverlayFeedbackBubble - 29 + + buildOverlayFeedbackBubble + 29 - - - - + + + + 27 LOC in Function: buildOverlayControlSurface() File: lib/widgets/overlay_control_widgets.dart - - buildOverlayControlSurface - 27 + + buildOverlayControlSurface + 27 - - - - + + + + 29 LOC in Function: buildPositionedOverlayControls() File: lib/widgets/overlay_control_widgets.dart - - buildPositionedOverlayControls - 29 + + buildPositionedOverlayControls + 29 - - - - + + + + 35 LOC in Function: buildOverlayConfirmCancelButtons() File: lib/widgets/overlay_control_widgets.dart - - buildOverlayConfirmCancelButtons - 35 + + buildOverlayConfirmCancelButtons + 35 - - - - + + + + 2 LOC in Method: .onEscapePressed() File: lib/widgets/overlay_control_widgets.dart - - onEscapePressed - 2 + + onEscapePressed + 2 - - - - + + + + 8 LOC in Method: .initState() File: lib/widgets/overlay_control_widgets.dart - - initState - 8 + + initState + 8 - - - - + + + + 5 LOC in Method: .dispose() File: lib/widgets/overlay_control_widgets.dart - - dispose - 5 + + dispose + 5 - - - - + + + + 14 LOC in Method: .wrapWithEscapeFocus() File: lib/widgets/overlay_control_widgets.dart - - wrapWithEscapeFocus - 14 + + wrapWithEscapeFocus + 14 - - - - + + + + 40 LOC in Function: computeOverlayPlacement() File: lib/widgets/overlay_control_widgets.dart - - computeOverlayPlacement - 40 + + computeOverlayPlacement + 40 - - - - + + + + 74 LOC in Class: OverlayDragHandle File: lib/widgets/overlay_control_widgets.dart - OverlayDragHandle - 74 LOC + OverlayDragHandle + 74 LOC - - - - + + + + 14 LOC in Method: OverlayDragHandle.OverlayDragHandle() File: lib/widgets/overlay_control_widgets.dart - - OverlayDragHandle - 14 + + OverlayDragHandle + 14 - - - - + + + + 35 LOC in Method: OverlayDragHandle.build() File: lib/widgets/overlay_control_widgets.dart - - build - 35 + + build + 35 - - - - + + + + 44 LOC in Class: OverlayPlacement File: lib/widgets/overlay_control_widgets.dart - OverlayPlacement - 44 LOC + OverlayPlacement + 44 LOC - - - - + + + + 7 LOC in Method: OverlayPlacement.OverlayPlacement._() File: lib/widgets/overlay_control_widgets.dart - - OverlayPlacement._ - 7 + + OverlayPlacement._ + 7 - - - - + + + + 23 LOC in Method: OverlayPlacement.orderedColumnChildren() File: lib/widgets/overlay_control_widgets.dart - - orderedColumnChildren - 23 + + orderedColumnChildren + 23 - - - - + + + + 449 LOC File: lib/widgets/shortcuts.dart - shortcuts.dart - 449 LOC + shortcuts.dart + 449 LOC - - - - + + + + 283 LOC in Class: <...> File: lib/widgets/shortcuts.dart - <...> - 283 LOC + <...> + 283 LOC - - - - + + + + 190 LOC in Function: shortCutsForMainApp() File: lib/widgets/shortcuts.dart - - shortCutsForMainApp - 190 + + shortCutsForMainApp + 190 - - - - + + + + 7 LOC in Function: showShortcutsHelp() File: lib/widgets/shortcuts.dart - - showShortcutsHelp - 7 + + showShortcutsHelp + 7 - - - - + + + + 86 LOC in Function: _buildShortcuts() File: lib/widgets/shortcuts.dart - - _buildShortcuts - 86 + + _buildShortcuts + 86 - - - - + + + + 44 LOC in Class: _MainAppShortcutScopeState File: lib/widgets/shortcuts.dart - _MainAppShortcutScopeState - 44 LOC + _MainAppShortcutScopeState + 44 LOC - - - - + + + + 10 LOC in Method: _MainAppShortcutScopeState.initState() File: lib/widgets/shortcuts.dart - - initState - 10 + + initState + 10 - - - - + + + + 5 LOC in Method: _MainAppShortcutScopeState.dispose() File: lib/widgets/shortcuts.dart - - dispose - 5 + + dispose + 5 - - - - + + + + 20 LOC in Method: _MainAppShortcutScopeState.build() File: lib/widgets/shortcuts.dart - - build - 20 + + build + 20 - - - - + + + + 6 LOC in Method: _MainAppShortcutScopeState._restoreShortcutFocus() File: lib/widgets/shortcuts.dart - - _restoreShortcutFocus - 6 + + _restoreShortcutFocus + 6 - - - - + + + + 12 LOC in Class: _MainAppShortcutScope File: lib/widgets/shortcuts.dart - _MainAppShortcutScope - 12 LOC + _MainAppShortcutScope + 12 LOC - - - - + + + + 5 LOC in Method: _MainAppShortcutScope._MainAppShortcutScope() File: lib/widgets/shortcuts.dart - - _MainAppShortcutScope - 5 + + _MainAppShortcutScope + 5 - - - - + + + + 2 LOC in Method: _MainAppShortcutScope.createState() File: lib/widgets/shortcuts.dart - - createState - 2 + + createState + 2 - - - - + + + + 5 LOC in Class: UndoIntent File: lib/widgets/shortcuts.dart - UndoIntent - 5 LOC + UndoIntent + 5 LOC - - - - + + + + 5 LOC in Class: RedoIntent File: lib/widgets/shortcuts.dart - RedoIntent - 5 LOC + RedoIntent + 5 LOC - - - - + + + + 5 LOC in Class: ZoomInIntent File: lib/widgets/shortcuts.dart - ZoomInIntent - 5 LOC + ZoomInIntent + 5 LOC - - - - + + + + 5 LOC in Class: ZoomOutIntent File: lib/widgets/shortcuts.dart - ZoomOutIntent - 5 LOC + ZoomOutIntent + 5 LOC - - - - + + + + 5 LOC in Class: ResetZoomIntent File: lib/widgets/shortcuts.dart - ResetZoomIntent - 5 LOC + ResetZoomIntent + 5 LOC - - - - + + + + 5 LOC in Class: SaveIntent File: lib/widgets/shortcuts.dart - SaveIntent - 5 LOC + SaveIntent + 5 LOC - - - - + + + + 5 LOC in Class: SelectAllIntent File: lib/widgets/shortcuts.dart - SelectAllIntent - 5 LOC + SelectAllIntent + 5 LOC - - - - + + + + 5 LOC in Class: ToolBrushIntent File: lib/widgets/shortcuts.dart - ToolBrushIntent - 5 LOC + ToolBrushIntent + 5 LOC - - - - + + + + 5 LOC in Class: ToolEraserIntent File: lib/widgets/shortcuts.dart - ToolEraserIntent - 5 LOC + ToolEraserIntent + 5 LOC - - - - + + + + 5 LOC in Class: ToolSelectionIntent File: lib/widgets/shortcuts.dart - ToolSelectionIntent - 5 LOC + ToolSelectionIntent + 5 LOC - - - - + + + + 5 LOC in Class: ToolFillIntent File: lib/widgets/shortcuts.dart - ToolFillIntent - 5 LOC + ToolFillIntent + 5 LOC - - - - + + + + 5 LOC in Class: ToolTextIntent File: lib/widgets/shortcuts.dart - ToolTextIntent - 5 LOC + ToolTextIntent + 5 LOC - - - - + + + + 5 LOC in Class: NewDocumentFromClipboardImage File: lib/widgets/shortcuts.dart - NewDocumentFromClipboardImage - 5 LOC + NewDocumentFromClipboardImage + 5 LOC - - - - + + + + 5 LOC in Class: CutIntent File: lib/widgets/shortcuts.dart - CutIntent - 5 LOC + CutIntent + 5 LOC - - - - + + + + 5 LOC in Class: CopyIntent File: lib/widgets/shortcuts.dart - CopyIntent - 5 LOC + CopyIntent + 5 LOC - - - - + + + + 5 LOC in Class: PasteIntent File: lib/widgets/shortcuts.dart - PasteIntent - 5 LOC + PasteIntent + 5 LOC - - - - + + + + 5 LOC in Class: DuplicateIntent File: lib/widgets/shortcuts.dart - DuplicateIntent - 5 LOC + DuplicateIntent + 5 LOC - - - - + + + + 5 LOC in Class: DuplicateNewLayerIntent File: lib/widgets/shortcuts.dart - DuplicateNewLayerIntent - 5 LOC + DuplicateNewLayerIntent + 5 LOC - - - - + + + + 5 LOC in Class: EscapeIntent File: lib/widgets/shortcuts.dart - EscapeIntent - 5 LOC + EscapeIntent + 5 LOC - - - - + + + + 5 LOC in Class: ToggleShellModeIntent File: lib/widgets/shortcuts.dart - ToggleShellModeIntent - 5 LOC + ToggleShellModeIntent + 5 LOC - - - - + + + + 5 LOC in Class: DeleteIntent File: lib/widgets/shortcuts.dart - DeleteIntent - 5 LOC + DeleteIntent + 5 LOC - - - - + + + + 5 LOC in Class: HelpIntent File: lib/widgets/shortcuts.dart - HelpIntent - 5 LOC + HelpIntent + 5 LOC - - - - + + + + 445 LOC File: lib/widgets/app_buttons.dart - app_buttons.dart - 445 LOC + app_buttons.dart + 445 LOC - - - - + + + + 131 LOC in Class: <...> File: lib/widgets/app_buttons.dart - <...> - 131 LOC + <...> + 131 LOC - - - - + + + + 8 LOC in Method: .color() File: lib/widgets/app_buttons.dart - - color - 8 + + color + 8 - - - - + + + + 8 LOC in Method: .backgroundColor() File: lib/widgets/app_buttons.dart - - backgroundColor - 8 + + backgroundColor + 8 - - - - + + + + 8 LOC in Method: .contentSemantic() File: lib/widgets/app_buttons.dart - - contentSemantic - 8 + + contentSemantic + 8 - - - - + + + + 8 LOC in Method: .horizontalPadding() File: lib/widgets/app_buttons.dart - - horizontalPadding - 8 + + horizontalPadding + 8 - - - - + + + + 4 LOC in Method: .markPressed() File: lib/widgets/app_buttons.dart - - markPressed - 4 + + markPressed + 4 - - - - + + + + 18 LOC in Method: .releasePressedOnNextFrame() File: lib/widgets/app_buttons.dart - - releasePressedOnNextFrame - 18 + + releasePressedOnNextFrame + 18 - - - - + + + + 12 LOC in Function: _buildButtonPreviewContainer() File: lib/widgets/app_buttons.dart - - _buildButtonPreviewContainer - 12 + + _buildButtonPreviewContainer + 12 - - - - + + + + 1 LOC in Function: _noopPreviewAction() File: lib/widgets/app_buttons.dart - - _noopPreviewAction - 1 + + _noopPreviewAction + 1 - - - - + + + + 10 LOC in Function: appButtonTextPreview() File: lib/widgets/app_buttons.dart - - appButtonTextPreview - 10 + + appButtonTextPreview + 10 - - - - + + + + 10 LOC in Function: appButtonDangerPreview() File: lib/widgets/app_buttons.dart - - appButtonDangerPreview - 10 + + appButtonDangerPreview + 10 - - - - + + + + 10 LOC in Function: appButtonPrimaryPreview() File: lib/widgets/app_buttons.dart - - appButtonPrimaryPreview - 10 + + appButtonPrimaryPreview + 10 - - - - + + + + 11 LOC in Function: appButtonIconPreview() File: lib/widgets/app_buttons.dart - - appButtonIconPreview - 11 + + appButtonIconPreview + 11 - - - - + + + + 10 LOC in Function: appButtonChildPreview() File: lib/widgets/app_buttons.dart - - appButtonChildPreview - 10 + + appButtonChildPreview + 10 - - - - + + + + 13 LOC in Function: appButtonBuilderPreview() File: lib/widgets/app_buttons.dart - - appButtonBuilderPreview - 13 + + appButtonBuilderPreview + 13 - - - - + + + + 103 LOC in Class: _AppButtonState File: lib/widgets/app_buttons.dart - _AppButtonState - 103 LOC + _AppButtonState + 103 LOC - - - - + + + + 49 LOC in Method: _AppButtonState.build() File: lib/widgets/app_buttons.dart - - build - 49 + + build + 49 - - - - + + + + 4 LOC in Method: _AppButtonState._handlePanCancel() File: lib/widgets/app_buttons.dart - - _handlePanCancel - 4 + + _handlePanCancel + 4 - - - - + + + + 4 LOC in Method: _AppButtonState._handlePanEnd() File: lib/widgets/app_buttons.dart - - _handlePanEnd - 4 + + _handlePanEnd + 4 - - - - + + + + 4 LOC in Method: _AppButtonState._handlePanStart() File: lib/widgets/app_buttons.dart - - _handlePanStart - 4 + + _handlePanStart + 4 - - - - + + + + 1 LOC in Method: _AppButtonState._opacity() File: lib/widgets/app_buttons.dart - - _opacity - 1 + + _opacity + 1 - - - - + + + + 8 LOC in Method: _AppButtonState._releasePressedWithMinimumDuration() File: lib/widgets/app_buttons.dart - - _releasePressedWithMinimumDuration - 8 + + _releasePressedWithMinimumDuration + 8 - - - - + + + + 9 LOC in Method: _AppButtonState._scale() File: lib/widgets/app_buttons.dart - - _scale - 9 + + _scale + 9 - - - - + + + + 8 LOC in Method: _AppButtonState._setHovered() File: lib/widgets/app_buttons.dart - - _setHovered - 8 + + _setHovered + 8 - - - - + + + + 12 LOC in Method: _AppButtonState._setPressed() File: lib/widgets/app_buttons.dart - - _setPressed - 12 + + _setPressed + 12 - - - - + + + + 63 LOC in Class: AppButton File: lib/widgets/app_buttons.dart - AppButton - 63 LOC + AppButton + 63 LOC - - - - + + + + 23 LOC in Method: AppButton.AppButton() File: lib/widgets/app_buttons.dart - - AppButton - 23 + + AppButton + 23 - - - - + + + + 2 LOC in Method: AppButton.createState() File: lib/widgets/app_buttons.dart - - createState - 2 + + createState + 2 - - - - + + + + 46 LOC in Class: AppButtonIcon File: lib/widgets/app_buttons.dart - AppButtonIcon - 46 LOC + AppButtonIcon + 46 LOC - - - - + + + + 13 LOC in Method: AppButtonIcon.AppButtonIcon() File: lib/widgets/app_buttons.dart - - AppButtonIcon - 13 + + AppButtonIcon + 13 - - - - + + + + 20 LOC in Method: AppButtonIcon.build() File: lib/widgets/app_buttons.dart - - build - 20 + + build + 20 - - - - + + + + 36 LOC in Class: _AppLabelButton File: lib/widgets/app_buttons.dart - _AppLabelButton - 36 LOC + _AppLabelButton + 36 LOC - - - - + + + + 5 LOC in Method: _AppLabelButton._AppLabelButton() File: lib/widgets/app_buttons.dart - - _AppLabelButton - 5 + + _AppLabelButton + 5 - - - - + + + + 26 LOC in Method: _AppLabelButton.build() File: lib/widgets/app_buttons.dart - - build - 26 + + build + 26 - - - - + + + + 18 LOC in Class: AppButtonText File: lib/widgets/app_buttons.dart - AppButtonText - 18 LOC + AppButtonText + 18 LOC - - - - + + + + 5 LOC in Method: AppButtonText.AppButtonText() File: lib/widgets/app_buttons.dart - - AppButtonText - 5 + + AppButtonText + 5 - - - - + + + + 8 LOC in Method: AppButtonText.build() File: lib/widgets/app_buttons.dart - - build - 8 + + build + 8 - - - - + + + + 18 LOC in Class: AppButtonDanger File: lib/widgets/app_buttons.dart - AppButtonDanger - 18 LOC + AppButtonDanger + 18 LOC - - - - + + + + 5 LOC in Method: AppButtonDanger.AppButtonDanger() File: lib/widgets/app_buttons.dart - - AppButtonDanger - 5 + + AppButtonDanger + 5 - - - - + + + + 8 LOC in Method: AppButtonDanger.build() File: lib/widgets/app_buttons.dart - - build - 8 + + build + 8 - - - - + + + + 18 LOC in Class: AppButtonPrimary File: lib/widgets/app_buttons.dart - AppButtonPrimary - 18 LOC + AppButtonPrimary + 18 LOC - - - - + + + + 5 LOC in Method: AppButtonPrimary.AppButtonPrimary() File: lib/widgets/app_buttons.dart - - AppButtonPrimary - 5 + + AppButtonPrimary + 5 - - - - + + + + 8 LOC in Method: AppButtonPrimary.build() File: lib/widgets/app_buttons.dart - - build - 8 + + build + 8 - - - - + + + + 12 LOC in Class: AppButtonVisualState File: lib/widgets/app_buttons.dart - AppButtonVisualState - 12 LOC + AppButtonVisualState + 12 LOC - - - - - 439 LOC File: lib/widgets/canvas_gesture_handler_pixel_brush.dart + + + + + 440 LOC File: lib/widgets/canvas_gesture_handler_pixel_brush.dart - canvas_gesture_handler_pixel_brush.dart - 439 LOC + canvas_gesture_handler_pixel_brush.dart + 440 LOC - - - - - 439 LOC in Class: <...> + <rect x="326.9342575521187" y="1017.9011513989716" width="254.83387263580272" height="232.50201547069958" rx="5.00" ry="5.00" fill="#9eb89a" fill-opacity="0.45"/> + <rect x="326.9342575521187" y="1017.9011513989716" width="254.83387263580272" height="232.50201547069958" rx="5.00" ry="5.00" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="326.9342575521187" y="1017.9011513989716" width="254.83387263580272" height="232.50201547069958" rx="5.00" ry="5.00" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8" stroke-dasharray="6,4"/> + <rect x="326.9342575521187" y="1017.9011513989716" width="254.83387263580272" height="232.50201547069958" rx="5.00" ry="5.00" fill="transparent" pointer-events="all"> + <title>440 LOC in Class: <...> File: lib/widgets/canvas_gesture_handler_pixel_brush.dart - <...> - 439 LOC + <...> + 440 LOC - - - - + + + + 25 LOC in Method: ._appendPixelBrushPoint() File: lib/widgets/canvas_gesture_handler_pixel_brush.dart - - _appendPixelBrushPoint - 25 + + _appendPixelBrushPoint + 25 - - - - - 10 LOC in Method: ._clearPixelBrushStroke() + <rect x="534.0394782601089" y="1187.6148254329105" width="39.72865192781245" height="30.133587790218513" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="534.0394782601089" y="1187.6148254329105" width="39.72865192781245" height="30.133587790218513" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="534.0394782601089" y="1187.6148254329105" width="39.72865192781245" height="30.133587790218513" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="534.0394782601089" y="1187.6148254329105" width="39.72865192781245" height="30.133587790218513" fill="transparent" pointer-events="all"> + <title>11 LOC in Method: ._clearPixelBrushStroke() File: lib/widgets/canvas_gesture_handler_pixel_brush.dart - - _clearPixelBrushStroke - 10 + + _clearPixelBrushStroke + 11 - - - - + + + + 225 LOC in Method: ._commitPixelBrushStroke() File: lib/widgets/canvas_gesture_handler_pixel_brush.dart - - _commitPixelBrushStroke - 225 + + _commitPixelBrushStroke + 225 - - - - + + + + 24 LOC in Method: ._currentSmudgeSignature() File: lib/widgets/canvas_gesture_handler_pixel_brush.dart - - _currentSmudgeSignature - 24 + + _currentSmudgeSignature + 24 - - - - + + + + 19 LOC in Method: ._blitRegionIntoSmudgeCache() File: lib/widgets/canvas_gesture_handler_pixel_brush.dart - - _blitRegionIntoSmudgeCache - 19 + + _blitRegionIntoSmudgeCache + 19 - - - - + + + + 9 LOC in Method: ._clearSmudgeSourceCache() File: lib/widgets/canvas_gesture_handler_pixel_brush.dart - - _clearSmudgeSourceCache - 9 + + _clearSmudgeSourceCache + 9 - - - - + + + + 12 LOC in Method: ._intListEquals() File: lib/widgets/canvas_gesture_handler_pixel_brush.dart - - _intListEquals - 12 + + _intListEquals + 12 - - - - + + + + 65 LOC in Method: ._applyCommittedPixelBrushPatch() File: lib/widgets/canvas_gesture_handler_pixel_brush.dart - - _applyCommittedPixelBrushPatch - 65 + + _applyCommittedPixelBrushPatch + 65 - - - - + + + + 19 LOC in Method: ._restorePixelBrushLayerState() File: lib/widgets/canvas_gesture_handler_pixel_brush.dart - - _restorePixelBrushLayerState - 19 + + _restorePixelBrushLayerState + 19 - - - - + + + + 31 LOC in Method: ._startPixelBrushStroke() File: lib/widgets/canvas_gesture_handler_pixel_brush.dart - - _startPixelBrushStroke - 31 + + _startPixelBrushStroke + 31 - - - - + + + + 403 LOC File: lib/widgets/app_button_row.dart - app_button_row.dart - 403 LOC + app_button_row.dart + 403 LOC - - - - + + + + 164 LOC in Class: <...> File: lib/widgets/app_button_row.dart - <...> - 164 LOC + <...> + 164 LOC - - - - + + + + 17 LOC in Function: _describeAppButtonRowAction() File: lib/widgets/app_button_row.dart - - _describeAppButtonRowAction - 17 + + _describeAppButtonRowAction + 17 - - - - + + + + 24 LOC in Function: _actionDescriptionForButtonRowSlot() File: lib/widgets/app_button_row.dart - - _actionDescriptionForButtonRowSlot - 24 + + _actionDescriptionForButtonRowSlot + 24 - - - - + + + + 15 LOC in Function: _buildButtonRowPreviewContainer() File: lib/widgets/app_button_row.dart - - _buildButtonRowPreviewContainer - 15 + + _buildButtonRowPreviewContainer + 15 - - - - + + + + 1 LOC in Function: _noopButtonRowPreviewAction() File: lib/widgets/app_button_row.dart - - _noopButtonRowPreviewAction - 1 + + _noopButtonRowPreviewAction + 1 - - - - + + + + 11 LOC in Function: appRowDangerButtonPreview() File: lib/widgets/app_button_row.dart - - appRowDangerButtonPreview - 11 + + appRowDangerButtonPreview + 11 - - - - + + + + 12 LOC in Function: appRowIconButtonPreview() File: lib/widgets/app_button_row.dart - - appRowIconButtonPreview - 12 + + appRowIconButtonPreview + 12 - - - - + + + + 11 LOC in Function: appRowSecondaryButtonPreview() File: lib/widgets/app_button_row.dart - - appRowSecondaryButtonPreview - 11 + + appRowSecondaryButtonPreview + 11 - - - - + + + + 11 LOC in Function: appRowPrimaryButtonPreview() File: lib/widgets/app_button_row.dart - - appRowPrimaryButtonPreview - 11 + + appRowPrimaryButtonPreview + 11 - - - - + + + + 20 LOC in Function: appButtonRowDefaultPreview() File: lib/widgets/app_button_row.dart - - appButtonRowDefaultPreview - 20 + + appButtonRowDefaultPreview + 20 - - - - + + + + 26 LOC in Function: appButtonRowWithIconPreview() File: lib/widgets/app_button_row.dart - - appButtonRowWithIconPreview - 26 + + appButtonRowWithIconPreview + 26 - - - - + + + + 16 LOC in Function: appButtonRowCompactPreview() File: lib/widgets/app_button_row.dart - - appButtonRowCompactPreview - 16 + + appButtonRowCompactPreview + 16 - - - - + + + + 48 LOC in Class: AppButtonRow File: lib/widgets/app_button_row.dart - AppButtonRow - 48 LOC + AppButtonRow + 48 LOC - - - - + + + + 4 LOC in Method: AppButtonRow.AppButtonRow() File: lib/widgets/app_button_row.dart - - AppButtonRow - 4 + + AppButtonRow + 4 - - - - + + + + 40 LOC in Method: AppButtonRow.build() File: lib/widgets/app_button_row.dart - - build - 40 + + build + 40 - - - - + + + + 47 LOC in Class: _AppButtonRowGroup File: lib/widgets/app_button_row.dart - _AppButtonRowGroup - 47 LOC + _AppButtonRowGroup + 47 LOC - - - - + + + + 4 LOC in Method: _AppButtonRowGroup._AppButtonRowGroup() File: lib/widgets/app_button_row.dart - - _AppButtonRowGroup - 4 + + _AppButtonRowGroup + 4 - - - - + + + + 20 LOC in Method: _AppButtonRowGroup.build() File: lib/widgets/app_button_row.dart - - build - 20 + + build + 20 - - - - + + + + 4 LOC in Method: _AppButtonRowGroup._estimatedActionWidth() File: lib/widgets/app_button_row.dart - - _estimatedActionWidth - 4 + + _estimatedActionWidth + 4 - - - - + + + + 12 LOC in Method: _AppButtonRowGroup._estimatedHorizontalWidth() File: lib/widgets/app_button_row.dart - - _estimatedHorizontalWidth - 12 + + _estimatedHorizontalWidth + 12 - - - - + + + + 3 LOC in Method: _AppButtonRowGroup._shouldStackVertically() File: lib/widgets/app_button_row.dart - - _shouldStackVertically - 3 + + _shouldStackVertically + 3 - - - - + + + + 37 LOC in Class: AppRowIconButton File: lib/widgets/app_button_row.dart - AppRowIconButton - 37 LOC + AppRowIconButton + 37 LOC - - - - + + + + 11 LOC in Method: AppRowIconButton.AppRowIconButton() File: lib/widgets/app_button_row.dart - - AppRowIconButton - 11 + + AppRowIconButton + 11 - - - - + + + + 2 LOC in Method: AppRowIconButton.slot() File: lib/widgets/app_button_row.dart - - slot - 2 + + slot + 2 - - - - + + + + 13 LOC in Method: AppRowIconButton.build() File: lib/widgets/app_button_row.dart - - build - 13 + + build + 13 - - - - + + + + 36 LOC in Class: _AppButtonRowGroups File: lib/widgets/app_button_row.dart - _AppButtonRowGroups - 36 LOC + _AppButtonRowGroups + 36 LOC - - - - + + + + 24 LOC in Method: _AppButtonRowGroups._AppButtonRowGroups.fromActions() File: lib/widgets/app_button_row.dart - - _AppButtonRowGroups.fromActions - 24 + + _AppButtonRowGroups.fromActions + 24 - - - - + + + + 6 LOC in Method: _AppButtonRowGroups._AppButtonRowGroups() File: lib/widgets/app_button_row.dart - - _AppButtonRowGroups - 6 + + _AppButtonRowGroups + 6 - - - - + + + + 19 LOC in Class: AppRowDangerButton File: lib/widgets/app_button_row.dart - AppRowDangerButton - 19 LOC + AppRowDangerButton + 19 LOC - - - - + + + + 5 LOC in Method: AppRowDangerButton.AppRowDangerButton() File: lib/widgets/app_button_row.dart - - AppRowDangerButton - 5 + + AppRowDangerButton + 5 - - - - + + + + 2 LOC in Method: AppRowDangerButton.slot() File: lib/widgets/app_button_row.dart - - slot - 2 + + slot + 2 - - - - + + + + 7 LOC in Method: AppRowDangerButton.build() File: lib/widgets/app_button_row.dart - - build - 7 + + build + 7 - - - - + + + + 19 LOC in Class: AppRowSecondaryButton File: lib/widgets/app_button_row.dart - AppRowSecondaryButton - 19 LOC + AppRowSecondaryButton + 19 LOC - - - - + + + + 5 LOC in Method: AppRowSecondaryButton.AppRowSecondaryButton() File: lib/widgets/app_button_row.dart - - AppRowSecondaryButton - 5 + + AppRowSecondaryButton + 5 - - - - + + + + 2 LOC in Method: AppRowSecondaryButton.slot() File: lib/widgets/app_button_row.dart - - slot - 2 + + slot + 2 - - - - + + + + 7 LOC in Method: AppRowSecondaryButton.build() File: lib/widgets/app_button_row.dart - - build - 7 + + build + 7 - - - - + + + + 19 LOC in Class: AppRowPrimaryButton File: lib/widgets/app_button_row.dart - AppRowPrimaryButton - 19 LOC + AppRowPrimaryButton + 19 LOC - - - - + + + + 5 LOC in Method: AppRowPrimaryButton.AppRowPrimaryButton() File: lib/widgets/app_button_row.dart - - AppRowPrimaryButton - 5 + + AppRowPrimaryButton + 5 - - - - + + + + 2 LOC in Method: AppRowPrimaryButton.slot() File: lib/widgets/app_button_row.dart - - slot - 2 + + slot + 2 - - - - + + + + 7 LOC in Method: AppRowPrimaryButton.build() File: lib/widgets/app_button_row.dart - - build - 7 + + build + 7 - - - - + + + + 8 LOC in Class: _AppButtonRowActionDescription File: lib/widgets/app_button_row.dart - _AppButtonRowActionDescription - 8 LOC + _AppButtonRowActionDescription + 8 LOC - - - - + + + + 4 LOC in Method: _AppButtonRowActionDescription._AppButtonRowActionDescription() File: lib/widgets/app_button_row.dart - - _AppButtonRowActionDescription - 4 + + _AppButtonRowActionDescription + 4 - - - - + + + + 6 LOC in Class: AppButtonRowWidget File: lib/widgets/app_button_row.dart - AppButtonRowWidget - 6 LOC + AppButtonRowWidget + 6 LOC - - - - + + + + 371 LOC File: lib/widgets/gradient_color_list_editor.dart - gradient_color_list_editor.dart - 371 LOC + gradient_color_list_editor.dart + 371 LOC - - - - + + + + 341 LOC in Class: _GradientColorListEditorState File: lib/widgets/gradient_color_list_editor.dart - _GradientColorListEditorState - 341 LOC + _GradientColorListEditorState + 341 LOC - - - - + + + + 6 LOC in Method: _GradientColorListEditorState.initState() File: lib/widgets/gradient_color_list_editor.dart - - initState - 6 + + initState + 6 - - - - + + + + 7 LOC in Method: _GradientColorListEditorState.dispose() File: lib/widgets/gradient_color_list_editor.dart - - dispose - 7 + + dispose + 7 - - - - + + + + 9 LOC in Method: _GradientColorListEditorState.didUpdateWidget() File: lib/widgets/gradient_color_list_editor.dart - - didUpdateWidget - 9 + + didUpdateWidget + 9 - - - - + + + + 12 LOC in Method: _GradientColorListEditorState.build() File: lib/widgets/gradient_color_list_editor.dart - - build - 12 + + build + 12 - - - - + + + + 20 LOC in Method: _GradientColorListEditorState._addStop() File: lib/widgets/gradient_color_list_editor.dart - - _addStop - 20 + + _addStop + 20 - - - - + + + + 12 LOC in Method: _GradientColorListEditorState._buildAddButton() File: lib/widgets/gradient_color_list_editor.dart - - _buildAddButton - 12 + + _buildAddButton + 12 - - - - + + + + 27 LOC in Method: _GradientColorListEditorState._buildPositionField() File: lib/widgets/gradient_color_list_editor.dart - - _buildPositionField - 27 + + _buildPositionField + 27 - - - - + + + + 72 LOC in Method: _GradientColorListEditorState._buildStopRow() File: lib/widgets/gradient_color_list_editor.dart - - _buildStopRow - 72 + + _buildStopRow + 72 - - - - + + + + 8 LOC in Method: _GradientColorListEditorState._canMoveDown() File: lib/widgets/gradient_color_list_editor.dart - - _canMoveDown - 8 + + _canMoveDown + 8 - - - - + + + + 8 LOC in Method: _GradientColorListEditorState._canMoveUp() File: lib/widgets/gradient_color_list_editor.dart - - _canMoveUp - 8 + + _canMoveUp + 8 - - - - + + + + 6 LOC in Method: _GradientColorListEditorState._changeColor() File: lib/widgets/gradient_color_list_editor.dart - - _changeColor - 6 + + _changeColor + 6 - - - - + + + + 28 LOC in Method: _GradientColorListEditorState._changePosition() File: lib/widgets/gradient_color_list_editor.dart - - _changePosition - 28 + + _changePosition + 28 - - - - + + + + 10 LOC in Method: _GradientColorListEditorState._ensureEndpointPositions() File: lib/widgets/gradient_color_list_editor.dart - - _ensureEndpointPositions - 10 + + _ensureEndpointPositions + 10 - - - - + + + + 12 LOC in Method: _GradientColorListEditorState._moveDown() File: lib/widgets/gradient_color_list_editor.dart - - _moveDown - 12 + + _moveDown + 12 - - - - + + + + 12 LOC in Method: _GradientColorListEditorState._moveUp() File: lib/widgets/gradient_color_list_editor.dart - - _moveUp - 12 + + _moveUp + 12 - - - - + + + + 8 LOC in Method: _GradientColorListEditorState._notifyChanged() File: lib/widgets/gradient_color_list_editor.dart - - _notifyChanged - 8 + + _notifyChanged + 8 - - - - + + + + 13 LOC in Method: _GradientColorListEditorState._positionTextOutOfSync() File: lib/widgets/gradient_color_list_editor.dart - - _positionTextOutOfSync - 13 + + _positionTextOutOfSync + 13 - - - - + + + + 1 LOC in Method: _GradientColorListEditorState._positions() File: lib/widgets/gradient_color_list_editor.dart - - _positions - 1 + + _positions + 1 - - - - + + + + 21 LOC in Method: _GradientColorListEditorState._removeStop() File: lib/widgets/gradient_color_list_editor.dart - - _removeStop - 21 + + _removeStop + 21 - - - - + + + + 21 LOC in Method: _GradientColorListEditorState._reorderButton() File: lib/widgets/gradient_color_list_editor.dart - - _reorderButton - 21 + + _reorderButton + 21 - - - - + + + + 1 LOC in Method: _GradientColorListEditorState._stops() File: lib/widgets/gradient_color_list_editor.dart - - _stops - 1 + + _stops + 1 - - - - + + + + 10 LOC in Method: _GradientColorListEditorState._swapAdjacentStops() File: lib/widgets/gradient_color_list_editor.dart - - _swapAdjacentStops - 10 + + _swapAdjacentStops + 10 - - - - + + + + 13 LOC in Method: _GradientColorListEditorState._syncPositionControllers() File: lib/widgets/gradient_color_list_editor.dart - - _syncPositionControllers - 13 + + _syncPositionControllers + 13 - - - - + + + + 30 LOC in Class: GradientColorListEditor File: lib/widgets/gradient_color_list_editor.dart - GradientColorListEditor - 30 LOC + GradientColorListEditor + 30 LOC - - - - + + + + 5 LOC in Method: GradientColorListEditor.GradientColorListEditor() File: lib/widgets/gradient_color_list_editor.dart - - GradientColorListEditor - 5 + + GradientColorListEditor + 5 - - - - + + + + 2 LOC in Method: GradientColorListEditor.createState() File: lib/widgets/gradient_color_list_editor.dart - - createState - 2 + + createState + 2 - - - - - 322 LOC File: lib/widgets/color_picker_dialog.dart + + + + + 335 LOC File: lib/widgets/canvas_gesture_handler.dart - color_picker_dialog.dart - 322 LOC + canvas_gesture_handler.dart + 335 LOC - - - - - 278 LOC in Class: _ColorPickerDialogState + <rect x="599.7681301879214" y="1117.5748303675614" width="194.8582270653952" height="132.82833650210972" rx="5.00" ry="5.00" fill="#9eb89a" fill-opacity="0.78"/> + <rect x="599.7681301879214" y="1117.5748303675614" width="194.8582270653952" height="132.82833650210972" rx="5.00" ry="5.00" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="599.7681301879214" y="1117.5748303675614" width="194.8582270653952" height="132.82833650210972" rx="5.00" ry="5.00" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="599.7681301879214" y="1117.5748303675614" width="194.8582270653952" height="132.82833650210972" rx="5.00" ry="5.00" fill="transparent" pointer-events="all"> + <title>208 LOC in Class: _CanvasGestureHandlerState -File: lib/widgets/color_picker_dialog.dart +File: lib/widgets/canvas_gesture_handler.dart - _ColorPickerDialogState - 278 LOC + _CanvasGestureHandlerState + 208 LOC - - - - - 6 LOC in Method: _ColorPickerDialogState.initState() + <rect x="770.8778341154831" y="1199.1910226544812" width="15.74852313783353" height="43.21214421518988" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="770.8778341154831" y="1199.1910226544812" width="15.74852313783353" height="43.21214421518988" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="770.8778341154831" y="1199.1910226544812" width="15.74852313783353" height="43.21214421518988" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="770.8778341154831" y="1199.1910226544812" width="15.74852313783353" height="43.21214421518988" fill="transparent" pointer-events="all"> + <title>6 LOC in Method: _CanvasGestureHandlerState.dispose() -File: lib/widgets/color_picker_dialog.dart +File: lib/widgets/canvas_gesture_handler.dart - - initState - 6 + + dispose + 6 - - - - - 5 LOC in Method: _ColorPickerDialogState.dispose() + <rect x="607.7681301879214" y="1141.5748303675614" width="163.10970392756167" height="100.82833650210972" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="607.7681301879214" y="1141.5748303675614" width="163.10970392756167" height="100.82833650210972" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="607.7681301879214" y="1141.5748303675614" width="163.10970392756167" height="100.82833650210972" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="607.7681301879214" y="1141.5748303675614" width="163.10970392756167" height="100.82833650210972" fill="transparent" pointer-events="all"> + <title>145 LOC in Method: _CanvasGestureHandlerState.build() -File: lib/widgets/color_picker_dialog.dart +File: lib/widgets/canvas_gesture_handler.dart - - dispose - 5 + + build + 145 - - - - - 26 LOC in Method: _ColorPickerDialogState.build() + <rect x="770.8778341154831" y="1141.5748303675614" width="15.74852313783353" height="57.61619228691984" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="770.8778341154831" y="1141.5748303675614" width="15.74852313783353" height="57.61619228691984" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="770.8778341154831" y="1141.5748303675614" width="15.74852313783353" height="57.61619228691984" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="770.8778341154831" y="1141.5748303675614" width="15.74852313783353" height="57.61619228691984" fill="transparent" pointer-events="all"> + <title>8 LOC in Method: _CanvasGestureHandlerState._canvasCursor() -File: lib/widgets/color_picker_dialog.dart +File: lib/widgets/canvas_gesture_handler.dart - - build - 26 + + _canvasCursor + 8 + - - - - - 18 LOC in Method: _ColorPickerDialogState._buildActions() + <rect x="794.6263572533167" y="1117.5748303675614" width="118.97593671781343" height="111.91048823406094" rx="5.00" ry="5.00" fill="#9eb89a" fill-opacity="0.45"/> + <rect x="794.6263572533167" y="1117.5748303675614" width="118.97593671781343" height="111.91048823406094" rx="5.00" ry="5.00" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="794.6263572533167" y="1117.5748303675614" width="118.97593671781343" height="111.91048823406094" rx="5.00" ry="5.00" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8" stroke-dasharray="6,4"/> + <rect x="794.6263572533167" y="1117.5748303675614" width="118.97593671781343" height="111.91048823406094" rx="5.00" ry="5.00" fill="transparent" pointer-events="all"> + <title>107 LOC in Class: <...> -File: lib/widgets/color_picker_dialog.dart +File: lib/widgets/canvas_gesture_handler.dart + + <...> + 107 LOC + + + + + + 4 LOC in Function: pixelBrushActionType() + +File: lib/widgets/canvas_gesture_handler.dart - - _buildActions - 18 + + pixelBrushActionType + 4 - - - - - 15 LOC in Method: _ColorPickerDialogState._buildActivePicker() + <rect x="890.6852190260262" y="1200.8632571218648" width="14.917074945103813" height="20.62206147975766" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="890.6852190260262" y="1200.8632571218648" width="14.917074945103813" height="20.62206147975766" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="890.6852190260262" y="1200.8632571218648" width="14.917074945103813" height="20.62206147975766" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="890.6852190260262" y="1200.8632571218648" width="14.917074945103813" height="20.62206147975766" fill="transparent" pointer-events="all"> + <title>4 LOC in Function: isPixelBrushPersistedActionType() -File: lib/widgets/color_picker_dialog.dart +File: lib/widgets/canvas_gesture_handler.dart - - _buildActivePicker - 15 + + isPixelBrushPersistedActionType + 4 - - - - - 135 LOC in Method: _ColorPickerDialogState._buildContent() + <rect x="802.6263572533167" y="1141.5748303675614" width="73.1417868276058" height="44.16105928724421" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="802.6263572533167" y="1141.5748303675614" width="73.1417868276058" height="44.16105928724421" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="802.6263572533167" y="1141.5748303675614" width="73.1417868276058" height="44.16105928724421" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="802.6263572533167" y="1141.5748303675614" width="73.1417868276058" height="44.16105928724421" fill="transparent" pointer-events="all"> + <title>42 LOC in Function: applyPixelBrushPatchToLayer() -File: lib/widgets/color_picker_dialog.dart +File: lib/widgets/canvas_gesture_handler.dart - - _buildContent - 135 + + applyPixelBrushPatchToLayer + 42 - - - - - 22 LOC in Method: _ColorPickerDialogState._buildPickerModeLabel() + <rect x="802.6263572533167" y="1185.7358896548055" width="73.1417868276058" height="35.74942894681673" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="802.6263572533167" y="1185.7358896548055" width="73.1417868276058" height="35.74942894681673" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="802.6263572533167" y="1185.7358896548055" width="73.1417868276058" height="35.74942894681673" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="802.6263572533167" y="1185.7358896548055" width="73.1417868276058" height="35.74942894681673" fill="transparent" pointer-events="all"> + <title>34 LOC in Function: compactPixelBrushLayerHistory() -File: lib/widgets/color_picker_dialog.dart +File: lib/widgets/canvas_gesture_handler.dart - - _buildPickerModeLabel - 22 + + compactPixelBrushLayerHistory + 34 - - - - - 31 LOC in Method: _ColorPickerDialogState._buildPickerModeToggle() + <rect x="875.7681440809224" y="1141.5748303675614" width="29.834149890207627" height="59.28842675430327" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="875.7681440809224" y="1141.5748303675614" width="29.834149890207627" height="59.28842675430327" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="875.7681440809224" y="1141.5748303675614" width="29.834149890207627" height="59.28842675430327" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="875.7681440809224" y="1141.5748303675614" width="29.834149890207627" height="59.28842675430327" fill="transparent" pointer-events="all"> + <title>23 LOC in Function: copyPixelBrushRect() -File: lib/widgets/color_picker_dialog.dart +File: lib/widgets/canvas_gesture_handler.dart - - _buildPickerModeToggle - 31 + + copyPixelBrushRect + 23 + - - - - - 6 LOC in Method: _ColorPickerDialogState._setColor() + <rect x="794.6263572533167" y="1229.4853186016223" width="59.48796835890671" height="20.917848268048786" rx="5.00" ry="5.00" fill="#9eb89a" fill-opacity="0.78"/> + <rect x="794.6263572533167" y="1229.4853186016223" width="59.48796835890671" height="20.917848268048786" rx="5.00" ry="5.00" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="794.6263572533167" y="1229.4853186016223" width="59.48796835890671" height="20.917848268048786" rx="5.00" ry="5.00" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="794.6263572533167" y="1229.4853186016223" width="59.48796835890671" height="20.917848268048786" rx="5.00" ry="5.00" fill="transparent" pointer-events="all"> + <title>10 LOC in Class: CanvasGestureHandler -File: lib/widgets/color_picker_dialog.dart +File: lib/widgets/canvas_gesture_handler.dart - - _setColor - 6 - + CanvasGestureHandler + 10 LOC - - - - - 8 LOC in Method: _ColorPickerDialogState._setPickerMode() + <rect x="854.1143256122234" y="1229.4853186016223" width="59.48796835890671" height="20.917848268048786" rx="5.00" ry="5.00" fill="#9eb89a" fill-opacity="0.78"/> + <rect x="854.1143256122234" y="1229.4853186016223" width="59.48796835890671" height="20.917848268048786" rx="5.00" ry="5.00" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="854.1143256122234" y="1229.4853186016223" width="59.48796835890671" height="20.917848268048786" rx="5.00" ry="5.00" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="854.1143256122234" y="1229.4853186016223" width="59.48796835890671" height="20.917848268048786" rx="5.00" ry="5.00" fill="transparent" pointer-events="all"> + <title>10 LOC in Class: PixelBrushLayerPatch -File: lib/widgets/color_picker_dialog.dart +File: lib/widgets/canvas_gesture_handler.dart - - _setPickerMode - 8 - + PixelBrushLayerPatch + 10 LOC - - - - - 23 LOC in Class: <...> + <rect x="923.60229397113" y="111.0" width="311.27381978526637" height="167.85482099898638" fill="#1f6f8b" fill-opacity="0.62"/> + <rect x="923.60229397113" y="111.0" width="311.27381978526637" height="167.85482099898638" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="923.60229397113" y="111.0" width="311.27381978526637" height="167.85482099898638" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="923.60229397113" y="111.0" width="311.27381978526637" height="167.85482099898638" fill="transparent" pointer-events="all"> + <title>322 LOC File: lib/widgets/color_picker_dialog.dart + + color_picker_dialog.dart + 322 LOC + + + + + + 278 LOC in Class: _ColorPickerDialogState File: lib/widgets/color_picker_dialog.dart - <...> - 23 LOC + _ColorPickerDialogState + 278 LOC - - - - - 23 LOC in Function: showColorPicker() + <rect x="1138.9560454014597" y="223.66432250880285" width="27.933242103919305" height="19.59524924509177" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="1138.9560454014597" y="223.66432250880285" width="27.933242103919305" height="19.59524924509177" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1138.9560454014597" y="223.66432250880285" width="27.933242103919305" height="19.59524924509177" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1138.9560454014597" y="223.66432250880285" width="27.933242103919305" height="19.59524924509177" fill="transparent" pointer-events="all"> + <title>6 LOC in Method: _ColorPickerDialogState.initState() File: lib/widgets/color_picker_dialog.dart - - showColorPicker - 23 + + initState + 6 - - - - - - 21 LOC in Class: ColorPickerDialog + <rect x="1166.8892875053791" y="223.66432250880285" width="11.638850876633043" height="39.19049849018354" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="1166.8892875053791" y="223.66432250880285" width="11.638850876633043" height="39.19049849018354" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1166.8892875053791" y="223.66432250880285" width="11.638850876633043" height="39.19049849018354" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1166.8892875053791" y="223.66432250880285" width="11.638850876633043" height="39.19049849018354" fill="transparent" pointer-events="all"> + <title>5 LOC in Method: _ColorPickerDialogState.dispose() File: lib/widgets/color_picker_dialog.dart - ColorPickerDialog - 21 LOC + + dispose + 5 + + - - - - - 8 LOC in Method: ColorPickerDialog.ColorPickerDialog() + <rect x="1085.4173313689478" y="159.0" width="36.68001488393443" height="64.66432250880284" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="1085.4173313689478" y="159.0" width="36.68001488393443" height="64.66432250880284" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1085.4173313689478" y="159.0" width="36.68001488393443" height="64.66432250880284" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1085.4173313689478" y="159.0" width="36.68001488393443" height="64.66432250880284" fill="transparent" pointer-events="all"> + <title>26 LOC in Method: _ColorPickerDialogState.build() File: lib/widgets/color_picker_dialog.dart - - ColorPickerDialog - 8 + + build + 26 - - - - - 2 LOC in Method: ColorPickerDialog.createState() + <rect x="1153.1342819239037" y="159.0" width="25.39385645810846" height="64.66432250880284" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="1153.1342819239037" y="159.0" width="25.39385645810846" height="64.66432250880284" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1153.1342819239037" y="159.0" width="25.39385645810846" height="64.66432250880284" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1153.1342819239037" y="159.0" width="25.39385645810846" height="64.66432250880284" fill="transparent" pointer-events="all"> + <title>18 LOC in Method: _ColorPickerDialogState._buildActions() File: lib/widgets/color_picker_dialog.dart - - createState - 2 + + _buildActions + 18 - - - - - - - 306 LOC File: lib/widgets/shell_selection_sub_toolbar.dart + + + + + 15 LOC in Method: _ColorPickerDialogState._buildActivePicker() + +File: lib/widgets/color_picker_dialog.dart - shell_selection_sub_toolbar.dart - 306 LOC + + _buildActivePicker + 15 + + - - - - - 277 LOC in Class: <...> + <rect x="939.60229397113" y="159.0" width="118.58451836569517" height="103.85482099898638" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="939.60229397113" y="159.0" width="118.58451836569517" height="103.85482099898638" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="939.60229397113" y="159.0" width="118.58451836569517" height="103.85482099898638" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="939.60229397113" y="159.0" width="118.58451836569517" height="103.85482099898638" fill="transparent" pointer-events="all"> + <title>135 LOC in Method: _ColorPickerDialogState._buildContent() -File: lib/widgets/shell_selection_sub_toolbar.dart +File: lib/widgets/color_picker_dialog.dart - <...> - 277 LOC + + _buildContent + 135 + + - - - - - 4 LOC in Function: shouldShowSelectionSubToolbar() + <rect x="1122.0973462528823" y="159.0" width="31.036935671021453" height="64.66432250880284" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="1122.0973462528823" y="159.0" width="31.036935671021453" height="64.66432250880284" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1122.0973462528823" y="159.0" width="31.036935671021453" height="64.66432250880284" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1122.0973462528823" y="159.0" width="31.036935671021453" height="64.66432250880284" fill="transparent" pointer-events="all"> + <title>22 LOC in Method: _ColorPickerDialogState._buildPickerModeLabel() -File: lib/widgets/shell_selection_sub_toolbar.dart +File: lib/widgets/color_picker_dialog.dart - - shouldShowSelectionSubToolbar - 4 + + _buildPickerModeLabel + 22 - - - - - 20 LOC in Function: estimateSelectionSubToolbarWidth() + <rect x="1058.1868123368251" y="159.0" width="27.2305190321226" height="103.85482099898638" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="1058.1868123368251" y="159.0" width="27.2305190321226" height="103.85482099898638" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1058.1868123368251" y="159.0" width="27.2305190321226" height="103.85482099898638" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1058.1868123368251" y="159.0" width="27.2305190321226" height="103.85482099898638" fill="transparent" pointer-events="all"> + <title>31 LOC in Method: _ColorPickerDialogState._buildPickerModeToggle() -File: lib/widgets/shell_selection_sub_toolbar.dart +File: lib/widgets/color_picker_dialog.dart - - estimateSelectionSubToolbarWidth - 20 + + _buildPickerModeToggle + 31 - - - - - 191 LOC in Function: buildSelectionSubToolbar() + <rect x="1138.9560454014597" y="243.25957175389462" width="27.933242103919305" height="19.59524924509177" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="1138.9560454014597" y="243.25957175389462" width="27.933242103919305" height="19.59524924509177" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1138.9560454014597" y="243.25957175389462" width="27.933242103919305" height="19.59524924509177" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1138.9560454014597" y="243.25957175389462" width="27.933242103919305" height="19.59524924509177" fill="transparent" pointer-events="all"> + <title>6 LOC in Method: _ColorPickerDialogState._setColor() -File: lib/widgets/shell_selection_sub_toolbar.dart +File: lib/widgets/color_picker_dialog.dart - - buildSelectionSubToolbar - 191 + + _setColor + 6 - - - - - 62 LOC in Function: _showSelectionEffectsMenu() + <rect x="1120.3338839988469" y="223.66432250880285" width="18.622161402612868" height="39.19049849018354" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="1120.3338839988469" y="223.66432250880285" width="18.622161402612868" height="39.19049849018354" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1120.3338839988469" y="223.66432250880285" width="18.622161402612868" height="39.19049849018354" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1120.3338839988469" y="223.66432250880285" width="18.622161402612868" height="39.19049849018354" fill="transparent" pointer-events="all"> + <title>8 LOC in Method: _ColorPickerDialogState._setPickerMode() -File: lib/widgets/shell_selection_sub_toolbar.dart +File: lib/widgets/color_picker_dialog.dart - - _showSelectionEffectsMenu - 62 + + _setPickerMode + 8 - - - - - 16 LOC in Class: _SelectionEffectsToolbarButtonState + <rect x="1186.5281383820122" y="135.0" width="40.34797537438425" height="71.01502006765197" rx="5.00" ry="5.00" fill="#9eb89a" fill-opacity="0.45"/> + <rect x="1186.5281383820122" y="135.0" width="40.34797537438425" height="71.01502006765197" rx="5.00" ry="5.00" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1186.5281383820122" y="135.0" width="40.34797537438425" height="71.01502006765197" rx="5.00" ry="5.00" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8" stroke-dasharray="6,4"/> + <rect x="1186.5281383820122" y="135.0" width="40.34797537438425" height="71.01502006765197" rx="5.00" ry="5.00" fill="transparent" pointer-events="all"> + <title>23 LOC in Class: <...> -File: lib/widgets/shell_selection_sub_toolbar.dart +File: lib/widgets/color_picker_dialog.dart - _SelectionEffectsToolbarButtonState - 16 LOC + <...> + 23 LOC - - - - - 14 LOC in Method: _SelectionEffectsToolbarButtonState.build() + <rect x="1194.5281383820122" y="159.0" width="24.347975374384248" height="39.015020067651975" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="1194.5281383820122" y="159.0" width="24.347975374384248" height="39.015020067651975" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1194.5281383820122" y="159.0" width="24.347975374384248" height="39.015020067651975" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1194.5281383820122" y="159.0" width="24.347975374384248" height="39.015020067651975" fill="transparent" pointer-events="all"> + <title>23 LOC in Function: showColorPicker() -File: lib/widgets/shell_selection_sub_toolbar.dart +File: lib/widgets/color_picker_dialog.dart - - build - 14 + + showColorPicker + 23 - - - - - 13 LOC in Class: _SelectionEffectsToolbarButton + <rect x="1186.5281383820122" y="206.01502006765196" width="40.34797537438425" height="64.83980093133441" rx="5.00" ry="5.00" fill="#9eb89a" fill-opacity="0.78"/> + <rect x="1186.5281383820122" y="206.01502006765196" width="40.34797537438425" height="64.83980093133441" rx="5.00" ry="5.00" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1186.5281383820122" y="206.01502006765196" width="40.34797537438425" height="64.83980093133441" rx="5.00" ry="5.00" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1186.5281383820122" y="206.01502006765196" width="40.34797537438425" height="64.83980093133441" rx="5.00" ry="5.00" fill="transparent" pointer-events="all"> + <title>21 LOC in Class: ColorPickerDialog -File: lib/widgets/shell_selection_sub_toolbar.dart +File: lib/widgets/color_picker_dialog.dart - _SelectionEffectsToolbarButton - 13 LOC + ColorPickerDialog + 21 LOC - - - - - 5 LOC in Method: _SelectionEffectsToolbarButton._SelectionEffectsToolbarButton() + <rect x="1194.5281383820122" y="230.01502006765196" width="24.347975374384248" height="26.27184074506753" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="1194.5281383820122" y="230.01502006765196" width="24.347975374384248" height="26.27184074506753" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1194.5281383820122" y="230.01502006765196" width="24.347975374384248" height="26.27184074506753" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1194.5281383820122" y="230.01502006765196" width="24.347975374384248" height="26.27184074506753" fill="transparent" pointer-events="all"> + <title>8 LOC in Method: ColorPickerDialog.ColorPickerDialog() -File: lib/widgets/shell_selection_sub_toolbar.dart +File: lib/widgets/color_picker_dialog.dart - - _SelectionEffectsToolbarButton - 5 + + ColorPickerDialog + 8 - - - - - 2 LOC in Method: _SelectionEffectsToolbarButton.createState() + <rect x="1194.5281383820122" y="256.2868608127195" width="24.347975374384248" height="6.56796018626688" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="1194.5281383820122" y="256.2868608127195" width="24.347975374384248" height="6.56796018626688" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1194.5281383820122" y="256.2868608127195" width="24.347975374384248" height="6.56796018626688" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1194.5281383820122" y="256.2868608127195" width="24.347975374384248" height="6.56796018626688" fill="transparent" pointer-events="all"> + <title>2 LOC in Method: ColorPickerDialog.createState() -File: lib/widgets/shell_selection_sub_toolbar.dart +File: lib/widgets/color_picker_dialog.dart - - createState - 2 + + createState + 2 - - - - - 303 LOC File: lib/widgets/canvas_gesture_handler.dart + + + + + 309 LOC File: lib/widgets/shell_selection_sub_toolbar.dart - canvas_gesture_handler.dart - 303 LOC + shell_selection_sub_toolbar.dart + 309 LOC - - - - - 176 LOC in Class: _CanvasGestureHandlerState + <rect x="931.60229397113" y="304.8548209989864" width="267.56203734587245" height="128.99732822573537" rx="5.00" ry="5.00" fill="#9eb89a" fill-opacity="0.45"/> + <rect x="931.60229397113" y="304.8548209989864" width="267.56203734587245" height="128.99732822573537" rx="5.00" ry="5.00" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="931.60229397113" y="304.8548209989864" width="267.56203734587245" height="128.99732822573537" rx="5.00" ry="5.00" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8" stroke-dasharray="6,4"/> + <rect x="931.60229397113" y="304.8548209989864" width="267.56203734587245" height="128.99732822573537" rx="5.00" ry="5.00" fill="transparent" pointer-events="all"> + <title>280 LOC in Class: <...> -File: lib/widgets/canvas_gesture_handler.dart +File: lib/widgets/shell_selection_sub_toolbar.dart - _CanvasGestureHandlerState - 176 LOC + <...> + 280 LOC - - - - - 6 LOC in Method: _CanvasGestureHandlerState.dispose() + <rect x="1178.2867508338209" y="398.78312739428395" width="12.87758048318156" height="27.069021830437777" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="1178.2867508338209" y="398.78312739428395" width="12.87758048318156" height="27.069021830437777" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1178.2867508338209" y="398.78312739428395" width="12.87758048318156" height="27.069021830437777" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1178.2867508338209" y="398.78312739428395" width="12.87758048318156" height="27.069021830437777" fill="transparent" pointer-events="all"> + <title>4 LOC in Function: shouldShowSelectionSubToolbar() -File: lib/widgets/canvas_gesture_handler.dart +File: lib/widgets/shell_selection_sub_toolbar.dart - - dispose - 6 + + shouldShowSelectionSubToolbar + 4 - - - - - 136 LOC in Method: _CanvasGestureHandlerState.build() + <rect x="1113.898848417913" y="398.78312739428395" width="64.38790241590783" height="27.069021830437777" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="1113.898848417913" y="398.78312739428395" width="64.38790241590783" height="27.069021830437777" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1113.898848417913" y="398.78312739428395" width="64.38790241590783" height="27.069021830437777" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1113.898848417913" y="398.78312739428395" width="64.38790241590783" height="27.069021830437777" fill="transparent" pointer-events="all"> + <title>20 LOC in Function: estimateSelectionSubToolbarWidth() -File: lib/widgets/canvas_gesture_handler.dart +File: lib/widgets/shell_selection_sub_toolbar.dart - - build - 136 + + estimateSelectionSubToolbarWidth + 20 - - - - - - - 107 LOC in Class: <...> - -File: lib/widgets/canvas_gesture_handler.dart - - <...> - 107 LOC - - - - - 4 LOC in Function: pixelBrushActionType() + <rect x="939.60229397113" y="328.8548209989864" width="174.29655444678306" height="96.99732822573537" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="939.60229397113" y="328.8548209989864" width="174.29655444678306" height="96.99732822573537" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="939.60229397113" y="328.8548209989864" width="174.29655444678306" height="96.99732822573537" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="939.60229397113" y="328.8548209989864" width="174.29655444678306" height="96.99732822573537" fill="transparent" pointer-events="all"> + <title>194 LOC in Function: buildSelectionSubToolbar() -File: lib/widgets/canvas_gesture_handler.dart +File: lib/widgets/shell_selection_sub_toolbar.dart - - pixelBrushActionType - 4 + + buildSelectionSubToolbar + 194 - - - - - 4 LOC in Function: isPixelBrushPersistedActionType() + <rect x="1113.898848417913" y="328.8548209989864" width="77.26548289908939" height="69.9283063952976" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="1113.898848417913" y="328.8548209989864" width="77.26548289908939" height="69.9283063952976" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1113.898848417913" y="328.8548209989864" width="77.26548289908939" height="69.9283063952976" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1113.898848417913" y="328.8548209989864" width="77.26548289908939" height="69.9283063952976" fill="transparent" pointer-events="all"> + <title>62 LOC in Function: _showSelectionEffectsMenu() -File: lib/widgets/canvas_gesture_handler.dart +File: lib/widgets/shell_selection_sub_toolbar.dart - - isPixelBrushPersistedActionType - 4 + + _showSelectionEffectsMenu + 62 + - - - - - 42 LOC in Function: applyPixelBrushPatchToLayer() + <rect x="1199.1643313170025" y="304.8548209989864" width="27.711782439393915" height="71.17093971075055" rx="5.00" ry="5.00" fill="#9eb89a" fill-opacity="0.78"/> + <rect x="1199.1643313170025" y="304.8548209989864" width="27.711782439393915" height="71.17093971075055" rx="5.00" ry="5.00" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1199.1643313170025" y="304.8548209989864" width="27.711782439393915" height="71.17093971075055" rx="5.00" ry="5.00" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1199.1643313170025" y="304.8548209989864" width="27.711782439393915" height="71.17093971075055" rx="5.00" ry="5.00" fill="transparent" pointer-events="all"> + <title>16 LOC in Class: _SelectionEffectsToolbarButtonState -File: lib/widgets/canvas_gesture_handler.dart +File: lib/widgets/shell_selection_sub_toolbar.dart - - applyPixelBrushPatchToLayer - 42 - - + _SelectionEffectsToolbarButtonState + 16 LOC - - - - - 34 LOC in Function: compactPixelBrushLayerHistory() + <rect x="1207.1643313170025" y="328.8548209989864" width="11.711782439393915" height="39.170939710750545" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="1207.1643313170025" y="328.8548209989864" width="11.711782439393915" height="39.170939710750545" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1207.1643313170025" y="328.8548209989864" width="11.711782439393915" height="39.170939710750545" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1207.1643313170025" y="328.8548209989864" width="11.711782439393915" height="39.170939710750545" fill="transparent" pointer-events="all"> + <title>14 LOC in Method: _SelectionEffectsToolbarButtonState.build() -File: lib/widgets/canvas_gesture_handler.dart +File: lib/widgets/shell_selection_sub_toolbar.dart - - compactPixelBrushLayerHistory - 34 + + build + 14 + - - - - - 23 LOC in Function: copyPixelBrushRect() + <rect x="1199.1643313170025" y="376.0257607097369" width="27.711782439393915" height="57.82638851498483" rx="5.00" ry="5.00" fill="#9eb89a" fill-opacity="0.78"/> + <rect x="1199.1643313170025" y="376.0257607097369" width="27.711782439393915" height="57.82638851498483" rx="5.00" ry="5.00" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1199.1643313170025" y="376.0257607097369" width="27.711782439393915" height="57.82638851498483" rx="5.00" ry="5.00" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1199.1643313170025" y="376.0257607097369" width="27.711782439393915" height="57.82638851498483" rx="5.00" ry="5.00" fill="transparent" pointer-events="all"> + <title>13 LOC in Class: _SelectionEffectsToolbarButton -File: lib/widgets/canvas_gesture_handler.dart +File: lib/widgets/shell_selection_sub_toolbar.dart - - copyPixelBrushRect - 23 - - - + _SelectionEffectsToolbarButton + 13 LOC - - - - - 10 LOC in Class: CanvasGestureHandler + <rect x="1207.1643313170025" y="400.0257607097369" width="11.711782439393915" height="18.447420367846306" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="1207.1643313170025" y="400.0257607097369" width="11.711782439393915" height="18.447420367846306" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1207.1643313170025" y="400.0257607097369" width="11.711782439393915" height="18.447420367846306" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1207.1643313170025" y="400.0257607097369" width="11.711782439393915" height="18.447420367846306" fill="transparent" pointer-events="all"> + <title>5 LOC in Method: _SelectionEffectsToolbarButton._SelectionEffectsToolbarButton() -File: lib/widgets/canvas_gesture_handler.dart +File: lib/widgets/shell_selection_sub_toolbar.dart - CanvasGestureHandler - 10 LOC + + _SelectionEffectsToolbarButton + 5 + - - - - - 10 LOC in Class: PixelBrushLayerPatch + <rect x="1207.1643313170025" y="418.4731810775832" width="11.711782439393915" height="7.378968147138522" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="1207.1643313170025" y="418.4731810775832" width="11.711782439393915" height="7.378968147138522" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1207.1643313170025" y="418.4731810775832" width="11.711782439393915" height="7.378968147138522" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1207.1643313170025" y="418.4731810775832" width="11.711782439393915" height="7.378968147138522" fill="transparent" pointer-events="all"> + <title>2 LOC in Method: _SelectionEffectsToolbarButton.createState() -File: lib/widgets/canvas_gesture_handler.dart +File: lib/widgets/shell_selection_sub_toolbar.dart - PixelBrushLayerPatch - 10 LOC + + createState + 2 + + - - - - + + + + 270 LOC File: lib/widgets/app_snackbar.dart - app_snackbar.dart - 270 LOC + app_snackbar.dart + 270 LOC - - - - + + + + 181 LOC in Class: <...> File: lib/widgets/app_snackbar.dart - <...> - 181 LOC + <...> + 181 LOC - - - - + + + + 4 LOC in Function: _fileNameFromPath() File: lib/widgets/app_snackbar.dart - - _fileNameFromPath - 4 + + _fileNameFromPath + 4 - - - - + + + + 3 LOC in Function: _resolveSnackBarOverlayState() File: lib/widgets/app_snackbar.dart - - _resolveSnackBarOverlayState - 3 + + _resolveSnackBarOverlayState + 3 - - - - + + + + 3 LOC in Function: _resolveGlobalSnackBarContext() File: lib/widgets/app_snackbar.dart - - _resolveGlobalSnackBarContext - 3 + + _resolveGlobalSnackBarContext + 3 - - - - + + + + 27 LOC in Function: _buildSnackBarTextContent() File: lib/widgets/app_snackbar.dart - - _buildSnackBarTextContent - 27 + + _buildSnackBarTextContent + 27 - - - - + + + + 17 LOC in Function: showSnackBarIfMounted() File: lib/widgets/app_snackbar.dart - - showSnackBarIfMounted - 17 + + showSnackBarIfMounted + 17 - - - - + + + + 17 LOC in Function: showGlobalSnackBarMessage() File: lib/widgets/app_snackbar.dart - - showGlobalSnackBarMessage - 17 + + showGlobalSnackBarMessage + 17 - - - - + + + + 16 LOC in Function: showGlobalProgressSnackBarMessage() File: lib/widgets/app_snackbar.dart - - showGlobalProgressSnackBarMessage - 16 + + showGlobalProgressSnackBarMessage + 16 - - - - + + + + 4 LOC in Function: dismissGlobalSnackBarMessage() File: lib/widgets/app_snackbar.dart - - dismissGlobalSnackBarMessage - 4 + + dismissGlobalSnackBarMessage + 4 - - - - + + + + 21 LOC in Function: runWithGlobalProgressSnackBar() File: lib/widgets/app_snackbar.dart - - runWithGlobalProgressSnackBar - 21 + + runWithGlobalProgressSnackBar + 21 - - - - + + + + 20 LOC in Function: runWithGlobalFileSaveSnackBar() File: lib/widgets/app_snackbar.dart - - runWithGlobalFileSaveSnackBar - 20 + + runWithGlobalFileSaveSnackBar + 20 - - - - + + + + 11 LOC in Function: showGlobalSavingFileSnackBar() File: lib/widgets/app_snackbar.dart - - showGlobalSavingFileSnackBar - 11 + + showGlobalSavingFileSnackBar + 11 - - - - + + + + 14 LOC in Function: showGlobalSavedFileSnackBar() File: lib/widgets/app_snackbar.dart - - showGlobalSavedFileSnackBar - 14 + + showGlobalSavedFileSnackBar + 14 - - - - + + + + 13 LOC in Method: .showSnackBarMessage() File: lib/widgets/app_snackbar.dart - - showSnackBarMessage - 13 + + showSnackBarMessage + 13 - - - - + + + + 11 LOC in Method: .showSavedFileSnackBar() File: lib/widgets/app_snackbar.dart - - showSavedFileSnackBar - 11 + + showSavedFileSnackBar + 11 - - - - + + + + 89 LOC in Class: AppNotificationOverlay File: lib/widgets/app_snackbar.dart - AppNotificationOverlay - 89 LOC + AppNotificationOverlay + 89 LOC - - - - + + + + 1 LOC in Method: AppNotificationOverlay.AppNotificationOverlay._() File: lib/widgets/app_snackbar.dart - - AppNotificationOverlay._ - 1 + + AppNotificationOverlay._ + 1 - - - - + + + + 69 LOC in Method: AppNotificationOverlay.show() File: lib/widgets/app_snackbar.dart - - show - 69 + + show + 69 - - - - + + + + 4 LOC in Method: AppNotificationOverlay.dismiss() File: lib/widgets/app_snackbar.dart - - dismiss - 4 + + dismiss + 4 - - - - + + + + 6 LOC in Method: AppNotificationOverlay._dismiss() File: lib/widgets/app_snackbar.dart - - _dismiss - 6 + + _dismiss + 6 - - - - + + + + 253 LOC File: lib/widgets/fill_widget.dart - fill_widget.dart - 253 LOC + fill_widget.dart + 253 LOC - - - - + + + + 235 LOC in Class: _FillWidgetState File: lib/widgets/fill_widget.dart - _FillWidgetState - 235 LOC + _FillWidgetState + 235 LOC - - - - + + + + 69 LOC in Method: _FillWidgetState.build() File: lib/widgets/fill_widget.dart - - build - 69 + + build + 69 - - - - + + + + 100 LOC in Method: _FillWidgetState._builFillKnob() File: lib/widgets/fill_widget.dart - - _builFillKnob - 100 + + _builFillKnob + 100 - - - - + + + + 25 LOC in Method: _FillWidgetState._handleOffsetForStop() File: lib/widgets/fill_widget.dart - - _handleOffsetForStop - 25 + + _handleOffsetForStop + 25 - - - - + + + + 38 LOC in Method: _FillWidgetState._moveInnerHandleByDelta() File: lib/widgets/fill_widget.dart - - _moveInnerHandleByDelta - 38 + + _moveInnerHandleByDelta + 38 - - - - + + + + 18 LOC in Class: FillWidget File: lib/widgets/fill_widget.dart - FillWidget - 18 LOC + FillWidget + 18 LOC - - - - + + + + 222 LOC File: lib/widgets/magnifying_eye_dropper.dart - magnifying_eye_dropper.dart - 222 LOC + magnifying_eye_dropper.dart + 222 LOC - - - - + + + + 133 LOC in Class: MagnifyingEyeDropperState File: lib/widgets/magnifying_eye_dropper.dart - MagnifyingEyeDropperState - 133 LOC + MagnifyingEyeDropperState + 133 LOC - - - - + + + + 5 LOC in Method: MagnifyingEyeDropperState.initState() File: lib/widgets/magnifying_eye_dropper.dart - - initState - 5 + + initState + 5 - - - - + + + + 7 LOC in Method: MagnifyingEyeDropperState.didUpdateWidget() File: lib/widgets/magnifying_eye_dropper.dart - - didUpdateWidget - 7 + + didUpdateWidget + 7 - - - - + + + + 80 LOC in Method: MagnifyingEyeDropperState.build() File: lib/widgets/magnifying_eye_dropper.dart - - build - 80 + + build + 80 - - - - + + + + 22 LOC in Method: MagnifyingEyeDropperState._updateColor() File: lib/widgets/magnifying_eye_dropper.dart - - _updateColor - 22 + + _updateColor + 22 - - - - + + + + 46 LOC in Class: MagnifyingGlassPainter File: lib/widgets/magnifying_eye_dropper.dart - MagnifyingGlassPainter - 46 LOC + MagnifyingGlassPainter + 46 LOC - - - - + + + + 5 LOC in Method: MagnifyingGlassPainter.MagnifyingGlassPainter() File: lib/widgets/magnifying_eye_dropper.dart - - MagnifyingGlassPainter - 5 + + MagnifyingGlassPainter + 5 - - - - + + + + 32 LOC in Method: MagnifyingGlassPainter.paint() File: lib/widgets/magnifying_eye_dropper.dart - - paint - 32 + + paint + 32 - - - - + + + + 2 LOC in Method: MagnifyingGlassPainter.shouldRepaint() File: lib/widgets/magnifying_eye_dropper.dart - - shouldRepaint - 2 + + shouldRepaint + 2 - - - - + + + + 30 LOC in Class: MagnifyingEyeDropper File: lib/widgets/magnifying_eye_dropper.dart - MagnifyingEyeDropper - 30 LOC + MagnifyingEyeDropper + 30 LOC - - - - + + + + 15 LOC in Method: MagnifyingEyeDropper.MagnifyingEyeDropper() File: lib/widgets/magnifying_eye_dropper.dart - - MagnifyingEyeDropper - 15 + + MagnifyingEyeDropper + 15 - - - - + + + + 2 LOC in Method: MagnifyingEyeDropper.createState() File: lib/widgets/magnifying_eye_dropper.dart - - createState - 2 + + createState + 2 - - - - + + + + 13 LOC in Class: ImagePainter File: lib/widgets/magnifying_eye_dropper.dart - ImagePainter - 13 LOC + ImagePainter + 13 LOC - - - - + + + + 217 LOC File: lib/widgets/color_selector.dart - color_selector.dart - 217 LOC + color_selector.dart + 217 LOC - - - - + + + + 118 LOC in Class: _ColorSelectorState File: lib/widgets/color_selector.dart - _ColorSelectorState - 118 LOC + _ColorSelectorState + 118 LOC - - - - + + + + 5 LOC in Method: _ColorSelectorState.initState() File: lib/widgets/color_selector.dart - - initState - 5 + + initState + 5 - - - - + + + + 5 LOC in Method: _ColorSelectorState.didUpdateWidget() File: lib/widgets/color_selector.dart - - didUpdateWidget - 5 + + didUpdateWidget + 5 - - - - + + + + 92 LOC in Method: _ColorSelectorState.build() File: lib/widgets/color_selector.dart - - build - 92 + + build + 92 - - - - + + + + 8 LOC in Method: _ColorSelectorState.fromInputColorToHueBrightnessAndAlpha() File: lib/widgets/color_selector.dart - - fromInputColorToHueBrightnessAndAlpha - 8 + + fromInputColorToHueBrightnessAndAlpha + 8 - - - - + + + + 26 LOC in Class: HueGradientPainter File: lib/widgets/color_selector.dart - HueGradientPainter - 26 LOC + HueGradientPainter + 26 LOC - - - - + + + + 19 LOC in Method: HueGradientPainter.paint() File: lib/widgets/color_selector.dart - - paint - 19 + + paint + 19 - - - - + + + + 4 LOC in Method: HueGradientPainter.shouldRepaint() File: lib/widgets/color_selector.dart - - shouldRepaint - 4 + + shouldRepaint + 4 - - - - + + + + 25 LOC in Class: AlphaGradientPainter File: lib/widgets/color_selector.dart - AlphaGradientPainter - 25 LOC + AlphaGradientPainter + 25 LOC - - - - + + + + 2 LOC in Method: AlphaGradientPainter.AlphaGradientPainter() File: lib/widgets/color_selector.dart - - AlphaGradientPainter - 2 + + AlphaGradientPainter + 2 - - - - + + + + 12 LOC in Method: AlphaGradientPainter.paint() File: lib/widgets/color_selector.dart - - paint - 12 + + paint + 12 - - - - + + + + 4 LOC in Method: AlphaGradientPainter.shouldRepaint() File: lib/widgets/color_selector.dart - - shouldRepaint - 4 + + shouldRepaint + 4 - - - - + + + + 24 LOC in Class: BrightnessGradientPainter File: lib/widgets/color_selector.dart - BrightnessGradientPainter - 24 LOC + BrightnessGradientPainter + 24 LOC - - - - + + + + 2 LOC in Method: BrightnessGradientPainter.BrightnessGradientPainter() File: lib/widgets/color_selector.dart - - BrightnessGradientPainter - 2 + + BrightnessGradientPainter + 2 - - - - + + + + 13 LOC in Method: BrightnessGradientPainter.paint() File: lib/widgets/color_selector.dart - - paint - 13 + + paint + 13 - - - - + + + + 4 LOC in Method: BrightnessGradientPainter.shouldRepaint() File: lib/widgets/color_selector.dart - - shouldRepaint - 4 + + shouldRepaint + 4 - - - - + + + + 15 LOC in Class: ColorSelector File: lib/widgets/color_selector.dart - ColorSelector - 15 LOC + ColorSelector + 15 LOC - - - - + + + + 6 LOC in Method: ColorSelector.ColorSelector() File: lib/widgets/color_selector.dart - - ColorSelector - 6 + + ColorSelector + 6 - - - - + + + + 2 LOC in Method: ColorSelector.createState() File: lib/widgets/color_selector.dart - - createState - 2 + + createState + 2 - - - - + + + + 9 LOC in Class: <...> File: lib/widgets/color_selector.dart - <...> - 9 LOC + <...> + 9 LOC - - - - + + + + 9 LOC in Function: hsvToColor() File: lib/widgets/color_selector.dart - - hsvToColor - 9 + + hsvToColor + 9 - - - - + + + + 213 LOC File: lib/widgets/shortcuts_help.dart - shortcuts_help.dart - 213 LOC + shortcuts_help.dart + 213 LOC - - - - + + + + 213 LOC in Class: ShortcutsHelpDialog File: lib/widgets/shortcuts_help.dart - ShortcutsHelpDialog - 213 LOC + ShortcutsHelpDialog + 213 LOC - - - - + + + + 1 LOC in Method: ShortcutsHelpDialog.ShortcutsHelpDialog() File: lib/widgets/shortcuts_help.dart - - ShortcutsHelpDialog - 1 + + ShortcutsHelpDialog + 1 - - - - + + + + 108 LOC in Method: ShortcutsHelpDialog.build() File: lib/widgets/shortcuts_help.dart - - build - 108 + + build + 108 - - - - + + + + 28 LOC in Method: ShortcutsHelpDialog._buildShortcut() File: lib/widgets/shortcuts_help.dart - - _buildShortcut - 28 + + _buildShortcut + 28 - - - - + + + + 10 LOC in Method: ShortcutsHelpDialog._buildShortcutCategory() File: lib/widgets/shortcuts_help.dart - - _buildShortcutCategory - 10 + + _buildShortcutCategory + 10 - - - - + + + + 20 LOC in Method: ShortcutsHelpDialog._buildShortcutGroup() File: lib/widgets/shortcuts_help.dart - - _buildShortcutGroup - 20 + + _buildShortcutGroup + 20 - - - - + + + + 15 LOC in Method: ShortcutsHelpDialog._buildShortcutKeys() File: lib/widgets/shortcuts_help.dart - - _buildShortcutKeys - 15 + + _buildShortcutKeys + 15 - - - - + + + + 4 LOC in Method: ShortcutsHelpDialog._getMoveDuplicateModifier() File: lib/widgets/shortcuts_help.dart - - _getMoveDuplicateModifier - 4 + + _getMoveDuplicateModifier + 4 - - - - + + + + 4 LOC in Method: ShortcutsHelpDialog._getPlatformModifier() File: lib/widgets/shortcuts_help.dart - - _getPlatformModifier - 4 + + _getPlatformModifier + 4 - - - - + + + + 4 LOC in Method: ShortcutsHelpDialog._getSelectionSubtractModifier() File: lib/widgets/shortcuts_help.dart - - _getSelectionSubtractModifier - 4 + + _getSelectionSubtractModifier + 4 - - - - + + + + 6 LOC in Method: ShortcutsHelpDialog._shortcutEntry() File: lib/widgets/shortcuts_help.dart - - _shortcutEntry - 6 + + _shortcutEntry + 6 - - - - + + + + 6 LOC in Method: ShortcutsHelpDialog._shortcutGroupWidth() File: lib/widgets/shortcuts_help.dart - - _shortcutGroupWidth - 6 + + _shortcutGroupWidth + 6 - - - - + + + + 4 LOC in Method: ShortcutsHelpDialog._shouldStackShortcutRow() File: lib/widgets/shortcuts_help.dart - - _shouldStackShortcutRow - 4 + + _shouldStackShortcutRow + 4 - - - - + + + + 207 LOC File: lib/widgets/color_preview.dart - color_preview.dart - 207 LOC + color_preview.dart + 207 LOC - - - - + + + + 114 LOC in Class: <...> File: lib/widgets/color_preview.dart - <...> - 114 LOC + <...> + 114 LOC - - - - + + + + 33 LOC in Function: colorPreviewWithTransparentPaper() File: lib/widgets/color_preview.dart - - colorPreviewWithTransparentPaper - 33 + + colorPreviewWithTransparentPaper + 33 - - - - + + + + 35 LOC in Function: _buildColorPreviewLabel() File: lib/widgets/color_preview.dart - - _buildColorPreviewLabel - 35 + + _buildColorPreviewLabel + 35 - - - - + + + + 32 LOC in Function: _parseColorPreviewTextLayout() File: lib/widgets/color_preview.dart - - _parseColorPreviewTextLayout - 32 + + _parseColorPreviewTextLayout + 32 - - - - + + + + 5 LOC in Function: _formatColorPreviewRgbPairs() File: lib/widgets/color_preview.dart - - _formatColorPreviewRgbPairs - 5 + + _formatColorPreviewRgbPairs + 5 - - - - + + + + 3 LOC in Function: _isColorPreviewHexPair() File: lib/widgets/color_preview.dart - - _isColorPreviewHexPair - 3 + + _isColorPreviewHexPair + 3 - - - - + + + + 3 LOC in Function: _isColorPreviewHexRgb() File: lib/widgets/color_preview.dart - - _isColorPreviewHexRgb - 3 + + _isColorPreviewHexRgb + 3 - - - - + + + + 3 LOC in Function: _isColorPreviewHexValue() File: lib/widgets/color_preview.dart - - _isColorPreviewHexValue - 3 + + _isColorPreviewHexValue + 3 - - - - + + + + 77 LOC in Class: ColorPreview File: lib/widgets/color_preview.dart - ColorPreview - 77 LOC + ColorPreview + 77 LOC - - - - + + + + 9 LOC in Method: ColorPreview.ColorPreview() File: lib/widgets/color_preview.dart - - ColorPreview - 9 + + ColorPreview + 9 - - - - + + + + 45 LOC in Method: ColorPreview.build() File: lib/widgets/color_preview.dart - - build - 45 + + build + 45 - - - - + + + + 8 LOC in Class: _ColorPreviewIconScaleFactors File: lib/widgets/color_preview.dart - _ColorPreviewIconScaleFactors - 8 LOC + _ColorPreviewIconScaleFactors + 8 LOC - - - - + + + + 8 LOC in Class: _ColorPreviewTextLayout File: lib/widgets/color_preview.dart - _ColorPreviewTextLayout - 8 LOC + _ColorPreviewTextLayout + 8 LOC - - - - + + + + 4 LOC in Method: _ColorPreviewTextLayout._ColorPreviewTextLayout() File: lib/widgets/color_preview.dart - - _ColorPreviewTextLayout - 4 + + _ColorPreviewTextLayout + 4 - - - - + + + + 184 LOC File: lib/widgets/top_colors.dart - top_colors.dart - 184 LOC + top_colors.dart + 184 LOC - - - - + + + + 141 LOC in Class: _TopColorsState File: lib/widgets/top_colors.dart - _TopColorsState - 141 LOC + _TopColorsState + 141 LOC - - - - + + + + 5 LOC in Method: _TopColorsState.initState() File: lib/widgets/top_colors.dart - - initState - 5 + + initState + 5 - - - - + + + + 5 LOC in Method: _TopColorsState.dispose() File: lib/widgets/top_colors.dart - - dispose - 5 + + dispose + 5 - - - - + + + + 13 LOC in Method: _TopColorsState.didUpdateWidget() File: lib/widgets/top_colors.dart - - didUpdateWidget - 13 + + didUpdateWidget + 13 - - - - + + + + 53 LOC in Method: _TopColorsState.build() File: lib/widgets/top_colors.dart - - build - 53 + + build + 53 - - - - + + + + 44 LOC in Method: _TopColorsState.sortColorByHueAndPopularity() File: lib/widgets/top_colors.dart - - sortColorByHueAndPopularity - 44 + + sortColorByHueAndPopularity + 44 - - - - + + + + 17 LOC in Method: _TopColorsState._scheduleAutoRefreshIfNeeded() File: lib/widgets/top_colors.dart - - _scheduleAutoRefreshIfNeeded - 17 + + _scheduleAutoRefreshIfNeeded + 17 - - - - + + + + 43 LOC in Class: TopColors File: lib/widgets/top_colors.dart - TopColors - 43 LOC + TopColors + 43 LOC - - - - + + + + 16 LOC in Method: TopColors.TopColors() File: lib/widgets/top_colors.dart - - TopColors - 16 + + TopColors + 16 - - - - + + + + 2 LOC in Method: TopColors.createState() File: lib/widgets/top_colors.dart - - createState - 2 + + createState + 2 - - - - + + + + 171 LOC File: lib/widgets/tool_attribute_widget.dart - tool_attribute_widget.dart - 171 LOC + tool_attribute_widget.dart + 171 LOC - - - - + + + + 147 LOC in Class: ToolAttributeWidget File: lib/widgets/tool_attribute_widget.dart - ToolAttributeWidget - 147 LOC + ToolAttributeWidget + 147 LOC - - - - + + + + 10 LOC in Method: ToolAttributeWidget.ToolAttributeWidget() File: lib/widgets/tool_attribute_widget.dart - - ToolAttributeWidget - 10 + + ToolAttributeWidget + 10 - - - - + + + + 40 LOC in Method: ToolAttributeWidget.build() File: lib/widgets/tool_attribute_widget.dart - - build - 40 + + build + 40 - - - - + + + + 25 LOC in Method: ToolAttributeWidget._buildAttributeRow() File: lib/widgets/tool_attribute_widget.dart - - _buildAttributeRow - 25 + + _buildAttributeRow + 25 - - - - + + + + 8 LOC in Method: ToolAttributeWidget._buildCompactEnabledToggle() File: lib/widgets/tool_attribute_widget.dart - - _buildCompactEnabledToggle - 8 + + _buildCompactEnabledToggle + 8 - - - - + + + + 8 LOC in Method: ToolAttributeWidget._buildEnabledTitleToggle() File: lib/widgets/tool_attribute_widget.dart - - _buildEnabledTitleToggle - 8 + + _buildEnabledTitleToggle + 8 - - - - + + + + 38 LOC in Method: ToolAttributeWidget._buildExpandedContent() File: lib/widgets/tool_attribute_widget.dart - - _buildExpandedContent - 38 + + _buildExpandedContent + 38 - - - - + + + + 1 LOC in Method: ToolAttributeWidget._showsEnabledToggle() File: lib/widgets/tool_attribute_widget.dart - - _showsEnabledToggle - 1 + + _showsEnabledToggle + 1 - - - - + + + + 24 LOC in Class: <...> File: lib/widgets/tool_attribute_widget.dart - <...> - 24 LOC + <...> + 24 LOC - - - - + + + + 21 LOC in Function: toolAttributeWidgetPreview() File: lib/widgets/tool_attribute_widget.dart - - toolAttributeWidgetPreview - 21 + + toolAttributeWidgetPreview + 21 - - - - + + + + 3 LOC in Function: _noopEnabledChanged() File: lib/widgets/tool_attribute_widget.dart - - _noopEnabledChanged - 3 + + _noopEnabledChanged + 3 - - - - + + + + 169 LOC File: lib/widgets/text_editor_dialog.dart - text_editor_dialog.dart - 169 LOC + text_editor_dialog.dart + 169 LOC - - - - + + + + 147 LOC in Class: _TextEditorDialogState File: lib/widgets/text_editor_dialog.dart - _TextEditorDialogState - 147 LOC + _TextEditorDialogState + 147 LOC - - - - + + + + 6 LOC in Method: _TextEditorDialogState.initState() File: lib/widgets/text_editor_dialog.dart - - initState - 6 + + initState + 6 - - - - + + + + 5 LOC in Method: _TextEditorDialogState.dispose() File: lib/widgets/text_editor_dialog.dart - - dispose - 5 + + dispose + 5 - - - - + + + + 118 LOC in Method: _TextEditorDialogState.build() File: lib/widgets/text_editor_dialog.dart - - build - 118 + + build + 118 - - - - + + + + 14 LOC in Method: _TextEditorDialogState._submitAndClose() File: lib/widgets/text_editor_dialog.dart - - _submitAndClose - 14 + + _submitAndClose + 14 - - - - + + + + 22 LOC in Class: TextEditorDialog File: lib/widgets/text_editor_dialog.dart - TextEditorDialog - 22 LOC + TextEditorDialog + 22 LOC - - - - + + + + 143 LOC File: lib/widgets/marching_ants_path.dart - marching_ants_path.dart - 143 LOC + marching_ants_path.dart + 143 LOC - - - - + + + + 85 LOC in Class: MarchingAntsPainter File: lib/widgets/marching_ants_path.dart - MarchingAntsPainter - 85 LOC + MarchingAntsPainter + 85 LOC - - - - + + + + 11 LOC in Method: MarchingAntsPainter.MarchingAntsPainter() File: lib/widgets/marching_ants_path.dart - - MarchingAntsPainter - 11 + + MarchingAntsPainter + 11 - - - - + + + + 59 LOC in Method: MarchingAntsPainter.paint() File: lib/widgets/marching_ants_path.dart - - paint - 59 + + paint + 59 - - - - + + + + 4 LOC in Method: MarchingAntsPainter.shouldRepaint() File: lib/widgets/marching_ants_path.dart - - shouldRepaint - 4 + + shouldRepaint + 4 - - - - + + + + 33 LOC in Class: _AnimatedMarchingAntsPathState File: lib/widgets/marching_ants_path.dart - _AnimatedMarchingAntsPathState - 33 LOC + _AnimatedMarchingAntsPathState + 33 LOC - - - - + + + + 8 LOC in Method: _AnimatedMarchingAntsPathState.initState() File: lib/widgets/marching_ants_path.dart - - initState - 8 + + initState + 8 - - - - + + + + 5 LOC in Method: _AnimatedMarchingAntsPathState.dispose() File: lib/widgets/marching_ants_path.dart - - dispose - 5 + + dispose + 5 - - - - + + + + 16 LOC in Method: _AnimatedMarchingAntsPathState.build() File: lib/widgets/marching_ants_path.dart - - build - 16 + + build + 16 - - - - + + + + 25 LOC in Class: AnimatedMarchingAntsPath File: lib/widgets/marching_ants_path.dart - AnimatedMarchingAntsPath - 25 LOC + AnimatedMarchingAntsPath + 25 LOC - - - - + + + + 10 LOC in Method: AnimatedMarchingAntsPath.AnimatedMarchingAntsPath() File: lib/widgets/marching_ants_path.dart - - AnimatedMarchingAntsPath - 10 + + AnimatedMarchingAntsPath + 10 - - - - + + + + 2 LOC in Method: AnimatedMarchingAntsPath.createState() File: lib/widgets/marching_ants_path.dart - - createState - 2 + + createState + 2 - - - - + + + + 136 LOC File: lib/widgets/app_text_field.dart - app_text_field.dart - 136 LOC + app_text_field.dart + 136 LOC - - - - + + + + 106 LOC in Class: _AppTextFieldState File: lib/widgets/app_text_field.dart - _AppTextFieldState - 106 LOC + _AppTextFieldState + 106 LOC - - - - + + + + 13 LOC in Method: _AppTextFieldState.initState() File: lib/widgets/app_text_field.dart - - initState - 13 + + initState + 13 - - - - + + + + 9 LOC in Method: _AppTextFieldState.dispose() File: lib/widgets/app_text_field.dart - - dispose - 9 + + dispose + 9 - - - - + + + + 19 LOC in Method: _AppTextFieldState.didUpdateWidget() File: lib/widgets/app_text_field.dart - - didUpdateWidget - 19 + + didUpdateWidget + 19 - - - - + + + + 50 LOC in Method: _AppTextFieldState.build() File: lib/widgets/app_text_field.dart - - build - 50 + + build + 50 - - - - + + + + 9 LOC in Method: _AppTextFieldState._onTextChanged() File: lib/widgets/app_text_field.dart - - _onTextChanged - 9 + + _onTextChanged + 9 - - - - + + + + 30 LOC in Class: AppTextField File: lib/widgets/app_text_field.dart - AppTextField - 30 LOC + AppTextField + 30 LOC - - - - + + + + 13 LOC in Method: AppTextField.AppTextField() File: lib/widgets/app_text_field.dart - - AppTextField - 13 + + AppTextField + 13 - - - - + + + + 2 LOC in Method: AppTextField.createState() File: lib/widgets/app_text_field.dart - - createState - 2 + + createState + 2 - - - - + + + + 136 LOC File: lib/widgets/app_slider.dart - app_slider.dart - 136 LOC + app_slider.dart + 136 LOC - - - - + + + + 90 LOC in Class: AppSlider File: lib/widgets/app_slider.dart - AppSlider - 90 LOC + AppSlider + 90 LOC - - - - + + + + 13 LOC in Method: AppSlider.AppSlider() File: lib/widgets/app_slider.dart - - AppSlider - 13 + + AppSlider + 13 - - - - + + + + 44 LOC in Method: AppSlider.build() File: lib/widgets/app_slider.dart - - build - 44 + + build + 44 - - - - + + + + 15 LOC in Method: AppSlider._handleDrag() File: lib/widgets/app_slider.dart - - _handleDrag - 15 + + _handleDrag + 15 - - - - + + + + 46 LOC in Class: _SliderPainter File: lib/widgets/app_slider.dart - _SliderPainter - 46 LOC + _SliderPainter + 46 LOC - - - - + + + + 5 LOC in Method: _SliderPainter._SliderPainter() File: lib/widgets/app_slider.dart - - _SliderPainter - 5 + + _SliderPainter + 5 - - - - + + + + 27 LOC in Method: _SliderPainter.paint() File: lib/widgets/app_slider.dart - - paint - 27 + + paint + 27 - - - - + + + + 6 LOC in Method: _SliderPainter.shouldRepaint() File: lib/widgets/app_slider.dart - - shouldRepaint - 6 + + shouldRepaint + 6 - - - - + + + + 127 LOC File: lib/widgets/draw_rect.dart - draw_rect.dart - 127 LOC + draw_rect.dart + 127 LOC - - - - + + + + 101 LOC in Class: _DashedRectanglePainter File: lib/widgets/draw_rect.dart - _DashedRectanglePainter - 101 LOC + _DashedRectanglePainter + 101 LOC - - - - + + + + 4 LOC in Method: _DashedRectanglePainter._DashedRectanglePainter() File: lib/widgets/draw_rect.dart - - _DashedRectanglePainter - 4 + + _DashedRectanglePainter + 4 - - - - + + + + 47 LOC in Method: _DashedRectanglePainter.paint() File: lib/widgets/draw_rect.dart - - paint - 47 + + paint + 47 - - - - + + + + 39 LOC in Method: _DashedRectanglePainter._drawDashedLine() File: lib/widgets/draw_rect.dart - - _drawDashedLine - 39 + + _drawDashedLine + 39 - - - - + + + + 2 LOC in Method: _DashedRectanglePainter.shouldRepaint() File: lib/widgets/draw_rect.dart - - shouldRepaint - 2 + + shouldRepaint + 2 - - - - + + + + 26 LOC in Class: DashedRectangle File: lib/widgets/draw_rect.dart - DashedRectangle - 26 LOC + DashedRectangle + 26 LOC - - - - + + + + 118 LOC File: lib/widgets/app_popup_menu.dart - app_popup_menu.dart - 118 LOC + app_popup_menu.dart + 118 LOC - - - - + + + + 60 LOC in Class: <...> File: lib/widgets/app_popup_menu.dart - <...> - 60 LOC + <...> + 60 LOC - - - - + + + + 60 LOC in Function: showAppMenu() File: lib/widgets/app_popup_menu.dart - - showAppMenu - 60 + + showAppMenu + 60 - - - - + + + + 47 LOC in Class: AppPopupMenuButton File: lib/widgets/app_popup_menu.dart - AppPopupMenuButton - 47 LOC + AppPopupMenuButton + 47 LOC - - - - + + + + 7 LOC in Method: AppPopupMenuButton.AppPopupMenuButton() File: lib/widgets/app_popup_menu.dart - - AppPopupMenuButton - 7 + + AppPopupMenuButton + 7 - - - - + + + + 33 LOC in Method: AppPopupMenuButton.build() File: lib/widgets/app_popup_menu.dart - - build - 33 + + build + 33 - - - - + + + + 11 LOC in Class: AppPopupMenuItem File: lib/widgets/app_popup_menu.dart - AppPopupMenuItem - 11 LOC + AppPopupMenuItem + 11 LOC - - - - + + + + 5 LOC in Method: AppPopupMenuItem.AppPopupMenuItem() File: lib/widgets/app_popup_menu.dart - - AppPopupMenuItem - 5 + + AppPopupMenuItem + 5 - - - - + + + + 116 LOC File: lib/widgets/container_slider.dart - container_slider.dart - 116 LOC + container_slider.dart + 116 LOC - - - - + + + + 67 LOC in Class: _ContainerSliderState File: lib/widgets/container_slider.dart - _ContainerSliderState - 67 LOC + _ContainerSliderState + 67 LOC - - - - + + + + 5 LOC in Method: _ContainerSliderState.initState() File: lib/widgets/container_slider.dart - - initState - 5 + + initState + 5 - - - - + + + + 51 LOC in Method: _ContainerSliderState.build() File: lib/widgets/container_slider.dart - - build - 51 + + build + 51 - - - - + + + + 7 LOC in Method: _ContainerSliderState._adjustValue() File: lib/widgets/container_slider.dart - - _adjustValue - 7 + + _adjustValue + 7 - - - - + + + + 41 LOC in Class: ContainerSlider File: lib/widgets/container_slider.dart - ContainerSlider - 41 LOC + ContainerSlider + 41 LOC - - - - + + + + 20 LOC in Method: ContainerSlider.ContainerSlider() File: lib/widgets/container_slider.dart - - ContainerSlider - 20 + + ContainerSlider + 20 - - - - + + + + 2 LOC in Method: ContainerSlider.createState() File: lib/widgets/container_slider.dart - - createState - 2 + + createState + 2 - - - - + + + + 8 LOC in Class: _HorizontalDragRecognizer File: lib/widgets/container_slider.dart - _HorizontalDragRecognizer - 8 LOC + _HorizontalDragRecognizer + 8 LOC - - - - + + + + 111 LOC File: lib/widgets/effect_intensity_controls.dart - effect_intensity_controls.dart - 111 LOC + effect_intensity_controls.dart + 111 LOC - - - - + + + + 80 LOC in Class: _EffectIntensityControlsState File: lib/widgets/effect_intensity_controls.dart - _EffectIntensityControlsState - 80 LOC + _EffectIntensityControlsState + 80 LOC - - - - + + + + 6 LOC in Method: _EffectIntensityControlsState.initState() File: lib/widgets/effect_intensity_controls.dart - - initState - 6 + + initState + 6 - - - - + + + + 70 LOC in Method: _EffectIntensityControlsState.build() File: lib/widgets/effect_intensity_controls.dart - - build - 70 + + build + 70 - - - - + + + + 31 LOC in Class: EffectIntensityControls File: lib/widgets/effect_intensity_controls.dart - EffectIntensityControls - 31 LOC + EffectIntensityControls + 31 LOC - - - - + + + + 9 LOC in Method: EffectIntensityControls.EffectIntensityControls() File: lib/widgets/effect_intensity_controls.dart - - EffectIntensityControls - 9 + + EffectIntensityControls + 9 - - - - + + + + 2 LOC in Method: EffectIntensityControls.createState() File: lib/widgets/effect_intensity_controls.dart - - createState - 2 + + createState + 2 - - - - + + + + 105 LOC File: lib/widgets/app_dropdown.dart - app_dropdown.dart - 105 LOC + app_dropdown.dart + 105 LOC - - - - + + + + 96 LOC in Class: AppDropdown File: lib/widgets/app_dropdown.dart - AppDropdown - 96 LOC + AppDropdown + 96 LOC - - - - + + + + 6 LOC in Method: AppDropdown.AppDropdown() File: lib/widgets/app_dropdown.dart - - AppDropdown - 6 + + AppDropdown + 6 - - - - + + + + 84 LOC in Method: AppDropdown.build() File: lib/widgets/app_dropdown.dart - - build - 84 + + build + 84 - - - - + + + + 9 LOC in Class: AppDropdownItem File: lib/widgets/app_dropdown.dart - AppDropdownItem - 9 LOC + AppDropdownItem + 9 LOC - - - - + + + + 103 LOC File: lib/widgets/transparent_background.dart - transparent_background.dart - 103 LOC + transparent_background.dart + 103 LOC - - - - + + + + 70 LOC in Class: <...> File: lib/widgets/transparent_background.dart - <...> - 70 LOC + <...> + 70 LOC - - - - + + + + 32 LOC in Function: transparentPaperContainer() File: lib/widgets/transparent_background.dart - - transparentPaperContainer - 32 + + transparentPaperContainer + 32 - - - - + + + + 38 LOC in Function: drawTransparentBackgroundOffsetAndSize() File: lib/widgets/transparent_background.dart - - drawTransparentBackgroundOffsetAndSize - 38 + + drawTransparentBackgroundOffsetAndSize + 38 - - - - + + + + 19 LOC in Class: _TransparentBackgroundPainter File: lib/widgets/transparent_background.dart - _TransparentBackgroundPainter - 19 LOC - - - - - - 2 LOC in Method: _TransparentBackgroundPainter._TransparentBackgroundPainter() - -File: lib/widgets/transparent_background.dart - - - _TransparentBackgroundPainter - 2 - - - - - - - - 10 LOC in Method: _TransparentBackgroundPainter.paint() - -File: lib/widgets/transparent_background.dart - - - paint - 10 - - - - - - - - 2 LOC in Method: _TransparentBackgroundPainter.shouldRepaint() - -File: lib/widgets/transparent_background.dart - - - shouldRepaint - 2 - - + _TransparentBackgroundPainter + 19 LOC - - - - + + + + 14 LOC in Class: TransparentPaper File: lib/widgets/transparent_background.dart - TransparentPaper - 14 LOC - - - - - - 2 LOC in Method: TransparentPaper.TransparentPaper() - -File: lib/widgets/transparent_background.dart - - - TransparentPaper - 2 - - - - - - - - 7 LOC in Method: TransparentPaper.build() - -File: lib/widgets/transparent_background.dart - - - build - 7 - - + TransparentPaper + 14 LOC - - - - + + + + 103 LOC File: lib/widgets/app_bottom_sheet.dart - app_bottom_sheet.dart - 103 LOC + app_bottom_sheet.dart + 103 LOC - - - - + + + + 64 LOC in Class: AppBottomSheetContent File: lib/widgets/app_bottom_sheet.dart - AppBottomSheetContent - 64 LOC + AppBottomSheetContent + 64 LOC - - - - + + + + 8 LOC in Method: AppBottomSheetContent.AppBottomSheetContent() File: lib/widgets/app_bottom_sheet.dart - - AppBottomSheetContent - 8 + + AppBottomSheetContent + 8 - - - - + + + + 41 LOC in Method: AppBottomSheetContent.build() File: lib/widgets/app_bottom_sheet.dart - - build - 41 + + build + 41 - - - - + + + + 39 LOC in Class: <...> File: lib/widgets/app_bottom_sheet.dart - <...> - 39 LOC + <...> + 39 LOC - - - - + + + + 39 LOC in Function: showAppBottomSheet() File: lib/widgets/app_bottom_sheet.dart - - showAppBottomSheet - 39 + + showAppBottomSheet + 39 - - - - + + + + 102 LOC File: lib/widgets/halftone_size_picker.dart - halftone_size_picker.dart - 102 LOC + halftone_size_picker.dart + 102 LOC - - - - + + + + 64 LOC in Class: <...> File: lib/widgets/halftone_size_picker.dart - <...> - 64 LOC + <...> + 64 LOC - - - - + + + + 64 LOC in Function: showHalftoneSizePicker() File: lib/widgets/halftone_size_picker.dart - - showHalftoneSizePicker - 64 + + showHalftoneSizePicker + 64 - - - - + + + + 22 LOC in Class: HalftoneSizePickerState File: lib/widgets/halftone_size_picker.dart - HalftoneSizePickerState - 22 LOC + HalftoneSizePickerState + 22 LOC - - - - + + + + 4 LOC in Method: HalftoneSizePickerState.clampValue() File: lib/widgets/halftone_size_picker.dart - - clampValue - 4 + + clampValue + 4 - - - - + + + + 10 LOC in Method: HalftoneSizePickerState.buildPickerWidget() File: lib/widgets/halftone_size_picker.dart - - buildPickerWidget - 10 + + buildPickerWidget + 10 - - - - + + + + 5 LOC in Method: HalftoneSizePickerState.formatValue() File: lib/widgets/halftone_size_picker.dart - - formatValue - 5 + + formatValue + 5 - - - - + + + + 16 LOC in Class: HalftoneSizePicker File: lib/widgets/halftone_size_picker.dart - HalftoneSizePicker - 16 LOC + HalftoneSizePicker + 16 LOC - - - - + + + + 11 LOC in Method: HalftoneSizePicker.HalftoneSizePicker() File: lib/widgets/halftone_size_picker.dart - - HalftoneSizePicker - 11 + + HalftoneSizePicker + 11 - - - - + + + + 2 LOC in Method: HalftoneSizePicker.createState() File: lib/widgets/halftone_size_picker.dart - - createState - 2 + + createState + 2 - - - - + + + + 99 LOC File: lib/widgets/text_attributes_widget.dart - text_attributes_widget.dart - 99 LOC + text_attributes_widget.dart + 99 LOC - - - - + + + + 99 LOC in Class: TextAttributesWidget File: lib/widgets/text_attributes_widget.dart - TextAttributesWidget - 99 LOC + TextAttributesWidget + 99 LOC - - - - + + + + 4 LOC in Method: TextAttributesWidget.TextAttributesWidget() File: lib/widgets/text_attributes_widget.dart - - TextAttributesWidget - 4 + + TextAttributesWidget + 4 - - - - + + + + 91 LOC in Method: TextAttributesWidget.build() File: lib/widgets/text_attributes_widget.dart - - build - 91 + + build + 91 - - - - + + + + 98 LOC File: lib/widgets/app_list_tile.dart - app_list_tile.dart - 98 LOC + app_list_tile.dart + 98 LOC - - - - + + + + 62 LOC in Class: AppListTile File: lib/widgets/app_list_tile.dart - AppListTile - 62 LOC + AppListTile + 62 LOC - - - - + + + + 8 LOC in Method: AppListTile.AppListTile() File: lib/widgets/app_list_tile.dart - - AppListTile - 8 + + AppListTile + 8 - - - - + + + + 46 LOC in Method: AppListTile.build() File: lib/widgets/app_list_tile.dart - - build - 46 + + build + 46 - - - - + + + + 20 LOC in Class: AppSwitchListTile File: lib/widgets/app_list_tile.dart - AppSwitchListTile - 20 LOC - - - - - - 6 LOC in Method: AppSwitchListTile.AppSwitchListTile() - -File: lib/widgets/app_list_tile.dart - - - AppSwitchListTile - 6 - - - - - - - - 8 LOC in Method: AppSwitchListTile.build() - -File: lib/widgets/app_list_tile.dart - - - build - 8 - - + AppSwitchListTile + 20 LOC - - - - + + + + 16 LOC in Class: AppToggleSwitch File: lib/widgets/app_list_tile.dart - AppToggleSwitch - 16 LOC + AppToggleSwitch + 16 LOC - - - - + + + + 98 LOC File: lib/widgets/base_picker.dart - base_picker.dart - 98 LOC + base_picker.dart + 98 LOC - - - - + + + + 51 LOC in Class: BasePickerState File: lib/widgets/base_picker.dart - BasePickerState - 51 LOC + BasePickerState + 51 LOC - - - - + + + + 5 LOC in Method: BasePickerState.initState() File: lib/widgets/base_picker.dart - - initState - 5 + + initState + 5 - - - - + + + + 9 LOC in Method: BasePickerState.didUpdateWidget() File: lib/widgets/base_picker.dart - - didUpdateWidget - 9 + + didUpdateWidget + 9 - - - - + + + + 17 LOC in Method: BasePickerState.build() File: lib/widgets/base_picker.dart - - build - 17 + + build + 17 - - - - + + + + 2 LOC in Method: BasePickerState.buildPickerWidget() File: lib/widgets/base_picker.dart - - buildPickerWidget - 2 + + buildPickerWidget + 2 - - - - + + + + 2 LOC in Method: BasePickerState.clampValue() File: lib/widgets/base_picker.dart - - clampValue - 2 + + clampValue + 2 - - - - + + + + 2 LOC in Method: BasePickerState.currentValue() File: lib/widgets/base_picker.dart - - currentValue - 2 + + currentValue + 2 - - - - + + + + 2 LOC in Method: BasePickerState.formatValue() File: lib/widgets/base_picker.dart - - formatValue - 2 + + formatValue + 2 - - - - + + + + 8 LOC in Method: BasePickerState.updateValue() File: lib/widgets/base_picker.dart - - updateValue - 8 + + updateValue + 8 - - - - + + + + 28 LOC in Class: BasePicker File: lib/widgets/base_picker.dart - BasePicker - 28 LOC + BasePicker + 28 LOC - - - - + + + + 10 LOC in Method: BasePicker.BasePicker() File: lib/widgets/base_picker.dart - - BasePicker - 10 + + BasePicker + 10 - - - - + + + + 3 LOC in Method: BasePicker.createState() File: lib/widgets/base_picker.dart - - createState - 3 + + createState + 3 - - - - + + + + 19 LOC in Class: <...> File: lib/widgets/base_picker.dart - <...> - 19 LOC + <...> + 19 LOC - - - - + + + + 19 LOC in Function: showPickerDialog() File: lib/widgets/base_picker.dart - - showPickerDialog - 19 + + showPickerDialog + 19 - - - - + + + + 90 LOC File: lib/widgets/canvas_panel_painter.dart - canvas_panel_painter.dart - 90 LOC + canvas_panel_painter.dart + 90 LOC - - - - + + + + 90 LOC in Class: CanvasPanelPainter File: lib/widgets/canvas_panel_painter.dart - CanvasPanelPainter - 90 LOC + CanvasPanelPainter + 90 LOC - - - - + + + + 7 LOC in Method: CanvasPanelPainter.CanvasPanelPainter() File: lib/widgets/canvas_panel_painter.dart - - CanvasPanelPainter - 7 + + CanvasPanelPainter + 7 - - - - + + + + 22 LOC in Method: CanvasPanelPainter.paint() File: lib/widgets/canvas_panel_painter.dart - - paint - 22 + + paint + 22 - - - - + + + + 6 LOC in Method: CanvasPanelPainter.shouldRepaint() File: lib/widgets/canvas_panel_painter.dart - - shouldRepaint - 6 + + shouldRepaint + 6 - - - - + + + + 33 LOC in Method: CanvasPanelPainter._resolveTransparentBackgroundShader() File: lib/widgets/canvas_panel_painter.dart - - _resolveTransparentBackgroundShader - 33 + + _resolveTransparentBackgroundShader + 33 - - - - + + + + 86 LOC File: lib/widgets/brush_style_picker.dart - brush_style_picker.dart - 86 LOC + brush_style_picker.dart + 86 LOC - - - - + + + + 59 LOC in Class: <...> File: lib/widgets/brush_style_picker.dart - <...> - 59 LOC + <...> + 59 LOC - - - - + + + + 10 LOC in Function: _brushStyleLabel() File: lib/widgets/brush_style_picker.dart - - _brushStyleLabel - 10 + + _brushStyleLabel + 10 - - - - + + + + 27 LOC in Function: brushStyleDropDown() File: lib/widgets/brush_style_picker.dart - - brushStyleDropDown - 27 + + brushStyleDropDown + 27 - - - - + + + + 22 LOC in Function: showBrushStylePicker() File: lib/widgets/brush_style_picker.dart - - showBrushStylePicker - 22 + + showBrushStylePicker + 22 - - - - + + + + 15 LOC in Class: _BrushStylePickerState File: lib/widgets/brush_style_picker.dart - _BrushStylePickerState - 15 LOC - - - - - - 4 LOC in Method: _BrushStylePickerState.clampValue() - -File: lib/widgets/brush_style_picker.dart - - - clampValue - 4 - - - - - - - - 4 LOC in Method: _BrushStylePickerState.buildPickerWidget() - -File: lib/widgets/brush_style_picker.dart - - - buildPickerWidget - 4 - - - - - - - - 4 LOC in Method: _BrushStylePickerState.formatValue() - -File: lib/widgets/brush_style_picker.dart - - - formatValue - 4 - - + _BrushStylePickerState + 15 LOC - - - - + + + + 12 LOC in Class: BrushStylePicker File: lib/widgets/brush_style_picker.dart - BrushStylePicker - 12 LOC + BrushStylePicker + 12 LOC - - - - + + + + 85 LOC File: lib/widgets/app_dialog.dart - app_dialog.dart - 85 LOC + app_dialog.dart + 85 LOC - - - - + + + + 73 LOC in Class: AppDialog File: lib/widgets/app_dialog.dart - AppDialog - 73 LOC + AppDialog + 73 LOC - - - - + + + + 8 LOC in Method: AppDialog.AppDialog() File: lib/widgets/app_dialog.dart - - AppDialog - 8 + + AppDialog + 8 - - - - + + + + 55 LOC in Method: AppDialog.build() File: lib/widgets/app_dialog.dart - - build - 55 + + build + 55 - - - - + + + + 12 LOC in Class: <...> File: lib/widgets/app_dialog.dart - <...> - 12 LOC + <...> + 12 LOC - - - - + + + + 12 LOC in Function: showAppDialog() File: lib/widgets/app_dialog.dart - - showAppDialog - 12 + + showAppDialog + 12 - - - - + + + + 71 LOC File: lib/widgets/text_editor.dart - text_editor.dart - 71 LOC + text_editor.dart + 71 LOC - - - - + + + + 65 LOC in Class: _TextEditorState File: lib/widgets/text_editor.dart - _TextEditorState - 65 LOC + _TextEditorState + 65 LOC - - - - + + + + 10 LOC in Method: _TextEditorState.initState() File: lib/widgets/text_editor.dart - - initState - 10 + + initState + 10 - - - - + + + + 5 LOC in Method: _TextEditorState.build() File: lib/widgets/text_editor.dart - - build - 5 + + build + 5 - - - - + + + + 8 LOC in Method: _TextEditorState._deleteText() File: lib/widgets/text_editor.dart - - _deleteText - 8 + + _deleteText + 8 - - - - + + + + 38 LOC in Method: _TextEditorState._showEditTextDialog() File: lib/widgets/text_editor.dart - - _showEditTextDialog - 38 + + _showEditTextDialog + 38 - - - - + + + + 6 LOC in Class: TextEditor File: lib/widgets/text_editor.dart - TextEditor - 6 LOC + TextEditor + 6 LOC - - - - + + + + 70 LOC File: lib/widgets/app_progress.dart - app_progress.dart - 70 LOC + app_progress.dart + 70 LOC - - - - + + + + 32 LOC in Class: _AppProgressIndicatorState File: lib/widgets/app_progress.dart - _AppProgressIndicatorState - 32 LOC + _AppProgressIndicatorState + 32 LOC - - - - + + + + 8 LOC in Method: _AppProgressIndicatorState.initState() File: lib/widgets/app_progress.dart - - initState - 8 + + initState + 8 - - - - + + + + 5 LOC in Method: _AppProgressIndicatorState.dispose() File: lib/widgets/app_progress.dart - - dispose - 5 + + dispose + 5 - - - - + + + + 16 LOC in Method: _AppProgressIndicatorState.build() File: lib/widgets/app_progress.dart - - build - 16 + + build + 16 - - - - + + + + 32 LOC in Class: _SpinnerPainter File: lib/widgets/app_progress.dart - _SpinnerPainter - 32 LOC + _SpinnerPainter + 32 LOC - - - - + + + + 5 LOC in Method: _SpinnerPainter._SpinnerPainter() File: lib/widgets/app_progress.dart - - _SpinnerPainter - 5 + + _SpinnerPainter + 5 - - - - + + + + 16 LOC in Method: _SpinnerPainter.paint() File: lib/widgets/app_progress.dart - - paint - 16 + + paint + 16 - - - - + + + + 4 LOC in Method: _SpinnerPainter.shouldRepaint() File: lib/widgets/app_progress.dart - - shouldRepaint - 4 + + shouldRepaint + 4 - - - - + + + + 6 LOC in Class: AppProgressIndicator File: lib/widgets/app_progress.dart - AppProgressIndicator - 6 LOC + AppProgressIndicator + 6 LOC - - - - + + + + 70 LOC File: lib/widgets/app_tooltip.dart - app_tooltip.dart - 70 LOC + app_tooltip.dart + 70 LOC - - - - + + + + 58 LOC in Class: _AppTooltipState File: lib/widgets/app_tooltip.dart - _AppTooltipState - 58 LOC + _AppTooltipState + 58 LOC - - - - + + + + 5 LOC in Method: _AppTooltipState.dispose() File: lib/widgets/app_tooltip.dart - - dispose - 5 + + dispose + 5 - - - - + + + + 8 LOC in Method: _AppTooltipState.build() File: lib/widgets/app_tooltip.dart - - build - 8 + + build + 8 - - - - + + + + 4 LOC in Method: _AppTooltipState._hide() File: lib/widgets/app_tooltip.dart - - _hide - 4 + + _hide + 4 - - - - + + + + 38 LOC in Method: _AppTooltipState._show() File: lib/widgets/app_tooltip.dart - - _show - 38 + + _show + 38 - - - - + + + + 12 LOC in Class: AppTooltip File: lib/widgets/app_tooltip.dart - AppTooltip - 12 LOC + AppTooltip + 12 LOC - - - - + + + + 65 LOC File: lib/widgets/nine_grid_selector.dart - nine_grid_selector.dart - 65 LOC + nine_grid_selector.dart + 65 LOC - - - - + + + + 65 LOC in Class: NineGridSelector File: lib/widgets/nine_grid_selector.dart - NineGridSelector - 65 LOC + NineGridSelector + 65 LOC - - - - + + + + 9 LOC in Method: NineGridSelector.NineGridSelector() File: lib/widgets/nine_grid_selector.dart - - NineGridSelector - 9 + + NineGridSelector + 9 - - - - + + + + 34 LOC in Method: NineGridSelector.build() File: lib/widgets/nine_grid_selector.dart - - build - 34 + + build + 34 - - - - + + + + 15 LOC in Method: NineGridSelector.getDirectionIcon() File: lib/widgets/nine_grid_selector.dart - - getDirectionIcon - 15 + + getDirectionIcon + 15 - - - - + + + + 63 LOC File: lib/widgets/brush_size_picker.dart - brush_size_picker.dart - 63 LOC + brush_size_picker.dart + 63 LOC - - - - + + + + 26 LOC in Class: <...> File: lib/widgets/brush_size_picker.dart - <...> - 26 LOC + <...> + 26 LOC - - - - + + + + 26 LOC in Function: showBrushSizePicker() File: lib/widgets/brush_size_picker.dart - - showBrushSizePicker - 26 + + showBrushSizePicker + 26 - - - - + + + + 23 LOC in Class: _BrushSizePickerState File: lib/widgets/brush_size_picker.dart - _BrushSizePickerState - 23 LOC + _BrushSizePickerState + 23 LOC - - - - + + + + 6 LOC in Method: _BrushSizePickerState.clampValue() File: lib/widgets/brush_size_picker.dart - - clampValue - 6 + + clampValue + 6 - - - - + + + + 10 LOC in Method: _BrushSizePickerState.buildPickerWidget() File: lib/widgets/brush_size_picker.dart - - buildPickerWidget - 10 + + buildPickerWidget + 10 - - - - + + + + 4 LOC in Method: _BrushSizePickerState.formatValue() File: lib/widgets/brush_size_picker.dart - - formatValue - 4 + + formatValue + 4 - - - - + + + + 14 LOC in Class: BrushSizePicker File: lib/widgets/brush_size_picker.dart - BrushSizePicker - 14 LOC + BrushSizePicker + 14 LOC - - - - + + + + 57 LOC File: lib/widgets/brush_intensity_picker.dart - brush_intensity_picker.dart - 57 LOC + brush_intensity_picker.dart + 57 LOC - - - - + + + + 21 LOC in Class: _BrushIntensityPickerState File: lib/widgets/brush_intensity_picker.dart - _BrushIntensityPickerState - 21 LOC + _BrushIntensityPickerState + 21 LOC - - - - + + + + 20 LOC in Class: <...> File: lib/widgets/brush_intensity_picker.dart - <...> - 20 LOC + <...> + 20 LOC - - - - + + + + 16 LOC in Class: BrushIntensityPicker File: lib/widgets/brush_intensity_picker.dart - BrushIntensityPicker - 16 LOC + BrushIntensityPicker + 16 LOC - - - - + + + + 56 LOC File: lib/widgets/text_style_toggle_buttons.dart - text_style_toggle_buttons.dart - 56 LOC + text_style_toggle_buttons.dart + 56 LOC - - - - + + + + 56 LOC in Class: TextStyleToggleButtons File: lib/widgets/text_style_toggle_buttons.dart - TextStyleToggleButtons - 56 LOC + TextStyleToggleButtons + 56 LOC - - - - + + + + 5 LOC in Method: TextStyleToggleButtons.TextStyleToggleButtons() File: lib/widgets/text_style_toggle_buttons.dart - - TextStyleToggleButtons - 5 + + TextStyleToggleButtons + 5 - - - - + + + + 32 LOC in Method: TextStyleToggleButtons.build() File: lib/widgets/text_style_toggle_buttons.dart - - build - 32 + + build + 32 - - - - + + + + 14 LOC in Method: TextStyleToggleButtons._copyWith() File: lib/widgets/text_style_toggle_buttons.dart - - _copyWith - 14 + + _copyWith + 14 - - - - + + + + 54 LOC File: lib/widgets/effect_preview_bottom_sheet.dart - effect_preview_bottom_sheet.dart - 54 LOC + effect_preview_bottom_sheet.dart + 54 LOC - - - - + + + + 54 LOC in Class: <...> File: lib/widgets/effect_preview_bottom_sheet.dart - <...> - 54 LOC + <...> + 54 LOC - - - - + + + + 29 LOC in Function: showEffectPreviewBottomSheet() File: lib/widgets/effect_preview_bottom_sheet.dart - - showEffectPreviewBottomSheet - 29 + + showEffectPreviewBottomSheet + 29 - - - - + + + + 25 LOC in Function: startEffectPreviewWithBottomSheet() File: lib/widgets/effect_preview_bottom_sheet.dart - - startEffectPreviewWithBottomSheet - 25 + + startEffectPreviewWithBottomSheet + 25 - - - - + + + + 53 LOC File: lib/widgets/tolerance_picker.dart - tolerance_picker.dart - 53 LOC + tolerance_picker.dart + 53 LOC - - - - + + + + 21 LOC in Class: TolerancePickerState File: lib/widgets/tolerance_picker.dart - TolerancePickerState - 21 LOC + TolerancePickerState + 21 LOC - - - - + + + + 4 LOC in Method: TolerancePickerState.clampValue() File: lib/widgets/tolerance_picker.dart - - clampValue - 4 + + clampValue + 4 - - - - + + + + 10 LOC in Method: TolerancePickerState.buildPickerWidget() File: lib/widgets/tolerance_picker.dart - - buildPickerWidget - 10 + + buildPickerWidget + 10 - - - - + + + + 4 LOC in Method: TolerancePickerState.formatValue() File: lib/widgets/tolerance_picker.dart - - formatValue - 4 + + formatValue + 4 - - - - + + + + 20 LOC in Class: <...> File: lib/widgets/tolerance_picker.dart - <...> - 20 LOC + <...> + 20 LOC - - - - + + + + 20 LOC in Function: showTolerancePicker() File: lib/widgets/tolerance_picker.dart - - showTolerancePicker - 20 + + showTolerancePicker + 20 - - - - + + + + 12 LOC in Class: TolerancePicker File: lib/widgets/tolerance_picker.dart - TolerancePicker - 12 LOC + TolerancePicker + 12 LOC - - - - + + + + 7 LOC in Method: TolerancePicker.TolerancePicker() File: lib/widgets/tolerance_picker.dart - - TolerancePicker - 7 + + TolerancePicker + 7 - - - - + + + + 2 LOC in Method: TolerancePicker.createState() File: lib/widgets/tolerance_picker.dart - - createState - 2 + + createState + 2 - - - - + + + + 49 LOC File: lib/widgets/truncated_text.dart - truncated_text.dart - 49 LOC + truncated_text.dart + 49 LOC - - - - + + + + 49 LOC in Class: TruncatedTextWidget File: lib/widgets/truncated_text.dart - TruncatedTextWidget - 49 LOC + TruncatedTextWidget + 49 LOC - - - - + + + + 9 LOC in Method: TruncatedTextWidget.TruncatedTextWidget() File: lib/widgets/truncated_text.dart - - TruncatedTextWidget - 9 + + TruncatedTextWidget + 9 - - - - + + + + 11 LOC in Method: TruncatedTextWidget.build() File: lib/widgets/truncated_text.dart - - build - 11 + + build + 11 - - - - + + + + 17 LOC in Method: TruncatedTextWidget._truncateText() File: lib/widgets/truncated_text.dart - - _truncateText - 17 + + _truncateText + 17 - - - - + + + + 46 LOC File: lib/widgets/side_panel_header.dart - side_panel_header.dart - 46 LOC + side_panel_header.dart + 46 LOC - - - - + + + + 46 LOC in Class: SidePanelHeader File: lib/widgets/side_panel_header.dart - SidePanelHeader - 46 LOC + SidePanelHeader + 46 LOC - - - - + + + + 10 LOC in Method: SidePanelHeader.SidePanelHeader() File: lib/widgets/side_panel_header.dart - - SidePanelHeader - 10 + + SidePanelHeader + 10 - - - - + + + + 31 LOC in Method: SidePanelHeader.build() File: lib/widgets/side_panel_header.dart - - build - 31 + + build + 31 - - - - + + + + 45 LOC File: lib/widgets/app_switch.dart - app_switch.dart - 45 LOC + app_switch.dart + 45 LOC - - - - + + + + 45 LOC in Class: AppSwitch File: lib/widgets/app_switch.dart - AppSwitch - 45 LOC + AppSwitch + 45 LOC - - - - + + + + 5 LOC in Method: AppSwitch.AppSwitch() File: lib/widgets/app_switch.dart - - AppSwitch - 5 + + AppSwitch + 5 - - - - + + + + 35 LOC in Method: AppSwitch.build() File: lib/widgets/app_switch.dart - - build - 35 + + build + 35 - - - - + + + + 44 LOC File: lib/widgets/app_text.dart - app_text.dart - 44 LOC + app_text.dart + 44 LOC - - - - + + + + 44 LOC in Class: AppText File: lib/widgets/app_text.dart - AppText - 44 LOC + AppText + 44 LOC - - - - + + + + 10 LOC in Method: AppText.AppText() File: lib/widgets/app_text.dart - - AppText - 10 + + AppText + 10 - - - - + + + + 15 LOC in Method: AppText.build() File: lib/widgets/app_text.dart - - build - 15 + + build + 15 - - - - + + + + 42 LOC File: lib/widgets/text_alignment_dropdown.dart - text_alignment_dropdown.dart - 42 LOC + text_alignment_dropdown.dart + 42 LOC - - - - + + + + 42 LOC in Class: TextAlignmentDropdown File: lib/widgets/text_alignment_dropdown.dart - TextAlignmentDropdown - 42 LOC + TextAlignmentDropdown + 42 LOC - - - - + + + + 6 LOC in Method: TextAlignmentDropdown.TextAlignmentDropdown() File: lib/widgets/text_alignment_dropdown.dart - - TextAlignmentDropdown - 6 + + TextAlignmentDropdown + 6 - - - - + + + + 30 LOC in Method: TextAlignmentDropdown.build() File: lib/widgets/text_alignment_dropdown.dart - - build - 30 + + build + 30 - - - - + + + + 41 LOC File: lib/widgets/app_icon.dart - app_icon.dart - 41 LOC + app_icon.dart + 41 LOC - - - - + + + + 41 LOC in Class: AppSvgIcon File: lib/widgets/app_icon.dart - AppSvgIcon - 41 LOC + AppSvgIcon + 41 LOC - - - - + + + + 8 LOC in Method: AppSvgIcon.AppSvgIcon() File: lib/widgets/app_icon.dart - - AppSvgIcon - 8 + + AppSvgIcon + 8 - - - - + + + + 12 LOC in Method: AppSvgIcon.build() File: lib/widgets/app_icon.dart - - build - 12 + + build + 12 - - - - + + + + 11 LOC in Method: AppSvgIcon.defaultColor() File: lib/widgets/app_icon.dart - - defaultColor - 11 + + defaultColor + 11 - - - - + + + + 34 LOC File: lib/widgets/app_overlay_surface.dart - app_overlay_surface.dart - 34 LOC + app_overlay_surface.dart + 34 LOC - - - - + + + + 34 LOC in Class: AppOverlaySurface File: lib/widgets/app_overlay_surface.dart - AppOverlaySurface - 34 LOC + AppOverlaySurface + 34 LOC - - - - + + + + 8 LOC in Method: AppOverlaySurface.AppOverlaySurface() File: lib/widgets/app_overlay_surface.dart - - AppOverlaySurface - 8 + + AppOverlaySurface + 8 - - - - + + + + 18 LOC in Method: AppOverlaySurface.build() File: lib/widgets/app_overlay_surface.dart - - build - 18 + + build + 18 - - - - + + + + 32 LOC File: lib/widgets/confirm_discard_dialog.dart - confirm_discard_dialog.dart - 32 LOC + confirm_discard_dialog.dart + 32 LOC - - - - + + + + 32 LOC in Class: <...> File: lib/widgets/confirm_discard_dialog.dart - <...> - 32 LOC + <...> + 32 LOC - - - - + + + + 32 LOC in Function: confirmDiscardCurrentWork() File: lib/widgets/confirm_discard_dialog.dart - - confirmDiscardCurrentWork - 32 + + confirmDiscardCurrentWork + 32 - - - - + + + + 30 LOC File: lib/widgets/canvas_panel.dart - canvas_panel.dart - 30 LOC + canvas_panel.dart + 30 LOC - - - - + + + + 30 LOC in Class: CanvasPanel File: lib/widgets/canvas_panel.dart - CanvasPanel - 30 LOC + CanvasPanel + 30 LOC - - - - + + + + 29 LOC File: lib/widgets/app_overlay_menu_item.dart - app_overlay_menu_item.dart - 29 LOC + app_overlay_menu_item.dart + 29 LOC - - - - + + + + 29 LOC in Class: AppOverlayMenuItem File: lib/widgets/app_overlay_menu_item.dart - AppOverlayMenuItem - 29 LOC + AppOverlayMenuItem + 29 LOC - - - - + + + + 5 LOC in Method: AppOverlayMenuItem.AppOverlayMenuItem() File: lib/widgets/app_overlay_menu_item.dart - - AppOverlayMenuItem - 5 + + AppOverlayMenuItem + 5 - - - - + + + + 19 LOC in Method: AppOverlayMenuItem.build() File: lib/widgets/app_overlay_menu_item.dart - - build - 19 + + build + 19 - - - - + + + + 27 LOC File: lib/widgets/image_painter.dart - image_painter.dart - 27 LOC + image_painter.dart + 27 LOC - - - - + + + + 27 LOC in Class: ImagePainter File: lib/widgets/image_painter.dart - ImagePainter - 27 LOC + ImagePainter + 27 LOC - - - - + + + + 2 LOC in Method: ImagePainter.ImagePainter() File: lib/widgets/image_painter.dart - - ImagePainter - 2 + + ImagePainter + 2 - - - - + + + + 18 LOC in Method: ImagePainter.paint() File: lib/widgets/image_painter.dart - - paint - 18 + + paint + 18 - - - - + + + + 2 LOC in Method: ImagePainter.shouldRepaint() File: lib/widgets/image_painter.dart - - shouldRepaint - 2 + + shouldRepaint + 2 - - - - + + + + 24 LOC File: lib/widgets/toolbar_icon_button.dart - toolbar_icon_button.dart - 24 LOC + toolbar_icon_button.dart + 24 LOC - - - - + + + + 24 LOC in Class: <...> File: lib/widgets/toolbar_icon_button.dart - <...> - 24 LOC + <...> + 24 LOC - - - - + + + + 24 LOC in Function: buildToolbarIconButton() File: lib/widgets/toolbar_icon_button.dart - - buildToolbarIconButton - 24 + + buildToolbarIconButton + 24 - - - - + + + + 23 LOC File: lib/widgets/material_free.dart - material_free.dart - 23 LOC + material_free.dart + 23 LOC - - - - + + + + 22 LOC File: lib/widgets/app_scaffold.dart - app_scaffold.dart - 22 LOC + app_scaffold.dart + 22 LOC - - - - + + + + 22 LOC in Class: AppScaffold File: lib/widgets/app_scaffold.dart - AppScaffold - 22 LOC + AppScaffold + 22 LOC - - - - + + + + 22 LOC File: lib/widgets/app_overlay.dart - app_overlay.dart - 22 LOC + app_overlay.dart + 22 LOC - - - - + + + + 22 LOC in Class: <...> File: lib/widgets/app_overlay.dart - <...> - 22 LOC + <...> + 22 LOC - - - - + + + + 22 LOC in Function: showAppOverlay() File: lib/widgets/app_overlay.dart - - showAppOverlay - 22 + + showAppOverlay + 22 - - - - + + + + 18 LOC File: lib/widgets/app_card.dart - app_card.dart - 18 LOC + app_card.dart + 18 LOC - - - - + + + + 18 LOC in Class: AppCard File: lib/widgets/app_card.dart - AppCard - 18 LOC + AppCard + 18 LOC - - - - + + + + 4 LOC in Method: AppCard.AppCard() File: lib/widgets/app_card.dart - - AppCard - 4 + + AppCard + 4 - - - - + + + + 10 LOC in Method: AppCard.build() File: lib/widgets/app_card.dart - - build - 10 + + build + 10 - - - - + + + + 18 LOC File: lib/widgets/app_divider.dart - app_divider.dart - 18 LOC + app_divider.dart + 18 LOC - - - - + + + + 18 LOC in Class: AppDivider File: lib/widgets/app_divider.dart - AppDivider - 18 LOC + AppDivider + 18 LOC - - - - + + + + 2 LOC File: lib/widgets/text_formatting_controls.dart - text_formatting_controls.dart - 2 LOC + text_formatting_controls.dart + 2 LOC - - - - - 6,156 LOC Folder: lib/providers + + + + + 6,437 LOC Folder: lib/providers - providers - 6,156 LOC + providers + 6,437 LOC - - - - - 796 LOC File: lib/providers/app_provider_selection.dart + + + + + 830 LOC File: lib/providers/app_provider_selection.dart - app_provider_selection.dart - 796 LOC + app_provider_selection.dart + 830 LOC - - - - - 796 LOC in Class: <...> + <rect x="51.0" y="1324.4031668696712" width="299.51806489695826" height="385.8561484437764" rx="5.00" ry="5.00" fill="#9eb89a" fill-opacity="0.45"/> + <rect x="51.0" y="1324.4031668696712" width="299.51806489695826" height="385.8561484437764" rx="5.00" ry="5.00" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="51.0" y="1324.4031668696712" width="299.51806489695826" height="385.8561484437764" rx="5.00" ry="5.00" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8" stroke-dasharray="6,4"/> + <rect x="51.0" y="1324.4031668696712" width="299.51806489695826" height="385.8561484437764" rx="5.00" ry="5.00" fill="transparent" pointer-events="all"> + <title>830 LOC in Class: <...> File: lib/providers/app_provider_selection.dart - <...> - 796 LOC + <...> + 830 LOC - - - - + + + + 3 LOC in Method: ._isSelectionToggleInCancelState() File: lib/providers/app_provider_selection.dart - - _isSelectionToggleInCancelState - 3 + + _isSelectionToggleInCancelState + 3 - - - - + + + + 3 LOC in Method: ._straightLineRegionCloseDistance() File: lib/providers/app_provider_selection.dart - - _straightLineRegionCloseDistance - 3 + + _straightLineRegionCloseDistance + 3 + + + + + + + + 9 LOC in Method: .toggleSelectionOverlayFromFab() + +File: lib/providers/app_provider_selection.dart + + + toggleSelectionOverlayFromFab + 9 - - - - - 8 LOC in Method: .toggleSelectionOverlayFromFab() + <rect x="321.3616449746046" y="1525.3312410915594" width="21.15641992235367" height="57.13302396748474" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="321.3616449746046" y="1525.3312410915594" width="21.15641992235367" height="57.13302396748474" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="321.3616449746046" y="1525.3312410915594" width="21.15641992235367" height="57.13302396748474" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="321.3616449746046" y="1525.3312410915594" width="21.15641992235367" height="57.13302396748474" fill="transparent" pointer-events="all"> + <title>10 LOC in Method: .prewarmWandSourceCache() File: lib/providers/app_provider_selection.dart - - toggleSelectionOverlayFromFab - 8 + + prewarmWandSourceCache + 10 - - - - + + + + 16 LOC in Method: .regionErase() File: lib/providers/app_provider_selection.dart - - regionErase - 16 + + regionErase + 16 - - - - + + + + 8 LOC in Method: .regionCut() File: lib/providers/app_provider_selection.dart - - regionCut - 8 + + regionCut + 8 - - - - + + + + 8 LOC in Method: .regionCopy() File: lib/providers/app_provider_selection.dart - - regionCopy - 8 + + regionCopy + 8 - - - - + + + + 4 LOC in Method: .regionDuplicate() File: lib/providers/app_provider_selection.dart - - regionDuplicate - 4 + + regionDuplicate + 4 - - - - + + + + 4 LOC in Method: .captureSelectedLayerRestoreState() File: lib/providers/app_provider_selection.dart - - captureSelectedLayerRestoreState - 4 + + captureSelectedLayerRestoreState + 4 - - - - + + + + 7 LOC in Method: .regionDuplicateSameLayer() File: lib/providers/app_provider_selection.dart - - regionDuplicateSameLayer - 7 + + regionDuplicateSameLayer + 7 - - - - + + + + 14 LOC in Method: .regionDuplicateMove() File: lib/providers/app_provider_selection.dart - - regionDuplicateMove - 14 + + regionDuplicateMove + 14 - - - - + + + + 16 LOC in Method: .modifySelectedLayer() File: lib/providers/app_provider_selection.dart - - modifySelectedLayer - 16 + + modifySelectedLayer + 16 - - - - + + + + 11 LOC in Method: .paste() File: lib/providers/app_provider_selection.dart - - paste - 11 + + paste + 11 - - - - + + + + 23 LOC in Method: .createSelectionImage() File: lib/providers/app_provider_selection.dart - - createSelectionImage - 23 + + createSelectionImage + 23 - - - - + + + + 14 LOC in Method: ._captureSelectedLayerRestoreState() File: lib/providers/app_provider_selection.dart - - _captureSelectedLayerRestoreState - 14 + + _captureSelectedLayerRestoreState + 14 - - - - + + + + 25 LOC in Method: ._prepareImagePlacement() File: lib/providers/app_provider_selection.dart - - _prepareImagePlacement - 25 + + _prepareImagePlacement + 25 - - - - + + + + 20 LOC in Method: ._startDuplicateTransform() File: lib/providers/app_provider_selection.dart - - _startDuplicateTransform - 20 + + _startDuplicateTransform + 20 - - - - + + + + 16 LOC in Method: ._beginPreparedImageTransform() File: lib/providers/app_provider_selection.dart - - _beginPreparedImageTransform - 16 + + _beginPreparedImageTransform + 16 - - - - + + + + 13 LOC in Method: ._startTransformSession() File: lib/providers/app_provider_selection.dart - - _startTransformSession - 13 + + _startTransformSession + 13 - - - - + + + + 27 LOC in Method: ._startPreparedImageTransform() File: lib/providers/app_provider_selection.dart - - _startPreparedImageTransform - 27 + + _startPreparedImageTransform + 27 - - - - + + + + 8 LOC in Method: .confirmLayerModifySession() File: lib/providers/app_provider_selection.dart - - confirmLayerModifySession - 8 + + confirmLayerModifySession + 8 - - - - + + + + 33 LOC in Method: .confirmImagePlacement() File: lib/providers/app_provider_selection.dart - - confirmImagePlacement - 33 + + confirmImagePlacement + 33 - - - - + + + + 21 LOC in Method: .cancelImagePlacement() File: lib/providers/app_provider_selection.dart - - cancelImagePlacement - 21 + + cancelImagePlacement + 21 - - - - + + + + 8 LOC in Method: .cancelLayerModifySession() File: lib/providers/app_provider_selection.dart - - cancelLayerModifySession - 8 + + cancelLayerModifySession + 8 - - - - + + + + 16 LOC in Method: .startTransform() File: lib/providers/app_provider_selection.dart - - startTransform - 16 + + startTransform + 16 - - - - + + + + 54 LOC in Method: .confirmTransform() File: lib/providers/app_provider_selection.dart - - confirmTransform - 54 + + confirmTransform + 54 - - - - + + + + 22 LOC in Method: .cancelTransform() File: lib/providers/app_provider_selection.dart - - cancelTransform - 22 + + cancelTransform + 22 - - - - + + + + 1 LOC in Method: ._isLayerModifySession() File: lib/providers/app_provider_selection.dart - - _isLayerModifySession - 1 + + _isLayerModifySession + 1 - - - - + + + + 3 LOC in Method: ._isPreparedImageTransformSource() File: lib/providers/app_provider_selection.dart - - _isPreparedImageTransformSource - 3 + + _isPreparedImageTransformSource + 3 - - - - + + + + 28 LOC in Method: ._renderPlacedImage() File: lib/providers/app_provider_selection.dart - - _renderPlacedImage - 28 + + _renderPlacedImage + 28 - - - - + + + + 7 LOC in Method: .flipSelectionHorizontal() File: lib/providers/app_provider_selection.dart - - flipSelectionHorizontal - 7 + + flipSelectionHorizontal + 7 - - - - + + + + 7 LOC in Method: .flipSelectionVertical() File: lib/providers/app_provider_selection.dart - - flipSelectionVertical - 7 + + flipSelectionVertical + 7 - - - - + + + + 23 LOC in Method: ._flipSelection() File: lib/providers/app_provider_selection.dart - - _flipSelection - 23 + + _flipSelection + 23 - - - - + + + + 25 LOC in Method: .rotateSelection90() File: lib/providers/app_provider_selection.dart - - rotateSelection90 - 25 + + rotateSelection90 + 25 - - - - + + + + 35 LOC in Method: .replaceRegion() File: lib/providers/app_provider_selection.dart - - replaceRegion - 35 + + replaceRegion + 35 - - - - + + + + 30 LOC in Method: .selectorCreationStart() File: lib/providers/app_provider_selection.dart - - selectorCreationStart - 30 + + selectorCreationStart + 30 + + + + + + + + 7 LOC in Method: .wandToleranceForDrag() + +File: lib/providers/app_provider_selection.dart + + + wandToleranceForDrag + 7 - - - - + + + + + 16 LOC in Method: .wandSelectionResampleAt() + +File: lib/providers/app_provider_selection.dart + + + wandSelectionResampleAt + 16 + + + + + + + 5 LOC in Method: .selectionTranslateByScreenDelta() File: lib/providers/app_provider_selection.dart - - selectionTranslateByScreenDelta - 5 + + selectionTranslateByScreenDelta + 5 - - - - + + + + 5 LOC in Method: .selectionScaleUniform() File: lib/providers/app_provider_selection.dart - - selectionScaleUniform - 5 + + selectionScaleUniform + 5 - - - - + + + + 5 LOC in Method: .selectionResize() File: lib/providers/app_provider_selection.dart - - selectionResize - 5 + + selectionResize + 5 - - - - + + + + 5 LOC in Method: .selectionRotate() File: lib/providers/app_provider_selection.dart - - selectionRotate - 5 + + selectionRotate + 5 - - - - + + + + 11 LOC in Method: .selectorCreationAdditionalPoint() File: lib/providers/app_provider_selection.dart - - selectorCreationAdditionalPoint - 11 + + selectorCreationAdditionalPoint + 11 - - - - + + + + 11 LOC in Method: .selectorCreationPreview() File: lib/providers/app_provider_selection.dart - - selectorCreationPreview - 11 + + selectorCreationPreview + 11 - - - - + + + + 16 LOC in Method: .selectorCreationEnd() File: lib/providers/app_provider_selection.dart - - selectorCreationEnd - 16 + + selectorCreationEnd + 16 - - - - + + + + 15 LOC in Method: .selectorCreationClosePolygon() File: lib/providers/app_provider_selection.dart - - selectorCreationClosePolygon - 15 + + selectorCreationClosePolygon + 15 - - - - + + + + 7 LOC in Method: ._ensureSelection() File: lib/providers/app_provider_selection.dart - - _ensureSelection - 7 + + _ensureSelection + 7 - - - - + + + + 16 LOC in Method: .selectAll() File: lib/providers/app_provider_selection.dart - - selectAll - 16 + + selectAll + 16 - - - - + + + + 10 LOC in Method: .getPathAdjustToCanvasSizeAndPosition() File: lib/providers/app_provider_selection.dart - - getPathAdjustToCanvasSizeAndPosition - 10 + + getPathAdjustToCanvasSizeAndPosition + 10 - - - - + + + + 17 LOC in Method: .getRegionPathFromLayerImage() File: lib/providers/app_provider_selection.dart - - getRegionPathFromLayerImage - 17 + + getRegionPathFromLayerImage + 17 - - - - + + + + 34 LOC in Method: ._processPendingWandSelectionRequests() File: lib/providers/app_provider_selection.dart - - _processPendingWandSelectionRequests - 34 + + _processPendingWandSelectionRequests + 34 - - - - + + + + 42 LOC in Method: ._getSelectedLayerFillImageData() File: lib/providers/app_provider_selection.dart - - _getSelectedLayerFillImageData - 42 + + _getSelectedLayerFillImageData + 42 - - - - + + + + 36 LOC in Method: ._createSelectedLayerFloodSourceSignature() File: lib/providers/app_provider_selection.dart - - _createSelectedLayerFloodSourceSignature - 36 + + _createSelectedLayerFloodSourceSignature + 36 - - - - + + + + 765 LOC File: lib/providers/layer_provider.dart - layer_provider.dart - 765 LOC + layer_provider.dart + 765 LOC - - - - + + + + 765 LOC in Class: LayerProvider File: lib/providers/layer_provider.dart - LayerProvider - 765 LOC + LayerProvider + 765 LOC - - - - + + + + 17 LOC in Method: LayerProvider.LayerProvider() File: lib/providers/layer_provider.dart - - LayerProvider - 17 + + LayerProvider + 17 - - - - + + + + 8 LOC in Method: LayerProvider.of() File: lib/providers/layer_provider.dart - - of - 8 + + of + 8 - - - - + + + + 4 LOC in Method: LayerProvider.update() File: lib/providers/layer_provider.dart - - update - 4 + + update + 4 - - - - + + + + 2 LOC in Method: LayerProvider.name() File: lib/providers/layer_provider.dart - - name - 2 + + name + 2 - - - - + + + + 5 LOC in Method: LayerProvider.name() File: lib/providers/layer_provider.dart - - name - 5 + + name + 5 - - - - + + + + 2 LOC in Method: LayerProvider.isSelected() File: lib/providers/layer_provider.dart - - isSelected - 2 + + isSelected + 2 - - - - + + + + 8 LOC in Method: LayerProvider.isSelected() File: lib/providers/layer_provider.dart - - isSelected - 8 + + isSelected + 8 - - - - + + + + 2 LOC in Method: LayerProvider.isLocked() File: lib/providers/layer_provider.dart - - isLocked - 2 + + isLocked + 2 - - - - + + + + 5 LOC in Method: LayerProvider.isLocked() File: lib/providers/layer_provider.dart - - isLocked - 5 + + isLocked + 5 - - - - + + + + 2 LOC in Method: LayerProvider.size() File: lib/providers/layer_provider.dart - - size - 2 + + size + 2 - - - - + + + + 5 LOC in Method: LayerProvider.size() File: lib/providers/layer_provider.dart - - size - 5 + + size + 5 - - - - + + + + 12 LOC in Method: LayerProvider._cacheTopColorsUsed() File: lib/providers/layer_provider.dart - - _cacheTopColorsUsed - 12 + + _cacheTopColorsUsed + 12 - - - - + + + + 2 LOC in Method: LayerProvider.isVisible() File: lib/providers/layer_provider.dart - - isVisible - 2 + + isVisible + 2 - - - - + + + + 5 LOC in Method: LayerProvider.isVisible() File: lib/providers/layer_provider.dart - - isVisible - 5 + + isVisible + 5 - - - - + + + + 2 LOC in Method: LayerProvider.opacity() File: lib/providers/layer_provider.dart - - opacity - 2 + + opacity + 2 - - - - + + + + 12 LOC in Method: LayerProvider.opacity() File: lib/providers/layer_provider.dart - - opacity - 12 + + opacity + 12 - - - - + + + + 2 LOC in Method: LayerProvider.count() File: lib/providers/layer_provider.dart - - count - 2 + + count + 2 - - - - + + + + 2 LOC in Method: LayerProvider.isEmpty() File: lib/providers/layer_provider.dart - - isEmpty - 2 + + isEmpty + 2 - - - - + + + + 18 LOC in Method: LayerProvider.offset() File: lib/providers/layer_provider.dart - - offset - 18 + + offset + 18 - - - - + + + + 12 LOC in Method: LayerProvider.scale() File: lib/providers/layer_provider.dart - - scale - 12 + + scale + 12 - - - - + + + + 2 LOC in Method: LayerProvider.lastUserAction() File: lib/providers/layer_provider.dart - - lastUserAction - 2 + + lastUserAction + 2 - - - - + + + + 6 LOC in Method: LayerProvider.appendDrawingAction() File: lib/providers/layer_provider.dart - - appendDrawingAction - 6 + + appendDrawingAction + 6 - - - - + + + + 10 LOC in Method: LayerProvider.appendDrawingActionRetainingCache() File: lib/providers/layer_provider.dart - - appendDrawingActionRetainingCache - 10 + + appendDrawingActionRetainingCache + 10 - - - - + + + + 25 LOC in Method: LayerProvider.addImage() File: lib/providers/layer_provider.dart - - addImage - 25 + + addImage + 25 - - - - + + + + 4 LOC in Method: LayerProvider.lastActionAppendPosition() File: lib/providers/layer_provider.dart - - lastActionAppendPosition - 4 + + lastActionAppendPosition + 4 - - - - + + + + 8 LOC in Method: LayerProvider.undo() File: lib/providers/layer_provider.dart - - undo - 8 + + undo + 8 - - - - + + + + 8 LOC in Method: LayerProvider.redo() File: lib/providers/layer_provider.dart - - redo - 8 + + redo + 8 - - - - + + + + 2 LOC in Method: LayerProvider.cachedImage() File: lib/providers/layer_provider.dart - - cachedImage - 2 + + cachedImage + 2 - - - - + + + + 2 LOC in Method: LayerProvider.thumbnailImage() File: lib/providers/layer_provider.dart - - thumbnailImage - 2 + + thumbnailImage + 2 - - - - + + + + 16 LOC in Method: LayerProvider.updateThumbnail() File: lib/providers/layer_provider.dart - - updateThumbnail - 16 + + updateThumbnail + 16 - - - - + + + + 23 LOC in Method: LayerProvider.clearCache() File: lib/providers/layer_provider.dart - - clearCache - 23 + + clearCache + 23 - - - - + + + + 30 LOC in Method: LayerProvider.beginStrokePreview() File: lib/providers/layer_provider.dart - - beginStrokePreview - 30 + + beginStrokePreview + 30 - - - - + + + + 13 LOC in Method: LayerProvider.clearStrokePreview() File: lib/providers/layer_provider.dart - - clearStrokePreview - 13 + + clearStrokePreview + 13 - - - - + + + + 18 LOC in Method: LayerProvider._foldInProgressStrokeIfTailLarge() File: lib/providers/layer_provider.dart - - _foldInProgressStrokeIfTailLarge - 18 + + _foldInProgressStrokeIfTailLarge + 18 - - - - + + + + 45 LOC in Method: LayerProvider._foldInProgressStrokeIntoBaseline() File: lib/providers/layer_provider.dart - - _foldInProgressStrokeIntoBaseline - 45 + + _foldInProgressStrokeIntoBaseline + 45 - - - - + + + + 23 LOC in Method: LayerProvider._renderInProgressTail() File: lib/providers/layer_provider.dart - - _renderInProgressTail - 23 + + _renderInProgressTail + 23 - - - - + + + + 15 LOC in Method: LayerProvider._renderFreehandActionTail() File: lib/providers/layer_provider.dart - - _renderFreehandActionTail - 15 + + _renderFreehandActionTail + 15 - - - - + + + + 7 LOC in Method: LayerProvider.toImageForStorage() File: lib/providers/layer_provider.dart - - toImageForStorage - 7 + + toImageForStorage + 7 - - - - + + + + 11 LOC in Method: LayerProvider.renderImageWH() File: lib/providers/layer_provider.dart - - renderImageWH - 11 + + renderImageWH + 11 - - - - + + + + 16 LOC in Method: LayerProvider.toImageForStorageAsync() File: lib/providers/layer_provider.dart - - toImageForStorageAsync - 16 + + toImageForStorageAsync + 16 - - - - + + + + 19 LOC in Method: LayerProvider.applyAction() File: lib/providers/layer_provider.dart - - applyAction - 19 + + applyAction + 19 - - - - + + + + 55 LOC in Method: LayerProvider.renderLayer() File: lib/providers/layer_provider.dart - - renderLayer - 55 + + renderLayer + 55 - - - - + + + + 18 LOC in Method: LayerProvider._tryRenderLivePreview() File: lib/providers/layer_provider.dart - - _tryRenderLivePreview - 18 + + _tryRenderLivePreview + 18 - - - - + + + + 15 LOC in Method: LayerProvider._renderActionStack() File: lib/providers/layer_provider.dart - - _renderActionStack - 15 + + _renderActionStack + 15 - - - - + + + + 138 LOC in Method: LayerProvider._renderAction() File: lib/providers/layer_provider.dart - - _renderAction - 138 + + _renderAction + 138 - - - - + + + + 755 LOC File: lib/providers/flood_fill.dart - flood_fill.dart - 755 LOC + flood_fill.dart + 755 LOC - - - - + + + + 604 LOC in Class: <...> File: lib/providers/flood_fill.dart - <...> - 604 LOC + <...> + 604 LOC - - - - + + + + 15 LOC in Function: index() File: lib/providers/flood_fill.dart - - index - 15 + + index + 15 - - - - + + + + 205 LOC in Function: _runFloodFillTask() File: lib/providers/flood_fill.dart - - _runFloodFillTask - 205 + + _runFloodFillTask + 205 - - - - + + + + 14 LOC in Function: _buildPathFromRuns() File: lib/providers/flood_fill.dart - - _buildPathFromRuns - 14 + + _buildPathFromRuns + 14 - - - - + + + + 33 LOC in Function: _groupRunsByRow() File: lib/providers/flood_fill.dart - - _groupRunsByRow - 33 + + _groupRunsByRow + 33 - - - - + + + + 21 LOC in Function: _normalizeRowRuns() File: lib/providers/flood_fill.dart - - _normalizeRowRuns - 21 + + _normalizeRowRuns + 21 - - - - + + + + 111 LOC in Function: _buildBoundarySegments() File: lib/providers/flood_fill.dart - - _buildBoundarySegments - 111 + + _buildBoundarySegments + 111 - - - - + + + + 45 LOC in Function: _emitExposedHorizontalSegments() File: lib/providers/flood_fill.dart - - _emitExposedHorizontalSegments - 45 + + _emitExposedHorizontalSegments + 45 - - - - + + + + 15 LOC in Function: _addHorizontalBoundarySegment() File: lib/providers/flood_fill.dart - - _addHorizontalBoundarySegment - 15 + + _addHorizontalBoundarySegment + 15 - - - - + + + + 27 LOC in Function: _advanceVerticalEdges() File: lib/providers/flood_fill.dart - - _advanceVerticalEdges - 27 + + _advanceVerticalEdges + 27 - - - - + + + + 13 LOC in Function: _closeActiveVerticalEdges() File: lib/providers/flood_fill.dart - - _closeActiveVerticalEdges - 13 + + _closeActiveVerticalEdges + 13 - - - - + + + + 49 LOC in Function: _traceBoundaryPath() File: lib/providers/flood_fill.dart - - _traceBoundaryPath - 49 + + _traceBoundaryPath + 49 - - - - + + + + 15 LOC in Function: _findNextUnusedSegment() File: lib/providers/flood_fill.dart - - _findNextUnusedSegment - 15 + + _findNextUnusedSegment + 15 - - - - + + + + 41 LOC in Function: extractRegionByColorEdgeAndOffsetFromPixels() File: lib/providers/flood_fill.dart - - extractRegionByColorEdgeAndOffsetFromPixels - 41 + + extractRegionByColorEdgeAndOffsetFromPixels + 41 - - - - + + + + 37 LOC in Class: _SpanStack File: lib/providers/flood_fill.dart - _SpanStack - 37 LOC + _SpanStack + 37 LOC - - - - + + + + 4 LOC in Method: _SpanStack._SpanStack() File: lib/providers/flood_fill.dart - - _SpanStack - 4 + + _SpanStack + 4 - - - - + + + + 2 LOC in Method: _SpanStack.isEmpty() File: lib/providers/flood_fill.dart - - isEmpty - 2 + + isEmpty + 2 - - - - + + + + 9 LOC in Method: _SpanStack.push() File: lib/providers/flood_fill.dart - - push - 9 + + push + 9 - - - - + + + + 5 LOC in Method: _SpanStack.pop() File: lib/providers/flood_fill.dart - - pop - 5 + + pop + 5 - - - - + + + + 11 LOC in Method: _SpanStack._grow() File: lib/providers/flood_fill.dart - - _grow - 11 + + _grow + 11 - - - - + + + + 37 LOC in Class: _RunBuffer File: lib/providers/flood_fill.dart - _RunBuffer - 37 LOC + _RunBuffer + 37 LOC - - - - + + + + 3 LOC in Method: _RunBuffer._RunBuffer() File: lib/providers/flood_fill.dart - - _RunBuffer - 3 + + _RunBuffer + 3 - - - - + + + + 11 LOC in Method: _RunBuffer.add() File: lib/providers/flood_fill.dart - - add - 11 + + add + 11 - - - - + + + + 6 LOC in Method: _RunBuffer.toTrimmedList() File: lib/providers/flood_fill.dart - - toTrimmedList - 6 + + toTrimmedList + 6 - - - - + + + + 12 LOC in Method: _RunBuffer._grow() File: lib/providers/flood_fill.dart - - _grow - 12 + + _grow + 12 - - - - + + + + 17 LOC in Class: _FloodFillTaskInput File: lib/providers/flood_fill.dart - _FloodFillTaskInput - 17 LOC + _FloodFillTaskInput + 17 LOC + + + + + + 8 LOC in Method: _FloodFillTaskInput._FloodFillTaskInput() + +File: lib/providers/flood_fill.dart + + + _FloodFillTaskInput + 8 + + - - - - + + + + 13 LOC in Class: _FloodFillTaskOutput File: lib/providers/flood_fill.dart - _FloodFillTaskOutput - 13 LOC - + _FloodFillTaskOutput + 13 LOC - - - - - 12 LOC in Class: _GridPoint + <rect x="532.736205793396" y="1867.5401252901115" width="33.34752143681209" height="2.039134849141959" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="532.736205793396" y="1867.5401252901115" width="33.34752143681209" height="2.039134849141959" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="532.736205793396" y="1867.5401252901115" width="33.34752143681209" height="2.039134849141959" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="532.736205793396" y="1867.5401252901115" width="33.34752143681209" height="2.039134849141959" fill="transparent" pointer-events="all"> + <title>6 LOC in Method: _FloodFillTaskOutput._FloodFillTaskOutput() File: lib/providers/flood_fill.dart - _GridPoint - 12 LOC + + _FloodFillTaskOutput + 6 + + - - - - - 9 LOC in Class: Region + <rect x="524.736205793396" y="1877.5792601392534" width="49.34752143681209" height="31.420739860746423" rx="5.00" ry="5.00" fill="#9eb89a" fill-opacity="0.78"/> + <rect x="524.736205793396" y="1877.5792601392534" width="49.34752143681209" height="31.420739860746423" rx="5.00" ry="5.00" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="524.736205793396" y="1877.5792601392534" width="49.34752143681209" height="31.420739860746423" rx="5.00" ry="5.00" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="524.736205793396" y="1877.5792601392534" width="49.34752143681209" height="31.420739860746423" rx="5.00" ry="5.00" fill="transparent" pointer-events="all"> + <title>12 LOC in Class: _GridPoint File: lib/providers/flood_fill.dart - Region - 9 LOC + _GridPoint + 12 LOC + - - - - - 2 LOC in Method: Region.offset() + <rect x="574.0837272302081" y="1843.5401252901115" width="17.76510771725235" height="65.45987470988838" rx="5.00" ry="5.00" fill="#9eb89a" fill-opacity="0.78"/> + <rect x="574.0837272302081" y="1843.5401252901115" width="17.76510771725235" height="65.45987470988838" rx="5.00" ry="5.00" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="574.0837272302081" y="1843.5401252901115" width="17.76510771725235" height="65.45987470988838" rx="5.00" ry="5.00" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="574.0837272302081" y="1843.5401252901115" width="17.76510771725235" height="65.45987470988838" rx="5.00" ry="5.00" fill="transparent" pointer-events="all"> + <title>9 LOC in Class: Region File: lib/providers/flood_fill.dart - - offset - 2 - - + Region + 9 LOC - - - - + + + + 9 LOC in Class: _RunSegment File: lib/providers/flood_fill.dart - _RunSegment - 9 LOC + _RunSegment + 9 LOC - - - - + + + + 4 LOC in Method: _RunSegment._RunSegment() File: lib/providers/flood_fill.dart - - _RunSegment - 4 + + _RunSegment + 4 - - - - + + + + 9 LOC in Class: _BoundarySegment File: lib/providers/flood_fill.dart - _BoundarySegment - 9 LOC + _BoundarySegment + 9 LOC - - - - + + + + 4 LOC in Method: _BoundarySegment._BoundarySegment() File: lib/providers/flood_fill.dart - - _BoundarySegment - 4 + + _BoundarySegment + 4 - - - - + + + + 8 LOC in Class: Point File: lib/providers/flood_fill.dart - Point - 8 LOC - - - - - - 1 LOC in Method: Point.Point() - -File: lib/providers/flood_fill.dart - - - Point - 1 - - + Point + 8 LOC - - - - + + + + 752 LOC File: lib/providers/layers_provider.dart - layers_provider.dart - 752 LOC + layers_provider.dart + 752 LOC - - - - + + + + 752 LOC in Class: LayersProvider File: lib/providers/layers_provider.dart - LayersProvider - 752 LOC + LayersProvider + 752 LOC - - - - + + + + 9 LOC in Method: LayersProvider.LayersProvider() File: lib/providers/layers_provider.dart - - LayersProvider - 9 + + LayersProvider + 9 - - - - + + + + 2 LOC in Method: LayersProvider.layerListStructureListenable() File: lib/providers/layers_provider.dart - - layerListStructureListenable - 2 + + layerListStructureListenable + 2 - - - - + + + + 2 LOC in Method: LayersProvider.topColorsListenable() File: lib/providers/layers_provider.dart - - topColorsListenable - 2 + + topColorsListenable + 2 - - - - + + + + 8 LOC in Method: LayersProvider.of() File: lib/providers/layers_provider.dart - - of - 8 + + of + 8 - - - - + + + + 10 LOC in Method: LayersProvider.dispose() File: lib/providers/layers_provider.dart - - dispose - 10 + + dispose + 10 - - - - + + + + 8 LOC in Method: LayersProvider._disposeDroppedRecordImages() File: lib/providers/layers_provider.dart - - _disposeDroppedRecordImages - 8 + + _disposeDroppedRecordImages + 8 - - - - + + + + 18 LOC in Method: LayersProvider.disposeCommittedImagesIfUnreferenced() File: lib/providers/layers_provider.dart - - disposeCommittedImagesIfUnreferenced - 18 + + disposeCommittedImagesIfUnreferenced + 18 - - - - + + + + 22 LOC in Method: LayersProvider._collectLiveCommittedImages() File: lib/providers/layers_provider.dart - - _collectLiveCommittedImages - 22 + + _collectLiveCommittedImages + 22 - - - - + + + + 3 LOC in Method: LayersProvider._notifyLayerListStructureChanged() File: lib/providers/layers_provider.dart - - _notifyLayerListStructureChanged - 3 + + _notifyLayerListStructureChanged + 3 - - - - + + + + 3 LOC in Method: LayersProvider._notifyTopColorsChanged() File: lib/providers/layers_provider.dart - - _notifyTopColorsChanged - 3 + + _notifyTopColorsChanged + 3 - - - - + + + + 5 LOC in Method: LayersProvider._syncLayerIds() File: lib/providers/layers_provider.dart - - _syncLayerIds - 5 + + _syncLayerIds + 5 - - - - + + + + 6 LOC in Method: LayersProvider.update() File: lib/providers/layers_provider.dart - - update - 6 + + update + 6 - - - - + + + + 4 LOC in Method: LayersProvider.repaintCanvas() File: lib/providers/layers_provider.dart - - repaintCanvas - 4 + + repaintCanvas + 4 - - - - + + + + 2 LOC in Method: LayersProvider.topColorsRefreshRevision() File: lib/providers/layers_provider.dart - - topColorsRefreshRevision - 2 + + topColorsRefreshRevision + 2 - - - - + + + + 4 LOC in Method: LayersProvider._markTopColorsDirty() File: lib/providers/layers_provider.dart - - _markTopColorsDirty - 4 + + _markTopColorsDirty + 4 - - - - + + + + 2 LOC in Method: LayersProvider.size() File: lib/providers/layers_provider.dart - - size - 2 + + size + 2 - - - - + + + + 6 LOC in Method: LayersProvider.size() File: lib/providers/layers_provider.dart - - size - 6 + + size + 6 - - - - + + + + 4 LOC in Method: LayersProvider.width() File: lib/providers/layers_provider.dart - - width - 4 + + width + 4 - - - - + + + + 2 LOC in Method: LayersProvider.height() File: lib/providers/layers_provider.dart - - height - 2 + + height + 2 - - - - + + + + 2 LOC in Method: LayersProvider.canvasResizeLockAspectRatio() File: lib/providers/layers_provider.dart - - canvasResizeLockAspectRatio - 2 + + canvasResizeLockAspectRatio + 2 - - - - + + + + 5 LOC in Method: LayersProvider.canvasResizeLockAspectRatio() File: lib/providers/layers_provider.dart - - canvasResizeLockAspectRatio - 5 + + canvasResizeLockAspectRatio + 5 - - - - + + + + 2 LOC in Method: LayersProvider.scale() File: lib/providers/layers_provider.dart - - scale - 2 + + scale + 2 - - - - + + + + 11 LOC in Method: LayersProvider.scale() File: lib/providers/layers_provider.dart - - scale - 11 + + scale + 11 - - - - + + + + 12 LOC in Method: LayersProvider.scheduleDisplayCacheRebuild() File: lib/providers/layers_provider.dart - - scheduleDisplayCacheRebuild - 12 + + scheduleDisplayCacheRebuild + 12 - - - - + + + + 2 LOC in Method: LayersProvider.canvasResizePosition() File: lib/providers/layers_provider.dart - - canvasResizePosition - 2 + + canvasResizePosition + 2 - - - - + + + + 5 LOC in Method: LayersProvider.canvasResizePosition() File: lib/providers/layers_provider.dart - - canvasResizePosition - 5 + + canvasResizePosition + 5 - - - - + + + + 47 LOC in Method: LayersProvider.canvasResize() File: lib/providers/layers_provider.dart - - canvasResize - 47 + + canvasResize + 47 - - - - + + + + 9 LOC in Method: LayersProvider.addWhiteBackgroundLayer() File: lib/providers/layers_provider.dart - - addWhiteBackgroundLayer - 9 + + addWhiteBackgroundLayer + 9 - - - - + + + + 5 LOC in Method: LayersProvider.clear() File: lib/providers/layers_provider.dart - - clear - 5 + + clear + 5 - - - - + + + + 20 LOC in Method: LayersProvider.replaceAll() File: lib/providers/layers_provider.dart - - replaceAll - 20 + + replaceAll + 20 - - - - + + + + 2 LOC in Method: LayersProvider.length() File: lib/providers/layers_provider.dart - - length - 2 + + length + 2 - - - - + + + + 2 LOC in Method: LayersProvider.isEmpty() File: lib/providers/layers_provider.dart - - isEmpty - 2 + + isEmpty + 2 - - - - + + + + 2 LOC in Method: LayersProvider.isNotEmpty() File: lib/providers/layers_provider.dart - - isNotEmpty - 2 + + isNotEmpty + 2 - - - - + + + + 2 LOC in Method: LayersProvider.hasChanged() File: lib/providers/layers_provider.dart - - hasChanged - 2 + + hasChanged + 2 - - - - + + + + 2 LOC in Method: LayersProvider.selectedLayerIndex() File: lib/providers/layers_provider.dart - - selectedLayerIndex - 2 + + selectedLayerIndex + 2 - - - - + + + + 13 LOC in Method: LayersProvider._setSelectedLayerIndex() File: lib/providers/layers_provider.dart - - _setSelectedLayerIndex - 13 + + _setSelectedLayerIndex + 13 - - - - + + + + 6 LOC in Method: LayersProvider.selectedLayerIndex() File: lib/providers/layers_provider.dart - - selectedLayerIndex - 6 + + selectedLayerIndex + 6 - - - - + + + + 2 LOC in Method: LayersProvider.selectedLayer() File: lib/providers/layers_provider.dart - - selectedLayer - 2 + + selectedLayer + 2 - - - - + + + + 5 LOC in Method: LayersProvider.layersToggleVisibility() File: lib/providers/layers_provider.dart - - layersToggleVisibility - 5 + + layersToggleVisibility + 5 - - - - + + + + 5 LOC in Method: LayersProvider.layersToggleLock() File: lib/providers/layers_provider.dart - - layersToggleLock - 5 + + layersToggleLock + 5 - - - - + + + + 7 LOC in Method: LayersProvider.clearHasChanged() File: lib/providers/layers_provider.dart - - clearHasChanged - 7 + + clearHasChanged + 7 - - - - + + + + 7 LOC in Method: LayersProvider.markAllChanged() File: lib/providers/layers_provider.dart - - markAllChanged - 7 + + markAllChanged + 7 - - - - + + + + 2 LOC in Method: LayersProvider.isIndexInRange() File: lib/providers/layers_provider.dart - - isIndexInRange - 2 + + isIndexInRange + 2 - - - - + + + + 4 LOC in Method: LayersProvider.getLayerIndex() File: lib/providers/layers_provider.dart - - getLayerIndex - 4 + + getLayerIndex + 4 - - - - + + + + 5 LOC in Method: LayersProvider.get() File: lib/providers/layers_provider.dart - - get - 5 + + get + 5 - - - - + + + + 8 LOC in Method: LayersProvider.newLayer() File: lib/providers/layers_provider.dart - - newLayer - 8 + + newLayer + 8 - - - - + + + + 12 LOC in Method: LayersProvider._onLayerThumbnailChanged() File: lib/providers/layers_provider.dart - - _onLayerThumbnailChanged - 12 + + _onLayerThumbnailChanged + 12 - - - - + + + + 8 LOC in Method: LayersProvider.ensureLayerAtIndex() File: lib/providers/layers_provider.dart - - ensureLayerAtIndex - 8 + + ensureLayerAtIndex + 8 - - - - + + + + 2 LOC in Method: LayersProvider.addTop() File: lib/providers/layers_provider.dart - - addTop - 2 + + addTop + 2 - - - - + + + + 2 LOC in Method: LayersProvider.addBottom() File: lib/providers/layers_provider.dart - - addBottom - 2 + + addBottom + 2 - - - - + + + + 10 LOC in Method: LayersProvider.insert() File: lib/providers/layers_provider.dart - - insert - 10 + + insert + 10 - - - - + + + + 9 LOC in Method: LayersProvider.insertAt() File: lib/providers/layers_provider.dart - - insertAt - 9 + + insertAt + 9 - - - - + + + + 10 LOC in Method: LayersProvider.remove() File: lib/providers/layers_provider.dart - - remove - 10 + + remove + 10 - - - - + + + + 14 LOC in Method: LayersProvider.removeByIndex() File: lib/providers/layers_provider.dart - - removeByIndex - 14 + + removeByIndex + 14 - - - - + + + + 21 LOC in Method: LayersProvider.reorderLayer() File: lib/providers/layers_provider.dart - - reorderLayer - 21 + + reorderLayer + 21 - - - - + + + + 8 LOC in Method: LayersProvider._sourceLayerRequiresRasterizedMerge() File: lib/providers/layers_provider.dart - - _sourceLayerRequiresRasterizedMerge - 8 + + _sourceLayerRequiresRasterizedMerge + 8 - - - - + + + + 24 LOC in Method: LayersProvider._buildMergedActionsForSourceLayer() File: lib/providers/layers_provider.dart - - _buildMergedActionsForSourceLayer - 24 + + _buildMergedActionsForSourceLayer + 24 - - - - + + + + 44 LOC in Method: LayersProvider.mergeLayers() File: lib/providers/layers_provider.dart - - mergeLayers - 44 + + mergeLayers + 44 - - - - + + + + 2 LOC in Method: LayersProvider.list() File: lib/providers/layers_provider.dart - - list - 2 + + list + 2 - - - - + + + + 10 LOC in Method: LayersProvider.hideShowAllExcept() File: lib/providers/layers_provider.dart - - hideShowAllExcept - 10 + + hideShowAllExcept + 10 - - - - + + + + 7 LOC in Method: LayersProvider.evaluateTopColor() File: lib/providers/layers_provider.dart - - evaluateTopColor - 7 + + evaluateTopColor + 7 - - - - + + + + 32 LOC in Method: LayersProvider.getTopColorUsed() File: lib/providers/layers_provider.dart - - getTopColorUsed - 32 + + getTopColorUsed + 32 - - - - + + + + 31 LOC in Method: LayersProvider.capturePainterToImage() File: lib/providers/layers_provider.dart - - capturePainterToImage - 31 + + capturePainterToImage + 31 - - - - + + + + 15 LOC in Method: LayersProvider.captureLayerRegion() File: lib/providers/layers_provider.dart - - captureLayerRegion - 15 + + captureLayerRegion + 15 - - - - + + + + 43 LOC in Method: LayersProvider.rotateCanvas90Clockwise() File: lib/providers/layers_provider.dart - - rotateCanvas90Clockwise - 43 + + rotateCanvas90Clockwise + 43 - - - - + + + + 2 LOC in Method: LayersProvider.flipCanvasHorizontal() File: lib/providers/layers_provider.dart - - flipCanvasHorizontal - 2 + + flipCanvasHorizontal + 2 - - - - + + + + 2 LOC in Method: LayersProvider.flipCanvasVertical() File: lib/providers/layers_provider.dart - - flipCanvasVertical - 2 + + flipCanvasVertical + 2 - - - - + + + + 24 LOC in Method: LayersProvider._flipCanvas() File: lib/providers/layers_provider.dart - - _flipCanvas - 24 + + _flipCanvas + 24 - - - - + + + + 9 LOC in Method: LayersProvider.capturePainterToImageBytes() File: lib/providers/layers_provider.dart - - capturePainterToImageBytes - 9 + + capturePainterToImageBytes + 9 - - - - + + + + 33 LOC in Method: LayersProvider.getColorAtOffset() File: lib/providers/layers_provider.dart - - getColorAtOffset - 33 + + getColorAtOffset + 33 - - - - + + + + 15 LOC in Method: LayersProvider._getRawRgbaBytes() File: lib/providers/layers_provider.dart - - _getRawRgbaBytes - 15 + + _getRawRgbaBytes + 15 - - - - - 495 LOC File: lib/providers/app_provider.dart + + + + + 533 LOC File: lib/providers/app_provider.dart - app_provider.dart - 495 LOC + app_provider.dart + 533 LOC - - - - - 495 LOC in Class: AppProvider + <rect x="661.170257241745" y="1686.4146987871866" width="315.6462895981456" height="222.58530121281342" rx="5.00" ry="5.00" fill="#9eb89a" fill-opacity="0.78"/> + <rect x="661.170257241745" y="1686.4146987871866" width="315.6462895981456" height="222.58530121281342" rx="5.00" ry="5.00" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="661.170257241745" y="1686.4146987871866" width="315.6462895981456" height="222.58530121281342" rx="5.00" ry="5.00" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="661.170257241745" y="1686.4146987871866" width="315.6462895981456" height="222.58530121281342" rx="5.00" ry="5.00" fill="transparent" pointer-events="all"> + <title>533 LOC in Class: AppProvider File: lib/providers/app_provider.dart - AppProvider - 495 LOC + AppProvider + 533 LOC - - - - + + + + 10 LOC in Method: AppProvider.AppProvider() File: lib/providers/app_provider.dart - - AppProvider - 10 + + AppProvider + 10 - - - - + + + + 8 LOC in Method: AppProvider._initCanvas() File: lib/providers/app_provider.dart - - _initCanvas - 8 + + _initCanvas + 8 - - - - + + + + 2 LOC in Method: AppProvider.preferredLocale() File: lib/providers/app_provider.dart - - preferredLocale - 2 + + preferredLocale + 2 - - - - + + + + 2 LOC in Method: AppProvider.languageCode() File: lib/providers/app_provider.dart - - languageCode - 2 + + languageCode + 2 - - - - + + + + 5 LOC in Method: AppProvider.setLanguageCode() File: lib/providers/app_provider.dart - - setLanguageCode - 5 + + setLanguageCode + 5 - - - - + + + + 2 LOC in Method: AppProvider.undoProvider() File: lib/providers/app_provider.dart - - undoProvider - 2 + + undoProvider + 2 - - - - + + + + 2 LOC in Method: AppProvider.debounceGradientFill() File: lib/providers/app_provider.dart - - debounceGradientFill - 2 + + debounceGradientFill + 2 - - - - + + + + 2 LOC in Method: AppProvider.fillService() File: lib/providers/app_provider.dart - - fillService - 2 + + fillService + 2 - - - - + + + + 9 LOC in Method: AppProvider.of() File: lib/providers/app_provider.dart - - of - 9 + + of + 9 - - - - + + + + 2 LOC in Method: AppProvider.mainViewRepaintListenable() File: lib/providers/app_provider.dart - - mainViewRepaintListenable - 2 + + mainViewRepaintListenable + 2 - - - - + + + + 2 LOC in Method: AppProvider.toolOptionsRepaintListenable() File: lib/providers/app_provider.dart - - toolOptionsRepaintListenable - 2 + + toolOptionsRepaintListenable + 2 - - - - + + + + 2 LOC in Method: AppProvider.layerModifyModeListenable() File: lib/providers/app_provider.dart - - layerModifyModeListenable - 2 + + layerModifyModeListenable + 2 - - - - + + + + 2 LOC in Method: AppProvider.viewportRepaintListenable() File: lib/providers/app_provider.dart - - viewportRepaintListenable - 2 + + viewportRepaintListenable + 2 - - - - + + + + 2 LOC in Method: AppProvider.selectedActionRepaintListenable() File: lib/providers/app_provider.dart - - selectedActionRepaintListenable - 2 + + selectedActionRepaintListenable + 2 - - - - + + + + 5 LOC in Method: AppProvider.mainViewCompositeListenable() File: lib/providers/app_provider.dart - - mainViewCompositeListenable - 5 + + mainViewCompositeListenable + 5 - - - - + + + + 2 LOC in Method: AppProvider.toolbarActionsListenable() File: lib/providers/app_provider.dart - - toolbarActionsListenable - 2 + + toolbarActionsListenable + 2 - - - - + + + + 4 LOC in Method: AppProvider.isLayerModifyMode() File: lib/providers/app_provider.dart - - isLayerModifyMode - 4 + + isLayerModifyMode + 4 - - - - + + + + 11 LOC in Method: AppProvider.dispose() File: lib/providers/app_provider.dart - - dispose - 11 + + dispose + 11 - - - - + + + + 3 LOC in Method: AppProvider._handlePreferencesChanged() File: lib/providers/app_provider.dart - - _handlePreferencesChanged - 3 + + _handlePreferencesChanged + 3 - - - - + + + + 4 LOC in Method: AppProvider.repaintMainView() File: lib/providers/app_provider.dart - - repaintMainView - 4 + + repaintMainView + 4 - - - - + + + + 4 LOC in Method: AppProvider.repaintToolOptions() File: lib/providers/app_provider.dart - - repaintToolOptions - 4 + + repaintToolOptions + 4 - - - - + + + + 4 LOC in Method: AppProvider.repaintLayerModifyMode() File: lib/providers/app_provider.dart - - repaintLayerModifyMode - 4 + + repaintLayerModifyMode + 4 - - - - + + + + 6 LOC in Method: AppProvider.notifyLayerModifyModeChanged() File: lib/providers/app_provider.dart - - notifyLayerModifyModeChanged - 6 + + notifyLayerModifyModeChanged + 6 - - - - + + + + 4 LOC in Method: AppProvider.repaintViewport() File: lib/providers/app_provider.dart - - repaintViewport - 4 + + repaintViewport + 4 - - - - + + + + 2 LOC in Method: AppProvider.isSelectedLayerLocked() File: lib/providers/app_provider.dart - - isSelectedLayerLocked - 2 + + isSelectedLayerLocked + 2 - - - - + + + + 18 LOC in Method: AppProvider.recordExecuteDrawingActionToSelectedLayer() File: lib/providers/app_provider.dart - - recordExecuteDrawingActionToSelectedLayer - 18 + + recordExecuteDrawingActionToSelectedLayer + 18 - - - - + + + + 6 LOC in Method: AppProvider.undoAction() File: lib/providers/app_provider.dart - - undoAction - 6 + + undoAction + 6 - - - - + + + + 6 LOC in Method: AppProvider.redoAction() File: lib/providers/app_provider.dart - - redoAction - 6 + + redoAction + 6 - - - - + + + + 4 LOC in Method: AppProvider.activateSelectionAction() File: lib/providers/app_provider.dart - - activateSelectionAction - 4 + + activateSelectionAction + 4 - - - - + + + + 5 LOC in Method: AppProvider.clearSelectionAndRestorePreviousTool() File: lib/providers/app_provider.dart - - clearSelectionAndRestorePreviousTool - 5 + + clearSelectionAndRestorePreviousTool + 5 - - - - - 28 LOC in Method: AppProvider.selectedAction() + <rect x="669.170257241745" y="1710.4146987871866" width="85.78620669141033" height="52.514893560361905" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="669.170257241745" y="1710.4146987871866" width="85.78620669141033" height="52.514893560361905" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="669.170257241745" y="1710.4146987871866" width="85.78620669141033" height="52.514893560361905" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="669.170257241745" y="1710.4146987871866" width="85.78620669141033" height="52.514893560361905" fill="transparent" pointer-events="all"> + <title>34 LOC in Method: AppProvider.selectedAction() File: lib/providers/app_provider.dart - - selectedAction - 28 + + selectedAction + 34 - - - - + + + + 2 LOC in Method: AppProvider.selectedAction() File: lib/providers/app_provider.dart - - selectedAction - 2 + + selectedAction + 2 - - - - + + + + 2 LOC in Method: AppProvider.brushSize() File: lib/providers/app_provider.dart - - brushSize - 2 + + brushSize + 2 - - - - + + + + 2 LOC in Method: AppProvider.isBrushSizePreviewVisible() File: lib/providers/app_provider.dart - - isBrushSizePreviewVisible - 2 + + isBrushSizePreviewVisible + 2 - - - - + + + + 2 LOC in Method: AppProvider.brushSizePreviewSize() File: lib/providers/app_provider.dart - - brushSizePreviewSize - 2 + + brushSizePreviewSize + 2 - - - - + + + + 2 LOC in Method: AppProvider.brushSizePreviewPosition() File: lib/providers/app_provider.dart - - brushSizePreviewPosition - 2 + + brushSizePreviewPosition + 2 - - - - + + + + 2 LOC in Method: AppProvider.brushSizePreviewColor() File: lib/providers/app_provider.dart - - brushSizePreviewColor - 2 + + brushSizePreviewColor + 2 - - - - + + + + 2 LOC in Method: AppProvider.isPixelBrushGestureVisible() File: lib/providers/app_provider.dart - - isPixelBrushGestureVisible - 2 + + isPixelBrushGestureVisible + 2 - - - - + + + + 2 LOC in Method: AppProvider.pixelBrushGesturePoints() File: lib/providers/app_provider.dart - - pixelBrushGesturePoints - 2 + + pixelBrushGesturePoints + 2 - - - - + + + + 2 LOC in Method: AppProvider.pixelBrushGestureSize() File: lib/providers/app_provider.dart - - pixelBrushGestureSize - 2 + + pixelBrushGestureSize + 2 - - - - + + + + 3 LOC in Method: AppProvider.isPixelBrushCommitting() File: lib/providers/app_provider.dart - - isPixelBrushCommitting - 3 + + isPixelBrushCommitting + 3 - - - - + + + + 10 LOC in Method: AppProvider.setPixelBrushCommitting() File: lib/providers/app_provider.dart - - setPixelBrushCommitting - 10 + + setPixelBrushCommitting + 10 - - - - + + + + 11 LOC in Method: AppProvider.showPixelBrushGesture() File: lib/providers/app_provider.dart - - showPixelBrushGesture - 11 + + showPixelBrushGesture + 11 - - - - + + + + 10 LOC in Method: AppProvider.clearPixelBrushGesture() File: lib/providers/app_provider.dart - - clearPixelBrushGesture - 10 + + clearPixelBrushGesture + 10 - - - - + + + + 7 LOC in Method: AppProvider.brushSize() File: lib/providers/app_provider.dart - - brushSize - 7 + + brushSize + 7 - - - - + + + + 7 LOC in Method: AppProvider._showBrushSizePreview() File: lib/providers/app_provider.dart - - _showBrushSizePreview - 7 + + _showBrushSizePreview + 7 - - - - + + + + 10 LOC in Method: AppProvider.showDrawingToolPreviewAt() File: lib/providers/app_provider.dart - - showDrawingToolPreviewAt - 10 + + showDrawingToolPreviewAt + 10 - - - - + + + + 9 LOC in Method: AppProvider._hideBrushSizePreview() File: lib/providers/app_provider.dart - - _hideBrushSizePreview - 9 + + _hideBrushSizePreview + 9 - - - - + + + + 4 LOC in Method: AppProvider.hideDrawingToolPreview() File: lib/providers/app_provider.dart - - hideDrawingToolPreview - 4 + + hideDrawingToolPreview + 4 - - - - - 11 LOC in Method: AppProvider.brushIntensity() + <rect x="935.4452663278001" y="1889.0884186741991" width="22.24752034139364" height="11.911581325800839" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="935.4452663278001" y="1889.0884186741991" width="22.24752034139364" height="11.911581325800839" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="935.4452663278001" y="1889.0884186741991" width="22.24752034139364" height="11.911581325800839" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="935.4452663278001" y="1889.0884186741991" width="22.24752034139364" height="11.911581325800839" fill="transparent" pointer-events="all"> + <title>2 LOC in Method: AppProvider.isWandToleranceHudVisible() File: lib/providers/app_provider.dart - - brushIntensity - 11 + + isWandToleranceHudVisible + 2 - - - - - 15 LOC in Method: AppProvider.brushIntensity() + <rect x="865.805892759167" y="1870.7940277323087" width="20.470808647462892" height="12.945416686153363" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="865.805892759167" y="1870.7940277323087" width="20.470808647462892" height="12.945416686153363" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="865.805892759167" y="1870.7940277323087" width="20.470808647462892" height="12.945416686153363" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="865.805892759167" y="1870.7940277323087" width="20.470808647462892" height="12.945416686153363" fill="transparent" pointer-events="all"> + <title>2 LOC in Method: AppProvider.wandToleranceHudTolerance() File: lib/providers/app_provider.dart - - brushIntensity - 15 + + wandToleranceHudTolerance + 2 - - - - - 2 LOC in Method: AppProvider.brushStyle() + <rect x="886.27670140663" y="1857.8486110461554" width="10.235404323731448" height="25.890833372306727" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="886.27670140663" y="1857.8486110461554" width="10.235404323731448" height="25.890833372306727" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="886.27670140663" y="1857.8486110461554" width="10.235404323731448" height="25.890833372306727" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="886.27670140663" y="1857.8486110461554" width="10.235404323731448" height="25.890833372306727" fill="transparent" pointer-events="all"> + <title>2 LOC in Method: AppProvider.wandToleranceHudPosition() File: lib/providers/app_provider.dart - - brushStyle - 2 + + wandToleranceHudPosition + 2 - - - - - 6 LOC in Method: AppProvider.brushStyle() + <rect x="802.7366047666007" y="1861.4090591886177" width="20.08058983289404" height="39.590940811382474" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="802.7366047666007" y="1861.4090591886177" width="20.08058983289404" height="39.590940811382474" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="802.7366047666007" y="1861.4090591886177" width="20.08058983289404" height="39.590940811382474" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="802.7366047666007" y="1861.4090591886177" width="20.08058983289404" height="39.590940811382474" fill="transparent" pointer-events="all"> + <title>6 LOC in Method: AppProvider.showWandToleranceHud() File: lib/providers/app_provider.dart - - brushStyle - 6 + + showWandToleranceHud + 6 - - - - + + + + + 9 LOC in Method: AppProvider.hideWandToleranceHud() + +File: lib/providers/app_provider.dart + + + hideWandToleranceHud + 9 + + + + + + + + 11 LOC in Method: AppProvider.brushIntensity() + +File: lib/providers/app_provider.dart + + + brushIntensity + 11 + + + + + + + + 15 LOC in Method: AppProvider.brushIntensity() + +File: lib/providers/app_provider.dart + + + brushIntensity + 15 + + + + + + + + 2 LOC in Method: AppProvider.brushStyle() + +File: lib/providers/app_provider.dart + + + brushStyle + 2 + + + + + + + + 6 LOC in Method: AppProvider.brushStyle() + +File: lib/providers/app_provider.dart + + + brushStyle + 6 + + + + + + + 2 LOC in Method: AppProvider.brushColor() File: lib/providers/app_provider.dart - - brushColor - 2 + + brushColor + 2 - - - - + + + + 6 LOC in Method: AppProvider.brushColor() File: lib/providers/app_provider.dart - - brushColor - 6 + + brushColor + 6 - - - - + + + + 2 LOC in Method: AppProvider.fillColor() File: lib/providers/app_provider.dart - - fillColor - 2 + + fillColor + 2 - - - - + + + + 6 LOC in Method: AppProvider.fillColor() File: lib/providers/app_provider.dart - - fillColor - 6 + + fillColor + 6 - - - - + + + + 2 LOC in Method: AppProvider.tolerance() File: lib/providers/app_provider.dart - - tolerance - 2 + + tolerance + 2 - - - - + + + + 6 LOC in Method: AppProvider.tolerance() File: lib/providers/app_provider.dart - - tolerance - 6 + + tolerance + 6 - - - - + + + + 10 LOC in Method: AppProvider.applyTextToolState() File: lib/providers/app_provider.dart - - applyTextToolState - 10 + + applyTextToolState + 10 - - - - + + + + 4 LOC in Method: AppProvider.adoptTextToolStateFromObject() File: lib/providers/app_provider.dart - - adoptTextToolStateFromObject - 4 + + adoptTextToolStateFromObject + 4 - - - - + + + + 2 LOC in Method: AppProvider.eyeDropPositionForBrush() File: lib/providers/app_provider.dart - - eyeDropPositionForBrush - 2 + + eyeDropPositionForBrush + 2 - - - - + + + + 8 LOC in Method: AppProvider.eyeDropPositionForBrush() File: lib/providers/app_provider.dart - - eyeDropPositionForBrush - 8 + + eyeDropPositionForBrush + 8 - - - - + + + + 2 LOC in Method: AppProvider.eyeDropPositionForFill() File: lib/providers/app_provider.dart - - eyeDropPositionForFill - 2 + + eyeDropPositionForFill + 2 - - - - + + + + 8 LOC in Method: AppProvider.eyeDropPositionForFill() File: lib/providers/app_provider.dart - - eyeDropPositionForFill - 8 + + eyeDropPositionForFill + 8 - - - - + + + + 2 LOC in Method: AppProvider.hasActiveTransformOverlay() File: lib/providers/app_provider.dart - - hasActiveTransformOverlay - 2 + + hasActiveTransformOverlay + 2 - - - - + + + + 6 LOC in Method: AppProvider.setFillMode() File: lib/providers/app_provider.dart - - setFillMode - 6 + + setFillMode + 6 - - - - + + + + 6 LOC in Method: AppProvider.setFillHalftoneEnabled() File: lib/providers/app_provider.dart - - setFillHalftoneEnabled - 6 + + setFillHalftoneEnabled + 6 - - - - + + + + 6 LOC in Method: AppProvider.setFillHalftoneMaxDotSizePercent() File: lib/providers/app_provider.dart - - setFillHalftoneMaxDotSizePercent - 6 + + setFillHalftoneMaxDotSizePercent + 6 - - - - + + + + 6 LOC in Method: AppProvider.setSelectorMode() File: lib/providers/app_provider.dart - - setSelectorMode - 6 + + setSelectorMode + 6 + + + + + + + + 5 LOC in Method: AppProvider.isWandSelectionActive() + +File: lib/providers/app_provider.dart + + + isWandSelectionActive + 5 - - - - + + + + 6 LOC in Method: AppProvider.setSelectorMath() File: lib/providers/app_provider.dart - - setSelectorMath - 6 + + setSelectorMath + 6 - - - - + + + + 6 LOC in Method: AppProvider.setTextToolSize() File: lib/providers/app_provider.dart - - setTextToolSize - 6 + + setTextToolSize + 6 - - - - + + + + 6 LOC in Method: AppProvider.setTextToolColor() File: lib/providers/app_provider.dart - - setTextToolColor - 6 + + setTextToolColor + 6 - - - - + + + + 6 LOC in Method: AppProvider.update() File: lib/providers/app_provider.dart - - update - 6 + + update + 6 - - - - - 337 LOC File: lib/providers/app_preferences.dart + + + + + 395 LOC File: lib/providers/app_preferences.dart - app_preferences.dart - 337 LOC + app_preferences.dart + 395 LOC - - - - - 321 LOC in Class: AppPreferences + <rect x="994.8165468398906" y="1324.4031668696712" width="189.29395784025124" height="261.03629298362193" rx="5.00" ry="5.00" fill="#9eb89a" fill-opacity="0.78"/> + <rect x="994.8165468398906" y="1324.4031668696712" width="189.29395784025124" height="261.03629298362193" rx="5.00" ry="5.00" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="994.8165468398906" y="1324.4031668696712" width="189.29395784025124" height="261.03629298362193" rx="5.00" ry="5.00" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="994.8165468398906" y="1324.4031668696712" width="189.29395784025124" height="261.03629298362193" rx="5.00" ry="5.00" fill="transparent" pointer-events="all"> + <title>379 LOC in Class: AppPreferences File: lib/providers/app_preferences.dart - AppPreferences - 321 LOC + AppPreferences + 379 LOC - - - - + + + + 3 LOC in Method: AppPreferences.AppPreferences() File: lib/providers/app_preferences.dart - - AppPreferences - 3 + + AppPreferences + 3 - - - - + + + + 5 LOC in Method: AppPreferences.of() File: lib/providers/app_preferences.dart - - of - 5 + + of + 5 - - - - + + + + 2 LOC in Method: AppPreferences.isLoaded() File: lib/providers/app_preferences.dart - - isLoaded - 2 + + isLoaded + 2 - - - - + + + + 2 LOC in Method: AppPreferences.sidePanelDistance() File: lib/providers/app_preferences.dart - - sidePanelDistance - 2 + + sidePanelDistance + 2 - - - - + + + + 2 LOC in Method: AppPreferences.brushSize() File: lib/providers/app_preferences.dart - - brushSize - 2 + + brushSize + 2 - - - - + + + + 2 LOC in Method: AppPreferences.brushColor() File: lib/providers/app_preferences.dart - - brushColor - 2 + + brushColor + 2 - - - - + + + + 2 LOC in Method: AppPreferences.smudgeIntensity() File: lib/providers/app_preferences.dart - - smudgeIntensity - 2 + + smudgeIntensity + 2 - - - - + + + + 2 LOC in Method: AppPreferences.blurBrushIntensity() File: lib/providers/app_preferences.dart - - blurBrushIntensity - 2 + + blurBrushIntensity + 2 - - - - + + + + 2 LOC in Method: AppPreferences.fillColor() File: lib/providers/app_preferences.dart - - fillColor - 2 + + fillColor + 2 - - - - + + + + 2 LOC in Method: AppPreferences.useApplePencil() File: lib/providers/app_preferences.dart - - useApplePencil - 2 + + useApplePencil + 2 - - - - + + + + 2 LOC in Method: AppPreferences.keepSaveBackups() File: lib/providers/app_preferences.dart - - keepSaveBackups - 2 + + keepSaveBackups + 2 - - - - + + + + 4 LOC in Method: AppPreferences.languageCode() File: lib/providers/app_preferences.dart - - languageCode - 4 + + languageCode + 4 - - - - + + + + 4 LOC in Method: AppPreferences.preferredLocale() File: lib/providers/app_preferences.dart - - preferredLocale - 4 + + preferredLocale + 4 - - - - + + + + 2 LOC in Method: AppPreferences.recentFiles() File: lib/providers/app_preferences.dart - - recentFiles - 2 + + recentFiles + 2 - - - - + + + + 2 LOC in Method: AppPreferences.getBookmark() File: lib/providers/app_preferences.dart - - getBookmark - 2 + + getBookmark + 2 - - - - + + + + + 4 LOC in Method: AppPreferences.lastSelectedLayerFor() + +File: lib/providers/app_preferences.dart + + + lastSelectedLayerFor + 4 + + + + + + + 5 LOC in Method: AppPreferences.getPref() File: lib/providers/app_preferences.dart - - getPref - 5 + + getPref + 5 - - - - + + + + 7 LOC in Method: AppPreferences.setSidePanelDistance() File: lib/providers/app_preferences.dart - - setSidePanelDistance - 7 + + setSidePanelDistance + 7 - - - - + + + + 5 LOC in Method: AppPreferences.setBrushSize() File: lib/providers/app_preferences.dart - - setBrushSize - 5 + + setBrushSize + 5 - - - - + + + + 5 LOC in Method: AppPreferences.setSmudgeIntensity() File: lib/providers/app_preferences.dart - - setSmudgeIntensity - 5 + + setSmudgeIntensity + 5 - - - - + + + + 5 LOC in Method: AppPreferences.setBlurBrushIntensity() File: lib/providers/app_preferences.dart - - setBlurBrushIntensity - 5 + + setBlurBrushIntensity + 5 - - - - + + + + 5 LOC in Method: AppPreferences.setBrushColor() File: lib/providers/app_preferences.dart - - setBrushColor - 5 + + setBrushColor + 5 - - - - + + + + 5 LOC in Method: AppPreferences.setFillColor() File: lib/providers/app_preferences.dart - - setFillColor - 5 + + setFillColor + 5 - - - - + + + + 8 LOC in Method: AppPreferences.setUseApplePencil() File: lib/providers/app_preferences.dart - - setUseApplePencil - 8 + + setUseApplePencil + 8 - - - - + + + + 8 LOC in Method: AppPreferences.setKeepSaveBackups() File: lib/providers/app_preferences.dart - - setKeepSaveBackups - 8 + + setKeepSaveBackups + 8 - - - - + + + + 14 LOC in Method: AppPreferences.setLanguageCode() File: lib/providers/app_preferences.dart - - setLanguageCode - 14 + + setLanguageCode + 14 - - - - + + + + 9 LOC in Method: AppPreferences.setRecoveryDraftSourceFilePath() File: lib/providers/app_preferences.dart - - setRecoveryDraftSourceFilePath - 9 + + setRecoveryDraftSourceFilePath + 9 - - - - + + + + 4 LOC in Method: AppPreferences.getRecoveryDraftSourceFilePath() File: lib/providers/app_preferences.dart - - getRecoveryDraftSourceFilePath - 4 + + getRecoveryDraftSourceFilePath + 4 - - - - + + + + 4 LOC in Method: AppPreferences.clearRecoveryDraftSourceFilePath() File: lib/providers/app_preferences.dart - - clearRecoveryDraftSourceFilePath - 4 + + clearRecoveryDraftSourceFilePath + 4 - - - - + + + + 22 LOC in Method: AppPreferences.addRecentFile() File: lib/providers/app_preferences.dart - - addRecentFile - 22 + + addRecentFile + 22 - - - - + + + + 9 LOC in Method: AppPreferences.removeRecentFile() File: lib/providers/app_preferences.dart - - removeRecentFile - 9 + + removeRecentFile + 9 + + + + + + + + 27 LOC in Method: AppPreferences.recordLastSelectedLayer() + +File: lib/providers/app_preferences.dart + + + recordLastSelectedLayer + 27 + + + + + + + + 14 LOC in Method: AppPreferences._loadLastLayerSelections() + +File: lib/providers/app_preferences.dart + + + _loadLastLayerSelections + 14 - - - - + + + + 6 LOC in Method: AppPreferences._pruneRecentFileBookmarks() File: lib/providers/app_preferences.dart - - _pruneRecentFileBookmarks - 6 + + _pruneRecentFileBookmarks + 6 - - - - + + + + 12 LOC in Method: AppPreferences._persistRecentFileBookmarks() File: lib/providers/app_preferences.dart - - _persistRecentFileBookmarks - 12 + + _persistRecentFileBookmarks + 12 - - - - + + + + 22 LOC in Method: AppPreferences._ensureLoaded() File: lib/providers/app_preferences.dart - - _ensureLoaded - 22 + + _ensureLoaded + 22 - - - - + + + + 7 LOC in Method: AppPreferences._loadInitialPreferences() File: lib/providers/app_preferences.dart - - _loadInitialPreferences - 7 + + _loadInitialPreferences + 7 - - - - - 25 LOC in Method: AppPreferences._loadPreferences() + <rect x="1054.4446428509993" y="1348.4031668696712" width="40.46526444113919" height="84.90994010466486" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="1054.4446428509993" y="1348.4031668696712" width="40.46526444113919" height="84.90994010466486" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1054.4446428509993" y="1348.4031668696712" width="40.46526444113919" height="84.90994010466486" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1054.4446428509993" y="1348.4031668696712" width="40.46526444113919" height="84.90994010466486" fill="transparent" pointer-events="all"> + <title>29 LOC in Method: AppPreferences._loadPreferences() File: lib/providers/app_preferences.dart - - _loadPreferences - 25 + + _loadPreferences + 29 - - - - + + + + 24 LOC in Method: AppPreferences._loadRecentFileBookmarks() File: lib/providers/app_preferences.dart - - _loadRecentFileBookmarks - 24 + + _loadRecentFileBookmarks + 24 - - - - + + + + 37 LOC in Method: AppPreferences._decodeStoredRecentFileBookmark() File: lib/providers/app_preferences.dart - - _decodeStoredRecentFileBookmark - 37 + + _decodeStoredRecentFileBookmark + 37 - - - - + + + + 8 LOC in Class: _LoadedRecentFileBookmarks File: lib/providers/app_preferences.dart - _LoadedRecentFileBookmarks - 8 LOC + _LoadedRecentFileBookmarks + 8 LOC - - - - + + + + 8 LOC in Class: _DecodedRecentFileBookmark File: lib/providers/app_preferences.dart - _DecodedRecentFileBookmark - 8 LOC + _DecodedRecentFileBookmark + 8 LOC + + + + + + + + 313 LOC File: lib/providers/app_provider_selection_effects.dart + + app_provider_selection_effects.dart + 313 LOC + + + + + + 296 LOC in Class: <...> + +File: lib/providers/app_provider_selection_effects.dart + + <...> + 296 LOC + + + + + + 18 LOC in Method: ._currentEffectPreviewState() + +File: lib/providers/app_provider_selection_effects.dart + + + _currentEffectPreviewState + 18 + + + + + + + + 16 LOC in Method: ._updateEffectPreviewControls() + +File: lib/providers/app_provider_selection_effects.dart + + + _updateEffectPreviewControls + 16 + + + + + + + + 20 LOC in Method: ._maskEffectImageToSelection() + +File: lib/providers/app_provider_selection_effects.dart + + + _maskEffectImageToSelection + 20 + + + + + + + + 15 LOC in Method: ._buildMaskedEffectImage() + +File: lib/providers/app_provider_selection_effects.dart + + + _buildMaskedEffectImage + 15 + + + + + + + + 26 LOC in Method: ._captureEffectTarget() + +File: lib/providers/app_provider_selection_effects.dart + + + _captureEffectTarget + 26 + + + + + + + + 29 LOC in Method: .startEffectPreview() + +File: lib/providers/app_provider_selection_effects.dart + + + startEffectPreview + 29 + + + + + + + + 4 LOC in Method: .updateEffectPreviewStrength() + +File: lib/providers/app_provider_selection_effects.dart + + + updateEffectPreviewStrength + 4 + + + + + + + + 4 LOC in Method: .updateEffectPreviewSize() + +File: lib/providers/app_provider_selection_effects.dart + + + updateEffectPreviewSize + 4 + + + + + + + + 17 LOC in Method: .confirmEffectPreview() + +File: lib/providers/app_provider_selection_effects.dart + + + confirmEffectPreview + 17 + + + + + + + + 10 LOC in Method: .cancelEffectPreview() + +File: lib/providers/app_provider_selection_effects.dart + + + cancelEffectPreview + 10 + + + + + + + + 14 LOC in Method: ._renderEffectPreview() + +File: lib/providers/app_provider_selection_effects.dart + + + _renderEffectPreview + 14 + + + + + + + + 10 LOC in Method: .armEffectBrush() + +File: lib/providers/app_provider_selection_effects.dart + + + armEffectBrush + 10 + + + + + + + + 6 LOC in Method: .disarmEffectBrush() + +File: lib/providers/app_provider_selection_effects.dart + + + disarmEffectBrush + 6 + + + + + + + + 5 LOC in Method: .setEffectBrushStrength() + +File: lib/providers/app_provider_selection_effects.dart + + + setEffectBrushStrength + 5 + + + + + + + + 76 LOC in Method: .commitEffectBrushStroke() + +File: lib/providers/app_provider_selection_effects.dart + + + commitEffectBrushStroke + 76 + + + + + + + + 26 LOC in Method: ._effectBrushBandPath() + +File: lib/providers/app_provider_selection_effects.dart + + + _effectBrushBandPath + 26 + + + + + + + + + 17 LOC in Class: _SelectionEffectPreviewState + +File: lib/providers/app_provider_selection_effects.dart + + _SelectionEffectPreviewState + 17 LOC - - - - + + + + 246 LOC File: lib/providers/layer_provider_transform.dart - layer_provider_transform.dart - 246 LOC + layer_provider_transform.dart + 246 LOC - - - - + + + + 246 LOC in Class: <...> File: lib/providers/layer_provider_transform.dart - <...> - 246 LOC + <...> + 246 LOC - - - - + + + + 121 LOC in Method: .rotate90Clockwise() File: lib/providers/layer_provider_transform.dart - - rotate90Clockwise - 121 + + rotate90Clockwise + 121 - - - - + + + + 5 LOC in Method: .flipHorizontal() File: lib/providers/layer_provider_transform.dart - - flipHorizontal - 5 + + flipHorizontal + 5 - - - - + + + + 5 LOC in Method: .flipVertical() File: lib/providers/layer_provider_transform.dart - - flipVertical - 5 + + flipVertical + 5 - - - - + + + + 59 LOC in Method: ._flip() File: lib/providers/layer_provider_transform.dart - - _flip - 59 + + _flip + 59 - - - - + + + + 19 LOC in Method: ._transformPath() File: lib/providers/layer_provider_transform.dart - - _transformPath - 19 + + _transformPath + 19 - - - - + + + + 12 LOC in Method: ._flipImage() File: lib/providers/layer_provider_transform.dart - - _flipImage - 12 + + _flipImage + 12 - - - - + + + + 25 LOC in Method: ._flipTextObject() File: lib/providers/layer_provider_transform.dart - - _flipTextObject - 25 + + _flipTextObject + 25 - - - - + + + + 239 LOC File: lib/providers/fill_service.dart - fill_service.dart - 239 LOC + fill_service.dart + 239 LOC - - - - + + + + 212 LOC in Class: FillService File: lib/providers/fill_service.dart - FillService - 212 LOC + FillService + 212 LOC - - - - + + + + 7 LOC in Method: FillService._buildEmptyFloodFillAction() File: lib/providers/fill_service.dart - - _buildEmptyFloodFillAction - 7 + + _buildEmptyFloodFillAction + 7 - - - - + + + + 36 LOC in Method: FillService.createFloodFillSolidAction() File: lib/providers/fill_service.dart - - createFloodFillSolidAction - 36 + + createFloodFillSolidAction + 36 - - - - + + + + 53 LOC in Method: FillService.createFloodFillGradientAction() File: lib/providers/fill_service.dart - - createFloodFillGradientAction - 53 + + createFloodFillGradientAction + 53 - - - - + + + + 18 LOC in Method: FillService._resolveFloodFillPath() File: lib/providers/fill_service.dart - - _resolveFloodFillPath - 18 + + _resolveFloodFillPath + 18 - - - - + + + + 28 LOC in Method: FillService._buildFloodFillGradient() File: lib/providers/fill_service.dart - - _buildFloodFillGradient - 28 + + _buildFloodFillGradient + 28 - - - - + + + + 7 LOC in Method: FillService._hasUsableGradientConfiguration() File: lib/providers/fill_service.dart - - _hasUsableGradientConfiguration - 7 + + _hasUsableGradientConfiguration + 7 - - - - + + + + 10 LOC in Method: FillService._pointToBoundsAlignment() File: lib/providers/fill_service.dart - - _pointToBoundsAlignment - 10 + + _pointToBoundsAlignment + 10 - - - - + + + + 35 LOC in Method: FillService.getRegionPathFromImage() File: lib/providers/fill_service.dart - - getRegionPathFromImage - 35 + + getRegionPathFromImage + 35 - - - - + + + + 15 LOC in Method: FillService._buildFillImageData() File: lib/providers/fill_service.dart - - _buildFillImageData - 15 + + _buildFillImageData + 15 - - - - + + + + 18 LOC in Class: FillImageData File: lib/providers/fill_service.dart - FillImageData - 18 LOC + FillImageData + 18 LOC - - - - + + + + 9 LOC in Class: FillRegion File: lib/providers/fill_service.dart - FillRegion - 9 LOC + FillRegion + 9 LOC - - - - + + + + 238 LOC File: lib/providers/layer_provider_display_cache.dart - layer_provider_display_cache.dart - 238 LOC + layer_provider_display_cache.dart + 238 LOC - - - - + + + + 238 LOC in Class: <...> File: lib/providers/layer_provider_display_cache.dart - <...> - 238 LOC + <...> + 238 LOC - - - - + + + + 13 LOC in Method: ._targetDisplayScale() File: lib/providers/layer_provider_display_cache.dart - - _targetDisplayScale - 13 + + _targetDisplayScale + 13 - - - - + + + + 3 LOC in Method: ._displayCacheSufficientFor() File: lib/providers/layer_provider_display_cache.dart - - _displayCacheSufficientFor - 3 + + _displayCacheSufficientFor + 3 - - - - + + + + 8 LOC in Method: ._hasTextContent() File: lib/providers/layer_provider_display_cache.dart - - _hasTextContent - 8 + + _hasTextContent + 8 - - - - + + + + 43 LOC in Method: .renderLayerForDisplay() File: lib/providers/layer_provider_display_cache.dart - - renderLayerForDisplay - 43 + + renderLayerForDisplay + 43 - - - - + + + + 35 LOC in Method: .buildDisplayCache() File: lib/providers/layer_provider_display_cache.dart - - buildDisplayCache - 35 + + buildDisplayCache + 35 - - - - + + + + 49 LOC in Method: .updateDisplayCacheWithPatch() File: lib/providers/layer_provider_display_cache.dart - - updateDisplayCacheWithPatch - 49 + + updateDisplayCacheWithPatch + 49 - - - - + + + + 6 LOC in Method: .invalidateDisplayCache() File: lib/providers/layer_provider_display_cache.dart - - invalidateDisplayCache - 6 + + invalidateDisplayCache + 6 - - - - + + + + 10 LOC in Method: .invalidateFullResCache() File: lib/providers/layer_provider_display_cache.dart - - invalidateFullResCache - 10 + + invalidateFullResCache + 10 - - - - + + + + 8 LOC in Method: .supportsIncrementalPixelBrushCache() File: lib/providers/layer_provider_display_cache.dart - - supportsIncrementalPixelBrushCache - 8 + + supportsIncrementalPixelBrushCache + 8 - - - - + + + + 16 LOC in Method: .ensureCachePrimed() File: lib/providers/layer_provider_display_cache.dart - - ensureCachePrimed - 16 + + ensureCachePrimed + 16 - - - - + + + + 27 LOC in Method: ._renderThumbnailFromImage() File: lib/providers/layer_provider_display_cache.dart - - _renderThumbnailFromImage - 27 + + _renderThumbnailFromImage + 27 - - - - + + + + 20 LOC in Method: .refreshThumbnailFromDisplayCache() File: lib/providers/layer_provider_display_cache.dart - - refreshThumbnailFromDisplayCache - 20 + + refreshThumbnailFromDisplayCache + 20 - - - - + + + + 221 LOC File: lib/providers/app_provider_tools.dart - app_provider_tools.dart - 221 LOC + app_provider_tools.dart + 221 LOC - - - - + + + + 221 LOC in Class: <...> File: lib/providers/app_provider_tools.dart - <...> - 221 LOC + <...> + 221 LOC - - - - + + + + 10 LOC in Function: isFloodFillOriginModifierPressedForPlatform() File: lib/providers/app_provider_tools.dart - - isFloodFillOriginModifierPressedForPlatform - 10 + + isFloodFillOriginModifierPressedForPlatform + 10 - - - - + + + + 9 LOC in Function: shouldUseSelectionRegionFloodFill() File: lib/providers/app_provider_tools.dart - - shouldUseSelectionRegionFloodFill - 9 + + shouldUseSelectionRegionFloodFill + 9 - - - - + + + + 13 LOC in Function: shouldCreateSelectionFromFloodFillTap() File: lib/providers/app_provider_tools.dart - - shouldCreateSelectionFromFloodFillTap - 13 + + shouldCreateSelectionFromFloodFillTap + 13 - - - - + + + + 8 LOC in Method: ._isOriginFloodFillModifierPressed() File: lib/providers/app_provider_tools.dart - - _isOriginFloodFillModifierPressed - 8 + + _isOriginFloodFillModifierPressed + 8 - - - - + + + + 14 LOC in Method: ._selectionRegionFloodFillOverridePath() File: lib/providers/app_provider_tools.dart - - _selectionRegionFloodFillOverridePath - 14 + + _selectionRegionFloodFillOverridePath + 14 - - - - + + + + 11 LOC in Method: ._getFloodFillSourceImage() File: lib/providers/app_provider_tools.dart - - _getFloodFillSourceImage - 11 + + _getFloodFillSourceImage + 11 - - - - + + + + 24 LOC in Method: .updateAction() File: lib/providers/app_provider_tools.dart - - updateAction - 24 + + updateAction + 24 - - - - + + + + 6 LOC in Method: .updateActionEnd() File: lib/providers/app_provider_tools.dart - - updateActionEnd - 6 + + updateActionEnd + 6 - - - - + + + + 25 LOC in Method: .appendLineFromLastUserAction() File: lib/providers/app_provider_tools.dart - - appendLineFromLastUserAction - 25 + + appendLineFromLastUserAction + 25 - - - - + + + + 31 LOC in Method: .prepareFloodFillSelection() File: lib/providers/app_provider_tools.dart - - prepareFloodFillSelection - 31 + + prepareFloodFillSelection + 31 - - - - + + + + 34 LOC in Method: .floodFillSolidAction() File: lib/providers/app_provider_tools.dart - - floodFillSolidAction - 34 + + floodFillSolidAction + 34 - - - - + + + + 23 LOC in Method: .floodFillGradientAction() File: lib/providers/app_provider_tools.dart - - floodFillGradientAction - 23 + + floodFillGradientAction + 23 - - - - + + + + 13 LOC in Method: .updateGradientFill() File: lib/providers/app_provider_tools.dart - - updateGradientFill - 13 + + updateGradientFill + 13 - - - - + + + + 212 LOC File: lib/providers/undo_provider.dart - undo_provider.dart - 212 LOC + undo_provider.dart + 212 LOC - - - - + + + + 187 LOC in Class: UndoProvider File: lib/providers/undo_provider.dart - UndoProvider - 187 LOC + UndoProvider + 187 LOC - - - - + + + + 1 LOC in Method: UndoProvider.UndoProvider() File: lib/providers/undo_provider.dart - - UndoProvider - 1 + + UndoProvider + 1 - - - - + + + + 8 LOC in Method: UndoProvider.of() File: lib/providers/undo_provider.dart - - of - 8 + + of + 8 - - - - + + + + 6 LOC in Method: UndoProvider.liveRetainedImages() File: lib/providers/undo_provider.dart - - liveRetainedImages - 6 + + liveRetainedImages + 6 - - - - + + + + 2 LOC in Method: UndoProvider.canUndo() File: lib/providers/undo_provider.dart - - canUndo - 2 + + canUndo + 2 - - - - + + + + 2 LOC in Method: UndoProvider.canRedo() File: lib/providers/undo_provider.dart - - canRedo - 2 + + canRedo + 2 - - - - + + + + 22 LOC in Method: UndoProvider.recordAction() File: lib/providers/undo_provider.dart - - recordAction - 22 + + recordAction + 22 - - - - + + + + 25 LOC in Method: UndoProvider.executeAction() File: lib/providers/undo_provider.dart - - executeAction - 25 + + executeAction + 25 - - - - + + + + 10 LOC in Method: UndoProvider.undo() File: lib/providers/undo_provider.dart - - undo - 10 + + undo + 10 - - - - + + + + 10 LOC in Method: UndoProvider.redo() File: lib/providers/undo_provider.dart - - redo - 10 + + redo + 10 - - - - + + + + 8 LOC in Method: UndoProvider.clear() File: lib/providers/undo_provider.dart - - clear - 8 + + clear + 8 - - - - + + + + 14 LOC in Method: UndoProvider._dropRecords() File: lib/providers/undo_provider.dart - - _dropRecords - 14 + + _dropRecords + 14 - - - - + + + + 34 LOC in Method: UndoProvider.trimUndoHistoryWhere() File: lib/providers/undo_provider.dart - - trimUndoHistoryWhere - 34 + + trimUndoHistoryWhere + 34 - - - - + + + + 4 LOC in Method: UndoProvider.getHistoryStringForUndo() File: lib/providers/undo_provider.dart - - getHistoryStringForUndo - 4 + + getHistoryStringForUndo + 4 - - - - + + + + 4 LOC in Method: UndoProvider.getHistoryStringForRedo() File: lib/providers/undo_provider.dart - - getHistoryStringForRedo - 4 + + getHistoryStringForRedo + 4 - - - - + + + + 9 LOC in Method: UndoProvider.getHistoryString() File: lib/providers/undo_provider.dart - - getHistoryString - 9 + + getHistoryString + 9 - - - - + + + + 12 LOC in Method: UndoProvider.getActionsAsStrings() File: lib/providers/undo_provider.dart - - getActionsAsStrings - 12 + + getActionsAsStrings + 12 - - - - + + + + 25 LOC in Class: RecordAction File: lib/providers/undo_provider.dart - RecordAction - 25 LOC + RecordAction + 25 LOC + + + + + + 6 LOC in Method: RecordAction.RecordAction() + +File: lib/providers/undo_provider.dart + + + RecordAction + 6 + + + + + + + + 4 LOC in Method: RecordAction.toString() + +File: lib/providers/undo_provider.dart + + + toString + 4 + + - - - - + + + + 168 LOC File: lib/providers/app_provider_selection_crop.dart - app_provider_selection_crop.dart - 168 LOC + app_provider_selection_crop.dart + 168 LOC - - - - + + + + 168 LOC in Class: <...> File: lib/providers/app_provider_selection_crop.dart - <...> - 168 LOC + <...> + 168 LOC - - - - + + + + 115 LOC in Method: .crop() File: lib/providers/app_provider_selection_crop.dart - - crop - 115 + + crop + 115 - - - - + + + + 24 LOC in Method: ._renderSelectionMask() File: lib/providers/app_provider_selection_crop.dart - - _renderSelectionMask - 24 + + _renderSelectionMask + 24 - - - - + + + + 29 LOC in Method: ._cropLayerToSelection() File: lib/providers/app_provider_selection_crop.dart - - _cropLayerToSelection - 29 + + _cropLayerToSelection + 29 - - - - - 162 LOC File: lib/providers/app_provider_selection_effects.dart + + + + + 144 LOC File: lib/providers/app_provider_canvas.dart - app_provider_selection_effects.dart - 162 LOC + app_provider_canvas.dart + 144 LOC - - - - - 145 LOC in Class: <...> + <rect x="1573.2673607275954" y="1505.4042601073227" width="131.07985027883527" height="121.14379420370139" rx="5.00" ry="5.00" fill="#9eb89a" fill-opacity="0.45"/> + <rect x="1573.2673607275954" y="1505.4042601073227" width="131.07985027883527" height="121.14379420370139" rx="5.00" ry="5.00" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1573.2673607275954" y="1505.4042601073227" width="131.07985027883527" height="121.14379420370139" rx="5.00" ry="5.00" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8" stroke-dasharray="6,4"/> + <rect x="1573.2673607275954" y="1505.4042601073227" width="131.07985027883527" height="121.14379420370139" rx="5.00" ry="5.00" fill="transparent" pointer-events="all"> + <title>144 LOC in Class: <...> -File: lib/providers/app_provider_selection_effects.dart +File: lib/providers/app_provider_canvas.dart - <...> - 145 LOC + <...> + 144 LOC - - - - - 18 LOC in Method: ._currentEffectPreviewState() + <rect x="1640.4056171208856" y="1575.249639983512" width="31.26147893603981" height="18.23091129579457" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="1640.4056171208856" y="1575.249639983512" width="31.26147893603981" height="18.23091129579457" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1640.4056171208856" y="1575.249639983512" width="31.26147893603981" height="18.23091129579457" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1640.4056171208856" y="1575.249639983512" width="31.26147893603981" height="18.23091129579457" fill="transparent" pointer-events="all"> + <title>8 LOC in Method: .canvasClear() -File: lib/providers/app_provider_selection_effects.dart +File: lib/providers/app_provider_canvas.dart - - _currentEffectPreviewState - 18 + + canvasClear + 8 - - - - - 16 LOC in Method: ._updateEffectPreviewControls() + <rect x="1671.6670960569254" y="1589.6824447593494" width="24.680114949505114" height="11.546243820669893" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="1671.6670960569254" y="1589.6824447593494" width="24.680114949505114" height="11.546243820669893" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1671.6670960569254" y="1589.6824447593494" width="24.680114949505114" height="11.546243820669893" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1671.6670960569254" y="1589.6824447593494" width="24.680114949505114" height="11.546243820669893" fill="transparent" pointer-events="all"> + <title>4 LOC in Method: .toCanvas() -File: lib/providers/app_provider_selection_effects.dart +File: lib/providers/app_provider_canvas.dart - - _updateEffectPreviewControls - 16 + + toCanvas + 4 - - - - - 20 LOC in Method: ._maskEffectImageToSelection() + <rect x="1671.6670960569254" y="1601.2286885800193" width="16.453409966336743" height="17.319365731004844" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="1671.6670960569254" y="1601.2286885800193" width="16.453409966336743" height="17.319365731004844" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1671.6670960569254" y="1601.2286885800193" width="16.453409966336743" height="17.319365731004844" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1671.6670960569254" y="1601.2286885800193" width="16.453409966336743" height="17.319365731004844" fill="transparent" pointer-events="all"> + <title>4 LOC in Method: .fromCanvas() -File: lib/providers/app_provider_selection_effects.dart +File: lib/providers/app_provider_canvas.dart - - _maskEffectImageToSelection - 20 + + fromCanvas + 4 - - - - - 15 LOC in Method: ._buildMaskedEffectImage() + <rect x="1581.2673607275954" y="1529.4042601073227" width="33.007398917185306" height="51.79977230755621" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="1581.2673607275954" y="1529.4042601073227" width="33.007398917185306" height="51.79977230755621" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1581.2673607275954" y="1529.4042601073227" width="33.007398917185306" height="51.79977230755621" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1581.2673607275954" y="1529.4042601073227" width="33.007398917185306" height="51.79977230755621" fill="transparent" pointer-events="all"> + <title>24 LOC in Method: .applyScaleToCanvas() -File: lib/providers/app_provider_selection_effects.dart +File: lib/providers/app_provider_canvas.dart - - _buildMaskedEffectImage - 15 + + applyScaleToCanvas + 24 - - - - - 27 LOC in Method: .startEffectPreview() + <rect x="1640.4056171208856" y="1607.1537347511526" width="31.26147893603981" height="11.394319559871608" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="1640.4056171208856" y="1607.1537347511526" width="31.26147893603981" height="11.394319559871608" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1640.4056171208856" y="1607.1537347511526" width="31.26147893603981" height="11.394319559871608" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1640.4056171208856" y="1607.1537347511526" width="31.26147893603981" height="11.394319559871608" fill="transparent" pointer-events="all"> + <title>5 LOC in Method: .canvasCenter() -File: lib/providers/app_provider_selection_effects.dart +File: lib/providers/app_provider_canvas.dart - - startEffectPreview - 27 + + canvasCenter + 5 - - - - - 4 LOC in Method: .updateEffectPreviewStrength() + <rect x="1581.2673607275954" y="1581.2040324148788" width="34.338342421910525" height="37.34402189614518" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="1581.2673607275954" y="1581.2040324148788" width="34.338342421910525" height="37.34402189614518" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1581.2673607275954" y="1581.2040324148788" width="34.338342421910525" height="37.34402189614518" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1581.2673607275954" y="1581.2040324148788" width="34.338342421910525" height="37.34402189614518" fill="transparent" pointer-events="all"> + <title>18 LOC in Method: .canvasPan() -File: lib/providers/app_provider_selection_effects.dart +File: lib/providers/app_provider_canvas.dart - - updateEffectPreviewStrength - 4 + + canvasPan + 18 - - - - - 4 LOC in Method: .updateEffectPreviewSize() + <rect x="1614.2747596447807" y="1529.4042601073227" width="26.130857476105035" height="51.79977230755621" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="1614.2747596447807" y="1529.4042601073227" width="26.130857476105035" height="51.79977230755621" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1614.2747596447807" y="1529.4042601073227" width="26.130857476105035" height="51.79977230755621" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1614.2747596447807" y="1529.4042601073227" width="26.130857476105035" height="51.79977230755621" fill="transparent" pointer-events="all"> + <title>19 LOC in Method: .canvasFitToContainer() -File: lib/providers/app_provider_selection_effects.dart +File: lib/providers/app_provider_canvas.dart - - updateEffectPreviewSize - 4 + + canvasFitToContainer + 19 - - - - - 17 LOC in Method: .confirmEffectPreview() + <rect x="1640.4056171208856" y="1593.4805512793066" width="31.26147893603981" height="13.673183471845928" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="1640.4056171208856" y="1593.4805512793066" width="31.26147893603981" height="13.673183471845928" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1640.4056171208856" y="1593.4805512793066" width="31.26147893603981" height="13.673183471845928" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1640.4056171208856" y="1593.4805512793066" width="31.26147893603981" height="13.673183471845928" fill="transparent" pointer-events="all"> + <title>6 LOC in Method: .resetView() -File: lib/providers/app_provider_selection_effects.dart +File: lib/providers/app_provider_canvas.dart - - confirmEffectPreview - 17 + + resetView + 6 - - - - - 10 LOC in Method: .cancelEffectPreview() + <rect x="1688.1205060232621" y="1601.2286885800193" width="8.226704983168371" height="17.319365731004844" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="1688.1205060232621" y="1601.2286885800193" width="8.226704983168371" height="17.319365731004844" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1688.1205060232621" y="1601.2286885800193" width="8.226704983168371" height="17.319365731004844" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1688.1205060232621" y="1601.2286885800193" width="8.226704983168371" height="17.319365731004844" fill="transparent" pointer-events="all"> + <title>2 LOC in Method: .canvasResizeLockAspectRatio() -File: lib/providers/app_provider_selection_effects.dart +File: lib/providers/app_provider_canvas.dart - - cancelEffectPreview - 10 + + canvasResizeLockAspectRatio + 2 - - - - - 14 LOC in Method: ._renderEffectPreview() + <rect x="1671.6670960569254" y="1575.249639983512" width="24.680114949505114" height="14.432804775837369" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="1671.6670960569254" y="1575.249639983512" width="24.680114949505114" height="14.432804775837369" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1671.6670960569254" y="1575.249639983512" width="24.680114949505114" height="14.432804775837369" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1671.6670960569254" y="1575.249639983512" width="24.680114949505114" height="14.432804775837369" fill="transparent" pointer-events="all"> + <title>5 LOC in Method: .canvasResizeLockAspectRatio() -File: lib/providers/app_provider_selection_effects.dart +File: lib/providers/app_provider_canvas.dart - - _renderEffectPreview - 14 + + canvasResizeLockAspectRatio + 5 - - - - - - - 17 LOC in Class: _SelectionEffectPreviewState - -File: lib/providers/app_provider_selection_effects.dart - - _SelectionEffectPreviewState - 17 LOC - - - - - - - 144 LOC File: lib/providers/app_provider_canvas.dart - - app_provider_canvas.dart - 144 LOC - - - - - - 144 LOC in Class: <...> - -File: lib/providers/app_provider_canvas.dart - - <...> - 144 LOC - - - - - - 8 LOC in Method: .canvasClear() + <rect x="1640.4056171208856" y="1529.4042601073227" width="37.29439592369661" height="22.922689938094642" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="1640.4056171208856" y="1529.4042601073227" width="37.29439592369661" height="22.922689938094642" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1640.4056171208856" y="1529.4042601073227" width="37.29439592369661" height="22.922689938094642" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1640.4056171208856" y="1529.4042601073227" width="37.29439592369661" height="22.922689938094642" fill="transparent" pointer-events="all"> + <title>12 LOC in Method: .newDocumentFromClipboardImage() File: lib/providers/app_provider_canvas.dart - - canvasClear - 8 + + newDocumentFromClipboardImage + 12 - - - - - 4 LOC in Method: .toCanvas() + <rect x="1615.6057031495059" y="1581.2040324148788" width="24.799913971379816" height="37.34402189614518" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="1615.6057031495059" y="1581.2040324148788" width="24.799913971379816" height="37.34402189614518" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1615.6057031495059" y="1581.2040324148788" width="24.799913971379816" height="37.34402189614518" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1615.6057031495059" y="1581.2040324148788" width="24.799913971379816" height="37.34402189614518" fill="transparent" pointer-events="all"> + <title>13 LOC in Method: .rotateCanvas90() File: lib/providers/app_provider_canvas.dart - - toCanvas - 4 + + rotateCanvas90 + 13 - - - - - 4 LOC in Method: .fromCanvas() + <rect x="1640.4056171208856" y="1552.3269500454173" width="37.29439592369661" height="22.922689938094642" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="1640.4056171208856" y="1552.3269500454173" width="37.29439592369661" height="22.922689938094642" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1640.4056171208856" y="1552.3269500454173" width="37.29439592369661" height="22.922689938094642" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1640.4056171208856" y="1552.3269500454173" width="37.29439592369661" height="22.922689938094642" fill="transparent" pointer-events="all"> + <title>12 LOC in Method: .flipCanvasHorizontal() File: lib/providers/app_provider_canvas.dart - - fromCanvas - 4 + + flipCanvasHorizontal + 12 - - - - - 24 LOC in Method: .applyScaleToCanvas() + <rect x="1677.7000130445822" y="1529.4042601073227" width="18.647197961848313" height="45.845379876189284" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="1677.7000130445822" y="1529.4042601073227" width="18.647197961848313" height="45.845379876189284" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1677.7000130445822" y="1529.4042601073227" width="18.647197961848313" height="45.845379876189284" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1677.7000130445822" y="1529.4042601073227" width="18.647197961848313" height="45.845379876189284" fill="transparent" pointer-events="all"> + <title>12 LOC in Method: .flipCanvasVertical() File: lib/providers/app_provider_canvas.dart - - applyScaleToCanvas - 24 + + flipCanvasVertical + 12 - - - - - - 5 LOC in Method: .canvasCenter() - -File: lib/providers/app_provider_canvas.dart - - - canvasCenter - 5 - - - - - - - - 18 LOC in Method: .canvasPan() - -File: lib/providers/app_provider_canvas.dart - - - canvasPan - 18 - - - - - - - - 19 LOC in Method: .canvasFitToContainer() - -File: lib/providers/app_provider_canvas.dart - - - canvasFitToContainer - 19 - - - - - - - - 6 LOC in Method: .resetView() - -File: lib/providers/app_provider_canvas.dart - - - resetView - 6 - - - - - - - - 2 LOC in Method: .canvasResizeLockAspectRatio() - -File: lib/providers/app_provider_canvas.dart - - - canvasResizeLockAspectRatio - 2 - - - - - - - 5 LOC in Method: .canvasResizeLockAspectRatio() - -File: lib/providers/app_provider_canvas.dart - - - canvasResizeLockAspectRatio - 5 - - - - - - 12 LOC in Method: .newDocumentFromClipboardImage() - -File: lib/providers/app_provider_canvas.dart - - - newDocumentFromClipboardImage - 12 - - - - - - - - 13 LOC in Method: .rotateCanvas90() - -File: lib/providers/app_provider_canvas.dart - - - rotateCanvas90 - 13 - - - - - - - - 12 LOC in Method: .flipCanvasHorizontal() - -File: lib/providers/app_provider_canvas.dart - - - flipCanvasHorizontal - 12 - - - - - - - - 12 LOC in Method: .flipCanvasVertical() - -File: lib/providers/app_provider_canvas.dart - - - flipCanvasVertical - 12 - - - - - - - - - + + + + 139 LOC File: lib/providers/layer_provider_storage_export.dart - layer_provider_storage_export.dart - 139 LOC + layer_provider_storage_export.dart + 139 LOC - - - - + + + + 139 LOC in Class: <...> File: lib/providers/layer_provider_storage_export.dart - <...> - 139 LOC + <...> + 139 LOC - - - - + + + + 27 LOC in Method: .estimateContentBoundsForStorage() File: lib/providers/layer_provider_storage_export.dart - - estimateContentBoundsForStorage - 27 + + estimateContentBoundsForStorage + 27 - - - - + + + + 12 LOC in Method: .toImageForStorageBounds() File: lib/providers/layer_provider_storage_export.dart - - toImageForStorageBounds - 12 + + toImageForStorageBounds + 12 - - - - + + + + 50 LOC in Method: ._estimateActionBoundsForStorage() File: lib/providers/layer_provider_storage_export.dart - - _estimateActionBoundsForStorage - 50 + + _estimateActionBoundsForStorage + 50 - - - - + + + + 20 LOC in Method: ._estimateBoundsFromPositions() File: lib/providers/layer_provider_storage_export.dart - - _estimateBoundsFromPositions - 20 + + _estimateBoundsFromPositions + 20 - - - - + + + + 12 LOC in Method: ._estimateStrokeOutset() File: lib/providers/layer_provider_storage_export.dart - - _estimateStrokeOutset - 12 + + _estimateStrokeOutset + 12 - - - - + + + + 9 LOC in Method: ._normalizeStorageBounds() File: lib/providers/layer_provider_storage_export.dart - - _normalizeStorageBounds - 9 + + _normalizeStorageBounds + 9 - - - - + + + + 9 LOC in Method: ._minimumStorageBounds() File: lib/providers/layer_provider_storage_export.dart - - _minimumStorageBounds - 9 + + _minimumStorageBounds + 9 - - - - + + + + 133 LOC File: lib/providers/app_provider_selection_commit.dart - app_provider_selection_commit.dart - 133 LOC + app_provider_selection_commit.dart + 133 LOC - - - - + + + + 133 LOC in Class: <...> File: lib/providers/app_provider_selection_commit.dart - <...> - 133 LOC + <...> + 133 LOC - - - - + + + + 11 LOC in Function: captureSelectionState() File: lib/providers/app_provider_selection_commit.dart - - captureSelectionState - 11 + + captureSelectionState + 11 - - - - + + + + 15 LOC in Function: restoreSelectionState() File: lib/providers/app_provider_selection_commit.dart - - restoreSelectionState - 15 + + restoreSelectionState + 15 - - - - + + + + 10 LOC in Function: selectRectOnCanvas() File: lib/providers/app_provider_selection_commit.dart - - selectRectOnCanvas - 10 + + selectRectOnCanvas + 10 - - - - + + + + 17 LOC in Function: _restoreLayerFromSnapshot() File: lib/providers/app_provider_selection_commit.dart - - _restoreLayerFromSnapshot - 17 + + _restoreLayerFromSnapshot + 17 - - - - + + + + 80 LOC in Function: commitPlacedImage() File: lib/providers/app_provider_selection_commit.dart - - commitPlacedImage - 80 + + commitPlacedImage + 80 - - - - + + + + 133 LOC File: lib/providers/shell_provider.dart - shell_provider.dart - 133 LOC + shell_provider.dart + 133 LOC - - - - + + + + 133 LOC in Class: ShellProvider File: lib/providers/shell_provider.dart - ShellProvider - 133 LOC + ShellProvider + 133 LOC - - - - + + + + 8 LOC in Method: ShellProvider.of() File: lib/providers/shell_provider.dart - - of - 8 + + of + 8 - - - - + + + + 11 LOC in Method: ShellProvider.maybeOf() File: lib/providers/shell_provider.dart - - maybeOf - 11 + + maybeOf + 11 - - - - + + + + 6 LOC in Method: ShellProvider.update() File: lib/providers/shell_provider.dart - - update - 6 + + update + 6 - - - - + + + + 2 LOC in Method: ShellProvider.deviceSizeSmall() File: lib/providers/shell_provider.dart - - deviceSizeSmall - 2 + + deviceSizeSmall + 2 - - - - + + + + 9 LOC in Method: ShellProvider.deviceSizeSmall() File: lib/providers/shell_provider.dart - - deviceSizeSmall - 9 + + deviceSizeSmall + 9 - - - - + + + + 4 LOC in Method: ShellProvider.syncDeviceSizeSmall() File: lib/providers/shell_provider.dart - - syncDeviceSizeSmall - 4 + + syncDeviceSizeSmall + 4 - - - - + + + + 3 LOC in Method: ShellProvider.canvasFitRequestListenable() File: lib/providers/shell_provider.dart - - canvasFitRequestListenable - 3 + + canvasFitRequestListenable + 3 - - - - + + + + 10 LOC in Method: ShellProvider.requestCanvasFit() File: lib/providers/shell_provider.dart - - requestCanvasFit - 10 + + requestCanvasFit + 10 - - - - + + + + 2 LOC in Method: ShellProvider.interactionInputModality() File: lib/providers/shell_provider.dart - - interactionInputModality - 2 + + interactionInputModality + 2 - - - - + + + + 8 LOC in Method: ShellProvider.interactionInputModality() File: lib/providers/shell_provider.dart - - interactionInputModality - 8 + + interactionInputModality + 8 - - - - + + + + 3 LOC in Method: ShellProvider.interactionLayoutProfile() File: lib/providers/shell_provider.dart - - interactionLayoutProfile - 3 + + interactionLayoutProfile + 3 - - - - + + + + 2 LOC in Method: ShellProvider.shellMode() File: lib/providers/shell_provider.dart - - shellMode - 2 + + shellMode + 2 - - - - + + + + 2 LOC in Method: ShellProvider.mainScreenLayoutListenable() File: lib/providers/shell_provider.dart - - mainScreenLayoutListenable - 2 + + mainScreenLayoutListenable + 2 - - - - + + + + 9 LOC in Method: ShellProvider.shellMode() File: lib/providers/shell_provider.dart - - shellMode - 9 + + shellMode + 9 - - - - + + + + 2 LOC in Method: ShellProvider.isSidePanelExpanded() File: lib/providers/shell_provider.dart - - isSidePanelExpanded - 2 + + isSidePanelExpanded + 2 - - - - + + + + 2 LOC in Method: ShellProvider.sidePanelExpandedListenable() File: lib/providers/shell_provider.dart - - sidePanelExpandedListenable - 2 + + sidePanelExpandedListenable + 2 - - - - + + + + 10 LOC in Method: ShellProvider.isSidePanelExpanded() File: lib/providers/shell_provider.dart - - isSidePanelExpanded - 10 + + isSidePanelExpanded + 10 - - - - + + + + 2 LOC in Method: ShellProvider.showMenu() File: lib/providers/shell_provider.dart - - showMenu - 2 + + showMenu + 2 - - - - + + + + 6 LOC in Method: ShellProvider.showMenu() File: lib/providers/shell_provider.dart - - showMenu - 6 + + showMenu + 6 - - - - + + + + 7 LOC in Method: ShellProvider.dispose() File: lib/providers/shell_provider.dart - - dispose - 7 + + dispose + 7 - - - - + + + + 88 LOC File: lib/providers/wand_selection_manager.dart - wand_selection_manager.dart - 88 LOC + wand_selection_manager.dart + 88 LOC - - - - + + + + 88 LOC in Class: WandSelectionManager File: lib/providers/wand_selection_manager.dart - WandSelectionManager - 88 LOC + WandSelectionManager + 88 LOC - - - - + + + + 2 LOC in Method: WandSelectionManager.requestVersion() File: lib/providers/wand_selection_manager.dart - - requestVersion - 2 + + requestVersion + 2 - - - - + + + + 2 LOC in Method: WandSelectionManager.hasPendingRequest() File: lib/providers/wand_selection_manager.dart - - hasPendingRequest - 2 + + hasPendingRequest + 2 - - - - + + + + 9 LOC in Method: WandSelectionManager.queueRequest() File: lib/providers/wand_selection_manager.dart - - queueRequest - 9 + + queueRequest + 9 - - - - + + + + 15 LOC in Method: WandSelectionManager.takePendingRequest() File: lib/providers/wand_selection_manager.dart - - takePendingRequest - 15 + + takePendingRequest + 15 - - - - + + + + 6 LOC in Method: WandSelectionManager.cancelPendingRequest() File: lib/providers/wand_selection_manager.dart - - cancelPendingRequest - 6 + + cancelPendingRequest + 6 - - - - + + + + 5 LOC in Method: WandSelectionManager.reset() File: lib/providers/wand_selection_manager.dart - - reset - 5 + + reset + 5 - - - - + + + + 7 LOC in Method: WandSelectionManager.clearCache() File: lib/providers/wand_selection_manager.dart - - clearCache - 7 + + clearCache + 7 - - - - + + + + 14 LOC in Method: WandSelectionManager.cachedImageData() File: lib/providers/wand_selection_manager.dart - - cachedImageData - 14 + + cachedImageData + 14 - - - - + + + + 12 LOC in Method: WandSelectionManager.storeCache() File: lib/providers/wand_selection_manager.dart - - storeCache - 12 + + storeCache + 12 - - - - + + + + 84 LOC File: lib/providers/macos_bookmark_service.dart - macos_bookmark_service.dart - 84 LOC + macos_bookmark_service.dart + 84 LOC - - - - + + + + 84 LOC in Class: MacOsBookmarkService File: lib/providers/macos_bookmark_service.dart - MacOsBookmarkService - 84 LOC + MacOsBookmarkService + 84 LOC - - - - + + + + 1 LOC in Method: MacOsBookmarkService.MacOsBookmarkService._() File: lib/providers/macos_bookmark_service.dart - - MacOsBookmarkService._ - 1 + + MacOsBookmarkService._ + 1 - - - - + + + + 2 LOC in Method: MacOsBookmarkService.supportsReplaceFileWithBackup() File: lib/providers/macos_bookmark_service.dart - - supportsReplaceFileWithBackup - 2 + + supportsReplaceFileWithBackup + 2 - - - - + + + + 14 LOC in Method: MacOsBookmarkService.createBookmark() File: lib/providers/macos_bookmark_service.dart - - createBookmark - 14 + + createBookmark + 14 - - - - + + + + 22 LOC in Method: MacOsBookmarkService.replaceFileWithBackup() File: lib/providers/macos_bookmark_service.dart - - replaceFileWithBackup - 22 + + replaceFileWithBackup + 22 - - - - + + + + 34 LOC in Method: MacOsBookmarkService.withResolvedBookmark() File: lib/providers/macos_bookmark_service.dart - - withResolvedBookmark - 34 + + withResolvedBookmark + 34 - - - - + + + + 1 LOC in Method: MacOsBookmarkService._isMacOS() File: lib/providers/macos_bookmark_service.dart - - _isMacOS - 1 + + _isMacOS + 1 - - - - + + + + 26 LOC File: lib/providers/layer_crop_state.dart - layer_crop_state.dart - 26 LOC + layer_crop_state.dart + 26 LOC - - - - + + + + 26 LOC in Class: LayerCropState File: lib/providers/layer_crop_state.dart - LayerCropState - 26 LOC + LayerCropState + 26 LOC - - - - + + + + 15 LOC File: lib/providers/wand_selection_request.dart - wand_selection_request.dart - 15 LOC + wand_selection_request.dart + 15 LOC - - - - + + + + 15 LOC in Class: WandSelectionRequest File: lib/providers/wand_selection_request.dart - WandSelectionRequest - 15 LOC + WandSelectionRequest + 15 LOC - - - - + + + + 8 LOC File: lib/providers/layer_provider_live_preview.dart - layer_provider_live_preview.dart - 8 LOC - - - - - - 8 LOC in Class: <...> - -File: lib/providers/layer_provider_live_preview.dart - - <...> - 8 LOC - + layer_provider_live_preview.dart + 8 LOC - - - - - 4,570 LOC Folder: lib/files + + + + + 4,676 LOC Folder: lib/files - files - 4,570 LOC + files + 4,676 LOC - - - - - 747 LOC File: lib/files/file_ora.dart + + + + + 787 LOC File: lib/files/file_ora.dart - file_ora.dart - 747 LOC + file_ora.dart + 787 LOC - - - - - 723 LOC in Class: <...> + <rect x="1748.3472110064306" y="135.0" width="397.47013191436037" height="262.5616690703485" rx="5.00" ry="5.00" fill="#9eb89a" fill-opacity="0.45"/> + <rect x="1748.3472110064306" y="135.0" width="397.47013191436037" height="262.5616690703485" rx="5.00" ry="5.00" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1748.3472110064306" y="135.0" width="397.47013191436037" height="262.5616690703485" rx="5.00" ry="5.00" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8" stroke-dasharray="6,4"/> + <rect x="1748.3472110064306" y="135.0" width="397.47013191436037" height="262.5616690703485" rx="5.00" ry="5.00" fill="transparent" pointer-events="all"> + <title>763 LOC in Class: <...> File: lib/files/file_ora.dart - <...> - 723 LOC + <...> + 763 LOC - - - - + + + + 7 LOC in Function: _neutralArchiveFile() File: lib/files/file_ora.dart - - _neutralArchiveFile - 7 + + _neutralArchiveFile + 7 - - - - + + + + 6 LOC in Function: _storedNeutralArchiveFile() File: lib/files/file_ora.dart - - _storedNeutralArchiveFile - 6 + + _storedNeutralArchiveFile + 6 - - - - + + + + 22 LOC in Function: _prepareOraLayerExport() File: lib/files/file_ora.dart - - _prepareOraLayerExport - 22 + + _prepareOraLayerExport + 22 - - - - + + + + 34 LOC in Function: readImageFromFilePathOra() File: lib/files/file_ora.dart - - readImageFromFilePathOra - 34 + + readImageFromFilePathOra + 34 - - - - - 33 LOC in Function: readOraFileFromBytes() + <rect x="1881.5414902636378" y="335.7708691701372" width="79.28971019623116" height="53.79079990021127" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="1881.5414902636378" y="335.7708691701372" width="79.28971019623116" height="53.79079990021127" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1881.5414902636378" y="335.7708691701372" width="79.28971019623116" height="53.79079990021127" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1881.5414902636378" y="335.7708691701372" width="79.28971019623116" height="53.79079990021127" fill="transparent" pointer-events="all"> + <title>37 LOC in Function: readOraFileFromBytes() File: lib/files/file_ora.dart - - readOraFileFromBytes - 33 + + readOraFileFromBytes + 37 - - - - + + + + 13 LOC in Function: _extractOraCanvasSize() File: lib/files/file_ora.dart - - _extractOraCanvasSize - 13 + + _extractOraCanvasSize + 13 - - - - - 22 LOC in Function: importFromOraXml() + <rect x="2070.6533709099795" y="159.0" width="67.16397201081146" height="42.90686122759005" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2070.6533709099795" y="159.0" width="67.16397201081146" height="42.90686122759005" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2070.6533709099795" y="159.0" width="67.16397201081146" height="42.90686122759005" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2070.6533709099795" y="159.0" width="67.16397201081146" height="42.90686122759005" fill="transparent" pointer-events="all"> + <title>25 LOC in Function: importFromOraXml() File: lib/files/file_ora.dart - - importFromOraXml - 22 + + importFromOraXml + 25 - - - - - 19 LOC in Function: importStack() + <rect x="1960.8312004598688" y="226.17583298309637" width="55.874437597424716" height="59.82847625057019" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="1960.8312004598688" y="226.17583298309637" width="55.874437597424716" height="59.82847625057019" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1960.8312004598688" y="226.17583298309637" width="55.874437597424716" height="59.82847625057019" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1960.8312004598688" y="226.17583298309637" width="55.874437597424716" height="59.82847625057019" fill="transparent" pointer-events="all"> + <title>29 LOC in Function: importStack() File: lib/files/file_ora.dart - - importStack - 19 + + importStack + 29 - - - - - 38 LOC in Function: addLayer() + <rect x="2034.6556088864318" y="286.00430923366656" width="27.469547321511854" height="67.14158494905753" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2034.6556088864318" y="286.00430923366656" width="27.469547321511854" height="67.14158494905753" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2034.6556088864318" y="286.00430923366656" width="27.469547321511854" height="67.14158494905753" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2034.6556088864318" y="286.00430923366656" width="27.469547321511854" height="67.14158494905753" fill="transparent" pointer-events="all"> + <title>16 LOC in Function: _restoreSelectedLayer() File: lib/files/file_ora.dart - - addLayer - 38 + + _restoreSelectedLayer + 16 - - - - + + + + + 40 LOC in Function: addLayer() + +File: lib/files/file_ora.dart + + + addLayer + 40 + + + + + + + 16 LOC in Function: _isLayerVisible() File: lib/files/file_ora.dart - - _isLayerVisible - 16 + + _isLayerVisible + 16 - - - - + + + + 49 LOC in Function: getBlendModeFromOraCompositOp() File: lib/files/file_ora.dart - - getBlendModeFromOraCompositOp - 49 + + getBlendModeFromOraCompositOp + 49 - - - - + + + + 41 LOC in Function: _getOraCompositeOpFromBlendMode() File: lib/files/file_ora.dart - - _getOraCompositeOpFromBlendMode - 41 + + _getOraCompositeOpFromBlendMode + 41 - - - - + + + + 30 LOC in Function: addImageToLayer() File: lib/files/file_ora.dart - - addImageToLayer - 30 + + addImageToLayer + 30 - - - - + + + + 25 LOC in Function: decodeImage() File: lib/files/file_ora.dart - - decodeImage - 25 + + decodeImage + 25 - - - - + + + + 24 LOC in Function: extractOraPreviewPngBytes() File: lib/files/file_ora.dart - - extractOraPreviewPngBytes - 24 + + extractOraPreviewPngBytes + 24 - - - - + + + + 11 LOC in Function: _findOraPreviewFile() File: lib/files/file_ora.dart - - _findOraPreviewFile - 11 + + _findOraPreviewFile + 11 - - - - - 163 LOC in Function: createOraArchive() + <rect x="1756.3472110064306" y="159.0" width="157.44307169184918" height="120.07245846450913" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="1756.3472110064306" y="159.0" width="157.44307169184918" height="120.07245846450913" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1756.3472110064306" y="159.0" width="157.44307169184918" height="120.07245846450913" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1756.3472110064306" y="159.0" width="157.44307169184918" height="120.07245846450913" fill="transparent" pointer-events="all"> + <title>164 LOC in Function: createOraArchive() File: lib/files/file_ora.dart - - createOraArchive - 163 + + createOraArchive + 164 - - - - + + + + 21 LOC in Function: _exportOraLayersInBatches() File: lib/files/file_ora.dart - - _exportOraLayersInBatches - 21 + + _exportOraLayersInBatches + 21 - - - - + + + + 5 LOC in Function: _computeOraLayerExportBatchSize() File: lib/files/file_ora.dart - - _computeOraLayerExportBatchSize - 5 + + _computeOraLayerExportBatchSize + 5 - - - - + + + + 16 LOC in Function: _exportOraLayer() File: lib/files/file_ora.dart - - _exportOraLayer - 16 + + _exportOraLayer + 16 - - - - + + + + 4 LOC in Function: _isOraLayerImageEmpty() File: lib/files/file_ora.dart - - _isOraLayerImageEmpty - 4 + + _isOraLayerImageEmpty + 4 - - - - + + + + 39 LOC in Function: _addOraPreviewFiles() File: lib/files/file_ora.dart - - _addOraPreviewFiles - 39 + + _addOraPreviewFiles + 39 - - - - + + + + 14 LOC in Function: _safeImageToPngBytes() File: lib/files/file_ora.dart - - _safeImageToPngBytes - 14 + + _safeImageToPngBytes + 14 - - - - + + + + 8 LOC in Function: _captureOraMergedImage() File: lib/files/file_ora.dart - - _captureOraMergedImage - 8 + + _captureOraMergedImage + 8 - - - - + + + + 28 LOC in Function: _createOraThumbnailImage() File: lib/files/file_ora.dart - - _createOraThumbnailImage - 28 + + _createOraThumbnailImage + 28 - - - - - 35 LOC in Function: buildLayers() + <rect x="1881.5414902636378" y="279.0724584645091" width="79.28971019623116" height="56.698410705628106" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="1881.5414902636378" y="279.0724584645091" width="79.28971019623116" height="56.698410705628106" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1881.5414902636378" y="279.0724584645091" width="79.28971019623116" height="56.698410705628106" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1881.5414902636378" y="279.0724584645091" width="79.28971019623116" height="56.698410705628106" fill="transparent" pointer-events="all"> + <title>39 LOC in Function: buildLayers() File: lib/files/file_ora.dart - - buildLayers - 35 + + buildLayers + 39 - - - - + + + + 16 LOC in Class: _OraLayerExportResult File: lib/files/file_ora.dart - _OraLayerExportResult - 16 LOC + _OraLayerExportResult + 16 LOC - - - - + + + + 8 LOC in Class: _OraLayerExportRequest File: lib/files/file_ora.dart - _OraLayerExportRequest - 8 LOC + _OraLayerExportRequest + 8 LOC - - - - - 492 LOC File: lib/files/file_tiff_encoder.dart + + + + + 520 LOC File: lib/files/file_tiff.dart - file_tiff_encoder.dart - 492 LOC + file_tiff.dart + 520 LOC - - - - - 419 LOC in Class: <...> + <rect x="1748.3472110064306" y="431.5616690703485" width="368.97522206414345" height="161.94926037685036" rx="5.00" ry="5.00" fill="#9eb89a" fill-opacity="0.45"/> + <rect x="1748.3472110064306" y="431.5616690703485" width="368.97522206414345" height="161.94926037685036" rx="5.00" ry="5.00" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1748.3472110064306" y="431.5616690703485" width="368.97522206414345" height="161.94926037685036" rx="5.00" ry="5.00" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8" stroke-dasharray="6,4"/> + <rect x="1748.3472110064306" y="431.5616690703485" width="368.97522206414345" height="161.94926037685036" rx="5.00" ry="5.00" fill="transparent" pointer-events="all"> + <title>468 LOC in Class: <...> -File: lib/files/file_tiff_encoder.dart +File: lib/files/file_tiff.dart - <...> - 419 LOC + <...> + 468 LOC - - - - - 38 LOC in Function: _encodeLayeredTiff() + <rect x="2060.170065404881" y="455.5616690703485" width="20.380250007726442" height="48.090874199999455" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2060.170065404881" y="455.5616690703485" width="20.380250007726442" height="48.090874199999455" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2060.170065404881" y="455.5616690703485" width="20.380250007726442" height="48.090874199999455" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2060.170065404881" y="455.5616690703485" width="20.380250007726442" height="48.090874199999455" fill="transparent" pointer-events="all"> + <title>10 LOC in Function: convertLayersToTiff() -File: lib/files/file_tiff_encoder.dart +File: lib/files/file_tiff.dart - - _encodeLayeredTiff - 38 + + convertLayersToTiff + 10 - - - - - 58 LOC in Function: _buildRootDirectoryLayout() + <rect x="2031.637715394064" y="455.5616690703485" width="28.532350010817023" height="48.090874199999455" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2031.637715394064" y="455.5616690703485" width="28.532350010817023" height="48.090874199999455" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2031.637715394064" y="455.5616690703485" width="28.532350010817023" height="48.090874199999455" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2031.637715394064" y="455.5616690703485" width="28.532350010817023" height="48.090874199999455" fill="transparent" pointer-events="all"> + <title>14 LOC in Function: _encodeLayerMetadata() -File: lib/files/file_tiff_encoder.dart +File: lib/files/file_tiff.dart - - _buildRootDirectoryLayout - 58 + + _encodeLayerMetadata + 14 - - - - - 50 LOC in Function: _buildLayerDirectoryLayout() + <rect x="1859.6754277217888" y="526.5524687206649" width="43.22145576295634" height="58.95846072653396" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="1859.6754277217888" y="526.5524687206649" width="43.22145576295634" height="58.95846072653396" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1859.6754277217888" y="526.5524687206649" width="43.22145576295634" height="58.95846072653396" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1859.6754277217888" y="526.5524687206649" width="43.22145576295634" height="58.95846072653396" fill="transparent" pointer-events="all"> + <title>26 LOC in Function: _buildLayerFrames() -File: lib/files/file_tiff_encoder.dart +File: lib/files/file_tiff.dart - - _buildLayerDirectoryLayout - 50 + + _buildLayerFrames + 26 - - - - - 32 LOC in Function: _writeDirectoryLayout() + <rect x="2031.637715394064" y="523.6904075203477" width="25.86187667547087" height="34.10787416653856" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2031.637715394064" y="523.6904075203477" width="25.86187667547087" height="34.10787416653856" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2031.637715394064" y="523.6904075203477" width="25.86187667547087" height="34.10787416653856" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2031.637715394064" y="523.6904075203477" width="25.86187667547087" height="34.10787416653856" fill="transparent" pointer-events="all"> + <title>9 LOC in Function: _buildCompositeFrame() -File: lib/files/file_tiff_encoder.dart +File: lib/files/file_tiff.dart - - _writeDirectoryLayout - 32 + + _buildCompositeFrame + 9 - - - - - 8 LOC in Function: _rgbaBitsPerSampleValues() + <rect x="2005.3085613007013" y="525.9508517744757" width="26.329154093362675" height="59.56007767272308" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2005.3085613007013" y="525.9508517744757" width="26.329154093362675" height="59.56007767272308" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2005.3085613007013" y="525.9508517744757" width="26.329154093362675" height="59.56007767272308" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2005.3085613007013" y="525.9508517744757" width="26.329154093362675" height="59.56007767272308" fill="transparent" pointer-events="all"> + <title>16 LOC in Function: _resolveLayerExportBounds() -File: lib/files/file_tiff_encoder.dart +File: lib/files/file_tiff.dart - - _rgbaBitsPerSampleValues - 8 + + _resolveLayerExportBounds + 16 - - - - - 8 LOC in Function: _rgbaSampleFormatValues() + <rect x="2057.4995920695346" y="523.6904075203477" width="20.114792969810676" height="34.10787416653856" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2057.4995920695346" y="523.6904075203477" width="20.114792969810676" height="34.10787416653856" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2057.4995920695346" y="523.6904075203477" width="20.114792969810676" height="34.10787416653856" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2057.4995920695346" y="523.6904075203477" width="20.114792969810676" height="34.10787416653856" fill="transparent" pointer-events="all"> + <title>7 LOC in Function: _decodeUiImageToPackageImage() -File: lib/files/file_tiff_encoder.dart +File: lib/files/file_tiff.dart - - _rgbaSampleFormatValues - 8 + + _decodeUiImageToPackageImage + 7 - - - - - 9 LOC in Function: _shortValueEntry() + <rect x="1808.7190468758588" y="455.5616690703485" width="50.95638084593009" height="69.24303655116844" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="1808.7190468758588" y="455.5616690703485" width="50.95638084593009" height="69.24303655116844" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1808.7190468758588" y="455.5616690703485" width="50.95638084593009" height="69.24303655116844" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1808.7190468758588" y="455.5616690703485" width="50.95638084593009" height="69.24303655116844" fill="transparent" pointer-events="all"> + <title>36 LOC in Function: readTiffFileFromBytes() -File: lib/files/file_tiff_encoder.dart +File: lib/files/file_tiff.dart - - _shortValueEntry - 9 + + readTiffFileFromBytes + 36 - - - - - 9 LOC in Function: _longValueEntry() + <rect x="1941.1312481981297" y="455.5616690703485" width="61.265916255709314" height="35.19459135206364" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="1941.1312481981297" y="455.5616690703485" width="61.265916255709314" height="35.19459135206364" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1941.1312481981297" y="455.5616690703485" width="61.265916255709314" height="35.19459135206364" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1941.1312481981297" y="455.5616690703485" width="61.265916255709314" height="35.19459135206364" fill="transparent" pointer-events="all"> + <title>22 LOC in Function: _decodeTiffDocument() -File: lib/files/file_tiff_encoder.dart +File: lib/files/file_tiff.dart - - _longValueEntry - 9 + + _decodeTiffDocument + 22 - - - - - 14 LOC in Function: _offsetBlockEntry() + <rect x="1809.6258227502872" y="524.804705621517" width="50.04960497150165" height="60.70622382568192" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="1809.6258227502872" y="524.804705621517" width="50.04960497150165" height="60.70622382568192" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1809.6258227502872" y="524.804705621517" width="50.04960497150165" height="60.70622382568192" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1809.6258227502872" y="524.804705621517" width="50.04960497150165" height="60.70622382568192" fill="transparent" pointer-events="all"> + <title>31 LOC in Function: _decodeFrameLayers() -File: lib/files/file_tiff_encoder.dart +File: lib/files/file_tiff.dart - - _offsetBlockEntry - 14 + + _decodeFrameLayers + 31 - - - - - 9 LOC in Function: _pageNumberEntry() + <rect x="1756.3472110064306" y="455.5616690703485" width="52.37183586942816" height="69.24303655116844" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="1756.3472110064306" y="455.5616690703485" width="52.37183586942816" height="69.24303655116844" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1756.3472110064306" y="455.5616690703485" width="52.37183586942816" height="69.24303655116844" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1756.3472110064306" y="455.5616690703485" width="52.37183586942816" height="69.24303655116844" fill="transparent" pointer-events="all"> + <title>37 LOC in Function: _tryDecodeSubIfdLayers() -File: lib/files/file_tiff_encoder.dart +File: lib/files/file_tiff.dart - - _pageNumberEntry - 9 + + _tryDecodeSubIfdLayers + 37 - - - - - 15 LOC in Function: _asciiEntry() + <rect x="1974.0426908148331" y="525.9508517744757" width="31.265870485868184" height="59.56007767272308" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="1974.0426908148331" y="525.9508517744757" width="31.265870485868184" height="59.56007767272308" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1974.0426908148331" y="525.9508517744757" width="31.265870485868184" height="59.56007767272308" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1974.0426908148331" y="525.9508517744757" width="31.265870485868184" height="59.56007767272308" fill="transparent" pointer-events="all"> + <title>19 LOC in Function: _readTiffImageAtOffset() -File: lib/files/file_tiff_encoder.dart +File: lib/files/file_tiff.dart - - _asciiEntry - 15 + + _readTiffImageAtOffset + 19 - - - - - 15 LOC in Function: _shortArrayEntry() + <rect x="2077.6143850393455" y="542.236564098403" width="31.708048031228657" height="15.45513048171279" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2077.6143850393455" y="542.236564098403" width="31.708048031228657" height="15.45513048171279" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2077.6143850393455" y="542.236564098403" width="31.708048031228657" height="15.45513048171279" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2077.6143850393455" y="542.236564098403" width="31.708048031228657" height="15.45513048171279" fill="transparent" pointer-events="all"> + <title>5 LOC in Function: _shouldSkipSubIfdImage() -File: lib/files/file_tiff_encoder.dart +File: lib/files/file_tiff.dart - - _shortArrayEntry - 15 + + _shouldSkipSubIfdImage + 5 - - - - - 12 LOC in Function: _shortTextEntry() + <rect x="2077.6143850393455" y="557.6916945801158" width="17.615582239571477" height="27.81923486708301" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2077.6143850393455" y="557.6916945801158" width="17.615582239571477" height="27.81923486708301" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2077.6143850393455" y="557.6916945801158" width="17.615582239571477" height="27.81923486708301" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2077.6143850393455" y="557.6916945801158" width="17.615582239571477" height="27.81923486708301" fill="transparent" pointer-events="all"> + <title>5 LOC in Function: _extractSubIfdOffset() -File: lib/files/file_tiff_encoder.dart +File: lib/files/file_tiff.dart - - _shortTextEntry - 12 + + _extractSubIfdOffset + 5 - - - - - 11 LOC in Function: _rationalEntry() + <rect x="1901.093641523318" y="455.5616690703485" width="40.03760667481158" height="70.9907996503164" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="1901.093641523318" y="455.5616690703485" width="40.03760667481158" height="70.9907996503164" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1901.093641523318" y="455.5616690703485" width="40.03760667481158" height="70.9907996503164" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1901.093641523318" y="455.5616690703485" width="40.03760667481158" height="70.9907996503164" fill="transparent" pointer-events="all"> + <title>29 LOC in Function: _extractSubIfdLayerMeta() -File: lib/files/file_tiff_encoder.dart +File: lib/files/file_tiff.dart - - _rationalEntry - 11 + + _extractSubIfdLayerMeta + 29 - - - - - 20 LOC in Function: _inlineOrBlockEntry() + <rect x="2056.3943836646" y="557.7982816868862" width="21.22000137474533" height="27.712647760312585" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2056.3943836646" y="557.7982816868862" width="21.22000137474533" height="27.712647760312585" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2056.3943836646" y="557.7982816868862" width="21.22000137474533" height="27.712647760312585" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2056.3943836646" y="557.7982816868862" width="21.22000137474533" height="27.712647760312585" fill="transparent" pointer-events="all"> + <title>6 LOC in Function: _fallbackLayerName() -File: lib/files/file_tiff_encoder.dart +File: lib/files/file_tiff.dart - - _inlineOrBlockEntry - 20 + + _fallbackLayerName + 6 - - - - - 10 LOC in Function: _encodeShortValues() + <rect x="2031.637715394064" y="503.65254327034796" width="48.912600018543465" height="20.037864249999764" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2031.637715394064" y="503.65254327034796" width="48.912600018543465" height="20.037864249999764" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2031.637715394064" y="503.65254327034796" width="48.912600018543465" height="20.037864249999764" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2031.637715394064" y="503.65254327034796" width="48.912600018543465" height="20.037864249999764" fill="transparent" pointer-events="all"> + <title>10 LOC in Function: _readIntTagList() -File: lib/files/file_tiff_encoder.dart +File: lib/files/file_tiff.dart - - _encodeShortValues - 10 + + _readIntTagList + 10 - - - - - 8 LOC in Function: _encodeShortText() + <rect x="2080.5503154126072" y="455.5616690703485" width="28.77211765796674" height="34.06436922499961" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2080.5503154126072" y="455.5616690703485" width="28.77211765796674" height="34.06436922499961" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2080.5503154126072" y="455.5616690703485" width="28.77211765796674" height="34.06436922499961" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2080.5503154126072" y="455.5616690703485" width="28.77211765796674" height="34.06436922499961" fill="transparent" pointer-events="all"> + <title>10 LOC in Function: _readIntTag() -File: lib/files/file_tiff_encoder.dart +File: lib/files/file_tiff.dart - - _encodeShortText - 8 + + _readIntTag + 10 - - - - - 4 LOC in Function: _encodeSketchBookPosition() + <rect x="2080.5503154126072" y="489.6260382953481" width="28.77211765796674" height="34.06436922499961" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2080.5503154126072" y="489.6260382953481" width="28.77211765796674" height="34.06436922499961" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2080.5503154126072" y="489.6260382953481" width="28.77211765796674" height="34.06436922499961" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2080.5503154126072" y="489.6260382953481" width="28.77211765796674" height="34.06436922499961" fill="transparent" pointer-events="all"> + <title>10 LOC in Function: _readDoubleTag() -File: lib/files/file_tiff_encoder.dart +File: lib/files/file_tiff.dart - - _encodeSketchBookPosition - 4 + + _readDoubleTag + 10 - - - - - 10 LOC in Function: _encodeLongValues() + <rect x="1941.1312481981297" y="525.9508517744757" width="32.91144261670335" height="59.56007767272308" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="1941.1312481981297" y="525.9508517744757" width="32.91144261670335" height="59.56007767272308" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1941.1312481981297" y="525.9508517744757" width="32.91144261670335" height="59.56007767272308" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1941.1312481981297" y="525.9508517744757" width="32.91144261670335" height="59.56007767272308" fill="transparent" pointer-events="all"> + <title>20 LOC in Function: _readTextTag() -File: lib/files/file_tiff_encoder.dart +File: lib/files/file_tiff.dart - - _encodeLongValues - 10 + + _readTextTag + 20 - - - - - 4 LOC in Function: _longArrayBlock() + <rect x="2002.397164453839" y="455.5616690703485" width="29.240550940224892" height="70.38918270412728" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2002.397164453839" y="455.5616690703485" width="29.240550940224892" height="70.38918270412728" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2002.397164453839" y="455.5616690703485" width="29.240550940224892" height="70.38918270412728" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2002.397164453839" y="455.5616690703485" width="29.240550940224892" height="70.38918270412728" fill="transparent" pointer-events="all"> + <title>21 LOC in Function: _unMultiplyAlpha() -File: lib/files/file_tiff_encoder.dart +File: lib/files/file_tiff.dart - - _longArrayBlock - 4 + + _unMultiplyAlpha + 21 - - - - - 12 LOC in Function: _pixelBlock() + <rect x="2077.6143850393455" y="523.6904075203477" width="31.708048031228657" height="18.546156578055342" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2077.6143850393455" y="523.6904075203477" width="31.708048031228657" height="18.546156578055342" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2077.6143850393455" y="523.6904075203477" width="31.708048031228657" height="18.546156578055342" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2077.6143850393455" y="523.6904075203477" width="31.708048031228657" height="18.546156578055342" fill="transparent" pointer-events="all"> + <title>6 LOC in Function: _unMultiplyChannel() -File: lib/files/file_tiff_encoder.dart +File: lib/files/file_tiff.dart - - _pixelBlock - 12 + + _unMultiplyChannel + 6 - - - - - 7 LOC in Function: _rationalBlock() + <rect x="1941.1312481981297" y="490.75626042241214" width="61.265916255709314" height="35.19459135206364" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="1941.1312481981297" y="490.75626042241214" width="61.265916255709314" height="35.19459135206364" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1941.1312481981297" y="490.75626042241214" width="61.265916255709314" height="35.19459135206364" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1941.1312481981297" y="490.75626042241214" width="61.265916255709314" height="35.19459135206364" fill="transparent" pointer-events="all"> + <title>22 LOC in Function: _appendDecodedTiffLayer() -File: lib/files/file_tiff_encoder.dart +File: lib/files/file_tiff.dart - - _rationalBlock - 7 + + _appendDecodedTiffLayer + 22 - - - - - 34 LOC in Function: _encodeAssociatedRgbaPixels() + <rect x="1859.6754277217888" y="455.5616690703485" width="41.41821380152921" height="70.9907996503164" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="1859.6754277217888" y="455.5616690703485" width="41.41821380152921" height="70.9907996503164" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1859.6754277217888" y="455.5616690703485" width="41.41821380152921" height="70.9907996503164" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1859.6754277217888" y="455.5616690703485" width="41.41821380152921" height="70.9907996503164" fill="transparent" pointer-events="all"> + <title>30 LOC in Function: _extractLayerMeta() -File: lib/files/file_tiff_encoder.dart +File: lib/files/file_tiff.dart - - _encodeAssociatedRgbaPixels - 34 + + _extractLayerMeta + 30 - - - - - 14 LOC in Function: _premultiplyChannel() + <rect x="2095.229967278917" y="557.6916945801158" width="14.09246579165718" height="27.81923486708301" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2095.229967278917" y="557.6916945801158" width="14.09246579165718" height="27.81923486708301" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2095.229967278917" y="557.6916945801158" width="14.09246579165718" height="27.81923486708301" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2095.229967278917" y="557.6916945801158" width="14.09246579165718" height="27.81923486708301" fill="transparent" pointer-events="all"> + <title>4 LOC in Function: _readDescriptionTag() -File: lib/files/file_tiff_encoder.dart +File: lib/files/file_tiff.dart - - _premultiplyChannel - 14 + + _readDescriptionTag + 4 - - - - - 8 LOC in Function: _encodeAscii() + <rect x="1756.3472110064306" y="524.804705621517" width="53.2786117438566" height="60.70622382568192" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="1756.3472110064306" y="524.804705621517" width="53.2786117438566" height="60.70622382568192" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1756.3472110064306" y="524.804705621517" width="53.2786117438566" height="60.70622382568192" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1756.3472110064306" y="524.804705621517" width="53.2786117438566" height="60.70622382568192" fill="transparent" pointer-events="all"> + <title>33 LOC in Function: _tryParseJsonMeta() -File: lib/files/file_tiff_encoder.dart +File: lib/files/file_tiff.dart - - _encodeAscii - 8 + + _tryParseJsonMeta + 33 - - - - - - 50 LOC in Class: _TiffDirectoryLayout + <rect x="1902.896883484745" y="526.5524687206649" width="38.23436471338445" height="58.95846072653396" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="1902.896883484745" y="526.5524687206649" width="38.23436471338445" height="58.95846072653396" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="1902.896883484745" y="526.5524687206649" width="38.23436471338445" height="58.95846072653396" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="1902.896883484745" y="526.5524687206649" width="38.23436471338445" height="58.95846072653396" fill="transparent" pointer-events="all"> + <title>23 LOC in Function: readTiffFromFilePath() -File: lib/files/file_tiff_encoder.dart +File: lib/files/file_tiff.dart - _TiffDirectoryLayout - 50 LOC + + readTiffFromFilePath + 23 + + - - - - - 16 LOC in Method: _TiffDirectoryLayout._TiffDirectoryLayout() + <rect x="2031.637715394064" y="557.7982816868862" width="24.756668270536217" height="27.712647760312585" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2031.637715394064" y="557.7982816868862" width="24.756668270536217" height="27.712647760312585" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2031.637715394064" y="557.7982816868862" width="24.756668270536217" height="27.712647760312585" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2031.637715394064" y="557.7982816868862" width="24.756668270536217" height="27.712647760312585" fill="transparent" pointer-events="all"> + <title>7 LOC in Function: _decodeImageFromList() -File: lib/files/file_tiff_encoder.dart +File: lib/files/file_tiff.dart - - _TiffDirectoryLayout - 16 + + _decodeImageFromList + 7 + - - - - - 8 LOC in Method: _TiffDirectoryLayout.assignBlockOffsets() + <rect x="2117.322433070574" y="431.5616690703485" width="40.99724689601595" height="56.05935936121743" rx="5.00" ry="5.00" fill="#9eb89a" fill-opacity="0.78"/> + <rect x="2117.322433070574" y="431.5616690703485" width="40.99724689601595" height="56.05935936121743" rx="5.00" ry="5.00" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2117.322433070574" y="431.5616690703485" width="40.99724689601595" height="56.05935936121743" rx="5.00" ry="5.00" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2117.322433070574" y="431.5616690703485" width="40.99724689601595" height="56.05935936121743" rx="5.00" ry="5.00" fill="transparent" pointer-events="all"> + <title>18 LOC in Class: _LayerMeta -File: lib/files/file_tiff_encoder.dart +File: lib/files/file_tiff.dart - - assignBlockOffsets - 8 - - + _LayerMeta + 18 LOC - - - - - 16 LOC in Method: _TiffDirectoryLayout.populateSubIfdOffsets() + <rect x="2125.322433070574" y="455.5616690703485" width="24.99724689601595" height="24.05935936121743" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2125.322433070574" y="455.5616690703485" width="24.99724689601595" height="24.05935936121743" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2125.322433070574" y="455.5616690703485" width="24.99724689601595" height="24.05935936121743" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2125.322433070574" y="455.5616690703485" width="24.99724689601595" height="24.05935936121743" fill="transparent" pointer-events="all"> + <title>8 LOC in Method: _LayerMeta._LayerMeta() -File: lib/files/file_tiff_encoder.dart +File: lib/files/file_tiff.dart - - populateSubIfdOffsets - 16 + + _LayerMeta + 8 - - - - - 17 LOC in Class: _TiffTagEntry + <rect x="2117.322433070574" y="487.62102843156595" width="40.99724689601595" height="49.8305416544155" rx="5.00" ry="5.00" fill="#9eb89a" fill-opacity="0.78"/> + <rect x="2117.322433070574" y="487.62102843156595" width="40.99724689601595" height="49.8305416544155" rx="5.00" ry="5.00" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2117.322433070574" y="487.62102843156595" width="40.99724689601595" height="49.8305416544155" rx="5.00" ry="5.00" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2117.322433070574" y="487.62102843156595" width="40.99724689601595" height="49.8305416544155" rx="5.00" ry="5.00" fill="transparent" pointer-events="all"> + <title>16 LOC in Class: _LayerFrame -File: lib/files/file_tiff_encoder.dart +File: lib/files/file_tiff.dart - _TiffTagEntry - 17 LOC + _LayerFrame + 16 LOC - - - - - 8 LOC in Method: _TiffTagEntry._TiffTagEntry() + <rect x="2125.322433070574" y="511.62102843156595" width="24.99724689601595" height="17.830541654415498" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2125.322433070574" y="511.62102843156595" width="24.99724689601595" height="17.830541654415498" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2125.322433070574" y="511.62102843156595" width="24.99724689601595" height="17.830541654415498" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2125.322433070574" y="511.62102843156595" width="24.99724689601595" height="17.830541654415498" fill="transparent" pointer-events="all"> + <title>6 LOC in Method: _LayerFrame._LayerFrame() -File: lib/files/file_tiff_encoder.dart +File: lib/files/file_tiff.dart - - _TiffTagEntry - 8 + + _LayerFrame + 6 - - - - - 6 LOC in Class: _TiffDataBlock + <rect x="2117.322433070574" y="537.4515700859814" width="40.99724689601595" height="31.144088534009686" rx="5.00" ry="5.00" fill="#9eb89a" fill-opacity="0.78"/> + <rect x="2117.322433070574" y="537.4515700859814" width="40.99724689601595" height="31.144088534009686" rx="5.00" ry="5.00" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2117.322433070574" y="537.4515700859814" width="40.99724689601595" height="31.144088534009686" rx="5.00" ry="5.00" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2117.322433070574" y="537.4515700859814" width="40.99724689601595" height="31.144088534009686" rx="5.00" ry="5.00" fill="transparent" pointer-events="all"> + <title>10 LOC in Class: _DecodedTiffLayer -File: lib/files/file_tiff_encoder.dart +File: lib/files/file_tiff.dart + + _DecodedTiffLayer + 10 LOC + + + + + + + 8 LOC in Class: _DecodedTiffDocument + +File: lib/files/file_tiff.dart - _TiffDataBlock - 6 LOC + _DecodedTiffDocument + 8 LOC - - - - - 492 LOC File: lib/files/file_tiff.dart + + + + + 492 LOC File: lib/files/file_tiff_encoder.dart - file_tiff.dart - 492 LOC + file_tiff_encoder.dart + 492 LOC - - - - - 443 LOC in Class: <...> + <rect x="2176.3196799665902" y="135.0" width="201.43123634733334" height="278.98867524099137" rx="5.00" ry="5.00" fill="#9eb89a" fill-opacity="0.45"/> + <rect x="2176.3196799665902" y="135.0" width="201.43123634733334" height="278.98867524099137" rx="5.00" ry="5.00" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2176.3196799665902" y="135.0" width="201.43123634733334" height="278.98867524099137" rx="5.00" ry="5.00" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8" stroke-dasharray="6,4"/> + <rect x="2176.3196799665902" y="135.0" width="201.43123634733334" height="278.98867524099137" rx="5.00" ry="5.00" fill="transparent" pointer-events="all"> + <title>419 LOC in Class: <...> -File: lib/files/file_tiff.dart +File: lib/files/file_tiff_encoder.dart - <...> - 443 LOC + <...> + 419 LOC - - - - - 10 LOC in Function: convertLayersToTiff() + <rect x="2278.7846494265523" y="159.0" width="48.00997419055696" height="86.51631950795144" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2278.7846494265523" y="159.0" width="48.00997419055696" height="86.51631950795144" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2278.7846494265523" y="159.0" width="48.00997419055696" height="86.51631950795144" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2278.7846494265523" y="159.0" width="48.00997419055696" height="86.51631950795144" fill="transparent" pointer-events="all"> + <title>38 LOC in Function: _encodeLayeredTiff() -File: lib/files/file_tiff.dart +File: lib/files/file_tiff_encoder.dart - - convertLayersToTiff - 10 + + _encodeLayeredTiff + 38 - - - - - 10 LOC in Function: _encodeLayerMetadata() + <rect x="2184.3196799665902" y="159.0" width="94.46496945996226" height="67.11245361007757" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2184.3196799665902" y="159.0" width="94.46496945996226" height="67.11245361007757" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2184.3196799665902" y="159.0" width="94.46496945996226" height="67.11245361007757" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2184.3196799665902" y="159.0" width="94.46496945996226" height="67.11245361007757" fill="transparent" pointer-events="all"> + <title>58 LOC in Function: _buildRootDirectoryLayout() -File: lib/files/file_tiff.dart +File: lib/files/file_tiff_encoder.dart - - _encodeLayerMetadata - 10 + + _buildRootDirectoryLayout + 58 - - - - - 26 LOC in Function: _buildLayerFrames() + <rect x="2184.3196799665902" y="226.11245361007758" width="94.46496945996226" height="57.85556345696341" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2184.3196799665902" y="226.11245361007758" width="94.46496945996226" height="57.85556345696341" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2184.3196799665902" y="226.11245361007758" width="94.46496945996226" height="57.85556345696341" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2184.3196799665902" y="226.11245361007758" width="94.46496945996226" height="57.85556345696341" fill="transparent" pointer-events="all"> + <title>50 LOC in Function: _buildLayerDirectoryLayout() -File: lib/files/file_tiff.dart +File: lib/files/file_tiff_encoder.dart - - _buildLayerFrames - 26 + + _buildLayerDirectoryLayout + 50 - - - - - 9 LOC in Function: _buildCompositeFrame() + <rect x="2278.7846494265523" y="245.51631950795144" width="90.96626688737108" height="38.45169755908954" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2278.7846494265523" y="245.51631950795144" width="90.96626688737108" height="38.45169755908954" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2278.7846494265523" y="245.51631950795144" width="90.96626688737108" height="38.45169755908954" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2278.7846494265523" y="245.51631950795144" width="90.96626688737108" height="38.45169755908954" fill="transparent" pointer-events="all"> + <title>32 LOC in Function: _writeDirectoryLayout() -File: lib/files/file_tiff.dart +File: lib/files/file_tiff_encoder.dart - - _buildCompositeFrame - 9 + + _writeDirectoryLayout + 32 - - - - - 16 LOC in Function: _resolveLayerExportBounds() + <rect x="2285.545427344603" y="344.9783461540162" width="21.499273779400966" height="40.67355272465013" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2285.545427344603" y="344.9783461540162" width="21.499273779400966" height="40.67355272465013" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2285.545427344603" y="344.9783461540162" width="21.499273779400966" height="40.67355272465013" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2285.545427344603" y="344.9783461540162" width="21.499273779400966" height="40.67355272465013" fill="transparent" pointer-events="all"> + <title>8 LOC in Function: _rgbaBitsPerSampleValues() -File: lib/files/file_tiff.dart +File: lib/files/file_tiff_encoder.dart - - _resolveLayerExportBounds - 16 + + _rgbaBitsPerSampleValues + 8 - - - - - 7 LOC in Function: _decodeUiImageToPackageImage() + <rect x="2307.044701124004" y="344.9783461540162" width="21.499273779400966" height="40.67355272465013" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2307.044701124004" y="344.9783461540162" width="21.499273779400966" height="40.67355272465013" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2307.044701124004" y="344.9783461540162" width="21.499273779400966" height="40.67355272465013" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2307.044701124004" y="344.9783461540162" width="21.499273779400966" height="40.67355272465013" fill="transparent" pointer-events="all"> + <title>8 LOC in Function: _rgbaSampleFormatValues() -File: lib/files/file_tiff.dart +File: lib/files/file_tiff_encoder.dart - - _decodeUiImageToPackageImage - 7 + + _rgbaSampleFormatValues + 8 - - - - - 20 LOC in Function: readTiffFileFromBytes() + <rect x="2285.545427344603" y="326.04410609254114" width="51.95657830021901" height="18.93424006147506" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2285.545427344603" y="326.04410609254114" width="51.95657830021901" height="18.93424006147506" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2285.545427344603" y="326.04410609254114" width="51.95657830021901" height="18.93424006147506" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2285.545427344603" y="326.04410609254114" width="51.95657830021901" height="18.93424006147506" fill="transparent" pointer-events="all"> + <title>9 LOC in Function: _shortValueEntry() -File: lib/files/file_tiff.dart +File: lib/files/file_tiff_encoder.dart - - readTiffFileFromBytes - 20 + + _shortValueEntry + 9 - - - - - 22 LOC in Function: _decodeTiffDocument() + <rect x="2337.502005644822" y="283.968017067041" width="32.24891066910145" height="30.5051645434876" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2337.502005644822" y="283.968017067041" width="32.24891066910145" height="30.5051645434876" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2337.502005644822" y="283.968017067041" width="32.24891066910145" height="30.5051645434876" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2337.502005644822" y="283.968017067041" width="32.24891066910145" height="30.5051645434876" fill="transparent" pointer-events="all"> + <title>9 LOC in Function: _longValueEntry() -File: lib/files/file_tiff.dart +File: lib/files/file_tiff_encoder.dart - - _decodeTiffDocument - 22 + + _longValueEntry + 9 - - - - - 31 LOC in Function: _decodeFrameLayers() + <rect x="2239.677510563941" y="319.7140750002093" width="45.867916780662085" height="33.362987404290365" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2239.677510563941" y="319.7140750002093" width="45.867916780662085" height="33.362987404290365" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2239.677510563941" y="319.7140750002093" width="45.867916780662085" height="33.362987404290365" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2239.677510563941" y="319.7140750002093" width="45.867916780662085" height="33.362987404290365" fill="transparent" pointer-events="all"> + <title>14 LOC in Function: _offsetBlockEntry() -File: lib/files/file_tiff.dart +File: lib/files/file_tiff_encoder.dart - - _decodeFrameLayers - 31 + + _offsetBlockEntry + 14 - - - - - 37 LOC in Function: _tryDecodeSubIfdLayers() + <rect x="2337.502005644822" y="314.47318161052857" width="32.24891066910145" height="30.5051645434876" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2337.502005644822" y="314.47318161052857" width="32.24891066910145" height="30.5051645434876" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2337.502005644822" y="314.47318161052857" width="32.24891066910145" height="30.5051645434876" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2337.502005644822" y="314.47318161052857" width="32.24891066910145" height="30.5051645434876" fill="transparent" pointer-events="all"> + <title>9 LOC in Function: _pageNumberEntry() -File: lib/files/file_tiff.dart +File: lib/files/file_tiff_encoder.dart - - _tryDecodeSubIfdLayers - 37 + + _pageNumberEntry + 9 - - - - - 19 LOC in Function: _readTiffImageAtOffset() + <rect x="2184.3196799665902" y="323.4589001170173" width="55.3578305973508" height="29.61816228748227" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2184.3196799665902" y="323.4589001170173" width="55.3578305973508" height="29.61816228748227" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2184.3196799665902" y="323.4589001170173" width="55.3578305973508" height="29.61816228748227" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2184.3196799665902" y="323.4589001170173" width="55.3578305973508" height="29.61816228748227" fill="transparent" pointer-events="all"> + <title>15 LOC in Function: _asciiEntry() -File: lib/files/file_tiff.dart +File: lib/files/file_tiff_encoder.dart - - _readTiffImageAtOffset - 19 + + _asciiEntry + 15 - - - - - 5 LOC in Function: _shouldSkipSubIfdImage() + <rect x="2239.677510563941" y="283.968017067041" width="45.867916780662085" height="35.74605793316826" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2239.677510563941" y="283.968017067041" width="45.867916780662085" height="35.74605793316826" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2239.677510563941" y="283.968017067041" width="45.867916780662085" height="35.74605793316826" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2239.677510563941" y="283.968017067041" width="45.867916780662085" height="35.74605793316826" fill="transparent" pointer-events="all"> + <title>15 LOC in Function: _shortArrayEntry() -File: lib/files/file_tiff.dart +File: lib/files/file_tiff_encoder.dart - - _shouldSkipSubIfdImage - 5 + + _shortArrayEntry + 15 - - - - - 5 LOC in Function: _extractSubIfdOffset() + <rect x="2213.241322074594" y="353.0770624044996" width="24.789978949717444" height="52.91161283649177" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2213.241322074594" y="353.0770624044996" width="24.789978949717444" height="52.91161283649177" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2213.241322074594" y="353.0770624044996" width="24.789978949717444" height="52.91161283649177" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2213.241322074594" y="353.0770624044996" width="24.789978949717444" height="52.91161283649177" fill="transparent" pointer-events="all"> + <title>12 LOC in Function: _shortTextEntry() -File: lib/files/file_tiff.dart +File: lib/files/file_tiff_encoder.dart - - _extractSubIfdOffset - 5 + + _shortTextEntry + 12 - - - - - 29 LOC in Function: _extractSubIfdLayerMeta() + <rect x="2238.0313010243112" y="380.6831212757127" width="47.51412632029176" height="25.305553965278673" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2238.0313010243112" y="380.6831212757127" width="47.51412632029176" height="25.305553965278673" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2238.0313010243112" y="380.6831212757127" width="47.51412632029176" height="25.305553965278673" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2238.0313010243112" y="380.6831212757127" width="47.51412632029176" height="25.305553965278673" fill="transparent" pointer-events="all"> + <title>11 LOC in Function: _rationalEntry() -File: lib/files/file_tiff.dart +File: lib/files/file_tiff_encoder.dart - - _extractSubIfdLayerMeta - 29 + + _rationalEntry + 11 - - - - - 6 LOC in Function: _fallbackLayerName() + <rect x="2184.3196799665902" y="283.968017067041" width="55.3578305973508" height="39.490883049976354" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2184.3196799665902" y="283.968017067041" width="55.3578305973508" height="39.490883049976354" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2184.3196799665902" y="283.968017067041" width="55.3578305973508" height="39.490883049976354" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2184.3196799665902" y="283.968017067041" width="55.3578305973508" height="39.490883049976354" fill="transparent" pointer-events="all"> + <title>20 LOC in Function: _inlineOrBlockEntry() -File: lib/files/file_tiff.dart +File: lib/files/file_tiff_encoder.dart - - _fallbackLayerName - 6 + + _inlineOrBlockEntry + 20 - - - - - 10 LOC in Function: _readIntTagList() + <rect x="2285.545427344603" y="283.968017067041" width="25.978289150109504" height="42.07608902550014" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2285.545427344603" y="283.968017067041" width="25.978289150109504" height="42.07608902550014" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2285.545427344603" y="283.968017067041" width="25.978289150109504" height="42.07608902550014" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2285.545427344603" y="283.968017067041" width="25.978289150109504" height="42.07608902550014" fill="transparent" pointer-events="all"> + <title>10 LOC in Function: _encodeShortValues() -File: lib/files/file_tiff.dart +File: lib/files/file_tiff_encoder.dart - - _readIntTagList - 10 + + _encodeShortValues + 10 - - - - - 10 LOC in Function: _readIntTag() + <rect x="2285.545427344603" y="385.6518988786663" width="42.99854755880193" height="20.336776362325068" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2285.545427344603" y="385.6518988786663" width="42.99854755880193" height="20.336776362325068" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2285.545427344603" y="385.6518988786663" width="42.99854755880193" height="20.336776362325068" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2285.545427344603" y="385.6518988786663" width="42.99854755880193" height="20.336776362325068" fill="transparent" pointer-events="all"> + <title>8 LOC in Function: _encodeShortText() -File: lib/files/file_tiff.dart +File: lib/files/file_tiff_encoder.dart - - _readIntTag - 10 + + _encodeShortText + 8 - - - - - 10 LOC in Function: _readDoubleTag() + <rect x="2328.543974903405" y="384.76769121073914" width="20.603470705259262" height="21.22098403025224" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2328.543974903405" y="384.76769121073914" width="20.603470705259262" height="21.22098403025224" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2328.543974903405" y="384.76769121073914" width="20.603470705259262" height="21.22098403025224" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2328.543974903405" y="384.76769121073914" width="20.603470705259262" height="21.22098403025224" fill="transparent" pointer-events="all"> + <title>4 LOC in Function: _encodeSketchBookPosition() -File: lib/files/file_tiff.dart +File: lib/files/file_tiff_encoder.dart - - _readDoubleTag - 10 + + _encodeSketchBookPosition + 4 - - - - - 20 LOC in Function: _readTextTag() + <rect x="2311.5237164947125" y="283.968017067041" width="25.978289150109504" height="42.07608902550014" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2311.5237164947125" y="283.968017067041" width="25.978289150109504" height="42.07608902550014" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2311.5237164947125" y="283.968017067041" width="25.978289150109504" height="42.07608902550014" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2311.5237164947125" y="283.968017067041" width="25.978289150109504" height="42.07608902550014" fill="transparent" pointer-events="all"> + <title>10 LOC in Function: _encodeLongValues() -File: lib/files/file_tiff.dart +File: lib/files/file_tiff_encoder.dart - - _readTextTag - 20 + + _encodeLongValues + 10 - - - - - 21 LOC in Function: _unMultiplyAlpha() + <rect x="2349.147445608664" y="384.76769121073914" width="20.603470705259262" height="21.22098403025224" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2349.147445608664" y="384.76769121073914" width="20.603470705259262" height="21.22098403025224" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2349.147445608664" y="384.76769121073914" width="20.603470705259262" height="21.22098403025224" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2349.147445608664" y="384.76769121073914" width="20.603470705259262" height="21.22098403025224" fill="transparent" pointer-events="all"> + <title>4 LOC in Function: _longArrayBlock() -File: lib/files/file_tiff.dart +File: lib/files/file_tiff_encoder.dart - - _unMultiplyAlpha - 21 + + _longArrayBlock + 4 - - - - - 6 LOC in Function: _unMultiplyChannel() + <rect x="2238.0313010243112" y="353.0770624044996" width="47.51412632029176" height="27.606058871213097" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2238.0313010243112" y="353.0770624044996" width="47.51412632029176" height="27.606058871213097" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2238.0313010243112" y="353.0770624044996" width="47.51412632029176" height="27.606058871213097" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2238.0313010243112" y="353.0770624044996" width="47.51412632029176" height="27.606058871213097" fill="transparent" pointer-events="all"> + <title>12 LOC in Function: _pixelBlock() -File: lib/files/file_tiff.dart +File: lib/files/file_tiff_encoder.dart - - _unMultiplyChannel - 6 + + _pixelBlock + 12 - - - - - 19 LOC in Function: _appendDecodedTiffLayer() + <rect x="2350.521010322348" y="344.9783461540162" width="19.22990599157531" height="39.78934505672296" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2350.521010322348" y="344.9783461540162" width="19.22990599157531" height="39.78934505672296" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2350.521010322348" y="344.9783461540162" width="19.22990599157531" height="39.78934505672296" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2350.521010322348" y="344.9783461540162" width="19.22990599157531" height="39.78934505672296" fill="transparent" pointer-events="all"> + <title>7 LOC in Function: _rationalBlock() -File: lib/files/file_tiff.dart +File: lib/files/file_tiff_encoder.dart - - _appendDecodedTiffLayer - 19 + + _rationalBlock + 7 - - - - - 30 LOC in Function: _extractLayerMeta() + <rect x="2326.794623617109" y="159.0" width="42.95629269681412" height="86.51631950795144" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2326.794623617109" y="159.0" width="42.95629269681412" height="86.51631950795144" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2326.794623617109" y="159.0" width="42.95629269681412" height="86.51631950795144" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2326.794623617109" y="159.0" width="42.95629269681412" height="86.51631950795144" fill="transparent" pointer-events="all"> + <title>34 LOC in Function: _encodeAssociatedRgbaPixels() -File: lib/files/file_tiff.dart +File: lib/files/file_tiff_encoder.dart - - _extractLayerMeta - 30 + + _encodeAssociatedRgbaPixels + 34 - - - - - 4 LOC in Function: _readDescriptionTag() + <rect x="2184.3196799665902" y="353.0770624044996" width="28.92164210800368" height="52.91161283649177" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2184.3196799665902" y="353.0770624044996" width="28.92164210800368" height="52.91161283649177" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2184.3196799665902" y="353.0770624044996" width="28.92164210800368" height="52.91161283649177" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2184.3196799665902" y="353.0770624044996" width="28.92164210800368" height="52.91161283649177" fill="transparent" pointer-events="all"> + <title>14 LOC in Function: _premultiplyChannel() -File: lib/files/file_tiff.dart +File: lib/files/file_tiff_encoder.dart - - _readDescriptionTag - 4 + + _premultiplyChannel + 14 - - - - - 31 LOC in Function: _tryParseJsonMeta() + <rect x="2328.543974903405" y="344.9783461540162" width="21.977035418943213" height="39.78934505672296" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2328.543974903405" y="344.9783461540162" width="21.977035418943213" height="39.78934505672296" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2328.543974903405" y="344.9783461540162" width="21.977035418943213" height="39.78934505672296" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2328.543974903405" y="344.9783461540162" width="21.977035418943213" height="39.78934505672296" fill="transparent" pointer-events="all"> + <title>8 LOC in Function: _encodeAscii() -File: lib/files/file_tiff.dart +File: lib/files/file_tiff_encoder.dart - - _tryParseJsonMeta - 31 + + _encodeAscii + 8 + - - - - - 23 LOC in Function: readTiffFromFilePath() + <rect x="2176.3196799665902" y="413.98867524099137" width="137.96660023789954" height="48.60661883673595" rx="5.00" ry="5.00" fill="#9eb89a" fill-opacity="0.78"/> + <rect x="2176.3196799665902" y="413.98867524099137" width="137.96660023789954" height="48.60661883673595" rx="5.00" ry="5.00" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2176.3196799665902" y="413.98867524099137" width="137.96660023789954" height="48.60661883673595" rx="5.00" ry="5.00" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2176.3196799665902" y="413.98867524099137" width="137.96660023789954" height="48.60661883673595" rx="5.00" ry="5.00" fill="transparent" pointer-events="all"> + <title>50 LOC in Class: _TiffDirectoryLayout -File: lib/files/file_tiff.dart +File: lib/files/file_tiff_encoder.dart - - readTiffFromFilePath - 23 + _TiffDirectoryLayout + 50 LOC + + + + + + 16 LOC in Method: _TiffDirectoryLayout._TiffDirectoryLayout() + +File: lib/files/file_tiff_encoder.dart + + + _TiffDirectoryLayout + 16 - - - - - 7 LOC in Function: _decodeImageFromList() + <rect x="2281.89296015691" y="437.98867524099137" width="24.393320047579905" height="16.606618836735947" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2281.89296015691" y="437.98867524099137" width="24.393320047579905" height="16.606618836735947" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2281.89296015691" y="437.98867524099137" width="24.393320047579905" height="16.606618836735947" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2281.89296015691" y="437.98867524099137" width="24.393320047579905" height="16.606618836735947" fill="transparent" pointer-events="all"> + <title>8 LOC in Method: _TiffDirectoryLayout.assignBlockOffsets() -File: lib/files/file_tiff.dart +File: lib/files/file_tiff_encoder.dart - - _decodeImageFromList - 7 + + assignBlockOffsets + 8 - - - - - - 16 LOC in Class: _LayerFrame + <rect x="2233.10632006175" y="437.98867524099137" width="48.78664009515982" height="16.606618836735947" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2233.10632006175" y="437.98867524099137" width="48.78664009515982" height="16.606618836735947" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2233.10632006175" y="437.98867524099137" width="48.78664009515982" height="16.606618836735947" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2233.10632006175" y="437.98867524099137" width="48.78664009515982" height="16.606618836735947" fill="transparent" pointer-events="all"> + <title>16 LOC in Method: _TiffDirectoryLayout.populateSubIfdOffsets() -File: lib/files/file_tiff.dart +File: lib/files/file_tiff_encoder.dart - _LayerFrame - 16 LOC + + populateSubIfdOffsets + 16 + + - - - - - 15 LOC in Class: _LayerMeta + <rect x="2314.2862802044897" y="413.98867524099137" width="46.90864408088585" height="48.60661883673595" rx="5.00" ry="5.00" fill="#9eb89a" fill-opacity="0.78"/> + <rect x="2314.2862802044897" y="413.98867524099137" width="46.90864408088585" height="48.60661883673595" rx="5.00" ry="5.00" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2314.2862802044897" y="413.98867524099137" width="46.90864408088585" height="48.60661883673595" rx="5.00" ry="5.00" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2314.2862802044897" y="413.98867524099137" width="46.90864408088585" height="48.60661883673595" rx="5.00" ry="5.00" fill="transparent" pointer-events="all"> + <title>17 LOC in Class: _TiffTagEntry -File: lib/files/file_tiff.dart +File: lib/files/file_tiff_encoder.dart - _LayerMeta - 15 LOC - + _TiffTagEntry + 17 LOC - - - - - 10 LOC in Class: _DecodedTiffLayer + <rect x="2322.2862802044897" y="437.98867524099137" width="30.90864408088585" height="16.606618836735947" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2322.2862802044897" y="437.98867524099137" width="30.90864408088585" height="16.606618836735947" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2322.2862802044897" y="437.98867524099137" width="30.90864408088585" height="16.606618836735947" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2322.2862802044897" y="437.98867524099137" width="30.90864408088585" height="16.606618836735947" fill="transparent" pointer-events="all"> + <title>8 LOC in Method: _TiffTagEntry._TiffTagEntry() -File: lib/files/file_tiff.dart +File: lib/files/file_tiff_encoder.dart - _DecodedTiffLayer - 10 LOC + + _TiffTagEntry + 8 + + - - - - - 8 LOC in Class: _DecodedTiffDocument + <rect x="2361.1949242853757" y="413.98867524099137" width="16.555992028547948" height="48.60661883673595" rx="5.00" ry="5.00" fill="#9eb89a" fill-opacity="0.78"/> + <rect x="2361.1949242853757" y="413.98867524099137" width="16.555992028547948" height="48.60661883673595" rx="5.00" ry="5.00" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2361.1949242853757" y="413.98867524099137" width="16.555992028547948" height="48.60661883673595" rx="5.00" ry="5.00" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2361.1949242853757" y="413.98867524099137" width="16.555992028547948" height="48.60661883673595" rx="5.00" ry="5.00" fill="transparent" pointer-events="all"> + <title>6 LOC in Class: _TiffDataBlock -File: lib/files/file_tiff.dart +File: lib/files/file_tiff_encoder.dart - _DecodedTiffDocument - 8 LOC + _TiffDataBlock + 6 LOC - - - - - 397 LOC File: lib/files/import_files.dart + + + + + 425 LOC File: lib/files/import_files.dart - import_files.dart - 397 LOC + import_files.dart + 425 LOC - - - - - 397 LOC in Class: <...> + <rect x="2395.7509163139234" y="135.0" width="171.54934034068432" height="327.5952940777273" rx="5.00" ry="5.00" fill="#9eb89a" fill-opacity="0.45"/> + <rect x="2395.7509163139234" y="135.0" width="171.54934034068432" height="327.5952940777273" rx="5.00" ry="5.00" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2395.7509163139234" y="135.0" width="171.54934034068432" height="327.5952940777273" rx="5.00" ry="5.00" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8" stroke-dasharray="6,4"/> + <rect x="2395.7509163139234" y="135.0" width="171.54934034068432" height="327.5952940777273" rx="5.00" ry="5.00" fill="transparent" pointer-events="all"> + <title>425 LOC in Class: <...> File: lib/files/import_files.dart - <...> - 397 LOC + <...> + 425 LOC - - - - + + + + 8 LOC in Function: _showImportFeedback() File: lib/files/import_files.dart - - _showImportFeedback - 8 + + _showImportFeedback + 8 - - - - + + + + 78 LOC in Function: onFileNew() File: lib/files/import_files.dart - - onFileNew - 78 + + onFileNew + 78 - - - - - 73 LOC in Function: onFileOpen() + <rect x="2403.7509163139234" y="236.09271694460602" width="109.46064690640749" height="73.13924428078008" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2403.7509163139234" y="236.09271694460602" width="109.46064690640749" height="73.13924428078008" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2403.7509163139234" y="236.09271694460602" width="109.46064690640749" height="73.13924428078008" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2403.7509163139234" y="236.09271694460602" width="109.46064690640749" height="73.13924428078008" fill="transparent" pointer-events="all"> + <title>74 LOC in Function: onFileOpen() File: lib/files/import_files.dart - - onFileOpen - 73 + + onFileOpen + 74 - - - - - 57 LOC in Function: openFileFromPath() + <rect x="2513.211563220331" y="159.0" width="46.088693434276834" height="150.2319612253861" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2513.211563220331" y="159.0" width="46.088693434276834" height="150.2319612253861" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2513.211563220331" y="159.0" width="46.088693434276834" height="150.2319612253861" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2513.211563220331" y="159.0" width="46.088693434276834" height="150.2319612253861" fill="transparent" pointer-events="all"> + <title>64 LOC in Function: openFileFromPath() File: lib/files/import_files.dart - - openFileFromPath - 57 + + openFileFromPath + 64 - - - - + + + + + 20 LOC in Function: _restoreFlatLayerSelection() + +File: lib/files/import_files.dart + + + _restoreFlatLayerSelection + 20 + + + + + + + 11 LOC in Function: isFileExtensionSupported() File: lib/files/import_files.dart - - isFileExtensionSupported - 11 + + isFileExtensionSupported + 11 - - - - + + + + 27 LOC in Function: _decodeAndApplyImage() File: lib/files/import_files.dart - - _decodeAndApplyImage - 27 + + _decodeAndApplyImage + 27 - - - - + + + + 15 LOC in Function: readImageFromFilePath() File: lib/files/import_files.dart - - readImageFromFilePath - 15 + + readImageFromFilePath + 15 - - - - + + + + 9 LOC in Function: readImageFileFromBytes() File: lib/files/import_files.dart - - readImageFileFromBytes - 9 + + readImageFileFromBytes + 9 - - - - + + + + 21 LOC in Function: _readHeifFromFilePath() File: lib/files/import_files.dart - - _readHeifFromFilePath - 21 + + _readHeifFromFilePath + 21 - - - - + + + + 17 LOC in Function: _readHeifFromBytes() File: lib/files/import_files.dart - - _readHeifFromBytes - 17 + + _readHeifFromBytes + 17 - - - - + + + + 62 LOC in Function: onFileDropped() File: lib/files/import_files.dart - - onFileDropped - 62 + + onFileDropped + 62 - - - - + + + + 19 LOC in Function: addFileAsLayer() File: lib/files/import_files.dart - - addFileAsLayer - 19 + + addFileAsLayer + 19 - - - - + + + + 332 LOC File: lib/files/webp_vp8l_encoder.dart - webp_vp8l_encoder.dart - 332 LOC + webp_vp8l_encoder.dart + 332 LOC - - - - + + + + 320 LOC in Class: WebPVp8LEncoder File: lib/files/webp_vp8l_encoder.dart - WebPVp8LEncoder - 320 LOC + WebPVp8LEncoder + 320 LOC - - - - + + + + 1 LOC in Method: WebPVp8LEncoder.WebPVp8LEncoder() File: lib/files/webp_vp8l_encoder.dart - - WebPVp8LEncoder - 1 + + WebPVp8LEncoder + 1 - - - - + + + + 172 LOC in Method: WebPVp8LEncoder.encode() File: lib/files/webp_vp8l_encoder.dart - - encode - 172 + + encode + 172 - - - - + + + + 74 LOC in Method: WebPVp8LEncoder._tokenize() File: lib/files/webp_vp8l_encoder.dart - - _tokenize - 74 + + _tokenize + 74 - - - - + + + + 9 LOC in Method: WebPVp8LEncoder._lengthSymbol() File: lib/files/webp_vp8l_encoder.dart - - _lengthSymbol - 9 + + _lengthSymbol + 9 - - - - + + + + 11 LOC in Method: WebPVp8LEncoder._lengthExtra() File: lib/files/webp_vp8l_encoder.dart - - _lengthExtra - 11 + + _lengthExtra + 11 - - - - + + + + 18 LOC in Method: WebPVp8LEncoder._distToPlaneCode() File: lib/files/webp_vp8l_encoder.dart - - _distToPlaneCode - 18 + + _distToPlaneCode + 18 - - - - + + + + 9 LOC in Method: WebPVp8LEncoder._prefixCode() File: lib/files/webp_vp8l_encoder.dart - - _prefixCode - 9 + + _prefixCode + 9 - - - - + + + + 12 LOC in Method: WebPVp8LEncoder._prefixExtra() File: lib/files/webp_vp8l_encoder.dart - - _prefixExtra - 12 + + _prefixExtra + 12 - - - - + + + + 9 LOC in Method: WebPVp8LEncoder._log2Floor() File: lib/files/webp_vp8l_encoder.dart - - _log2Floor - 9 + + _log2Floor + 9 - - - - + + + + 12 LOC in Class: _WebPTokenStream File: lib/files/webp_vp8l_encoder.dart - _WebPTokenStream - 12 LOC + _WebPTokenStream + 12 LOC - - - - + + + + 277 LOC File: lib/files/webp_huffman_codec.dart - webp_huffman_codec.dart - 277 LOC + webp_huffman_codec.dart + 277 LOC - - - - + + + + 277 LOC in Class: WebPHuffmanCodec File: lib/files/webp_huffman_codec.dart - WebPHuffmanCodec - 277 LOC + WebPHuffmanCodec + 277 LOC - - - - + + + + 74 LOC in Method: WebPHuffmanCodec.buildHuffmanCodeLengths() File: lib/files/webp_huffman_codec.dart - - buildHuffmanCodeLengths - 74 + + buildHuffmanCodeLengths + 74 - - - - + + + + 81 LOC in Method: WebPHuffmanCodec.writeHuffmanCode() File: lib/files/webp_huffman_codec.dart - - writeHuffmanCode - 81 + + writeHuffmanCode + 81 - - - - + + + + 75 LOC in Method: WebPHuffmanCodec.buildRleSequence() File: lib/files/webp_huffman_codec.dart - - buildRleSequence - 75 + + buildRleSequence + 75 - - - - + + + + 34 LOC in Method: WebPHuffmanCodec.canonicalCodes() File: lib/files/webp_huffman_codec.dart - - canonicalCodes - 34 + + canonicalCodes + 34 - - - - + + + + 10 LOC in Method: WebPHuffmanCodec.reverseBits() File: lib/files/webp_huffman_codec.dart - - reverseBits - 10 + + reverseBits + 10 - - - - + + + + 261 LOC File: lib/files/webp_transform_codec.dart - webp_transform_codec.dart - 261 LOC + webp_transform_codec.dart + 261 LOC - - - - + + + + 261 LOC in Class: WebPTransformCodec File: lib/files/webp_transform_codec.dart - WebPTransformCodec - 261 LOC + WebPTransformCodec + 261 LOC - - - - + + + + 1 LOC in Method: WebPTransformCodec.WebPTransformCodec() File: lib/files/webp_transform_codec.dart - - WebPTransformCodec - 1 + + WebPTransformCodec + 1 - - - - + + + + 12 LOC in Method: WebPTransformCodec.applySubtractGreenTransform() File: lib/files/webp_transform_codec.dart - - applySubtractGreenTransform - 12 + + applySubtractGreenTransform + 12 - - - - + + + + 100 LOC in Method: WebPTransformCodec.selectPredictorModes() File: lib/files/webp_transform_codec.dart - - selectPredictorModes - 100 + + selectPredictorModes + 100 - - - - + + + + 93 LOC in Method: WebPTransformCodec.applyPredictorTransform() File: lib/files/webp_transform_codec.dart - - applyPredictorTransform - 93 + + applyPredictorTransform + 93 - - - - + + + + 51 LOC in Method: WebPTransformCodec.writePredictorSubImage() File: lib/files/webp_transform_codec.dart - - writePredictorSubImage - 51 + + writePredictorSubImage + 51 - - - - + + + + 234 LOC File: lib/files/webp_encoder_shared.dart - webp_encoder_shared.dart - 234 LOC + webp_encoder_shared.dart + 234 LOC - - - - + + + + 226 LOC in Class: WebPEncodingConstants File: lib/files/webp_encoder_shared.dart - WebPEncodingConstants - 226 LOC + WebPEncodingConstants + 226 LOC - - - - + + + + 1 LOC in Method: WebPEncodingConstants.WebPEncodingConstants._() File: lib/files/webp_encoder_shared.dart - - WebPEncodingConstants._ - 1 + + WebPEncodingConstants._ + 1 - - - - + + + + 8 LOC in Class: <...> File: lib/files/webp_encoder_shared.dart - <...> - 8 LOC + <...> + 8 LOC - - - - + + + + 214 LOC File: lib/files/export_download_non_web.dart - export_download_non_web.dart - 214 LOC + export_download_non_web.dart + 214 LOC - - - - + + + + 214 LOC in Class: <...> File: lib/files/export_download_non_web.dart - <...> - 214 LOC + <...> + 214 LOC - - - - + + + + 30 LOC in Function: onExportAsPng() File: lib/files/export_download_non_web.dart - - onExportAsPng - 30 + + onExportAsPng + 30 - - - - + + + + 7 LOC in Function: saveAsPng() File: lib/files/export_download_non_web.dart - - saveAsPng - 7 + + saveAsPng + 7 - - - - + + + + 30 LOC in Function: onExportAsJpeg() File: lib/files/export_download_non_web.dart - - onExportAsJpeg - 30 + + onExportAsJpeg + 30 - - - - + + + + 9 LOC in Function: saveAsJpeg() File: lib/files/export_download_non_web.dart - - saveAsJpeg - 9 + + saveAsJpeg + 9 - - - - + + + + 22 LOC in Function: onExportAsOra() File: lib/files/export_download_non_web.dart - - onExportAsOra - 22 + + onExportAsOra + 22 - - - - + + + + 9 LOC in Function: saveAsOra() File: lib/files/export_download_non_web.dart - - saveAsOra - 9 + + saveAsOra + 9 - - - - + + + + 14 LOC in Function: onExportAsWebp() File: lib/files/export_download_non_web.dart - - onExportAsWebp - 14 + + onExportAsWebp + 14 - - - - + + + + 15 LOC in Function: onExportAsTiff() File: lib/files/export_download_non_web.dart - - onExportAsTiff - 15 + + onExportAsTiff + 15 - - - - + + + + 32 LOC in Function: _exportWithFilePicker() File: lib/files/export_download_non_web.dart - - _exportWithFilePicker - 32 + + _exportWithFilePicker + 32 - - - - + + + + 14 LOC in Function: saveAsTiff() File: lib/files/export_download_non_web.dart - - saveAsTiff - 14 + + saveAsTiff + 14 - - - - + + + + 9 LOC in Function: saveAsWebp() File: lib/files/export_download_non_web.dart - - saveAsWebp - 9 + + saveAsWebp + 9 - - - - + + + + 14 LOC in Function: onExportAsHeic() File: lib/files/export_download_non_web.dart - - onExportAsHeic - 14 + + onExportAsHeic + 14 - - - - + + + + 9 LOC in Function: saveAsHeic() File: lib/files/export_download_non_web.dart - - saveAsHeic - 9 + + saveAsHeic + 9 - - - - + + + + 205 LOC File: lib/files/save_backup.dart - save_backup.dart - 205 LOC + save_backup.dart + 205 LOC - - - - + + + + 205 LOC in Class: <...> File: lib/files/save_backup.dart - <...> - 205 LOC + <...> + 205 LOC - - - - + + + + 17 LOC in Function: saveWithOptionalBackupAndResolvedFileAccess() File: lib/files/save_backup.dart - - saveWithOptionalBackupAndResolvedFileAccess - 17 + + saveWithOptionalBackupAndResolvedFileAccess + 17 - - - - + + + + 43 LOC in Function: saveWithOptionalBackup() File: lib/files/save_backup.dart - - saveWithOptionalBackup - 43 + + saveWithOptionalBackup + 43 - - - - + + + + 21 LOC in Function: _trySaveWithSecurityScopedBackupReplacement() File: lib/files/save_backup.dart - - _trySaveWithSecurityScopedBackupReplacement - 21 + + _trySaveWithSecurityScopedBackupReplacement + 21 - - - - + + + + 10 LOC in Function: _deleteTemporarySaveFileIfPresent() File: lib/files/save_backup.dart - - _deleteTemporarySaveFileIfPresent - 10 + + _deleteTemporarySaveFileIfPresent + 10 - - - - + + + + 8 LOC in Function: _renameCurrentFileToBackup() File: lib/files/save_backup.dart - - _renameCurrentFileToBackup - 8 + + _renameCurrentFileToBackup + 8 - - - - + + + + 13 LOC in Function: _restoreBackupFile() File: lib/files/save_backup.dart - - _restoreBackupFile - 13 + + _restoreBackupFile + 13 - - - - + + + + 19 LOC in Function: _pruneOldBackups() File: lib/files/save_backup.dart - - _pruneOldBackups - 19 + + _pruneOldBackups + 19 - - - - + + + + 18 LOC in Function: _listBackupFiles() File: lib/files/save_backup.dart - - _listBackupFiles - 18 + + _listBackupFiles + 18 - - - - + + + + 8 LOC in Function: _buildBackupPath() File: lib/files/save_backup.dart - - _buildBackupPath - 8 + + _buildBackupPath + 8 - - - - + + + + 8 LOC in Function: _buildBackupFileName() File: lib/files/save_backup.dart - - _buildBackupFileName - 8 + + _buildBackupFileName + 8 - - - - + + + + 10 LOC in Function: _buildTemporarySaveFile() File: lib/files/save_backup.dart - - _buildTemporarySaveFile - 10 + + _buildTemporarySaveFile + 10 - - - - + + + + 12 LOC in Function: _formatBackupTimestamp() File: lib/files/save_backup.dart - - _formatBackupTimestamp - 12 + + _formatBackupTimestamp + 12 - - - - + + + + 8 LOC in Function: _fileNameFor() File: lib/files/save_backup.dart - - _fileNameFor - 8 + + _fileNameFor + 8 - - - - + + + + 10 LOC in Function: _splitFileName() File: lib/files/save_backup.dart - - _splitFileName - 10 + + _splitFileName + 10 - - - - - 186 LOC File: lib/files/tiff_constants.dart + + + + + 188 LOC File: lib/files/tiff_constants.dart - tiff_constants.dart - 186 LOC + tiff_constants.dart + 188 LOC - - - - - 186 LOC in Class: TiffConstants + <rect x="2218.541115424817" y="627.5109294471988" width="127.46565095190019" height="174.42677639093185" rx="5.00" ry="5.00" fill="#9eb89a" fill-opacity="0.78"/> + <rect x="2218.541115424817" y="627.5109294471988" width="127.46565095190019" height="174.42677639093185" rx="5.00" ry="5.00" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2218.541115424817" y="627.5109294471988" width="127.46565095190019" height="174.42677639093185" rx="5.00" ry="5.00" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2218.541115424817" y="627.5109294471988" width="127.46565095190019" height="174.42677639093185" rx="5.00" ry="5.00" fill="transparent" pointer-events="all"> + <title>188 LOC in Class: TiffConstants File: lib/files/tiff_constants.dart - TiffConstants - 186 LOC + TiffConstants + 188 LOC - - - - - 139 LOC File: lib/files/export_download_web.dart + + + + + 147 LOC File: lib/files/save.dart - export_download_web.dart - 139 LOC + save.dart + 147 LOC - - - - - 139 LOC in Class: <...> + <rect x="2364.0067663767168" y="627.5109294471988" width="95.74175898898577" height="174.42677639093185" rx="5.00" ry="5.00" fill="#9eb89a" fill-opacity="0.45"/> + <rect x="2364.0067663767168" y="627.5109294471988" width="95.74175898898577" height="174.42677639093185" rx="5.00" ry="5.00" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2364.0067663767168" y="627.5109294471988" width="95.74175898898577" height="174.42677639093185" rx="5.00" ry="5.00" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8" stroke-dasharray="6,4"/> + <rect x="2364.0067663767168" y="627.5109294471988" width="95.74175898898577" height="174.42677639093185" rx="5.00" ry="5.00" fill="transparent" pointer-events="all"> + <title>147 LOC in Class: <...> -File: lib/files/export_download_web.dart +File: lib/files/save.dart - <...> - 139 LOC + <...> + 147 LOC - - - - - 5 LOC in Function: _ignoreRecentFilePreferences() + <rect x="2424.3372957132387" y="782.663353718131" width="27.41122965246386" height="11.274352119999548" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2424.3372957132387" y="782.663353718131" width="27.41122965246386" height="11.274352119999548" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2424.3372957132387" y="782.663353718131" width="27.41122965246386" height="11.274352119999548" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2424.3372957132387" y="782.663353718131" width="27.41122965246386" height="11.274352119999548" fill="transparent" pointer-events="all"> + <title>4 LOC in Method: .supportsLayers() -File: lib/files/export_download_web.dart +File: lib/files/save.dart - - _ignoreRecentFilePreferences - 5 + + supportsLayers + 4 - - - - - 14 LOC in Function: onExportAsPng() + <rect x="2372.0067663767168" y="731.928769178133" width="52.330529336521906" height="32.48087158380824" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2372.0067663767168" y="731.928769178133" width="52.330529336521906" height="32.48087158380824" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2372.0067663767168" y="731.928769178133" width="52.330529336521906" height="32.48087158380824" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2372.0067663767168" y="731.928769178133" width="52.330529336521906" height="32.48087158380824" fill="transparent" pointer-events="all"> + <title>22 LOC in Method: .fromFileName() -File: lib/files/export_download_web.dart +File: lib/files/save.dart - - onExportAsPng - 14 + + fromFileName + 22 - - - - - 7 LOC in Function: saveAsPng() + <rect x="2372.0067663767168" y="764.4096407619413" width="52.330529336521906" height="29.528065076189307" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2372.0067663767168" y="764.4096407619413" width="52.330529336521906" height="29.528065076189307" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2372.0067663767168" y="764.4096407619413" width="52.330529336521906" height="29.528065076189307" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2372.0067663767168" y="764.4096407619413" width="52.330529336521906" height="29.528065076189307" fill="transparent" pointer-events="all"> + <title>20 LOC in Function: saveAsTiff() -File: lib/files/export_download_web.dart +File: lib/files/save.dart - - saveAsPng - 7 + + saveAsTiff + 20 - - - - - 14 LOC in Function: onExportAsJpeg() + <rect x="2372.0067663767168" y="651.5109294471988" width="79.74175898898577" height="80.4178397309343" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2372.0067663767168" y="651.5109294471988" width="79.74175898898577" height="80.4178397309343" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2372.0067663767168" y="651.5109294471988" width="79.74175898898577" height="80.4178397309343" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2372.0067663767168" y="651.5109294471988" width="79.74175898898577" height="80.4178397309343" fill="transparent" pointer-events="all"> + <title>83 LOC in Function: saveFile() -File: lib/files/export_download_web.dart +File: lib/files/save.dart - - onExportAsJpeg - 14 + + saveFile + 83 - - - - - 7 LOC in Function: saveAsJpeg() + <rect x="2424.3372957132387" y="731.928769178133" width="27.41122965246386" height="50.734584539997996" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2424.3372957132387" y="731.928769178133" width="27.41122965246386" height="50.734584539997996" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2424.3372957132387" y="731.928769178133" width="27.41122965246386" height="50.734584539997996" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2424.3372957132387" y="731.928769178133" width="27.41122965246386" height="50.734584539997996" fill="transparent" pointer-events="all"> + <title>18 LOC in Function: _saveWithResolvedFileAccess() -File: lib/files/export_download_web.dart +File: lib/files/save.dart - - saveAsJpeg - 7 + + _saveWithResolvedFileAccess + 18 + + - - - - - 14 LOC in Function: onExportAsOra() + <rect x="2469.748525365703" y="603.5109294471988" width="105.55173128890488" height="206.42677639093185" fill="#1f6f8b" fill-opacity="0.62"/> + <rect x="2469.748525365703" y="603.5109294471988" width="105.55173128890488" height="206.42677639093185" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2469.748525365703" y="603.5109294471988" width="105.55173128890488" height="206.42677639093185" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2469.748525365703" y="603.5109294471988" width="105.55173128890488" height="206.42677639093185" fill="transparent" pointer-events="all"> + <title>139 LOC File: lib/files/export_download_web.dart + + export_download_web.dart + 139 LOC + + + + + + 139 LOC in Class: <...> File: lib/files/export_download_web.dart - - onExportAsOra - 14 - - + <...> + 139 LOC - - - - - 7 LOC in Function: saveAsOra() + <rect x="2544.6432087528333" y="768.228228870245" width="14.657047901774522" height="25.70947696788567" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2544.6432087528333" y="768.228228870245" width="14.657047901774522" height="25.70947696788567" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2544.6432087528333" y="768.228228870245" width="14.657047901774522" height="25.70947696788567" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2544.6432087528333" y="768.228228870245" width="14.657047901774522" height="25.70947696788567" fill="transparent" pointer-events="all"> + <title>5 LOC in Function: _ignoreRecentFilePreferences() File: lib/files/export_download_web.dart - - saveAsOra - 7 + + _ignoreRecentFilePreferences + 5 - - - - - 9 LOC in Function: onExportAsWebp() + <rect x="2485.748525365703" y="699.3280726000296" width="44.13103877334292" height="23.90857157641542" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2485.748525365703" y="699.3280726000296" width="44.13103877334292" height="23.90857157641542" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2485.748525365703" y="699.3280726000296" width="44.13103877334292" height="23.90857157641542" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2485.748525365703" y="699.3280726000296" width="44.13103877334292" height="23.90857157641542" fill="transparent" pointer-events="all"> + <title>14 LOC in Function: onExportAsPng() File: lib/files/export_download_web.dart - - onExportAsWebp - 9 + + onExportAsPng + 14 - - - - - 11 LOC in Function: onExportAsTiff() + <rect x="2507.334359548316" y="762.5150117662704" width="16.788982142032634" height="31.422694071860263" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2507.334359548316" y="762.5150117662704" width="16.788982142032634" height="31.422694071860263" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2507.334359548316" y="762.5150117662704" width="16.788982142032634" height="31.422694071860263" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2507.334359548316" y="762.5150117662704" width="16.788982142032634" height="31.422694071860263" fill="transparent" pointer-events="all"> + <title>7 LOC in Function: saveAsPng() File: lib/files/export_download_web.dart - - onExportAsTiff - 11 + + saveAsPng + 7 - - - - - 7 LOC in Function: saveAsWebp() + <rect x="2529.8795641390457" y="651.5109294471988" width="29.420692515561953" height="35.862857364623125" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2529.8795641390457" y="651.5109294471988" width="29.420692515561953" height="35.862857364623125" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2529.8795641390457" y="651.5109294471988" width="29.420692515561953" height="35.862857364623125" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2529.8795641390457" y="651.5109294471988" width="29.420692515561953" height="35.862857364623125" fill="transparent" pointer-events="all"> + <title>14 LOC in Function: onExportAsJpeg() File: lib/files/export_download_web.dart - - saveAsWebp - 7 + + onExportAsJpeg + 14 - - - - - 9 LOC in Function: onExportAsHeic() + <rect x="2524.1233416903488" y="723.236644176445" width="17.588457482129428" height="29.994389795866617" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2524.1233416903488" y="723.236644176445" width="17.588457482129428" height="29.994389795866617" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2524.1233416903488" y="723.236644176445" width="17.588457482129428" height="29.994389795866617" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2524.1233416903488" y="723.236644176445" width="17.588457482129428" height="29.994389795866617" fill="transparent" pointer-events="all"> + <title>7 LOC in Function: saveAsJpeg() File: lib/files/export_download_web.dart - - onExportAsHeic - 9 + + saveAsJpeg + 7 - - - - - 7 LOC in Function: saveAsHeic() + <rect x="2529.8795641390457" y="687.3737868118219" width="29.420692515561953" height="35.862857364623125" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2529.8795641390457" y="687.3737868118219" width="29.420692515561953" height="35.862857364623125" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2529.8795641390457" y="687.3737868118219" width="29.420692515561953" height="35.862857364623125" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2529.8795641390457" y="687.3737868118219" width="29.420692515561953" height="35.862857364623125" fill="transparent" pointer-events="all"> + <title>14 LOC in Function: onExportAsOra() File: lib/files/export_download_web.dart - - saveAsHeic - 7 + + onExportAsOra + 14 - - - - - 28 LOC in Function: downloadBlob() + <rect x="2541.711799172478" y="723.236644176445" width="17.588457482129428" height="29.994389795866617" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2541.711799172478" y="723.236644176445" width="17.588457482129428" height="29.994389795866617" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2541.711799172478" y="723.236644176445" width="17.588457482129428" height="29.994389795866617" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2541.711799172478" y="723.236644176445" width="17.588457482129428" height="29.994389795866617" fill="transparent" pointer-events="all"> + <title>7 LOC in Function: saveAsOra() File: lib/files/export_download_web.dart - - downloadBlob - 28 + + saveAsOra + 7 - - - - - - - 139 LOC File: lib/files/save.dart + + + + + 9 LOC in Function: onExportAsWebp() + +File: lib/files/export_download_web.dart - save.dart - 139 LOC + + onExportAsWebp + 9 + + - - - - - 139 LOC in Class: <...> + <rect x="2485.748525365703" y="723.236644176445" width="38.37481632464602" height="21.603102174403936" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2485.748525365703" y="723.236644176445" width="38.37481632464602" height="21.603102174403936" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2485.748525365703" y="723.236644176445" width="38.37481632464602" height="21.603102174403936" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2485.748525365703" y="723.236644176445" width="38.37481632464602" height="21.603102174403936" fill="transparent" pointer-events="all"> + <title>11 LOC in Function: onExportAsTiff() -File: lib/files/save.dart +File: lib/files/export_download_web.dart - <...> - 139 LOC + + onExportAsTiff + 11 + + - - - - - 22 LOC in Method: .fromFileName() + <rect x="2524.1233416903488" y="753.2310339723116" width="35.176914964258856" height="14.997194897933312" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2524.1233416903488" y="753.2310339723116" width="35.176914964258856" height="14.997194897933312" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2524.1233416903488" y="753.2310339723116" width="35.176914964258856" height="14.997194897933312" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2524.1233416903488" y="753.2310339723116" width="35.176914964258856" height="14.997194897933312" fill="transparent" pointer-events="all"> + <title>7 LOC in Function: saveAsWebp() -File: lib/files/save.dart +File: lib/files/export_download_web.dart - - fromFileName - 22 + + saveAsWebp + 7 - - - - - 20 LOC in Function: saveAsTiff() + <rect x="2485.748525365703" y="762.5150117662704" width="21.585834182613386" height="31.422694071860263" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2485.748525365703" y="762.5150117662704" width="21.585834182613386" height="31.422694071860263" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2485.748525365703" y="762.5150117662704" width="21.585834182613386" height="31.422694071860263" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2485.748525365703" y="762.5150117662704" width="21.585834182613386" height="31.422694071860263" fill="transparent" pointer-events="all"> + <title>9 LOC in Function: onExportAsHeic() -File: lib/files/save.dart +File: lib/files/export_download_web.dart - - saveAsTiff - 20 + + onExportAsHeic + 9 - - - - - 79 LOC in Function: saveFile() + <rect x="2524.1233416903488" y="768.228228870245" width="20.519867062484334" height="25.70947696788567" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2524.1233416903488" y="768.228228870245" width="20.519867062484334" height="25.70947696788567" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2524.1233416903488" y="768.228228870245" width="20.519867062484334" height="25.70947696788567" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2524.1233416903488" y="768.228228870245" width="20.519867062484334" height="25.70947696788567" fill="transparent" pointer-events="all"> + <title>7 LOC in Function: saveAsHeic() -File: lib/files/save.dart +File: lib/files/export_download_web.dart - - saveFile - 79 + + saveAsHeic + 7 - - - - - 18 LOC in Function: _saveWithResolvedFileAccess() + <rect x="2485.748525365703" y="651.5109294471988" width="44.13103877334292" height="47.81714315283083" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2485.748525365703" y="651.5109294471988" width="44.13103877334292" height="47.81714315283083" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2485.748525365703" y="651.5109294471988" width="44.13103877334292" height="47.81714315283083" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2485.748525365703" y="651.5109294471988" width="44.13103877334292" height="47.81714315283083" fill="transparent" pointer-events="all"> + <title>28 LOC in Function: downloadBlob() -File: lib/files/save.dart +File: lib/files/export_download_web.dart - - _saveWithResolvedFileAccess - 18 + + downloadBlob + 28 - - - - + + + + 125 LOC File: lib/files/file_heic_web.dart - file_heic_web.dart - 125 LOC + file_heic_web.dart + 125 LOC - - - - + + + + 124 LOC in Class: <...> File: lib/files/file_heic_web.dart - <...> - 124 LOC + <...> + 124 LOC - - - - + + + + 2 LOC in Function: _createLibheifModule() File: lib/files/file_heic_web.dart - - _createLibheifModule - 2 + + _createLibheifModule + 2 - - - - + + + + 2 LOC in Method: ._getWidth() File: lib/files/file_heic_web.dart - - _getWidth - 2 + + _getWidth + 2 - - - - + + + + 2 LOC in Method: ._getHeight() File: lib/files/file_heic_web.dart - - _getHeight - 2 + + _getHeight + 2 - - - - + + + + 1 LOC in Method: ._display() File: lib/files/file_heic_web.dart - - _display - 1 + + _display + 1 - - - - + + + + 1 LOC in Method: ._free() File: lib/files/file_heic_web.dart - - _free - 1 + + _free + 1 - - - - + + + + 1 LOC in Method: ._decode() File: lib/files/file_heic_web.dart - - _decode - 1 + + _decode + 1 - - - - + + + + 2 LOC in Function: isHeicExportSupported() File: lib/files/file_heic_web.dart - - isHeicExportSupported - 2 + + isHeicExportSupported + 2 - - - - + + + + 57 LOC in Function: decodeHeicBytes() File: lib/files/file_heic_web.dart - - decodeHeicBytes - 57 + + decodeHeicBytes + 57 - - - - + + + + 6 LOC in Function: encodeToHeic() File: lib/files/file_heic_web.dart - - encodeToHeic - 6 + + encodeToHeic + 6 - - - - + + + + 14 LOC in Function: _ensureLibheifLoaded() File: lib/files/file_heic_web.dart - - _ensureLibheifLoaded - 14 + + _ensureLibheifLoaded + 14 - - - - + + + + 3 LOC in Function: _isLibheifAvailable() File: lib/files/file_heic_web.dart - - _isLibheifAvailable - 3 + + _isLibheifAvailable + 3 - - - - + + + + 33 LOC in Function: _loadLibheifScript() File: lib/files/file_heic_web.dart - - _loadLibheifScript - 33 + + _loadLibheifScript + 33 - - - - + + + + 77 LOC File: lib/files/file_heic.dart - file_heic.dart - 77 LOC + file_heic.dart + 77 LOC - - - - + + + + 77 LOC in Class: <...> File: lib/files/file_heic.dart - <...> - 77 LOC + <...> + 77 LOC - - - - + + + + 4 LOC in Function: isHeicExportSupported() File: lib/files/file_heic.dart - - isHeicExportSupported - 4 + + isHeicExportSupported + 4 - - - - + + + + 15 LOC in Function: decodeHeicBytes() File: lib/files/file_heic.dart - - decodeHeicBytes - 15 + + decodeHeicBytes + 15 - - - - + + + + 41 LOC in Function: encodeToHeic() File: lib/files/file_heic.dart - - encodeToHeic - 41 + + encodeToHeic + 41 - - - - + + + + 17 LOC in Function: _decodeHeicBytesWithImagePackage() File: lib/files/file_heic.dart - - _decodeHeicBytesWithImagePackage - 17 + + _decodeHeicBytesWithImagePackage + 17 - - - - + + + + 67 LOC File: lib/files/file_operation_exception.dart - file_operation_exception.dart - 67 LOC + file_operation_exception.dart + 67 LOC - - - - + + + + 25 LOC in Class: <...> File: lib/files/file_operation_exception.dart - <...> - 25 LOC + <...> + 25 LOC - - - - + + + + 12 LOC in Function: throwFileOperationException() File: lib/files/file_operation_exception.dart - - throwFileOperationException - 12 + + throwFileOperationException + 12 - - - - + + + + 13 LOC in Function: requireImageByteData() File: lib/files/file_operation_exception.dart - - requireImageByteData - 13 + + requireImageByteData + 13 - - - - + + + + 13 LOC in Class: FileOperationException File: lib/files/file_operation_exception.dart - FileOperationException - 13 LOC + FileOperationException + 13 LOC - - - - + + + + 5 LOC in Class: UnsupportedSaveFormatException File: lib/files/file_operation_exception.dart - UnsupportedSaveFormatException - 5 LOC + UnsupportedSaveFormatException + 5 LOC - - - - + + + + 4 LOC in Class: FileSaveException File: lib/files/file_operation_exception.dart - FileSaveException - 4 LOC + FileSaveException + 4 LOC - - - - + + + + 4 LOC in Class: HeicConversionException File: lib/files/file_operation_exception.dart - HeicConversionException - 4 LOC + HeicConversionException + 4 LOC - - - - + + + + 4 LOC in Class: JpegConversionException File: lib/files/file_operation_exception.dart - JpegConversionException - 4 LOC + JpegConversionException + 4 LOC - - - - + + + + 4 LOC in Class: OraFileException File: lib/files/file_operation_exception.dart - OraFileException - 4 LOC + OraFileException + 4 LOC - - - - + + + + 4 LOC in Class: TiffFileException File: lib/files/file_operation_exception.dart - TiffFileException - 4 LOC + TiffFileException + 4 LOC - - - - + + + + 4 LOC in Class: WebpConversionException File: lib/files/file_operation_exception.dart - WebpConversionException - 4 LOC + WebpConversionException + 4 LOC - - - - + + + + 43 LOC File: lib/files/webp_encoder.dart - webp_encoder.dart - 43 LOC + webp_encoder.dart + 43 LOC - - - - + + + + 25 LOC in Class: WebPEncoder File: lib/files/webp_encoder.dart - WebPEncoder - 25 LOC - - - - - - 20 LOC in Method: WebPEncoder.encode() - -File: lib/files/webp_encoder.dart - - - encode - 20 - - + WebPEncoder + 25 LOC - - - - + + + + 18 LOC in Class: <...> File: lib/files/webp_encoder.dart - <...> - 18 LOC - - - - - - 18 LOC in Function: encodeWebpLossless() - -File: lib/files/webp_encoder.dart - - - encodeWebpLossless - 18 - - + <...> + 18 LOC - - - - + + + + 40 LOC File: lib/files/export_prepare.dart - export_prepare.dart - 40 LOC + export_prepare.dart + 40 LOC - - - - + + + + 40 LOC in Class: <...> File: lib/files/export_prepare.dart - <...> - 40 LOC + <...> + 40 LOC - - - - + + + + 36 LOC File: lib/files/webp_bit_writer.dart - webp_bit_writer.dart - 36 LOC + webp_bit_writer.dart + 36 LOC - - - - + + + + 36 LOC in Class: WebPBitWriter File: lib/files/webp_bit_writer.dart - WebPBitWriter - 36 LOC + WebPBitWriter + 36 LOC - - - - + + + + 19 LOC in Method: WebPBitWriter.writeBits() File: lib/files/webp_bit_writer.dart - - writeBits - 19 + + writeBits + 19 - - - - + + + + 8 LOC in Method: WebPBitWriter.flush() File: lib/files/webp_bit_writer.dart - - flush - 8 + + flush + 8 - - - - + + + + 2 LOC in Method: WebPBitWriter.getBytes() File: lib/files/webp_bit_writer.dart - - getBytes - 2 + + getBytes + 2 - - - - + + + + 26 LOC File: lib/files/file_jpeg.dart - file_jpeg.dart - 26 LOC + file_jpeg.dart + 26 LOC - - - - + + + + 26 LOC in Class: <...> File: lib/files/file_jpeg.dart - <...> - 26 LOC + <...> + 26 LOC - - - - + + + + 26 LOC in Function: convertToJpg() File: lib/files/file_jpeg.dart - - convertToJpg - 26 + + convertToJpg + 26 - - - - + + + + 17 LOC File: lib/files/file_webp.dart - file_webp.dart - 17 LOC + file_webp.dart + 17 LOC - - - - + + + + 17 LOC in Class: <...> File: lib/files/file_webp.dart - <...> - 17 LOC + <...> + 17 LOC - - - - + + + + 17 LOC in Function: convertImageToWebp() File: lib/files/file_webp.dart - - convertImageToWebp - 17 + + convertImageToWebp + 17 - - - - + + + + 17 LOC File: lib/files/export_file_name.dart - export_file_name.dart - 17 LOC + export_file_name.dart + 17 LOC - - - - + + + + 17 LOC in Class: <...> File: lib/files/export_file_name.dart - <...> - 17 LOC + <...> + 17 LOC - - - - + + + + 7 LOC File: lib/files/webp_cl_symbol.dart - webp_cl_symbol.dart - 7 LOC + webp_cl_symbol.dart + 7 LOC - - - - - 3,171 LOC Folder: lib/panels + + + + + 3,152 LOC Folder: lib/panels - panels - 3,171 LOC + panels + 3,152 LOC - - - - + + + + 1,557 LOC Folder: lib/panels/side_panel - side_panel + side_panel 1,557 LOC - - - - + + + + 571 LOC File: lib/panels/side_panel/recent_files_dialog.dart - recent_files_dialog.dart - 571 LOC + recent_files_dialog.dart + 571 LOC - - - - + + + + 234 LOC in Class: _RecentFileEntryState File: lib/panels/side_panel/recent_files_dialog.dart - _RecentFileEntryState - 234 LOC + _RecentFileEntryState + 234 LOC - - - - + + + + 6 LOC in Method: _RecentFileEntryState.initState() File: lib/panels/side_panel/recent_files_dialog.dart - - initState - 6 + + initState + 6 - - - - + + + + 51 LOC in Method: _RecentFileEntryState.build() File: lib/panels/side_panel/recent_files_dialog.dart - - build - 51 + + build + 51 - - - - + + + + 43 LOC in Method: _RecentFileEntryState._buildThumbnail() File: lib/panels/side_panel/recent_files_dialog.dart - - _buildThumbnail - 43 + + _buildThumbnail + 43 - - - - + + + + 56 LOC in Method: _RecentFileEntryState._loadFileMetadata() File: lib/panels/side_panel/recent_files_dialog.dart - - _loadFileMetadata - 56 + + _loadFileMetadata + 56 - - - - + + + + 72 LOC in Method: _RecentFileEntryState._loadThumbnail() File: lib/panels/side_panel/recent_files_dialog.dart - - _loadThumbnail - 72 + + _loadThumbnail + 72 - - - - + + + + 175 LOC in Class: _ImportDialogState File: lib/panels/side_panel/recent_files_dialog.dart - _ImportDialogState - 175 LOC + _ImportDialogState + 175 LOC - - - - + + + + 5 LOC in Method: _ImportDialogState.initState() File: lib/panels/side_panel/recent_files_dialog.dart - - initState - 5 + + initState + 5 - - - - + + + + 85 LOC in Method: _ImportDialogState.build() File: lib/panels/side_panel/recent_files_dialog.dart - - build - 85 + + build + 85 - - - - + + + + 18 LOC in Method: _ImportDialogState._buildClipboardPreviewGraphic() File: lib/panels/side_panel/recent_files_dialog.dart - - _buildClipboardPreviewGraphic - 18 + + _buildClipboardPreviewGraphic + 18 - - - - + + + + 34 LOC in Method: _ImportDialogState._buildClipboardTile() File: lib/panels/side_panel/recent_files_dialog.dart - - _buildClipboardTile - 34 + + _buildClipboardTile + 34 - - - - + + + + 9 LOC in Method: _ImportDialogState._buildSectionHeader() File: lib/panels/side_panel/recent_files_dialog.dart - - _buildSectionHeader - 9 + + _buildSectionHeader + 9 - - - - + + + + 9 LOC in Method: _ImportDialogState._handleClipboardImport() File: lib/panels/side_panel/recent_files_dialog.dart - - _handleClipboardImport - 9 + + _handleClipboardImport + 9 - - - - + + + + 11 LOC in Method: _ImportDialogState._loadClipboardPreview() File: lib/panels/side_panel/recent_files_dialog.dart - - _loadClipboardPreview - 11 + + _loadClipboardPreview + 11 - - - - + + + + 124 LOC in Class: <...> File: lib/panels/side_panel/recent_files_dialog.dart - <...> - 124 LOC + <...> + 124 LOC - - - - + + + + 10 LOC in Function: resolveRecentFileThumbnailBytes() File: lib/panels/side_panel/recent_files_dialog.dart - - resolveRecentFileThumbnailBytes - 10 + + resolveRecentFileThumbnailBytes + 10 - - - - + + + + 3 LOC in Function: _isOraPath() File: lib/panels/side_panel/recent_files_dialog.dart - - _isOraPath - 3 + + _isOraPath + 3 - - - - + + + + 17 LOC in Function: _buildImportTileSurface() File: lib/panels/side_panel/recent_files_dialog.dart - - _buildImportTileSurface - 17 + + _buildImportTileSurface + 17 - - - - + + + + 27 LOC in Function: _browseAndAddAsLayer() File: lib/panels/side_panel/recent_files_dialog.dart - - _browseAndAddAsLayer - 27 + + _browseAndAddAsLayer + 27 - - - - + + + + 34 LOC in Function: _openRecentFile() File: lib/panels/side_panel/recent_files_dialog.dart - - _openRecentFile - 34 + + _openRecentFile + 34 - - - - + + + + 19 LOC in Function: _addRecentAsLayer() File: lib/panels/side_panel/recent_files_dialog.dart - - _addRecentAsLayer - 19 + + _addRecentAsLayer + 19 - - - - + + + + 14 LOC in Function: _formatLastModified() File: lib/panels/side_panel/recent_files_dialog.dart - - _formatLastModified - 14 + + _formatLastModified + 14 - - - - + + + + 20 LOC in Class: _RecentFileEntry File: lib/panels/side_panel/recent_files_dialog.dart - _RecentFileEntry - 20 LOC + _RecentFileEntry + 20 LOC - - - - + + + + 9 LOC in Method: _RecentFileEntry._RecentFileEntry() File: lib/panels/side_panel/recent_files_dialog.dart - - _RecentFileEntry - 9 + + _RecentFileEntry + 9 - - - - + + + + 2 LOC in Method: _RecentFileEntry.createState() File: lib/panels/side_panel/recent_files_dialog.dart - - createState - 2 + + createState + 2 - - - - + + + + 18 LOC in Class: ImportDialog File: lib/panels/side_panel/recent_files_dialog.dart - ImportDialog - 18 LOC + ImportDialog + 18 LOC - - - - + + + + 7 LOC in Method: ImportDialog.ImportDialog() File: lib/panels/side_panel/recent_files_dialog.dart - - ImportDialog - 7 + + ImportDialog + 7 - - - - + + + + 2 LOC in Method: ImportDialog.createState() File: lib/panels/side_panel/recent_files_dialog.dart - - createState - 2 + + createState + 2 - - - - + + + + 183 LOC File: lib/panels/side_panel/share_panel.dart - share_panel.dart - 183 LOC + share_panel.dart + 183 LOC - - - - + + + + 175 LOC in Class: <...> File: lib/panels/side_panel/share_panel.dart - <...> - 175 LOC + <...> + 175 LOC - - - - + + + + 33 LOC in Function: _exportEntries() File: lib/panels/side_panel/share_panel.dart - - _exportEntries - 33 + + _exportEntries + 33 - - - - + + + + 10 LOC in Function: textAction() File: lib/panels/side_panel/share_panel.dart - - textAction - 10 + + textAction + 10 - - - - + + + + 10 LOC in Function: _runSharePanelAction() File: lib/panels/side_panel/share_panel.dart - - _runSharePanelAction - 10 + + _runSharePanelAction + 10 - - - - + + + + 30 LOC in Function: _runSharePanelExportAction() File: lib/panels/side_panel/share_panel.dart - - _runSharePanelExportAction - 30 + + _runSharePanelExportAction + 30 - - - - + + + + 69 LOC in Function: sharePanel() File: lib/panels/side_panel/share_panel.dart - - sharePanel - 69 + + sharePanel + 69 - - - - + + + + 11 LOC in Function: _onExportToClipboard() File: lib/panels/side_panel/share_panel.dart - - _onExportToClipboard - 11 + + _onExportToClipboard + 11 - - - - + + + + 12 LOC in Function: capturePainterToImageBytes() File: lib/panels/side_panel/share_panel.dart - - capturePainterToImageBytes - 12 + + capturePainterToImageBytes + 12 - - - - + + + + 8 LOC in Class: _ShareExportEntry File: lib/panels/side_panel/share_panel.dart - _ShareExportEntry - 8 LOC + _ShareExportEntry + 8 LOC - - - - + + + + 172 LOC File: lib/panels/side_panel/attribution_dialog.dart - attribution_dialog.dart - 172 LOC + attribution_dialog.dart + 172 LOC - - - - + + + + 159 LOC in Class: <...> File: lib/panels/side_panel/attribution_dialog.dart - <...> - 159 LOC + <...> + 159 LOC - - - - + + + + 4 LOC in Function: _normalizeAttributionText() File: lib/panels/side_panel/attribution_dialog.dart - - _normalizeAttributionText - 4 + + _normalizeAttributionText + 4 - - - - + + + + 7 LOC in Function: _formatPackageName() File: lib/panels/side_panel/attribution_dialog.dart - - _formatPackageName - 7 + + _formatPackageName + 7 - - - - + + + + 60 LOC in Function: _loadAttributions() File: lib/panels/side_panel/attribution_dialog.dart - - _loadAttributions - 60 + + _loadAttributions + 60 - - - - + + + + 88 LOC in Function: showAttributionDialog() File: lib/panels/side_panel/attribution_dialog.dart - - showAttributionDialog - 88 + + showAttributionDialog + 88 - - - - + + + + 8 LOC in Class: _AttributionSection File: lib/panels/side_panel/attribution_dialog.dart - _AttributionSection - 8 LOC + _AttributionSection + 8 LOC - - - - + + + + 5 LOC in Class: _AttributionTextGroup File: lib/panels/side_panel/attribution_dialog.dart - _AttributionTextGroup - 5 LOC + _AttributionTextGroup + 5 LOC - - - - + + + + 164 LOC File: lib/panels/side_panel/canvas_settings.dart - canvas_settings.dart - 164 LOC + canvas_settings.dart + 164 LOC - - - - + + + + 164 LOC in Class: <...> File: lib/panels/side_panel/canvas_settings.dart - <...> - 164 LOC + <...> + 164 LOC - - - - + + + + 164 LOC in Function: showCanvasSettings() File: lib/panels/side_panel/canvas_settings.dart - - showCanvasSettings - 164 + + showCanvasSettings + 164 - - - - + + + + 154 LOC File: lib/panels/side_panel/menu.dart - menu.dart - 154 LOC + menu.dart + 154 LOC - - - - + + + + 89 LOC in Class: <...> File: lib/panels/side_panel/menu.dart - <...> - 89 LOC + <...> + 89 LOC - - - - + + + + 53 LOC in Function: onDropDownMenuSelection() File: lib/panels/side_panel/menu.dart - - onDropDownMenuSelection - 53 + + onDropDownMenuSelection + 53 - - - - + + + + 36 LOC in Function: buildMenuItem() File: lib/panels/side_panel/menu.dart - - buildMenuItem - 36 + + buildMenuItem + 36 - - - - + + + + 65 LOC in Class: MainMenu File: lib/panels/side_panel/menu.dart - MainMenu - 65 LOC + MainMenu + 65 LOC - - - - + + + + 61 LOC in Method: MainMenu.build() File: lib/panels/side_panel/menu.dart - - build - 61 + + build + 61 - - - - + + + + 149 LOC File: lib/panels/side_panel/side_panel.dart - side_panel.dart - 149 LOC + side_panel.dart + 149 LOC - - - - + + + + 132 LOC in Class: _SidePanelState File: lib/panels/side_panel/side_panel.dart - _SidePanelState - 132 LOC + _SidePanelState + 132 LOC - - - - + + + + 23 LOC in Method: _SidePanelState.initState() File: lib/panels/side_panel/side_panel.dart - - initState - 23 + + initState + 23 - - - - + + + + 5 LOC in Method: _SidePanelState.dispose() File: lib/panels/side_panel/side_panel.dart - - dispose - 5 + + dispose + 5 - - - - + + + + 32 LOC in Method: _SidePanelState.build() File: lib/panels/side_panel/side_panel.dart - - build - 32 + + build + 32 - - - - + + + + 59 LOC in Method: _SidePanelState._buildModifyModePanel() File: lib/panels/side_panel/side_panel.dart - - _buildModifyModePanel - 59 + + _buildModifyModePanel + 59 - - - - + + + + 3 LOC in Method: _SidePanelState._isModifyMode() File: lib/panels/side_panel/side_panel.dart - - _isModifyMode - 3 + + _isModifyMode + 3 - - - - + + + + 7 LOC in Method: _SidePanelState._rebuild() File: lib/panels/side_panel/side_panel.dart - - _rebuild - 7 + + _rebuild + 7 - - - - + + + + 17 LOC in Class: SidePanel File: lib/panels/side_panel/side_panel.dart - SidePanel - 17 LOC + SidePanel + 17 LOC - - - - + + + + 5 LOC in Method: SidePanel.SidePanel() File: lib/panels/side_panel/side_panel.dart - - SidePanel - 5 + + SidePanel + 5 - - - - + + + + 2 LOC in Method: SidePanel.createState() File: lib/panels/side_panel/side_panel.dart - - createState - 2 + + createState + 2 - - - - + + + + 112 LOC File: lib/panels/side_panel/top_menu_and_layers_panel.dart - top_menu_and_layers_panel.dart - 112 LOC + top_menu_and_layers_panel.dart + 112 LOC - - - - + + + + 67 LOC in Class: _ReorderableLayerListState File: lib/panels/side_panel/top_menu_and_layers_panel.dart - _ReorderableLayerListState - 67 LOC + _ReorderableLayerListState + 67 LOC - - - - + + + + 59 LOC in Method: _ReorderableLayerListState.build() File: lib/panels/side_panel/top_menu_and_layers_panel.dart - - build - 59 + + build + 59 - - - - + + + + 5 LOC in Method: _ReorderableLayerListState._useImmediateDrag() File: lib/panels/side_panel/top_menu_and_layers_panel.dart - - _useImmediateDrag - 5 + + _useImmediateDrag + 5 - - - - + + + + 32 LOC in Class: TopMenuAndLayersPanel File: lib/panels/side_panel/top_menu_and_layers_panel.dart - TopMenuAndLayersPanel - 32 LOC + TopMenuAndLayersPanel + 32 LOC - - - - + + + + 28 LOC in Method: TopMenuAndLayersPanel.build() File: lib/panels/side_panel/top_menu_and_layers_panel.dart - - build - 28 + + build + 28 - - - - + + + + 13 LOC in Class: _ReorderableLayerList File: lib/panels/side_panel/top_menu_and_layers_panel.dart - _ReorderableLayerList - 13 LOC + _ReorderableLayerList + 13 LOC - - - - + + + + 5 LOC in Method: _ReorderableLayerList._ReorderableLayerList() File: lib/panels/side_panel/top_menu_and_layers_panel.dart - - _ReorderableLayerList - 5 + + _ReorderableLayerList + 5 - - - - + + + + 2 LOC in Method: _ReorderableLayerList.createState() File: lib/panels/side_panel/top_menu_and_layers_panel.dart - - createState - 2 + + createState + 2 - - - - + + + + 52 LOC File: lib/panels/side_panel/about.dart - about.dart - 52 LOC + about.dart + 52 LOC - - - - + + + + 52 LOC in Class: <...> File: lib/panels/side_panel/about.dart - <...> - 52 LOC - - - - - - 52 LOC in Function: showAboutBox() - -File: lib/panels/side_panel/about.dart - - - showAboutBox - 52 - - + <...> + 52 LOC - - - - + + + + 850 LOC Folder: lib/panels/layers - layers - 850 LOC + layers + 850 LOC - - - - + + + + 567 LOC File: lib/panels/layers/layer_selector.dart - layer_selector.dart - 567 LOC + layer_selector.dart + 567 LOC - - - - + + + + 567 LOC in Class: LayerSelector File: lib/panels/layers/layer_selector.dart - LayerSelector - 567 LOC + LayerSelector + 567 LOC - - - - + + + + 8 LOC in Method: LayerSelector.LayerSelector() File: lib/panels/layers/layer_selector.dart - - LayerSelector - 8 + + LayerSelector + 8 - - - - + + + + 27 LOC in Method: LayerSelector.build() File: lib/panels/layers/layer_selector.dart - - build - 27 + + build + 27 - - - - + + + + 13 LOC in Method: LayerSelector.information() File: lib/panels/layers/layer_selector.dart - - information - 13 + + information + 13 - - - - + + + + 35 LOC in Method: LayerSelector.renameLayer() File: lib/panels/layers/layer_selector.dart - - renameLayer - 35 + + renameLayer + 35 - - - - + + + + 42 LOC in Method: LayerSelector._buildForLargeSurface() File: lib/panels/layers/layer_selector.dart - - _buildForLargeSurface - 42 + + _buildForLargeSurface + 42 - - - - + + + + 19 LOC in Method: LayerSelector._buildForSmallSurface() File: lib/panels/layers/layer_selector.dart - - _buildForSmallSurface - 19 + + _buildForSmallSurface + 19 - - - - + + + + 74 LOC in Method: LayerSelector._buildLayerControls() File: lib/panels/layers/layer_selector.dart - - _buildLayerControls - 74 + + _buildLayerControls + 74 - - - - + + + + 64 LOC in Method: LayerSelector._buildLayerName() File: lib/panels/layers/layer_selector.dart - - _buildLayerName - 64 + + _buildLayerName + 64 - - - - + + + + 115 LOC in Method: LayerSelector._buildPopupMenuItems() File: lib/panels/layers/layer_selector.dart - - _buildPopupMenuItems - 115 + + _buildPopupMenuItems + 115 - - - - + + + + 27 LOC in Method: LayerSelector._buildThumbnailPreview() File: lib/panels/layers/layer_selector.dart - - _buildThumbnailPreview - 27 + + _buildThumbnailPreview + 27 - - - - + + + + 37 LOC in Method: LayerSelector._buildThumbnailPreviewAndVisibility() File: lib/panels/layers/layer_selector.dart - - _buildThumbnailPreviewAndVisibility - 37 + + _buildThumbnailPreviewAndVisibility + 37 - - - - + + + + 51 LOC in Method: LayerSelector._handlePopupMenuSelection() File: lib/panels/layers/layer_selector.dart - - _handlePopupMenuSelection - 51 + + _handlePopupMenuSelection + 51 - - - - + + + + 19 LOC in Method: LayerSelector._onAddLayer() File: lib/panels/layers/layer_selector.dart - - _onAddLayer - 19 + + _onAddLayer + 19 - - - - + + + + 8 LOC in Method: LayerSelector._onMergeLayer() File: lib/panels/layers/layer_selector.dart - - _onMergeLayer - 8 + + _onMergeLayer + 8 - - - - + + + + 10 LOC in Method: LayerSelector._onModifyLayer() File: lib/panels/layers/layer_selector.dart - - _onModifyLayer - 10 + + _onModifyLayer + 10 - - - - + + + + 5 LOC in Method: LayerSelector._showLockedLayerMessage() File: lib/panels/layers/layer_selector.dart - - _showLockedLayerMessage - 5 + + _showLockedLayerMessage + 5 - - - - + + + + 147 LOC File: lib/panels/layers/layer_thumbnail.dart - layer_thumbnail.dart - 147 LOC + layer_thumbnail.dart + 147 LOC - - - - + + + + 136 LOC in Class: _LayerThumbnailState File: lib/panels/layers/layer_thumbnail.dart - _LayerThumbnailState - 136 LOC + _LayerThumbnailState + 136 LOC - - - - + + + + 5 LOC in Method: _LayerThumbnailState.dispose() File: lib/panels/layers/layer_thumbnail.dart - - dispose - 5 + + dispose + 5 - - - - + + + + 40 LOC in Method: _LayerThumbnailState.build() File: lib/panels/layers/layer_thumbnail.dart - - build - 40 + + build + 40 - - - - + + + + 26 LOC in Method: _LayerThumbnailState._computeVerticalOffset() File: lib/panels/layers/layer_thumbnail.dart - - _computeVerticalOffset - 26 + + _computeVerticalOffset + 26 - - - - + + + + 5 LOC in Method: _LayerThumbnailState._hidePreview() File: lib/panels/layers/layer_thumbnail.dart - - _hidePreview - 5 + + _hidePreview + 5 - - - - + + + + 55 LOC in Method: _LayerThumbnailState._showPreview() File: lib/panels/layers/layer_thumbnail.dart - - _showPreview - 55 + + _showPreview + 55 - - - - + + + + 11 LOC in Class: LayerThumbnail File: lib/panels/layers/layer_thumbnail.dart - LayerThumbnail - 11 LOC + LayerThumbnail + 11 LOC - - - - + + + + 136 LOC File: lib/panels/layers/blend_mode.dart - blend_mode.dart - 136 LOC + blend_mode.dart + 136 LOC - - - - + + + + 136 LOC in Class: <...> File: lib/panels/layers/blend_mode.dart - <...> - 136 LOC + <...> + 136 LOC - - - - + + + + 74 LOC in Function: getSupportedBlendModes() File: lib/panels/layers/blend_mode.dart - - getSupportedBlendModes - 74 + + getSupportedBlendModes + 74 - - - - + + + + 47 LOC in Function: showBlendModeMenu() File: lib/panels/layers/blend_mode.dart - - showBlendModeMenu - 47 + + showBlendModeMenu + 47 - - - - + + + + 15 LOC in Function: blendModeToText() File: lib/panels/layers/blend_mode.dart - - blendModeToText - 15 + + blendModeToText + 15 - - - - - 764 LOC Folder: lib/panels/tools + + + + + 745 LOC Folder: lib/panels/tools - tools - 764 LOC + tools + 745 LOC - - - - - 764 LOC File: lib/panels/tools/tools_panel.dart + + + + + 583 LOC File: lib/panels/tools/tools_panel.dart - tools_panel.dart - 764 LOC + tools_panel.dart + 583 LOC - - - - - 675 LOC in Class: ToolsPanel + <rect x="2624.3002566546074" y="850.049061724343" width="360.4697380968441" height="138.96076069158096" rx="5.00" ry="5.00" fill="#9eb89a" fill-opacity="0.78"/> + <rect x="2624.3002566546074" y="850.049061724343" width="360.4697380968441" height="138.96076069158096" rx="5.00" ry="5.00" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2624.3002566546074" y="850.049061724343" width="360.4697380968441" height="138.96076069158096" rx="5.00" ry="5.00" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2624.3002566546074" y="850.049061724343" width="360.4697380968441" height="138.96076069158096" rx="5.00" ry="5.00" fill="transparent" pointer-events="all"> + <title>530 LOC in Class: ToolsPanel File: lib/panels/tools/tools_panel.dart - ToolsPanel - 675 LOC + ToolsPanel + 530 LOC - - - - + + + + 4 LOC in Method: ToolsPanel.ToolsPanel() File: lib/panels/tools/tools_panel.dart - - ToolsPanel - 4 + + ToolsPanel + 4 - - - - - 73 LOC in Method: ToolsPanel.build() + <rect x="2813.460925058706" y="874.049061724343" width="47.031703363243246" height="75.18256367451706" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2813.460925058706" y="874.049061724343" width="47.031703363243246" height="75.18256367451706" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2813.460925058706" y="874.049061724343" width="47.031703363243246" height="75.18256367451706" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2813.460925058706" y="874.049061724343" width="47.031703363243246" height="75.18256367451706" fill="transparent" pointer-events="all"> + <title>50 LOC in Method: ToolsPanel.build() File: lib/panels/tools/tools_panel.dart - - build - 73 + + build + 50 - - - - + + + + 40 LOC in Method: ToolsPanel.addToolOptionColor() File: lib/panels/tools/tools_panel.dart - - addToolOptionColor - 40 + + addToolOptionColor + 40 - - - - + + + + 28 LOC in Method: ToolsPanel.addToolOptionTolerance() File: lib/panels/tools/tools_panel.dart - - addToolOptionTolerance - 28 + + addToolOptionTolerance + 28 - - - - + + + + 37 LOC in Method: ToolsPanel.addToolOptionTopColors() File: lib/panels/tools/tools_panel.dart - - addToolOptionTopColors - 37 + + addToolOptionTopColors + 37 - - - - - 100 LOC in Method: ToolsPanel.getListOfTools() + <rect x="2632.3002566546074" y="874.049061724343" width="145.4574709813929" height="106.96076069158096" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2632.3002566546074" y="874.049061724343" width="145.4574709813929" height="106.96076069158096" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2632.3002566546074" y="874.049061724343" width="145.4574709813929" height="106.96076069158096" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2632.3002566546074" y="874.049061724343" width="145.4574709813929" height="106.96076069158096" fill="transparent" pointer-events="all"> + <title>220 LOC in Method: ToolsPanel.getWidgetForSelectedTool() File: lib/panels/tools/tools_panel.dart - - getListOfTools - 100 + + getWidgetForSelectedTool + 220 - - - - - 218 LOC in Method: ToolsPanel.getWidgetForSelectedTool() + <rect x="2813.460925058706" y="949.23162539886" width="91.2415045246919" height="31.778197017063903" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2813.460925058706" y="949.23162539886" width="91.2415045246919" height="31.778197017063903" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2813.460925058706" y="949.23162539886" width="91.2415045246919" height="31.778197017063903" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2813.460925058706" y="949.23162539886" width="91.2415045246919" height="31.778197017063903" fill="transparent" pointer-events="all"> + <title>41 LOC in Method: ToolsPanel._addGradientColorEditor() File: lib/panels/tools/tools_panel.dart - - getWidgetForSelectedTool - 218 + + _addGradientColorEditor + 41 - - - - - 41 LOC in Method: ToolsPanel._addGradientColorEditor() + <rect x="2777.7577276360003" y="874.049061724343" width="35.70319742270553" height="106.96076069158096" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2777.7577276360003" y="874.049061724343" width="35.70319742270553" height="106.96076069158096" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2777.7577276360003" y="874.049061724343" width="35.70319742270553" height="106.96076069158096" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2777.7577276360003" y="874.049061724343" width="35.70319742270553" height="106.96076069158096" fill="transparent" pointer-events="all"> + <title>54 LOC in Method: ToolsPanel._addHalftoneSlider() File: lib/panels/tools/tools_panel.dart - - _addGradientColorEditor - 41 + + _addHalftoneSlider + 54 - - - - - 54 LOC in Method: ToolsPanel._addHalftoneSlider() + <rect x="2860.492628421949" y="874.049061724343" width="44.20980116144866" height="75.18256367451706" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2860.492628421949" y="874.049061724343" width="44.20980116144866" height="75.18256367451706" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2860.492628421949" y="874.049061724343" width="44.20980116144866" height="75.18256367451706" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2860.492628421949" y="874.049061724343" width="44.20980116144866" height="75.18256367451706" fill="transparent" pointer-events="all"> + <title>47 LOC in Method: ToolsPanel._addToolOptionColor() File: lib/panels/tools/tools_panel.dart - - _addHalftoneSlider - 54 + + _addToolOptionColor + 47 + - - - - - 47 LOC in Method: ToolsPanel._addToolOptionColor() + <rect x="2984.7699947514516" y="850.049061724343" width="36.0469738096844" height="60.303726337855885" rx="5.00" ry="5.00" fill="#9eb89a" fill-opacity="0.45"/> + <rect x="2984.7699947514516" y="850.049061724343" width="36.0469738096844" height="60.303726337855885" rx="5.00" ry="5.00" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2984.7699947514516" y="850.049061724343" width="36.0469738096844" height="60.303726337855885" rx="5.00" ry="5.00" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8" stroke-dasharray="6,4"/> + <rect x="2984.7699947514516" y="850.049061724343" width="36.0469738096844" height="60.303726337855885" rx="5.00" ry="5.00" fill="transparent" pointer-events="all"> + <title>23 LOC in Class: <...> File: lib/panels/tools/tools_panel.dart - - _addToolOptionColor - 47 - - + <...> + 23 LOC - - - - - 24 LOC in Method: ToolsPanel._buildPanelSection() + <rect x="2992.7699947514516" y="874.049061724343" width="20.046973809684403" height="28.303726337855885" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2992.7699947514516" y="874.049061724343" width="20.046973809684403" height="28.303726337855885" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2992.7699947514516" y="874.049061724343" width="20.046973809684403" height="28.303726337855885" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2992.7699947514516" y="874.049061724343" width="20.046973809684403" height="28.303726337855885" fill="transparent" pointer-events="all"> + <title>23 LOC in Function: _buildActionPicker() File: lib/panels/tools/tools_panel.dart - - _buildPanelSection - 24 + + _buildActionPicker + 23 - - - - - 52 LOC in Class: _EffectsSectionState + <rect x="2984.7699947514516" y="910.3527880621989" width="36.0469738096844" height="41.950418321986696" rx="5.00" ry="5.00" fill="#9eb89a" fill-opacity="0.78"/> + <rect x="2984.7699947514516" y="910.3527880621989" width="36.0469738096844" height="41.950418321986696" rx="5.00" ry="5.00" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2984.7699947514516" y="910.3527880621989" width="36.0469738096844" height="41.950418321986696" rx="5.00" ry="5.00" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2984.7699947514516" y="910.3527880621989" width="36.0469738096844" height="41.950418321986696" rx="5.00" ry="5.00" fill="transparent" pointer-events="all"> + <title>16 LOC in Class: _CollapsibleTopColors File: lib/panels/tools/tools_panel.dart - _EffectsSectionState - 52 LOC + _CollapsibleTopColors + 16 LOC - - - - - 45 LOC in Method: _EffectsSectionState.build() + <rect x="2992.7699947514516" y="934.3527880621989" width="14.31926700691743" height="9.950418321986696" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2992.7699947514516" y="934.3527880621989" width="14.31926700691743" height="9.950418321986696" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2992.7699947514516" y="934.3527880621989" width="14.31926700691743" height="9.950418321986696" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2992.7699947514516" y="934.3527880621989" width="14.31926700691743" height="9.950418321986696" fill="transparent" pointer-events="all"> + <title>5 LOC in Method: _CollapsibleTopColors._CollapsibleTopColors() File: lib/panels/tools/tools_panel.dart - - build - 45 + + _CollapsibleTopColors + 5 - - - - - 5 LOC in Method: _EffectsSectionState._showLockedLayerMessage() + <rect x="3007.089261758369" y="934.3527880621989" width="5.727706802766972" height="9.950418321986696" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="3007.089261758369" y="934.3527880621989" width="5.727706802766972" height="9.950418321986696" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="3007.089261758369" y="934.3527880621989" width="5.727706802766972" height="9.950418321986696" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="3007.089261758369" y="934.3527880621989" width="5.727706802766972" height="9.950418321986696" fill="transparent" pointer-events="all"> + <title>2 LOC in Method: _CollapsibleTopColors.createState() File: lib/panels/tools/tools_panel.dart - - _showLockedLayerMessage - 5 + + createState + 2 - - - - - 23 LOC in Class: <...> + <rect x="2984.7699947514516" y="952.3032063841856" width="36.0469738096844" height="36.70661603173838" rx="5.00" ry="5.00" fill="#9eb89a" fill-opacity="0.78"/> + <rect x="2984.7699947514516" y="952.3032063841856" width="36.0469738096844" height="36.70661603173838" rx="5.00" ry="5.00" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2984.7699947514516" y="952.3032063841856" width="36.0469738096844" height="36.70661603173838" rx="5.00" ry="5.00" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2984.7699947514516" y="952.3032063841856" width="36.0469738096844" height="36.70661603173838" rx="5.00" ry="5.00" fill="transparent" pointer-events="all"> + <title>14 LOC in Class: _CollapsibleTopColorsState File: lib/panels/tools/tools_panel.dart - <...> - 23 LOC + _CollapsibleTopColorsState + 14 LOC - - - - - 23 LOC in Function: _buildActionPicker() + <rect x="2992.7699947514516" y="976.3032063841856" width="20.046973809684403" height="4.706616031738378" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2992.7699947514516" y="976.3032063841856" width="20.046973809684403" height="4.706616031738378" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2992.7699947514516" y="976.3032063841856" width="20.046973809684403" height="4.706616031738378" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2992.7699947514516" y="976.3032063841856" width="20.046973809684403" height="4.706616031738378" fill="transparent" pointer-events="all"> + <title>11 LOC in Method: _CollapsibleTopColorsState.build() File: lib/panels/tools/tools_panel.dart - - _buildActionPicker - 23 + + build + 11 + + + + + + + 162 LOC File: lib/panels/tools/tool_family_rail.dart + + tool_family_rail.dart + 162 LOC - - - - - 14 LOC in Class: _EffectsSection + <rect x="3038.816968561136" y="850.049061724343" width="97.18303143886385" height="138.96076069158096" rx="5.00" ry="5.00" fill="#9eb89a" fill-opacity="0.78"/> + <rect x="3038.816968561136" y="850.049061724343" width="97.18303143886385" height="138.96076069158096" rx="5.00" ry="5.00" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="3038.816968561136" y="850.049061724343" width="97.18303143886385" height="138.96076069158096" rx="5.00" ry="5.00" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="3038.816968561136" y="850.049061724343" width="97.18303143886385" height="138.96076069158096" rx="5.00" ry="5.00" fill="transparent" pointer-events="all"> + <title>162 LOC in Class: ToolFamilyRail -File: lib/panels/tools/tools_panel.dart +File: lib/panels/tools/tool_family_rail.dart - _EffectsSection - 14 LOC + ToolFamilyRail + 162 LOC - - - - - 5 LOC in Method: _EffectsSection._EffectsSection() + <rect x="3093.207272240487" y="972.578230919966" width="34.792727759513085" height="8.43159149595796" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="3093.207272240487" y="972.578230919966" width="34.792727759513085" height="8.43159149595796" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="3093.207272240487" y="972.578230919966" width="34.792727759513085" height="8.43159149595796" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="3093.207272240487" y="972.578230919966" width="34.792727759513085" height="8.43159149595796" fill="transparent" pointer-events="all"> + <title>5 LOC in Method: ToolFamilyRail.ToolFamilyRail() -File: lib/panels/tools/tools_panel.dart +File: lib/panels/tools/tool_family_rail.dart - - _EffectsSection - 5 + + ToolFamilyRail + 5 - - - - - 2 LOC in Method: _EffectsSection.createState() + <rect x="3093.207272240487" y="945.5971381329006" width="34.792727759513085" height="26.981092787065464" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="3093.207272240487" y="945.5971381329006" width="34.792727759513085" height="26.981092787065464" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="3093.207272240487" y="945.5971381329006" width="34.792727759513085" height="26.981092787065464" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="3093.207272240487" y="945.5971381329006" width="34.792727759513085" height="26.981092787065464" fill="transparent" pointer-events="all"> + <title>16 LOC in Method: ToolFamilyRail.build() -File: lib/panels/tools/tools_panel.dart +File: lib/panels/tools/tool_family_rail.dart + + + build + 16 + + + + + + + + 31 LOC in Method: ToolFamilyRail._brushSection() + +File: lib/panels/tools/tool_family_rail.dart + + + _brushSection + 31 + + + + + + + + 34 LOC in Method: ToolFamilyRail._effectControls() + +File: lib/panels/tools/tool_family_rail.dart + + + _effectControls + 34 + + + + + + + + 28 LOC in Method: ToolFamilyRail._gestureToolKey() + +File: lib/panels/tools/tool_family_rail.dart + + + _gestureToolKey + 28 + + + + + + + + 34 LOC in Method: ToolFamilyRail._toolButton() + +File: lib/panels/tools/tool_family_rail.dart - - createState - 2 + + _toolButton + 34 @@ -22196,5523 +22346,5477 @@ File: lib/panels/tools/tools_panel.dart - - - - - 2,487 LOC Folder: lib/helpers + + + + + 2,501 LOC Folder: lib/helpers - helpers - 2,487 LOC + helpers + 2,501 LOC - - - - + + + + 818 LOC File: lib/helpers/smudge_helper.dart - smudge_helper.dart - 818 LOC + smudge_helper.dart + 818 LOC - - - - + + + + 753 LOC in Class: <...> File: lib/helpers/smudge_helper.dart - <...> - 753 LOC + <...> + 753 LOC - - - - + + + + 16 LOC in Function: resolvePixelBrushStepSpacing() File: lib/helpers/smudge_helper.dart - - resolvePixelBrushStepSpacing - 16 + + resolvePixelBrushStepSpacing + 16 - - - - + + + + 77 LOC in Function: rasterizePixelBrushSegment() File: lib/helpers/smudge_helper.dart - - rasterizePixelBrushSegment - 77 + + rasterizePixelBrushSegment + 77 - - - - + + + + 25 LOC in Function: _runPixelBrushTask() File: lib/helpers/smudge_helper.dart - - _runPixelBrushTask - 25 + + _runPixelBrushTask + 25 - - - - + + + + 77 LOC in Function: _runPixelBrushComputationLod() File: lib/helpers/smudge_helper.dart - - _runPixelBrushComputationLod - 77 + + _runPixelBrushComputationLod + 77 - - - - + + + + 41 LOC in Function: _upsampleRgbaBilinear() File: lib/helpers/smudge_helper.dart - - _upsampleRgbaBilinear - 41 + + _upsampleRgbaBilinear + 41 - - - - + + + + 140 LOC in Function: _runPixelBrushComputation() File: lib/helpers/smudge_helper.dart - - _runPixelBrushComputation - 140 + + _runPixelBrushComputation + 140 - - - - + + + + 140 LOC in Function: _applySmudgeStep() File: lib/helpers/smudge_helper.dart - - _applySmudgeStep - 140 + + _applySmudgeStep + 140 - - - - + + + + 139 LOC in Function: _applyBlurStep() File: lib/helpers/smudge_helper.dart - - _applyBlurStep - 139 + + _applyBlurStep + 139 - - - - + + + + 21 LOC in Function: createPixelBrushClipMask() File: lib/helpers/smudge_helper.dart - - createPixelBrushClipMask - 21 + + createPixelBrushClipMask + 21 - - - - + + + + 27 LOC in Function: _copyPixelRect() File: lib/helpers/smudge_helper.dart - - _copyPixelRect - 27 + + _copyPixelRect + 27 - - - - + + + + 26 LOC in Function: _writePixelRect() File: lib/helpers/smudge_helper.dart - - _writePixelRect - 26 + + _writePixelRect + 26 - - - - + + + + 12 LOC in Function: _isMaskVisible() File: lib/helpers/smudge_helper.dart - - _isMaskVisible - 12 + + _isMaskVisible + 12 - - - - + + + + 4 LOC in Function: _clampPixel() File: lib/helpers/smudge_helper.dart - - _clampPixel - 4 + + _clampPixel + 4 - - - - + + + + 8 LOC in Function: _pixelIndex() File: lib/helpers/smudge_helper.dart - - _pixelIndex - 8 + + _pixelIndex + 8 - - - - + + + + 22 LOC in Class: _PixelBrushIsolateInput File: lib/helpers/smudge_helper.dart - _PixelBrushIsolateInput - 22 LOC + _PixelBrushIsolateInput + 22 LOC - - - - + + + + 17 LOC in Class: PixelBrushSegmentResult File: lib/helpers/smudge_helper.dart - PixelBrushSegmentResult - 17 LOC + PixelBrushSegmentResult + 17 LOC - - - - + + + + 13 LOC in Class: _PixelBrushIsolateOutput File: lib/helpers/smudge_helper.dart - _PixelBrushIsolateOutput - 13 LOC + _PixelBrushIsolateOutput + 13 LOC - - - - + + + + 13 LOC in Class: _PixelBrushComputationResult File: lib/helpers/smudge_helper.dart - _PixelBrushComputationResult - 13 LOC + _PixelBrushComputationResult + 13 LOC - - - - - 522 LOC File: lib/helpers/image_effects.dart + + + + + 524 LOC File: lib/helpers/image_effects.dart - image_effects.dart - 522 LOC + image_effects.dart + 524 LOC - - - - - 522 LOC in Class: <...> + <rect x="2032.6752891329616" y="1076.009822415924" width="164.13681288301007" height="411.1117267189423" rx="5.00" ry="5.00" fill="#9eb89a" fill-opacity="0.45"/> + <rect x="2032.6752891329616" y="1076.009822415924" width="164.13681288301007" height="411.1117267189423" rx="5.00" ry="5.00" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2032.6752891329616" y="1076.009822415924" width="164.13681288301007" height="411.1117267189423" rx="5.00" ry="5.00" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8" stroke-dasharray="6,4"/> + <rect x="2032.6752891329616" y="1076.009822415924" width="164.13681288301007" height="411.1117267189423" rx="5.00" ry="5.00" fill="transparent" pointer-events="all"> + <title>524 LOC in Class: <...> File: lib/helpers/image_effects.dart - <...> - 522 LOC + <...> + 524 LOC - - - - - 11 LOC in Function: _applyWithStrengthGuard() + <rect x="2164.7398699224827" y="1395.9195480419687" width="24.07223209348914" height="57.879652934189664" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2164.7398699224827" y="1395.9195480419687" width="24.07223209348914" height="57.879652934189664" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2164.7398699224827" y="1395.9195480419687" width="24.07223209348914" height="57.879652934189664" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2164.7398699224827" y="1395.9195480419687" width="24.07223209348914" height="57.879652934189664" fill="transparent" pointer-events="all"> + <title>13 LOC in Function: _applyWithStrengthGuard() File: lib/helpers/image_effects.dart - - _applyWithStrengthGuard - 11 + + _applyWithStrengthGuard + 13 - - - - + + + + 19 LOC in Function: _applyPixelTransform() File: lib/helpers/image_effects.dart - - _applyPixelTransform - 19 + + _applyPixelTransform + 19 - - - - + + + + 4 LOC in Function: _opacityToByte() File: lib/helpers/image_effects.dart - - _opacityToByte - 4 + + _opacityToByte + 4 - - - - + + + + 38 LOC in Function: applyGaussianBlur() File: lib/helpers/image_effects.dart - - applyGaussianBlur - 38 + + applyGaussianBlur + 38 - - - - + + + + 51 LOC in Function: applyPixelate() File: lib/helpers/image_effects.dart - - applyPixelate - 51 + + applyPixelate + 51 - - - - + + + + 58 LOC in Function: applyGrayscale() File: lib/helpers/image_effects.dart - - applyGrayscale - 58 + + applyGrayscale + 58 - - - - + + + + 55 LOC in Function: applySharpen() File: lib/helpers/image_effects.dart - - applySharpen - 55 + + applySharpen + 55 - - - - + + + + 50 LOC in Function: applyNoise() File: lib/helpers/image_effects.dart - - applyNoise - 50 + + applyNoise + 50 - - - - + + + + 5 LOC in Function: _resolvePixelateBlockSize() File: lib/helpers/image_effects.dart - - _resolvePixelateBlockSize - 5 + + _resolvePixelateBlockSize + 5 - - - - + + + + 5 LOC in Function: _resolveNoiseCellSize() File: lib/helpers/image_effects.dart - - _resolveNoiseCellSize - 5 + + _resolveNoiseCellSize + 5 - - - - + + + + 37 LOC in Function: applyVignette() File: lib/helpers/image_effects.dart - - applyVignette - 37 + + applyVignette + 37 - - - - + + + + 26 LOC in Function: _blendOver() File: lib/helpers/image_effects.dart - - _blendOver - 26 + + _blendOver + 26 - - - - + + + + 20 LOC in Function: applyBrightness() File: lib/helpers/image_effects.dart - - applyBrightness - 20 + + applyBrightness + 20 - - - - + + + + 23 LOC in Function: applyContrast() File: lib/helpers/image_effects.dart - - applyContrast - 23 + + applyContrast + 23 - - - - + + + + 30 LOC in Function: applyHueSaturation() File: lib/helpers/image_effects.dart - - applyHueSaturation - 30 + + applyHueSaturation + 30 - - - - + + + + 27 LOC in Function: applyShadow() File: lib/helpers/image_effects.dart - - applyShadow - 27 + + applyShadow + 27 - - - - + + + + 26 LOC in Function: _rgbToHsl() File: lib/helpers/image_effects.dart - - _rgbToHsl - 26 + + _rgbToHsl + 26 - - - - + + + + 37 LOC in Function: _hslToRgb() File: lib/helpers/image_effects.dart - - _hslToRgb - 37 + + _hslToRgb + 37 - - - - + + + + 345 LOC File: lib/helpers/image_helper.dart - image_helper.dart - 345 LOC + image_helper.dart + 345 LOC - - - - + + + + 325 LOC in Class: <...> File: lib/helpers/image_helper.dart - <...> - 325 LOC + <...> + 325 LOC - - - - + + + + 8 LOC in Function: extractImagePixels() File: lib/helpers/image_helper.dart - - extractImagePixels - 8 + + extractImagePixels + 8 - - - - + + + + 11 LOC in Function: renderCanvasImage() File: lib/helpers/image_helper.dart - - renderCanvasImage - 11 + + renderCanvasImage + 11 - - - - + + + + 14 LOC in Function: renderCanvasImageSync() File: lib/helpers/image_helper.dart - - renderCanvasImageSync - 14 + + renderCanvasImageSync + 14 - - - - + + + + 17 LOC in Function: imageFromPixels() File: lib/helpers/image_helper.dart - - imageFromPixels - 17 + + imageFromPixels + 17 - - - - + + + + 20 LOC in Function: imageFromPixelsDecode() File: lib/helpers/image_helper.dart - - imageFromPixelsDecode - 20 + + imageFromPixelsDecode + 20 - - - - + + + + 40 LOC in Function: getImageColors() File: lib/helpers/image_helper.dart - - getImageColors - 40 + + getImageColors + 40 - - - - + + + + 9 LOC in Function: fromBytesToImage() File: lib/helpers/image_helper.dart - - fromBytesToImage - 9 + + fromBytesToImage + 9 - - - - + + + + 7 LOC in Function: convertImageToUint8List() File: lib/helpers/image_helper.dart - - convertImageToUint8List - 7 + + convertImageToUint8List + 7 - - - - + + + + 10 LOC in Function: copyImageToClipboard() File: lib/helpers/image_helper.dart - - copyImageToClipboard - 10 + + copyImageToClipboard + 10 - - - - + + + + 9 LOC in Function: copyImageBytesToClipboard() File: lib/helpers/image_helper.dart - - copyImageBytesToClipboard - 9 + + copyImageBytesToClipboard + 9 - - - - + + + + 20 LOC in Function: getImageFromClipboard() File: lib/helpers/image_helper.dart - - getImageFromClipboard - 20 + + getImageFromClipboard + 20 - - - - + + + + 12 LOC in Function: clipboardHasImage() File: lib/helpers/image_helper.dart - - clipboardHasImage - 12 + + clipboardHasImage + 12 - - - - + + + + 45 LOC in Function: downsampleRgbaBox() File: lib/helpers/image_helper.dart - - downsampleRgbaBox - 45 + + downsampleRgbaBox + 45 - - - - + + + + 25 LOC in Function: flipImage() File: lib/helpers/image_helper.dart - - flipImage - 25 + + flipImage + 25 - - - - + + + + 17 LOC in Function: rotateImage90() File: lib/helpers/image_helper.dart - - rotateImage90 - 17 + + rotateImage90 + 17 - - - - + + + + 17 LOC in Function: cropImage() File: lib/helpers/image_helper.dart - - cropImage - 17 + + cropImage + 17 - - - - + + + + 44 LOC in Function: getNonTransparentBounds() File: lib/helpers/image_helper.dart - - getNonTransparentBounds - 44 + + getNonTransparentBounds + 44 - - - - + + + + 20 LOC in Class: Debouncer File: lib/helpers/image_helper.dart - Debouncer - 20 LOC + Debouncer + 20 LOC - - - - - 249 LOC File: lib/helpers/transform_helper.dart + + + + + 261 LOC File: lib/helpers/transform_helper.dart - transform_helper.dart - 249 LOC + transform_helper.dart + 261 LOC - - - - - 249 LOC in Class: <...> + <rect x="2444.1608389322287" y="1076.009822415924" width="155.50730531925547" height="198.73313752517603" rx="5.00" ry="5.00" fill="#9eb89a" fill-opacity="0.45"/> + <rect x="2444.1608389322287" y="1076.009822415924" width="155.50730531925547" height="198.73313752517603" rx="5.00" ry="5.00" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2444.1608389322287" y="1076.009822415924" width="155.50730531925547" height="198.73313752517603" rx="5.00" ry="5.00" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8" stroke-dasharray="6,4"/> + <rect x="2444.1608389322287" y="1076.009822415924" width="155.50730531925547" height="198.73313752517603" rx="5.00" ry="5.00" fill="transparent" pointer-events="all"> + <title>261 LOC in Class: <...> File: lib/helpers/transform_helper.dart - <...> - 249 LOC + <...> + 261 LOC - - - - + + + + 71 LOC in Function: drawPerspectiveImage() File: lib/helpers/transform_helper.dart - - drawPerspectiveImage - 71 + + drawPerspectiveImage + 71 - - - - + + + + 44 LOC in Function: renderTransformedImage() File: lib/helpers/transform_helper.dart - - renderTransformedImage - 44 + + renderTransformedImage + 44 - - - - + + + + 21 LOC in Function: _interpolateBilinear() File: lib/helpers/transform_helper.dart - - _interpolateBilinear - 21 + + _interpolateBilinear + 21 - - - - + + + + 43 LOC in Function: _interpolateCoonsPatch() File: lib/helpers/transform_helper.dart - - _interpolateCoonsPatch - 43 + + _interpolateCoonsPatch + 43 - - - - + + + + 12 LOC in Function: _interpolatePiecewiseLinear() File: lib/helpers/transform_helper.dart - - _interpolatePiecewiseLinear - 12 + + _interpolatePiecewiseLinear + 12 - - - - + + + + 17 LOC in Function: triggerRotationSnapHaptic() File: lib/helpers/transform_helper.dart - - triggerRotationSnapHaptic - 17 + + triggerRotationSnapHaptic + 17 - - - - + + + + 17 LOC in Function: triggerScaleSnapHaptic() File: lib/helpers/transform_helper.dart - - triggerScaleSnapHaptic - 17 + + triggerScaleSnapHaptic + 17 - - - - + + + + 16 LOC in Function: triggerSquareSnapHaptic() File: lib/helpers/transform_helper.dart - - triggerSquareSnapHaptic - 16 + + triggerSquareSnapHaptic + 16 - - - - + + + + + 12 LOC in Function: triggerWandToleranceHaptic() + +File: lib/helpers/transform_helper.dart + + + triggerWandToleranceHaptic + 12 + + + + + + + 8 LOC in Function: _performHaptic() File: lib/helpers/transform_helper.dart - - _performHaptic - 8 + + _performHaptic + 8 - - - - + + + + 158 LOC File: lib/helpers/color_helper.dart - color_helper.dart - 158 LOC + color_helper.dart + 158 LOC - - - - + + + + 133 LOC in Class: <...> File: lib/helpers/color_helper.dart - <...> - 133 LOC + <...> + 133 LOC - - - - + + + + 16 LOC in Function: adjustBrightness() File: lib/helpers/color_helper.dart - - adjustBrightness - 16 + + adjustBrightness + 16 - - - - + + + + 20 LOC in Function: colorToHexString() File: lib/helpers/color_helper.dart - - colorToHexString - 20 + + colorToHexString + 20 - - - - + + + + 46 LOC in Function: getColorComponentsAsHex() File: lib/helpers/color_helper.dart - - getColorComponentsAsHex - 46 + + getColorComponentsAsHex + 46 - - - - + + + + 20 LOC in Function: contrastColor() File: lib/helpers/color_helper.dart - - contrastColor - 20 + + contrastColor + 20 - - - - + + + + 20 LOC in Function: getColorFromString() File: lib/helpers/color_helper.dart - - getColorFromString - 20 + + getColorFromString + 20 - - - - + + + + 11 LOC in Function: hsvToColor() File: lib/helpers/color_helper.dart - - hsvToColor - 11 + + hsvToColor + 11 - - - - + + + + 25 LOC in Class: ColorUsage File: lib/helpers/color_helper.dart - ColorUsage - 25 LOC + ColorUsage + 25 LOC - - - - + + + + 150 LOC File: lib/helpers/draw_path_helper.dart - draw_path_helper.dart - 150 LOC + draw_path_helper.dart + 150 LOC - - - - + + + + 150 LOC in Class: <...> File: lib/helpers/draw_path_helper.dart - <...> - 150 LOC + <...> + 150 LOC - - - - + + + + 92 LOC in Function: expandPathInDirectionWithOffset() File: lib/helpers/draw_path_helper.dart - - expandPathInDirectionWithOffset - 92 + + expandPathInDirectionWithOffset + 92 - - - - + + + + 3 LOC in Function: _isResizableExtent() File: lib/helpers/draw_path_helper.dart - - _isResizableExtent - 3 + + _isResizableExtent + 3 - - - - + + + + 11 LOC in Function: rotatePathAroundCenter() File: lib/helpers/draw_path_helper.dart - - rotatePathAroundCenter - 11 + + rotatePathAroundCenter + 11 - - - - + + + + 16 LOC in Function: scalePathAroundCenter() File: lib/helpers/draw_path_helper.dart - - scalePathAroundCenter - 16 + + scalePathAroundCenter + 16 - - - - + + + + 28 LOC in Function: scaleSizeTo() File: lib/helpers/draw_path_helper.dart - - scaleSizeTo - 28 + + scaleSizeTo + 28 - - - - + + + + 117 LOC File: lib/helpers/list_helper.dart - list_helper.dart - 117 LOC + list_helper.dart + 117 LOC - - - - + + + + 59 LOC in Class: <...> File: lib/helpers/list_helper.dart - <...> - 59 LOC + <...> + 59 LOC - - - - + + + + 44 LOC in Function: calculateSpread() File: lib/helpers/list_helper.dart - - calculateSpread - 44 + + calculateSpread + 44 - - - - + + + + 6 LOC in Function: isIndexInRange() File: lib/helpers/list_helper.dart - - isIndexInRange - 6 + + isIndexInRange + 6 - - - - + + + + 9 LOC in Method: .findFirstMatch() File: lib/helpers/list_helper.dart - - findFirstMatch - 9 + + findFirstMatch + 9 - - - - + + + + 23 LOC in Class: KeyValue File: lib/helpers/list_helper.dart - KeyValue - 23 LOC + KeyValue + 23 LOC - - - - + + + + 1 LOC in Method: KeyValue.KeyValue() File: lib/helpers/list_helper.dart - - KeyValue - 1 + + KeyValue + 1 - - - - + + + + 11 LOC in Method: KeyValue.==() File: lib/helpers/list_helper.dart - - == - 11 + + == + 11 - - - - + + + + 2 LOC in Method: KeyValue.hashCode() File: lib/helpers/list_helper.dart - - hashCode - 2 + + hashCode + 2 - - - - + + + + 4 LOC in Method: KeyValue.toString() File: lib/helpers/list_helper.dart - - toString - 4 + + toString + 4 - - - - + + + + 18 LOC in Class: Triple File: lib/helpers/list_helper.dart - Triple - 18 LOC + Triple + 18 LOC - - - - + + + + 17 LOC in Class: Pair File: lib/helpers/list_helper.dart - Pair - 17 LOC + Pair + 17 LOC - - - - + + + + 1 LOC in Method: Pair.Pair() File: lib/helpers/list_helper.dart - - Pair - 1 + + Pair + 1 - - - - + + + + 7 LOC in Method: Pair.==() File: lib/helpers/list_helper.dart - - == - 7 + + == + 7 - - - - + + + + 2 LOC in Method: Pair.hashCode() File: lib/helpers/list_helper.dart - - hashCode - 2 + + hashCode + 2 - - - - + + + + 2 LOC in Method: Pair.toString() File: lib/helpers/list_helper.dart - - toString - 2 + + toString + 2 - - - - + + + + 77 LOC File: lib/helpers/shortcuts_constants.dart - shortcuts_constants.dart - 77 LOC + shortcuts_constants.dart + 77 LOC - - - - + + + + 30 LOC in Class: ShortcutActions File: lib/helpers/shortcuts_constants.dart - ShortcutActions - 30 LOC + ShortcutActions + 30 LOC - - - - + + + + 20 LOC in Class: ShortcutKeys File: lib/helpers/shortcuts_constants.dart - ShortcutKeys - 20 LOC + ShortcutKeys + 20 LOC - - - - + + + + 9 LOC in Class: ShortcutCategories File: lib/helpers/shortcuts_constants.dart - ShortcutCategories - 9 LOC + ShortcutCategories + 9 LOC - - - - + + + + 8 LOC in Class: ShortcutModifiers File: lib/helpers/shortcuts_constants.dart - ShortcutModifiers - 8 LOC + ShortcutModifiers + 8 LOC - - - - + + + + 5 LOC in Class: ShortcutLabels File: lib/helpers/shortcuts_constants.dart - ShortcutLabels - 5 LOC + ShortcutLabels + 5 LOC - - - - + + + + 5 LOC in Class: ShortcutMapKeys File: lib/helpers/shortcuts_constants.dart - ShortcutMapKeys - 5 LOC + ShortcutMapKeys + 5 LOC - - - - + + + + 25 LOC File: lib/helpers/shortcut_tooltip.dart - shortcut_tooltip.dart - 25 LOC + shortcut_tooltip.dart + 25 LOC - - - - + + + + 25 LOC in Class: <...> File: lib/helpers/shortcut_tooltip.dart - <...> - 25 LOC + <...> + 25 LOC - - - - + + + + 19 LOC File: lib/helpers/log_helper.dart - log_helper.dart - 19 LOC + log_helper.dart + 19 LOC - - - - + + + + 19 LOC in Class: <...> File: lib/helpers/log_helper.dart - <...> - 19 LOC + <...> + 19 LOC - - - - + + + + 7 LOC File: lib/helpers/draft_flusher.dart - draft_flusher.dart - 7 LOC + draft_flusher.dart + 7 LOC - - - - + + + + 7 LOC in Class: DraftFlusher File: lib/helpers/draft_flusher.dart - DraftFlusher - 7 LOC + DraftFlusher + 7 LOC - - - - - 2,077 LOC Folder: lib/models + + + + + 2,175 LOC Folder: lib/models - models - 2,077 LOC + models + 2,175 LOC - - - - + + + + 567 LOC File: lib/models/render_helper.dart - render_helper.dart - 567 LOC + render_helper.dart + 567 LOC - - - - + + + + 567 LOC in Class: <...> File: lib/models/render_helper.dart - <...> - 567 LOC + <...> + 567 LOC - - - - + + + + 18 LOC in Function: renderPencilStroke() File: lib/models/render_helper.dart - - renderPencilStroke - 18 + + renderPencilStroke + 18 - - - - + + + + 17 LOC in Function: renderPencilEraserStroke() File: lib/models/render_helper.dart - - renderPencilEraserStroke - 17 + + renderPencilEraserStroke + 17 - - - - + + + + 31 LOC in Function: _renderFreehandStroke() File: lib/models/render_helper.dart - - _renderFreehandStroke - 31 + + _renderFreehandStroke + 31 - - - - + + + + 34 LOC in Function: renderRectangle() File: lib/models/render_helper.dart - - renderRectangle - 34 + + renderRectangle + 34 - - - - + + + + 42 LOC in Function: renderCircle() File: lib/models/render_helper.dart - - renderCircle - 42 + + renderCircle + 42 - - - - + + + + 33 LOC in Function: renderPath() File: lib/models/render_helper.dart - - renderPath - 33 + + renderPath + 33 - - - - + + + + 31 LOC in Function: renderLine() File: lib/models/render_helper.dart - - renderLine - 31 + + renderLine + 31 - - - - + + + + 29 LOC in Function: renderRegion() File: lib/models/render_helper.dart - - renderRegion - 29 + + renderRegion + 29 - - - - + + + + 48 LOC in Function: _renderHalftoneRegion() File: lib/models/render_helper.dart - - _renderHalftoneRegion - 48 + + _renderHalftoneRegion + 48 - - - - + + + + 9 LOC in Function: resolveHalftoneSpacing() File: lib/models/render_helper.dart - - resolveHalftoneSpacing - 9 + + resolveHalftoneSpacing + 9 - - - - + + + + 40 LOC in Function: _halftoneIntensityAt() File: lib/models/render_helper.dart - - _halftoneIntensityAt - 40 + + _halftoneIntensityAt + 40 - - - - + + + + 9 LOC in Function: _alignmentToPoint() File: lib/models/render_helper.dart - - _alignmentToPoint - 9 + + _alignmentToPoint + 9 - - - - + + + + 11 LOC in Function: renderRegionErase() File: lib/models/render_helper.dart - - renderRegionErase - 11 + + renderRegionErase + 11 - - - - + + + + 12 LOC in Function: renderImage() File: lib/models/render_helper.dart - - renderImage - 12 + + renderImage + 12 - - - - + + + + 49 LOC in Function: drawPathWithBrushStyle() File: lib/models/render_helper.dart - - drawPathWithBrushStyle - 49 + + drawPathWithBrushStyle + 49 - - - - + + + + 21 LOC in Function: drawPathDash() File: lib/models/render_helper.dart - - drawPathDash - 21 + + drawPathDash + 21 - - - - + + + + 27 LOC in Function: createDashedPath() File: lib/models/render_helper.dart - - createDashedPath - 27 + + createDashedPath + 27 - - - - + + + + 25 LOC in Function: _drawPathDots() File: lib/models/render_helper.dart - - _drawPathDots - 25 + + _drawPathDots + 25 - - - - + + + + 37 LOC in Function: _drawPathDashDot() File: lib/models/render_helper.dart - - _drawPathDashDot - 37 + + _drawPathDashDot + 37 - - - - + + + + 30 LOC in Function: _drawPathSlashes() File: lib/models/render_helper.dart - - _drawPathSlashes - 30 + + _drawPathSlashes + 30 - - - - + + + + 14 LOC in Function: renderText() File: lib/models/render_helper.dart - - renderText - 14 + + renderText + 14 - - - - + + + + 407 LOC File: lib/models/transform_model.dart - transform_model.dart - 407 LOC + transform_model.dart + 407 LOC - - - - + + + + 407 LOC in Class: TransformModel File: lib/models/transform_model.dart - TransformModel - 407 LOC + TransformModel + 407 LOC - - - - + + + + 27 LOC in Method: TransformModel.start() File: lib/models/transform_model.dart - - start - 27 + + start + 27 - - - - + + + + 4 LOC in Method: TransformModel.moveCorner() File: lib/models/transform_model.dart - - moveCorner - 4 + + moveCorner + 4 - - - - + + + + 4 LOC in Method: TransformModel.moveEdgeHandle() File: lib/models/transform_model.dart - - moveEdgeHandle - 4 + + moveEdgeHandle + 4 - - - - + + + + 11 LOC in Method: TransformModel.moveConnectedEdge() File: lib/models/transform_model.dart - - moveConnectedEdge - 11 + + moveConnectedEdge + 11 - - - - + + + + 9 LOC in Method: TransformModel.moveAll() File: lib/models/transform_model.dart - - moveAll - 9 + + moveAll + 9 - - - - + + + + 2 LOC in Method: TransformModel.isDeformMode() File: lib/models/transform_model.dart - - isDeformMode - 2 + + isDeformMode + 2 - - - - + + + + 2 LOC in Method: TransformModel.isRotateMode() File: lib/models/transform_model.dart - - isRotateMode - 2 + + isRotateMode + 2 - - - - + + + + 2 LOC in Method: TransformModel.isScaleMode() File: lib/models/transform_model.dart - - isScaleMode - 2 + + isScaleMode + 2 - - - - + + + + 2 LOC in Method: TransformModel.areCornerHandlesEnabled() File: lib/models/transform_model.dart - - areCornerHandlesEnabled - 2 + + areCornerHandlesEnabled + 2 - - - - + + + + 2 LOC in Method: TransformModel.areEdgeHandlesEnabled() File: lib/models/transform_model.dart - - areEdgeHandlesEnabled - 2 + + areEdgeHandlesEnabled + 2 - - - - + + + + 2 LOC in Method: TransformModel.isCenterHandleEnabled() File: lib/models/transform_model.dart - - isCenterHandleEnabled - 2 + + isCenterHandleEnabled + 2 - - - - + + + + 2 LOC in Method: TransformModel.isTranslateMode() File: lib/models/transform_model.dart - - isTranslateMode - 2 + + isTranslateMode + 2 - - - - + + + + 8 LOC in Method: TransformModel.activeEdgeIndex() File: lib/models/transform_model.dart - - activeEdgeIndex - 8 + + activeEdgeIndex + 8 - - - - + + + + 4 LOC in Method: TransformModel.isCornerActive() File: lib/models/transform_model.dart - - isCornerActive - 4 + + isCornerActive + 4 - - - - + + + + 4 LOC in Method: TransformModel.isEdgeActive() File: lib/models/transform_model.dart - - isEdgeActive - 4 + + isEdgeActive + 4 - - - - + + + + 2 LOC in Method: TransformModel.isCenterActive() File: lib/models/transform_model.dart - - isCenterActive - 2 + + isCenterActive + 2 - - - - + + + + 15 LOC in Method: TransformModel.effectiveEdgeMidpoints() File: lib/models/transform_model.dart - - effectiveEdgeMidpoints - 15 + + effectiveEdgeMidpoints + 15 - - - - + + + + 2 LOC in Method: TransformModel.isFeedbackVisible() File: lib/models/transform_model.dart - - isFeedbackVisible - 2 + + isFeedbackVisible + 2 - - - - + + + + 8 LOC in Method: TransformModel.setDeformMode() File: lib/models/transform_model.dart - - setDeformMode - 8 + + setDeformMode + 8 - - - - + + + + 8 LOC in Method: TransformModel.setTranslateMode() File: lib/models/transform_model.dart - - setTranslateMode - 8 + + setTranslateMode + 8 - - - - + + + + 11 LOC in Method: TransformModel.cycleHandleSet() File: lib/models/transform_model.dart - - cycleHandleSet - 11 + + cycleHandleSet + 11 - - - - + + + + 7 LOC in Method: TransformModel.setRotateMode() File: lib/models/transform_model.dart - - setRotateMode - 7 + + setRotateMode + 7 - - - - + + + + 7 LOC in Method: TransformModel.setScaleMode() File: lib/models/transform_model.dart - - setScaleMode - 7 + + setScaleMode + 7 - - - - + + + + 5 LOC in Method: TransformModel.setActiveCorner() File: lib/models/transform_model.dart - - setActiveCorner - 5 + + setActiveCorner + 5 - - - - + + + + 5 LOC in Method: TransformModel.setActiveEdgeHandle() File: lib/models/transform_model.dart - - setActiveEdgeHandle - 5 + + setActiveEdgeHandle + 5 - - - - + + + + 5 LOC in Method: TransformModel.setActiveEdgeLine() File: lib/models/transform_model.dart - - setActiveEdgeLine - 5 + + setActiveEdgeLine + 5 - - - - + + + + 5 LOC in Method: TransformModel.setActiveCenter() File: lib/models/transform_model.dart - - setActiveCenter - 5 + + setActiveCenter + 5 - - - - + + + + 5 LOC in Method: TransformModel.clearActiveControl() File: lib/models/transform_model.dart - - clearActiveControl - 5 + + clearActiveControl + 5 - - - - + + + + 7 LOC in Method: TransformModel.beginScaleGesture() File: lib/models/transform_model.dart - - beginScaleGesture - 7 + + beginScaleGesture + 7 - - - - + + + + 5 LOC in Method: TransformModel.endScaleGesture() File: lib/models/transform_model.dart - - endScaleGesture - 5 + + endScaleGesture + 5 - - - - + + + + 7 LOC in Method: TransformModel.beginRotateGesture() File: lib/models/transform_model.dart - - beginRotateGesture - 7 + + beginRotateGesture + 7 - - - - + + + + 6 LOC in Method: TransformModel.updateRotationFeedback() File: lib/models/transform_model.dart - - updateRotationFeedback - 6 + + updateRotationFeedback + 6 - - - - + + + + 5 LOC in Method: TransformModel.endRotateGesture() File: lib/models/transform_model.dart - - endRotateGesture - 5 + + endRotateGesture + 5 - - - - + + + + 19 LOC in Method: TransformModel.scaleUniform() File: lib/models/transform_model.dart - - scaleUniform - 19 + + scaleUniform + 19 - - - - + + + + 20 LOC in Method: TransformModel.rotate() File: lib/models/transform_model.dart - - rotate - 20 + + rotate + 20 - - - - + + + + 15 LOC in Method: TransformModel.center() File: lib/models/transform_model.dart - - center - 15 + + center + 15 - - - - + + + + 9 LOC in Method: TransformModel.edgeMidpoint() File: lib/models/transform_model.dart - - edgeMidpoint - 9 + + edgeMidpoint + 9 - - - - + + + + 17 LOC in Method: TransformModel.boundaryPoints() File: lib/models/transform_model.dart - - boundaryPoints - 17 + + boundaryPoints + 17 - - - - + + + + 30 LOC in Method: TransformModel.quadBounds() File: lib/models/transform_model.dart - - quadBounds - 30 + + quadBounds + 30 - - - - + + + + 20 LOC in Method: TransformModel._edgeIndexForCorners() File: lib/models/transform_model.dart - - _edgeIndexForCorners - 20 + + _edgeIndexForCorners + 20 - - - - + + + + 7 LOC in Method: TransformModel._straightEdgeMidpoint() File: lib/models/transform_model.dart - - _straightEdgeMidpoint - 7 + + _straightEdgeMidpoint + 7 - - - - + + + + 15 LOC in Method: TransformModel._cornerIndicesForEdge() File: lib/models/transform_model.dart - - _cornerIndicesForEdge - 15 + + _cornerIndicesForEdge + 15 - - - - + + + + 12 LOC in Method: TransformModel.clear() File: lib/models/transform_model.dart - - clear - 12 + + clear + 12 - - - - + + + + 330 LOC File: lib/models/selector_model.dart - selector_model.dart - 330 LOC + selector_model.dart + 330 LOC - - - - + + + + 323 LOC in Class: SelectorModel File: lib/models/selector_model.dart - SelectorModel - 323 LOC + SelectorModel + 323 LOC - - - - + + + + 2 LOC in Method: SelectorModel.boundingRect() File: lib/models/selector_model.dart - - boundingRect - 2 + + boundingRect + 2 - - - - + + + + 10 LOC in Method: SelectorModel.clear() File: lib/models/selector_model.dart - - clear - 10 + + clear + 10 - - - - + + + + 14 LOC in Method: SelectorModel.invert() File: lib/models/selector_model.dart - - invert - 14 + + invert + 14 - - - - + + + + 9 LOC in Method: SelectorModel.translate() File: lib/models/selector_model.dart - - translate - 9 + + translate + 9 - - - - + + + + 11 LOC in Method: SelectorModel.nindeGridResize() File: lib/models/selector_model.dart - - nindeGridResize - 11 + + nindeGridResize + 11 - - - - + + + + 9 LOC in Method: SelectorModel.rotate() File: lib/models/selector_model.dart - - rotate - 9 + + rotate + 9 - - - - + + + + 13 LOC in Method: SelectorModel.scaleUniform() File: lib/models/selector_model.dart - - scaleUniform - 13 + + scaleUniform + 13 - - - - + + + + 30 LOC in Method: SelectorModel.addP1() File: lib/models/selector_model.dart - - addP1 - 30 + + addP1 + 30 - - - - + + + + 48 LOC in Method: SelectorModel.addP2() File: lib/models/selector_model.dart - - addP2 - 48 + + addP2 + 48 - - - - + + + + 55 LOC in Method: SelectorModel.applyMath() File: lib/models/selector_model.dart - - applyMath - 55 + + applyMath + 55 - - - - + + + + 19 LOC in Method: SelectorModel._combinePathsSafely() File: lib/models/selector_model.dart - - _combinePathsSafely - 19 + + _combinePathsSafely + 19 - - - - + + + + 9 LOC in Method: SelectorModel.combinePaths() File: lib/models/selector_model.dart - - combinePaths - 9 + + combinePaths + 9 - - - - + + + + 25 LOC in Method: SelectorModel.addStraightLineRegionPoint() File: lib/models/selector_model.dart - - addStraightLineRegionPoint - 25 + + addStraightLineRegionPoint + 25 - - - - + + + + 16 LOC in Method: SelectorModel.updateStraightLineRegionPreview() File: lib/models/selector_model.dart - - updateStraightLineRegionPreview - 16 + + updateStraightLineRegionPreview + 16 - - - - + + + + 8 LOC in Method: SelectorModel._setWorkingPath() File: lib/models/selector_model.dart - - _setWorkingPath - 8 + + _setWorkingPath + 8 - - - - + + + + 6 LOC in Method: SelectorModel._isClosingStraightLineRegion() File: lib/models/selector_model.dart - - _isClosingStraightLineRegion - 6 + + _isClosingStraightLineRegion + 6 - - - - + + + + 9 LOC in Method: SelectorModel.closeStraightLineRegion() File: lib/models/selector_model.dart - - closeStraightLineRegion - 9 + + closeStraightLineRegion + 9 - - - - + + + + 21 LOC in Method: SelectorModel._buildStraightLineRegionPath() File: lib/models/selector_model.dart - - _buildStraightLineRegionPath - 21 + + _buildStraightLineRegionPath + 21 - - - - + + + + 7 LOC in Class: <...> File: lib/models/selector_model.dart - <...> - 7 LOC + <...> + 7 LOC - - - - - 131 LOC File: lib/models/selection_effect.dart + + + + + 143 LOC File: lib/models/selection_effect.dart - selection_effect.dart - 131 LOC + selection_effect.dart + 143 LOC - - - - - 115 LOC in Class: <...> + <rect x="2269.5400831680627" y="1561.1215491348662" width="142.5314963011755" height="86.55051449164488" rx="5.00" ry="5.00" fill="#9eb89a" fill-opacity="0.45"/> + <rect x="2269.5400831680627" y="1561.1215491348662" width="142.5314963011755" height="86.55051449164488" rx="5.00" ry="5.00" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2269.5400831680627" y="1561.1215491348662" width="142.5314963011755" height="86.55051449164488" rx="5.00" ry="5.00" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8" stroke-dasharray="6,4"/> + <rect x="2269.5400831680627" y="1561.1215491348662" width="142.5314963011755" height="86.55051449164488" rx="5.00" ry="5.00" fill="transparent" pointer-events="all"> + <title>125 LOC in Class: <...> File: lib/models/selection_effect.dart - <...> - 115 LOC + <...> + 125 LOC - - - - + + + + 2 LOC in Method: .icon() File: lib/models/selection_effect.dart - - icon - 2 + + icon + 2 - - - - + + + + 2 LOC in Method: .supportsSizeControl() File: lib/models/selection_effect.dart - - supportsSizeControl - 2 + + supportsSizeControl + 2 + + + + + + + + 4 LOC in Method: .bipolar() + +File: lib/models/selection_effect.dart + + + bipolar + 4 - - - - + + + + 2 LOC in Method: .defaultSize() File: lib/models/selection_effect.dart - - defaultSize - 2 + + defaultSize + 2 - - - - + + + + 4 LOC in Method: .sizeValue() File: lib/models/selection_effect.dart - - sizeValue - 4 + + sizeValue + 4 - - - - - 15 LOC in Method: .apply() + <rect x="2277.5400831680627" y="1585.1215491348662" width="35.428818964329146" height="28.05455030998879" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2277.5400831680627" y="1585.1215491348662" width="35.428818964329146" height="28.05455030998879" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2277.5400831680627" y="1585.1215491348662" width="35.428818964329146" height="28.05455030998879" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2277.5400831680627" y="1585.1215491348662" width="35.428818964329146" height="28.05455030998879" fill="transparent" pointer-events="all"> + <title>18 LOC in Method: .apply() File: lib/models/selection_effect.dart - - apply - 15 + + apply + 18 - - - - + + + + 3 LOC in Function: _defaultSelectionEffectSizeValue() File: lib/models/selection_effect.dart - - _defaultSelectionEffectSizeValue - 3 + + _defaultSelectionEffectSizeValue + 3 - - - - + + + + 5 LOC in Function: _noiseSelectionEffectSizeValue() File: lib/models/selection_effect.dart - - _noiseSelectionEffectSizeValue - 5 + + _noiseSelectionEffectSizeValue + 5 - - - - + + + + 5 LOC in Function: _pixelateSelectionEffectSizeValue() File: lib/models/selection_effect.dart - - _pixelateSelectionEffectSizeValue - 5 + + _pixelateSelectionEffectSizeValue + 5 - - - - + + + + 7 LOC in Function: _applyBlurEffect() File: lib/models/selection_effect.dart - - _applyBlurEffect - 7 + + _applyBlurEffect + 7 - - - - + + + + 7 LOC in Function: _applyBrightnessEffect() File: lib/models/selection_effect.dart - - _applyBrightnessEffect - 7 + + _applyBrightnessEffect + 7 - - - - + + + + 7 LOC in Function: _applyContrastEffect() File: lib/models/selection_effect.dart - - _applyContrastEffect - 7 + + _applyContrastEffect + 7 - - - - + + + + 7 LOC in Function: _applyGrayscaleEffect() File: lib/models/selection_effect.dart - - _applyGrayscaleEffect - 7 + + _applyGrayscaleEffect + 7 - - - - + + + + 7 LOC in Function: _applyHueSaturationEffect() File: lib/models/selection_effect.dart - - _applyHueSaturationEffect - 7 + + _applyHueSaturationEffect + 7 - - - - + + + + 7 LOC in Function: _applyNoiseEffect() File: lib/models/selection_effect.dart - - _applyNoiseEffect - 7 + + _applyNoiseEffect + 7 - - - - + + + + 7 LOC in Function: _applyPixelateEffect() File: lib/models/selection_effect.dart - - _applyPixelateEffect - 7 + + _applyPixelateEffect + 7 - - - - + + + + 7 LOC in Function: _applyShadowEffect() File: lib/models/selection_effect.dart - - _applyShadowEffect - 7 - - - - - - - - 7 LOC in Function: _applySharpenEffect() - -File: lib/models/selection_effect.dart - - - _applySharpenEffect - 7 + + _applyShadowEffect + 7 - - - - - 7 LOC in Function: _applySoftenEffect() + <rect x="2277.5400831680627" y="1613.176099444855" width="35.428818964329146" height="26.495964181656085" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2277.5400831680627" y="1613.176099444855" width="35.428818964329146" height="26.495964181656085" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2277.5400831680627" y="1613.176099444855" width="35.428818964329146" height="26.495964181656085" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2277.5400831680627" y="1613.176099444855" width="35.428818964329146" height="26.495964181656085" fill="transparent" pointer-events="all"> + <title>17 LOC in Function: _applySharpnessEffect() File: lib/models/selection_effect.dart - - _applySoftenEffect - 7 + + _applySharpnessEffect + 17 - - - - + + + + 7 LOC in Function: _applyVignetteEffect() File: lib/models/selection_effect.dart - - _applyVignetteEffect - 7 + + _applyVignetteEffect + 7 - - - - - 15 LOC in Class: _SelectionEffectConfig + <rect x="2412.0715794692383" y="1561.1215491348662" width="20.524535467369276" height="81.74215257544238" rx="5.00" ry="5.00" fill="#9eb89a" fill-opacity="0.78"/> + <rect x="2412.0715794692383" y="1561.1215491348662" width="20.524535467369276" height="81.74215257544238" rx="5.00" ry="5.00" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2412.0715794692383" y="1561.1215491348662" width="20.524535467369276" height="81.74215257544238" rx="5.00" ry="5.00" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2412.0715794692383" y="1561.1215491348662" width="20.524535467369276" height="81.74215257544238" rx="5.00" ry="5.00" fill="transparent" pointer-events="all"> + <title>17 LOC in Class: _SelectionEffectConfig File: lib/models/selection_effect.dart - _SelectionEffectConfig - 15 LOC + _SelectionEffectConfig + 17 LOC - - - - - 7 LOC in Method: _SelectionEffectConfig._SelectionEffectConfig() + <rect x="2420.0715794692383" y="1585.1215491348662" width="4.524535467369276" height="49.742152575442375" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2420.0715794692383" y="1585.1215491348662" width="4.524535467369276" height="49.742152575442375" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2420.0715794692383" y="1585.1215491348662" width="4.524535467369276" height="49.742152575442375" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2420.0715794692383" y="1585.1215491348662" width="4.524535467369276" height="49.742152575442375" fill="transparent" pointer-events="all"> + <title>8 LOC in Method: _SelectionEffectConfig._SelectionEffectConfig() File: lib/models/selection_effect.dart - - _SelectionEffectConfig - 7 + + _SelectionEffectConfig + 8 - - - - + + + + 1 LOC in Class: unknown File: lib/models/selection_effect.dart - unknown - 1 LOC + unknown + 1 LOC - - - - + + + + 103 LOC File: lib/models/dependency_versions.dart - dependency_versions.dart - 103 LOC + dependency_versions.dart + 103 LOC - - - - + + + + 93 LOC File: lib/models/fill_model.dart - fill_model.dart - 93 LOC + fill_model.dart + 93 LOC - - - - + + + + 82 LOC in Class: FillModel File: lib/models/fill_model.dart - FillModel - 82 LOC + FillModel + 82 LOC - - - - + + + + 2 LOC in Method: FillModel.halftoneMaxDotSizePercent() File: lib/models/fill_model.dart - - halftoneMaxDotSizePercent - 2 + + halftoneMaxDotSizePercent + 2 - - - - + + + + 4 LOC in Method: FillModel.halftoneMaxDotSizePercent() File: lib/models/fill_model.dart - - halftoneMaxDotSizePercent - 4 + + halftoneMaxDotSizePercent + 4 - - - - + + + + 2 LOC in Method: FillModel.halftoneMaxDotSizeFactor() File: lib/models/fill_model.dart - - halftoneMaxDotSizeFactor - 2 + + halftoneMaxDotSizeFactor + 2 - - - - + + + + 2 LOC in Method: FillModel.mode() File: lib/models/fill_model.dart - - mode - 2 + + mode + 2 - - - - + + + + 7 LOC in Method: FillModel.mode() File: lib/models/fill_model.dart - - mode - 7 + + mode + 7 - - - - + + + + 7 LOC in Method: FillModel.clear() File: lib/models/fill_model.dart - - clear - 7 + + clear + 7 - - - - + + + + 4 LOC in Method: FillModel.addPoint() File: lib/models/fill_model.dart - - addPoint - 4 + + addPoint + 4 - - - - + + + + 13 LOC in Method: FillModel.centerPoint() File: lib/models/fill_model.dart - - centerPoint - 13 + + centerPoint + 13 - - - - + + + + 11 LOC in Class: GradientPoint File: lib/models/fill_model.dart - GradientPoint - 11 LOC + GradientPoint + 11 LOC - - - - + + + + 79 LOC File: lib/models/text_object.dart - text_object.dart - 79 LOC + text_object.dart + 79 LOC - - - - + + + + 79 LOC in Class: TextObject File: lib/models/text_object.dart - TextObject - 79 LOC + TextObject + 79 LOC - - - - + + + + 10 LOC in Method: TextObject.TextObject() File: lib/models/text_object.dart - - TextObject - 10 + + TextObject + 10 - - - - + + + + 23 LOC in Method: TextObject.buildParagraph() File: lib/models/text_object.dart - - buildParagraph - 23 + + buildParagraph + 23 - - - - + + + + 4 LOC in Method: TextObject.maxLayoutWidth() File: lib/models/text_object.dart - - maxLayoutWidth - 4 + + maxLayoutWidth + 4 - - - - + + + + 6 LOC in Method: TextObject.layoutParagraph() File: lib/models/text_object.dart - - layoutParagraph - 6 + + layoutParagraph + 6 - - - - + + + + 13 LOC in Method: TextObject.getBounds() File: lib/models/text_object.dart - - getBounds - 13 + + getBounds + 13 - - - - + + + + 4 LOC in Method: TextObject.containsPoint() File: lib/models/text_object.dart - - containsPoint - 4 + + containsPoint + 4 - - - - + + + + 8 LOC in Method: TextObject.center() File: lib/models/text_object.dart - - center - 8 + + center + 8 - - - - + + + + 55 LOC File: lib/models/image_placement_model.dart - image_placement_model.dart - 55 LOC + image_placement_model.dart + 55 LOC - - - - + + + + 55 LOC in Class: ImagePlacementModel File: lib/models/image_placement_model.dart - ImagePlacementModel - 55 LOC - - - - - - 2 LOC in Method: ImagePlacementModel.displayWidth() - -File: lib/models/image_placement_model.dart - - - displayWidth - 2 - - - - - - - - 2 LOC in Method: ImagePlacementModel.displayHeight() - -File: lib/models/image_placement_model.dart - - - displayHeight - 2 - - - - - - - - 7 LOC in Method: ImagePlacementModel.bounds() - -File: lib/models/image_placement_model.dart - - - bounds - 7 - - - - - - - - 2 LOC in Method: ImagePlacementModel.center() - -File: lib/models/image_placement_model.dart - - - center - 2 - - - - - - - - 15 LOC in Method: ImagePlacementModel.start() - -File: lib/models/image_placement_model.dart - - - start - 15 - - - - - - - - 10 LOC in Method: ImagePlacementModel.clear() - -File: lib/models/image_placement_model.dart - - - clear - 10 - - + ImagePlacementModel + 55 LOC - - - - + + + + 51 LOC File: lib/models/text_tool_state.dart - text_tool_state.dart - 51 LOC + text_tool_state.dart + 51 LOC - - - - + + + + 51 LOC in Class: TextToolState File: lib/models/text_tool_state.dart - TextToolState - 51 LOC + TextToolState + 51 LOC - - - - + + + + 7 LOC in Method: TextToolState.TextToolState() File: lib/models/text_tool_state.dart - - TextToolState - 7 + + TextToolState + 7 - - - - + + + + 9 LOC in Method: TextToolState.TextToolState.fromTextObject() File: lib/models/text_tool_state.dart - - TextToolState.fromTextObject - 9 + + TextToolState.fromTextObject + 9 - - - - + + + + 10 LOC in Method: TextToolState.copy() File: lib/models/text_tool_state.dart - - copy - 10 + + copy + 10 - - - - + + + + 17 LOC in Method: TextToolState.buildTextObject() File: lib/models/text_tool_state.dart - - buildTextObject - 17 + + buildTextObject + 17 - - - - + + + + 49 LOC File: lib/models/user_action_drawing.dart - user_action_drawing.dart - 49 LOC + user_action_drawing.dart + 49 LOC - - - - + + + + 40 LOC in Class: UserActionDrawing File: lib/models/user_action_drawing.dart - UserActionDrawing - 40 LOC + UserActionDrawing + 40 LOC - - - - + + + + 13 LOC in Method: UserActionDrawing.UserActionDrawing() File: lib/models/user_action_drawing.dart - - UserActionDrawing - 13 + + UserActionDrawing + 13 - - - - + + + + 4 LOC in Method: UserActionDrawing.toString() File: lib/models/user_action_drawing.dart - - toString - 4 + + toString + 4 - - - - + + + + 8 LOC in Class: <...> File: lib/models/user_action_drawing.dart - <...> - 8 LOC + <...> + 8 LOC - - - - + + + + 1 LOC in Class: unknown File: lib/models/user_action_drawing.dart - unknown - 1 LOC + unknown + 1 LOC - - - - + + + + 46 LOC File: lib/models/effect_preview_model.dart - effect_preview_model.dart - 46 LOC + effect_preview_model.dart + 46 LOC - - - - + + + + 46 LOC in Class: EffectPreviewModel File: lib/models/effect_preview_model.dart - EffectPreviewModel - 46 LOC - - - - - - 18 LOC in Method: EffectPreviewModel.start() - -File: lib/models/effect_preview_model.dart - - - start - 18 - - - - - - - - 11 LOC in Method: EffectPreviewModel.clear() - -File: lib/models/effect_preview_model.dart - - - clear - 11 - - + EffectPreviewModel + 46 LOC - - - - + + + + 43 LOC File: lib/models/canvas_resize.dart - canvas_resize.dart - 43 LOC + canvas_resize.dart + 43 LOC - - - - + + + + 43 LOC in Class: <...> File: lib/models/canvas_resize.dart - <...> - 43 LOC + <...> + 43 LOC - - - - + + + + 25 LOC in Function: anchorFactors() File: lib/models/canvas_resize.dart - - anchorFactors - 25 + + anchorFactors + 25 - - - - + + + + 18 LOC in Function: anchorTranslate() File: lib/models/canvas_resize.dart - - anchorTranslate - 18 + + anchorTranslate + 18 - - - - - 30 LOC File: lib/models/effect_labels.dart + + + + + 35 LOC File: lib/models/tool_family.dart - effect_labels.dart - 30 LOC + tool_family.dart + 35 LOC - - - - - 30 LOC in Class: <...> + <rect x="2397.2453518067045" y="1864.699684704417" width="50.226102423384106" height="44.30031529558292" rx="5.00" ry="5.00" fill="#9eb89a" fill-opacity="0.45"/> + <rect x="2397.2453518067045" y="1864.699684704417" width="50.226102423384106" height="44.30031529558292" rx="5.00" ry="5.00" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2397.2453518067045" y="1864.699684704417" width="50.226102423384106" height="44.30031529558292" rx="5.00" ry="5.00" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8" stroke-dasharray="6,4"/> + <rect x="2397.2453518067045" y="1864.699684704417" width="50.226102423384106" height="44.30031529558292" rx="5.00" ry="5.00" fill="transparent" pointer-events="all"> + <title>35 LOC in Class: <...> -File: lib/models/effect_labels.dart +File: lib/models/tool_family.dart - <...> - 30 LOC + <...> + 35 LOC - - - - - 30 LOC in Function: effectLabel() + <rect x="2405.2453518067045" y="1888.699684704417" width="34.226102423384106" height="12.30031529558292" fill="#2e8b57" fill-opacity="0.72"/> + <rect x="2405.2453518067045" y="1888.699684704417" width="34.226102423384106" height="12.30031529558292" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2405.2453518067045" y="1888.699684704417" width="34.226102423384106" height="12.30031529558292" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2405.2453518067045" y="1888.699684704417" width="34.226102423384106" height="12.30031529558292" fill="transparent" pointer-events="all"> + <title>35 LOC in Function: toolLabel() -File: lib/models/effect_labels.dart +File: lib/models/tool_family.dart - - effectLabel - 30 + + toolLabel + 35 - - - - + + + + + 29 LOC File: lib/models/effect_brush_model.dart + + effect_brush_model.dart + 29 LOC + + + + + + 29 LOC in Class: EffectBrushModel + +File: lib/models/effect_brush_model.dart + + EffectBrushModel + 29 LOC + + + + + + + + 28 LOC File: lib/models/effect_labels.dart + + effect_labels.dart + 28 LOC + + + + + + 28 LOC in Class: <...> + +File: lib/models/effect_labels.dart + + <...> + 28 LOC + + + + + + + 27 LOC File: lib/models/image_placement_layer_restore_state.dart - image_placement_layer_restore_state.dart - 27 LOC + image_placement_layer_restore_state.dart + 27 LOC - - - - + + + + 27 LOC in Class: ImagePlacementLayerRestoreState File: lib/models/image_placement_layer_restore_state.dart - ImagePlacementLayerRestoreState - 27 LOC + ImagePlacementLayerRestoreState + 27 LOC + + + + + + + + 24 LOC File: lib/models/tool_descriptor.dart + + tool_descriptor.dart + 24 LOC - - - - - 10 LOC in Method: ImagePlacementLayerRestoreState.ImagePlacementLayerRestoreState() + <rect x="2545.797485074714" y="1825.8422173108456" width="42.647605181609585" height="16.968944734858738" rx="5.00" ry="5.00" fill="#9eb89a" fill-opacity="0.78"/> + <rect x="2545.797485074714" y="1825.8422173108456" width="42.647605181609585" height="16.968944734858738" rx="5.00" ry="5.00" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2545.797485074714" y="1825.8422173108456" width="42.647605181609585" height="16.968944734858738" rx="5.00" ry="5.00" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2545.797485074714" y="1825.8422173108456" width="42.647605181609585" height="16.968944734858738" rx="5.00" ry="5.00" fill="transparent" pointer-events="all"> + <title>19 LOC in Class: ToolDescriptor -File: lib/models/image_placement_layer_restore_state.dart +File: lib/models/tool_descriptor.dart - - ImagePlacementLayerRestoreState - 10 - + ToolDescriptor + 19 LOC + + + + + + 5 LOC in Class: <...> + +File: lib/models/tool_descriptor.dart + + <...> + 5 LOC - - - - + + + + 21 LOC File: lib/models/menu_model.dart - menu_model.dart - 21 LOC + menu_model.dart + 21 LOC - - - - + + + + 21 LOC in Class: MenuIds File: lib/models/menu_model.dart - MenuIds - 21 LOC + MenuIds + 21 LOC - - - - + + + + 16 LOC File: lib/models/halftone_fill.dart - halftone_fill.dart - 16 LOC + halftone_fill.dart + 16 LOC - - - - + + + + 16 LOC in Class: HalftoneFill File: lib/models/halftone_fill.dart - HalftoneFill - 16 LOC + HalftoneFill + 16 LOC - - - - + + + + 14 LOC File: lib/models/brush_style.dart - brush_style.dart - 14 LOC + brush_style.dart + 14 LOC - - - - + + + + 14 LOC in Class: MyBrush File: lib/models/brush_style.dart - MyBrush - 14 LOC + MyBrush + 14 LOC - - - - + + + + 9 LOC File: lib/models/visible_model.dart - visible_model.dart - 9 LOC - - - - - - 9 LOC in Class: VisibleModel - -File: lib/models/visible_model.dart - - VisibleModel - 9 LOC - + visible_model.dart + 9 LOC - - - - + + + + 5 LOC File: lib/models/version.dart - version.dart - 5 LOC + version.dart + 5 LOC - - - - + + + + 1 LOC File: lib/models/app_icon_enum.dart - app_icon_enum.dart - 1 LOC + app_icon_enum.dart + 1 LOC - - - - + + + + 828 LOC File: lib/shell_top_bar.dart - shell_top_bar.dart - 828 LOC + shell_top_bar.dart + 828 LOC - - - - + + + + 743 LOC in Class: <...> File: lib/shell_top_bar.dart - <...> - 743 LOC + <...> + 743 LOC - - - - + + + + 16 LOC in Function: _buildDesktopShellCycleButton() File: lib/shell_top_bar.dart - - _buildDesktopShellCycleButton - 16 + + _buildDesktopShellCycleButton + 16 - - - - + + + + 9 LOC in Function: _desktopShellCycleIcon() File: lib/shell_top_bar.dart - - _desktopShellCycleIcon - 9 + + _desktopShellCycleIcon + 9 - - - - + + + + 13 LOC in Function: _cycleDesktopShellState() File: lib/shell_top_bar.dart - - _cycleDesktopShellState - 13 + + _cycleDesktopShellState + 13 - - - - + + + + 73 LOC in Function: _buildResponsiveToolbarActions() File: lib/shell_top_bar.dart - - _buildResponsiveToolbarActions - 73 + + _buildResponsiveToolbarActions + 73 - - - - + + + + 14 LOC in Function: _buildResponsiveToolbarGroupWidget() File: lib/shell_top_bar.dart - - _buildResponsiveToolbarGroupWidget - 14 + + _buildResponsiveToolbarGroupWidget + 14 - - - - + + + + 102 LOC in Function: _buildPrimaryToolbarActionEntries() File: lib/shell_top_bar.dart - - _buildPrimaryToolbarActionEntries - 102 + + _buildPrimaryToolbarActionEntries + 102 - - - - + + + + 15 LOC in Function: _buildWideDesktopToolbarActions() File: lib/shell_top_bar.dart - - _buildWideDesktopToolbarActions - 15 + + _buildWideDesktopToolbarActions + 15 - - - - + + + + 14 LOC in Function: _filterToolbarActionsForViewport() File: lib/shell_top_bar.dart - - _filterToolbarActionsForViewport - 14 + + _filterToolbarActionsForViewport + 14 - - - - + + + + 118 LOC in Function: _buildResponsiveToolbarActionEntries() File: lib/shell_top_bar.dart - - _buildResponsiveToolbarActionEntries - 118 + + _buildResponsiveToolbarActionEntries + 118 - - - - + + + + 14 LOC in Function: _estimateToolbarActionWidth() File: lib/shell_top_bar.dart - - _estimateToolbarActionWidth - 14 + + _estimateToolbarActionWidth + 14 - - - - + + + + 10 LOC in Function: _indexOfLeastImportantAction() File: lib/shell_top_bar.dart - - _indexOfLeastImportantAction - 10 + + _indexOfLeastImportantAction + 10 - - - - + + + + 147 LOC in Function: buildCanvasToolbarActions() File: lib/shell_top_bar.dart - - buildCanvasToolbarActions - 147 + + buildCanvasToolbarActions + 147 - - - - + + + + 16 LOC in Function: _buildToolbarButtonGroup() File: lib/shell_top_bar.dart - - _buildToolbarButtonGroup - 16 + + _buildToolbarButtonGroup + 16 - - - - + + + + 16 LOC in Function: _buildSmallScreenShellToggleButton() File: lib/shell_top_bar.dart - - _buildSmallScreenShellToggleButton - 16 + + _buildSmallScreenShellToggleButton + 16 - - - - + + + + 23 LOC in Function: _buildSelectorToggleButton() File: lib/shell_top_bar.dart - - _buildSelectorToggleButton - 23 + + _buildSelectorToggleButton + 23 - - - - + + + + 25 LOC in Function: _buildUndoRedoButton() File: lib/shell_top_bar.dart - - _buildUndoRedoButton - 25 + + _buildUndoRedoButton + 25 - - - - + + + + 20 LOC in Function: _buildHistoryButton() File: lib/shell_top_bar.dart - - _buildHistoryButton - 20 + + _buildHistoryButton + 20 - - - - + + + + 26 LOC in Function: _buildZoomButton() File: lib/shell_top_bar.dart - - _buildZoomButton - 26 + + _buildZoomButton + 26 - - - - + + + + 33 LOC in Function: _buildCenterAndDimensionButton() File: lib/shell_top_bar.dart - - _buildCenterAndDimensionButton - 33 + + _buildCenterAndDimensionButton + 33 - - - - + + + + 10 LOC in Function: _toggleSmallScreenShellState() File: lib/shell_top_bar.dart - - _toggleSmallScreenShellState - 10 + + _toggleSmallScreenShellState + 10 - - - - + + + + 29 LOC in Function: shellTopBarPreview() File: lib/shell_top_bar.dart - - shellTopBarPreview - 29 + + shellTopBarPreview + 29 - - - - + + + + 75 LOC in Class: ShellTopBar File: lib/shell_top_bar.dart - ShellTopBar - 75 LOC + ShellTopBar + 75 LOC - - - - + + + + 5 LOC in Method: ShellTopBar.ShellTopBar() File: lib/shell_top_bar.dart - - ShellTopBar - 5 + + ShellTopBar + 5 - - - - + + + + 63 LOC in Method: ShellTopBar.build() File: lib/shell_top_bar.dart - - build - 63 + + build + 63 - - - - + + + + 10 LOC in Class: _ToolbarActionEntry File: lib/shell_top_bar.dart - _ToolbarActionEntry - 10 LOC + _ToolbarActionEntry + 10 LOC - - - - + + + + 5 LOC in Method: _ToolbarActionEntry._ToolbarActionEntry() File: lib/shell_top_bar.dart - - _ToolbarActionEntry - 5 + + _ToolbarActionEntry + 5 - - - - - 708 LOC Folder: lib/constants + + + + + 719 LOC Folder: lib/constants - constants - 708 LOC + constants + 719 LOC - - - - - 80 LOC File: lib/constants/keys.dart + + + + + 83 LOC File: lib/constants/keys.dart - keys.dart - 80 LOC + keys.dart + 83 LOC - - - - - 80 LOC in Class: Keys + <rect x="2937.6867457768694" y="1076.009822415924" width="63.686695710385536" height="111.52299580541202" rx="5.00" ry="5.00" fill="#9eb89a" fill-opacity="0.78"/> + <rect x="2937.6867457768694" y="1076.009822415924" width="63.686695710385536" height="111.52299580541202" rx="5.00" ry="5.00" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2937.6867457768694" y="1076.009822415924" width="63.686695710385536" height="111.52299580541202" rx="5.00" ry="5.00" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2937.6867457768694" y="1076.009822415924" width="63.686695710385536" height="111.52299580541202" rx="5.00" ry="5.00" fill="transparent" pointer-events="all"> + <title>83 LOC in Class: Keys File: lib/constants/keys.dart - Keys - 80 LOC + Keys + 83 LOC - - - - + + + + 77 LOC File: lib/constants/app_colors.dart - app_colors.dart - 77 LOC + app_colors.dart + 77 LOC - - - - + + + + 77 LOC in Class: AppColors File: lib/constants/app_colors.dart - AppColors - 77 LOC + AppColors + 77 LOC - - - - - 71 LOC File: lib/constants/app_effects.dart + + + + + 73 LOC File: lib/constants/app_interaction.dart - app_effects.dart - 71 LOC + app_interaction.dart + 73 LOC - - - - - 71 LOC in Class: AppEffects + <rect x="3095.155074857131" y="1076.009822415924" width="53.84492514286919" height="111.52299580541202" rx="5.00" ry="5.00" fill="#9eb89a" fill-opacity="0.78"/> + <rect x="3095.155074857131" y="1076.009822415924" width="53.84492514286919" height="111.52299580541202" rx="5.00" ry="5.00" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="3095.155074857131" y="1076.009822415924" width="53.84492514286919" height="111.52299580541202" rx="5.00" ry="5.00" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="3095.155074857131" y="1076.009822415924" width="53.84492514286919" height="111.52299580541202" rx="5.00" ry="5.00" fill="transparent" pointer-events="all"> + <title>73 LOC in Class: AppInteraction -File: lib/constants/app_effects.dart +File: lib/constants/app_interaction.dart - AppEffects - 71 LOC + AppInteraction + 73 LOC - - - - - 70 LOC File: lib/constants/app_interaction.dart + + + + + 71 LOC File: lib/constants/app_effects.dart - app_interaction.dart - 70 LOC + app_effects.dart + 71 LOC - - - - - 70 LOC in Class: AppInteraction + <rect x="2937.6867457768694" y="1221.532818221336" width="100.8411755462939" height="51.56502328472726" rx="5.00" ry="5.00" fill="#9eb89a" fill-opacity="0.78"/> + <rect x="2937.6867457768694" y="1221.532818221336" width="100.8411755462939" height="51.56502328472726" rx="5.00" ry="5.00" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2937.6867457768694" y="1221.532818221336" width="100.8411755462939" height="51.56502328472726" rx="5.00" ry="5.00" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2937.6867457768694" y="1221.532818221336" width="100.8411755462939" height="51.56502328472726" rx="5.00" ry="5.00" fill="transparent" pointer-events="all"> + <title>71 LOC in Class: AppEffects -File: lib/constants/app_interaction.dart +File: lib/constants/app_effects.dart - AppInteraction - 70 LOC + AppEffects + 71 LOC - - - - + + + + 66 LOC File: lib/constants/app_layout.dart - app_layout.dart - 66 LOC + app_layout.dart + 66 LOC - - - - + + + + 66 LOC in Class: AppLayout File: lib/constants/app_layout.dart - AppLayout - 66 LOC + AppLayout + 66 LOC - - - - + + + + 53 LOC File: lib/constants/app_interaction_profiles.dart - app_interaction_profiles.dart - 53 LOC + app_interaction_profiles.dart + 53 LOC - - - - + + + + 53 LOC in Class: AppInteractionProfiles File: lib/constants/app_interaction_profiles.dart - AppInteractionProfiles - 53 LOC + AppInteractionProfiles + 53 LOC - - - - + + + + 48 LOC File: lib/constants/app_text_style.dart - app_text_style.dart - 48 LOC + app_text_style.dart + 48 LOC - - - - + + + + 48 LOC in Class: AppTextStyle File: lib/constants/app_text_style.dart - AppTextStyle - 48 LOC + AppTextStyle + 48 LOC - - - - - 44 LOC File: lib/constants/app_math.dart + + + + + 47 LOC File: lib/constants/app_math.dart - app_math.dart - 44 LOC + app_math.dart + 47 LOC - - - - - 44 LOC in Class: AppMath + <rect x="2937.6867457768694" y="1430.7787037123846" width="53.38892884421945" height="60.29135039491818" rx="5.00" ry="5.00" fill="#9eb89a" fill-opacity="0.78"/> + <rect x="2937.6867457768694" y="1430.7787037123846" width="53.38892884421945" height="60.29135039491818" rx="5.00" ry="5.00" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="2937.6867457768694" y="1430.7787037123846" width="53.38892884421945" height="60.29135039491818" rx="5.00" ry="5.00" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="2937.6867457768694" y="1430.7787037123846" width="53.38892884421945" height="60.29135039491818" rx="5.00" ry="5.00" fill="transparent" pointer-events="all"> + <title>47 LOC in Class: AppMath File: lib/constants/app_math.dart - AppMath - 44 LOC + AppMath + 47 LOC - - - - + + + + 30 LOC File: lib/constants/app_limits.dart - app_limits.dart - 30 LOC + app_limits.dart + 30 LOC - - - - + + + + 30 LOC in Class: AppLimits File: lib/constants/app_limits.dart - AppLimits - 30 LOC + AppLimits + 30 LOC - - - - - 22 LOC File: lib/constants/constants.dart - - constants.dart - 22 LOC - - - - - - - 21 LOC File: lib/constants/app_defaults.dart + + + + + 23 LOC File: lib/constants/app_defaults.dart - app_defaults.dart - 21 LOC + app_defaults.dart + 23 LOC - - - - - 21 LOC in Class: AppDefaults + <rect x="3054.643076011016" y="1307.0978415060633" width="61.000962179754154" height="7.696568804291687" rx="5.00" ry="5.00" fill="#9eb89a" fill-opacity="0.78"/> + <rect x="3054.643076011016" y="1307.0978415060633" width="61.000962179754154" height="7.696568804291687" rx="5.00" ry="5.00" fill="url(#codeSizeInnerTileDiagonalGradient)"/> + <rect x="3054.643076011016" y="1307.0978415060633" width="61.000962179754154" height="7.696568804291687" rx="5.00" ry="5.00" fill="none" stroke="#ffffff" stroke-opacity="0.45" stroke-width="0.8"/> + <rect x="3054.643076011016" y="1307.0978415060633" width="61.000962179754154" height="7.696568804291687" rx="5.00" ry="5.00" fill="transparent" pointer-events="all"> + <title>23 LOC in Class: AppDefaults File: lib/constants/app_defaults.dart - AppDefaults - 21 LOC + AppDefaults + 23 LOC - - - - + + + + + 22 LOC File: lib/constants/constants.dart + + constants.dart + 22 LOC + + + + + + 19 LOC File: lib/constants/interaction_layout_profile.dart - interaction_layout_profile.dart - 19 LOC + interaction_layout_profile.dart + 19 LOC - - - - + + + + 19 LOC in Class: InteractionLayoutProfile File: lib/constants/interaction_layout_profile.dart - InteractionLayoutProfile - 19 LOC + InteractionLayoutProfile + 19 LOC - - - - + + + + 15 LOC File: lib/constants/app_flood_fill.dart - app_flood_fill.dart - 15 LOC + app_flood_fill.dart + 15 LOC - - - - + + + + 15 LOC in Class: AppFloodFill File: lib/constants/app_flood_fill.dart - AppFloodFill - 15 LOC + AppFloodFill + 15 LOC - - - - + + + + 14 LOC File: lib/constants/app_visual.dart - app_visual.dart - 14 LOC + app_visual.dart + 14 LOC - - - - + + + + 14 LOC in Class: AppVisual File: lib/constants/app_visual.dart - AppVisual - 14 LOC + AppVisual + 14 LOC - - - - + + + + 12 LOC File: lib/constants/app_stroke.dart - app_stroke.dart - 12 LOC + app_stroke.dart + 12 LOC - - - - + + + + 12 LOC in Class: AppStroke File: lib/constants/app_stroke.dart - AppStroke - 12 LOC + AppStroke + 12 LOC - - - - + + + + 12 LOC File: lib/constants/app_strings.dart - app_strings.dart - 12 LOC + app_strings.dart + 12 LOC - - - - + + + + 11 LOC File: lib/constants/file_extensions.dart - file_extensions.dart - 11 LOC + file_extensions.dart + 11 LOC - - - - + + + + 11 LOC in Class: FileExtensions File: lib/constants/file_extensions.dart - FileExtensions - 11 LOC + FileExtensions + 11 LOC - - - - + + + + 9 LOC File: lib/constants/app_font_size.dart - app_font_size.dart - 9 LOC + app_font_size.dart + 9 LOC - - - - + + + + 9 LOC in Class: AppFontSize File: lib/constants/app_font_size.dart - AppFontSize - 9 LOC + AppFontSize + 9 LOC - - - - + + + + 9 LOC File: lib/constants/app_spacing.dart - app_spacing.dart - 9 LOC + app_spacing.dart + 9 LOC - - - - + + + + 8 LOC File: lib/constants/app_halftone.dart - app_halftone.dart - 8 LOC + app_halftone.dart + 8 LOC - - - - + + + + 6 LOC File: lib/constants/interaction_input_modality.dart - interaction_input_modality.dart - 6 LOC + interaction_input_modality.dart + 6 LOC - - - - + + + + 6 LOC File: lib/constants/app_radius.dart - app_radius.dart - 6 LOC + app_radius.dart + 6 LOC - - - - + + + + 5 LOC File: lib/constants/app_config.dart - app_config.dart - 5 LOC + app_config.dart + 5 LOC - - - - + + + + 300 LOC File: lib/main.dart - main.dart - 300 LOC + main.dart + 300 LOC - - - - + + + + 177 LOC in Class: <...> File: lib/main.dart - <...> - 177 LOC + <...> + 177 LOC - - - - + + + + 45 LOC in Function: main() File: lib/main.dart - - main - 45 + + main + 45 - - - - + + + + 8 LOC in Function: _queueOrHandlePlatformFile() File: lib/main.dart - - _queueOrHandlePlatformFile - 8 + + _queueOrHandlePlatformFile + 8 - - - - + + + + 29 LOC in Function: _scheduleQueuedPlatformFileHandling() File: lib/main.dart - - _scheduleQueuedPlatformFileHandling - 29 + + _scheduleQueuedPlatformFileHandling + 29 - - - - + + + + 14 LOC in Function: _consumePlatformFile() File: lib/main.dart - - _consumePlatformFile - 14 + + _consumePlatformFile + 14 - - - - + + + + 9 LOC in Function: _clearPendingPlatformFile() File: lib/main.dart - - _clearPendingPlatformFile - 9 + + _clearPendingPlatformFile + 9 - - - - + + + + 14 LOC in Function: handlePlatformEditMethodCall() File: lib/main.dart - - handlePlatformEditMethodCall - 14 + + handlePlatformEditMethodCall + 14 - - - - + + + + 14 LOC in Function: _normalizePlatformFilePath() File: lib/main.dart - - _normalizePlatformFilePath - 14 + + _normalizePlatformFilePath + 14 - - - - + + + + 44 LOC in Function: _handleFileOpened() File: lib/main.dart - - _handleFileOpened - 44 + + _handleFileOpened + 44 - - - - + + + + 123 LOC in Class: MyApp File: lib/main.dart - MyApp - 123 LOC + MyApp + 123 LOC - - - - + + + + 2 LOC in Method: MyApp.MyApp() File: lib/main.dart - - MyApp - 2 + + MyApp + 2 - - - - + + + + 93 LOC in Method: MyApp.build() File: lib/main.dart - - build - 93 + + build + 93 - - - - + + + + 289 LOC File: lib/shell_top_bar_responsive_groups.dart - shell_top_bar_responsive_groups.dart - 289 LOC + shell_top_bar_responsive_groups.dart + 289 LOC - - - - + + + + 250 LOC in Class: <...> File: lib/shell_top_bar_responsive_groups.dart - <...> - 250 LOC + <...> + 250 LOC - - - - + + + + 134 LOC in Function: _buildResponsiveToolbarActionGroups() File: lib/shell_top_bar_responsive_groups.dart - - _buildResponsiveToolbarActionGroups - 134 + + _buildResponsiveToolbarActionGroups + 134 - - - - + + + + 51 LOC in Function: _selectResponsiveToolbarActionGroups() File: lib/shell_top_bar_responsive_groups.dart - - _selectResponsiveToolbarActionGroups - 51 + + _selectResponsiveToolbarActionGroups + 51 - - - - + + + + 25 LOC in Function: _estimateToolbarGroupsWidth() File: lib/shell_top_bar_responsive_groups.dart - - _estimateToolbarGroupsWidth - 25 + + _estimateToolbarGroupsWidth + 25 - - - - + + + + 14 LOC in Function: _estimateToolbarGroupWidth() File: lib/shell_top_bar_responsive_groups.dart - - _estimateToolbarGroupWidth - 14 + + _estimateToolbarGroupWidth + 14 - - - - + + + + 26 LOC in Function: _findLeastImportantResponsiveGroupAction() File: lib/shell_top_bar_responsive_groups.dart - - _findLeastImportantResponsiveGroupAction - 26 + + _findLeastImportantResponsiveGroupAction + 26 - - - - + + + + 15 LOC in Class: _ToolbarActionGroup File: lib/shell_top_bar_responsive_groups.dart - _ToolbarActionGroup - 15 LOC + _ToolbarActionGroup + 15 LOC - - - - + + + + 13 LOC in Class: _ResolvedToolbarActionGroup File: lib/shell_top_bar_responsive_groups.dart - _ResolvedToolbarActionGroup - 13 LOC + _ResolvedToolbarActionGroup + 13 LOC - - - - + + + + 11 LOC in Class: _ToolbarActionRemovalCandidate File: lib/shell_top_bar_responsive_groups.dart - _ToolbarActionRemovalCandidate - 11 LOC + _ToolbarActionRemovalCandidate + 11 LOC - - - - + + + + 275 LOC Folder: lib/pages - pages - 275 LOC + pages + 275 LOC - - - - + + + + 140 LOC File: lib/pages/platforms_page.dart - platforms_page.dart - 140 LOC + platforms_page.dart + 140 LOC - - - - + + + + 140 LOC in Class: PlatformsPage File: lib/pages/platforms_page.dart - PlatformsPage - 140 LOC + PlatformsPage + 140 LOC - - - - + + + + 84 LOC in Method: PlatformsPage.build() File: lib/pages/platforms_page.dart - - build - 84 + + build + 84 - - - - + + + + 52 LOC in Method: PlatformsPage.platformItem() File: lib/pages/platforms_page.dart - - platformItem - 52 + + platformItem + 52 - - - - + + + + 135 LOC File: lib/pages/settings_page.dart - settings_page.dart - 135 LOC + settings_page.dart + 135 LOC - - - - + + + + 129 LOC in Class: _SettingsPageState File: lib/pages/settings_page.dart - _SettingsPageState - 129 LOC + _SettingsPageState + 129 LOC - - - - + + + + 123 LOC in Method: _SettingsPageState.build() File: lib/pages/settings_page.dart - - build - 123 + + build + 123 - - - - + + + + 6 LOC in Class: SettingsPage File: lib/pages/settings_page.dart - SettingsPage - 6 LOC + SettingsPage + 6 LOC - - - - + + + + 273 LOC Folder: lib/recovery - recovery - 273 LOC + recovery + 273 LOC - - - - + + + + 187 LOC File: lib/recovery/draft_recovery_controller.dart - draft_recovery_controller.dart - 187 LOC + draft_recovery_controller.dart + 187 LOC - - - - + + + + 175 LOC in Class: DraftRecoveryController File: lib/recovery/draft_recovery_controller.dart - DraftRecoveryController - 175 LOC + DraftRecoveryController + 175 LOC - - - - + + + + 13 LOC in Method: DraftRecoveryController.DraftRecoveryController() File: lib/recovery/draft_recovery_controller.dart - - DraftRecoveryController - 13 + + DraftRecoveryController + 13 - - - - + + + + 10 LOC in Method: DraftRecoveryController.initialize() File: lib/recovery/draft_recovery_controller.dart - - initialize - 10 + + initialize + 10 - - - - + + + + 12 LOC in Method: DraftRecoveryController.dispose() File: lib/recovery/draft_recovery_controller.dart - - dispose - 12 + + dispose + 12 - - - - + + + + 9 LOC in Method: DraftRecoveryController.didChangeAppLifecycleState() File: lib/recovery/draft_recovery_controller.dart - - didChangeAppLifecycleState - 9 + + didChangeAppLifecycleState + 9 - - - - + + + + 6 LOC in Method: DraftRecoveryController.flushNow() File: lib/recovery/draft_recovery_controller.dart - - flushNow - 6 + + flushNow + 6 - - - - + + + + 24 LOC in Method: DraftRecoveryController.restoreDraftIfAvailable() File: lib/recovery/draft_recovery_controller.dart - - restoreDraftIfAvailable - 24 + + restoreDraftIfAvailable + 24 - - - - + + + + 28 LOC in Method: DraftRecoveryController._restoreDraft() File: lib/recovery/draft_recovery_controller.dart - - _restoreDraft - 28 + + _restoreDraft + 28 - - - - + + + + 6 LOC in Method: DraftRecoveryController.discardDraft() File: lib/recovery/draft_recovery_controller.dart - - discardDraft - 6 + + discardDraft + 6 - - - - + + + + 14 LOC in Method: DraftRecoveryController._handleLayersChanged() File: lib/recovery/draft_recovery_controller.dart - - _handleLayersChanged - 14 + + _handleLayersChanged + 14 - - - - + + + + 29 LOC in Method: DraftRecoveryController._reconcileDraft() File: lib/recovery/draft_recovery_controller.dart - - _reconcileDraft - 29 + + _reconcileDraft + 29 - - - - + + + + 7 LOC in Method: DraftRecoveryController._currentSourceFilePath() File: lib/recovery/draft_recovery_controller.dart - - _currentSourceFilePath - 7 + + _currentSourceFilePath + 7 - - - - + + + + 12 LOC in Class: <...> File: lib/recovery/draft_recovery_controller.dart - <...> - 12 LOC + <...> + 12 LOC - - - - + + + + 56 LOC File: lib/recovery/draft_recovery_storage_io.dart - draft_recovery_storage_io.dart - 56 LOC + draft_recovery_storage_io.dart + 56 LOC - - - - + + + + 52 LOC in Class: _IoDraftRecoveryStorage File: lib/recovery/draft_recovery_storage_io.dart - _IoDraftRecoveryStorage - 52 LOC + _IoDraftRecoveryStorage + 52 LOC - - - - + + + + 4 LOC in Class: <...> File: lib/recovery/draft_recovery_storage_io.dart - <...> - 4 LOC + <...> + 4 LOC - - - - + + + + 19 LOC File: lib/recovery/draft_recovery_storage_web.dart - draft_recovery_storage_web.dart - 19 LOC + draft_recovery_storage_web.dart + 19 LOC - - - - + + + + 15 LOC in Class: _WebDraftRecoveryStorage File: lib/recovery/draft_recovery_storage_web.dart - _WebDraftRecoveryStorage - 15 LOC + _WebDraftRecoveryStorage + 15 LOC - - - - + + + + 4 LOC in Class: <...> File: lib/recovery/draft_recovery_storage_web.dart - <...> - 4 LOC + <...> + 4 LOC - - - - + + + + 11 LOC File: lib/recovery/draft_recovery_storage.dart - draft_recovery_storage.dart - 11 LOC + draft_recovery_storage.dart + 11 LOC - - - - + + + + 185 LOC File: lib/main_screen.dart - main_screen.dart - 185 LOC + main_screen.dart + 185 LOC - - - - + + + + 185 LOC in Class: MainScreen File: lib/main_screen.dart - MainScreen - 185 LOC + MainScreen + 185 LOC - - - - + + + + 2 LOC in Method: MainScreen.MainScreen() File: lib/main_screen.dart - - MainScreen - 2 + + MainScreen + 2 - - - - + + + + 75 LOC in Method: MainScreen.build() File: lib/main_screen.dart - - build - 75 + + build + 75 - - - - + + + + 17 LOC in Method: MainScreen._buildMainContent() File: lib/main_screen.dart - - _buildMainContent - 17 + + _buildMainContent + 17 - - - - + + + + 29 LOC in Method: MainScreen._buildMidToLargeDevices() File: lib/main_screen.dart - - _buildMidToLargeDevices - 29 + + _buildMidToLargeDevices + 29 - - - - + + + + 36 LOC in Method: MainScreen._buildMobilePhoneLayout() File: lib/main_screen.dart - - _buildMobilePhoneLayout - 36 + + _buildMobilePhoneLayout + 36 - - - - + + + + 19 LOC in Method: MainScreen._handleDroppedFiles() File: lib/main_screen.dart - - _handleDroppedFiles - 19 + + _handleDroppedFiles + 19 diff --git a/fcheck_packages.svg b/fcheck_packages.svg index c17e1f70..bb50057a 100644 --- a/fcheck_packages.svg +++ b/fcheck_packages.svg @@ -347,7 +347,7 @@ font-weight: 900; } -fpaint v1.8.9+1 +fpaint v1.9.0+1 Dart >=3.12.0 Flutter >=3.44.0 dependencies (18 items) diff --git a/lib/constants/app_defaults.dart b/lib/constants/app_defaults.dart index 5ba4515e..f04ebe07 100644 --- a/lib/constants/app_defaults.dart +++ b/lib/constants/app_defaults.dart @@ -5,7 +5,9 @@ class AppDefaults { static const double brushSize = 5.0; static const double smudgeIntensity = AppInteraction.pixelBrushDefaultIntensity; static const double blurBrushIntensity = AppInteraction.pixelBrushDefaultIntensity; - static const int tolerance = 50; + // Starting raw tolerance for the Edge Detection wand's sample tap; the user + // then drags on the canvas to grow/shrink the selection from there. + static const int tolerance = 6; static const bool useApplePencil = false; static const bool keepSaveBackups = false; static const Duration brushSizePreviewDuration = Duration(milliseconds: 700); diff --git a/lib/constants/app_interaction.dart b/lib/constants/app_interaction.dart index 54c77192..b5b129d0 100644 --- a/lib/constants/app_interaction.dart +++ b/lib/constants/app_interaction.dart @@ -5,6 +5,10 @@ class AppInteraction { static const double multiTouchScaleThreshold = 50.0; static const Duration selectionDoubleTapTimeout = Duration(milliseconds: 300); static const double selectionDoubleTapSlop = 24.0; + + /// Horizontal screen pixels dragged per 1 unit of Edge Detection wand + /// tolerance during the tap-to-sample, drag-to-adjust selection gesture. + static const double wandToleranceDragPixelsPerUnit = 8.0; static const double linearFillHandleOffset = 40.0; static const double radialFillHandleOffset = 50.0; static const double magnifierScale = 6.0; diff --git a/lib/constants/app_math.dart b/lib/constants/app_math.dart index a42adef7..c4753295 100644 --- a/lib/constants/app_math.dart +++ b/lib/constants/app_math.dart @@ -51,4 +51,8 @@ class AppMath { /// Scale percentage increment for scale snap haptic feedback. static const double scaleSnapInterval = 25.0; + + /// Raw-tolerance increment between haptic ticks while dragging the Edge + /// Detection wand tolerance. + static const int wandToleranceSnapInterval = 5; } diff --git a/lib/constants/keys.dart b/lib/constants/keys.dart index 0c7bda08..1910f851 100644 --- a/lib/constants/keys.dart +++ b/lib/constants/keys.dart @@ -61,6 +61,7 @@ class Keys { static const Key toolSelectorCopy = Key('tool-selector-copy'); static const Key toolSelectorCut = Key('tool-selector-cut'); + static const Key toolPanelTopColorsToggle = Key('tool-panel-top-colors-toggle'); static const Key toolPanelFillColor = Key('toolPanelFillColor'); static const Key toolPanelHalftoneDotColor = Key('toolPanelHalftoneDotColor'); static const Key toolPanelBrushColor1 = Key('toolPanelBrushColor1'); @@ -78,6 +79,8 @@ class Keys { static const Key effectIntensityDialogSlider = Key('effect-intensity-dialog-slider'); static const Key effectSizeSlider = Key('effect-size-slider'); static const Key effectSizeDialogSlider = Key('effect-size-dialog-slider'); + static const Key effectPaintStrengthSlider = Key('effect-paint-strength-slider'); + static const Key effectPaintSizeSlider = Key('effect-paint-size-slider'); static const Key toolBrushSizeTool = Key('tool-brush-size-tool'); static const Key toolBrushSizeButton = Key('tool-brush-size-button'); diff --git a/lib/files/file_ora.dart b/lib/files/file_ora.dart index 1deeb282..09826215 100644 --- a/lib/files/file_ora.dart +++ b/lib/files/file_ora.dart @@ -35,6 +35,7 @@ const String _oraAttrY = 'y'; const String _oraAttrCompositeOp = 'composite-op'; const String _oraAttrAlphaPreserve = 'alpha-preserve'; const String _oraAttrEditLocked = 'edit-locked'; +const String _oraAttrSelected = 'selected'; const String _oraVisibilityVisible = 'visible'; const String _oraVisibilityHidden = 'hidden'; const String _oraVisibilityInherit = 'inherit'; @@ -184,10 +185,14 @@ Future readOraFileFromBytes( final ui.Size canvasSize = _extractOraCanvasSize(xmlDoc); + LayerProvider? selectedLayer; await layers.replaceAll( canvasSize: canvasSize, - addLayers: () => importFromOraXml(archive, layers, xmlDoc), + addLayers: () async { + selectedLayer = await importFromOraXml(archive, layers, xmlDoc); + }, ); + _restoreSelectedLayer(layers, selectedLayer); } on OraFileException { rethrow; } catch (error, stackTrace) { @@ -217,7 +222,10 @@ ui.Size _extractOraCanvasSize(final XmlDocument xmlDoc) { } /// Imports image metadata and root stack information from an ORA XML document. -Future importFromOraXml( +/// +/// Returns the layer flagged as `selected` in the document, or null when no +/// layer carries the marker. +Future importFromOraXml( final Archive archive, final LayersProvider layers, final XmlDocument xmlDoc, @@ -239,31 +247,60 @@ Future importFromOraXml( ); final XmlElement? xmlElementTopStack = xmlElementImage.getElement(_oraElementStack); - await importStack(archive, layers, xmlElementTopStack); + return importStack(archive, layers, xmlElementTopStack); } /// Recursively imports a stack node and its child stacks and layers. -Future importStack( +/// +/// Returns the layer marked `selected` within this subtree, or null. +Future importStack( final Archive archive, final LayersProvider layers, final XmlElement? xmlElementTopStack, ) async { + LayerProvider? selectedLayer; if (xmlElementTopStack != null) { final String stackName = xmlElementTopStack.getAttribute(_oraAttrName) ?? ''; for (final XmlElement xmlElementChild in xmlElementTopStack.childElements) { if (xmlElementChild.localName == _oraElementStack) { - await importStack(archive, layers, xmlElementChild); + final LayerProvider? nested = await importStack(archive, layers, xmlElementChild); + if (nested != null) { + selectedLayer = nested; + } } else { if (xmlElementChild.localName == _oraElementLayer) { - await addLayer(archive, layers, stackName, xmlElementChild); + final LayerProvider addedLayer = await addLayer(archive, layers, stackName, xmlElementChild); + if (xmlElementChild.getAttribute(_oraAttrSelected) == _booleanTextTrue) { + selectedLayer = addedLayer; + } } } } } + return selectedLayer; +} + +/// Selects [selectedLayer] once the full stack has been rebuilt. +/// +/// [LayersProvider.replaceAll] resets the selection to the first layer, so the +/// restore must run after it completes. No-op when the layer is absent. +void _restoreSelectedLayer( + final LayersProvider layers, + final LayerProvider? selectedLayer, +) { + if (selectedLayer == null) { + return; + } + final int index = layers.getLayerIndex(selectedLayer); + if (index >= 0) { + layers.selectedLayerIndex = index; + } } /// Creates and configures a layer from an ORA layer XML node. -Future addLayer( +/// +/// Returns the created [LayerProvider] so callers can track the selection. +Future addLayer( final Archive archive, final LayersProvider layers, final String stackName, @@ -304,7 +341,7 @@ Future addLayer( offset: offset, ); } - return; + return newLayer; } /// Converts ORA visibility text into a layer-visible flag. @@ -566,6 +603,7 @@ Future> createOraArchive( _oraAttrOpacity: layer.opacity.toStringAsFixed(AppLimits.opacityPrecision), _oraAttrCompositeOp: _getOraCompositeOpFromBlendMode(layer.blendMode), _oraAttrEditLocked: layer.isLocked, + _oraAttrSelected: i == layers.selectedLayerIndex, }; if (_isOraLayerImageEmpty(layer)) { @@ -897,6 +935,7 @@ void buildLayers( for (final Map layerData in layersData) { final String? compositeOp = layerData[_oraAttrCompositeOp] as String?; final bool isLocked = layerData[_oraAttrEditLocked] as bool? ?? false; + final bool isSelected = layerData[_oraAttrSelected] as bool? ?? false; builder.element( _oraElementLayer, @@ -910,6 +949,9 @@ void buildLayers( if (isLocked) { builder.attribute(_oraAttrEditLocked, _booleanTextTrue); } + if (isSelected) { + builder.attribute(_oraAttrSelected, _booleanTextTrue); + } builder.attribute(_oraAttrSrc, layerData[_oraAttrSrc]); builder.attribute(_oraAttrX, layerData[_oraAttrX]); builder.attribute(_oraAttrY, layerData[_oraAttrY]); diff --git a/lib/files/file_tiff.dart b/lib/files/file_tiff.dart index cca6fc31..0ef63b6c 100644 --- a/lib/files/file_tiff.dart +++ b/lib/files/file_tiff.dart @@ -37,13 +37,17 @@ Future convertLayersToTiff(final LayersProvider layers) async { } /// Serializes layer properties into a JSON string for ImageDescription. -String _encodeLayerMetadata(final LayerProvider layer) { +String _encodeLayerMetadata( + final LayerProvider layer, { + required final bool selected, +}) { return jsonEncode({ TiffConstants.metaKeyName: layer.name, TiffConstants.metaKeyOpacity: layer.opacity, TiffConstants.metaKeyBlendMode: layer.blendMode.name, TiffConstants.metaKeyVisible: layer.isVisible, TiffConstants.metaKeyLocked: layer.isLocked, + TiffConstants.metaKeySelected: selected, }); } @@ -86,7 +90,7 @@ Future> _buildLayerFrames(final LayersProvider layers) async { frames.add( _LayerFrame( image: decoded, - description: _encodeLayerMetadata(layer), + description: _encodeLayerMetadata(layer, selected: i == layers.selectedLayerIndex), layerName: layer.name, offset: exportBounds.topLeft, ), @@ -153,14 +157,31 @@ Future readTiffFileFromBytes( ) async { final _DecodedTiffDocument decodedDocument = _decodeTiffDocument(bytes); + LayerProvider? selectedLayer; await layers.replaceAll( canvasSize: decodedDocument.size, addLayers: () async { for (final _DecodedTiffLayer layer in decodedDocument.layers) { - await _appendDecodedTiffLayer(layers, meta: layer.meta, image: layer.image, offset: layer.offset); + final LayerProvider appended = await _appendDecodedTiffLayer( + layers, + meta: layer.meta, + image: layer.image, + offset: layer.offset, + ); + if (layer.meta.selected) { + selectedLayer = appended; + } } }, ); + + // replaceAll resets the selection to the first layer, so restore afterwards. + if (selectedLayer != null) { + final int index = layers.getLayerIndex(selectedLayer!); + if (index >= 0) { + layers.selectedLayerIndex = index; + } + } } /// Decodes [bytes] into a validated TIFF document model ready to apply. @@ -459,7 +480,9 @@ int _unMultiplyChannel( } /// Appends one decoded TIFF layer to the canvas, preserving placement. -Future _appendDecodedTiffLayer( +/// +/// Returns the created [LayerProvider] so callers can restore the selection. +Future _appendDecodedTiffLayer( final LayersProvider layers, { required final _LayerMeta meta, required final img.Image image, @@ -478,6 +501,7 @@ Future _appendDecodedTiffLayer( imageToAdd: uiFrameImage, offset: offset, ); + return newLayer; } /// Parsed layer metadata extracted from a TIFF frame's ImageDescription tag. @@ -488,6 +512,7 @@ class _LayerMeta { required this.blendMode, required this.visible, required this.locked, + this.selected = false, }); final String name; @@ -495,6 +520,9 @@ class _LayerMeta { final ui.BlendMode blendMode; final bool visible; final bool locked; + + /// Whether this layer was the selected layer when the TIFF was written. + final bool selected; } /// Reads the ImageDescription tag from the [frameIndex]-th frame of @@ -548,6 +576,7 @@ _LayerMeta? _tryParseJsonMeta(final String description, final int frameIndex) { final double opacity = (map[TiffConstants.metaKeyOpacity] as num?)?.toDouble() ?? 1.0; final bool visible = (map[TiffConstants.metaKeyVisible] as bool?) ?? true; final bool locked = (map[TiffConstants.metaKeyLocked] as bool?) ?? false; + final bool selected = (map[TiffConstants.metaKeySelected] as bool?) ?? false; final String blendName = (map[TiffConstants.metaKeyBlendMode] as String?) ?? 'srcOver'; ui.BlendMode blendMode = ui.BlendMode.srcOver; @@ -564,6 +593,7 @@ _LayerMeta? _tryParseJsonMeta(final String description, final int frameIndex) { blendMode: blendMode, visible: visible, locked: locked, + selected: selected, ); } on FormatException { return null; diff --git a/lib/files/import_files.dart b/lib/files/import_files.dart index 465b0c6f..2d96b6ac 100644 --- a/lib/files/import_files.dart +++ b/lib/files/import_files.dart @@ -191,6 +191,7 @@ Future onFileOpen(final BuildContext context) async { context: context, layers: layers, path: path, + preferences: preferences, ); } shellProvider.loadedFileName = path; @@ -222,6 +223,7 @@ Future openFileFromPath({ required final BuildContext context, required final LayersProvider layers, required final String path, + final AppPreferences? preferences, }) async { if (!context.mounted) { return false; @@ -235,23 +237,29 @@ Future openFileFromPath({ if (isFileExtensionSupported(extension)) { try { if (extension == _fileExtensionOra) { + // ORA embeds the selected layer, restored inside the reader. await readImageFromFilePathOra(layers, path); return true; } else if (extension == _fileExtensionTif || extension == _fileExtensionTiff) { + // TIFF embeds the selected layer, restored inside the reader. await readTiffFromFilePath(layers, path); return true; } else if (extension == _fileExtensionHeic || extension == _fileExtensionAvif) { final String fileName = path.split(Platform.pathSeparator).last; - return await _readHeifFromFilePath( + final bool loaded = await _readHeifFromFilePath( layers, path, l10n, extension: extension, imageName: fileName, ); + _restoreFlatLayerSelection(preferences, layers, path, loaded: loaded); + return loaded; } else { final String fileName = path.split(Platform.pathSeparator).last; - return await readImageFromFilePath(layers, path, l10n, imageName: fileName); + final bool loaded = await readImageFromFilePath(layers, path, l10n, imageName: fileName); + _restoreFlatLayerSelection(preferences, layers, path, loaded: loaded); + return loaded; } } catch (e) { // General error catch, readImageFromFilePath might have already shown a SnackBar for decode errors @@ -265,6 +273,27 @@ Future openFileFromPath({ } } +/// Restores the remembered selection for a flat (non-layered) file. +/// +/// Flat formats cannot embed the selected layer, so it is looked up from +/// [preferences] by path. The index is clamped to the current layer range, +/// which in practice resolves to the base layer since flat files reload as a +/// single layer. No-op when the load failed or no preference is available. +void _restoreFlatLayerSelection( + final AppPreferences? preferences, + final LayersProvider layers, + final String path, { + required final bool loaded, +}) { + if (!loaded || preferences == null) { + return; + } + final int? index = preferences.lastSelectedLayerFor(path); + if (index != null && layers.isIndexInRange(index)) { + layers.selectedLayerIndex = index; + } +} + final List supportedImageFileExtensions = [ _fileExtensionOra, _fileExtensionPng, @@ -457,7 +486,7 @@ Future onFileDropped({ // Open the file, replacing the current content. if (context.mounted) { - await openFileFromPath(context: context, layers: layers, path: path); + await openFileFromPath(context: context, layers: layers, path: path, preferences: preferences); shellProvider.loadedFileName = path; layers.clearHasChanged(); shellProvider.requestCanvasFit(); diff --git a/lib/files/save.dart b/lib/files/save.dart index 7093267e..325f3924 100644 --- a/lib/files/save.dart +++ b/lib/files/save.dart @@ -28,6 +28,11 @@ enum SaveFileFormat { webp, heic; + /// Whether the format embeds individual layers (and can therefore store the + /// selected layer inside the file). Flat formats rely on a preference keyed + /// by file path instead. + bool get supportsLayers => this == SaveFileFormat.ora || this == SaveFileFormat.tiff; + /// Resolves a save format from a file name. static SaveFileFormat? fromFileName(final String fileName) { final String extension = fileName.split('.').last.toLowerCase(); @@ -143,6 +148,11 @@ Future saveFile( break; } + // Layered formats embed the selection; flat formats remember it per path. + if (!format.supportsLayers) { + await preferences.recordLastSelectedLayer(fileName, layers.selectedLayerIndex); + } + layers.clearHasChanged(); } on FileOperationException { rethrow; diff --git a/lib/files/tiff_constants.dart b/lib/files/tiff_constants.dart index 2ea531a4..de66fba6 100644 --- a/lib/files/tiff_constants.dart +++ b/lib/files/tiff_constants.dart @@ -267,6 +267,9 @@ class TiffConstants { /// JSON key for layer edit lock in the ImageDescription payload. static const String metaKeyLocked = 'locked'; + /// JSON key marking the last-selected layer in the ImageDescription payload. + static const String metaKeySelected = 'selected'; + /// Public `package:image` type string for ASCII TIFF values. static const String ifdValueTypeAscii = 'ascii'; } diff --git a/lib/helpers/image_effects.dart b/lib/helpers/image_effects.dart index 3221aaac..384d49af 100644 --- a/lib/helpers/image_effects.dart +++ b/lib/helpers/image_effects.dart @@ -12,7 +12,9 @@ Future _applyWithStrengthGuard( required final double strength, required final Future Function() apply, }) async { - if (strength <= AppEffects.minIntensity) { + // Skip only at exactly zero (no change). Negative strength is meaningful for + // bipolar effects (darken, reduce contrast, reverse hue), so it applies. + if (strength == AppEffects.minIntensity) { return image; } return apply(); diff --git a/lib/helpers/shortcuts_constants.dart b/lib/helpers/shortcuts_constants.dart index 97f4b684..f059e3e3 100644 --- a/lib/helpers/shortcuts_constants.dart +++ b/lib/helpers/shortcuts_constants.dart @@ -34,7 +34,7 @@ abstract class ShortcutActions { static const String addToSelection = 'Add to Selection'; static const String subtractFromSelection = 'Subtract from Selection'; static const String intersectWithSelection = 'Intersect with Selection'; - static const String wandSampleAllLayers = 'Magic Wand: Sample All Layers'; + static const String wandSampleAllLayers = 'Edge Detection: Sample All Layers'; static const String floodFillSampleAllLayers = 'Flood Fill: Sample All Layers'; static const String newLayer = 'New Layer'; static const String deleteLayer = 'Delete Layer'; diff --git a/lib/helpers/transform_helper.dart b/lib/helpers/transform_helper.dart index 8f7e8b2c..37dde2f1 100644 --- a/lib/helpers/transform_helper.dart +++ b/lib/helpers/transform_helper.dart @@ -292,6 +292,19 @@ void triggerSquareSnapHaptic( } } +/// Fires a haptic tick when the Edge Detection wand tolerance crosses a multiple +/// of [AppMath.wandToleranceSnapInterval] while dragging, so the drag feels +/// notched without buzzing on every single unit. +void triggerWandToleranceHaptic( + final int previousTolerance, + final int currentTolerance, +) { + const int interval = AppMath.wandToleranceSnapInterval; + if ((previousTolerance ~/ interval) != (currentTolerance ~/ interval)) { + _performHaptic(); + } +} + /// Triggers a platform-appropriate haptic tick. void _performHaptic() { if (Platform.isMacOS) { diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index a031fa2a..09e6df35 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -110,9 +110,8 @@ "effectPixelate": "Pixelate", "effects": "Effects", "effectShadow": "Shadow", - "effectSharpen": "Sharpen", + "effectSharpness": "Sharpness", "effectSize": "Size", - "effectSoften": "Edge Soften", "effectVignette": "Vignette", "enterYourTextHere": "Enter your text here...", "errorProcessingFile": "Error processing file: {error}", @@ -247,7 +246,6 @@ } }, "settings": "Settings...", - "sidePanelBrushesSection": "Brushes", "sidePanelLayersSection": "Layers", "startOver": "Start new...", "startOverTooltip": "Start new...", @@ -269,13 +267,13 @@ "toolLasso": "Lasso", "toolLine": "Line", "toolLinearGradient": "Linear Gradient", - "toolMagic": "Magic", + "toolMagic": "Edge Detection", "toolPaintBucket": "Paint Bucket", "toolPencil": "Pencil", "toolRadialGradient": "Radial Gradient", "toolRectangle": "Rectangle", "toolRemove": "Remove", - "toolReplace": "Replace", + "toolSectionBrush": "Brush", "toolSelector": "Selector", "toolSmudge": "Smudge", "toolSolid": "Solid", diff --git a/lib/l10n/app_es.arb b/lib/l10n/app_es.arb index c1f69772..886f8a48 100644 --- a/lib/l10n/app_es.arb +++ b/lib/l10n/app_es.arb @@ -104,9 +104,8 @@ "effectPixelate": "Pixelar", "effects": "Efectos", "effectShadow": "Sombra", - "effectSharpen": "Nitidez", + "effectSharpness": "Nitidez", "effectSize": "Tamano", - "effectSoften": "Suavizar bordes", "effectVignette": "Viñeta", "enterYourTextHere": "Escribe tu texto aqui...", "errorProcessingFile": "Error al procesar archivo: {error}", @@ -238,7 +237,6 @@ } }, "settings": "Configuracion...", - "sidePanelBrushesSection": "Pinceles", "sidePanelLayersSection": "Capas", "startOver": "Nuevo...", "startOverTooltip": "Nuevo...", @@ -260,13 +258,13 @@ "toolLasso": "Lazo", "toolLine": "Línea", "toolLinearGradient": "Degradado lineal", - "toolMagic": "Mágico", + "toolMagic": "Detección de bordes", "toolPaintBucket": "Bote de pintura", "toolPencil": "Lápiz", "toolRadialGradient": "Degradado radial", "toolRectangle": "Rectángulo", "toolRemove": "Quitar", - "toolReplace": "Reemplazar", + "toolSectionBrush": "Pincel", "toolSelector": "Seleccionador", "toolSmudge": "Difuminar", "toolSolid": "Sólido", diff --git a/lib/l10n/app_fr.arb b/lib/l10n/app_fr.arb index d7363b60..eab3c42d 100644 --- a/lib/l10n/app_fr.arb +++ b/lib/l10n/app_fr.arb @@ -103,9 +103,8 @@ "effectPixelate": "Pixéliser", "effects": "Effets", "effectShadow": "Ombre", - "effectSharpen": "Netteté", + "effectSharpness": "Netteté", "effectSize": "Taille", - "effectSoften": "Adoucir les bords", "effectVignette": "Vignetage", "enterYourTextHere": "Saisissez votre texte ici...", "errorProcessingFile": "Erreur de traitement du fichier : {error}", @@ -240,7 +239,6 @@ } }, "settings": "Parametres...", - "sidePanelBrushesSection": "Pinceaux", "sidePanelLayersSection": "Calques", "startOver": "Nouveau...", "startOverTooltip": "Nouveau...", @@ -262,13 +260,13 @@ "toolLasso": "Lasso libre", "toolLine": "Ligne", "toolLinearGradient": "Dégradé linéaire", - "toolMagic": "Magique", + "toolMagic": "Détection de contours", "toolPaintBucket": "Pot de peinture", "toolPencil": "Crayon", "toolRadialGradient": "Dégradé radial", "toolRectangle": "Rectangulaire", "toolRemove": "Retirer", - "toolReplace": "Remplacer", + "toolSectionBrush": "Pinceau", "toolSelector": "Sélecteur", "toolSmudge": "Estomper", "toolSolid": "Uni", diff --git a/lib/l10n/app_localizations.dart b/lib/l10n/app_localizations.dart index 4a8ac585..3cd443a6 100644 --- a/lib/l10n/app_localizations.dart +++ b/lib/l10n/app_localizations.dart @@ -302,6 +302,12 @@ abstract class AppLocalizations { /// **'Canvas Size'** String get canvasSizeTitle; + /// No description provided for @close. + /// + /// In en, this message translates to: + /// **'Close'** + String get close; + /// REVIEWED /// /// In en, this message translates to: @@ -320,12 +326,6 @@ abstract class AppLocalizations { /// **'Wheel'** String get colorPickerModeWheel; - /// No description provided for @close. - /// - /// In en, this message translates to: - /// **'Close'** - String get close; - /// No description provided for @colorTolerance. /// /// In en, this message translates to: @@ -524,11 +524,11 @@ abstract class AppLocalizations { /// **'Shadow'** String get effectShadow; - /// No description provided for @effectSharpen. + /// No description provided for @effectSharpness. /// /// In en, this message translates to: - /// **'Sharpen'** - String get effectSharpen; + /// **'Sharpness'** + String get effectSharpness; /// No description provided for @effectSize. /// @@ -536,12 +536,6 @@ abstract class AppLocalizations { /// **'Size'** String get effectSize; - /// No description provided for @effectSoften. - /// - /// In en, this message translates to: - /// **'Edge Soften'** - String get effectSoften; - /// No description provided for @effectVignette. /// /// In en, this message translates to: @@ -1058,12 +1052,6 @@ abstract class AppLocalizations { /// **'Settings...'** String get settings; - /// No description provided for @sidePanelBrushesSection. - /// - /// In en, this message translates to: - /// **'Brushes'** - String get sidePanelBrushesSection; - /// No description provided for @sidePanelLayersSection. /// /// In en, this message translates to: @@ -1193,7 +1181,7 @@ abstract class AppLocalizations { /// No description provided for @toolMagic. /// /// In en, this message translates to: - /// **'Magic'** + /// **'Edge Detection'** String get toolMagic; /// No description provided for @toolPaintBucket. @@ -1226,11 +1214,11 @@ abstract class AppLocalizations { /// **'Remove'** String get toolRemove; - /// No description provided for @toolReplace. + /// No description provided for @toolSectionBrush. /// /// In en, this message translates to: - /// **'Replace'** - String get toolReplace; + /// **'Brush'** + String get toolSectionBrush; /// No description provided for @toolSelector. /// diff --git a/lib/l10n/app_localizations_en.dart b/lib/l10n/app_localizations_en.dart index 4ede986b..b918ca77 100644 --- a/lib/l10n/app_localizations_en.dart +++ b/lib/l10n/app_localizations_en.dart @@ -123,6 +123,9 @@ class AppLocalizationsEn extends AppLocalizations { @override String get canvasSizeTitle => 'Canvas Size'; + @override + String get close => 'Close'; + @override String get colorLabel => 'Color'; @@ -132,9 +135,6 @@ class AppLocalizationsEn extends AppLocalizations { @override String get colorPickerModeWheel => 'Wheel'; - @override - String get close => 'Close'; - @override String get colorTolerance => 'Color Tolerance'; @@ -247,14 +247,11 @@ class AppLocalizationsEn extends AppLocalizations { String get effectShadow => 'Shadow'; @override - String get effectSharpen => 'Sharpen'; + String get effectSharpness => 'Sharpness'; @override String get effectSize => 'Size'; - @override - String get effectSoften => 'Edge Soften'; - @override String get effectVignette => 'Vignette'; @@ -532,9 +529,6 @@ class AppLocalizationsEn extends AppLocalizations { @override String get settings => 'Settings...'; - @override - String get sidePanelBrushesSection => 'Brushes'; - @override String get sidePanelLayersSection => 'Layers'; @@ -599,7 +593,7 @@ class AppLocalizationsEn extends AppLocalizations { String get toolLinearGradient => 'Linear Gradient'; @override - String get toolMagic => 'Magic'; + String get toolMagic => 'Edge Detection'; @override String get toolPaintBucket => 'Paint Bucket'; @@ -617,7 +611,7 @@ class AppLocalizationsEn extends AppLocalizations { String get toolRemove => 'Remove'; @override - String get toolReplace => 'Replace'; + String get toolSectionBrush => 'Brush'; @override String get toolSelector => 'Selector'; diff --git a/lib/l10n/app_localizations_es.dart b/lib/l10n/app_localizations_es.dart index ee49a58d..831303db 100644 --- a/lib/l10n/app_localizations_es.dart +++ b/lib/l10n/app_localizations_es.dart @@ -121,6 +121,9 @@ class AppLocalizationsEs extends AppLocalizations { @override String get canvasSizeTitle => 'Tamano del lienzo'; + @override + String get close => 'Cerrar'; + @override String get colorLabel => 'Color'; @@ -130,9 +133,6 @@ class AppLocalizationsEs extends AppLocalizations { @override String get colorPickerModeWheel => 'Rueda'; - @override - String get close => 'Cerrar'; - @override String get colorTolerance => 'Tolerancia de color'; @@ -245,14 +245,11 @@ class AppLocalizationsEs extends AppLocalizations { String get effectShadow => 'Sombra'; @override - String get effectSharpen => 'Nitidez'; + String get effectSharpness => 'Nitidez'; @override String get effectSize => 'Tamano'; - @override - String get effectSoften => 'Suavizar bordes'; - @override String get effectVignette => 'Viñeta'; @@ -530,9 +527,6 @@ class AppLocalizationsEs extends AppLocalizations { @override String get settings => 'Configuracion...'; - @override - String get sidePanelBrushesSection => 'Pinceles'; - @override String get sidePanelLayersSection => 'Capas'; @@ -597,7 +591,7 @@ class AppLocalizationsEs extends AppLocalizations { String get toolLinearGradient => 'Degradado lineal'; @override - String get toolMagic => 'Mágico'; + String get toolMagic => 'Detección de bordes'; @override String get toolPaintBucket => 'Bote de pintura'; @@ -615,7 +609,7 @@ class AppLocalizationsEs extends AppLocalizations { String get toolRemove => 'Quitar'; @override - String get toolReplace => 'Reemplazar'; + String get toolSectionBrush => 'Pincel'; @override String get toolSelector => 'Seleccionador'; diff --git a/lib/l10n/app_localizations_fr.dart b/lib/l10n/app_localizations_fr.dart index 571f05cb..59e001b5 100644 --- a/lib/l10n/app_localizations_fr.dart +++ b/lib/l10n/app_localizations_fr.dart @@ -124,6 +124,9 @@ class AppLocalizationsFr extends AppLocalizations { @override String get canvasSizeTitle => 'Taille de la toile'; + @override + String get close => 'Fermer'; + @override String get colorLabel => 'Couleur'; @@ -133,9 +136,6 @@ class AppLocalizationsFr extends AppLocalizations { @override String get colorPickerModeWheel => 'Roue'; - @override - String get close => 'Fermer'; - @override String get colorTolerance => 'Tolérance de couleur'; @@ -248,14 +248,11 @@ class AppLocalizationsFr extends AppLocalizations { String get effectShadow => 'Ombre'; @override - String get effectSharpen => 'Netteté'; + String get effectSharpness => 'Netteté'; @override String get effectSize => 'Taille'; - @override - String get effectSoften => 'Adoucir les bords'; - @override String get effectVignette => 'Vignetage'; @@ -534,9 +531,6 @@ class AppLocalizationsFr extends AppLocalizations { @override String get settings => 'Parametres...'; - @override - String get sidePanelBrushesSection => 'Pinceaux'; - @override String get sidePanelLayersSection => 'Calques'; @@ -601,7 +595,7 @@ class AppLocalizationsFr extends AppLocalizations { String get toolLinearGradient => 'Dégradé linéaire'; @override - String get toolMagic => 'Magique'; + String get toolMagic => 'Détection de contours'; @override String get toolPaintBucket => 'Pot de peinture'; @@ -619,7 +613,7 @@ class AppLocalizationsFr extends AppLocalizations { String get toolRemove => 'Retirer'; @override - String get toolReplace => 'Remplacer'; + String get toolSectionBrush => 'Pinceau'; @override String get toolSelector => 'Sélecteur'; diff --git a/lib/models/app_icon_enum.dart b/lib/models/app_icon_enum.dart index 5dfa0a21..309952de 100644 --- a/lib/models/app_icon_enum.dart +++ b/lib/models/app_icon_enum.dart @@ -91,6 +91,7 @@ enum AppIcon { selectorMathRemove('assets/icons/selector_math_remove.svg'), selectorMathReplace('assets/icons/selector_math_replace.svg'), + smudge('assets/icons/smudge.svg'), square('assets/icons/square.svg'), support('assets/icons/support.svg'), transform('assets/icons/transform.svg'), diff --git a/lib/models/effect_brush_model.dart b/lib/models/effect_brush_model.dart new file mode 100644 index 00000000..dda63b59 --- /dev/null +++ b/lib/models/effect_brush_model.dart @@ -0,0 +1,37 @@ +import 'package:fpaint/constants/constants.dart'; +import 'package:fpaint/models/selection_effect.dart'; + +/// State for an effect armed as a brush, where the effect is brushed onto the +/// canvas stroke-by-stroke rather than applied to a whole region at once. +/// +/// Effects live in the same Brush section as the gesture tools: tapping one +/// arms it here. When [isArmed], canvas strokes commit the [effect] over the +/// brushed band (see AppProvider.commitEffectBrushStroke) instead of drawing +/// colour. +class EffectBrushModel { + /// The effect armed as a brush, or null when nothing is armed. + SelectionEffect? effect; + + /// Strength applied by each painted stroke (0..1). + double strength = AppEffects.defaultIntensity; + + /// Size parameter for effects that expose one (e.g. pixelate, noise). + double size = AppEffects.minSize; + + /// Whether an effect is armed, so a canvas stroke paints it right now. + bool get isArmed => effect != null; + + /// Arms [newEffect] for painting, resetting to the default strength and its + /// default size. Bipolar effects brighten/strengthen by default; drag the + /// strength slider through 0 to reverse. + void arm(final SelectionEffect newEffect) { + effect = newEffect; + strength = AppEffects.defaultIntensity; + size = newEffect.defaultSize; + } + + /// Disarms the active paint effect without leaving Paint mode. + void disarm() { + effect = null; + } +} diff --git a/lib/models/effect_labels.dart b/lib/models/effect_labels.dart index fb4b2177..44c3e796 100644 --- a/lib/models/effect_labels.dart +++ b/lib/models/effect_labels.dart @@ -23,10 +23,8 @@ String effectLabel( return l10n.effectPixelate; case SelectionEffect.shadow: return l10n.effectShadow; - case SelectionEffect.sharpen: - return l10n.effectSharpen; - case SelectionEffect.soften: - return l10n.effectSoften; + case SelectionEffect.sharpness: + return l10n.effectSharpness; case SelectionEffect.vignette: return l10n.effectVignette; } diff --git a/lib/models/selection_effect.dart b/lib/models/selection_effect.dart index 91cff729..e1eba5bc 100644 --- a/lib/models/selection_effect.dart +++ b/lib/models/selection_effect.dart @@ -19,12 +19,14 @@ class _SelectionEffectConfig { required this.icon, required this.apply, this.supportsSizeControl = false, + this.bipolar = false, this.defaultSize = AppEffects.minSize, this.sizeValueResolver = _defaultSelectionEffectSizeValue, }); final AppIcon icon; final bool supportsSizeControl; + final bool bipolar; final double defaultSize; final _SelectionEffectSizeValueResolver sizeValueResolver; final _SelectionEffectApply apply; @@ -38,16 +40,25 @@ enum SelectionEffect { apply: _applyBlurEffect, ), ), + sharpness( + _SelectionEffectConfig( + icon: AppIcon.effectSharpen, + apply: _applySharpnessEffect, + bipolar: true, + ), + ), brightness( _SelectionEffectConfig( icon: AppIcon.effectBrightness, apply: _applyBrightnessEffect, + bipolar: true, ), ), contrast( _SelectionEffectConfig( icon: AppIcon.effectContrast, apply: _applyContrastEffect, + bipolar: true, ), ), grayscale( @@ -60,6 +71,7 @@ enum SelectionEffect { _SelectionEffectConfig( icon: AppIcon.effectHueSaturation, apply: _applyHueSaturationEffect, + bipolar: true, ), ), noise( @@ -86,18 +98,6 @@ enum SelectionEffect { apply: _applyShadowEffect, ), ), - sharpen( - _SelectionEffectConfig( - icon: AppIcon.effectSharpen, - apply: _applySharpenEffect, - ), - ), - soften( - _SelectionEffectConfig( - icon: AppIcon.effectSoften, - apply: _applySoftenEffect, - ), - ), vignette( _SelectionEffectConfig( icon: AppIcon.effectVignette, @@ -116,6 +116,11 @@ enum SelectionEffect { /// Whether this effect exposes a size control in the UI. bool get supportsSizeControl => _config.supportsSizeControl; + /// Whether this effect is bidirectional: its slider is centred (0 = no + /// change) and negative vs. positive strength push opposite ways (e.g. + /// darken vs. brighten, less vs. more contrast, hue ±). + bool get bipolar => _config.bipolar; + /// Default UI size value for this effect. double get defaultSize => _config.defaultSize; @@ -126,8 +131,9 @@ enum SelectionEffect { /// Applies this effect to the given [image] and returns the processed result. /// - /// [strength] controls how strongly the effect is applied (0.0 = none, - /// 1.0 = full authored strength). + /// For unipolar effects [strength] runs 0.0 (none) to 1.0 (full authored + /// strength). For [bipolar] effects it is signed: 0.0 = no change, and the + /// sign selects the direction (e.g. + brightens, - darkens). /// /// [size] controls effect-specific block or grain sizing where supported. Future apply( @@ -135,7 +141,9 @@ enum SelectionEffect { final double strength = AppEffects.defaultIntensity, final double? size, }) { - final double appliedStrength = strength * AppEffects.intensityAppliedScale; + // Bipolar effects map strength directly (symmetric ±1 range); unipolar + // effects scale up so the slider max reaches double the authored strength. + final double appliedStrength = _config.bipolar ? strength : strength * AppEffects.intensityAppliedScale; final double appliedSize = size ?? defaultSize; return _config.apply(image, appliedStrength, appliedSize); } @@ -221,22 +229,24 @@ Future _applyShadowEffect( return applyShadow(image, strength: strength); } -Future _applySharpenEffect( +/// Bipolar sharpness: negative strength softens (a gentle Gaussian blur using +/// [AppEffects.softenSigma]); positive strength sharpens. Centre (0) is a +/// no-op returning the source image unchanged. Heavy blurring is left to the +/// dedicated Blur effect (which uses the stronger blur sigma and scale). +Future _applySharpnessEffect( final ui.Image image, final double strength, final double _, ) { + if (strength == AppEffects.minIntensity) { + return Future.value(image); + } + if (strength < AppEffects.minIntensity) { + return applyGaussianBlur(image, AppEffects.softenSigma, strength: -strength); + } return applySharpen(image, strength: strength); } -Future _applySoftenEffect( - final ui.Image image, - final double strength, - final double _, -) { - return applyGaussianBlur(image, AppEffects.softenSigma, strength: strength); -} - Future _applyVignetteEffect( final ui.Image image, final double strength, diff --git a/lib/models/tool_descriptor.dart b/lib/models/tool_descriptor.dart new file mode 100644 index 00000000..69d484dc --- /dev/null +++ b/lib/models/tool_descriptor.dart @@ -0,0 +1,52 @@ +import 'package:fpaint/l10n/app_localizations.dart'; +import 'package:fpaint/models/app_icon_enum.dart'; +import 'package:fpaint/models/effect_labels.dart'; +import 'package:fpaint/models/selection_effect.dart'; +import 'package:fpaint/models/tool_family.dart'; +import 'package:fpaint/models/user_action_drawing.dart'; + +/// Ordered gesture tools shown first in the Brush section of the rail. Smudge +/// sits with the freehand brushes; blur is not a gesture tool (it appears as an +/// effect, applied to a region or armed as a brush). +const List kGestureToolOrder = [ + ActionType.pencil, + ActionType.brush, + ActionType.smudge, + ActionType.line, + ActionType.rectangle, + ActionType.circle, + ActionType.fill, + ActionType.eraser, + ActionType.text, +]; + +/// A single entry in the unified tool rail. +/// +/// Unifies the two kinds of tools the rail presents: a gesture tool backed by +/// an [action] (Draw), or a region adjustment backed by an [effect] (Adjust). +/// Exactly one of [action] or [effect] is non-null. +class ToolDescriptor { + /// Creates a gesture-tool entry for [action]. + const ToolDescriptor.gesture(this.action) : effect = null; + + /// Creates an effect entry for [effect]. + const ToolDescriptor.adjust(this.effect) : action = null; + + /// The gesture action for a gesture-tool entry; null for an effect. + final ActionType? action; + + /// The effect for an effect entry; null for a gesture tool. + final SelectionEffect? effect; + + /// The icon shown on the rail button. + AppIcon get icon => effect?.icon ?? action!.icon; + + /// The localized label / tooltip for the rail button. + String label(final AppLocalizations l10n) => effect != null ? effectLabel(l10n, effect!) : toolLabel(l10n, action!); +} + +/// The full ordered tool rail: gesture tools followed by effects. +List toolRail() => [ + for (final ActionType action in kGestureToolOrder) ToolDescriptor.gesture(action), + for (final SelectionEffect effect in SelectionEffect.values) ToolDescriptor.adjust(effect), +]; diff --git a/lib/models/tool_family.dart b/lib/models/tool_family.dart new file mode 100644 index 00000000..c4dbdea1 --- /dev/null +++ b/lib/models/tool_family.dart @@ -0,0 +1,38 @@ +import 'package:fpaint/l10n/app_localizations.dart'; +import 'package:fpaint/models/user_action_drawing.dart'; + +/// Localized label for a gesture tool [action] shown in the tool rail. +/// +/// Gesture tools and effects share one Brush section in the rail, so there is +/// no separate "brush mode" vs. "effect mode"; a tool is a gesture when it +/// carries an [ActionType] and an effect otherwise. +String toolLabel(final AppLocalizations l10n, final ActionType action) { + switch (action) { + case ActionType.pencil: + return l10n.toolPencil; + case ActionType.brush: + return l10n.toolBrush; + case ActionType.smudge: + return l10n.toolSmudge; + case ActionType.blurBrush: + return l10n.toolBlurBrush; + case ActionType.line: + return l10n.toolLine; + case ActionType.rectangle: + return l10n.toolRectangle; + case ActionType.circle: + return l10n.toolCircle; + case ActionType.fill: + return l10n.toolPaintBucket; + case ActionType.eraser: + return l10n.toolEraser; + case ActionType.text: + return l10n.toolText; + // Actions that never appear in the tool rail. + case ActionType.region: + case ActionType.image: + case ActionType.cut: + case ActionType.selector: + return action.name; + } +} diff --git a/lib/models/user_action_drawing.dart b/lib/models/user_action_drawing.dart index 580a34fe..bd998c8a 100644 --- a/lib/models/user_action_drawing.dart +++ b/lib/models/user_action_drawing.dart @@ -63,7 +63,7 @@ class UserActionDrawing { enum ActionType { pencil(AppIcon.create), brush(AppIcon.brush), - smudge(AppIcon.effectBlur), + smudge(AppIcon.smudge), blurBrush(AppIcon.waterDrop), line(AppIcon.lineAxis), circle(AppIcon.circle), diff --git a/lib/models/version.dart b/lib/models/version.dart index efe90286..493a3302 100644 --- a/lib/models/version.dart +++ b/lib/models/version.dart @@ -1,6 +1,6 @@ // GENERATED FILE. DO NOT EDIT. // Generated by `tool/check.sh` from `pubspec.yaml`. -const String packageVersion = '1.8.9'; +const String packageVersion = '1.9.0'; const String packageBuildNumber = '1'; -const String packageVersionWithBuild = '1.8.9+1'; +const String packageVersionWithBuild = '1.9.0+1'; diff --git a/lib/panels/tools/tool_family_rail.dart b/lib/panels/tools/tool_family_rail.dart new file mode 100644 index 00000000..a2bfbed8 --- /dev/null +++ b/lib/panels/tools/tool_family_rail.dart @@ -0,0 +1,186 @@ +import 'package:flutter/widgets.dart'; +import 'package:fpaint/constants/constants.dart'; +import 'package:fpaint/l10n/app_localizations.dart'; +import 'package:fpaint/l10n/app_localizations_x.dart'; +import 'package:fpaint/models/effect_labels.dart'; +import 'package:fpaint/models/selection_effect.dart'; +import 'package:fpaint/models/tool_descriptor.dart'; +import 'package:fpaint/models/user_action_drawing.dart'; +import 'package:fpaint/providers/app_provider.dart'; +import 'package:fpaint/providers/app_provider_selection.dart'; +import 'package:fpaint/widgets/app_buttons.dart'; +import 'package:fpaint/widgets/app_slider.dart'; +import 'package:fpaint/widgets/side_panel_header.dart'; + +/// The unified tool rail: every pixel-changing tool in one Brush section. +/// +/// Gesture tools (pencil, brush, smudge, shapes, fill, eraser, text) and +/// effects (blur, sharpness, brightness, …) share a single flat grid, because +/// an effect is just a brush too — tapping one arms it as a brush and you paint +/// it on. Exactly one tool is active at a time: arming an effect deselects the +/// gesture tool and swaps [gestureParams] for the effect's brush controls (size +/// and strength), and picking a gesture tool disarms the effect. +class ToolFamilyRail extends StatelessWidget { + const ToolFamilyRail({ + super.key, + required this.minimal, + this.gestureParams, + }); + + /// Parameter controls for the currently selected gesture tool. + final Widget? gestureParams; + + /// Whether the rail is rendered in the compact (minimal) layout. + final bool minimal; + @override + Widget build(final BuildContext context) { + final AppProvider appProvider = AppProvider.of(context); + + return ListenableBuilder( + // Rebuild on tool change AND on effect arm/disarm + strength changes, so + // the selection highlight and the options panel always reflect the single + // active tool. + listenable: Listenable.merge([ + appProvider.selectedActionRepaintListenable, + appProvider.toolOptionsRepaintListenable, + ]), + builder: (final BuildContext context, final Widget? _) { + return _brushSection(context, appProvider); + }, + ); + } + + /// Builds the single Brush section: the flat tool grid plus the controls for + /// whichever tool is active (gesture params, or the armed effect's controls). + Widget _brushSection(final BuildContext context, final AppProvider appProvider) { + final AppLocalizations l10n = context.l10n; + final SelectionEffect? armedEffect = appProvider.effectBrushModel.effect; + + return Padding( + padding: const EdgeInsets.symmetric( + horizontal: AppSpacing.medium, + vertical: AppSpacing.small, + ), + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + SidePanelHeader(title: l10n.toolSectionBrush, padding: EdgeInsets.zero), + const SizedBox(height: AppSpacing.small), + Wrap( + spacing: minimal ? AppSpacing.thin : AppSpacing.small, + runSpacing: minimal ? AppSpacing.thin : AppSpacing.small, + alignment: WrapAlignment.center, + children: [ + for (final ToolDescriptor descriptor in toolRail()) + _toolButton(l10n, appProvider, descriptor, armedEffect), + ], + ), + if (armedEffect == null && gestureParams != null) gestureParams!, + if (armedEffect != null) _effectControls(l10n, appProvider, armedEffect), + ], + ), + ); + } + + /// Brush controls for the [armedEffect]: brush size and strength. The effect + /// is applied by painting it onto the canvas. + Widget _effectControls( + final AppLocalizations l10n, + final AppProvider appProvider, + final SelectionEffect armedEffect, + ) { + return Padding( + padding: const EdgeInsets.only(top: AppSpacing.small), + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + AppSlider( + key: Keys.effectPaintSizeSlider, + label: l10n.brushSize, + value: appProvider.brushSize, + valueLabel: appProvider.brushSize.toStringAsFixed(AppMath.zero), + min: AppInteraction.minCanvasScale, + max: AppLimits.pixelBrushSizeMax.toDouble(), + onChanged: (final double value) => appProvider.brushSize = value, + ), + AppSlider( + key: Keys.effectPaintStrengthSlider, + label: effectLabel(l10n, armedEffect), + value: appProvider.effectBrushModel.strength, + valueLabel: '${(appProvider.effectBrushModel.strength * AppMath.percentScale).round()}%', + min: armedEffect.bipolar ? -AppEffects.maxIntensity : AppEffects.minIntensity, + max: AppEffects.maxIntensity, + onChanged: (final double value) => appProvider.setEffectBrushStrength(value), + ), + ], + ), + ); + } + + /// Preserves the widget keys existing tests tap; tools without a prior key + /// (pencil, brush, eraser) keep none. + static Key? _gestureToolKey(final ActionType action) { + switch (action) { + case ActionType.smudge: + return Keys.toolSmudge; + case ActionType.blurBrush: + return Keys.toolBlurBrush; + case ActionType.line: + return Keys.toolLine; + case ActionType.rectangle: + return Keys.toolRectangle; + case ActionType.circle: + return Keys.toolCircle; + case ActionType.fill: + return Keys.toolFill; + case ActionType.text: + return Keys.toolText; + case ActionType.pencil: + case ActionType.brush: + case ActionType.eraser: + case ActionType.region: + case ActionType.image: + case ActionType.cut: + case ActionType.selector: + return null; + } + } + + /// A single rail button: a gesture tool that sets the active action, or an + /// effect that arms/disarms itself as a brush. + Widget _toolButton( + final AppLocalizations l10n, + final AppProvider appProvider, + final ToolDescriptor descriptor, + final SelectionEffect? armedEffect, + ) { + final EdgeInsets padding = EdgeInsets.all(minimal ? AppSpacing.thin : AppSpacing.small); + final BoxConstraints? constraints = minimal ? const BoxConstraints() : null; + + if (descriptor.effect != null) { + final SelectionEffect effect = descriptor.effect!; + return AppButtonIcon( + key: ValueKey(effect), + icon: descriptor.icon, + isSelected: armedEffect == effect, + tooltip: descriptor.label(l10n), + constraints: constraints, + padding: padding, + onPressed: () => armedEffect == effect ? appProvider.disarmEffectBrush() : appProvider.armEffectBrush(effect), + ); + } + + final ActionType action = descriptor.action!; + return AppButtonIcon( + key: _gestureToolKey(action), + icon: descriptor.icon, + // Suppressed while an effect brush is armed — only one tool is active. + isSelected: appProvider.selectedAction == action && armedEffect == null, + tooltip: descriptor.label(l10n), + constraints: constraints, + padding: padding, + onPressed: () => appProvider.selectedAction = action, + ); + } +} diff --git a/lib/panels/tools/tools_panel.dart b/lib/panels/tools/tools_panel.dart index 0ba6f1e0..97c23420 100644 --- a/lib/panels/tools/tools_panel.dart +++ b/lib/panels/tools/tools_panel.dart @@ -3,13 +3,11 @@ import 'package:fpaint/constants/constants.dart'; import 'package:fpaint/l10n/app_localizations.dart'; import 'package:fpaint/l10n/app_localizations_x.dart'; import 'package:fpaint/models/app_icon_enum.dart'; -import 'package:fpaint/models/effect_labels.dart'; import 'package:fpaint/models/fill_model.dart'; -import 'package:fpaint/models/selection_effect.dart'; import 'package:fpaint/models/user_action_drawing.dart'; +import 'package:fpaint/panels/tools/tool_family_rail.dart'; import 'package:fpaint/providers/app_provider.dart'; import 'package:fpaint/providers/app_provider_canvas.dart'; -import 'package:fpaint/providers/app_provider_selection.dart'; import 'package:fpaint/providers/app_provider_tools.dart'; import 'package:fpaint/widgets/app_icon.dart'; import 'package:fpaint/widgets/brush_intensity_picker.dart'; @@ -18,11 +16,9 @@ import 'package:fpaint/widgets/brush_style_picker.dart'; import 'package:fpaint/widgets/color_picker_dialog.dart'; import 'package:fpaint/widgets/color_preview.dart'; import 'package:fpaint/widgets/color_selector.dart'; -import 'package:fpaint/widgets/effect_intensity_controls.dart'; import 'package:fpaint/widgets/gradient_color_list_editor.dart'; import 'package:fpaint/widgets/halftone_size_picker.dart'; import 'package:fpaint/widgets/material_free.dart'; -import 'package:fpaint/widgets/side_panel_header.dart'; import 'package:fpaint/widgets/text_attributes_widget.dart'; import 'package:fpaint/widgets/tolerance_picker.dart'; import 'package:fpaint/widgets/tool_attribute_widget.dart'; @@ -44,73 +40,49 @@ class ToolsPanel extends StatelessWidget { @override Widget build(final BuildContext context) { final AppProvider appProvider = AppProvider.of(context); - final AppLocalizations l10n = context.l10n; return SingleChildScrollView( scrollDirection: Axis.vertical, child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ - _buildPanelSection( - title: l10n.sidePanelBrushesSection, - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - ListenableBuilder( - listenable: appProvider.selectedActionRepaintListenable, - builder: (final BuildContext _, final Widget? _) { - final ActionType selectedTool = appProvider.selectedAction; - - return Wrap( - spacing: minimal ? AppSpacing.thin : AppSpacing.small, - runSpacing: minimal ? AppSpacing.thin : AppSpacing.small, - alignment: WrapAlignment.center, - children: getListOfTools( - context: context, - appProvider: appProvider, - selectedTool: selectedTool, + ToolFamilyRail( + minimal: minimal, + gestureParams: ListenableBuilder( + listenable: appProvider.toolOptionsRepaintListenable, + builder: (final BuildContext _, final Widget? _) { + final ActionType selectedTool = appProvider.selectedAction; + + return AnimatedSwitcher( + duration: AppDefaults.toolPanelRevealAnimationDuration, + reverseDuration: AppDefaults.toolPanelRevealAnimationDuration, + switchInCurve: Curves.easeOutCubic, + switchOutCurve: Curves.easeInCubic, + transitionBuilder: (final Widget child, final Animation animation) { + return FadeTransition( + opacity: animation, + child: SizeTransition( + sizeFactor: animation, + child: child, ), ); }, - ), - ListenableBuilder( - listenable: appProvider.toolOptionsRepaintListenable, - builder: (final BuildContext _, final Widget? _) { - final ActionType selectedTool = appProvider.selectedAction; - - return AnimatedSwitcher( - duration: AppDefaults.toolPanelRevealAnimationDuration, - reverseDuration: AppDefaults.toolPanelRevealAnimationDuration, - switchInCurve: Curves.easeOutCubic, - switchOutCurve: Curves.easeInCubic, - transitionBuilder: (final Widget child, final Animation animation) { - return FadeTransition( - opacity: animation, - child: SizeTransition( - sizeFactor: animation, - child: child, - ), - ); - }, - child: KeyedSubtree( - key: ValueKey(selectedTool), - child: Padding( - padding: const EdgeInsets.only(left: AppSpacing.medium), - child: Wrap( - runSpacing: minimal ? AppSpacing.small : AppSpacing.thin, - alignment: WrapAlignment.center, - children: getWidgetForSelectedTool( - context: context, - appProvider: appProvider, - ), - ), + child: KeyedSubtree( + key: ValueKey(selectedTool), + child: Padding( + padding: const EdgeInsets.only(left: AppSpacing.medium), + child: Wrap( + runSpacing: minimal ? AppSpacing.small : AppSpacing.thin, + alignment: WrapAlignment.center, + children: getWidgetForSelectedTool( + context: context, + appProvider: appProvider, ), ), - ); - }, - ), - ], + ), + ), + ); + }, ), ), ], @@ -201,10 +173,10 @@ class ToolsPanel extends StatelessWidget { ListenableBuilder( listenable: layers.topColorsListenable, builder: (final BuildContext _, final Widget? _) { - return ToolAttributeWidget( + return _CollapsibleTopColors( compact: minimal, name: l10n.topColors(layers.topColors.length), - childRight: TopColors( + child: TopColors( colorUsages: layers.topColors, onRefresh: layers.evaluateTopColor, onColorPicked: (final Color color) { @@ -227,108 +199,6 @@ class ToolsPanel extends StatelessWidget { ); } - /// Returns a list of widgets representing the available tools. - List getListOfTools({ - required final BuildContext context, - required final AppProvider appProvider, - required final ActionType selectedTool, - }) { - final AppLocalizations l10n = context.l10n; - - final List tools = [ - _buildActionPicker( - minimal: minimal, - name: l10n.toolPencil, - icon: ActionType.pencil.icon, - isSelected: selectedTool == ActionType.pencil, - onPressed: () => appProvider.selectedAction = ActionType.pencil, - ), - _buildActionPicker( - minimal: minimal, - name: l10n.toolBrush, - icon: ActionType.brush.icon, - isSelected: selectedTool == ActionType.brush, - onPressed: () => appProvider.selectedAction = ActionType.brush, - ), - _buildActionPicker( - key: Keys.toolSmudge, - minimal: minimal, - name: l10n.toolSmudge, - icon: ActionType.smudge.icon, - isSelected: selectedTool == ActionType.smudge, - onPressed: () => appProvider.selectedAction = ActionType.smudge, - ), - _buildActionPicker( - key: Keys.toolBlurBrush, - minimal: minimal, - name: l10n.toolBlurBrush, - icon: ActionType.blurBrush.icon, - isSelected: selectedTool == ActionType.blurBrush, - onPressed: () => appProvider.selectedAction = ActionType.blurBrush, - ), - _buildActionPicker( - key: Keys.toolLine, - minimal: minimal, - name: l10n.toolLine, - icon: ActionType.line.icon, - isSelected: selectedTool == ActionType.line, - onPressed: () { - appProvider.selectedAction = ActionType.line; - }, - ), - _buildActionPicker( - key: Keys.toolRectangle, - minimal: minimal, - name: l10n.toolRectangle, - icon: ActionType.rectangle.icon, - isSelected: selectedTool == ActionType.rectangle, - onPressed: () { - appProvider.selectedAction = ActionType.rectangle; - }, - ), - _buildActionPicker( - key: Keys.toolCircle, - minimal: minimal, - name: l10n.toolCircle, - icon: ActionType.circle.icon, - isSelected: selectedTool == ActionType.circle, - onPressed: () { - appProvider.selectedAction = ActionType.circle; - }, - ), - _buildActionPicker( - key: Keys.toolFill, - minimal: minimal, - name: l10n.toolPaintBucket, - icon: ActionType.fill.icon, - isSelected: selectedTool == ActionType.fill, - onPressed: () { - appProvider.selectedAction = ActionType.fill; - }, - ), - _buildActionPicker( - minimal: minimal, - name: l10n.toolEraser, - icon: ActionType.eraser.icon, - isSelected: selectedTool == ActionType.eraser, - onPressed: () { - appProvider.selectedAction = ActionType.eraser; - }, - ), - _buildActionPicker( - key: Keys.toolText, - minimal: minimal, - name: l10n.toolText, - icon: ActionType.text.icon, - isSelected: selectedTool == ActionType.text, - onPressed: () { - appProvider.selectedAction = ActionType.text; - }, - ), - ]; - return tools; - } - /// Returns a list of widgets representing the attributes for the selected tool. List getWidgetForSelectedTool({ required final BuildContext context, @@ -415,6 +285,8 @@ class ToolsPanel extends StatelessWidget { ); break; case ActionType.selector: + // Selection tooling lives on the canvas (sub-toolbar + bottom sheets), + // not in the side panel — see shell_selection_sub_toolbar.dart. break; default: @@ -706,103 +578,41 @@ class ToolsPanel extends StatelessWidget { ), ); } - - /// Builds a titled panel block used by the side tools panel. - Widget _buildPanelSection({ - required final String title, - required final Widget child, - }) { - return Padding( - padding: const EdgeInsets.symmetric( - horizontal: AppSpacing.medium, - vertical: AppSpacing.small, - ), - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - SidePanelHeader( - title: title, - padding: EdgeInsets.zero, - ), - const SizedBox(height: AppSpacing.small), - child, - ], - ), - ); - } } -/// Side-panel section listing all [SelectionEffect] buttons with effect sliders -/// so the user can tune preview parameters before applying an effect. -class _EffectsSection extends StatefulWidget { - const _EffectsSection({ - required this.minimal, - required this.l10n, - required this.appProvider, +/// Wraps the top colors grid in a collapsible tool attribute, collapsed by default. +class _CollapsibleTopColors extends StatefulWidget { + const _CollapsibleTopColors({ + required this.name, + required this.compact, + required this.child, }); - final AppProvider appProvider; - final AppLocalizations l10n; - final bool minimal; + /// The top colors grid revealed when expanded. + final Widget child; + + /// Whether the tool panel is in minimal mode. + final bool compact; + + /// The label shown on the expand/collapse toggle. + final String name; @override - State<_EffectsSection> createState() => _EffectsSectionState(); + State<_CollapsibleTopColors> createState() => _CollapsibleTopColorsState(); } -class _EffectsSectionState extends State<_EffectsSection> { +class _CollapsibleTopColorsState extends State<_CollapsibleTopColors> { + bool _expanded = false; + @override Widget build(final BuildContext context) { - final SelectionEffect? selectedEffect = widget.appProvider.effectPreviewModel.effect; - final bool hasEffectPreview = widget.appProvider.effectPreviewModel.isVisible; - - return Column( - mainAxisSize: MainAxisSize.min, - children: [ - Wrap( - spacing: widget.minimal ? AppSpacing.thin : AppSpacing.small, - runSpacing: widget.minimal ? AppSpacing.thin : AppSpacing.small, - alignment: WrapAlignment.center, - children: [ - for (final SelectionEffect effect in SelectionEffect.values) - _buildActionPicker( - minimal: widget.minimal, - name: effectLabel(widget.l10n, effect), - icon: effect.icon, - isSelected: selectedEffect == effect, - onPressed: () async { - if (hasEffectPreview && selectedEffect == effect) { - widget.appProvider.cancelEffectPreview(); - return; - } - - if (widget.appProvider.isSelectedLayerLocked) { - _showLockedLayerMessage(); - return; - } - - await widget.appProvider.startEffectPreview(effect); - }, - ), - ], - ), - if (hasEffectPreview) const AppDivider(), - if (hasEffectPreview) - EffectIntensityControls( - key: ValueKey(selectedEffect), - appProvider: widget.appProvider, - l10n: widget.l10n, - sliderKey: Keys.effectIntensitySlider, - applyButtonKey: Keys.effectIntensityPanelApplyButton, - cancelButtonKey: Keys.effectIntensityCancelButton, - ), - ], - ); - } - - void _showLockedLayerMessage() { - context.showSnackBarMessage( - widget.l10n.layerLockedForEditing(widget.appProvider.layers.selectedLayer.name), + return ToolAttributeWidget( + compact: widget.compact, + name: widget.name, + enabled: _expanded, + enabledToggleKey: Keys.toolPanelTopColorsToggle, + onEnabledChanged: (final bool value) => setState(() => _expanded = value), + childRight: widget.child, ); } } diff --git a/lib/providers/app_preferences.dart b/lib/providers/app_preferences.dart index 12c23ba2..1cc03778 100644 --- a/lib/providers/app_preferences.dart +++ b/lib/providers/app_preferences.dart @@ -44,6 +44,13 @@ class AppPreferences extends ChangeNotifier { static const String keyRecentFiles = 'keyRecentFiles'; static const String keyRecentFileBookmarks = 'keyRecentFileBookmarks'; + /// Paths, most-recent-first, of files whose last-selected layer is remembered + /// for formats that cannot embed the selection (PNG, JPEG, WebP, HEIC). + static const String keyLastLayerFiles = 'keyLastLayerFiles'; + + /// Selected layer indices, positionally paired with [keyLastLayerFiles]. + static const String keyLastLayerIndices = 'keyLastLayerIndices'; + /// Legacy separator used by the previous path+bookmark serialized format. static const String _legacyBookmarkSeparator = '\x00'; @@ -62,6 +69,11 @@ class AppPreferences extends ChangeNotifier { /// macOS security-scoped bookmarks keyed by file path. Map _recentFileBookmarks = {}; + /// Last-selected layer index keyed by file path, for formats that cannot + /// embed the selection. Insertion order is most-recent-first and the map is + /// capped at [AppLimits.maxRecentFiles] entries. + final Map _lastLayerIndexByPath = {}; + // Getters /// Gets the side panel distance. @@ -104,6 +116,11 @@ class AppPreferences extends ChangeNotifier { /// Returns the macOS security-scoped bookmark string for [path], or null. String? getBookmark(final String path) => _recentFileBookmarks[path]; + /// Returns the remembered selected layer index for [path], or null when the + /// file has no stored selection. Only used for formats that cannot embed the + /// selection; layered formats (ORA, TIFF) carry it inside the file instead. + int? lastSelectedLayerFor(final String path) => _lastLayerIndexByPath[path]; + /// Gets the SharedPreferences instance. Future getPref() async { await _ensureLoaded(); @@ -235,6 +252,50 @@ class AppPreferences extends ChangeNotifier { notifyListeners(); } + /// Remembers the [index] of the last-selected layer for [path]. + /// + /// Intended for formats that cannot embed the selection inside the file + /// (PNG, JPEG, WebP, HEIC). The entry is moved to the front and the list is + /// capped at [AppLimits.maxRecentFiles] so only the most recently worked-on + /// files are retained. + Future recordLastSelectedLayer( + final String path, + final int index, + ) async { + final Map reordered = {path: index}; + for (final MapEntry entry in _lastLayerIndexByPath.entries) { + if (entry.key == path || reordered.length >= AppLimits.maxRecentFiles) { + continue; + } + reordered[entry.key] = entry.value; + } + _lastLayerIndexByPath + ..clear() + ..addAll(reordered); + + final SharedPreferences prefs = await getPref(); + await prefs.setStringList(keyLastLayerFiles, _lastLayerIndexByPath.keys.toList()); + await prefs.setStringList( + keyLastLayerIndices, + _lastLayerIndexByPath.values.map((final int value) => value.toString()).toList(), + ); + } + + /// Rebuilds [_lastLayerIndexByPath] from the two persisted parallel lists. + void _loadLastLayerSelections({ + required final List files, + required final List indices, + }) { + _lastLayerIndexByPath.clear(); + final int sharedCount = files.length < indices.length ? files.length : indices.length; + for (int i = 0; i < sharedCount && i < AppLimits.maxRecentFiles; i++) { + final int? index = int.tryParse(indices[i]); + if (index != null) { + _lastLayerIndexByPath[files[i]] = index; + } + } + } + /// Removes bookmarks for files that are no longer present in the MRU list. void _pruneRecentFileBookmarks() { _recentFileBookmarks.removeWhere( @@ -323,6 +384,11 @@ class AppPreferences extends ChangeNotifier { if (loadedRecentFileBookmarks.needsResave) { await _persistRecentFileBookmarks(_prefs!); } + + _loadLastLayerSelections( + files: _prefs!.getStringList(keyLastLayerFiles) ?? [], + indices: _prefs!.getStringList(keyLastLayerIndices) ?? [], + ); } /// Loads bookmark entries and repairs legacy macOS-pref storage formats. diff --git a/lib/providers/app_provider.dart b/lib/providers/app_provider.dart index 5aab4038..2b793906 100644 --- a/lib/providers/app_provider.dart +++ b/lib/providers/app_provider.dart @@ -6,6 +6,7 @@ import 'dart:math'; import 'package:flutter/widgets.dart'; import 'package:fpaint/constants/constants.dart'; import 'package:fpaint/helpers/image_helper.dart'; +import 'package:fpaint/models/effect_brush_model.dart'; import 'package:fpaint/models/effect_preview_model.dart'; import 'package:fpaint/models/fill_model.dart'; import 'package:fpaint/models/image_placement_layer_restore_state.dart'; @@ -52,6 +53,11 @@ class AppProvider extends ChangeNotifier { double? _brushSizePreviewSize; Offset? _brushSizePreviewPosition; + // Live Edge Detection tolerance HUD: the value (raw 1–100) and main-view + // anchor shown while dragging the wand tolerance. Null when not dragging. + int? _wandToleranceHudTolerance; + Offset? _wandToleranceHudPosition; + // Live smudge/blur gesture marquee: the in-progress stroke's sampled points // (canvas space) and brush size. The effect itself is rendered once on // pointer-up; during the drag we only show this swept-band outline so the @@ -268,6 +274,13 @@ class AppProvider extends ChangeNotifier { set selectedAction(final ActionType value) { final bool selectedActionChanged = value != _selectedAction; + // Picking any tool cancels an armed paint-mode effect brush, so only one + // gesture tool is ever active — a stroke is never ambiguous. + final bool wasEffectBrushArmed = effectBrushModel.effect != null; + if (wasEffectBrushArmed) { + effectBrushModel.disarm(); + } + // Switching tools exits eyedropper mode so pointer interactions follow the new tool. if (selectedActionChanged) { eyeDropPositionForBrush = null; @@ -293,7 +306,7 @@ class AppProvider extends ChangeNotifier { wandSelection.reset(); } - if (selectedActionChanged) { + if (selectedActionChanged || wasEffectBrushArmed) { _selectedActionNotifier.notifyListeners(); repaintToolOptions(); } @@ -411,6 +424,32 @@ class AppProvider extends ChangeNotifier { _hideBrushSizePreview(); } + /// Whether the live Edge Detection tolerance HUD should be shown. + bool get isWandToleranceHudVisible => _wandToleranceHudTolerance != null; + + /// The tolerance shown in the live wand HUD (raw 1–100, read as a percentage). + int? get wandToleranceHudTolerance => _wandToleranceHudTolerance; + + /// The main-view-space position the wand HUD is anchored to. + Offset? get wandToleranceHudPosition => _wandToleranceHudPosition; + + /// Shows or updates the live Edge Detection tolerance HUD at [position]. + void showWandToleranceHud({required final int tolerance, required final Offset position}) { + _wandToleranceHudTolerance = tolerance; + _wandToleranceHudPosition = position; + repaintMainView(); + } + + /// Hides the live Edge Detection tolerance HUD. + void hideWandToleranceHud() { + if (_wandToleranceHudTolerance == null) { + return; + } + _wandToleranceHudTolerance = null; + _wandToleranceHudPosition = null; + repaintMainView(); + } + /// Gets the active pixel-brush intensity for the selected tool. double get brushIntensity { switch (_selectedAction) { @@ -570,6 +609,9 @@ class AppProvider extends ChangeNotifier { /// The effect preview model for live selection-effect intensity updates. final EffectPreviewModel effectPreviewModel = EffectPreviewModel(); + /// The paint-mode state for brushing an Adjust effect onto the canvas. + final EffectBrushModel effectBrushModel = EffectBrushModel(); + /// Monotonic token that invalidates stale async effect preview renders. int effectPreviewRenderVersion = 0; @@ -607,6 +649,12 @@ class AppProvider extends ChangeNotifier { update(); } + /// Whether the Edge Detection (magic wand) selector is the active tool. + /// + /// Gates wand-only affordances such as the canvas tolerance control and the + /// crosshair cursor. + bool get isWandSelectionActive => selectedAction == ActionType.selector && selectorModel.mode == SelectorMode.wand; + /// Sets the active selector math mode and rebuilds tool options. void setSelectorMath(final SelectorMath value) { selectorModel.math = value; diff --git a/lib/providers/app_provider_selection.dart b/lib/providers/app_provider_selection.dart index 93300f8e..a8e54519 100644 --- a/lib/providers/app_provider_selection.dart +++ b/lib/providers/app_provider_selection.dart @@ -38,6 +38,18 @@ extension AppProviderSelection on AppProvider { return; } activateSelectionAction(); + prewarmWandSourceCache(); + } + + /// Warms the wand source-pixel cache (layer render + readback) as soon as Edge + /// Detection becomes active, so the first tap-and-drag is responsive instead of + /// stalling ~half a second while the first sample builds the cache. No-ops when + /// the wand isn't active or the cache is already warm; safe to call repeatedly. + void prewarmWandSourceCache() { + if (!isWandSelectionActive) { + return; + } + unawaited(_getSelectedLayerFillImageData(sampleAllLayers: false)); } /// Erases a region on the canvas. @@ -672,6 +684,31 @@ extension AppProviderSelection on AppProvider { update(); } + /// Maps a horizontal screen drag [screenDx] from the wand sample anchor onto a + /// tolerance, starting from [startTolerance]. Dragging right loosens (grows) + /// the selection; dragging left tightens it. + int wandToleranceForDrag(final int startTolerance, final double screenDx) { + final int delta = (screenDx / AppInteraction.wandToleranceDragPixelsPerUnit).round(); + return (startTolerance + delta).clamp(AppMath.one, AppLimits.percentMax); + } + + /// Re-runs the Edge Detection wand selection at the fixed sample [position] + /// using [tolerance]. Drives the live "tap to sample, drag to grow/shrink" + /// gesture — each drag step resamples the same anchor at the new tolerance. + void wandSelectionResampleAt( + final Offset position, { + required final int tolerance, + required final bool sampleAllLayers, + }) { + if (selectorModel.mode != SelectorMode.wand) { + return; + } + this.tolerance = tolerance; + selectorModel.isDrawing = true; + wandSelection.queueRequest(position: position, sampleAllLayers: sampleAllLayers); + unawaited(_processPendingWandSelectionRequests()); + } + /// Translates the active selection by [screenDelta], a screen-space offset. void selectionTranslateByScreenDelta(final Offset screenDelta) { selectorModel.translate(screenDelta / layers.scale); diff --git a/lib/providers/app_provider_selection_effects.dart b/lib/providers/app_provider_selection_effects.dart index 374cf44e..41b08e03 100644 --- a/lib/providers/app_provider_selection_effects.dart +++ b/lib/providers/app_provider_selection_effects.dart @@ -100,7 +100,41 @@ extension AppProviderSelectionEffects on AppProvider { ); } + /// Captures the effect source image, mask path, and bounds for the current + /// target: the active selection when one is visible, otherwise the whole + /// active layer (without leaving a lingering select-all region). + /// + /// Returns null when the source image could not be produced. Callers own the + /// returned image and must dispose it. + Future<({ui.Image image, Path path, Rect bounds})?> _captureEffectTarget() async { + final bool hasSelection = selectorModel.isVisible && selectorModel.path1 != null; + + if (hasSelection) { + final ui.Image? clippedImage = await createSelectionImage(); + if (clippedImage == null) { + return null; + } + return ( + image: clippedImage, + path: Path.from(selectorModel.path1!), + bounds: selectorModel.path1!.getBounds(), + ); + } + + final Rect bounds = Offset.zero & layers.size; + return ( + image: layers.selectedLayer.toImageForStorage(layers.size), + path: Path()..addRect(bounds), + bounds: bounds, + ); + } + /// Starts live preview mode for the selected [effect], [strength], and [size]. + /// + /// Targets the active selection when one is visible; otherwise the effect + /// applies to the whole active layer. Used by the on-canvas overlay / bottom + /// sheet flow (the Brush section applies effects by painting them, so it does + /// not use this preview path). Future startEffectPreview( final SelectionEffect effect, { final double strength = AppEffects.defaultIntensity, @@ -110,21 +144,16 @@ extension AppProviderSelectionEffects on AppProvider { return; } - _ensureSelection(); - - final ui.Image? clippedImage = await createSelectionImage(); - if (clippedImage == null) { + final ({ui.Image image, Path path, Rect bounds})? target = await _captureEffectTarget(); + if (target == null) { return; } - final Path selectionPath = Path.from(selectorModel.path1!); - final Rect bounds = selectorModel.path1!.getBounds(); - effectPreviewModel.start( selectedEffect: effect, - selectionImage: clippedImage, - selectionPath: selectionPath, - selectionBounds: bounds, + selectionImage: target.image, + selectionPath: target.path, + selectionBounds: target.bounds, initialStrength: strength, initialSize: size ?? effect.defaultSize, ); @@ -195,4 +224,138 @@ extension AppProviderSelectionEffects on AppProvider { effectPreviewModel.previewImage = previewImage; update(); } + + /// Arms [effect] for painting onto the canvas, cancelling any Apply preview. + void armEffectBrush(final SelectionEffect effect) { + if (effectPreviewModel.isVisible) { + effectPreviewModel.clear(); + effectPreviewRenderVersion++; + } + effectBrushModel.arm(effect); + repaintToolOptions(); + update(); + } + + /// Disarms the paint effect (e.g. tapping the armed effect again). + void disarmEffectBrush() { + effectBrushModel.disarm(); + repaintToolOptions(); + update(); + } + + /// Updates the strength used by painted effect strokes. + void setEffectBrushStrength(final double strength) { + effectBrushModel.strength = strength; + repaintToolOptions(); + } + + /// Commits one painted effect stroke: applies [effect] to the brushed region + /// of the selected layer, masks it to the stroke band (and the active + /// selection, if any), and overlays the result as one undoable action. + /// + /// Cost scales with the brushed region, not the whole canvas, so this avoids + /// the full-canvas readback stall a layer-wide filter would incur. + Future commitEffectBrushStroke({ + required final SelectionEffect effect, + required final double strength, + required final double size, + required final List strokePoints, + required final Rect strokeBounds, + required final double brushSize, + required final Path? clipPath, + }) async { + if (isSelectedLayerLocked || strokePoints.length < AppMath.pair) { + return; + } + + final double rawRadius = brushSize * AppInteraction.smudgeBrushRadiusFactor; + final double radius = rawRadius > AppInteraction.smudgeMinimumRadius + ? rawRadius + : AppInteraction.smudgeMinimumRadius; + + final int canvasWidth = layers.size.width.toInt(); + final int canvasHeight = layers.size.height.toInt(); + final int left = (strokeBounds.left - radius).floor().clamp(AppMath.zero, canvasWidth); + final int top = (strokeBounds.top - radius).floor().clamp(AppMath.zero, canvasHeight); + final int right = (strokeBounds.right + radius).ceil().clamp(AppMath.zero, canvasWidth); + final int bottom = (strokeBounds.bottom + radius).ceil().clamp(AppMath.zero, canvasHeight); + final int width = right - left; + final int height = bottom - top; + if (width <= AppMath.zero || height <= AppMath.zero) { + return; + } + + final Rect regionRect = Rect.fromLTWH(left.toDouble(), top.toDouble(), width.toDouble(), height.toDouble()); + final ui.Image layerImage = await layers.captureLayerRegion(layers.selectedLayerIndex, regionRect); + final ui.Image processed = await effect.apply(layerImage, strength: strength, size: size); + if (identical(processed, layerImage)) { + // The effect is a no-op at this strength (e.g. a bipolar effect at its + // centre): apply() returned the source image untouched, so there is + // nothing to paint. Dispose the single image and bail — disposing it and + // then drawing it would crash with "non-genuine Image". + layerImage.dispose(); + return; + } + layerImage.dispose(); + + final Offset regionOrigin = Offset(left.toDouble(), top.toDouble()); + final Path bandPath = _effectBrushBandPath(strokePoints, regionOrigin, radius); + + // Clip the processed region to the brushed band (and the active selection): + // clipPath on a fillable path is the same masking idiom the Apply flow uses. + final ui.Image patch = await renderCanvasImage( + width: width, + height: height, + draw: (final ui.Canvas canvas) { + canvas.save(); + if (clipPath != null) { + canvas.clipPath(clipPath.shift(-regionOrigin), doAntiAlias: true); + } + canvas.clipPath(bandPath, doAntiAlias: true); + canvas.drawImage(processed, Offset.zero, ui.Paint()); + canvas.restore(); + }, + ); + processed.dispose(); + + undoProvider.executeAction( + name: effect.name, + forward: () { + layers.selectedLayer.addImage(imageToAdd: patch, offset: regionOrigin); + update(); + }, + backward: () { + layers.selectedLayer.undo(); + update(); + }, + ); + update(); + } + + /// Builds a fillable "capsule chain" path covering the brushed stroke, in + /// region-local coordinates: a disc of [radius] at every point plus a + /// [radius]-wide quad between consecutive points. Used to clip a painted + /// effect to the stroke footprint (a stroked polyline is not a fill region). + Path _effectBrushBandPath( + final List strokePoints, + final Offset regionOrigin, + final double radius, + ) { + final Path band = Path(); + for (final Offset point in strokePoints) { + band.addOval(Rect.fromCircle(center: point - regionOrigin, radius: radius)); + } + for (int i = AppMath.zero; i < strokePoints.length - AppMath.one; i++) { + final Offset a = strokePoints[i] - regionOrigin; + final Offset b = strokePoints[i + AppMath.one] - regionOrigin; + final Offset delta = b - a; + final double length = delta.distance; + if (length <= AppMath.zero) { + continue; + } + final Offset normal = Offset(-delta.dy, delta.dx) / length * radius; + band.addPolygon([a + normal, b + normal, b - normal, a - normal], true); + } + return band; + } } diff --git a/lib/widgets/canvas_gesture_handler.dart b/lib/widgets/canvas_gesture_handler.dart index 341a7992..b8961d3a 100644 --- a/lib/widgets/canvas_gesture_handler.dart +++ b/lib/widgets/canvas_gesture_handler.dart @@ -9,10 +9,12 @@ import 'package:fpaint/constants/constants.dart'; import 'package:fpaint/helpers/draft_flusher.dart'; import 'package:fpaint/helpers/image_helper.dart'; import 'package:fpaint/helpers/smudge_helper.dart'; +import 'package:fpaint/helpers/transform_helper.dart'; import 'package:fpaint/l10n/app_localizations.dart'; import 'package:fpaint/l10n/app_localizations_x.dart'; import 'package:fpaint/models/fill_model.dart'; import 'package:fpaint/models/image_placement_layer_restore_state.dart'; +import 'package:fpaint/models/selection_effect.dart'; import 'package:fpaint/models/selector_model.dart'; import 'package:fpaint/models/text_object.dart'; import 'package:fpaint/models/user_action_drawing.dart'; @@ -46,6 +48,11 @@ class _CanvasGestureHandlerState extends State { int _activePointerId = -1; final List _activePointers = []; double _baseDistance = 0.0; + + /// Whether the active gesture is a paint-mode effect stroke: it reuses the + /// pixel-brush gesture capture but commits the armed Adjust effect on + /// pointer-up instead of a smudge/blur dab. + bool _effectBrushStroke = false; Offset? _lastSelectionTapCanvasPosition; Duration? _lastSelectionTapTimestamp; @@ -83,6 +90,22 @@ class _CanvasGestureHandlerState extends State { int _smudgeSourceRegionTop = 0; List? _smudgeSourceSignature; int _smudgeSourceWidth = 0; + + /// Canvas-space sample anchor resampled on every wand drag step. + Offset? _wandDragAnchorCanvas; + + /// Screen-space anchor of the wand sample tap; horizontal drag distance from + /// here drives the live tolerance. Non-null only during a wand gesture. + Offset? _wandDragAnchorScreen; + + /// Last tolerance applied during the wand drag, to skip redundant resamples. + int? _wandDragLastAppliedTolerance; + + /// Whether the active wand gesture samples all visible layers. + bool _wandDragSampleAllLayers = false; + + /// Tolerance captured when the wand gesture began. + int _wandDragStartTolerance = AppDefaults.tolerance; @override void dispose() { // Free the per-session smudge source cache (a full-canvas CPU buffer). @@ -96,11 +119,20 @@ class _CanvasGestureHandlerState extends State { final AppPreferences appPreferences = AppPreferences.of(context); final ShellProvider shellProvider = ShellProvider.of(context); - return MouseRegion( - onExit: (final PointerExitEvent _) { - if (_activePointerId == -1 && appProvider.brushSizePreviewPosition != null) { - appProvider.hideDrawingToolPreview(); - } + return ListenableBuilder( + // Rebuild only the cursor wrapper when the tool / selector mode changes, + // keeping the (expensive) Listener gesture subtree built once. + listenable: appProvider.toolOptionsRepaintListenable, + builder: (final BuildContext _, final Widget? listenerChild) { + return MouseRegion( + cursor: _canvasCursor(appProvider), + onExit: (final PointerExitEvent _) { + if (_activePointerId == -1 && appProvider.brushSizePreviewPosition != null) { + appProvider.hideDrawingToolPreview(); + } + }, + child: listenerChild, + ); }, child: Listener( onPointerSignal: (final PointerSignalEvent event) { @@ -232,6 +264,15 @@ class _CanvasGestureHandlerState extends State { ), ); } + + /// The cursor shown over the canvas for the active tool. + /// + /// The Edge Detection (magic wand) selector uses a crosshair to signal + /// "click a point to sample a color region"; every other tool defers to the + /// default cursor (and to any overlay handles layered above the canvas). + MouseCursor _canvasCursor(final AppProvider appProvider) { + return appProvider.isWandSelectionActive ? SystemMouseCursors.precise : MouseCursor.defer; + } } /// Encapsulates a cropped raster patch and its destination bounds for diff --git a/lib/widgets/canvas_gesture_handler_pixel_brush.dart b/lib/widgets/canvas_gesture_handler_pixel_brush.dart index 45db0575..d15edf53 100644 --- a/lib/widgets/canvas_gesture_handler_pixel_brush.dart +++ b/lib/widgets/canvas_gesture_handler_pixel_brush.dart @@ -39,6 +39,7 @@ extension _CanvasGestureHandlerPixelBrushMethods on _CanvasGestureHandlerState { _pixelBrushLayerRestoreState = null; _pixelBrushClipPath = null; _pixelBrushStrokePatchBounds = null; + _effectBrushStroke = false; } /// Renders the whole smudge/blur stroke in one pass and commits it as an diff --git a/lib/widgets/canvas_gesture_handler_state_methods.dart b/lib/widgets/canvas_gesture_handler_state_methods.dart index 9170927c..babf87f1 100644 --- a/lib/widgets/canvas_gesture_handler_state_methods.dart +++ b/lib/widgets/canvas_gesture_handler_state_methods.dart @@ -147,6 +147,17 @@ extension _CanvasGestureHandlerStateMethods on _CanvasGestureHandlerState { appProvider.repaintViewport(); } + /// Whether a canvas gesture should create or extend a selection. + /// + /// The selector tool must be active with no transform overlay up, AND no + /// effect brush armed: an armed effect paints (clipped to the current + /// selection) just like any other brush, so it takes precedence over the + /// selector tool instead of starting a new marquee. + bool _isSelectionGesture(final AppProvider appProvider) => + appProvider.selectedAction == ActionType.selector && + !appProvider.transformModel.isVisible && + !appProvider.effectBrushModel.isArmed; + /// Finalizes an active pointer interaction and clears temporary drawing state. void _handlePointerEnd( final AppProvider appProvider, @@ -156,8 +167,7 @@ extension _CanvasGestureHandlerStateMethods on _CanvasGestureHandlerState { // Pair with beginStrokePreview: release the frozen baseline (no-op for tools // that never captured one, e.g. smudge/blur, which use the live preview). appProvider.layers.selectedLayer.clearStrokePreview(); - final bool isSelectionActive = - appProvider.selectedAction == ActionType.selector && !appProvider.transformModel.isVisible; + final bool isSelectionActive = _isSelectionGesture(appProvider); if (_activePointerId == event.pointer) { if (isSelectionActive) { @@ -166,19 +176,25 @@ extension _CanvasGestureHandlerStateMethods on _CanvasGestureHandlerState { if (appProvider.selectorModel.mode != SelectorMode.line || !appProvider.selectorModel.isDrawing) { _clearSelectionTapTracking(); } - } else if (_pixelBrushLayerRestoreState != null) { + } else if (_pixelBrushLayerRestoreState != null || _effectBrushStroke) { _appendPixelBrushPoint(appProvider.toCanvas(event.localPosition), appProvider.brushSize); // Marquee stays visible across the (async) one-shot render, switching to // a processing shimmer while the commit generates the image, then is - // cleared once the committed smudge/blur is on the layer. + // cleared once the committed stroke is on the layer. appProvider.setPixelBrushCommitting(committing: true); - await _commitPixelBrushStroke(appProvider); + if (_effectBrushStroke) { + await _commitEffectBrushStroke(appProvider); + } else { + await _commitPixelBrushStroke(appProvider); + } appProvider.clearPixelBrushGesture(); _clearSelectionTapTracking(); } else { _clearSelectionTapTracking(); } appProvider.hideDrawingToolPreview(); + appProvider.hideWandToleranceHud(); + _clearWandDragAnchor(); _activePointerId = -1; _clearPixelBrushStroke(); appProvider.layers.selectedLayer.clearCache(); @@ -191,6 +207,43 @@ extension _CanvasGestureHandlerStateMethods on _CanvasGestureHandlerState { } } + /// Starts a paint-mode effect stroke. Reuses the pixel-brush gesture capture + /// (points, bounds, marquee); the armed Adjust effect is committed on + /// pointer-up by [_commitEffectBrushStroke]. + void _startEffectBrushStroke( + final AppProvider appProvider, + final ui.Offset adjustedPosition, + ) { + _clearPixelBrushStroke(); + _effectBrushStroke = true; + _pixelBrushClipPath = appProvider.selectorModel.isVisible && appProvider.selectorModel.path1 != null + ? ui.Path.from(appProvider.selectorModel.path1!) + : null; + _appendPixelBrushPoint(adjustedPosition, appProvider.brushSize); + appProvider.showPixelBrushGesture( + points: _pixelBrushStrokePoints, + size: appProvider.brushSize, + ); + } + + /// Commits the active paint-mode effect stroke through the provider. + Future _commitEffectBrushStroke(final AppProvider appProvider) async { + final ui.Rect? patchBounds = _pixelBrushStrokePatchBounds; + final SelectionEffect? effect = appProvider.effectBrushModel.effect; + if (patchBounds == null || effect == null || _pixelBrushStrokePoints.length < AppMath.pair) { + return; + } + await appProvider.commitEffectBrushStroke( + effect: effect, + strength: appProvider.effectBrushModel.strength, + size: appProvider.effectBrushModel.size, + strokePoints: List.of(_pixelBrushStrokePoints), + strokeBounds: patchBounds, + brushSize: appProvider.brushSize, + clipPath: _pixelBrushClipPath, + ); + } + /// Handles pointer move events for drawing, selection, and eyedropper interactions. void _handlePointerMove( final AppProvider appProvider, @@ -201,8 +254,7 @@ extension _CanvasGestureHandlerStateMethods on _CanvasGestureHandlerState { } final Offset adjustedPosition = appProvider.toCanvas(event.localPosition); - final bool isSelectionActive = - appProvider.selectedAction == ActionType.selector && !appProvider.transformModel.isVisible; + final bool isSelectionActive = _isSelectionGesture(appProvider); if (appProvider.eyeDropPositionForBrush != null) { appProvider.eyeDropPositionForBrush = event.localPosition; @@ -224,11 +276,15 @@ extension _CanvasGestureHandlerStateMethods on _CanvasGestureHandlerState { if (event.buttons == 1 && _activePointerId == event.pointer) { if (isSelectionActive) { - appProvider.selectorCreationAdditionalPoint(adjustedPosition); + if (appProvider.selectorModel.mode == SelectorMode.wand) { + _updateWandToleranceFromDrag(appProvider, event.localPosition); + } else { + appProvider.selectorCreationAdditionalPoint(adjustedPosition); + } return; } - if (_pixelBrushLayerRestoreState != null) { + if (_pixelBrushLayerRestoreState != null || _effectBrushStroke) { // No live rasterization: just extend the gesture and redraw the swept- // band marquee. The smudge/blur is rendered once on pointer-up, so the // drag stays responsive at any canvas size and the marquee is the sole @@ -285,8 +341,7 @@ extension _CanvasGestureHandlerStateMethods on _CanvasGestureHandlerState { _activePointerId = event.pointer; - final bool isSelectionActive = - appProvider.selectedAction == ActionType.selector && !appProvider.transformModel.isVisible; + final bool isSelectionActive = _isSelectionGesture(appProvider); if (isSelectionActive) { _handleSelectionPointerStart(appProvider, event, adjustedPosition); return; @@ -322,10 +377,58 @@ extension _CanvasGestureHandlerStateMethods on _CanvasGestureHandlerState { if (_tryCloseStraightLineSelectionOnDoubleTap(appProvider, event, adjustedPosition)) { return; } + final bool sampleAllLayers = + appProvider.selectorModel.mode == SelectorMode.wand && _isSampleAllLayersModifierPressed(); + if (appProvider.selectorModel.mode == SelectorMode.wand) { + // Anchor the sample tap so a subsequent drag can grow/shrink the selection + // live (Edge Detection = tap to sample, drag on canvas to adjust). + _wandDragAnchorScreen = event.localPosition; + _wandDragAnchorCanvas = adjustedPosition; + _wandDragStartTolerance = appProvider.tolerance; + _wandDragSampleAllLayers = sampleAllLayers; + _wandDragLastAppliedTolerance = appProvider.tolerance; + appProvider.showWandToleranceHud(tolerance: appProvider.tolerance, position: event.localPosition); + } appProvider.selectorCreationStart( adjustedPosition, - sampleAllLayers: appProvider.selectorModel.mode == SelectorMode.wand && _isSampleAllLayersModifierPressed(), + sampleAllLayers: sampleAllLayers, + ); + } + + /// Adjusts the live wand tolerance from the horizontal drag since the sample + /// tap and resamples the fixed anchor, skipping resamples that don't change it. + void _updateWandToleranceFromDrag( + final AppProvider appProvider, + final Offset screenPosition, + ) { + final Offset? anchorScreen = _wandDragAnchorScreen; + final Offset? anchorCanvas = _wandDragAnchorCanvas; + if (anchorScreen == null || anchorCanvas == null) { + return; + } + final int tolerance = appProvider.wandToleranceForDrag( + _wandDragStartTolerance, + screenPosition.dx - anchorScreen.dx, ); + // Keep the HUD glued to the finger even when the tolerance value is unchanged. + appProvider.showWandToleranceHud(tolerance: tolerance, position: screenPosition); + if (tolerance == _wandDragLastAppliedTolerance) { + return; + } + triggerWandToleranceHaptic(_wandDragLastAppliedTolerance ?? tolerance, tolerance); + _wandDragLastAppliedTolerance = tolerance; + appProvider.wandSelectionResampleAt( + anchorCanvas, + tolerance: tolerance, + sampleAllLayers: _wandDragSampleAllLayers, + ); + } + + /// Clears the wand drag anchor once the gesture ends or is cancelled. + void _clearWandDragAnchor() { + _wandDragAnchorScreen = null; + _wandDragAnchorCanvas = null; + _wandDragLastAppliedTolerance = null; } /// Selects an existing text object under [adjustedPosition] or opens the text @@ -524,6 +627,11 @@ extension _CanvasGestureHandlerStateMethods on _CanvasGestureHandlerState { ) { appProvider.layers.selectedLayer.isUserDrawing = true; + if (appProvider.effectBrushModel.isArmed) { + _startEffectBrushStroke(appProvider, adjustedPosition); + return; + } + if (appProvider.selectedAction == ActionType.smudge) { _startPixelBrushStroke(appProvider, adjustedPosition, PixelBrushMode.smudge); return; diff --git a/lib/widgets/effect_intensity_controls.dart b/lib/widgets/effect_intensity_controls.dart index c49b398d..10151314 100644 --- a/lib/widgets/effect_intensity_controls.dart +++ b/lib/widgets/effect_intensity_controls.dart @@ -78,7 +78,7 @@ class _EffectIntensityControlsState extends State { label: effectLabel(widget.l10n, effect), value: _strength, valueLabel: '${(_strength * AppMath.percentScale).round()}%', - min: AppEffects.minIntensity, + min: effect.bipolar ? -AppEffects.maxIntensity : AppEffects.minIntensity, max: AppEffects.maxIntensity, onChanged: (final double value) async { setState(() => _strength = value); diff --git a/lib/widgets/main_view.dart b/lib/widgets/main_view.dart index 09fa6531..a84e413c 100644 --- a/lib/widgets/main_view.dart +++ b/lib/widgets/main_view.dart @@ -20,6 +20,7 @@ import 'package:fpaint/widgets/effect_preview_bottom_sheet.dart'; import 'package:fpaint/widgets/fill_widget.dart'; import 'package:fpaint/widgets/magnifying_eye_dropper.dart'; import 'package:fpaint/widgets/material_free.dart'; +import 'package:fpaint/widgets/overlay_control_widgets.dart'; import 'package:fpaint/widgets/selector_widget.dart'; import 'package:fpaint/widgets/text_editor.dart'; import 'package:fpaint/widgets/transform_widget.dart'; @@ -64,6 +65,10 @@ class MainViewState extends State { listenable: appProvider.mainViewCompositeListenable, builder: (final BuildContext _, final Widget? _) { final bool hasActiveTransformOverlay = appProvider.hasActiveTransformOverlay; + // The brush-size ring is a paint-tool affordance; the selector + // (incl. Edge Detection wand) never paints, so never show it there. + final bool showBrushSizePreview = + appProvider.isBrushSizePreviewVisible && appProvider.selectedAction != ActionType.selector; return Stack( children: [ @@ -98,7 +103,7 @@ class MainViewState extends State { ), ), - if (appProvider.isBrushSizePreviewVisible && appProvider.brushSizePreviewPosition == null) + if (showBrushSizePreview && appProvider.brushSizePreviewPosition == null) IgnorePointer( child: Center( child: _BrushSizePreviewOverlay( @@ -108,7 +113,7 @@ class MainViewState extends State { ), ), - if (appProvider.isBrushSizePreviewVisible && appProvider.brushSizePreviewPosition != null) + if (showBrushSizePreview && appProvider.brushSizePreviewPosition != null) Positioned( left: appProvider.brushSizePreviewPosition!.dx - @@ -124,6 +129,19 @@ class MainViewState extends State { ), ), + // Live Edge Detection tolerance readout, tagged near the + // finger while dragging to grow/shrink the wand selection. + if (appProvider.isWandToleranceHudVisible && appProvider.wandToleranceHudPosition != null) + Positioned( + left: appProvider.wandToleranceHudPosition!.dx + AppSpacing.large, + top: appProvider.wandToleranceHudPosition!.dy - AppSpacing.largest * AppMath.pair, + child: IgnorePointer( + child: buildOverlayFeedbackBubble( + label: '${appProvider.wandToleranceHudTolerance}%', + ), + ), + ), + if (!hasActiveTransformOverlay && appProvider.effectPreviewModel.isVisible && appProvider.effectPreviewModel.previewImage != null && diff --git a/lib/widgets/shell_selection_sub_toolbar.dart b/lib/widgets/shell_selection_sub_toolbar.dart index 93753ced..e97da2c8 100644 --- a/lib/widgets/shell_selection_sub_toolbar.dart +++ b/lib/widgets/shell_selection_sub_toolbar.dart @@ -131,6 +131,9 @@ Widget buildSelectionSubToolbar({ Future.microtask(() { appProvider.activateSelectionAction(); appProvider.setSelectorMode(SelectorMode.wand); + // Warm the source cache now so the first tap-and-drag is live, not + // stalled on the first sample's layer render + readback. + appProvider.prewarmWandSourceCache(); }); }, ), @@ -164,22 +167,19 @@ Widget buildSelectionSubToolbar({ Future.microtask(() => appProvider.regionCut()); }, ), - buildToolbarIconButton( - tooltip: l10n.toolReplace, - icon: AppIcon.selectorMathReplace, - interactionProfile: interactionProfile, - isSelected: appProvider.selectorModel.math == SelectorMath.replace, - onPressed: () { - Future.microtask(() => appProvider.setSelectorMath(SelectorMath.replace)); - }, - ), + // Add and Subtract are mutually-exclusive toggles. With both off the + // selection replaces the previous one ("New"); enabling one turns the + // other off, and tapping the active toggle returns to replace. buildToolbarIconButton( tooltip: l10n.toolAdd, icon: AppIcon.selectorMathAdd, interactionProfile: interactionProfile, isSelected: appProvider.selectorModel.math == SelectorMath.add, onPressed: () { - Future.microtask(() => appProvider.setSelectorMath(SelectorMath.add)); + final SelectorMath next = appProvider.selectorModel.math == SelectorMath.add + ? SelectorMath.replace + : SelectorMath.add; + Future.microtask(() => appProvider.setSelectorMath(next)); }, ), buildToolbarIconButton( @@ -188,7 +188,10 @@ Widget buildSelectionSubToolbar({ interactionProfile: interactionProfile, isSelected: appProvider.selectorModel.math == SelectorMath.remove, onPressed: () { - Future.microtask(() => appProvider.setSelectorMath(SelectorMath.remove)); + final SelectorMath next = appProvider.selectorModel.math == SelectorMath.remove + ? SelectorMath.replace + : SelectorMath.remove; + Future.microtask(() => appProvider.setSelectorMath(next)); }, ), buildToolbarIconButton( diff --git a/pubspec.yaml b/pubspec.yaml index 9f3b6450..2ff4e7c4 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -25,37 +25,37 @@ repository: https://github.com/vteam-com/fPaint homepage: https://github.com/vteam-com/fPaint issue_tracker: https://github.com/vteam-com/fPaint/issues -version: 1.8.9+1 +version: 1.9.0+1 environment: sdk: ">=3.12.0" flutter: ">=3.44.0" dependencies: - archive: ^4.0.9 - desktop_drop: ^0.7.1 - file_picker: ^11.0.2 + archive: 4.0.9 + desktop_drop: 0.7.1 + file_picker: 11.0.2 flutter: sdk: flutter flutter_localizations: sdk: flutter - flutter_svg: ^2.3.0 - image: ^4.9.1 + flutter_svg: 2.3.0 + image: 4.9.1 intl: any logging: any - multi_split_view: ^3.6.2 - pasteboard: ^0.5.0 + multi_split_view: 3.6.2 + pasteboard: 0.5.0 path_provider: 2.1.6 provider: any - shared_preferences: ^2.5.5 - url_launcher: ^6.3.2 + shared_preferences: 2.5.5 + url_launcher: 6.3.2 vector_math: any web: any xml: any dev_dependencies: - flutter_launcher_icons: ^0.14.4 - flutter_lints: ^6.0.0 + flutter_launcher_icons: 0.14.4 + flutter_lints: 6.0.0 flutter_test: sdk: flutter diff --git a/test/files/file_ora_test.dart b/test/files/file_ora_test.dart index 3f1d8824..48c6516f 100644 --- a/test/files/file_ora_test.dart +++ b/test/files/file_ora_test.dart @@ -1,3 +1,4 @@ +import 'dart:convert'; import 'dart:typed_data'; import 'dart:ui' as ui; @@ -225,6 +226,62 @@ void main() { expect(importedLayers.list[0].isLocked, isTrue); }); + test('createOraArchive round-trips the selected layer', () async { + final LayersProvider exportedLayers = LayersProvider(); + exportedLayers.size = const ui.Size(50, 50); + final LayerProvider layerA = exportedLayers.addTop(name: 'A')..backgroundColor = const Color(0xFF112233); + exportedLayers.addTop(name: 'B').backgroundColor = const Color(0xFF445566); + // Stack (top-first): B(0), A(1), background(2). Select the middle layer. + exportedLayers.selectedLayerIndex = exportedLayers.getLayerIndex(layerA); + + final List archiveData = await createOraArchive(exportedLayers); + final Archive archive = ZipDecoder().decodeBytes(archiveData); + final ArchiveFile stackFile = archive.files.firstWhere( + (final ArchiveFile file) => file.name == 'stack.xml', + ); + final XmlDocument xmlDoc = XmlDocument.parse(String.fromCharCodes(stackFile.content)); + + // Exactly one layer element carries selected="true", and it is layer A. + final Iterable selectedElements = xmlDoc + .findAllElements('layer') + .where((final XmlElement e) => e.getAttribute('selected') == 'true'); + expect(selectedElements.length, 1); + expect(selectedElements.single.getAttribute('name'), 'A'); + + final LayersProvider importedLayers = LayersProvider(); + await readOraFileFromBytes(importedLayers, Uint8List.fromList(archiveData)); + + expect(importedLayers.selectedLayer.name, 'A'); + expect(importedLayers.getLayerIndex(importedLayers.selectedLayer), 1); + }); + + test('readOraFileFromBytes defaults selection to first layer without a marker', () async { + final LayersProvider exportedLayers = LayersProvider(); + exportedLayers.size = const ui.Size(50, 50); + exportedLayers.addTop(name: 'Extra').backgroundColor = const Color(0xFF778899); + + final List archiveData = await createOraArchive(exportedLayers); + // Strip any selected markers to emulate an ORA written by another app. + final Archive archive = ZipDecoder().decodeBytes(archiveData); + final ArchiveFile stackFile = archive.files.firstWhere( + (final ArchiveFile file) => file.name == 'stack.xml', + ); + final String strippedStackXml = String.fromCharCodes(stackFile.content).replaceAll(' selected="true"', ''); + final Archive rebuilt = Archive(); + for (final ArchiveFile file in archive.files) { + if (file.name == 'stack.xml') { + rebuilt.addFile(ArchiveFile.bytes('stack.xml', utf8.encode(strippedStackXml))); + } else { + rebuilt.addFile(file); + } + } + + final LayersProvider importedLayers = LayersProvider(); + await readOraFileFromBytes(importedLayers, Uint8List.fromList(ZipEncoder().encode(rebuilt))); + + expect(importedLayers.selectedLayerIndex, 0); + }); + test('createOraArchive crops sparse layer PNGs and preserves offsets', () async { final LayersProvider exportedLayers = LayersProvider(); exportedLayers.clear(); diff --git a/test/files/file_tiff_test.dart b/test/files/file_tiff_test.dart index 2d52c8c4..3673aedf 100644 --- a/test/files/file_tiff_test.dart +++ b/test/files/file_tiff_test.dart @@ -146,6 +146,38 @@ void main() { expect(layers.get(1).isLocked, isFalse); }); + test('round-trips the selected layer', () async { + final LayersProvider layers = LayersProvider(); + layers.clear(); + layers.size = _layeredExportCanvasSize; + layers.addWhiteBackgroundLayer('Background'); + final LayerProvider foregroundLayer = layers.addTop(name: 'Foreground')..backgroundColor = Colors.red; + layers.addTop(name: 'Top').backgroundColor = Colors.green; + // Stack (top-first): Top(0), Foreground(1), Background(2). Select the middle. + layers.selectedLayerIndex = layers.getLayerIndex(foregroundLayer); + + final Uint8List bytes = await convertLayersToTiff(layers); + + final LayersProvider restored = LayersProvider(); + restored.clear(); + await readTiffFileFromBytes(restored, bytes); + + expect(restored.selectedLayer.name, 'Foreground'); + expect(restored.getLayerIndex(restored.selectedLayer), 1); + }); + + test('defaults selection to first layer for TIFFs without a selected marker', () async { + // test.tif is a third-party SketchBook file with no "selected" metadata, + // exercising the backward-compatible default path. + final LayersProvider layers = LayersProvider(); + layers.clear(); + + final Uint8List bytes = await File(_sampleSketchBookTiffPath).readAsBytes(); + await readTiffFileFromBytes(layers, bytes); + + expect(layers.selectedLayerIndex, 0); + }); + test('exports cropped layer rasters with preserved offsets', () async { final LayersProvider layers = LayersProvider(); layers.clear(); diff --git a/test/files/save_test.dart b/test/files/save_test.dart index f5215a14..bfa43966 100644 --- a/test/files/save_test.dart +++ b/test/files/save_test.dart @@ -1,4 +1,5 @@ import 'dart:io'; +import 'dart:ui' as ui; import 'package:flutter/foundation.dart'; import 'package:flutter/services.dart'; @@ -372,4 +373,55 @@ void main() { expect(backupFiles, isEmpty); }); }); + + group('saveFile remembers flat-format selection', () { + late Directory tempDirectory; + late AppPreferences preferences; + late ShellProvider shellProvider; + late LayersProvider layers; + late TargetPlatform? previousPlatform; + + setUp(() async { + previousPlatform = debugDefaultTargetPlatformOverride; + debugDefaultTargetPlatformOverride = TargetPlatform.linux; + + tempDirectory = await Directory.systemTemp.createTemp('fpaint_save_selection_test'); + SharedPreferences.setMockInitialValues({}); + + preferences = AppPreferences(); + await preferences.getPref(); + shellProvider = ShellProvider(); + layers = LayersProvider()..size = const ui.Size(8, 8); + // A fresh provider has one background layer; add a second so index 1 is valid. + layers.addTop(name: 'Top'); + layers.selectedLayerIndex = 1; + }); + + tearDown(() async { + debugDefaultTargetPlatformOverride = previousPlatform; + if (await tempDirectory.exists()) { + await tempDirectory.delete(recursive: true); + } + }); + + test('records the selected layer index for a PNG save', () async { + final String filePath = '${tempDirectory.path}/art.png'; + shellProvider.loadedFileName = filePath; + + await saveFile(shellProvider, layers, preferences); + + expect(await File(filePath).exists(), isTrue); + expect(preferences.lastSelectedLayerFor(filePath), 1); + }); + + test('does not record selection for a layered ORA save', () async { + final String filePath = '${tempDirectory.path}/art.ora'; + shellProvider.loadedFileName = filePath; + + await saveFile(shellProvider, layers, preferences); + + expect(await File(filePath).exists(), isTrue); + expect(preferences.lastSelectedLayerFor(filePath), isNull); + }); + }); } diff --git a/test/helpers/painting_test_helpers.dart b/test/helpers/painting_test_helpers.dart index 9ce9d1d4..c6063025 100644 --- a/test/helpers/painting_test_helpers.dart +++ b/test/helpers/painting_test_helpers.dart @@ -24,6 +24,7 @@ import 'package:fpaint/models/canvas_resize.dart'; import 'package:fpaint/models/effect_labels.dart'; import 'package:fpaint/models/fill_model.dart'; import 'package:fpaint/models/selection_effect.dart'; +import 'package:fpaint/models/selector_model.dart'; import 'package:fpaint/models/text_object.dart'; import 'package:fpaint/models/user_action_drawing.dart'; import 'package:fpaint/providers/app_provider.dart'; @@ -54,9 +55,6 @@ const Duration _effectControlsWaitPumpDuration = Duration(milliseconds: 16); /// Minimum number of vertices required to form a lasso selection polygon. const int _lassoSelectionMinimumPointCount = 3; -/// Tooltip label for selector math: replace current selection. -const String _selectorMathReplaceTooltip = 'Replace'; - /// Tooltip label for selector math: add to current selection. const String _selectorMathAddTooltip = 'Add'; @@ -955,11 +953,26 @@ Future selectWandArea( await _waitForWandSelectionIdle(tester, appProvider: appProvider); } -/// Sets selector math mode to replace. +/// Returns selector math to replace by toggling off whichever mode is active. +/// +/// There is no longer a dedicated "replace" button: replace is the state where +/// both Add and Subtract toggles are off, so tapping the active toggle restores +/// it. Future setSelectorMathReplace(final WidgetTester tester) async { await activateSelectorTool(tester); await tester.pump(); - await tapByTooltip(tester, _selectorMathReplaceTooltip); + final AppProvider appProvider = appProviderFromTester(tester); + switch (appProvider.selectorModel.math) { + case SelectorMath.add: + await tapByTooltip(tester, _selectorMathAddTooltip); + break; + case SelectorMath.remove: + await tapByTooltip(tester, _selectorMathRemoveTooltip); + break; + case SelectorMath.replace: + case SelectorMath.intersect: + break; + } await tester.pump(); } diff --git a/test/helpers/transform_helper_test.dart b/test/helpers/transform_helper_test.dart index 52c1e68d..0bc25859 100644 --- a/test/helpers/transform_helper_test.dart +++ b/test/helpers/transform_helper_test.dart @@ -1,6 +1,7 @@ import 'dart:ui' as ui; import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:fpaint/helpers/transform_helper.dart'; @@ -18,6 +19,29 @@ Future _createTestImage({ } void main() { + group('triggerWandToleranceHaptic', () { + const MethodChannel hapticChannel = MethodChannel('com.vteam.fpaint/haptic'); + + setUp(() { + TestWidgetsFlutterBinding.ensureInitialized(); + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger.setMockMethodCallHandler( + hapticChannel, + (final MethodCall _) async => null, + ); + }); + + tearDown(() { + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger.setMockMethodCallHandler(hapticChannel, null); + }); + + test('runs without error whether or not it crosses a snap interval', () { + // Same snap bucket -> no tick fired. + triggerWandToleranceHaptic(6, 7); + // Crosses a multiple of the snap interval -> fires the platform tick. + triggerWandToleranceHaptic(4, 9); + }); + }); + group('drawPerspectiveImage', () { test('draws without error for identity quad', () async { final ui.Image image = await _createTestImage(); diff --git a/test/l10n/app_localizations_test.dart b/test/l10n/app_localizations_test.dart index 0a1a1da0..bbb37cbb 100644 --- a/test/l10n/app_localizations_test.dart +++ b/test/l10n/app_localizations_test.dart @@ -64,8 +64,7 @@ void _exerciseAllStrings(final AppLocalizations l10n) { expect(l10n.effectGrayscale, isNotEmpty); expect(l10n.effectNoise, isNotEmpty); expect(l10n.effectPixelate, isNotEmpty); - expect(l10n.effectSharpen, isNotEmpty); - expect(l10n.effectSoften, isNotEmpty); + expect(l10n.effectSharpness, isNotEmpty); expect(l10n.effectVignette, isNotEmpty); expect(l10n.effects, isNotEmpty); expect(l10n.enterYourTextHere, isNotEmpty); @@ -138,7 +137,6 @@ void _exerciseAllStrings(final AppLocalizations l10n) { expect(l10n.toolHalftone, isNotEmpty); expect(l10n.toolLasso, isNotEmpty); expect(l10n.toolMagic, isNotEmpty); - expect(l10n.toolReplace, isNotEmpty); expect(l10n.toolAdd, isNotEmpty); expect(l10n.toolRemove, isNotEmpty); expect(l10n.effectIntensity, isNotEmpty); @@ -189,8 +187,8 @@ void _exerciseAllStrings(final AppLocalizations l10n) { expect(l10n.savedLabel, isNotEmpty); expect(l10n.savingLabel, isNotEmpty); expect(l10n.selectValue('all'), isNotEmpty); - expect(l10n.sidePanelBrushesSection, isNotEmpty); expect(l10n.sidePanelLayersSection, isNotEmpty); + expect(l10n.toolSectionBrush, isNotEmpty); expect(l10n.topColors('5'), isNotEmpty); } diff --git a/test/models/effect_brush_model_test.dart b/test/models/effect_brush_model_test.dart new file mode 100644 index 00000000..3d6d087c --- /dev/null +++ b/test/models/effect_brush_model_test.dart @@ -0,0 +1,26 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:fpaint/models/effect_brush_model.dart'; +import 'package:fpaint/models/selection_effect.dart'; + +void main() { + group('EffectBrushModel', () { + test('is armed exactly when an effect is set', () { + final EffectBrushModel model = EffectBrushModel(); + expect(model.isArmed, isFalse); + + model.arm(SelectionEffect.blur); + expect(model.isArmed, isTrue); + expect(model.effect, SelectionEffect.blur); + expect(model.size, SelectionEffect.blur.defaultSize); + }); + + test('disarm clears the effect', () { + final EffectBrushModel model = EffectBrushModel()..arm(SelectionEffect.hueSaturation); + + model.disarm(); + + expect(model.effect, isNull); + expect(model.isArmed, isFalse); + }); + }); +} diff --git a/test/models/selection_effect_test.dart b/test/models/selection_effect_test.dart index 5b11ba17..f30586a3 100644 --- a/test/models/selection_effect_test.dart +++ b/test/models/selection_effect_test.dart @@ -1,3 +1,4 @@ +import 'dart:typed_data'; import 'dart:ui'; import 'package:flutter_test/flutter_test.dart'; @@ -9,8 +10,8 @@ import 'package:fpaint/models/selection_effect.dart'; void main() { group('SelectionEffect enum', () { - test('has 11 values', () { - expect(SelectionEffect.values.length, 11); + test('has 10 values', () { + expect(SelectionEffect.values.length, 10); }); test('each has an icon', () { @@ -23,8 +24,8 @@ void main() { expect(SelectionEffect.blur.icon, AppIcon.effectBlur); }); - test('sharpen has the sharpen icon', () { - expect(SelectionEffect.sharpen.icon, AppIcon.effectSharpen); + test('sharpness has the sharpen icon', () { + expect(SelectionEffect.sharpness.icon, AppIcon.effectSharpen); }); test('pixelate has the pixelate icon', () { @@ -39,10 +40,6 @@ void main() { expect(SelectionEffect.noise.icon, AppIcon.effectNoise); }); - test('soften has the soften icon', () { - expect(SelectionEffect.soften.icon, AppIcon.effectSoften); - }); - test('vignette has the vignette icon', () { expect(SelectionEffect.vignette.icon, AppIcon.effectVignette); }); @@ -87,8 +84,8 @@ void main() { expect(effectLabel(l10n, SelectionEffect.blur), l10n.effectBlur); }); - test('sharpen returns localized sharpen label', () { - expect(effectLabel(l10n, SelectionEffect.sharpen), l10n.effectSharpen); + test('sharpness returns localized sharpness label', () { + expect(effectLabel(l10n, SelectionEffect.sharpness), l10n.effectSharpness); }); test('pixelate returns localized pixelate label', () { @@ -103,15 +100,77 @@ void main() { expect(effectLabel(l10n, SelectionEffect.noise), l10n.effectNoise); }); - test('soften returns localized soften label', () { - expect(effectLabel(l10n, SelectionEffect.soften), l10n.effectSoften); - }); - test('vignette returns localized vignette label', () { expect(effectLabel(l10n, SelectionEffect.vignette), l10n.effectVignette); }); }); + group('bipolar effects', () { + test('brightness, contrast and hue are bipolar; others are not', () { + expect(SelectionEffect.brightness.bipolar, isTrue); + expect(SelectionEffect.contrast.bipolar, isTrue); + expect(SelectionEffect.hueSaturation.bipolar, isTrue); + expect(SelectionEffect.sharpness.bipolar, isTrue); + expect(SelectionEffect.blur.bipolar, isFalse); + expect(SelectionEffect.grayscale.bipolar, isFalse); + expect(SelectionEffect.vignette.bipolar, isFalse); + }); + + test('brightness darkens on negative strength, brightens on positive, no-ops at centre', () async { + final PictureRecorder recorder = PictureRecorder(); + final Canvas canvas = Canvas(recorder); + canvas.drawRect(const Rect.fromLTWH(0, 0, 4, 4), Paint()..color = const Color(0xFF808080)); + final Image gray = await recorder.endRecording().toImage(4, 4); + addTearDown(gray.dispose); + + Future redAt(final Image image) async { + final ByteData data = (await image.toByteData(format: ImageByteFormat.rawRgba))!; + return data.getUint8(AppMath.rgbChannelRed); + } + + final Image brighter = await SelectionEffect.brightness.apply(gray, strength: AppEffects.maxIntensity); + final Image darker = await SelectionEffect.brightness.apply(gray, strength: -AppEffects.maxIntensity); + final Image centre = await SelectionEffect.brightness.apply(gray, strength: AppEffects.minIntensity); + addTearDown(brighter.dispose); + addTearDown(darker.dispose); + + const int mid = 0x80; + expect(await redAt(brighter), greaterThan(mid)); + expect(await redAt(darker), lessThan(mid)); + // Centre skips the transform and returns the original image untouched. + expect(await redAt(centre), mid); + }); + + test('sharpness blurs on negative, runs sharpen on positive, no-ops at centre', () async { + // Vertical hard edge: left half black, right half white (8x8). + final PictureRecorder recorder = PictureRecorder(); + final Canvas canvas = Canvas(recorder); + canvas.drawRect(const Rect.fromLTWH(0, 0, 4, 8), Paint()..color = const Color(0xFF000000)); + canvas.drawRect(const Rect.fromLTWH(4, 0, 4, 8), Paint()..color = const Color(0xFFFFFFFF)); + final Image edge = await recorder.endRecording().toImage(8, 8); + addTearDown(edge.dispose); + + final Image centre = await SelectionEffect.sharpness.apply(edge, strength: AppEffects.minIntensity); + // Centre is a no-op that returns the source image untouched. + expect(identical(centre, edge), isTrue); + + final Image blurred = await SelectionEffect.sharpness.apply(edge, strength: -AppEffects.maxIntensity); + final Image sharpened = await SelectionEffect.sharpness.apply(edge, strength: AppEffects.maxIntensity); + addTearDown(blurred.dispose); + addTearDown(sharpened.dispose); + + // Negative Sharpness blurs: white bleeds across the edge, so a black-side + // pixel next to the edge is no longer pure black. + final ByteData blurredData = (await blurred.toByteData(format: ImageByteFormat.rawRgba))!; + const int width = 8; + const int nearEdgeRed = (((4 * width) + 3) * 4) + 0; // pixel (x:3, y:4), red channel + expect(blurredData.getUint8(nearEdgeRed), greaterThan(0)); + + // Positive Sharpness runs the sharpen path (a distinct, non-identity result). + expect(identical(sharpened, edge), isFalse); + }); + }); + group('SelectionEffect.apply', () { test('each effect can apply to a small image', () async { // Create a small test image diff --git a/test/models/tool_descriptor_test.dart b/test/models/tool_descriptor_test.dart new file mode 100644 index 00000000..1e833cbc --- /dev/null +++ b/test/models/tool_descriptor_test.dart @@ -0,0 +1,88 @@ +import 'dart:ui'; + +import 'package:flutter_test/flutter_test.dart'; +import 'package:fpaint/l10n/app_localizations.dart'; +import 'package:fpaint/models/selection_effect.dart'; +import 'package:fpaint/models/tool_descriptor.dart'; +import 'package:fpaint/models/tool_family.dart'; +import 'package:fpaint/models/user_action_drawing.dart'; + +void main() { + late AppLocalizations l10n; + + setUp(() async { + l10n = await AppLocalizations.delegate.load(const Locale('en')); + }); + + group('gesture tools', () { + test('every rail gesture tool, including smudge, carries an action', () { + final List gestureActions = toolRail() + .where((final ToolDescriptor d) => d.action != null) + .map((final ToolDescriptor d) => d.action) + .toList(); + expect(gestureActions, contains(ActionType.smudge)); + }); + + test('blur is not a rail gesture tool (it appears as an effect)', () { + expect(kGestureToolOrder, contains(ActionType.smudge)); + expect(kGestureToolOrder, isNot(contains(ActionType.blurBrush))); + }); + }); + + group('toolLabel', () { + test('maps rail actions to their localized labels', () { + expect(toolLabel(l10n, ActionType.pencil), l10n.toolPencil); + expect(toolLabel(l10n, ActionType.brush), l10n.toolBrush); + expect(toolLabel(l10n, ActionType.smudge), l10n.toolSmudge); + expect(toolLabel(l10n, ActionType.line), l10n.toolLine); + expect(toolLabel(l10n, ActionType.rectangle), l10n.toolRectangle); + expect(toolLabel(l10n, ActionType.circle), l10n.toolCircle); + expect(toolLabel(l10n, ActionType.fill), l10n.toolPaintBucket); + expect(toolLabel(l10n, ActionType.eraser), l10n.toolEraser); + expect(toolLabel(l10n, ActionType.text), l10n.toolText); + }); + + test('falls back to the enum name for non-rail actions', () { + expect(toolLabel(l10n, ActionType.selector), ActionType.selector.name); + expect(toolLabel(l10n, ActionType.region), ActionType.region.name); + expect(toolLabel(l10n, ActionType.image), ActionType.image.name); + expect(toolLabel(l10n, ActionType.cut), ActionType.cut.name); + }); + }); + + group('toolRail and toolsInFamily', () { + test('rail contains every gesture tool and every effect', () { + expect(toolRail().length, kGestureToolOrder.length + SelectionEffect.values.length); + }); + + test('gesture entries come first and cover every gesture tool', () { + final List gestures = toolRail().where((final ToolDescriptor d) => d.action != null).toList(); + expect(gestures.length, kGestureToolOrder.length); + // Gesture tools lead the rail, effects follow. + expect(toolRail().take(kGestureToolOrder.length).every((final ToolDescriptor d) => d.action != null), isTrue); + }); + + test('effect entries cover every effect', () { + final List effects = toolRail().where((final ToolDescriptor d) => d.effect != null).toList(); + expect(effects.length, SelectionEffect.values.length); + }); + }); + + group('descriptors expose icon and label', () { + test('gesture descriptor mirrors its action', () { + const ToolDescriptor descriptor = ToolDescriptor.gesture(ActionType.smudge); + expect(descriptor.action, ActionType.smudge); + expect(descriptor.effect, isNull); + expect(descriptor.icon, ActionType.smudge.icon); + expect(descriptor.label(l10n), l10n.toolSmudge); + }); + + test('effect descriptor mirrors its effect', () { + const ToolDescriptor descriptor = ToolDescriptor.adjust(SelectionEffect.blur); + expect(descriptor.effect, SelectionEffect.blur); + expect(descriptor.action, isNull); + expect(descriptor.icon, SelectionEffect.blur.icon); + expect(descriptor.label(l10n), l10n.effectBlur); + }); + }); +} diff --git a/test/models/user_action_drawing_test.dart b/test/models/user_action_drawing_test.dart index f2363e02..bc9d9f2b 100644 --- a/test/models/user_action_drawing_test.dart +++ b/test/models/user_action_drawing_test.dart @@ -104,7 +104,7 @@ void main() { }); test('returns correct icon for smudge', () { - expect(ActionType.smudge.icon, AppIcon.effectBlur); + expect(ActionType.smudge.icon, AppIcon.smudge); }); test('returns correct icon for eraser', () { diff --git a/test/output/cc.txt b/test/output/cc.txt index 938b4391..c5577b4b 100644 --- a/test/output/cc.txt +++ b/test/output/cc.txt @@ -1 +1 @@ -85.6% +85.9% diff --git a/test/output/final.jpg b/test/output/final.jpg index 2f24e8bf..dc31fabb 100644 Binary files a/test/output/final.jpg and b/test/output/final.jpg differ diff --git a/test/output/final.ora b/test/output/final.ora index 81d951a2..2090bfea 100644 Binary files a/test/output/final.ora and b/test/output/final.ora differ diff --git a/test/output/final.png b/test/output/final.png index bf15123f..ce0421e9 100644 Binary files a/test/output/final.png and b/test/output/final.png differ diff --git a/test/output/final.tif b/test/output/final.tif index 7e7e4943..10fd4e92 100644 Binary files a/test/output/final.tif and b/test/output/final.tif differ diff --git a/test/output/final.webp b/test/output/final.webp index b1ea7960..f06cec86 100644 Binary files a/test/output/final.webp and b/test/output/final.webp differ diff --git a/test/output/unit_test_video.mp4 b/test/output/unit_test_video.mp4 index 6592d116..280064bd 100644 Binary files a/test/output/unit_test_video.mp4 and b/test/output/unit_test_video.mp4 differ diff --git a/test/painting_scenario_layers/paint_layer_lake.dart b/test/painting_scenario_layers/paint_layer_lake.dart index b01c1b47..be27714f 100644 --- a/test/painting_scenario_layers/paint_layer_lake.dart +++ b/test/painting_scenario_layers/paint_layer_lake.dart @@ -92,11 +92,12 @@ Future paintLayerLake(final PaintingScenarioSession session) async { strength: _pondReflectionBlurIntensity, ); - // Soften edges while the lake selection is active for a natural blend. + // Soften edges (negative Sharpness) while the lake selection is active for a + // natural blend. await applyEffectViaUi( session.tester, - SelectionEffect.soften, - strength: _pondRippleSoftenIntensity, + SelectionEffect.sharpness, + strength: -_pondRippleSoftenIntensity, ); expect( diff --git a/test/painting_scenario_layers/paint_layer_sun.dart b/test/painting_scenario_layers/paint_layer_sun.dart index 04b13ec2..99587bea 100644 --- a/test/painting_scenario_layers/paint_layer_sun.dart +++ b/test/painting_scenario_layers/paint_layer_sun.dart @@ -31,7 +31,7 @@ Future paintLayerSun(final PaintingScenarioSession session) async { sunAppProvider.update(); await session.tester.pump(); - await applyEffectViaUi(session.tester, SelectionEffect.soften, strength: _sunSoftenIntensity); + await applyEffectViaUi(session.tester, SelectionEffect.sharpness, strength: -_sunSoftenIntensity); sunAppProvider.selectorModel.clear(); sunAppProvider.update(); diff --git a/test/painting_scenario_layers/scenario_coverage_exercises.dart b/test/painting_scenario_layers/scenario_coverage_exercises.dart index 06889674..f3cbe9ca 100644 --- a/test/painting_scenario_layers/scenario_coverage_exercises.dart +++ b/test/painting_scenario_layers/scenario_coverage_exercises.dart @@ -2074,6 +2074,14 @@ Future _exerciseToleranceAndTopColors( } } + // Expand the collapsible top-colors section (collapsed by default). + final Finder topColorsToggle = find.byKey(Keys.toolPanelTopColorsToggle); + if (topColorsToggle.evaluate().isNotEmpty) { + await tester.ensureVisible(topColorsToggle.first); + await tapByKey(tester, Keys.toolPanelTopColorsToggle); + await pumpForUnitTestUiSettle(tester); + } + // Tap a top-colors color swatch if visible. final Finder topColorsWidget = find.byType(TopColors); if (topColorsWidget.evaluate().isNotEmpty) { diff --git a/test/panels/tools_panel_test.dart b/test/panels/tools_panel_test.dart index 32ac3a5e..87f62769 100644 --- a/test/panels/tools_panel_test.dart +++ b/test/panels/tools_panel_test.dart @@ -4,6 +4,7 @@ import 'package:fpaint/constants/constants.dart'; import 'package:fpaint/l10n/app_localizations.dart'; import 'package:fpaint/models/app_icon_enum.dart'; import 'package:fpaint/models/fill_model.dart'; +import 'package:fpaint/models/selection_effect.dart'; import 'package:fpaint/models/selector_model.dart'; import 'package:fpaint/models/user_action_drawing.dart'; import 'package:fpaint/panels/tools/tools_panel.dart'; @@ -255,6 +256,59 @@ void main() { }); }); + group('ToolsPanel Brush section', () { + testWidgets('tapping an effect arms it as a brush and reveals its controls', ( + final WidgetTester tester, + ) async { + await pumpToolsPanel(tester); + + expect(appProvider.effectBrushModel.isArmed, isFalse); + expect(appProvider.selectorModel.isVisible, isFalse); + + final Finder blurEffect = find.byKey(const ValueKey(SelectionEffect.blur)); + await tester.ensureVisible(blurEffect); + await tester.tap(blurEffect); + await tester.pumpAndSettle(); + + // The effect arms as a brush — no whole-region preview, no selection. + expect(appProvider.effectBrushModel.isArmed, isTrue); + expect(appProvider.effectBrushModel.effect, SelectionEffect.blur); + expect(appProvider.effectPreviewModel.isVisible, isFalse); + expect(find.byKey(Keys.effectPaintStrengthSlider), findsOneWidget); + expect(find.byKey(Keys.effectPaintSizeSlider), findsOneWidget); + + // Tapping the armed effect again disarms it. + await tester.ensureVisible(blurEffect); + await tester.tap(blurEffect); + await tester.pumpAndSettle(); + expect(appProvider.effectBrushModel.isArmed, isFalse); + }); + + testWidgets('arming an effect deselects the gesture tool; picking one disarms it', ( + final WidgetTester tester, + ) async { + await pumpToolsPanel(tester); + + // A gesture tool (fill, from setUp) is selected and no effect is armed. + expect(tester.widget(find.byKey(Keys.toolFill)).isSelected, isTrue); + + final Finder blurEffect = find.byKey(const ValueKey(SelectionEffect.blur)); + await tester.ensureVisible(blurEffect); + await tester.tap(blurEffect); + await tester.pumpAndSettle(); + + // Effect armed → the gesture tool no longer shows as selected. + expect(appProvider.effectBrushModel.isArmed, isTrue); + expect(tester.widget(find.byKey(Keys.toolFill)).isSelected, isFalse); + + // Picking a gesture tool disarms the effect and reselects the tool. + await tester.tap(find.byKey(Keys.toolFill)); + await tester.pumpAndSettle(); + expect(appProvider.effectBrushModel.isArmed, isFalse); + expect(tester.widget(find.byKey(Keys.toolFill)).isSelected, isTrue); + }); + }); + group('ToolsPanel sections', () { testWidgets('selection clipboard actions are not shown in side panel', ( final WidgetTester tester, diff --git a/test/providers/app_preferences_test.dart b/test/providers/app_preferences_test.dart index 6e0f1b39..20aaf56a 100644 --- a/test/providers/app_preferences_test.dart +++ b/test/providers/app_preferences_test.dart @@ -363,4 +363,66 @@ void main() { ); }); }); + + group('lastSelectedLayer', () { + test('returns null for an unknown path', () { + expect(preferences.lastSelectedLayerFor('/tmp/unknown.png'), isNull); + }); + + test('recordLastSelectedLayer stores the index for a path', () async { + await preferences.recordLastSelectedLayer('/tmp/a.png', 3); + expect(preferences.lastSelectedLayerFor('/tmp/a.png'), 3); + }); + + test('recordLastSelectedLayer overwrites an existing index', () async { + await preferences.recordLastSelectedLayer('/tmp/a.png', 3); + await preferences.recordLastSelectedLayer('/tmp/a.png', 1); + expect(preferences.lastSelectedLayerFor('/tmp/a.png'), 1); + }); + + test('recordLastSelectedLayer persists both parallel lists', () async { + await preferences.recordLastSelectedLayer('/tmp/a.png', 2); + final SharedPreferences prefs = await preferences.getPref(); + expect(prefs.getStringList(AppPreferences.keyLastLayerFiles), ['/tmp/a.png']); + expect(prefs.getStringList(AppPreferences.keyLastLayerIndices), ['2']); + }); + + test('recordLastSelectedLayer caps at maxRecentFiles, evicting the oldest', () async { + for (int i = 0; i < AppLimits.maxRecentFiles + 5; i++) { + await preferences.recordLastSelectedLayer('/tmp/file_$i.png', i); + } + // The oldest entry is evicted; the very first path is gone. + expect(preferences.lastSelectedLayerFor('/tmp/file_0.png'), isNull); + // The most recent entry is retained. + final int newest = AppLimits.maxRecentFiles + 4; + expect(preferences.lastSelectedLayerFor('/tmp/file_$newest.png'), newest); + final SharedPreferences prefs = await preferences.getPref(); + expect( + prefs.getStringList(AppPreferences.keyLastLayerFiles)!.length, + AppLimits.maxRecentFiles, + ); + }); + + test('loads persisted selections on re-init', () async { + SharedPreferences.setMockInitialValues({ + AppPreferences.keyLastLayerFiles: ['/tmp/a.png', '/tmp/b.jpg'], + AppPreferences.keyLastLayerIndices: ['4', '0'], + }); + final AppPreferences prefs2 = AppPreferences(); + await prefs2.getPref(); + expect(prefs2.lastSelectedLayerFor('/tmp/a.png'), 4); + expect(prefs2.lastSelectedLayerFor('/tmp/b.jpg'), 0); + }); + + test('ignores entries with an unparsable index on load', () async { + SharedPreferences.setMockInitialValues({ + AppPreferences.keyLastLayerFiles: ['/tmp/a.png', '/tmp/b.jpg'], + AppPreferences.keyLastLayerIndices: ['not-a-number', '2'], + }); + final AppPreferences prefs2 = AppPreferences(); + await prefs2.getPref(); + expect(prefs2.lastSelectedLayerFor('/tmp/a.png'), isNull); + expect(prefs2.lastSelectedLayerFor('/tmp/b.jpg'), 2); + }); + }); } diff --git a/test/providers/app_provider_selection_test.dart b/test/providers/app_provider_selection_test.dart index edf14ff6..136e7c89 100644 --- a/test/providers/app_provider_selection_test.dart +++ b/test/providers/app_provider_selection_test.dart @@ -551,6 +551,36 @@ void main() { expect(appProvider.effectPreviewModel.isVisible, isFalse); }); + test('targets the whole layer when no selection is visible', () async { + final int canvasWidth = appProvider.layers.width.toInt(); + final int canvasHeight = appProvider.layers.height.toInt(); + final Image layerImage = await createFilledLayerImage( + width: canvasWidth, + height: canvasHeight, + color: const Color(0xFF112233), + ); + addTearDown(layerImage.dispose); + appProvider.layers.selectedLayer.addImage(imageToAdd: layerImage); + + expect(appProvider.selectorModel.isVisible, isFalse); + + await appProvider.startEffectPreview(SelectionEffect.blur); + + expect(appProvider.effectPreviewModel.isVisible, isTrue); + // A layer-wide effect must not leave a lingering select-all region. + expect(appProvider.selectorModel.isVisible, isFalse); + + final Rect bounds = appProvider.effectPreviewModel.bounds!; + expect(bounds.width, appProvider.layers.width); + expect(bounds.height, appProvider.layers.height); + + await appProvider.confirmEffectPreview(); + + final UserActionDrawing committedAction = appProvider.layers.selectedLayer.actionStack.last; + expect(committedAction.action, ActionType.image); + expect(appProvider.effectPreviewModel.isVisible, isFalse); + }); + test('masks preview and commit to the selection shape', () async { final int canvasWidth = appProvider.layers.width.toInt(); final int canvasHeight = appProvider.layers.height.toInt(); @@ -618,6 +648,120 @@ void main() { }); }); + group('effect brush', () { + test('arming an effect exposes it and disarming clears it', () { + appProvider.armEffectBrush(SelectionEffect.blur); + expect(appProvider.effectBrushModel.isArmed, isTrue); + expect(appProvider.effectBrushModel.effect, SelectionEffect.blur); + + appProvider.setEffectBrushStrength(AppEffects.maxIntensity); + expect(appProvider.effectBrushModel.strength, AppEffects.maxIntensity); + + appProvider.disarmEffectBrush(); + expect(appProvider.effectBrushModel.isArmed, isFalse); + }); + + test('selecting a gesture tool disarms the effect brush (one active tool)', () { + appProvider.armEffectBrush(SelectionEffect.sharpness); + expect(appProvider.effectBrushModel.isArmed, isTrue); + + // Picking any tool cancels the armed effect brush so a stroke is never + // ambiguous (gesture tool vs. effect brush). + appProvider.selectedAction = ActionType.brush; + expect(appProvider.selectedAction, ActionType.brush); + expect(appProvider.effectBrushModel.isArmed, isFalse); + }); + + test('commitEffectBrushStroke overlays a masked effect patch as one undoable action', () async { + final int canvasWidth = appProvider.layers.width.toInt(); + final int canvasHeight = appProvider.layers.height.toInt(); + final Image layerImage = await createFilledLayerImage( + width: canvasWidth, + height: canvasHeight, + color: const Color(0xFF3366AA), + ); + addTearDown(layerImage.dispose); + appProvider.layers.selectedLayer.addImage(imageToAdd: layerImage); + + final int actionsBefore = appProvider.layers.selectedLayer.actionStack.length; + + await appProvider.commitEffectBrushStroke( + effect: SelectionEffect.blur, + strength: AppEffects.defaultIntensity, + size: AppEffects.minSize, + strokePoints: [const Offset(20, 20), const Offset(80, 60)], + strokeBounds: const Rect.fromLTRB(20, 20, 80, 60), + brushSize: 30, + clipPath: null, + ); + + expect(appProvider.layers.selectedLayer.actionStack.length, actionsBefore + 1); + final UserActionDrawing committed = appProvider.layers.selectedLayer.actionStack.last; + expect(committed.action, ActionType.image); + expect(committed.image, isNotNull); + expect(appProvider.undoProvider.canUndo, isTrue); + + // The patch must be masked to the brushed band: opaque along the stroke, + // transparent in the region corner away from it (guards against the + // whole-region-rectangle masking bug). + final Image patch = committed.image!; + final ByteData patchData = (await patch.toByteData(format: ImageByteFormat.rawRgba))!; + int alphaAt(final int x, final int y) => patchData.getUint8( + (((y * patch.width) + x) * AppMath.bytesPerPixel) + AppEffects.alphaChannelIndex, + ); + expect(alphaAt(45, 35), greaterThan(AppMath.zero)); + expect(alphaAt(2, 2), AppMath.zero); + + appProvider.undoProvider.undo(); + expect(appProvider.layers.selectedLayer.actionStack.length, actionsBefore); + }); + + test('commitEffectBrushStroke ignores strokes with fewer than two points', () async { + final int actionsBefore = appProvider.layers.selectedLayer.actionStack.length; + + await appProvider.commitEffectBrushStroke( + effect: SelectionEffect.blur, + strength: AppEffects.defaultIntensity, + size: AppEffects.minSize, + strokePoints: [const Offset(10, 10)], + strokeBounds: const Rect.fromLTRB(10, 10, 11, 11), + brushSize: 10, + clipPath: null, + ); + + expect(appProvider.layers.selectedLayer.actionStack.length, actionsBefore); + }); + + test('commitEffectBrushStroke is a safe no-op at centre strength (0)', () async { + final int canvasWidth = appProvider.layers.width.toInt(); + final int canvasHeight = appProvider.layers.height.toInt(); + final Image layerImage = await createFilledLayerImage( + width: canvasWidth, + height: canvasHeight, + color: const Color(0xFF808080), + ); + addTearDown(layerImage.dispose); + appProvider.layers.selectedLayer.addImage(imageToAdd: layerImage); + + final int actionsBefore = appProvider.layers.selectedLayer.actionStack.length; + + // A bipolar effect at centre (0) is a no-op: apply() returns the source + // image untouched. Must not crash (was "non-genuine Image") and must not + // commit anything. + await appProvider.commitEffectBrushStroke( + effect: SelectionEffect.brightness, + strength: AppEffects.minIntensity, + size: AppEffects.minSize, + strokePoints: [const Offset(20, 20), const Offset(80, 60)], + strokeBounds: const Rect.fromLTRB(20, 20, 80, 60), + brushSize: 30, + clipPath: null, + ); + + expect(appProvider.layers.selectedLayer.actionStack.length, actionsBefore); + }); + }); + group('getPathAdjustToCanvasSizeAndPosition', () { test('returns null for null path', () { expect(appProvider.getPathAdjustToCanvasSizeAndPosition(null), isNull); @@ -662,6 +806,31 @@ void main() { ); expect(appProvider.undoProvider.canUndo, isTrue); }); + + test('persists across a tool switch and clips the new tool to the selection', () { + // Make a selection while in selector mode. + appProvider.activateSelectionAction(); + appProvider.selectAll(); + expect(appProvider.selectorModel.isVisible, isTrue); + + // Switching to a gesture tool must NOT clear the selection. + appProvider.selectedAction = ActionType.brush; + expect(appProvider.selectedAction, ActionType.brush); + expect(appProvider.selectorModel.isVisible, isTrue); + + // A stroke on the gesture tool is clipped to the persistent selection. + appProvider.recordExecuteDrawingActionToSelectedLayer( + action: UserActionDrawing( + positions: [const Offset(0, 0), const Offset(10, 10)], + action: ActionType.brush, + brush: MyBrush(color: const Color(0xFF000000), size: 5), + ), + ); + + final UserActionDrawing recorded = appProvider.layers.selectedLayer.actionStack.last; + expect(recorded.clipPath, isNotNull); + expect(recorded.clipPath!.getBounds().width, appProvider.layers.width); + }); }); group('crop', () { diff --git a/test/providers/app_provider_tools_test.dart b/test/providers/app_provider_tools_test.dart index 032f857e..3e80e328 100644 --- a/test/providers/app_provider_tools_test.dart +++ b/test/providers/app_provider_tools_test.dart @@ -2,6 +2,8 @@ import 'dart:ui' as ui; import 'package:flutter/foundation.dart'; import 'package:flutter_test/flutter_test.dart'; +import 'package:fpaint/constants/app_interaction.dart'; +import 'package:fpaint/constants/app_limits.dart'; import 'package:fpaint/models/fill_model.dart'; import 'package:fpaint/models/selector_model.dart'; import 'package:fpaint/models/user_action_drawing.dart'; @@ -228,6 +230,94 @@ void main() { }); }); + group('Edge Detection wand drag-to-adjust', () { + late AppProvider appProvider; + + setUp(() async { + SharedPreferences.setMockInitialValues({}); + final AppPreferences preferences = AppPreferences(); + await preferences.getPref(); + appProvider = AppProvider(preferences: preferences); + appProvider.undoProvider.clear(); + appProvider.selectedAction = ActionType.selector; + appProvider.selectorModel.mode = SelectorMode.wand; + }); + + test('wandToleranceForDrag loosens dragging right and tightens dragging left', () { + const int start = 6; + const double perUnit = AppInteraction.wandToleranceDragPixelsPerUnit; + + // No movement keeps the starting tolerance. + expect(appProvider.wandToleranceForDrag(start, 0), start); + // Dragging right by 4 units raises tolerance by 4. + expect(appProvider.wandToleranceForDrag(start, perUnit * 4), start + 4); + // Dragging far left clamps to the minimum. + expect(appProvider.wandToleranceForDrag(start, -perUnit * 100), 1); + // Dragging far right clamps to the maximum. + expect(appProvider.wandToleranceForDrag(start, perUnit * 1000), AppLimits.percentMax); + }); + + test('wandSelectionResampleAt applies the tolerance and re-runs the selection', () async { + appProvider.wandSelectionResampleAt(const ui.Offset(10, 10), tolerance: 25, sampleAllLayers: false); + + expect(appProvider.tolerance, 25); + expect(appProvider.selectorModel.isDrawing, isTrue); + + // Let the queued async wand request settle; a selection should result. + int guard = 0; + while ((appProvider.wandSelection.isInProgress || appProvider.wandSelection.hasPendingRequest) && guard < 500) { + await Future.delayed(const Duration(milliseconds: 1)); + guard++; + } + expect(appProvider.selectorModel.path1, isNotNull); + }); + + test('wandSelectionResampleAt is a no-op outside wand mode', () { + appProvider.selectorModel.mode = SelectorMode.rectangle; + final int before = appProvider.tolerance; + + appProvider.wandSelectionResampleAt(const ui.Offset(10, 10), tolerance: 99, sampleAllLayers: false); + + expect(appProvider.tolerance, before); + }); + + test('wand tolerance HUD show/hide toggles visibility, value and position', () { + expect(appProvider.isWandToleranceHudVisible, isFalse); + + appProvider.showWandToleranceHud(tolerance: 20, position: const ui.Offset(30, 40)); + expect(appProvider.isWandToleranceHudVisible, isTrue); + expect(appProvider.wandToleranceHudTolerance, 20); + expect(appProvider.wandToleranceHudPosition, const ui.Offset(30, 40)); + + appProvider.hideWandToleranceHud(); + expect(appProvider.isWandToleranceHudVisible, isFalse); + expect(appProvider.wandToleranceHudTolerance, isNull); + expect(appProvider.wandToleranceHudPosition, isNull); + }); + + test('prewarmWandSourceCache is a no-op outside wand mode', () { + appProvider.selectorModel.mode = SelectorMode.rectangle; + + appProvider.prewarmWandSourceCache(); + + expect(appProvider.wandSelection.isInProgress, isFalse); + }); + + test('prewarmWandSourceCache warms the source so a later sample still selects', () async { + appProvider.prewarmWandSourceCache(); + await Future.delayed(const Duration(milliseconds: 50)); + + appProvider.wandSelectionResampleAt(const ui.Offset(10, 10), tolerance: 20, sampleAllLayers: false); + int guard = 0; + while ((appProvider.wandSelection.isInProgress || appProvider.wandSelection.hasPendingRequest) && guard < 500) { + await Future.delayed(const Duration(milliseconds: 1)); + guard++; + } + + expect(appProvider.selectorModel.path1, isNotNull); + }); + }); + group('appendLineFromLastUserAction', () { late AppProvider appProvider; diff --git a/test/widgets/pixel_brush_marquee_test.dart b/test/widgets/pixel_brush_marquee_test.dart index 2dbb1d4c..3a62a0cc 100644 --- a/test/widgets/pixel_brush_marquee_test.dart +++ b/test/widgets/pixel_brush_marquee_test.dart @@ -1,8 +1,11 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:fpaint/l10n/app_localizations.dart'; +import 'package:fpaint/models/selection_effect.dart'; +import 'package:fpaint/models/user_action_drawing.dart'; import 'package:fpaint/providers/app_preferences.dart'; import 'package:fpaint/providers/app_provider.dart'; +import 'package:fpaint/providers/app_provider_selection.dart'; import 'package:fpaint/providers/shell_provider.dart'; import 'package:fpaint/widgets/main_view.dart'; import 'package:provider/single_child_widget.dart'; @@ -83,6 +86,37 @@ void main() { expect(find.byWidgetPredicate(_isMarqueePaint), findsNothing); }); + testWidgets('an armed effect brush paints over a live selection instead of starting a new one', ( + final WidgetTester tester, + ) async { + // Selector tool active with a completed selection (the modifier), then an + // effect is armed as a brush. + appProvider.selectorModel + ..isVisible = true + ..path1 = (Path()..addRect(const Rect.fromLTWH(50, 50, 300, 300))); + appProvider.selectedAction = ActionType.selector; + appProvider.armEffectBrush(SelectionEffect.blur); + expect(appProvider.effectBrushModel.isArmed, isTrue); + + await pumpMainView(tester); + + // Pressing on the canvas must begin an effect-brush stroke (a pixel-brush + // gesture), not restart the selection. + final TestGesture gesture = await tester.startGesture(const Offset(600, 400)); + await tester.pump(); + await gesture.moveTo(const Offset(640, 430)); + await tester.pump(); + + expect(appProvider.isPixelBrushGestureVisible, isTrue); + expect(appProvider.selectorModel.isDrawing, isFalse); + // The selection (the clip modifier) is preserved. + expect(appProvider.selectorModel.isVisible, isTrue); + + // Release via touch-cancel so no async one-shot commit runs in the test. + await gesture.cancel(); + await tester.pump(); + }); + testWidgets('committing shows the processing shimmer instead of the static marquee', ( final WidgetTester tester, ) async { diff --git a/test/widgets/shortcuts_help_test.dart b/test/widgets/shortcuts_help_test.dart index ca31db0f..f51d86ef 100644 --- a/test/widgets/shortcuts_help_test.dart +++ b/test/widgets/shortcuts_help_test.dart @@ -142,7 +142,7 @@ void main() { expect(find.text('Add to Selection'), findsOneWidget); expect(find.text('Subtract from Selection'), findsOneWidget); expect(find.text('Intersect with Selection'), findsOneWidget); - expect(find.text('Magic Wand: Sample All Layers'), findsOneWidget); + expect(find.text('Edge Detection: Sample All Layers'), findsOneWidget); expect(find.text('Flood Fill: Sample All Layers'), findsOneWidget); // Shift key cap must appear for Add to Selection expect(find.text('Shift'), findsAtLeastNWidgets(1));