Skip to content

Commit acfecad

Browse files
Dim behind windows, Inspect sized to content, light-theme fixes, app-posed screenshots (2.4.1 unreleased)
Windows over the map - The main window darkens while Settings, Inspect, About or the update prompt is open; Settings > Appearance > Dim behind windows sets how much (45% default, 0 off). Every window over the map goes through a ShowModal helper that counts nesting. Shortcuts - Window widened to 980 and the keyboard scales to fill it; the list columns are weighted so every line fits, with wrapping as the fallback instead of trimming. Three lines shortened; Close centered. Fixes - Palette follows the theme: dark and light each use their own last pick or their default, instead of the last palette chosen anywhere. - Inspect window sizes its height to its content (width still saved). - Amber text readable in the light theme via a Link brush (deep amber on light surfaces): links, breadcrumbs, accent words, rich-text runs. - Files / Folders / Types buttons sit on the window color; Delete all saved scans is a red outline that fills red under the pointer. Under the hood - --scene <name> poses the window on the pretend PC as one of eleven README screenshots; --shot file.png captures it off the screen and exits; --size sets the client size. tools/screenshots.ps1 runs them all. Settings are frozen while posing; nothing on screen marks the pretend PC. MockSystem gains RecentScans for the start screen. - Update prompt preview uses this build's version and PreviousVersion from the csproj ("You have 2.4.0"). - Removed the browser mockup (docs/spacesharp-mock.js), its screenshot tool (tools/screenshot-mockup.html, screenshots.js) and CHANGELOG-1.x.md; references updated. - Brand assets gain docs/app-icon-256.png and -512.png (the tiled icon). - Version 2.4.1, PreviousVersion 2.4.0, README badge.
1 parent 81c683f commit acfecad

67 files changed

Lines changed: 618 additions & 1181 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.gitignore‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,3 @@ tools/.fonts/
3838

3939
# Website assets generated on demand (the site itself lives outside this repository)
4040
docs/m/
41-
tools/__pycache__/make-assets.cpython-313.pyc

‎CHANGELOG.md‎

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,24 @@
22

33
What changed in each SpaceSharp release from 2.0 on, newest first; the 1.x releases are on the [releases page](https://github.com/SpaceSharpApp/SpaceSharp/releases). A section marked unreleased is what the next version will say; the marker comes off when it ships, since the release script and the in-app What's new read the `## version` heading.
44

5+
## 2.4.1 (unreleased)
6+
7+
### Windows over the map
8+
- While Settings, Inspect, About or the update prompt is open, the window behind it darkens, so the open window stands out. Settings › Appearance › Dim behind windows sets how much (45% to start; 0 turns it off), and the change shows at once.
9+
10+
### Shortcuts
11+
- The Shortcuts window is wider, the keyboard scales to fill it, and the list under it gives the two longer groups more room, so every shortcut reads on one line; a line that still does not fit wraps instead of being cut off. Three of the lines are shorter ("Move the selection to the Recycle Bin", "Switch between the map and Insights", "Drives and largest items panel"), and the Close button is centered in the footer.
12+
13+
### Fixes
14+
- Switching themes kept the other theme's palette: going from dark to light left the map on Graphite instead of Pastel, and back again. Each theme now opens with its own last pick, or its default when there is none.
15+
- The Inspect window is as tall as its content: a folder with four rows under "Where the space is" no longer sits in a window with half a screen of empty space under the rows, and a long selection grows the window up to what the screen allows before it scrolls. Only the width is remembered now.
16+
- Amber text was hard to read in the light theme: links such as Open folder and Reload, the "Common:" suggestions under Leave out, breadcrumbs and the amber words in the start screen and the filter line. Text in amber uses a deep amber on light surfaces now (the dark theme is unchanged). The Files / Folders / Types buttons sit on the window color instead of a gray fill, which read heavy in the light theme, and Delete all saved scans is a red outline that fills red under the pointer, in both themes.
17+
18+
### Under the hood
19+
- The README screenshots come from the app itself now: `--scene <name>` poses the window on the pretend PC as one of the eleven pictures (the map, the drawer, Insights, color by change, Inspect, Settings, the right-click menu, the start screen, About, the update prompt, the light theme) and `--shot file.png` writes it and exits; `tools/screenshots.ps1` runs all of them. The settings are frozen during a pose.
20+
- The preview of the update prompt (Ctrl+Shift+Alt+U) offers this build's version and says "You have" the release before it, from `<PreviousVersion>` in the csproj, instead of a made-up version and "unknown".
21+
- The browser drawing of the window (docs/spacesharp-mock.js) and the screenshot tool built on it (tools/screenshot-mockup.html, tools/screenshots.js) are gone, since the app poses its own screenshots; `CHANGELOG-1.x.md` is gone too, the 1.x notes being on the GitHub releases.
22+
523
## 2.4.0
624

725
### Start screen
@@ -24,7 +42,7 @@ What changed in each SpaceSharp release from 2.0 on, newest first; the 1.x relea
2442

2543
### Under the hood
2644
- For trying the app without a scan: `--mock` starts on a pretend PC with the sample drive and drives from the screenshot mockup, Ctrl+Shift+Alt+M loads it in a running app, and Ctrl+Shift+Alt+U opens the update prompt with nothing behind it. None of the three are listed anywhere in the app.
27-
- The screenshot mockup (docs/spacesharp-mock.js) draws the new start screen, drawer, drive list, largest-items table and tab buttons, the Settings window as its own window with the sample-drive preview, the Custom palettes row, the Tone slider and the Light from tiles, the update prompt and What's new, and the Inspect age donut the way the app does, and takes its version from the page; the README screenshots, their mobile copies, the brand assets and the social preview are regenerated for 2.4, and the drawn README graphics (tools/readme-graphics.html, docs/readme-*.png) are gone, since the README no longer uses them.
45+
- The README screenshots, their mobile copies, the brand assets and the social preview are regenerated for 2.4, and the drawn README graphics (tools/readme-graphics.html, docs/readme-*.png) are gone, since the README no longer uses them.
2846

2947
### Fixes
3048
- Inspect's "By age" donut was drawn in four grays with no amber, because the accent was looked up before the window had a theme and came back empty; the bands run amber to gray again, in both themes. Its center showed a figure that was no slice (the two oldest bands added together, "over a year old", cut off mid-word); it shows the biggest band now, as the type donut shows its biggest type, and a label the hole cannot hold on one line wraps onto a second line instead of being trimmed. The band percentages are of the dated bytes, so they add up to 100% when some files carry no date.

‎CONTRIBUTING.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ Thanks for your interest. SpaceSharp is a small project, so the process is light
77
## Ways to help
88

99
- **Translate.** Text lives in `SpaceSharp.Core/Resources/Strings.resx` (English); `Strings.nb.resx` is the Norwegian bokmål translation and a good model. To add a language, copy it to `Strings.<culture>.resx` next to it (`Strings.nb.resx` for Norwegian bokmål, `Strings.de.resx` for German), translate the `<value>` elements, keep the `{0}` placeholders, and build. The language appears in Settings › Language by itself; nothing else has to be registered. `dotnet test` checks that every translation has the same keys and placeholders as the English file. Anything a translation lacks falls back to English. Keep file names, keyboard keys and the filter grammar (`over`, `older than`) in English; only the words around them are translated. Every file has a `Meta_MachineTranslated` entry: `true` means the file was machine-made and nobody who speaks the language has read it through, and Settings lists it under that label. The most useful translation contribution is not a new language but reading one of those through, fixing what reads wrong, and setting the entry to `false` in the same pull request.
10-
- **Screenshots** for the README, the website and store listings come from `tools/screenshot-mockup.html` (the engine is `docs/spacesharp-mock.js`, shared with the website), which draws the app with generic sample data so no real file names end up online. Open it in a browser, pick theme, palette and a scene (hover card, menu, filter drawer, Inspect, selection, zoomed folder, the panel under the map), and capture the window.
10+
- **Screenshots** for the README, the website and store listings come from the app itself on a pretend PC with generic sample data, so no real file names end up online: `.\tools\screenshots.ps1` poses and captures every scene (see DEVELOPING.md), or start the app with `--scene <name>` to look at one.
1111
- **Report bugs** and **suggest features** through the [issue forms](https://github.com/SpaceSharpApp/SpaceSharp/issues/new/choose). Clear steps and a screenshot go a long way.
1212
- **Add a palette.** Palettes are a name, a theme and twelve colors in `SpaceSharp/Util/Palette.cs`; see the Retro entry for the simplest form. Check it in every color mode, and in the theme it is for.
1313
- **Add file types.** Extensions and their categories live in `BuildExtensionMap()` in the same file.

‎DEVELOPING.md‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -81,22 +81,22 @@ Until 2.3.0 the Windows app was a separate WPF project; git history has it. Next
8181

8282
**Add a setting.** A property with a default in `SpaceSharp.Core/Util/AppSettings.cs` (and in `ResetToDefaults`), a row in `SettingsWindow.Build()`, and its effect in `MainWindow.ApplySettings()` or `ApplyLook()` if it changes the map. Map settings also show in the Settings preview, which runs through the same `ApplyLook`.
8383

84-
**Add or change an icon.** The icons are Lucide, as path geometry in `SpaceSharp/Themes/Icons.xaml`, which `tools/make-icons.py` generates: add a line to its `ICONS` table (app name, Lucide name) or a path to `CUSTOM`, run it, then use `{StaticResource Icon.Name}` on a `ToolButton`'s `Tag` or a `controls:Icon`'s `Glyph` in XAML, or `Icons.Get("Name")` / `Icons.Make("Name", size, "TextDim")` in code. `Controls/Icon.cs` draws any of them at any size with the stroke scaled along. The mockup's copies live in `docs/spacesharp-mock.js`; the drive pictures are picked by `Services/DriveKinds.cs`.
84+
**Add or change an icon.** The icons are Lucide, as path geometry in `SpaceSharp/Themes/Icons.xaml`, which `tools/make-icons.py` generates: add a line to its `ICONS` table (app name, Lucide name) or a path to `CUSTOM`, run it, then use `{StaticResource Icon.Name}` on a `ToolButton`'s `Tag` or a `controls:Icon`'s `Glyph` in XAML, or `Icons.Get("Name")` / `Icons.Make("Name", size, "TextDim")` in code. `Controls/Icon.cs` draws any of them at any size with the stroke scaled along.cs`.
8585

8686
**Add a shortcut.** `MainWindow.Window_PreviewKeyDown`, the list in `ShortcutsWindow.cs`, and the README's table.
8787

8888
**Add UI text.** Every string is a key in `SpaceSharp.Core/Resources/Strings.resx` with a Norwegian twin in `Strings.nb.resx`. `LocalizationTests` fails the build if a key used in code or XAML is missing. A new language is one more `Strings.<culture>.resx`; it appears in the language list on its own. Each translation file carries `Meta_MachineTranslated`: `AppLanguages.IsMachineTranslated` reads it, the Settings dropdown groups them under a "Machine translations" heading after the "Translations" group (the same grouped list as the palette picker, sharing the ComboGroupHeader template), and shows a note under the dropdown while such a language is active. Set it to `false` once a native speaker has read the file; English and Norwegian are the only reviewed ones today. Most of the machine-made files were produced in one pass from the English strings with the Windows terminology of each language; `Strings.nb.resx` is the model for tone.
8989

9090
**The icon.** The mark is an isometric amber block with a cube carved out of its front corner. Everything is generated from `tools/make-assets.py` (Python 3 with Pillow and cairosvg): the SVGs, the Windows icon on its rounded Graphite tile, the 256 px PNG the app shows, the header, the wordmark and the installer images (the MSI's banner and dialog art, "Facets", is a list of triangles in that file). Change the geometry or colors there, not in the files.
9191

92-
**Trying things without a scan.** `SpaceSharp.exe --mock` starts on a pretend PC: the sample drive the screenshot mockup draws (`SpaceSharp.Core/Services/MockSystem.cs`, the same names, sizes, dates and since-yesterday changes as `docs/spacesharp-mock.js`), with the mockup's five drives in the Drives list and "(mock)" in the title. Drive clicks and rescans stay on the pretend PC. Two hidden hotkeys in the main window do the same without restarting: Ctrl+Shift+Alt+M loads the pretend PC, and Ctrl+Shift+Alt+U opens the update prompt as if the next minor version were out, with canned notes and an Install that only plays the download. Neither is in the help text or the Shortcuts window.
92+
**Trying things without a scan.** `SpaceSharp.exe --mock` (or `dotnet run --project SpaceSharp -- --mock`) starts on a pretend PC: a sample drive with generic names, sizes, dates and since-yesterday changes (`SpaceSharp.Core/Services/MockSystem.cs`), with five pretend drives in the Drives list; nothing on screen marks it as pretend. Drive clicks and rescans stay on the pretend PC. Two hidden hotkeys in the main window do the same without restarting: Ctrl+Shift+Alt+M loads the pretend PC, and Ctrl+Shift+Alt+U opens the update prompt as if the next minor version were out, with canned notes and an Install that only plays the download. Neither is in the help text or the Shortcuts window.
9393

94-
**Screenshots.** `docs/spacesharp-mock.js` draws the window with sample data so no real file names end up online; the website (spacesharp.app, kept outside this repository) embeds it as the live preview and `tools/screenshot-mockup.html` wraps it in controls. Open the tool in a browser, pick a theme, palette and scene, and capture the window, or run `node tools/screenshots.js` (needs Playwright) to regenerate every PNG the README uses, then `python tools/make-mobile-shots.py` for the small WebP copies the website shows on phones (written to `docs/m/`, which is ignored by git; copy them and the PNGs into the site when they change). When the app's UI changes, the engine has to follow: it is a drawing, not a build of the app.
94+
**Screenshots.** The README pictures are the app itself, posed on the pretend PC: `.\tools\screenshots.ps1` builds Release, then starts `SpaceSharp.exe --scene <name> --shot docs\<file>.png --size 1600x900` for each of the eleven scenes (none, drawer, insights, compare, inspect, settings, menu, start, about, update, light; `MainWindow.Showcase.cs`), which pose the window and capture it off the screen on Windows, title bar, dialog and menu included, then exit. Pass scene names to redo a few. The monitor's scaling sets the pixel size (125% or 150% looks right on GitHub), and the settings are frozen during a run so a scene's theme or palette never sticks. Then `python tools/make-mobile-shots.py` for the small WebP copies the website shows on phones (written to `docs/m/`, which is ignored by git; copy them and the PNGs into the site when they change). The website (spacesharp.app, kept outside this repository) shows the same pictures. When a screen changes, redo its scene.
9595

9696
**Right-to-left.** `AppLanguages.ApplyDirection(window)` sets a window's `FlowDirection` to RightToLeft when the culture reads right to left; `TitleBarTheme.Attach` calls it, and every window goes through that, so a new window needs nothing beyond the `Attach` call it has anyway. Menus and tooltips inherit the direction from their window. (Overriding the property metadata instead fails: `Window`'s static constructor overrides it too.) `TreemapControl`, `DonutChart` and `Icon` pin themselves to LeftToRight because they draw with coordinates. When adding a control that draws with a DrawingContext or positions things by x, do the same, and prefer `HorizontalAlignment`/`TextAlignment` over fixed margins for anything that should swap sides. To try it without a translation, put `"Language": "ar"` in `%AppData%\SpaceSharp\settings.json` (the dropdown only lists languages that have a resx): the strings fall back to English, mirrored.
9797

9898
**Crash reporting.** The publish profiles embed the symbols (`DebugType` embedded), so the stack traces in a log name the file and line. `Util/CrashLog.cs` writes unexpected errors to `%LocalAppData%\SpaceSharp\logs` and builds the prefilled GitHub issue link; `App.xaml.cs` hooks the dispatcher, the AppDomain and unobserved tasks. To try it, press Ctrl+Alt+Shift+F12 in the main window (an exception on the UI thread) or Ctrl+Alt+Shift+F11 (one in a background task, which reaches the dialog when the finalizer notices it, so it can take a moment). Neither is in the shortcut list.
9999

100100
**Name, version and author** come from `SpaceSharp.csproj` and appear in About and in the exe's properties. Tag releases with the bare version number; the update window reads the changelog at that tag.
101101

102-
**Releasing.** Finish the changelog section (take "(unreleased)" off its heading), make sure `<Version>` matches and the version badge at the top of the README says the same (it is a static badge; the live one timed out behind GitHub's image proxy), run `python tools/make-assets.py` if the major.minor changed so the header badge follows, commit and push. Then, on the PC with the certificate (SimplySign Desktop signed in, or the card inserted), with `$env:GITHUB_TOKEN` set: `.\installer\release.ps1 -Sign <thumbprint> -Upload`. It runs `installer/release.ps1` in three stages: Build (tests, the four publishes, the app exes signed), Pack (vpk with everything inside the packages plus Setup.exe and Update.exe signed, the branded MSIs signed, the 1.x bridge files, a check of every signature) and Upload (a draft release). The thumbprint is the certificate's SHA-1 in certmgr.msc. Read the draft on GitHub, press Publish, then `git tag 2.3.0 && git push --tags` so the tag marks the released commit. GitHub Actions only runs the tests; nothing is built there. A broken run reaches nobody: installed copies only see published releases, and the draft is yours to delete.
102+
**Releasing.** Finish the changelog section (take "(unreleased)" off its heading), make sure `<Version>` matches (and move `<PreviousVersion>` to the release before it; the update prompt's preview and screenshot say "You have" that) and the version badge at the top of the README says the same (it is a static badge; the live one timed out behind GitHub's image proxy), run `python tools/make-assets.py` if the major.minor changed so the header badge follows, commit and push. Then, on the PC with the certificate (SimplySign Desktop signed in, or the card inserted), with `$env:GITHUB_TOKEN` set: `.\installer\release.ps1 -Sign <thumbprint> -Upload`. It runs `installer/release.ps1` in three stages: Build (tests, the four publishes, the app exes signed), Pack (vpk with everything inside the packages plus Setup.exe and Update.exe signed, the branded MSIs signed, the 1.x bridge files, a check of every signature) and Upload (a draft release). The thumbprint is the certificate's SHA-1 in certmgr.msc. Read the draft on GitHub, press Publish, then `git tag 2.3.0 && git push --tags` so the tag marks the released commit. GitHub Actions only runs the tests; nothing is built there. A broken run reaches nobody: installed copies only see published releases, and the draft is yours to delete.

‎README.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
</p>
99

1010
<p align="center">
11-
<a href="https://github.com/SpaceSharpApp/SpaceSharp/releases/latest"><img src="https://img.shields.io/badge/version-2.4.0-F5B82E" alt="Version 2.4.0"></a>
11+
<a href="https://github.com/SpaceSharpApp/SpaceSharp/releases/latest"><img src="https://img.shields.io/badge/version-2.4.1-F5B82E" alt="Version 2.4.1"></a>
1212
<a href="https://github.com/SpaceSharpApp/SpaceSharp/actions/workflows/tests.yml"><img src="https://github.com/SpaceSharpApp/SpaceSharp/actions/workflows/tests.yml/badge.svg?branch=main" alt="Test status"></a>
1313
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-F5B82E" alt="MIT License"></a>
1414
<img src="https://img.shields.io/badge/Windows-10%20%7C%2011-74A6CC" alt="Windows 10 and 11">

‎SpaceSharp.Core/Resources/Strings.ar.resx‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -768,6 +768,8 @@
768768
<data name="Settings_LookDark_Desc" xml:space="preserve"><value>ألوان النافذة واللوحات والقوائم عند عرض السمة الداكنة: Graphite أو Slate أو Mocha أو Midnight, GitHub Dark أو Carbon.</value></data>
769769
<data name="Settings_LookLight" xml:space="preserve"><value>المظهر الفاتح</value></data>
770770
<data name="Settings_LookLight_Desc" xml:space="preserve"><value>الشيء نفسه للسمة الفاتحة: Paper أو Linen أو Mist أو Sand, GitHub Light أو Snow.</value></data>
771+
<data name="Settings_DialogDim" xml:space="preserve"><value>تعتيم خلف النوافذ</value></data>
772+
<data name="Settings_DialogDim_Desc" xml:space="preserve"><value>مقدار تعتيم الخريطة أثناء فتح الإعدادات أو الفحص أو حول أو مطالبة التحديث فوقها. 0 يتركها كما هي.</value></data>
771773
<data name="Settings_LookMoved" xml:space="preserve"><value>لوحة الألوان والتظليل والنص</value></data>
772774
<data name="Settings_LookMoved_Desc" xml:space="preserve"><value>كل ما يخص مظهر الخريطة موجود في صفحة «الخريطة الشجرية»، بجانب معاينة.</value></data>
773775
<data name="Settings_Colors" xml:space="preserve"><value>الألوان</value></data>

0 commit comments

Comments
 (0)