From 189f2a9ec3bd62a130bbeaf243aa571d8af9b71f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Pra=C5=BAmo?= Date: Sun, 1 Feb 2026 20:31:23 +0100 Subject: [PATCH 01/41] Expand .gitignore ruleset --- .gitignore | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 58 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index b2ac38c22..09e58908d 100644 --- a/.gitignore +++ b/.gitignore @@ -12,15 +12,70 @@ *.res *.vs -# CMake output +# --- CMake output build -# Snap related +# --- Snap related /parts /prime /stage /*.snap /snap/.snapcraft/ /.cache/ -*~ /android/ + +# --- JetBrains IDEs (IntelliJ, CLion, Rider, PhpStorm, WebStorm, etc.) +.idea/ +*.iml +*.iws +*.ipr + +# --- Visual Studio Code +.vscode/ + +# --- Visual Studio +.vs/ +*.VC.db +*.VC.VC.opendb +*.user +*.userosscache +*.sln.docstates +*.vcxproj.user + +# --- Xcode / macOS +.DS_Store +.AppleDouble +.LSOverride +._* +.Spotlight-V100 +.Trashes +.VolumeIcon.icns +.fseventsd/ +*.xcworkspace +*.xcuserstate +*.xcuserdatad +*.xcuserdata + +# --- CMake generated files +CMakeFiles/ +CMakeCache.txt +cmake_install.cmake +Makefile +compile_commands.json + +# --- Windows garbage / temp +Thumbs.db +ehthumbs.db +Desktop.ini +$RECYCLE.BIN/ + +# --- Editor swap / temp files +*.swp +*.swo +*~ +*.tmp +*.temp +*.cache + +# --- GitHub CodeQL +_codeql_detected_source_root/ From ad7deede3b34286f1d630ec3aece246cd61b211b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Pra=C5=BAmo?= Date: Mon, 26 Jan 2026 00:21:34 +0000 Subject: [PATCH 02/41] Implement frame-limited redraw mechanism with 120 FPS cap Skip overlay updates when frame limiter prevents flip --- src/app/commands/cmd_undo.cpp | 6 ++--- src/app/ui/editor/editor.cpp | 4 ++-- src/she/sdl2/she.cpp | 11 ++++++++- src/ui/manager.cpp | 42 ++++++++++++++++++++++++++++++----- src/ui/manager.h | 19 ++++++++++++++-- src/ui/message_loop.cpp | 11 +++++++-- 6 files changed, 77 insertions(+), 16 deletions(-) diff --git a/src/app/commands/cmd_undo.cpp b/src/app/commands/cmd_undo.cpp index 87eaf9bca..c3b5faf9d 100644 --- a/src/app/commands/cmd_undo.cpp +++ b/src/app/commands/cmd_undo.cpp @@ -1,5 +1,5 @@ -// Aseprite -// Copyright (C) 2001-2015 David Capello +// Aseprite | Copyright (C) 2001-2015 David Capello +// LibreSprite | Copyright (C) 2016-2026 LibreSprite contributors // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License version 2 as @@ -88,7 +88,7 @@ void UndoCommand::onExecute(Context* context) current_editor->drawSpriteClipped( gfx::Region(gfx::Rect(0, 0, sprite->width(), sprite->height()))); - current_editor->manager()->flipDisplay(); + current_editor->manager()->requestRedraw(); base::this_thread::sleep_for(0.01); } } diff --git a/src/app/ui/editor/editor.cpp b/src/app/ui/editor/editor.cpp index 428f59e8f..d4f653f43 100644 --- a/src/app/ui/editor/editor.cpp +++ b/src/app/ui/editor/editor.cpp @@ -1,5 +1,5 @@ // Aseprite | Copyright (C) 2001-2016 David Capello -// LibreSprite | Copyright (C) 2021 LibreSprite contributors +// LibreSprite | Copyright (C) 2021-2026 LibreSprite contributors // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License version 2 as @@ -865,7 +865,7 @@ void Editor::flashCurrentLayer() m_document->setExtraCel(extraCel); drawSpriteClipped(gfx::Region( gfx::Rect(0, 0, m_sprite->width(), m_sprite->height()))); - manager()->flipDisplay(); + manager()->requestRedraw(); m_document->setExtraCel(oldExtraCel); } diff --git a/src/she/sdl2/she.cpp b/src/she/sdl2/she.cpp index 27a0a079a..0cdfdea29 100644 --- a/src/she/sdl2/she.cpp +++ b/src/she/sdl2/she.cpp @@ -1,5 +1,5 @@ // SHE library -// Copyright (C) 2021 LibreSprite contributors +// Copyright (C) 2021-2026 LibreSprite contributors // // This file is released under the terms of the MIT license. // Read LICENSE.txt for more information. @@ -448,6 +448,15 @@ namespace she { m_events.push(ev); } + // Drain excess SDL_MOUSEMOTION events, keeping only the most recent + { + SDL_Event nextEvent; + while (SDL_PeepEvents(&nextEvent, 1, SDL_GETEVENT, SDL_MOUSEMOTION, SDL_MOUSEMOTION) > 0) { + // Use the newer event, discarding the current one + sdlEvent = nextEvent; + } + } + event.setType(Event::MouseMove); event.setModifiers(getSheModifiers()); event.setPosition({ diff --git a/src/ui/manager.cpp b/src/ui/manager.cpp index 333691362..1e13be1b9 100644 --- a/src/ui/manager.cpp +++ b/src/ui/manager.cpp @@ -1,5 +1,6 @@ -// Aseprite UI Library -// Copyright (C) 2001-2016 David Capello +// UI Library +// Aseprite | Copyright (C) 2001-2016 David Capello +// LibreSprite | Copyright (C) 2016-2026 LibreSprite contributors // // This file is released under the terms of the MIT license. // Read LICENSE.txt for more information. @@ -92,6 +93,8 @@ Manager::Manager() , m_eventQueue(NULL) , m_lockedWindow(NULL) , m_mouseButtons(kButtonNone) + , m_redrawRequested(false) + , m_lastFlipTime(0.0) { if (!m_defaultManager) { // Empty lists @@ -177,6 +180,26 @@ void Manager::flipDisplay() if (!m_display) return; + // Frame-rate limiter: only flip at most 120 times per second + double currentTime = base::current_tick() / 1000.0; // Convert milliseconds to seconds + double timeSinceLastFlip = currentTime - m_lastFlipTime; + + if (timeSinceLastFlip < MIN_FRAME_INTERVAL) { + // Not enough time has passed, skip this flip but keep the redraw request + return; + } + + // Only proceed with flip if there's something to draw + if (m_dirtyRegion.isEmpty()) { + // No dirty regions means nothing to draw, but we should still clear the flag + // since we've processed the redraw request + m_redrawRequested = false; + return; + } + + // Update last flip time before drawing + m_lastFlipTime = currentTime; + OverlayManager* overlays = OverlayManager::instance(); update_cursor_overlay(); @@ -191,14 +214,20 @@ void Manager::flipDisplay() m_dirtyRegion, gfx::Region(gfx::Rect(0, 0, ui::display_w(), ui::display_h()))); - for (auto& rc : m_dirtyRegion) - m_display->flip(rc); - m_display->present(); + // Coalesce dirty regions into a single bounding rectangle + if (!m_dirtyRegion.isEmpty()) { + gfx::Rect boundingRect = m_dirtyRegion.bounds(); + m_display->flip(boundingRect); + m_display->present(); + } m_dirtyRegion.clear(); } overlays->restoreOverlappedAreas(); + + // Reset redraw request flag after successful flip + m_redrawRequested = false; } bool Manager::generateMessages() @@ -602,7 +631,8 @@ void Manager::handleWindowZOrder() void Manager::dispatchMessages() { pumpQueue(); - flipDisplay(); + // Request a redraw after dispatching messages + m_redrawRequested = true; } void Manager::addToGarbage(Widget* widget) diff --git a/src/ui/manager.h b/src/ui/manager.h index d3e6541ff..dd15b752c 100644 --- a/src/ui/manager.h +++ b/src/ui/manager.h @@ -1,5 +1,6 @@ -// Aseprite UI Library -// Copyright (C) 2001-2016 David Capello +// UI Library +// Aseprite | Copyright (C) 2001-2016 David Capello +// LibreSprite | Copyright (C) 2016-2026 LibreSprite contributors // // This file is released under the terms of the MIT license. // Read LICENSE.txt for more information. @@ -43,6 +44,9 @@ namespace ui { // Refreshes the real display with the UI content. void flipDisplay(); + // Request a redraw on the next frame + void requestRedraw() { m_redrawRequested = true; } + // Returns true if there are messages in the queue to be // distpatched through jmanager_dispatch_messages(). bool generateMessages(); @@ -97,6 +101,12 @@ namespace ui { m_invalidRegion |= b; } + // Check if a redraw was requested + bool isRedrawRequested() const { return m_redrawRequested; } + + // Get the dirty region + const gfx::Region& getDirtyRegion() const { return m_dirtyRegion; } + // Mark the given rectangle as a area to be flipped to the real // screen void dirtyRect(const gfx::Rect& bounds); @@ -179,6 +189,11 @@ namespace ui { // Current pressed buttons. MouseButtons m_mouseButtons; + + // Frame-limited redraw mechanism + bool m_redrawRequested; + double m_lastFlipTime; + static constexpr double MIN_FRAME_INTERVAL = 1.0 / 120.0; // 120 FPS max }; } // namespace ui diff --git a/src/ui/message_loop.cpp b/src/ui/message_loop.cpp index 8ddf1ad41..f5ba68ded 100644 --- a/src/ui/message_loop.cpp +++ b/src/ui/message_loop.cpp @@ -1,5 +1,6 @@ -// Aseprite UI Library -// Copyright (C) 2001-2013 David Capello +// UI Library +// Aseprite | Copyright (C) 2001-2013 David Capello +// LibreSprite | Copyright (C) 2016-2026 LibreSprite contributors // // This file is released under the terms of the MIT license. // Read LICENSE.txt for more information. @@ -27,6 +28,12 @@ void MessageLoop::pumpMessages() } else { m_manager->collectGarbage(); } + + // Call flipDisplay from the central location if a redraw was requested + if (m_manager->isRedrawRequested() || !m_manager->getDirtyRegion().isEmpty()) { + m_manager->flipDisplay(); + } + she::instance()->sleep(); } From 91ef716a1f31e42cd4bb2e0ee719d546eb7c19c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Pra=C5=BAmo?= Date: Tue, 3 Feb 2026 00:04:48 +0100 Subject: [PATCH 03/41] Modify GitHub PR/issue templates --- .github/ISSUE_TEMPLATE/bug_report.md | 12 ++++-------- .github/ISSUE_TEMPLATE/code_quality.md | 2 +- .github/ISSUE_TEMPLATE/config.yml | 6 ------ .github/ISSUE_TEMPLATE/documentation.md | 2 +- .github/ISSUE_TEMPLATE/feature_request.md | 22 ++++++++++++++++++++++ .github/PULL_REQUEST_TEMPLATE.md | 2 +- 6 files changed, 29 insertions(+), 17 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/config.yml create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 38fb237c4..7f39b1baf 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -2,17 +2,13 @@ name: Bug report about: Create a report to help us improve title: '' -labels: unconfirmed bug +labels: bug assignees: '' --- -##### LibreSprite version - - -- [ ] I am using the latest release or a build from latest commits. -- [ ] I am not using the Flatpak. (If you are, please raise an issue [here](https://github.com/flathub/com.github.libresprite.LibreSprite/issues). +##### Spritefinity version + ``` diff --git a/.github/ISSUE_TEMPLATE/code_quality.md b/.github/ISSUE_TEMPLATE/code_quality.md index 2350e6f93..607fb58dd 100644 --- a/.github/ISSUE_TEMPLATE/code_quality.md +++ b/.github/ISSUE_TEMPLATE/code_quality.md @@ -2,7 +2,7 @@ name: Code quality about: Have you seen bad code? Click here title: '' -labels: code quality +labels: code-ql assignees: '' --- diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml deleted file mode 100644 index 71a5272dc..000000000 --- a/.github/ISSUE_TEMPLATE/config.yml +++ /dev/null @@ -1,6 +0,0 @@ -blank_issues_enabled: false - -contact_links: - - name: Feature request - url: https://github.com/LibreSprite/LibreSprite-proposals/issues/ - about: Please submit feature proposals and discussions (meta and not) on the LibreSprite proposals repository diff --git a/.github/ISSUE_TEMPLATE/documentation.md b/.github/ISSUE_TEMPLATE/documentation.md index 6cf272833..fbb245318 100644 --- a/.github/ISSUE_TEMPLATE/documentation.md +++ b/.github/ISSUE_TEMPLATE/documentation.md @@ -2,7 +2,7 @@ name: Documentation about: Something wrong with the docs? Tell us here title: '' -labels: documentation +labels: docs assignees: '' --- diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 000000000..230e6c71e --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,22 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: feature +assignees: '' + +--- + +##### Is your feature request related to a problem? Please describe + + +##### Describe the solution you'd like + + +##### Describe alternatives you've considered + + +##### Additional context + \ No newline at end of file diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index dc4058bd9..1e39d634d 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -6,7 +6,7 @@ Add compact, short information about your PR for easier understanding: - Goal of the PR - How does the PR work? - Does it resolve any reported issue? -- If not a bug fix, why is this PR needed? What usecases does it solve? +- If not a bug fix, why is this PR needed? What use-cases does it solve? ## How to test From d49a5fe2ecce57d1fa562afe139f73bef66efd2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Pra=C5=BAmo?= Date: Tue, 3 Feb 2026 00:09:50 +0100 Subject: [PATCH 04/41] Remove SECURITY.md --- SECURITY.md | 22 ---------------------- 1 file changed, 22 deletions(-) delete mode 100644 SECURITY.md diff --git a/SECURITY.md b/SECURITY.md deleted file mode 100644 index aeb5bdb2e..000000000 --- a/SECURITY.md +++ /dev/null @@ -1,22 +0,0 @@ -# Security Policy - -## Supported Versions - -| Version | Supported | -| ------- | ------------------ | -| 1.0 | :white_check_mark: | - - - -## Reporting a Vulnerability - -If a vulnerability has been found: - -1. Go to the issues tab: https://github.com/LibreSprite/LibreSprite/issues -2. Write a full description of the problem -3. Add some screenshots and write your operating system version and device specifications - - -If there wasn't a response from the developers for a long period of time, you can go to the following links: -https://discord.com/invite/95gbyU5 -https://www.reddit.com/r/LibreSprite/ From b756196f69e1af2d9d4113e10797783bc0c41757 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Pra=C5=BAmo?= Date: Tue, 3 Feb 2026 00:45:44 +0100 Subject: [PATCH 05/41] Add type fields to the issue templates --- .github/ISSUE_TEMPLATE/bug_report.md | 1 + .github/ISSUE_TEMPLATE/code_quality.md | 1 + .github/ISSUE_TEMPLATE/documentation.md | 1 + .github/ISSUE_TEMPLATE/feature_request.md | 1 + 4 files changed, 4 insertions(+) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 7f39b1baf..a33e5b54e 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -3,6 +3,7 @@ name: Bug report about: Create a report to help us improve title: '' labels: bug +type: Bug assignees: '' --- diff --git a/.github/ISSUE_TEMPLATE/code_quality.md b/.github/ISSUE_TEMPLATE/code_quality.md index 607fb58dd..d3631ca1f 100644 --- a/.github/ISSUE_TEMPLATE/code_quality.md +++ b/.github/ISSUE_TEMPLATE/code_quality.md @@ -3,6 +3,7 @@ name: Code quality about: Have you seen bad code? Click here title: '' labels: code-ql +type: Task assignees: '' --- diff --git a/.github/ISSUE_TEMPLATE/documentation.md b/.github/ISSUE_TEMPLATE/documentation.md index fbb245318..1c027fe90 100644 --- a/.github/ISSUE_TEMPLATE/documentation.md +++ b/.github/ISSUE_TEMPLATE/documentation.md @@ -3,6 +3,7 @@ name: Documentation about: Something wrong with the docs? Tell us here title: '' labels: docs +type: Task assignees: '' --- diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 230e6c71e..12596b5eb 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -3,6 +3,7 @@ name: Feature request about: Suggest an idea for this project title: '' labels: feature +type: Feature assignees: '' --- From f80578bffd7f8c3a9437537cd195d3e884ef6390 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Pra=C5=BAmo?= Date: Tue, 3 Feb 2026 01:18:24 +0100 Subject: [PATCH 06/41] Rewrite GitHub issue templates into YAML --- .github/ISSUE_TEMPLATE/1-bug-report.yml | 80 ++++++++++++++++++++ .github/ISSUE_TEMPLATE/2-feature-request.yml | 38 ++++++++++ .github/ISSUE_TEMPLATE/3-code-quality.yml | 30 ++++++++ .github/ISSUE_TEMPLATE/4-documentation.yml | 32 ++++++++ .github/ISSUE_TEMPLATE/bug_report.md | 37 --------- .github/ISSUE_TEMPLATE/code_quality.md | 17 ----- .github/ISSUE_TEMPLATE/config.yml | 1 + .github/ISSUE_TEMPLATE/documentation.md | 11 --- .github/ISSUE_TEMPLATE/feature_request.md | 23 ------ .github/PULL_REQUEST_TEMPLATE.md | 12 --- .github/pull_request_template.md | 13 ++++ 11 files changed, 194 insertions(+), 100 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE/1-bug-report.yml create mode 100644 .github/ISSUE_TEMPLATE/2-feature-request.yml create mode 100644 .github/ISSUE_TEMPLATE/3-code-quality.yml create mode 100644 .github/ISSUE_TEMPLATE/4-documentation.yml delete mode 100644 .github/ISSUE_TEMPLATE/bug_report.md delete mode 100644 .github/ISSUE_TEMPLATE/code_quality.md create mode 100644 .github/ISSUE_TEMPLATE/config.yml delete mode 100644 .github/ISSUE_TEMPLATE/documentation.md delete mode 100644 .github/ISSUE_TEMPLATE/feature_request.md delete mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 .github/pull_request_template.md diff --git a/.github/ISSUE_TEMPLATE/1-bug-report.yml b/.github/ISSUE_TEMPLATE/1-bug-report.yml new file mode 100644 index 000000000..f0fdf2c77 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/1-bug-report.yml @@ -0,0 +1,80 @@ +name: Bug report +description: Report a bug you've encountered +labels: ["bug"] +projects: ["veritaware/6"] +assignees: + - nidrax +type: Bug +body: + - type: input + id: version + attributes: + label: Spritefinity version + description: Paste Spritefinity version between quotes down below. You'll find it in the bottom left corner when you open the software. If you're on a dev version, specify the commit hash + placeholder: e.g., "v1.2.3" or "abcdefg" + validations: + required: true + - type: textarea + id: bug-description + attributes: + label: Bug description + description: A clear and concise description of what the bug is + placeholder: e.g., "When I try to export a sprite sheet, the software crashes" + validations: + required: true + - type: textarea + id: steps-to-reproduce + attributes: + label: Steps to reproduce + description: Steps to reproduce the behaviour + placeholder: e.g., "1. Open Spritefinity\n2. Load a project\n3. Click on Export\n4. See error" + validations: + required: true + - type: textarea + id: expected-behaviour + attributes: + label: Expected behaviour + description: A clear and concise description of what you expected to happen + placeholder: e.g., "The sprite sheet should export without errors" + validations: + required: true + - type: input + id: os + attributes: + label: Operative System + description: The operative system you're using (e.g., Windows 10, macOS 11.2, Ubuntu 20.04) + placeholder: e.g., "Windows 10" + validations: + required: false + - type: input + id: cpu + attributes: + label: CPU + description: The CPU model of your computer (e.g., Intel Core i7-9700K, AMD Ryzen 5 3600) + placeholder: e.g., "Intel Core i7-9700K" + validations: + required: false + - type: input + id: gpu + attributes: + label: GPU + description: The GPU model of your computer (e.g., NVIDIA GeForce RTX 2070, AMD Radeon RX 5700 XT). Only needed for graphical issues + placeholder: e.g., "NVIDIA GeForce RTX 2070" + validations: + required: false + - type: textarea + id: screenshots + attributes: + label: Screenshots + description: Screenshots or videos to help explain your problem + placeholder: e.g., "![screenshot](url_to_screenshot)" + validations: + required: false + - type: textarea + id: additional-context + attributes: + label: Additional context + description: Add any other context about the problem here + placeholder: e.g., "I noticed this issue started happening after I updated to the latest version" + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/2-feature-request.yml b/.github/ISSUE_TEMPLATE/2-feature-request.yml new file mode 100644 index 000000000..8580dbcee --- /dev/null +++ b/.github/ISSUE_TEMPLATE/2-feature-request.yml @@ -0,0 +1,38 @@ +name: Feature request +description: Suggest an idea for this project +labels: ["feature"] +projects: ["veritaware/6"] +type: Feature +body: + - type: textarea + id: problem-description + attributes: + label: Is your feature request related to a problem? Please describe + description: A clear and concise description of what the problem is + placeholder: e.g., "I'm always frustrated when I have to manually export each layer individually" + validations: + required: true + - type: textarea + id: solution-description + attributes: + label: Describe the solution you'd like + description: A clear and concise description of what you want to happen + placeholder: e.g., "Add a 'Batch Export Layers' feature that exports all layers at once" + validations: + required: true + - type: textarea + id: alternatives + attributes: + label: Describe alternatives you've considered + description: A clear and concise description of any alternative solutions or features you've considered + placeholder: e.g., "I considered using a script, but it would be better to have a built-in feature" + validations: + required: false + - type: textarea + id: additional-context + attributes: + label: Additional context + description: Add any other context or screenshots about the feature request here + placeholder: e.g., "Other sprite editors like X and Y have this feature" + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/3-code-quality.yml b/.github/ISSUE_TEMPLATE/3-code-quality.yml new file mode 100644 index 000000000..397fa45b1 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/3-code-quality.yml @@ -0,0 +1,30 @@ +name: Code quality +description: Have you seen bad code? Click here +labels: ["code-ql"] +projects: ["veritaware/6"] +type: Task +body: + - type: textarea + id: code-problem + attributes: + label: What's wrong with the code? + description: A clear and concise description of the poor quality you've noticed + placeholder: e.g., "The function X has too many parameters and is hard to understand" + validations: + required: true + - type: textarea + id: improvement-suggestion + attributes: + label: How should it be improved? + description: A clear and concise description of what you think is a better approach + placeholder: e.g., "Refactor the function to use a configuration object instead of multiple parameters" + validations: + required: true + - type: textarea + id: additional-context + attributes: + label: Additional context + description: Add any other context about the issue here + placeholder: e.g., "This code is in the file src/app/main.cpp" + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/4-documentation.yml b/.github/ISSUE_TEMPLATE/4-documentation.yml new file mode 100644 index 000000000..fda947a74 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/4-documentation.yml @@ -0,0 +1,32 @@ +name: Documentation +description: Something wrong with the docs? Tell us here +labels: ["docs"] +projects: ["veritaware/6"] +assignees: + - copilot +type: Task +body: + - type: textarea + id: documentation-issue + attributes: + label: Documentation issue + description: Please describe what's wrong with the documentation (please no walls of text :P) + placeholder: e.g., "The installation guide is missing steps for macOS" + validations: + required: true + - type: textarea + id: suggested-improvement + attributes: + label: Suggested improvement + description: How do you think the documentation should be improved? + placeholder: e.g., "Add a section explaining how to install on macOS" + validations: + required: false + - type: textarea + id: additional-context + attributes: + label: Additional context + description: Add any other context about the documentation issue here + placeholder: e.g., "This affected me when trying to set up the project" + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index a33e5b54e..000000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -name: Bug report -about: Create a report to help us improve -title: '' -labels: bug -type: Bug -assignees: '' - ---- -##### Spritefinity version - - -``` - -``` - -##### Describe the bug - - -##### To Reproduce - - -##### Expected behaviour - - -##### OS/Hardware -- Operative System: -- CPU: -- GPU: - - -##### Screenshots - - -##### Additional context - diff --git a/.github/ISSUE_TEMPLATE/code_quality.md b/.github/ISSUE_TEMPLATE/code_quality.md deleted file mode 100644 index d3631ca1f..000000000 --- a/.github/ISSUE_TEMPLATE/code_quality.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -name: Code quality -about: Have you seen bad code? Click here -title: '' -labels: code-ql -type: Task -assignees: '' - ---- -##### What's wrong with the code? - - -##### How should it be improved? - - -##### Additional context - diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 000000000..0086358db --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1 @@ +blank_issues_enabled: true diff --git a/.github/ISSUE_TEMPLATE/documentation.md b/.github/ISSUE_TEMPLATE/documentation.md deleted file mode 100644 index 1c027fe90..000000000 --- a/.github/ISSUE_TEMPLATE/documentation.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -name: Documentation -about: Something wrong with the docs? Tell us here -title: '' -labels: docs -type: Task -assignees: '' - ---- - - - -##### Describe the solution you'd like - - -##### Describe alternatives you've considered - - -##### Additional context - \ No newline at end of file diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 1e39d634d..000000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,12 +0,0 @@ - - -Add compact, short information about your PR for easier understanding: - -- Goal of the PR -- How does the PR work? -- Does it resolve any reported issue? -- If not a bug fix, why is this PR needed? What use-cases does it solve? - -## How to test - diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 000000000..92e40c04f --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,13 @@ + + +## Description + + +## How to test + + +Closes #(issue number) + + From 49e4e05c2f9b96fdf50ece7290c3246f364ba7d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Pra=C5=BAmo?= Date: Mon, 2 Feb 2026 21:07:53 +0100 Subject: [PATCH 07/41] Rebrand the project to Besprited --- .github/ISSUE_TEMPLATE/1-bug-report.yml | 6 ++-- CONTRIBUTING.md | 43 +++++------------------- CONTRIBUTORS.md | 31 ----------------- README.md | 30 +++++++++++------ data/splash.ase | Bin 20113 -> 1546 bytes data/splash.png | Bin 15791 -> 1061 bytes docs/branding.png | Bin 0 -> 1224 bytes 7 files changed, 31 insertions(+), 79 deletions(-) delete mode 100644 CONTRIBUTORS.md create mode 100644 docs/branding.png diff --git a/.github/ISSUE_TEMPLATE/1-bug-report.yml b/.github/ISSUE_TEMPLATE/1-bug-report.yml index f0fdf2c77..873e9ffa6 100644 --- a/.github/ISSUE_TEMPLATE/1-bug-report.yml +++ b/.github/ISSUE_TEMPLATE/1-bug-report.yml @@ -9,8 +9,8 @@ body: - type: input id: version attributes: - label: Spritefinity version - description: Paste Spritefinity version between quotes down below. You'll find it in the bottom left corner when you open the software. If you're on a dev version, specify the commit hash + label: Besprited version + description: Paste Besprited version between quotes down below. You'll find it in the bottom left corner when you open the software. If you're on a dev version, specify the commit hash placeholder: e.g., "v1.2.3" or "abcdefg" validations: required: true @@ -27,7 +27,7 @@ body: attributes: label: Steps to reproduce description: Steps to reproduce the behaviour - placeholder: e.g., "1. Open Spritefinity\n2. Load a project\n3. Click on Export\n4. See error" + placeholder: e.g., "1. Open Besprited\n2. Load a project\n3. Click on Export\n4. See error" validations: required: true - type: textarea diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 859f8a436..03032257a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,37 +1,10 @@ # Contributing -## Code -Contributing code is very easy to do once you get the hang of it. We use GitHub for our online repository and issue tracker, so you'll need an account first. After you've done that and are comfortable with how the platform and git itself works, read on. - -### Set Up Your Repository -1. Fork [LibreSprite](https://github.com/LibreSprite/LibreSprite) so you have a personal repository to push to. -2. Clone your personal repository with `git clone --recursive https://github.com/YOUR-USERNAME/LibreSprite`. Remember to change the URL to your repository's. The `--recursive` is used to download the third party libraries for building. -3. Move into the directory, on Linux this is done with `cd LibreSprite`. -4. Follow the [instructions](INSTALL.md) to create a build and make sure your local copy is working. -5. Add an upstream remote so you can get other developer's updates with `git remote add upstream https://github.com/LibreSprite/LibreSprite`. - -### Updating Your Repository -These instructions will update both your local repository and online fork. -1. `git fetch upstream` Will download any new changes from the official LibreSprite repository. -2. `git checkout master` Will switch to your master branch. -3. `git merge upstream/master` Will merge or fast-forward your local master branch so it contains all the updates. -4. `git push origin master` Will update your online repository's master branch, it's a good idea to keep it up to date. - -### Making Changes -To make a contribution you will need to make a feature branch. This greatly simplifies adding your code to the official repository, and it ensures the master branch is always working. As a heads up, it's best to let us know what you're working on by commenting on or creating an [issue](https://github.com/LibreSprite/LibreSprite/issues), this way we all save time by working on different things. -1. Call `git checkout master`, always make sure you are on master before making a feature branch. -2. Call `git checkout -b name-of-your-feature` This will create a feature branch and switch to it. Try to be specific in your feature name, this helps track it down in the future if we need to. -3. Make a meaningful change, you don't want to implement the whole feature in one shot generally. Try to break your task into meaningful (and revertible) chunks, though sometimes one chunk is all it takes like with small bug fixes. -4. To create a commit, start by verifying with `git status` that only files you wanted to change are effected. If there are unexpected changes, please resolve them before continuing. -5. Stage all of your changes with `git add -A`. -6. Create your commit with `git commit -m "Type a precise description of only the changes made with this commit."` Try to describe the changes like it's a change log (hint, it is). Messages like "Convert 'bool' members in ui::Widget to flags" are what we're after. -7. Repeat steps 2-5 until the feature is complete. - -### Pushing Changes -You are ready for your contribution to be reviewed and merged. There are a few things you can do to make this easier for maintainers to review your code, so please follow all steps. -1. Follow the instructions for Updating Your Repository. -2. Switch back to your feature branch with `git checkout name-of-your-feature`. -3. Rebase your branch with `git rebase master`, this will make sure there are no conflicts with other people's contributions. -4. Rebuild your project to make sure everything still works. If things are now broken, resolve them, making commits along the way. Once resolved, return to step 1 as more changes could have been made in the meantime. -5. Push your branch to your online fork with `git push origin name-of-your-feature`. -6. On GitHub, create a pull request for your feature branch. +## Branching Model +We use the following branch structure to manage development: +- `trunk`: This is the development branch for Besprited. All new features and bug fixes are merged here first. +- `ls-develop`: This branch tracks the latest changes from LibreSprite's `master` branch. + We periodically merge changes from LibreSprite into our `trunk` branch to stay up-to-date with their developments. + ***Any fixes to bugs shared with common LibreSprite codebase should be made against `LibreSprite:master` directly.*** + +Feature and fix branches should follow the naming convention: `username/short-description`, for example: `nidrax/v8-build-fix-windows`. \ No newline at end of file diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md deleted file mode 100644 index a91653dc6..000000000 --- a/CONTRIBUTORS.md +++ /dev/null @@ -1,31 +0,0 @@ -# Contributors to LibreSprite -* Add your name here! - -## Shout-outs -LibreSprite includes color palettes created by: -* [Richard "DawnBringer" Fhager](http://pixeljoint.com/p/23821.htm) palettes, [16 colors](http://pixeljoint.com/forum/forum_posts.asp?TID=12795), [32 colors](http://pixeljoint.com/forum/forum_posts.asp?TID=16247). -* [Arne Niklas Jansson](http://androidarts.com/) palettes, [16 colors](http://androidarts.com/palette/16pal.htm), [32 colors](http://wayofthepixel.net/index.php?topic=15824.msg144494). - -It tries to replicate some pixel-art algorithms: -* [RotSprite](http://forums.sonicretro.org/index.php?showtopic=8848&st=15&p=159754&#entry159754) by Xenowhirl. -* [Pixel perfect drawing algorithm](http://deepnight.net/pixel-perfect-drawing/) by [Sébastien Bénard](https://twitter.com/deepnightfr) and [Carduus](https://twitter.com/CarduusHimself/status/420554200737935361). - -And it uses the following third-party libraries: - -* [curl](http://curl.haxx.se/) (curl) -* [duktape](https://duktape.org) (MIT) -* [freetype](https://www.freetype.org) (FTL) -* [giflib](http://giflib.sourceforge.net) (MIT) -* [gtest](https://github.com/google/googletest) (BSD-3-Clause) -* [libjpeg](http://libjpeg.sourceforge.net) (IJG) -* [libpng](http://www.libpng.org) (Libpng) -* [libwebp](https://developers.google.com/speed/webp) (BSD-3-Clause) -* [libx11](https://xorg.freedesktop.org) (XFree86) -* [libxcursor](https://xorg.freedesktop.org) (MIT) -* loadpng (Zlib) -* modp\_b64 (BSD) -* [pixman](http://www.pixman.org) (MIT) -* [sdl2](https://www.libsdl.org) (Zlib) -* [simpleini](https://github.com/aseprite/simpleini) (MIT) -* [tinyxml2](https://github.com/leethomason/tinyxml2) (Zlib) -* [zlib](https://www.zlib.net) (Zlib) diff --git a/README.md b/README.md index 6bd10c76f..47f9333dd 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,7 @@ -# LibreSprite [![Liberapay](https://i.imgur.com/UOLKpPA.png "Support our work")](https://liberapay.com/LibreSprite/) -[![Linux](https://github.com/LibreSprite/LibreSprite/actions/workflows/cmakeLinux.yml/badge.svg)](https://github.com/LibreSprite/LibreSprite/actions/workflows/cmakeLinux.yml) [![Windows x64](https://github.com/LibreSprite/LibreSprite/actions/workflows/cmakeWin64.yml/badge.svg?branch=master)](https://github.com/LibreSprite/LibreSprite/actions/workflows/cmakeWin64.yml) [![MacOS](https://github.com/LibreSprite/LibreSprite/actions/workflows/cmakeMacOs.yml/badge.svg)](https://github.com/LibreSprite/LibreSprite/actions/workflows/cmakeMacOs.yml) [![Android](https://github.com/LibreSprite/LibreSprite/actions/workflows/cmakeAndroid.yml/badge.svg)](https://github.com/LibreSprite/LibreSprite/actions/workflows/cmakeAndroid.yml) +![Besprited](docs/branding.png) ## Introduction -LibreSprite is a free and open source program for creating and animating your sprites. +Besprited is a free and open source program for creating and animating 2D sprites. It features: * Real-time animation previews. * Onion skinning. * Multiple sprites can be edited at once. @@ -13,24 +12,35 @@ LibreSprite is a free and open source program for creating and animating your sp * Several file types supported for your sprites and animations. ## Download -Get the [latest release](https://github.com/LibreSprite/LibreSprite/releases/latest) for Linux, MacOS, Windows or Android. +Get the [latest release](https://github.com/Veritaware/Besprited/releases/latest) for Linux, macOS, Windows or Android. ## History -LibreSprite originated as a fork of [Aseprite](https://www.aseprite.org), developed by [David Capello](https://github.com/dacap). Aseprite used to be distributed under the GNU General Public License version 2, but was moved to a proprietary license on [August 26th, 2016](https://github.com/aseprite/aseprite/commit/5ecc356a41c8e29977f8608d8826489d24f5fa6c). +It all started with [Aseprite](https://www.aseprite.org), developed by [David Capello](https://github.com/dacap). +Aseprite used to be distributed under the GNU General Public License version 2, +but was moved to a proprietary license on [August 26th, 2016](https://github.com/aseprite/aseprite/commit/5ecc356a41c8e29977f8608d8826489d24f5fa6c). -This fork was made on the [last commit](https://github.com/aseprite/aseprite/commit/03be4aa23db465219962f4c62410f628e7392545) covered by the GPL version 2 license, and is now developed independently of Aseprite. +Aa a response to that, [LibreSprite](https://github.com/LibreSprite/LibreSprite) was created as a fork of the last +GPLv2-licensed version of Aseprite, to continue its development as a free and open source project. +The work has been branched-out from the [last Aseprite commit](https://github.com/aseprite/aseprite/commit/03be4aa23db465219962f4c62410f628e7392545) covered by the GPL version 2 license, +and is now developed independently of Aseprite. + +In 2026 [Nidrax](https://github.com/Nidrax) forked the project under the [Veritaware](https://github.com/veritaware) +organization to create his own opinionated version of the editor independently of LibreSprite's team design decisions +and thus Besprited was born. ## Contributing -As LibreSprite has a newly budding community, we need help building the infrastructure of our development, support, and news networks. If you would like to help, please make yourself known at our [Discord](https://discord.gg/95gbyU5) or [Matrix](https://matrix.to/#/%23libresprite:matrix.org), and checkout our guide on [contributing](CONTRIBUTING.md). +Feel free to contribute to the project! Check out the [contributing guidelines](CONTRIBUTING.md) to get started. ## Compiling -Don't worry, it isn't as hard as you might think! Just follow the instructions [here](INSTALL.md). +Follow the [installation guide](INSTALL.md). ## Theming -Don't like the default look of LibreSprite? Don't panic, you can download from the LibreSprite [resources](https://libresprite.github.io/#!/resources) repo. +The app is compatible with LibreSprite themes you can find [here](https://libresprite.github.io/#!/resources). ## License This program is distributed under the [GNU General Public License Version 2](LICENSE.txt). ## Credits -An ***enormous*** thank you to the original developers of [Aseprite](https://www.aseprite.org), without them and their original licensing this project wouldn’t exist. Additional shout-outs are given in the [list of contributors](CONTRIBUTORS.md). If you have submitted work to LibreSprite and would like to have your name on the list, please create a pull request or get in touch and we’ll make it happen. +An ***enormous*** thank you to the original developers of [Aseprite](https://www.aseprite.org), +without them and their original licensing this project wouldn’t exist. +And also huge thanks to all the [LibreSprite contributors](https://github.com/LibreSprite/LibreSprite/blob/master/CONTRIBUTORS.md) who have worked hard to create a base for this project to build upon. diff --git a/data/splash.ase b/data/splash.ase index 6ab787d773d61322a549a419b2bc7bd1155f9a03..6864548f761dd2cec508e86035445d410730a4e4 100644 GIT binary patch delta 1205 zcmbO@m$8dSn~RNs;lWZy1_#Ck3>*xM3=9k@K#TxN42&Q_pbX27zf#DoOGQ)o+u%SRA zi9wK|V$R;lxA|HWcwBy4*nIn6U$*p%5y$MDMLByLde3YO7FpRahfiS9)-s90o(Ub! zEm}$J0ll}CnfQbkb-b6`>u|uH^VZ?e^{3CB>h-Cwz0$i;rnc!JTfe>~!4=7K^?Z!-K;ONc;mvm#=)28N|B1g_HI?x{$FZ#w?<-Ax!SL8qc#T~@ z^IQL7=SyZItcoY`s_~e)#LjT=z95o3m2q7P182x?W_^JGbY%DsjM!NEtqsl8e{LGpx!{qL!aCD$*fRKDF6kjS9L9H;-YN)`UxY*Mw!wlMdn+v9oump0Tn|C8+9 z;A`HyG-H95{(_4qI+q{ZW#hki>f?ol-vsXZH-ERBpD*?F=d!?g{jPIVCOx0vyZrcL zzIQBF)F!h1krV$Yu}Szw{neC90Z%2r%alLhZFde3x6AHgyE$dA{U^q`O@iOz)8yFS zXNtY4ewM)U$Lf{p$9XyTt-l;O^F8aZ#@56sw+y^;C6?aff6UEYQ#SD^IQKAvgB3Yc zu-lEj+taDEje>+^D?KCIX2lw zEoaK2%av?5htB(^Xjz<@9$Ixj@a)pAA0q32r*l1*d9iw-tBL=|9sP>cDNl2vOn3!& zg;EZrPy2t0C#FcTMWDOUN9W>6w!604&wa$Yjis*w#U3p`qOQHXMQ#0>moMI?D?I-s c95rM896@Eys}BQY`K~_nSpAr#&|3O10Fch_Bme*a literal 20113 zcmcGVbzGERx9EokY3UwNP`bNII;2awJET*PPDw#ZQb1a|yGxMn8tLwVxg+m+f9JhN zJ@>CWpO4Fdd1kM*zH2>uueG1e2Sos2H6I2b0+S6u2EYIS08{9{|9(;a_uKz3@35iz zZ%^$1(YgxNLInJ`R^T6WN-+vR004b1aj5i?kcG-@T~(-T^VEXM!_S6Lc|QCZDr
  • x&jGCLs#D#v>3p>pN&0xBc+PN4GT@CsD& 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 diff --git a/data/splash.png b/data/splash.png index 4e19af01ceb91c907a0ee1a59b78a3e7ec9c2b84..9756a8056afb28dbd4ca3a7952d23aeb44004cd7 100644 GIT binary patch delta 913 zcmZ2qy_92u3Lj%}kh>GZx^prw85kJSCaR_j0BO~uixvVYrIH}OV1|hcB_?j*tk?TH zc|QXKv%RN_V@SoEx3h1TEjHj`s5I&S_kaFd&IFxD+?#k_`KGK zOt$kYDnF%*y{HkJxUWM^%`Ng%$KlztHcOo;omRYxN;e z#mBrJ3)i=Qz0^{7;n$pPJQ6zPdV?-RvqgH^vJf19TeCEdeRY&gs6 zt6bSmrw8|hTYM8VpY<~FPhQ+vIqN{GRByTXj7pU&6*rcKC+y(w4Q+NmdGW}V*MAls zs6Qj+fA2W=|C+rAs^)GNmN>s-`+;e7vtMZLF#T`J^!4kOdC{I3@hYeH-n)~wUaj9Z z!D`PkKVM$9MpY5RlZW>h`fonKx?XbshRMMz9tJh;y1PV})#`3rR-XFuki%1%rtU6G z=PHQ{biBN-Lip;_+wYVjU;2N(oFB2g_PQ`n)~hRD>Tj!Um{eFkan0A|0yj2Y@O}01 zmzC+?ZBja$r5Af|o@@7Y#``_a?<)R2$(p;WuHR^f^yP@@hvxew7|q(}7rWp5sGV;D zQ~lfr>xKW6HtqNG`BXl*O{NQ&4T_OuH*cZbVQAr z$ybNzw6H{D=``P{-~VXi&yMKp{dqSZ|EPKVEZcIw{Lj2))0*uy z^R*2;?r@bHE)p;J_@mxff^}UVTcM&}aK+3M^Y=GtZr>H9w|~Xwt18>KR4y)ySid`A zqwfO+mwmHea!GHS&vD#3p+}Qz&a%}rHWlgZkH4?8UZtSdkZaGj$?}O4Ib^P#S4mHd zY<$FKnRDO$(CiZ*;(69h3p?`P>&wfpV#~k&*|$efW4ht%)AbD5$+#1KgV;ZYYp*uj TpEG#25~Rx0)z4*}Q$iB}n)RPS delta 15760 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 Date: Wed, 4 Feb 2026 00:51:30 +0100 Subject: [PATCH 08/41] Update workflows to trigger on the branch 'trunk' instead of 'master' --- .github/workflows/cmakeAndroid.yml | 4 ++-- .github/workflows/cmakeLinux.yml | 4 ++-- .github/workflows/cmakeMacOs.yml | 4 ++-- .github/workflows/cmakeWin64.yml | 4 ++-- .github/workflows/codeql-analysis.yml | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/cmakeAndroid.yml b/.github/workflows/cmakeAndroid.yml index c7d1b0b33..51208a443 100644 --- a/.github/workflows/cmakeAndroid.yml +++ b/.github/workflows/cmakeAndroid.yml @@ -2,9 +2,9 @@ name: Android on: push: - branches: [ master ] + branches: [ trunk ] pull_request: - branches: [ master ] + branches: [ trunk ] jobs: build: diff --git a/.github/workflows/cmakeLinux.yml b/.github/workflows/cmakeLinux.yml index cc734bc4e..f7b7aa8d7 100644 --- a/.github/workflows/cmakeLinux.yml +++ b/.github/workflows/cmakeLinux.yml @@ -2,9 +2,9 @@ name: Linux on: push: - branches: [ master ] + branches: [ trunk ] pull_request: - branches: [ master ] + branches: [ trunk ] env: # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) diff --git a/.github/workflows/cmakeMacOs.yml b/.github/workflows/cmakeMacOs.yml index f8669f209..91a5b487f 100644 --- a/.github/workflows/cmakeMacOs.yml +++ b/.github/workflows/cmakeMacOs.yml @@ -2,9 +2,9 @@ name: MacOS on: push: - branches: [ master ] + branches: [ trunk ] pull_request: - branches: [ master ] + branches: [ trunk ] env: # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) diff --git a/.github/workflows/cmakeWin64.yml b/.github/workflows/cmakeWin64.yml index 6f1753e74..44c4c087e 100644 --- a/.github/workflows/cmakeWin64.yml +++ b/.github/workflows/cmakeWin64.yml @@ -2,9 +2,9 @@ name: Windows x86_64 on: push: - branches: [ master ] + branches: [ trunk ] pull_request: - branches: [ master ] + branches: [ trunk ] jobs: build: diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 55a0dad87..e9e794298 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -13,10 +13,10 @@ name: "CodeQL" on: push: - branches: [ master ] + branches: [ trunk ] pull_request: # The branches below must be a subset of the branches above - branches: [ master ] + branches: [ trunk ] schedule: - cron: '30 21 * * 0' From 57a8cc07d7852f5d671020bfc29a503296e771fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Pra=C5=BAmo?= Date: Wed, 4 Feb 2026 01:04:20 +0100 Subject: [PATCH 09/41] Simplify the PR template --- .github/pull_request_template.md | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 92e40c04f..62aee4355 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,13 +1,5 @@ - + -## Description - - -## How to test - - -Closes #(issue number) - - + From ff2e48a118be1d4beca565347cb650c485580938 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Pra=C5=BAmo?= Date: Tue, 3 Feb 2026 22:59:15 +0100 Subject: [PATCH 10/41] Use pixel TTF fonts, rewrite font loading logic - For Latin scripts, Cyryllic, Greek etc now uses Pixeloid for normal UI font and Tiny5 for mini font, defaults to Noto for other writing scripts. - Adds the ability to set different font sizes for different font faces --- data/fonts/OFL.txt | 4 +- data/fonts/font.ttf | Bin 582748 -> 0 bytes data/fonts/{font-ar.ttf => noto-ar.ttf} | Bin data/fonts/{font-jp.ttf => noto-jp.ttf} | Bin data/fonts/{font-kr.ttf => noto-kr.ttf} | Bin data/fonts/{font-zh.ttf => noto-zh.ttf} | Bin data/fonts/pixeloid-sans.ttf | Bin 0 -> 117564 bytes data/fonts/tiny5.ttf | Bin 0 -> 131452 bytes src/app/ui/skin/skin_theme.cpp | 103 ++++++++++++++---------- src/app/ui/skin/skin_theme.h | 2 +- 10 files changed, 66 insertions(+), 43 deletions(-) delete mode 100644 data/fonts/font.ttf rename data/fonts/{font-ar.ttf => noto-ar.ttf} (100%) rename data/fonts/{font-jp.ttf => noto-jp.ttf} (100%) rename data/fonts/{font-kr.ttf => noto-kr.ttf} (100%) rename data/fonts/{font-zh.ttf => noto-zh.ttf} (100%) create mode 100644 data/fonts/pixeloid-sans.ttf create mode 100644 data/fonts/tiny5.ttf diff --git a/data/fonts/OFL.txt b/data/fonts/OFL.txt index d57ea9ccf..6b89656c1 100644 --- a/data/fonts/OFL.txt +++ b/data/fonts/OFL.txt @@ -1,4 +1,6 @@ -Copyright 2014-2021 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source' +Noto Sans: Copyright 2022 The Noto Project Authors (https://github.com/notofonts) +Tiny5: Copyright 2022-2024 The Tiny5 Project Authors (https://github.com/Gissio/font_tiny5) +Pixeloid Mono: Copyright 2021-2025 The GGBotNet Project Authors (https://www.ggbot.net) This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: diff --git a/data/fonts/font.ttf b/data/fonts/font.ttf deleted file mode 100644 index fa4cff505eb671d6258554f5d71e873f686a6098..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 582748 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%0ABNY0M4h%Gh4;}C&W8r;xyZ?qn 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

    $-i`0Mo)^+ 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 F{10OrBlG|O diff --git a/data/fonts/font-ar.ttf b/data/fonts/noto-ar.ttf similarity index 100% rename from data/fonts/font-ar.ttf rename to data/fonts/noto-ar.ttf diff --git a/data/fonts/font-jp.ttf b/data/fonts/noto-jp.ttf similarity index 100% rename from data/fonts/font-jp.ttf rename to data/fonts/noto-jp.ttf diff --git a/data/fonts/font-kr.ttf b/data/fonts/noto-kr.ttf similarity index 100% rename from data/fonts/font-kr.ttf rename to data/fonts/noto-kr.ttf diff --git a/data/fonts/font-zh.ttf b/data/fonts/noto-zh.ttf similarity index 100% rename from data/fonts/font-zh.ttf rename to data/fonts/noto-zh.ttf diff --git a/data/fonts/pixeloid-sans.ttf b/data/fonts/pixeloid-sans.ttf new file mode 100644 index 0000000000000000000000000000000000000000..2469e5b1ceab7243a61a379a2fe2d3b500dc1604 GIT binary patch literal 117564 zcmce<3!qhF-ao$9v)1WKx6?_IefBx0(_Ni9-6TnpB%zWJP6GXT zqp_pT&9xuJ=RWw{Z1fEiC*RcJ@K}8Q%=7BMHulD=M|}M5Y27^Uw0c1Ikfa zC|==M?tv!DyvDMFlrmpoSnkjFay&0*NlqzHmg*QR@vb!uYIvr0HGBRZ&pcqf65}pE z^UMKhzn7OjcC1<(@bE_Uw*F!qdxFPjWK=OnoOJm$ddo3^~7sG@8I=GI^lMIan|*f%H+;H%FW#e+^yZCmW zlVhgcE9%mn>(0v_lgG)s%Nxn_9Q`DJ?zp?2BljiGamU>C?sHY6(yv^1#GAy=ZSv~q zWshdm(b3;Whdfoqm-8(i&-OdwplAfcVJkM>r^W0~Sj&E-Bc=A|P+m+&x92Dz1X$Pl=Y<#5c z=o6>YHRC<|+~jAT_n+sxinyKJKQuZXocupDy7QIaigbBAsi*3P;&Zs4z;6p zkNb&Fc(eYLJeS+-aoj#`JDJ_SGerys``M+fdYH)hky#_!Hcj_w>cCXaEO zxiSga$A9Rvvq^INp=+{_JKsy%JKHYV*Zk1us^m>xNBh;BkClt98XJrcmoJ<=)H&_O z^LQ=yTRTR*YSON5J1I+&=D)vfM(H)d5sVQ{-RF*F`gFLxs{L|(5(l@FpEF`ZX=LO6 z&pt~`#k#AM4t2+uqw93d{SJ5x`-Nv7cjt0+alrx?> z)IfwMH6PAZG}#|;#SQzz+V9}tZ0xM=&Bl?Fy=h*#x6XUk`;~vEKg*xvFZ3VvANN=K zYy4mOFZ;jo-|;{6|L*_G|HeONPBQtXm1%EEO&>GFTw*RYmzy$kwHa+Dn91f|bDvpY z9yaUD%jS>4PlG#xIl7Vem=t*Who#SHZVo-SC3&s__2sq42Tr$?#XW0+q zsk>75rXETyORY>jn|e9*R_dGlocz4};{49}XXjs>e@*`F`7h;f%YQw8SN^B@2h+9F zEz%|FPU-IHp6Nd6^U{OTSEkF;tI|)W*QZ}fZ%S_|$SKGzIH91hpm{;Nf>R3y7R)So zsL&KvE38}CpfInnNnyIMRbiXLeuX0nuPOX{ktwQIbYf9KQH!EB#q*0FE`FkTMe%dR z8;V~l-c-D~cuVot;%&um6@OBExcFG}n#~KEcWr)J^9Neww#aKSs$IL11{a-m(X6NP zpPIX-+qdS}cgK#=RUt;oUmW}D*ui7}izA%@pX(V%-_Q|P z-F58AW5@xXcjR|&AII#?z!(j@&04G?|OgX?hfzYx4S>~cKGn%ht+q7AAI@Yh7bPw!Dk;V z+12))o*Oo9n0Q66%NJk1ActCK&f)+p{&c`Jq_=88ji4dM#(<_g8X(&ReYmBsU6hQq^a!-?D{}TXG^y)B!$k%h{QOY>n-A-T66h>sAhEDCF#Pd*UrUhW8x+dxgVb&lZ}Q`?5df ztim4Os}sB$YzbcTrg*n`Q<069dbgVzs2X>8)4eO&aD}(hTjf9PJ?X9Xp7PdsuX?YUedZIti{I7n=AY`X^`G%O`la4) zyshR&Gal9I74Ns+HuI_ZAHT%!;CJ^=^RMx*^*8uGGoP8i`d9m-yx)1-&3op3)U$*B zdjC1^_ulK~bMuAY$3NTuwfD5yYd$s~m=C=_csopW|2iLcPP{jfdtdc`;*arr_^10l z{WH9`yq*5_{#dgcb?;{X27jFS()`Weh>Cfl-^9PsAMfAfPw;Q{C;GkoGyNC+pZmA? zle|BAZ~H&>C;PAYzcI_q6aMr53*LWu@0k7O@1~Zi?Qimb<@fc^F}uuvn|IBh{agLs z{#kw}zq9uzZ|0wFYXMAJ)DgJHdb@K;*F)IHO z|1p2Me`oMc@F%mwynzbzh(FW68(qP}!3U`0-=NM5U$vujyw7n1N;xx{aY`753evzN@TllT~HvTF8{ixp$`t4DJpEX;}Z~c?}rl{H{ z`k(s$W7e3b{r&#m%`4{DW|eu;|IGiZ*_2_#XxPf=|pQ^DFbB`MFtZ zo-r?(UzpA4$Tp%E7-2^GTm9dnV;kjf^M7X!n*a4b_rE~b_K>*_UEK9%tiRj;OYmv% zKjsEA&dfA-n}z7;mYB!PQuBDQIe0mE1-;07{`*0@puIU{zVScsKMYEO4kj?6IbyyG zItHcwcK`SO>;4~tPC;j6?V5oX_<;$6;19u$APjPl%d7i4{5OIwLD%58;P{|UP&arZ zcr&OM)DId2x&BN3FM@_aUeGN#)zmR{(MwJamIY4)<>)5w3}yr?(8;U{o)_W%C6`UFLmi~BsaJu)L_q_K) z(9_%C{mgqYI2iT`&-Q*EUV>h#dC(~MS8!f?A=o?(* z_Ya!-=lSRR1A~+N0YMXgSui+A2j>UB39bl-1(ybwd%yB-3C{912YrIG(dAtn7J4sx zuY`lbOT!`I;4m+26rK>~h7H4_uvyp!m8vxC5F7~p$+q6}nhe+cZ93=}y`PLN0$*tW zYN^!Ma*PDl+T{RtFlB&eE!4rd9`Gx`Siok5;8l$1J_x}UjHp!vR0z*QpMWgwp;mYv zKLh-7jK5Jp?eIKSIl}FL-zuPcKPjL#dEPF-dw_cZ?<=5Ac^+!E_Yq(oV6TEt-F&Qo z+J*MY!a|InD4?Es-lu@S0v-mi*8`xsdEOTQ_HKAS!P~EZYUg=>2YdyfPX3{Q`saCH z1O5qE1~{PLKZWsM3aE{qhyK$$3@8VDtAIL*MiOug0Q^1%pKq^XG=RYK40!iLKy^SD z0QByIcYiIQ7N9nuBLE)dACGHcH@^;`F0Q>1BRV9%J^;4&8vt@~&Tla`1mxiy=)gxG z>Yo580iaj&PXu%aGy$9hxCYP^a57*6AO*30}23F0}25}!2dgp%>czX2R8GY z16lx}55Fa#6<|G}HJ}a7|2@XGfKzZjZO{(T9?%Cso(S+$A8|tPpf`~jPgfY&-0uYF zjBWUW=%_2sfe-rK6byBDDu6Ow2RIGT1LwSf@pM2>z!tz6fL?%~0L}!EKF;&c2K2@G zZ(%$K&<}7u;9Lc>8)JXKdEj9J#sPry0XF~!0xrP*FEL&SxCpQjFbFUhKwS?3TneDQ zE(2T+ARog4R{&lFTnV@ea0{ReFarGi5#vYzb^lYqC;)Bs8sJ(0WHrk$js{Ss=K*5? z;GOa2j|G57vmfI)0O*@q7{>!{0&D_Mo|^%X-=7Eo9fMf(CtJ7`BVh`lH{dqFQ~+&q zJ75}U{R!h83T6++=?dmA81GatJa?9Y$-#K9f+4;+3T7_Gc?tn-@qmS|G0s;oP-!Q%o*n#cOF}?wK2k44|F%0X_j9UiT^BuK>!; z>%RbyPx>ox2gJ1>@OPXK8vX&mzW_4;hXCJT|8W?P0FD7*d(#+j61H)zNdfY){Vv94 zfMRSz_og|Z1-55mYzb(E?S&ZI0onuV0XhOo!NYEhh(`ne3O>MimO?<w;#q|SwKvh%?gr#;TML!(H|px!oXhw zUNaE@IReB-FbM#D!x0!kPXN9h+-8CMp%(%0AKVUr{(@@&;7MRSM%XF18!#6zOTk=( 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�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%0DQ<$g$ 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 btkAg~>u5d`{|zfFZcBJ06+U_%tE&DFB&!|{ literal 0 HcmV?d00001 diff --git a/data/fonts/tiny5.ttf b/data/fonts/tiny5.ttf new file mode 100644 index 0000000000000000000000000000000000000000..635fe079f77dc82fbe2628a62ef16da64412aafd GIT binary patch literal 131452 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 literal 0 HcmV?d00001 diff --git a/src/app/ui/skin/skin_theme.cpp b/src/app/ui/skin/skin_theme.cpp index cc5cab022..dadd07aba 100644 --- a/src/app/ui/skin/skin_theme.cpp +++ b/src/app/ui/skin/skin_theme.cpp @@ -254,54 +254,73 @@ void SkinTheme::loadSheet(const std::string& skinId) void SkinTheme::loadFonts(const std::string& skinId) { + typedef std::vector> FontList; TRACE("SkinTheme::loadFonts(%s)\n", skinId.c_str()); - Preferences& pref = Preferences::instance(); + auto findResources = [&](const std::string& path, const size_t fontSize, std::vector>& output) { + ResourceFinder rf; + rf.includeDataDir(path.c_str()); + while (rf.next()) { + output.push_back(std::make_pair(rf.filename(), fontSize)); + } + }; + + // ToDo: add the ability to set preferred font size in skin XML + application preferences { - std::vector paths; + FontList dataDirs { + std::make_pair("skins/" + skinId + "/font-" + getLanguage() + ".otf", 8), + std::make_pair("skins/" + skinId + "/font-" + getLanguage() + ".ttf", 8), + std::make_pair("skins/" + skinId + "/font-" + getLanguage() + ".png", 7), + std::make_pair("fonts/noto-" + getLanguage() + ".ttf", 8), + std::make_pair("skins/" + skinId + "/font.otf", 8), + std::make_pair("skins/" + skinId + "/font.ttf", 8), + std::make_pair("skins/" + skinId + "/font.png", 7), + std::make_pair("fonts/pixeloid-sans.ttf", 9), + }; + FontList fonts{}; + + if (auto userFont = pref.theme.font(); !userFont.empty()) { ResourceFinder rf; - auto userFont = pref.theme.font(); - if (!userFont.empty()) - rf.addPath(userFont.c_str()); - rf.includeDataDir(("skins/" + skinId + "/font-" + app::getLanguage() + ".otf").c_str()); - rf.includeDataDir(("skins/" + skinId + "/font-" + app::getLanguage() + ".ttf").c_str()); - rf.includeDataDir(("skins/" + skinId + "/font-" + app::getLanguage() + ".png").c_str()); - rf.includeDataDir(("fonts/font-" + app::getLanguage() + ".otf").c_str()); - rf.includeDataDir(("fonts/font-" + app::getLanguage() + ".ttf").c_str()); - rf.includeDataDir(("fonts/font-" + app::getLanguage() + ".png").c_str()); - rf.includeDataDir(("skins/" + skinId + "/font.otf").c_str()); - rf.includeDataDir(("skins/" + skinId + "/font.ttf").c_str()); - rf.includeDataDir(("skins/" + skinId + "/font.png").c_str()); - rf.includeDataDir("fonts/font.otf"); - rf.includeDataDir("fonts/font.ttf"); - rf.includeDataDir("fonts/font.png"); + rf.addPath(userFont); while (rf.next()) { - paths.push_back(rf.filename()); + fonts.push_back(std::make_pair(rf.filename(), 8)); } - m_defaultFont = loadFont(paths, 8); + } + for (auto& [path, size] : dataDirs) { + findResources(path, size, fonts); + } + + m_defaultFont = loadFont(fonts); } { - std::vector paths; + FontList dataDirs { + std::make_pair("skins/" + skinId + "/minifont-" + getLanguage() + ".otf", 6), + std::make_pair("skins/" + skinId + "/minifont-" + getLanguage() + ".ttf", 6), + std::make_pair("skins/" + skinId + "/minifont-" + getLanguage() + ".png", 6), + std::make_pair("skins/" + skinId + "/font-" + getLanguage() + ".otf", 6), + std::make_pair("skins/" + skinId + "/font-" + getLanguage() + ".ttf", 6), + std::make_pair("fonts/noto-" + getLanguage() + ".ttf", 6), + std::make_pair("skins/" + skinId + "/minifont.otf", 6), + std::make_pair("skins/" + skinId + "/minifont.ttf", 6), + std::make_pair("skins/" + skinId + "/minifont.png", 6), + std::make_pair("skins/" + skinId + "/font.otf", 6), + std::make_pair("skins/" + skinId + "/font.ttf", 6), + std::make_pair("fonts/tiny5.ttf", 8), + }; + FontList fonts; + if (auto userFont = pref.theme.miniFont(); !userFont.empty()) { ResourceFinder rf; - auto userFont = pref.theme.miniFont(); - if (!userFont.empty()) - rf.addPath(userFont.c_str()); - rf.includeDataDir(("skins/" + skinId + "/font-" + app::getLanguage() + ".otf").c_str()); - rf.includeDataDir(("skins/" + skinId + "/font-" + app::getLanguage() + ".ttf").c_str()); - rf.includeDataDir(("skins/" + skinId + "/minifont-" + app::getLanguage() + ".png").c_str()); - rf.includeDataDir(("fonts/font-" + app::getLanguage() + ".otf").c_str()); - rf.includeDataDir(("fonts/font-" + app::getLanguage() + ".ttf").c_str()); - rf.includeDataDir(("fonts/minifont-" + app::getLanguage() + ".png").c_str()); - rf.includeDataDir(("skins/" + skinId + "/font.otf").c_str()); - rf.includeDataDir(("skins/" + skinId + "/font.ttf").c_str()); - rf.includeDataDir(("skins/" + skinId + "/minifont.png").c_str()); - rf.includeDataDir("fonts/font.otf"); - rf.includeDataDir("fonts/font.ttf"); - rf.includeDataDir("fonts/minifont.png"); - while (rf.next()) - paths.push_back(rf.filename()); - m_miniFont = loadFont(paths, 8); + rf.addPath(userFont); + while (rf.next()) { + fonts.push_back(std::make_pair(rf.filename(), 8)); + } + } + for (auto& [path, size] : dataDirs) { + findResources(path, size, fonts); + } + + m_miniFont = loadFont(fonts); } } @@ -364,7 +383,7 @@ void SkinTheme::loadThemeXml(const std::string& filename) { font = it->second; } else if (!file.empty()) { uint32_t size = strtol(xmlDim->Attribute("size", "8"), NULL, 10); - font = loadFont({file}, size); + font = loadFont({std::make_pair(file, size)}); if (!font) { std::cerr << "Could not load font " << file << std::endl; } @@ -2358,12 +2377,12 @@ void SkinTheme::paintIcon(Widget* widget, Graphics* g, IButtonIcon* iconInterfac g->drawRgbaSurface(icon_bmp, x, y); } -std::shared_ptr SkinTheme::loadFont(const std::vector& fonts, std::size_t size) +std::shared_ptr SkinTheme::loadFont(const std::vector>& fonts) { std::shared_ptr fallback; std::vector> candidates; - for (auto& themeFont : fonts) { + for (const auto& [themeFont, size] : fonts) { bool isTrueType = base::get_file_extension(themeFont) != "png"; if (isTrueType) { if (auto f = she::instance()->loadTrueTypeFont(themeFont.c_str(), size * guiscale())) { @@ -2401,6 +2420,8 @@ std::shared_ptr SkinTheme::loadFont(const std::vector& f }); while (!candidates.empty()) { auto& themeFont = candidates.back().second; + // Use the size from the first font pair (if available) for fallback fonts + auto size = fonts.empty() ? 0 : fonts.front().second; if (auto f = she::instance()->loadTrueTypeFont(themeFont.c_str(), size * guiscale())) { // std::cout << "Loaded fallback font: " << themeFont << std::endl; return std::shared_ptr(f); diff --git a/src/app/ui/skin/skin_theme.h b/src/app/ui/skin/skin_theme.h index 863da94ca..1eb5d164d 100644 --- a/src/app/ui/skin/skin_theme.h +++ b/src/app/ui/skin/skin_theme.h @@ -130,7 +130,7 @@ namespace app { void paintIcon(ui::Widget* widget, ui::Graphics* g, ui::IButtonIcon* iconInterface, int x, int y); - std::shared_ptr loadFont(const std::vector& fonts, std::size_t); + std::shared_ptr loadFont(const std::vector>& fonts); she::Surface* m_sheet; std::map m_parts_by_id; From adeb17ada1e8572a5e0bcd7ee41174cfeb722fc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Pra=C5=BAmo?= Date: Wed, 4 Feb 2026 00:39:52 +0100 Subject: [PATCH 11/41] Minor CLang-Tidy fixes, readability code cleanup, and refactor Yeah... not much to add. This piece of garbage is ugly. Fuck this code. And fuck the asshole who decided to make a living hell of live for anyone who tries to analyze this code, by not putting in spacing around operators as if they were getting electro-cutted every time they touched the space bar. Who needs obfuscation when you can let psychopaths write the code, I guess. Motherfucker just forgot they're committing to an open-source project. Thanks for draining out any will to live I had left in me for tonight. Closes #6 --- src/app/ui/skin/skin_theme.cpp | 3926 ++++++++++++++++---------------- src/app/ui/skin/skin_theme.h | 238 +- 2 files changed, 2064 insertions(+), 2100 deletions(-) diff --git a/src/app/ui/skin/skin_theme.cpp b/src/app/ui/skin/skin_theme.cpp index dadd07aba..6a6694465 100644 --- a/src/app/ui/skin/skin_theme.cpp +++ b/src/app/ui/skin/skin_theme.cpp @@ -1,5 +1,6 @@ // Aseprite | Copyright (C) 2001-2016 David Capello -// LibreSprite | Copyright (C) 2021 LibreSprite contributors +// LibreSprite | Copyright (C) 2021-2025 LibreSprite contributors +// Besprited | Copyright (C) 2026 Veritaware // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License version 2 as @@ -27,10 +28,12 @@ #include "app/ui/skin/skin_slider_property.h" #include "app/ui/skin/skin_style_property.h" #include "app/ui/skin/skin_theme.h" + +#include + #include "app/ui/skin/style.h" #include "app/ui/skin/style_sheet.h" #include "app/xml_document.h" -#include "base/bind.h" #include "base/fs.h" #include "base/path.h" #include "base/string.h" @@ -47,2390 +50,2351 @@ #include "tinyxml2.h" -#define BGCOLOR (getWidgetBgColor(widget)) - -namespace app { -namespace skin { - -using namespace gfx; -using namespace ui; - -const char* SkinTheme::kThemeCloseButtonId = "theme_close_button"; - -// Controls the "X" button in a window to close it. -class WindowCloseButton : public Button { -public: - WindowCloseButton() : Button("") { - setup_bevels(this, 0, 0, 0, 0); - setDecorative(true); - setId(SkinTheme::kThemeCloseButtonId); - } - -protected: - void onClick(Event& ev) override { - Button::onClick(ev); - closeWindow(); - } +#define BGCOLOR (getWidgetBgColor(widget)) - void onPaint(PaintEvent& ev) override { - static_cast(theme())->paintWindowButton(ev); - } +namespace app::skin +{ + using namespace gfx; + using namespace ui; + + const char* SkinTheme::kThemeCloseButtonId = "theme_close_button"; + + // Controls the "X" button in a window to close it. + class WindowCloseButton : public Button { + public: + WindowCloseButton() : Button("") { + setup_bevels(this, 0, 0, 0, 0); + setDecorative(true); + setId(SkinTheme::kThemeCloseButtonId); + } - bool onProcessMessage(Message* msg) override { - switch (msg->type()) { + protected: + void onClick(Event& ev) override { + Button::onClick(ev); + closeWindow(); + } - case kSetCursorMessage: - ui::set_mouse_cursor(kArrowCursor); - return true; + void onPaint(PaintEvent& ev) override { + dynamic_cast(theme())->paintWindowButton(ev); + } - case kKeyDownMessage: - if (window()->isForeground() && - static_cast(msg)->scancode() == kKeyEsc) { - setSelected(true); + bool onProcessMessage(Message* msg) override { + switch (msg->type()) { + case kSetCursorMessage: + set_mouse_cursor(kArrowCursor); return true; - } - break; - - case kKeyUpMessage: - if (window()->isForeground() && - static_cast(msg)->scancode() == kKeyEsc) { - if (isSelected()) { - setSelected(false); - closeWindow(); + case kKeyDownMessage: + if (window()->isForeground() && + dynamic_cast(msg)->scancode() == kKeyEsc) { + setSelected(true); return true; } - } - break; + break; + case kKeyUpMessage: + if (window()->isForeground() && + dynamic_cast(msg)->scancode() == kKeyEsc) { + if (isSelected()) { + setSelected(false); + closeWindow(); + return true; + } + } + break; + default: break; + } + + return Button::onProcessMessage(msg); } + }; - return Button::onProcessMessage(msg); - } -}; - -static const char* cursor_names[kCursorTypes] = { - "null", // kNoCursor - "normal", // kArrowCursor - "normal_add", // kArrowPlusCursor - "forbidden", // kForbiddenCursor - "hand", // kHandCursor - "scroll", // kScrollCursor - "move", // kMoveCursor - - "size_ns", // kSizeNSCursor - "size_we", // kSizeWECursor - - "size_n", // kSizeNCursor - "size_ne", // kSizeNECursor - "size_e", // kSizeECursor - "size_se", // kSizeSECursor - "size_s", // kSizeSCursor - "size_sw", // kSizeSWCursor - "size_w", // kSizeWCursor - "size_nw", // kSizeNWCursor - - "rotate_n", // kRotateNCursor - "rotate_ne", // kRotateNECursor - "rotate_e", // kRotateECursor - "rotate_se", // kRotateSECursor - "rotate_s", // kRotateSCursor - "rotate_sw", // kRotateSWCursor - "rotate_w", // kRotateWCursor - "rotate_nw", // kRotateNWCursor - - "eyedropper", // kEyedropperCursor - "magnifier" // kMagnifierCursor -}; - -static css::Value value_or_none(const char* valueStr) -{ - if (strcmp(valueStr, "none") == 0) - return css::Value(); - else - return css::Value(valueStr); -} + static const char* cursor_names[kCursorTypes] = { + "null", // kNoCursor + "normal", // kArrowCursor + "normal_add", // kArrowPlusCursor + "forbidden", // kForbiddenCursor + "hand", // kHandCursor + "scroll", // kScrollCursor + "move", // kMoveCursor + + "size_ns", // kSizeNSCursor + "size_we", // kSizeWECursor + + "size_n", // kSizeNCursor + "size_ne", // kSizeNECursor + "size_e", // kSizeECursor + "size_se", // kSizeSECursor + "size_s", // kSizeSCursor + "size_sw", // kSizeSWCursor + "size_w", // kSizeWCursor + "size_nw", // kSizeNWCursor + + "rotate_n", // kRotateNCursor + "rotate_ne", // kRotateNECursor + "rotate_e", // kRotateECursor + "rotate_se", // kRotateSECursor + "rotate_s", // kRotateSCursor + "rotate_sw", // kRotateSWCursor + "rotate_w", // kRotateWCursor + "rotate_nw", // kRotateNWCursor + + "eyedropper", // kEyedropperCursor + "magnifier" // kMagnifierCursor + }; -// static -SkinTheme* SkinTheme::instance() -{ - return static_cast(ui::Manager::getDefault()->theme()); -} + static css::Value value_or_none(const char* valueStr) + { + if (strcmp(valueStr, "none") == 0) + return {}; -SkinTheme::SkinTheme() - : m_cursors(ui::kCursorTypes, NULL) -{ - m_defaultFont = nullptr; - m_miniFont = nullptr; + return css::Value(valueStr); + } - // Initialize all graphics in NULL (these bitmaps are loaded from the skin) - m_sheet = NULL; -} + // static + SkinTheme* SkinTheme::instance() + { + return dynamic_cast(Manager::getDefault()->theme()); + } -SkinTheme::~SkinTheme() -{ - // Delete all cursors. - for (size_t c=0; c::iterator - it = m_toolicon.begin(); it != m_toolicon.end(); ++it) { - it->second->dispose(); + // Initialize all graphics in nullptr (these bitmaps are loaded from the skin) + m_sheet = nullptr; } - if (m_sheet) - m_sheet->dispose(); + SkinTheme::~SkinTheme() + { + // Delete all cursors. + for (const auto& m_cursor : m_cursors) + delete m_cursor; + + for (const auto& val : m_toolicon | std::views::values) { + val->dispose(); + } - m_parts_by_id.clear(); -} + if (m_sheet) + m_sheet->dispose(); -gfx::Color SkinTheme::getColorById(const std::string& id) { - auto it = m_colors_by_id.find(id); - auto end = m_colors_by_id.end(); - if (it != end) - return it->second; - std::string found; - if (it == end && id.rfind("_face") != std::string::npos) { - found = "face"; - it = m_colors_by_id.find(found); - } - if (it == end && id.rfind("_text") != std::string::npos) { - found = "text"; - it = m_colors_by_id.find(found); + m_parts_by_id.clear(); } - if (it != end) { - m_colors_by_id[id] = it->second; - std::cout << "assigning color " << found << " to " << id << std::endl; - return it->second; - } - std::cout << "Could not find color " << id << std::endl; - return 0xFF00FFFF; -} - -void SkinTheme::onRegenerate() -{ - Preferences& pref = Preferences::instance(); - // First we load the skin from default theme, which is more proper - // to have every single needed skin part/color/dimension. - // Then we load the selected theme to redefine default theme parts. - if (pref.theme.selected.defaultValue() != pref.theme.selected()) { - auto skinId = pref.theme.selected(); - try { - loadSheet(skinId); - } catch (const base::Exception&) { - loadSheet(pref.theme.selected.defaultValue()); + gfx::Color SkinTheme::getColorById(const std::string& id) { + auto it = m_colors_by_id.find(id); + const auto end = m_colors_by_id.end(); + if (it != end) + return it->second; + std::string found; + if (it == end && id.rfind("_face") != std::string::npos) { + found = "face"; + it = m_colors_by_id.find(found); + } + if (it == end && id.rfind("_text") != std::string::npos) { + found = "text"; + it = m_colors_by_id.find(found); + } + if (it != end) { + m_colors_by_id[id] = it->second; + std::cout << "assigning color " << found << " to " << id << std::endl; + return it->second; } - loadXml(pref.theme.selected.defaultValue()); - try { loadXml(skinId); } catch (const base::Exception&) {} - } else { - loadSheet(pref.theme.selected.defaultValue()); - loadXml(pref.theme.selected.defaultValue()); + std::cout << "Could not find color " << id << std::endl; + return 0xFF00FFFF; } -} - -void SkinTheme::loadSheet(const std::string& skinId) -{ - TRACE("SkinTheme::loadSheet(%s)\n", skinId.c_str()); - if (m_sheet) { - m_sheet->dispose(); - m_sheet = NULL; + void SkinTheme::onRegenerate() + { + // First we load the skin from default theme, which is more proper + // to have every single needed skin part/color/dimension. + // Then we load the selected theme to redefine default theme parts. + if (Preferences& pref = Preferences::instance(); pref.theme.selected.defaultValue() != pref.theme.selected()) { + auto skinId = pref.theme.selected(); + try { + loadSheet(skinId); + } catch (const base::Exception&) { + loadSheet(pref.theme.selected.defaultValue()); + } + loadXml(pref.theme.selected.defaultValue()); + try { loadXml(skinId); } catch (const base::Exception&) {} + } else { + loadSheet(pref.theme.selected.defaultValue()); + loadXml(pref.theme.selected.defaultValue()); + } } - // Load the skin sheet - std::string sheet_filename("skins/" + skinId + "/sheet.png"); + void SkinTheme::loadSheet(const std::string& skinId) + { + TRACE("SkinTheme::loadSheet(%s)\n", skinId.c_str()); - ResourceFinder rf; - rf.includeDataDir(sheet_filename.c_str()); - if (!rf.findFirst()) - throw base::Exception("File %s not found", sheet_filename.c_str()); + if (m_sheet) { + m_sheet->dispose(); + m_sheet = nullptr; + } - try { - m_sheet = she::instance()->loadRgbaSurface(rf.filename().c_str()); - } - catch (...) { - throw base::Exception("Error loading %s file", sheet_filename.c_str()); - } -} + // Load the skin sheet + const std::string sheet_filename("skins/" + skinId + "/sheet.png"); -void SkinTheme::loadFonts(const std::string& skinId) -{ - typedef std::vector> FontList; - TRACE("SkinTheme::loadFonts(%s)\n", skinId.c_str()); - Preferences& pref = Preferences::instance(); - auto findResources = [&](const std::string& path, const size_t fontSize, std::vector>& output) { ResourceFinder rf; - rf.includeDataDir(path.c_str()); - while (rf.next()) { - output.push_back(std::make_pair(rf.filename(), fontSize)); - } - }; - - // ToDo: add the ability to set preferred font size in skin XML + application preferences - { - FontList dataDirs { - std::make_pair("skins/" + skinId + "/font-" + getLanguage() + ".otf", 8), - std::make_pair("skins/" + skinId + "/font-" + getLanguage() + ".ttf", 8), - std::make_pair("skins/" + skinId + "/font-" + getLanguage() + ".png", 7), - std::make_pair("fonts/noto-" + getLanguage() + ".ttf", 8), - std::make_pair("skins/" + skinId + "/font.otf", 8), - std::make_pair("skins/" + skinId + "/font.ttf", 8), - std::make_pair("skins/" + skinId + "/font.png", 7), - std::make_pair("fonts/pixeloid-sans.ttf", 9), - }; - FontList fonts{}; + rf.includeDataDir(sheet_filename.c_str()); + if (!rf.findFirst()) + throw base::Exception("File %s not found", sheet_filename.c_str()); - if (auto userFont = pref.theme.font(); !userFont.empty()) { - ResourceFinder rf; - rf.addPath(userFont); - while (rf.next()) { - fonts.push_back(std::make_pair(rf.filename(), 8)); - } + try { + m_sheet = she::instance()->loadRgbaSurface(rf.filename().c_str()); } - for (auto& [path, size] : dataDirs) { - findResources(path, size, fonts); + catch (...) { + throw base::Exception("Error loading %s file", sheet_filename.c_str()); } - - m_defaultFont = loadFont(fonts); } + void SkinTheme::loadFonts(const std::string& skinId) { - FontList dataDirs { - std::make_pair("skins/" + skinId + "/minifont-" + getLanguage() + ".otf", 6), - std::make_pair("skins/" + skinId + "/minifont-" + getLanguage() + ".ttf", 6), - std::make_pair("skins/" + skinId + "/minifont-" + getLanguage() + ".png", 6), - std::make_pair("skins/" + skinId + "/font-" + getLanguage() + ".otf", 6), - std::make_pair("skins/" + skinId + "/font-" + getLanguage() + ".ttf", 6), - std::make_pair("fonts/noto-" + getLanguage() + ".ttf", 6), - std::make_pair("skins/" + skinId + "/minifont.otf", 6), - std::make_pair("skins/" + skinId + "/minifont.ttf", 6), - std::make_pair("skins/" + skinId + "/minifont.png", 6), - std::make_pair("skins/" + skinId + "/font.otf", 6), - std::make_pair("skins/" + skinId + "/font.ttf", 6), - std::make_pair("fonts/tiny5.ttf", 8), - }; - FontList fonts; - if (auto userFont = pref.theme.miniFont(); !userFont.empty()) { + typedef std::vector> FontList; + TRACE("SkinTheme::loadFonts(%s)\n", skinId.c_str()); + Preferences& pref = Preferences::instance(); + auto findResources = [&](const std::string& path, const size_t fontSize, std::vector>& output) { ResourceFinder rf; - rf.addPath(userFont); + rf.includeDataDir(path.c_str()); while (rf.next()) { - fonts.push_back(std::make_pair(rf.filename(), 8)); + output.emplace_back(rf.filename(), fontSize); } + }; + + // ToDo: add the ability to set preferred font size in skin XML + application preferences + { + FontList dataDirs { + std::make_pair("skins/" + skinId + "/font-" + getLanguage() + ".otf", 8), + std::make_pair("skins/" + skinId + "/font-" + getLanguage() + ".ttf", 8), + std::make_pair("skins/" + skinId + "/font-" + getLanguage() + ".png", 7), + std::make_pair("fonts/noto-" + getLanguage() + ".ttf", 8), + std::make_pair("skins/" + skinId + "/font.otf", 8), + std::make_pair("skins/" + skinId + "/font.ttf", 8), + std::make_pair("skins/" + skinId + "/font.png", 7), + std::make_pair("fonts/pixeloid-sans.ttf", 9), + }; + FontList fonts{}; + + if (auto userFont = pref.theme.font(); !userFont.empty()) { + ResourceFinder rf; + rf.addPath(userFont); + while (rf.next()) { + fonts.emplace_back(rf.filename(), 8); + } + } + for (auto& [path, size] : dataDirs) { + findResources(path, size, fonts); + } + + m_defaultFont = loadFont(fonts); } - for (auto& [path, size] : dataDirs) { - findResources(path, size, fonts); - } - m_miniFont = loadFont(fonts); + { + FontList dataDirs { + std::make_pair("skins/" + skinId + "/minifont-" + getLanguage() + ".otf", 6), + std::make_pair("skins/" + skinId + "/minifont-" + getLanguage() + ".ttf", 6), + std::make_pair("skins/" + skinId + "/minifont-" + getLanguage() + ".png", 6), + std::make_pair("skins/" + skinId + "/font-" + getLanguage() + ".otf", 6), + std::make_pair("skins/" + skinId + "/font-" + getLanguage() + ".ttf", 6), + std::make_pair("fonts/noto-" + getLanguage() + ".ttf", 6), + std::make_pair("skins/" + skinId + "/minifont.otf", 6), + std::make_pair("skins/" + skinId + "/minifont.ttf", 6), + std::make_pair("skins/" + skinId + "/minifont.png", 6), + std::make_pair("skins/" + skinId + "/font.otf", 6), + std::make_pair("skins/" + skinId + "/font.ttf", 6), + std::make_pair("fonts/tiny5.ttf", 8), + }; + FontList fonts; + if (auto userFont = pref.theme.miniFont(); !userFont.empty()) { + ResourceFinder rf; + rf.addPath(userFont); + while (rf.next()) { + fonts.emplace_back(rf.filename(), 8); + } + } + for (auto& [path, size] : dataDirs) { + findResources(path, size, fonts); + } + + m_miniFont = loadFont(fonts); + } } -} -static std::optional findFile(const std::string& name) { - { + static std::optional findFile(const std::string& name) { + { ResourceFinder rf; rf.includeDataDir(name.c_str()); if (rf.findFirst()) { return {rf.filename()}; } + } + return {}; } - return {}; -} -void SkinTheme::loadXml(const std::string& skinId) -{ - TRACE("SkinTheme::loadXml(%s)\n", skinId.c_str()); - // Load the skin XML - if (auto filename = findFile("skins/" + skinId + "/skin.xml")) { - loadFonts(skinId); - loadSkinXml(*filename); - return; - } + void SkinTheme::loadXml(const std::string& skinId) + { + TRACE("SkinTheme::loadXml(%s)\n", skinId.c_str()); + // Load the skin XML + if (const auto filename = findFile("skins/" + skinId + "/skin.xml")) { + loadFonts(skinId); + loadSkinXml(*filename); + return; + } - if (auto filename = findFile("skins/" + skinId + "/theme.xml")) { - loadThemeXml(*filename); - return; + if (const auto filename = findFile("skins/" + skinId + "/theme.xml")) { + loadThemeXml(*filename); + } } -} -void SkinTheme::loadThemeXml(const std::string& filename) { - XmlDocumentRef doc = open_xml(filename); - tinyxml2::XMLHandle handle(doc.get()); + void SkinTheme::loadThemeXml(const std::string& filename) { + XmlDocumentRef doc = open_xml(filename); + tinyxml2::XMLHandle handle(doc.get()); - // Load fonts - { - Preferences& pref = Preferences::instance(); - tinyxml2::XMLElement* xmlDim = handle - .FirstChildElement("theme") - .FirstChildElement("fonts") - .FirstChildElement("font").ToElement(); - - std::unordered_map> known; - if (!m_defaultFont) - loadFonts(pref.theme.selected.defaultValue()); - if (m_defaultFont) - known["Aseprite"] = m_defaultFont; - if (m_miniFont) - known["Aseprite Mini"] = m_miniFont; - - for (;xmlDim; xmlDim = xmlDim->NextSiblingElement()) { - std::string id = xmlDim->Attribute("id"); - std::string file = xmlDim->Attribute("file", ""); - std::string name = xmlDim->Attribute("name", ""); - std::string fontattr = xmlDim->Attribute("font", ""); - std::string user; - std::shared_ptr font{}; - auto it = known.find(fontattr); - if (it != known.end()) { - font = it->second; - } else if (!file.empty()) { - uint32_t size = strtol(xmlDim->Attribute("size", "8"), NULL, 10); - font = loadFont({std::make_pair(file, size)}); - if (!font) { - std::cerr << "Could not load font " << file << std::endl; + // Load fonts + { + Preferences& pref = Preferences::instance(); + tinyxml2::XMLElement* xmlDim = handle + .FirstChildElement("theme") + .FirstChildElement("fonts") + .FirstChildElement("font").ToElement(); + + std::unordered_map> known; + if (!m_defaultFont) + loadFonts(pref.theme.selected.defaultValue()); + if (m_defaultFont) + known["Aseprite"] = m_defaultFont; + if (m_miniFont) + known["Aseprite Mini"] = m_miniFont; + + for (;xmlDim; xmlDim = xmlDim->NextSiblingElement()) { + std::string id = xmlDim->Attribute("id"); + std::string file = xmlDim->Attribute("file", ""); + std::string name = xmlDim->Attribute("name", ""); + std::string fontattr = xmlDim->Attribute("font", ""); + std::string user; + std::shared_ptr font{}; + if (auto it = known.find(fontattr); it != known.end()) { + font = it->second; + } else if (!file.empty()) { + uint32_t size = strtol(xmlDim->Attribute("size", "8"), nullptr, 10); + font = loadFont({std::make_pair(file, size)}); + if (!font) { + std::cerr << "Could not load font " << file << std::endl; + } } - } - if (font) { - if (!name.empty()) { - known[name] = font; - } - if (id == "default") { - m_defaultFont = font; - } else if (id == "mini") { - m_miniFont = font; + if (font) { + if (!name.empty()) { + known[name] = font; + } + if (id == "default") { + m_defaultFont = font; + } else if (id == "mini") { + m_miniFont = font; + } } } } - } - - // Load dimension - { - tinyxml2::XMLElement* xmlDim = handle - .FirstChildElement("theme") - .FirstChildElement("dimensions") - .FirstChildElement("dim").ToElement(); - while (xmlDim) { - std::string id = xmlDim->Attribute("id"); - uint32_t value = strtol(xmlDim->Attribute("value"), NULL, 10); - LOG("Loading dimension '%s'...\n", id.c_str()); - - m_dimensions_by_id[id] = value; - xmlDim = xmlDim->NextSiblingElement(); + // Load dimension + { + tinyxml2::XMLElement* xmlDim = handle + .FirstChildElement("theme") + .FirstChildElement("dimensions") + .FirstChildElement("dim").ToElement(); + while (xmlDim) { + std::string id = xmlDim->Attribute("id"); + uint32_t value = strtol(xmlDim->Attribute("value"), nullptr, 10); + + LOG("Loading dimension '%s'...\n", id.c_str()); + + m_dimensions_by_id[id] = static_cast(value); + xmlDim = xmlDim->NextSiblingElement(); + } } - } - // Load colors - { - m_colors_by_id.clear(); - - tinyxml2::XMLElement* xmlColor = handle - .FirstChildElement("theme") - .FirstChildElement("colors") - .FirstChildElement("color").ToElement(); - while (xmlColor) { - std::string id = xmlColor->Attribute("id"); - uint32_t value = strtol(xmlColor->Attribute("value")+1, NULL, 16); - gfx::Color color = gfx::rgba( - (value & 0xff0000) >> 16, - (value & 0xff00) >> 8, - (value & 0xff)); - - LOG("Loading color '%s'...\n", id.c_str()); - - m_colors_by_id[id] = color; - xmlColor = xmlColor->NextSiblingElement(); + // Load colors + { + m_colors_by_id.clear(); + + tinyxml2::XMLElement* xmlColor = handle + .FirstChildElement("theme") + .FirstChildElement("colors") + .FirstChildElement("color").ToElement(); + while (xmlColor) { + std::string id = xmlColor->Attribute("id"); + uint32_t value = strtol(xmlColor->Attribute("value")+1, nullptr, 16); + gfx::Color color = gfx::rgba( + (value & 0xff0000) >> 16, + (value & 0xff00) >> 8, + (value & 0xff)); + + LOG("Loading color '%s'...\n", id.c_str()); + + m_colors_by_id[id] = color; + xmlColor = xmlColor->NextSiblingElement(); + } } - } - // Load cursors - { - tinyxml2::XMLElement* xmlPart = handle - .FirstChildElement("theme") - .FirstChildElement("parts") - .FirstChildElement("part").ToElement(); + // Load cursors + { + tinyxml2::XMLElement* xmlPart = handle + .FirstChildElement("theme") + .FirstChildElement("parts") + .FirstChildElement("part").ToElement(); - std::string cursor_prefix = "cursor_"; - std::string tool_prefix = "tool_"; + std::string cursor_prefix = "cursor_"; + std::string tool_prefix = "tool_"; - for (;xmlPart; xmlPart = xmlPart->NextSiblingElement()) { - std::string id = xmlPart->Attribute("id"); - if (id.substr(0, cursor_prefix.size()) == cursor_prefix) { + for (;xmlPart; xmlPart = xmlPart->NextSiblingElement()) { + std::string id = xmlPart->Attribute("id"); + if (id.substr(0, cursor_prefix.size()) == cursor_prefix) { id = id.substr(cursor_prefix.size()); - int x = strtol(xmlPart->Attribute("x"), NULL, 10); - int y = strtol(xmlPart->Attribute("y"), NULL, 10); - int w = strtol(xmlPart->Attribute("w"), NULL, 10); - int h = strtol(xmlPart->Attribute("h"), NULL, 10); - int focusx = strtol(xmlPart->Attribute("focusx"), NULL, 10); - int focusy = strtol(xmlPart->Attribute("focusy"), NULL, 10); + int x = static_cast(strtol(xmlPart->Attribute("x"), nullptr, 10)); + int y = static_cast(strtol(xmlPart->Attribute("y"), nullptr, 10)); + int w = static_cast(strtol(xmlPart->Attribute("w"), nullptr, 10)); + int h = static_cast(strtol(xmlPart->Attribute("h"), nullptr, 10)); + int focusx = static_cast(strtol(xmlPart->Attribute("focusx"), nullptr, 10)); + int focusy = static_cast(strtol(xmlPart->Attribute("focusy"), nullptr, 10)); int c; LOG("Loading cursor '%s'...\n", id.c_str()); for (c=0; cAttribute("x"), NULL, 10); - int y = strtol(xmlPart->Attribute("y"), NULL, 10); - int w = strtol(xmlPart->Attribute("w"), NULL, 10); - int h = strtol(xmlPart->Attribute("h"), NULL, 10); + int x = static_cast(strtol(xmlPart->Attribute("x"), nullptr, 10)); + int y = static_cast(strtol(xmlPart->Attribute("y"), nullptr, 10)); + int w = static_cast(strtol(xmlPart->Attribute("w"), nullptr, 10)); + int h = static_cast(strtol(xmlPart->Attribute("h"), nullptr, 10)); LOG("Loading tool icon '%s'...\n", id.c_str()); // Crop the tool-icon from the sheet m_toolicon[id] = sliceSheet(m_toolicon[id], gfx::Rect(x, y, w, h)); - } else { - int x = strtol(xmlPart->Attribute("x"), NULL, 10); - int y = strtol(xmlPart->Attribute("y"), NULL, 10); - int w = xmlPart->Attribute("w") ? strtol(xmlPart->Attribute("w"), NULL, 10): 0; - int h = xmlPart->Attribute("h") ? strtol(xmlPart->Attribute("h"), NULL, 10): 0; + } else { + int x = static_cast(strtol(xmlPart->Attribute("x"), nullptr, 10)); + int y = static_cast(strtol(xmlPart->Attribute("y"), nullptr, 10)); + int w = xmlPart->Attribute("w") + ? static_cast(strtol(xmlPart->Attribute("w"), nullptr, 10)) + : 0; + int h = xmlPart->Attribute("h") + ? static_cast(strtol(xmlPart->Attribute("h"), nullptr, 10)) + : 0; LOG("Loading part '%s'...\n", id.c_str()); SkinPartPtr part = m_parts_by_id[id]; if (!part) - part = m_parts_by_id[id] = SkinPartPtr(new SkinPart); + part = m_parts_by_id[id] = SkinPartPtr(new SkinPart); if (w > 0 && h > 0) { - part->setBitmap(0, sliceSheet(part->bitmap(0), gfx::Rect(x, y, w, h))); + part->setBitmap(0, sliceSheet(part->bitmap(0), Rect(x, y, w, h))); } else if (xmlPart->Attribute("w1")) { // 3x3-1 part (NW, N, NE, E, SE, S, SW, W) - int w1 = strtol(xmlPart->Attribute("w1"), NULL, 10); - int w2 = strtol(xmlPart->Attribute("w2"), NULL, 10); - int w3 = strtol(xmlPart->Attribute("w3"), NULL, 10); - int h1 = strtol(xmlPart->Attribute("h1"), NULL, 10); - int h2 = strtol(xmlPart->Attribute("h2"), NULL, 10); - int h3 = strtol(xmlPart->Attribute("h3"), NULL, 10); - - part->setBitmap(0, sliceSheet(part->bitmap(0), gfx::Rect(x, y, w1, h1))); // NW - part->setBitmap(1, sliceSheet(part->bitmap(1), gfx::Rect(x+w1, y, w2, h1))); // N - part->setBitmap(2, sliceSheet(part->bitmap(2), gfx::Rect(x+w1+w2, y, w3, h1))); // NE - part->setBitmap(3, sliceSheet(part->bitmap(3), gfx::Rect(x+w1+w2, y+h1, w3, h2))); // E - part->setBitmap(4, sliceSheet(part->bitmap(4), gfx::Rect(x+w1+w2, y+h1+h2, w3, h3))); // SE - part->setBitmap(5, sliceSheet(part->bitmap(5), gfx::Rect(x+w1, y+h1+h2, w2, h3))); // S - part->setBitmap(6, sliceSheet(part->bitmap(6), gfx::Rect(x, y+h1+h2, w1, h3))); // SW - part->setBitmap(7, sliceSheet(part->bitmap(7), gfx::Rect(x, y+h1, w1, h2))); // W + int w1 = static_cast(strtol(xmlPart->Attribute("w1"), nullptr, 10)); + int w2 = static_cast(strtol(xmlPart->Attribute("w2"), nullptr, 10)); + int w3 = static_cast(strtol(xmlPart->Attribute("w3"), nullptr, 10)); + int h1 = static_cast(strtol(xmlPart->Attribute("h1"), nullptr, 10)); + int h2 = static_cast(strtol(xmlPart->Attribute("h2"), nullptr, 10)); + int h3 = static_cast(strtol(xmlPart->Attribute("h3"), nullptr, 10)); + + part->setBitmap(0, sliceSheet(part->bitmap(0), Rect(x, y, w1, h1))); // NW + part->setBitmap(1, sliceSheet(part->bitmap(1), Rect(x+w1, y, w2, h1))); // N + part->setBitmap(2, sliceSheet(part->bitmap(2), Rect(x+w1+w2, y, w3, h1))); // NE + part->setBitmap(3, sliceSheet(part->bitmap(3), Rect(x+w1+w2, y+h1, w3, h2))); // E + part->setBitmap(4, sliceSheet(part->bitmap(4), Rect(x+w1+w2, y+h1+h2, w3, h3))); // SE + part->setBitmap(5, sliceSheet(part->bitmap(5), Rect(x+w1, y+h1+h2, w2, h3))); // S + part->setBitmap(6, sliceSheet(part->bitmap(6), Rect(x, y+h1+h2, w1, h3))); // SW + part->setBitmap(7, sliceSheet(part->bitmap(7), Rect(x, y+h1, w1, h2))); // W } + } } } - } - // Load styles - { - tinyxml2::XMLElement* xmlStyle = handle - .FirstChildElement("skin") - .FirstChildElement("styles") - .FirstChildElement("style").ToElement(); - while (xmlStyle) { - const char* style_id = xmlStyle->Attribute("id"); - const char* base_id = xmlStyle->Attribute("base"); - const css::Style* base = NULL; - if (!base_id) - base_id = xmlStyle->Attribute("extends"); - if (base_id) - base = m_stylesheet.getCssStyle(base_id); - - css::Style* style = new css::Style(style_id, base); - m_stylesheet.addCssStyle(style); - - tinyxml2::XMLElement* xmlRule = xmlStyle->FirstChildElement(); - while (xmlRule) { - const std::string ruleName = xmlRule->Value(); - - LOG("- Rule '%s' for '%s'\n", ruleName.c_str(), style_id); - - // TODO This code design to read styles could be improved. - - const char* part_id = xmlRule->Attribute("part"); - const char* color_id = xmlRule->Attribute("color"); - - // Style align - int align = 0; - const char* halign = xmlRule->Attribute("align"); - const char* valign = xmlRule->Attribute("valign"); - const char* wordwrap = xmlRule->Attribute("wordwrap"); - if (halign) { - if (strcmp(halign, "left") == 0) align |= LEFT; - else if (strcmp(halign, "right") == 0) align |= RIGHT; - else if (strcmp(halign, "center") == 0) align |= CENTER; - } - if (valign) { - if (strcmp(valign, "top") == 0) align |= TOP; - else if (strcmp(valign, "bottom") == 0) align |= BOTTOM; - else if (strcmp(valign, "middle") == 0) align |= MIDDLE; - } - if (wordwrap && strcmp(wordwrap, "true") == 0) - align |= WORDWRAP; + // Load styles + { + tinyxml2::XMLElement* xmlStyle = handle + .FirstChildElement("skin") + .FirstChildElement("styles") + .FirstChildElement("style").ToElement(); + while (xmlStyle) { + const char* style_id = xmlStyle->Attribute("id"); + const char* base_id = xmlStyle->Attribute("base"); + const css::Style* base = nullptr; + if (!base_id) + base_id = xmlStyle->Attribute("extends"); + if (base_id) + base = m_stylesheet.getCssStyle(base_id); + + auto style = new css::Style(style_id, base); + m_stylesheet.addCssStyle(style); + + tinyxml2::XMLElement* xmlRule = xmlStyle->FirstChildElement(); + while (xmlRule) { + const std::string ruleName = xmlRule->Value(); + + LOG("- Rule '%s' for '%s'\n", ruleName.c_str(), style_id); + + // TODO This code design to read styles could be improved. + + const char* part_id = xmlRule->Attribute("part"); + const char* color_id = xmlRule->Attribute("color"); + + // Style align + int align = 0; + const char* halign = xmlRule->Attribute("align"); + const char* valign = xmlRule->Attribute("valign"); + const char* wordwrap = xmlRule->Attribute("wordwrap"); + if (halign) { + if (strcmp(halign, "left") == 0) align |= LEFT; + else if (strcmp(halign, "right") == 0) align |= RIGHT; + else if (strcmp(halign, "center") == 0) align |= CENTER; + } + if (valign) { + if (strcmp(valign, "top") == 0) align |= TOP; + else if (strcmp(valign, "bottom") == 0) align |= BOTTOM; + else if (strcmp(valign, "middle") == 0) align |= MIDDLE; + } + if (wordwrap && strcmp(wordwrap, "true") == 0) + align |= WORDWRAP; - if (ruleName == "background") { - const char* repeat_id = xmlRule->Attribute("repeat"); + if (ruleName == "background") { + const char* repeat_id = xmlRule->Attribute("repeat"); - if (color_id) (*style)[StyleSheet::backgroundColorRule()] = value_or_none(color_id); - if (part_id) (*style)[StyleSheet::backgroundPartRule()] = value_or_none(part_id); - if (repeat_id) (*style)[StyleSheet::backgroundRepeatRule()] = value_or_none(repeat_id); - } - else if (ruleName == "icon") { - if (align) (*style)[StyleSheet::iconAlignRule()] = css::Value(align); - if (part_id) (*style)[StyleSheet::iconPartRule()] = css::Value(part_id); + if (color_id) (*style)[StyleSheet::backgroundColorRule()] = value_or_none(color_id); + if (part_id) (*style)[StyleSheet::backgroundPartRule()] = value_or_none(part_id); + if (repeat_id) (*style)[StyleSheet::backgroundRepeatRule()] = value_or_none(repeat_id); + } + else if (ruleName == "icon") { + if (align) (*style)[StyleSheet::iconAlignRule()] = css::Value(align); + if (part_id) (*style)[StyleSheet::iconPartRule()] = css::Value(part_id); - const char* x = xmlRule->Attribute("x"); - const char* y = xmlRule->Attribute("y"); + const char* x = xmlRule->Attribute("x"); + const char* y = xmlRule->Attribute("y"); - if (x) (*style)[StyleSheet::iconXRule()] = css::Value(strtol(x, NULL, 10)); - if (y) (*style)[StyleSheet::iconYRule()] = css::Value(strtol(y, NULL, 10)); - } - else if (ruleName == "text") { - if (color_id) (*style)[StyleSheet::textColorRule()] = css::Value(color_id); - if (align) (*style)[StyleSheet::textAlignRule()] = css::Value(align); - - const char* l = xmlRule->Attribute("padding-left"); - const char* t = xmlRule->Attribute("padding-top"); - const char* r = xmlRule->Attribute("padding-right"); - const char* b = xmlRule->Attribute("padding-bottom"); - - if (l) (*style)[StyleSheet::paddingLeftRule()] = css::Value(strtol(l, NULL, 10)); - if (t) (*style)[StyleSheet::paddingTopRule()] = css::Value(strtol(t, NULL, 10)); - if (r) (*style)[StyleSheet::paddingRightRule()] = css::Value(strtol(r, NULL, 10)); - if (b) (*style)[StyleSheet::paddingBottomRule()] = css::Value(strtol(b, NULL, 10)); + if (x) (*style)[StyleSheet::iconXRule()] = css::Value(strtol(x, nullptr, 10)); + if (y) (*style)[StyleSheet::iconYRule()] = css::Value(strtol(y, nullptr, 10)); + } + else if (ruleName == "text") { + if (color_id) (*style)[StyleSheet::textColorRule()] = css::Value(color_id); + if (align) (*style)[StyleSheet::textAlignRule()] = css::Value(align); + + const char* l = xmlRule->Attribute("padding-left"); + const char* t = xmlRule->Attribute("padding-top"); + const char* r = xmlRule->Attribute("padding-right"); + const char* b = xmlRule->Attribute("padding-bottom"); + + if (l) (*style)[StyleSheet::paddingLeftRule()] = css::Value(strtol(l, nullptr, 10)); + if (t) (*style)[StyleSheet::paddingTopRule()] = css::Value(strtol(t, nullptr, 10)); + if (r) (*style)[StyleSheet::paddingRightRule()] = css::Value(strtol(r, nullptr, 10)); + if (b) (*style)[StyleSheet::paddingBottomRule()] = css::Value(strtol(b, nullptr, 10)); + } + + xmlRule = xmlRule->NextSiblingElement(); } - xmlRule = xmlRule->NextSiblingElement(); + xmlStyle = xmlStyle->NextSiblingElement(); } - - xmlStyle = xmlStyle->NextSiblingElement(); } - } - - SkinFile::updateInternals(); -} - -void SkinTheme::loadSkinXml(const std::string& filename) { - XmlDocumentRef doc = open_xml(filename); - tinyxml2::XMLHandle handle(doc.get()); - - // Load dimension - { - tinyxml2::XMLElement* xmlDim = handle - .FirstChildElement("skin") - .FirstChildElement("dimensions") - .FirstChildElement("dim").ToElement(); - while (xmlDim) { - std::string id = xmlDim->Attribute("id"); - uint32_t value = strtol(xmlDim->Attribute("value"), NULL, 10); - - LOG("Loading dimension '%s'...\n", id.c_str()); - m_dimensions_by_id[id] = value; - xmlDim = xmlDim->NextSiblingElement(); - } + SkinFile::updateInternals(); } - // Load colors - { - tinyxml2::XMLElement* xmlColor = handle - .FirstChildElement("skin") - .FirstChildElement("colors") - .FirstChildElement("color").ToElement(); - while (xmlColor) { - std::string id = xmlColor->Attribute("id"); - uint32_t value = strtol(xmlColor->Attribute("value")+1, NULL, 16); - gfx::Color color = gfx::rgba( - (value & 0xff0000) >> 16, - (value & 0xff00) >> 8, - (value & 0xff)); - - LOG("Loading color '%s'...\n", id.c_str()); - - m_colors_by_id[id] = color; - xmlColor = xmlColor->NextSiblingElement(); - } - } + void SkinTheme::loadSkinXml(const std::string& filename) { + const XmlDocumentRef doc = open_xml(filename); + tinyxml2::XMLHandle handle(doc.get()); - // Load cursors - { - tinyxml2::XMLElement* xmlCursor = handle - .FirstChildElement("skin") - .FirstChildElement("cursors") - .FirstChildElement("cursor").ToElement(); - while (xmlCursor) { - std::string id = xmlCursor->Attribute("id"); - int x = strtol(xmlCursor->Attribute("x"), NULL, 10); - int y = strtol(xmlCursor->Attribute("y"), NULL, 10); - int w = strtol(xmlCursor->Attribute("w"), NULL, 10); - int h = strtol(xmlCursor->Attribute("h"), NULL, 10); - int focusx = strtol(xmlCursor->Attribute("focusx"), NULL, 10); - int focusy = strtol(xmlCursor->Attribute("focusy"), NULL, 10); - int c; - - LOG("Loading cursor '%s'...\n", id.c_str()); - - for (c=0; cAttribute("id"); + const uint32_t value = strtol(xmlDim->Attribute("value"), nullptr, 10); + + LOG("Loading dimension '%s'...\n", id.c_str()); + + m_dimensions_by_id[id] = value; + xmlDim = xmlDim->NextSiblingElement(); } + } - if (c == kCursorTypes) { - throw base::Exception("Unknown cursor specified in '%s':\n" - "\n", filename.c_str(), id.c_str()); + // Load colors + { + tinyxml2::XMLElement* xmlColor = handle + .FirstChildElement("skin") + .FirstChildElement("colors") + .FirstChildElement("color").ToElement(); + while (xmlColor) { + std::string id = xmlColor->Attribute("id"); + const uint32_t value = strtol(xmlColor->Attribute("value")+1, nullptr, 16); + const gfx::Color color = gfx::rgba( + (value & 0xff0000) >> 16, + (value & 0xff00) >> 8, + value & 0xff); + + LOG("Loading color '%s'...\n", id.c_str()); + + m_colors_by_id[id] = color; + xmlColor = xmlColor->NextSiblingElement(); } - - xmlCursor = xmlCursor->NextSiblingElement(); } - } - // Load tool icons - { - tinyxml2::XMLElement* xmlIcon = handle - .FirstChildElement("skin") - .FirstChildElement("tools") - .FirstChildElement("tool").ToElement(); - while (xmlIcon) { - // Get the tool-icon rectangle - const char* id = xmlIcon->Attribute("id"); - int x = strtol(xmlIcon->Attribute("x"), NULL, 10); - int y = strtol(xmlIcon->Attribute("y"), NULL, 10); - int w = strtol(xmlIcon->Attribute("w"), NULL, 10); - int h = strtol(xmlIcon->Attribute("h"), NULL, 10); + // Load cursors + { + tinyxml2::XMLElement* xmlCursor = handle + .FirstChildElement("skin") + .FirstChildElement("cursors") + .FirstChildElement("cursor").ToElement(); + while (xmlCursor) { + std::string id = xmlCursor->Attribute("id"); + int x = strtol(xmlCursor->Attribute("x"), nullptr, 10); + int y = strtol(xmlCursor->Attribute("y"), nullptr, 10); + int w = strtol(xmlCursor->Attribute("w"), nullptr, 10); + int h = strtol(xmlCursor->Attribute("h"), nullptr, 10); + const int focusx = strtol(xmlCursor->Attribute("focusx"), nullptr, 10); + const int focusy = strtol(xmlCursor->Attribute("focusy"), nullptr, 10); + int c; + + LOG("Loading cursor '%s'...\n", id.c_str()); + + for (c=0; cNextSiblingElement(); - } - } + m_cursors[c] = new Cursor(slice, + Point(focusx*guiscale(), focusy*guiscale())); + break; + } - // Load parts - { - tinyxml2::XMLElement* xmlPart = handle - .FirstChildElement("skin") - .FirstChildElement("parts") - .FirstChildElement("part").ToElement(); - while (xmlPart) { - // Get the tool-icon rectangle - const char* part_id = xmlPart->Attribute("id"); - int x = strtol(xmlPart->Attribute("x"), NULL, 10); - int y = strtol(xmlPart->Attribute("y"), NULL, 10); - int w = xmlPart->Attribute("w") ? strtol(xmlPart->Attribute("w"), NULL, 10): 0; - int h = xmlPart->Attribute("h") ? strtol(xmlPart->Attribute("h"), NULL, 10): 0; - - LOG("Loading part '%s'...\n", part_id); - - SkinPartPtr part = m_parts_by_id[part_id]; - if (!part) - part = m_parts_by_id[part_id] = SkinPartPtr(new SkinPart); - - if (w > 0 && h > 0) { - part->setBitmap(0, - sliceSheet(part->bitmap(0), gfx::Rect(x, y, w, h))); - } - else if (xmlPart->Attribute("w1")) { // 3x3-1 part (NW, N, NE, E, SE, S, SW, W) - int w1 = strtol(xmlPart->Attribute("w1"), NULL, 10); - int w2 = strtol(xmlPart->Attribute("w2"), NULL, 10); - int w3 = strtol(xmlPart->Attribute("w3"), NULL, 10); - int h1 = strtol(xmlPart->Attribute("h1"), NULL, 10); - int h2 = strtol(xmlPart->Attribute("h2"), NULL, 10); - int h3 = strtol(xmlPart->Attribute("h3"), NULL, 10); - - part->setBitmap(0, sliceSheet(part->bitmap(0), gfx::Rect(x, y, w1, h1))); // NW - part->setBitmap(1, sliceSheet(part->bitmap(1), gfx::Rect(x+w1, y, w2, h1))); // N - part->setBitmap(2, sliceSheet(part->bitmap(2), gfx::Rect(x+w1+w2, y, w3, h1))); // NE - part->setBitmap(3, sliceSheet(part->bitmap(3), gfx::Rect(x+w1+w2, y+h1, w3, h2))); // E - part->setBitmap(4, sliceSheet(part->bitmap(4), gfx::Rect(x+w1+w2, y+h1+h2, w3, h3))); // SE - part->setBitmap(5, sliceSheet(part->bitmap(5), gfx::Rect(x+w1, y+h1+h2, w2, h3))); // S - part->setBitmap(6, sliceSheet(part->bitmap(6), gfx::Rect(x, y+h1+h2, w1, h3))); // SW - part->setBitmap(7, sliceSheet(part->bitmap(7), gfx::Rect(x, y+h1, w1, h2))); // W + if (c == kCursorTypes) { + throw base::Exception("Unknown cursor specified in '%s':\n" + "\n", filename.c_str(), id.c_str()); + } + + xmlCursor = xmlCursor->NextSiblingElement(); } + } - xmlPart = xmlPart->NextSiblingElement(); + // Load tool icons + { + tinyxml2::XMLElement* xmlIcon = handle + .FirstChildElement("skin") + .FirstChildElement("tools") + .FirstChildElement("tool").ToElement(); + while (xmlIcon) { + // Get the tool-icon rectangle + const char* id = xmlIcon->Attribute("id"); + int x = strtol(xmlIcon->Attribute("x"), nullptr, 10); + int y = strtol(xmlIcon->Attribute("y"), nullptr, 10); + int w = strtol(xmlIcon->Attribute("w"), nullptr, 10); + int h = strtol(xmlIcon->Attribute("h"), nullptr, 10); + + LOG("Loading tool icon '%s'...\n", id); + + // Crop the tool-icon from the sheet + m_toolicon[id] = sliceSheet(m_toolicon[id], Rect(x, y, w, h)); + + xmlIcon = xmlIcon->NextSiblingElement(); + } } - } - // Load styles - { - tinyxml2::XMLElement* xmlStyle = handle - .FirstChildElement("skin") - .FirstChildElement("stylesheet") - .FirstChildElement("style").ToElement(); - while (xmlStyle) { - const char* style_id = xmlStyle->Attribute("id"); - const char* base_id = xmlStyle->Attribute("base"); - const css::Style* base = NULL; - - if (base_id) - base = m_stylesheet.getCssStyle(base_id); - - css::Style* style = new css::Style(style_id, base); - m_stylesheet.addCssStyle(style); - - tinyxml2::XMLElement* xmlRule = xmlStyle->FirstChildElement(); - while (xmlRule) { - const std::string ruleName = xmlRule->Value(); - - LOG("- Rule '%s' for '%s'\n", ruleName.c_str(), style_id); - - // TODO This code design to read styles could be improved. - - const char* part_id = xmlRule->Attribute("part"); - const char* color_id = xmlRule->Attribute("color"); - - // Style align - int align = 0; - const char* halign = xmlRule->Attribute("align"); - const char* valign = xmlRule->Attribute("valign"); - const char* wordwrap = xmlRule->Attribute("wordwrap"); - if (halign) { - if (strcmp(halign, "left") == 0) align |= LEFT; - else if (strcmp(halign, "right") == 0) align |= RIGHT; - else if (strcmp(halign, "center") == 0) align |= CENTER; + // Load parts + { + tinyxml2::XMLElement* xmlPart = handle + .FirstChildElement("skin") + .FirstChildElement("parts") + .FirstChildElement("part").ToElement(); + while (xmlPart) { + // Get the tool-icon rectangle + const char* part_id = xmlPart->Attribute("id"); + int x = strtol(xmlPart->Attribute("x"), nullptr, 10); + int y = strtol(xmlPart->Attribute("y"), nullptr, 10); + int w = xmlPart->Attribute("w") ? strtol(xmlPart->Attribute("w"), nullptr, 10): 0; + int h = xmlPart->Attribute("h") ? strtol(xmlPart->Attribute("h"), nullptr, 10): 0; + + LOG("Loading part '%s'...\n", part_id); + + SkinPartPtr part = m_parts_by_id[part_id]; + if (!part) + part = m_parts_by_id[part_id] = SkinPartPtr(new SkinPart); + + if (w > 0 && h > 0) { + part->setBitmap(0, + sliceSheet(part->bitmap(0), Rect(x, y, w, h))); } - if (valign) { - if (strcmp(valign, "top") == 0) align |= TOP; - else if (strcmp(valign, "bottom") == 0) align |= BOTTOM; - else if (strcmp(valign, "middle") == 0) align |= MIDDLE; + else if (xmlPart->Attribute("w1")) { // 3x3-1 part (NW, N, NE, E, SE, S, SW, W) + int w1 = strtol(xmlPart->Attribute("w1"), nullptr, 10); + int w2 = strtol(xmlPart->Attribute("w2"), nullptr, 10); + int w3 = strtol(xmlPart->Attribute("w3"), nullptr, 10); + int h1 = strtol(xmlPart->Attribute("h1"), nullptr, 10); + int h2 = strtol(xmlPart->Attribute("h2"), nullptr, 10); + int h3 = strtol(xmlPart->Attribute("h3"), nullptr, 10); + + part->setBitmap(0, sliceSheet(part->bitmap(0), Rect(x, y, w1, h1))); // NW + part->setBitmap(1, sliceSheet(part->bitmap(1), Rect(x+w1, y, w2, h1))); // N + part->setBitmap(2, sliceSheet(part->bitmap(2), Rect(x+w1+w2, y, w3, h1))); // NE + part->setBitmap(3, sliceSheet(part->bitmap(3), Rect(x+w1+w2, y+h1, w3, h2))); // E + part->setBitmap(4, sliceSheet(part->bitmap(4), Rect(x+w1+w2, y+h1+h2, w3, h3))); // SE + part->setBitmap(5, sliceSheet(part->bitmap(5), Rect(x+w1, y+h1+h2, w2, h3))); // S + part->setBitmap(6, sliceSheet(part->bitmap(6), Rect(x, y+h1+h2, w1, h3))); // SW + part->setBitmap(7, sliceSheet(part->bitmap(7), Rect(x, y+h1, w1, h2))); // W } - if (wordwrap && strcmp(wordwrap, "true") == 0) - align |= WORDWRAP; - if (ruleName == "background") { - const char* repeat_id = xmlRule->Attribute("repeat"); + xmlPart = xmlPart->NextSiblingElement(); + } + } - if (color_id) (*style)[StyleSheet::backgroundColorRule()] = value_or_none(color_id); - if (part_id) (*style)[StyleSheet::backgroundPartRule()] = value_or_none(part_id); - if (repeat_id) (*style)[StyleSheet::backgroundRepeatRule()] = value_or_none(repeat_id); - } - else if (ruleName == "icon") { - if (align) (*style)[StyleSheet::iconAlignRule()] = css::Value(align); - if (part_id) (*style)[StyleSheet::iconPartRule()] = css::Value(part_id); + // Load styles + { + tinyxml2::XMLElement* xmlStyle = handle + .FirstChildElement("skin") + .FirstChildElement("stylesheet") + .FirstChildElement("style").ToElement(); + while (xmlStyle) { + const char* style_id = xmlStyle->Attribute("id"); + const char* base_id = xmlStyle->Attribute("base"); + const css::Style* base = nullptr; + + if (base_id) + base = m_stylesheet.getCssStyle(base_id); + + const auto style = new css::Style(style_id, base); + m_stylesheet.addCssStyle(style); + + tinyxml2::XMLElement* xmlRule = xmlStyle->FirstChildElement(); + while (xmlRule) { + const std::string ruleName = xmlRule->Value(); + + LOG("- Rule '%s' for '%s'\n", ruleName.c_str(), style_id); + + // TODO This code design to read styles could be improved. + + const char* part_id = xmlRule->Attribute("part"); + const char* color_id = xmlRule->Attribute("color"); + + // Style align + int align = 0; + const char* halign = xmlRule->Attribute("align"); + const char* valign = xmlRule->Attribute("valign"); + const char* wordwrap = xmlRule->Attribute("wordwrap"); + if (halign) { + if (strcmp(halign, "left") == 0) align |= LEFT; + else if (strcmp(halign, "right") == 0) align |= RIGHT; + else if (strcmp(halign, "center") == 0) align |= CENTER; + } + if (valign) { + if (strcmp(valign, "top") == 0) align |= TOP; + else if (strcmp(valign, "bottom") == 0) align |= BOTTOM; + else if (strcmp(valign, "middle") == 0) align |= MIDDLE; + } + if (wordwrap && strcmp(wordwrap, "true") == 0) + align |= WORDWRAP; - const char* x = xmlRule->Attribute("x"); - const char* y = xmlRule->Attribute("y"); + if (ruleName == "background") { + const char* repeat_id = xmlRule->Attribute("repeat"); - if (x) (*style)[StyleSheet::iconXRule()] = css::Value(strtol(x, NULL, 10)); - if (y) (*style)[StyleSheet::iconYRule()] = css::Value(strtol(y, NULL, 10)); - } - else if (ruleName == "text") { - if (color_id) (*style)[StyleSheet::textColorRule()] = css::Value(color_id); - if (align) (*style)[StyleSheet::textAlignRule()] = css::Value(align); - - const char* l = xmlRule->Attribute("padding-left"); - const char* t = xmlRule->Attribute("padding-top"); - const char* r = xmlRule->Attribute("padding-right"); - const char* b = xmlRule->Attribute("padding-bottom"); - - if (l) (*style)[StyleSheet::paddingLeftRule()] = css::Value(strtol(l, NULL, 10)); - if (t) (*style)[StyleSheet::paddingTopRule()] = css::Value(strtol(t, NULL, 10)); - if (r) (*style)[StyleSheet::paddingRightRule()] = css::Value(strtol(r, NULL, 10)); - if (b) (*style)[StyleSheet::paddingBottomRule()] = css::Value(strtol(b, NULL, 10)); + if (color_id) (*style)[StyleSheet::backgroundColorRule()] = value_or_none(color_id); + if (part_id) (*style)[StyleSheet::backgroundPartRule()] = value_or_none(part_id); + if (repeat_id) (*style)[StyleSheet::backgroundRepeatRule()] = value_or_none(repeat_id); + } + else if (ruleName == "icon") { + if (align) (*style)[StyleSheet::iconAlignRule()] = css::Value(align); + if (part_id) (*style)[StyleSheet::iconPartRule()] = css::Value(part_id); + + const char* x = xmlRule->Attribute("x"); + const char* y = xmlRule->Attribute("y"); + + if (x) (*style)[StyleSheet::iconXRule()] = css::Value(strtol(x, nullptr, 10)); + if (y) (*style)[StyleSheet::iconYRule()] = css::Value(strtol(y, nullptr, 10)); + } + else if (ruleName == "text") { + if (color_id) (*style)[StyleSheet::textColorRule()] = css::Value(color_id); + if (align) (*style)[StyleSheet::textAlignRule()] = css::Value(align); + + const char* l = xmlRule->Attribute("padding-left"); + const char* t = xmlRule->Attribute("padding-top"); + const char* r = xmlRule->Attribute("padding-right"); + const char* b = xmlRule->Attribute("padding-bottom"); + + if (l) (*style)[StyleSheet::paddingLeftRule()] = css::Value(strtol(l, nullptr, 10)); + if (t) (*style)[StyleSheet::paddingTopRule()] = css::Value(strtol(t, nullptr, 10)); + if (r) (*style)[StyleSheet::paddingRightRule()] = css::Value(strtol(r, nullptr, 10)); + if (b) (*style)[StyleSheet::paddingBottomRule()] = css::Value(strtol(b, nullptr, 10)); + } + + xmlRule = xmlRule->NextSiblingElement(); } - xmlRule = xmlRule->NextSiblingElement(); + xmlStyle = xmlStyle->NextSiblingElement(); } - - xmlStyle = xmlStyle->NextSiblingElement(); } + + SkinFile::updateInternals(); } - SkinFile::updateInternals(); -} + she::Surface* SkinTheme::sliceSheet(she::Surface* sur, const Rect& bounds) const + { + if (sur && (sur->width() != bounds.w || + sur->height() != bounds.h)) { + sur->dispose(); + sur = nullptr; + } -she::Surface* SkinTheme::sliceSheet(she::Surface* sur, const gfx::Rect& bounds) -{ - if (sur && (sur->width() != bounds.w || - sur->height() != bounds.h)) { - sur->dispose(); - sur = NULL; - } + if (!sur) + sur = she::instance()->createRgbaSurface(bounds.w, bounds.h); - if (!sur) - sur = she::instance()->createRgbaSurface(bounds.w, bounds.h); + { + she::SurfaceLock lockSrc(m_sheet); + she::SurfaceLock lockDst(sur); + m_sheet->blitTo(sur, bounds.x, bounds.y, 0, 0, bounds.w, bounds.h); + } - { - she::SurfaceLock lockSrc(m_sheet); - she::SurfaceLock lockDst(sur); - m_sheet->blitTo(sur, bounds.x, bounds.y, 0, 0, bounds.w, bounds.h); + sur->applyScale(guiscale()); + return sur; } - sur->applyScale(guiscale()); - return sur; -} + std::shared_ptr SkinTheme::getWidgetFont(const Widget* widget) const + { + if (const SkinPropertyPtr skinProperty = widget->getProperty(SkinProperty::Name); + skinProperty && skinProperty->hasMiniFont()) + return getMiniFont(); -std::shared_ptr SkinTheme::getWidgetFont(const Widget* widget) const -{ - SkinPropertyPtr skinPropery = widget->getProperty(SkinProperty::Name); - if (skinPropery && skinPropery->hasMiniFont()) - return getMiniFont(); - else return getDefaultFont(); -} - -Cursor* SkinTheme::getCursor(CursorType type) -{ - if (type == kNoCursor) { - return NULL; } - else { + + Cursor* SkinTheme::getCursor(const CursorType type) + { + if (type == kNoCursor) + return nullptr; + ASSERT(type >= kFirstCursorType && type <= kLastCursorType); return m_cursors[type]; } -} -void SkinTheme::initWidget(Widget* widget) -{ + void SkinTheme::initWidget(Widget* widget) + { #define BORDER(n) \ widget->setBorder(gfx::Border(n)) #define BORDER4(L,T,R,B) \ widget->setBorder(gfx::Border((L), (T), (R), (B))) - int scale = guiscale(); - - switch (widget->type()) { - - case kBoxWidget: - BORDER(0); - widget->setChildSpacing(4 * scale); - break; - - case kButtonWidget: - BORDER4( - parts.buttonNormal()->bitmapW()->width(), - parts.buttonNormal()->bitmapN()->height(), - parts.buttonNormal()->bitmapE()->width(), - parts.buttonNormal()->bitmapS()->height()); - widget->setChildSpacing(0); - break; - - case kCheckWidget: - BORDER(2 * scale); - widget->setChildSpacing(4 * scale); + const int scale = guiscale(); + switch (widget->type()) { + case kBoxWidget: + BORDER(0); + widget->setChildSpacing(4 * scale); + break; + case kButtonWidget: + BORDER4( + parts.buttonNormal()->bitmapW()->width(), + parts.buttonNormal()->bitmapN()->height(), + parts.buttonNormal()->bitmapE()->width(), + parts.buttonNormal()->bitmapS()->height()); + widget->setChildSpacing(0); + break; + case kCheckWidget: + BORDER(2 * scale); + widget->setChildSpacing(4 * scale); - static_cast(widget)->setIconInterface + static_cast(widget)->setIconInterface (new ButtonIconImpl(parts.checkNormal(), parts.checkSelected(), parts.checkDisabled(), LEFT | MIDDLE)); - break; - - case kEntryWidget: - BORDER4( - parts.sunkenNormal()->bitmapW()->width(), - parts.sunkenNormal()->bitmapN()->height(), - parts.sunkenNormal()->bitmapE()->width(), - parts.sunkenNormal()->bitmapS()->height()); - widget->setChildSpacing(3 * scale); - break; - - case kGridWidget: - BORDER(0); - widget->setChildSpacing(4 * scale); - break; - - case kLabelWidget: - BORDER(1 * scale); - break; - - case kListBoxWidget: - BORDER(0); - widget->setChildSpacing(0); - break; - - case kListItemWidget: - BORDER(1 * scale); - break; - - case kComboBoxWidget: - { - ComboBox* combobox = dynamic_cast(widget); - ASSERT(combobox != NULL); + break; + case kEntryWidget: + BORDER4( + parts.sunkenNormal()->bitmapW()->width(), + parts.sunkenNormal()->bitmapN()->height(), + parts.sunkenNormal()->bitmapE()->width(), + parts.sunkenNormal()->bitmapS()->height()); + widget->setChildSpacing(3 * scale); + break; + case kGridWidget: + BORDER(0); + widget->setChildSpacing(4 * scale); + break; + case kLabelWidget: + BORDER(1 * scale); + break; + case kListBoxWidget: + BORDER(0); + widget->setChildSpacing(0); + break; + case kListItemWidget: + BORDER(1 * scale); + break; + case kComboBoxWidget: + { + const auto combobox = dynamic_cast(widget); + ASSERT(combobox != nullptr); - Button* button = combobox->getButtonWidget(); + Button* button = combobox->getButtonWidget(); - button->setBorder(gfx::Border(0)); - button->setChildSpacing(0); - button->setMinSize(gfx::Size(15 * guiscale(), - 16 * guiscale())); + button->setBorder(Border(0)); + button->setChildSpacing(0); + button->setMinSize(Size(15 * guiscale(), + 16 * guiscale())); - static_cast(button)->setIconInterface + button->setIconInterface (new ButtonIconImpl(parts.comboboxArrowDown(), parts.comboboxArrowDownSelected(), parts.comboboxArrowDownDisabled(), CENTER | MIDDLE)); - } - break; - - case kMenuWidget: - case kMenuBarWidget: - case kMenuBoxWidget: - BORDER(0); - widget->setChildSpacing(0); - break; - - case kMenuItemWidget: - BORDER(2 * scale); - widget->setChildSpacing(18 * scale); - break; - - case kSplitterWidget: - BORDER(0); - widget->setChildSpacing(3 * scale); - break; - - case kRadioWidget: - BORDER(2 * scale); - widget->setChildSpacing(4 * scale); - - static_cast(widget)->setIconInterface + } + break; + case kMenuWidget: + case kMenuBarWidget: + case kMenuBoxWidget: + BORDER(0); + widget->setChildSpacing(0); + break; + case kMenuItemWidget: + BORDER(2 * scale); + widget->setChildSpacing(18 * scale); + break; + case kSplitterWidget: + BORDER(0); + widget->setChildSpacing(3 * scale); + break; + case kRadioWidget: + BORDER(2 * scale); + widget->setChildSpacing(4 * scale); + + static_cast(widget)->setIconInterface (new ButtonIconImpl(parts.radioNormal(), parts.radioSelected(), parts.radioDisabled(), LEFT | MIDDLE)); - break; - - case kSeparatorWidget: - // Frame - if ((widget->align() & HORIZONTAL) && - (widget->align() & VERTICAL)) { - BORDER(4 * scale); - } - // Horizontal bar - else if (widget->align() & HORIZONTAL) { - BORDER4(2 * scale, 4 * scale, 2 * scale, 0); - } - // Vertical bar - else { - BORDER4(4 * scale, 2 * scale, 1 * scale, 2 * scale); - } - break; - - case kSliderWidget: - BORDER4( - parts.sliderEmpty()->bitmapW()->width()-1*scale, - parts.sliderEmpty()->bitmapN()->height(), - parts.sliderEmpty()->bitmapE()->width()-1*scale, - parts.sliderEmpty()->bitmapS()->height()-1*scale); - widget->setChildSpacing(widget->textHeight()); - widget->setAlign(CENTER | MIDDLE); - break; - - case kTextBoxWidget: - BORDER(0); - widget->setChildSpacing(0); - break; - - case kViewWidget: - BORDER4( - parts.sunkenNormal()->bitmapW()->width()-1*scale, - parts.sunkenNormal()->bitmapN()->height(), - parts.sunkenNormal()->bitmapE()->width()-1*scale, - parts.sunkenNormal()->bitmapS()->height()-1*scale); - widget->setChildSpacing(0); - widget->setBgColor(colors.windowFace()); - break; - - case kViewScrollbarWidget: - BORDER(1 * scale); - widget->setChildSpacing(0); - break; - - case kViewViewportWidget: - BORDER(0); - widget->setChildSpacing(0); - break; - - case kWindowWidget: - if (!static_cast(widget)->isDesktop()) { - if (widget->hasText()) { - BORDER4(6 * scale, - (4+6) * scale + widget->textHeight(), - 6 * scale, - 6 * scale); - - if (!widget->hasFlags(INITIALIZED)) { - Button* button = new WindowCloseButton(); - widget->addChild(button); - } + break; + case kSeparatorWidget: + // Frame + if (widget->align() & HORIZONTAL && + widget->align() & VERTICAL) { + BORDER(4 * scale); + } + // Horizontal bar + else if (widget->align() & HORIZONTAL) { + BORDER4(2 * scale, 4 * scale, 2 * scale, 0); } + // Vertical bar else { - BORDER(3 * scale); + BORDER4(4 * scale, 2 * scale, 1 * scale, 2 * scale); } - } - else { + break; + case kSliderWidget: + BORDER4( + parts.sliderEmpty()->bitmapW()->width()-1*scale, + parts.sliderEmpty()->bitmapN()->height(), + parts.sliderEmpty()->bitmapE()->width()-1*scale, + parts.sliderEmpty()->bitmapS()->height()-1*scale); + widget->setChildSpacing(widget->textHeight()); + widget->setAlign(CENTER | MIDDLE); + break; + case kTextBoxWidget: BORDER(0); - } - - widget->setChildSpacing(4 * scale); // TODO this hard-coded 4 should be configurable in skin.xml - - // Tooltip background color - if (dynamic_cast(widget)) - widget->setBgColor(SkinTheme::instance()->colors.tooltipFace()); - else + widget->setChildSpacing(0); + break; + case kViewWidget: + BORDER4( + parts.sunkenNormal()->bitmapW()->width()-1*scale, + parts.sunkenNormal()->bitmapN()->height(), + parts.sunkenNormal()->bitmapE()->width()-1*scale, + parts.sunkenNormal()->bitmapS()->height()-1*scale); + widget->setChildSpacing(0); widget->setBgColor(colors.windowFace()); - break; + break; + case kViewScrollbarWidget: + BORDER(1 * scale); + widget->setChildSpacing(0); + break; + case kViewViewportWidget: + BORDER(0); + widget->setChildSpacing(0); + break; + case kWindowWidget: + if (!dynamic_cast(widget)->isDesktop()) { + if (widget->hasText()) { + BORDER4(6 * scale, + (4+6) * scale + widget->textHeight(), + 6 * scale, + 6 * scale); + + if (!widget->hasFlags(INITIALIZED)) { + Button* button = new WindowCloseButton(); + widget->addChild(button); + } + } + else { + BORDER(3 * scale); + } + } + else { + BORDER(0); + } - default: - break; + widget->setChildSpacing(4 * scale); // TODO this hard-coded 4 should be configurable in skin.xml + + // Tooltip background color + if (dynamic_cast(widget)) + widget->setBgColor(instance()->colors.tooltipFace()); + else + widget->setBgColor(colors.windowFace()); + break; + default: + break; + } } -} -void SkinTheme::getWindowMask(Widget* widget, Region& region) -{ - region = widget->bounds(); -} + void SkinTheme::getWindowMask(Widget* widget, Region& region) + { + region = widget->bounds(); + } -void SkinTheme::setDecorativeWidgetBounds(Widget* widget) -{ - if (widget->id() == kThemeCloseButtonId) { - Widget* window = widget->parent(); - gfx::Rect rect(parts.windowCloseButtonNormal()->size()); + void SkinTheme::setDecorativeWidgetBounds(Widget* widget) + { + if (widget->id() == kThemeCloseButtonId) { + const Widget* window = widget->parent(); + Rect rect(parts.windowCloseButtonNormal()->size()); - rect.offset(window->bounds().x2() - 3*guiscale() - rect.w, - window->bounds().y + 3*guiscale()); + rect.offset(window->bounds().x2() - 3*guiscale() - rect.w, + window->bounds().y + 3*guiscale()); - widget->setBounds(rect); + widget->setBounds(rect); + } } -} -int SkinTheme::getScrollbarSize() -{ - return dimensions.scrollbarSize(); -} + int SkinTheme::getScrollbarSize() + { + return dimensions.scrollbarSize(); + } -void SkinTheme::paintDesktop(PaintEvent& ev) -{ - Graphics* g = ev.graphics(); + void SkinTheme::paintDesktop(PaintEvent& ev) + { + Graphics* g = ev.graphics(); - g->fillRect(colors.disabled(), g->getClipBounds()); -} + g->fillRect(colors.disabled(), g->getClipBounds()); + } -void SkinTheme::paintBox(PaintEvent& ev) -{ - Widget* widget = static_cast(ev.getSource()); - Graphics* g = ev.graphics(); + void SkinTheme::paintBox(PaintEvent& ev) + { + const Widget* widget = ev.getSource(); + Graphics* g = ev.graphics(); - if (!widget->isTransparent() && + if (!widget->isTransparent() && !is_transparent(BGCOLOR)) { - g->fillRect(BGCOLOR, g->getClipBounds()); + g->fillRect(BGCOLOR, g->getClipBounds()); + } } -} -void SkinTheme::paintButton(PaintEvent& ev) -{ - Graphics* g = ev.graphics(); - ButtonBase* widget = static_cast(ev.getSource()); - IButtonIcon* iconInterface = widget->iconInterface(); - gfx::Rect box, text, icon; - gfx::Color fg, bg; - SkinPartPtr part_nw; - - widget->getTextIconInfo(&box, &text, &icon, - iconInterface ? iconInterface->iconAlign(): 0, - iconInterface ? iconInterface->size().w: 0, - iconInterface ? iconInterface->size().h: 0); - - // Tool buttons are smaller - LookType look = NormalLook; - SkinPropertyPtr skinPropery = widget->getProperty(SkinProperty::Name); - if (skinPropery) - look = skinPropery->getLook(); - - // Selected - if (widget->isSelected()) { - fg = colors.buttonSelectedText(); - bg = colors.buttonSelectedFace(); - part_nw = (look == MiniLook ? parts.toolbuttonNormal(): - look == LeftButtonLook ? parts.dropDownButtonLeftSelected(): - look == RightButtonLook ? parts.dropDownButtonRightSelected(): - parts.buttonSelected()); - } - // With mouse - else if (widget->isEnabled() && widget->hasMouseOver()) { - fg = colors.buttonHotText(); - bg = colors.buttonHotFace(); - part_nw = (look == MiniLook ? parts.toolbuttonHot(): - look == LeftButtonLook ? parts.dropDownButtonLeftHot(): - look == RightButtonLook ? parts.dropDownButtonRightHot(): - parts.buttonHot()); - } - // Without mouse - else { - fg = colors.buttonNormalText(); - bg = colors.buttonNormalFace(); + void SkinTheme::paintButton(PaintEvent& ev) + { + Graphics* g = ev.graphics(); + auto* widget = dynamic_cast(ev.getSource()); + IButtonIcon* iconInterface = widget->iconInterface(); + Rect box, text, icon; + gfx::Color fg, bg; + SkinPartPtr part_nw; + + widget->getTextIconInfo(&box, &text, &icon, + iconInterface ? iconInterface->iconAlign(): 0, + iconInterface ? iconInterface->size().w: 0, + iconInterface ? iconInterface->size().h: 0); + + // Tool buttons are smaller + LookType look = NormalLook; + if (const SkinPropertyPtr skinProperty = widget->getProperty(SkinProperty::Name)) + look = skinProperty->getLook(); - if (widget->hasFocus()) - part_nw = (look == MiniLook ? parts.toolbuttonHot(): - look == LeftButtonLook ? parts.dropDownButtonLeftFocused(): - look == RightButtonLook ? parts.dropDownButtonRightFocused(): - parts.buttonFocused()); + // Selected + auto pickByLook = [&](const SkinPartPtr& mini, + const SkinPartPtr& left, + const SkinPartPtr& right, + const SkinPartPtr& normal) -> SkinPartPtr { + if (look == MiniLook) return mini; + if (look == LeftButtonLook) return left; + if (look == RightButtonLook) return right; + return normal; + }; + + if (widget->isSelected()) + { + fg = colors.buttonSelectedText(); + bg = colors.buttonSelectedFace(); + part_nw = pickByLook( + parts.toolbuttonNormal(), + parts.dropDownButtonLeftSelected(), + parts.dropDownButtonRightSelected(), + parts.buttonSelected()); + } + // With mouse + else if (widget->isEnabled() && widget->hasMouseOver()) + { + fg = colors.buttonHotText(); + bg = colors.buttonHotFace(); + part_nw = pickByLook( + parts.toolbuttonHot(), + parts.dropDownButtonLeftHot(), + parts.dropDownButtonRightHot(), + parts.buttonHot()); + } + // Without mouse else - part_nw = (look == MiniLook ? parts.toolbuttonNormal(): - look == LeftButtonLook ? parts.dropDownButtonLeftNormal(): - look == RightButtonLook ? parts.dropDownButtonRightNormal(): - parts.buttonNormal()); - } + { + fg = colors.buttonNormalText(); + bg = colors.buttonNormalFace(); - // external background - g->fillRect(BGCOLOR, g->getClipBounds()); + if (widget->hasFocus()) + part_nw = pickByLook( + parts.toolbuttonHot(), + parts.dropDownButtonLeftFocused(), + parts.dropDownButtonRightFocused(), + parts.buttonFocused()); + else + part_nw = pickByLook( + parts.toolbuttonNormal(), + parts.dropDownButtonLeftNormal(), + parts.dropDownButtonRightNormal(), + parts.buttonNormal()); + } - // draw borders - if (part_nw) - drawRect(g, widget->clientBounds(), part_nw.get(), bg); + // external background + g->fillRect(BGCOLOR, g->getClipBounds()); - // text - drawTextString(g, NULL, fg, ColorNone, widget, - widget->clientChildrenBounds(), get_button_selected_offset()); + // draw borders + if (part_nw) + drawRect(g, widget->clientBounds(), part_nw.get(), bg); - // Paint the icon - if (iconInterface) { - if (widget->isSelected()) - icon.offset(get_button_selected_offset(), - get_button_selected_offset()); + // text + drawTextString(g, nullptr, fg, ColorNone, widget, + widget->clientChildrenBounds(), get_button_selected_offset()); - paintIcon(widget, ev.graphics(), iconInterface, icon.x, icon.y); - } -} + // Paint the icon + if (iconInterface) { + if (widget->isSelected()) + icon.offset(get_button_selected_offset(), + get_button_selected_offset()); -void SkinTheme::paintCheckBox(PaintEvent& ev) -{ - Graphics* g = ev.graphics(); - ButtonBase* widget = static_cast(ev.getSource()); - gfx::Rect bounds = widget->clientBounds(); - IButtonIcon* iconInterface = widget->iconInterface(); - gfx::Rect box, text, icon; - gfx::Color bg; - - widget->getTextIconInfo(&box, &text, &icon, - iconInterface ? iconInterface->iconAlign(): 0, - iconInterface ? iconInterface->size().w: 0, - iconInterface ? iconInterface->size().h: 0); - - // Check box look - LookType look = NormalLook; - SkinPropertyPtr skinPropery = widget->getProperty(SkinProperty::Name); - if (skinPropery) - look = skinPropery->getLook(); - - // Background - g->fillRect(bg = BGCOLOR, bounds); - - // Mouse - if (widget->isEnabled()) { - if (widget->hasMouseOver()) - g->fillRect(bg = colors.checkHotFace(), bounds); - else if (widget->hasFocus()) - g->fillRect(bg = colors.checkFocusFace(), bounds); + paintIcon(widget, ev.graphics(), iconInterface, icon.x, icon.y); + } } - // Text - drawTextString(g, NULL, ColorNone, ColorNone, widget, text, 0); + void SkinTheme::paintCheckBox(PaintEvent& ev) + { + Graphics* g = ev.graphics(); + const auto widget = static_cast(ev.getSource()); + const Rect bounds = widget->clientBounds(); + IButtonIcon* iconInterface = widget->iconInterface(); + Rect box, text, icon; + gfx::Color bg; + + widget->getTextIconInfo(&box, &text, &icon, + iconInterface ? iconInterface->iconAlign(): 0, + iconInterface ? iconInterface->size().w: 0, + iconInterface ? iconInterface->size().h: 0); + + // Check box look + LookType look = NormalLook; + if (const SkinPropertyPtr skinProperty = widget->getProperty(SkinProperty::Name)) + look = skinProperty->getLook(); - // Paint the icon - if (iconInterface) - paintIcon(widget, g, iconInterface, icon.x, icon.y); + // Background + g->fillRect(bg = BGCOLOR, bounds); + + // Mouse + if (widget->isEnabled()) { + if (widget->hasMouseOver()) + g->fillRect(bg = colors.checkHotFace(), bounds); + else if (widget->hasFocus()) + g->fillRect(bg = colors.checkFocusFace(), bounds); + } - // draw focus - if (look != WithoutBordersLook && widget->hasFocus()) - drawRect(g, bounds, parts.checkFocus().get(), gfx::ColorNone); -} + // Text + drawTextString(g, nullptr, ColorNone, ColorNone, widget, text, 0); -void SkinTheme::paintGrid(PaintEvent& ev) -{ - Widget* widget = static_cast(ev.getSource()); - Graphics* g = ev.graphics(); + // Paint the icon + if (iconInterface) + paintIcon(widget, g, iconInterface, icon.x, icon.y); - if (!is_transparent(BGCOLOR)) - g->fillRect(BGCOLOR, g->getClipBounds()); -} + // draw focus + if (look != WithoutBordersLook && widget->hasFocus()) + drawRect(g, bounds, parts.checkFocus().get(), ColorNone); + } -void SkinTheme::paintEntry(PaintEvent& ev) -{ - Graphics* g = ev.graphics(); - Entry* widget = static_cast(ev.getSource()); - gfx::Rect bounds = widget->clientBounds(); - bool password = widget->isPassword(); - int scroll, caret, state, selbeg, selend; - const std::string& textString = widget->text(); - int c, ch, x, y, w; - int caret_x; - - widget->getEntryThemeInfo(&scroll, &caret, &state, &selbeg, &selend); - - // Outside borders - g->fillRect(BGCOLOR, bounds); - - bool isMiniLook = false; - SkinPropertyPtr skinPropery = widget->getProperty(SkinProperty::Name); - if (skinPropery) - isMiniLook = (skinPropery->getLook() == MiniLook); - - gfx::Color bg = colors.background(); - drawRect(g, bounds, - (widget->hasFocus() ? - (isMiniLook ? parts.sunkenMiniFocused().get(): parts.sunkenFocused().get()): - (isMiniLook ? parts.sunkenMiniNormal().get() : parts.sunkenNormal().get())), - bg); - - // Draw the text - bounds = widget->getEntryTextBounds(); - x = bounds.x; - y = bounds.y; - - base::utf8_const_iterator utf8_it = base::utf8_const_iterator(textString.begin()); - int textlen = base::utf8_length(textString); - if (scroll < textlen) - utf8_it += scroll; - - if (auto font = widget->font()) - g->setFont(font); + void SkinTheme::paintGrid(PaintEvent& ev) + { + const Widget* widget = ev.getSource(); + Graphics* g = ev.graphics(); - for (c=scroll; cfillRect(BGCOLOR, g->getClipBounds()); + } - // Normal text - bg = ColorNone; - gfx::Color fg = colors.text(); + void SkinTheme::paintEntry(PaintEvent& ev) + { + Graphics* g = ev.graphics(); + const auto widget = static_cast(ev.getSource()); + Rect bounds = widget->clientBounds(); + const bool password = widget->isPassword(); + int scroll, caret, state, selbeg, selend; + const std::string& textString = widget->text(); + int c; + + widget->getEntryThemeInfo(&scroll, &caret, &state, &selbeg, &selend); + + // Outside borders + g->fillRect(BGCOLOR, bounds); + + bool isMiniLook = false; + if (const SkinPropertyPtr skinProperty = widget->getProperty(SkinProperty::Name)) + isMiniLook = skinProperty->getLook() == MiniLook; + + gfx::Color bg = colors.background(); + const SkinPart* part_nw = widget->hasFocus() + ? (isMiniLook + ? parts.sunkenMiniFocused().get() + : parts.sunkenFocused().get()) + : (isMiniLook + ? parts.sunkenMiniNormal().get() + : parts.sunkenNormal().get()); + drawRect(g, bounds, part_nw, bg); + + // Draw the text + bounds = widget->getEntryTextBounds(); + int x = bounds.x; + int y = bounds.y; + + auto utf8_it = base::utf8_const_iterator(textString.begin()); + const int textlen = base::utf8_length(textString); + if (scroll < textlen) + utf8_it += scroll; + + if (const auto font = widget->font()) + g->setFont(font); - // Selected - if ((c >= selbeg) && (c <= selend)) { - if (widget->hasFocus()) - bg = colors.selected(); - else - bg = colors.disabled(); - fg = colors.background(); - } + for (c=scroll; cisEnabled()) { + // Normal text bg = ColorNone; - fg = colors.disabled(); - } + gfx::Color fg = colors.text(); + + // Selected + if (c >= selbeg && c <= selend) { + if (widget->hasFocus()) + bg = colors.selected(); + else + bg = colors.disabled(); + fg = colors.background(); + } - w = g->measureChar(ch).w; - if (x+w > bounds.x2()) - return; + // Disabled + if (!widget->isEnabled()) { + bg = ColorNone; + fg = colors.disabled(); + } - caret_x = x; - g->drawChar(ch, fg, bg, x, y); - x += w; + const int w = g->measureChar(ch).w; + if (x + w > bounds.x2()) + return; - // Caret - if ((c == caret) && (state) && (widget->hasFocus())) - drawEntryCaret(g, widget, caret_x, y); - } + const int caret_x = x; + g->drawChar(ch, fg, bg, x, y); + x += w; - // Draw suffix if there is enough space - if (!widget->getSuffix().empty()) { - Rect sufBounds(x, y, - bounds.x2()-widget->childSpacing()*guiscale()-x, - widget->textHeight()); - IntersectClip clip(g, sufBounds); - if (clip) { - drawTextString( - g, widget->getSuffix().c_str(), - colors.entrySuffix(), ColorNone, - widget, sufBounds, 0); + // Caret + if (c == caret && state && widget->hasFocus()) + drawEntryCaret(g, widget, caret_x, y); } - } - // Draw the caret if it is next of the last character - if ((c == caret) && (state) && - (widget->hasFocus()) && - (widget->isEnabled())) { - drawEntryCaret(g, widget, x, y); + // Draw suffix if there is enough space + if (!widget->getSuffix().empty()) { + const Rect sufBounds(x, y, + bounds.x2()-widget->childSpacing()*guiscale()-x, + widget->textHeight()); + if (const IntersectClip clip(g, sufBounds); clip) { + drawTextString( + g, widget->getSuffix().c_str(), + colors.entrySuffix(), ColorNone, + widget, sufBounds, 0); + } + } + + // Draw the caret if it is next of the last character + if (c == caret && state && + widget->hasFocus() && + widget->isEnabled()) { + drawEntryCaret(g, widget, x, y); + } } -} -void SkinTheme::paintLabel(PaintEvent& ev) -{ - Graphics* g = ev.graphics(); - Label* widget = static_cast(ev.getSource()); - Style* style = styles.label(); - gfx::Color bg = BGCOLOR; - Rect text, rc = widget->clientBounds(); + void SkinTheme::paintLabel(PaintEvent& ev) + { + Graphics* g = ev.graphics(); + const auto widget = static_cast(ev.getSource()); + Style* style = styles.label(); + const gfx::Color bg = BGCOLOR; + Rect text, rc = widget->clientBounds(); - SkinStylePropertyPtr styleProp = widget->getProperty(SkinStyleProperty::Name); - if (styleProp) - style = styleProp->getStyle(); + if (const SkinStylePropertyPtr styleProp = widget->getProperty(SkinStyleProperty::Name)) + style = styleProp->getStyle(); - if (!is_transparent(bg)) - g->fillRect(bg, rc); + if (!is_transparent(bg)) + g->fillRect(bg, rc); - rc.shrink(widget->border()); + rc.shrink(widget->border()); - widget->getTextIconInfo(NULL, &text); - style->paint(g, text, widget->text().c_str(), Style::State()); -} + widget->getTextIconInfo(nullptr, &text); + style->paint(g, text, widget->text().c_str(), Style::State()); + } -void SkinTheme::paintLinkLabel(PaintEvent& ev) -{ - Graphics* g = ev.graphics(); - Widget* widget = static_cast(ev.getSource()); - Style* style = styles.link(); - gfx::Rect bounds = widget->clientBounds(); - gfx::Color bg = BGCOLOR; - - SkinStylePropertyPtr styleProp = widget->getProperty(SkinStyleProperty::Name); - if (styleProp) - style = styleProp->getStyle(); - - Style::State state; - if (widget->hasMouseOver()) state += Style::hover(); - if (widget->isSelected()) state += Style::clicked(); - - g->fillRect(bg, bounds); - style->paint(g, bounds, widget->text().c_str(), state); -} + void SkinTheme::paintLinkLabel(PaintEvent& ev) + { + Graphics* g = ev.graphics(); + Widget* widget = ev.getSource(); + Style* style = styles.link(); + const Rect bounds = widget->clientBounds(); + const gfx::Color bg = BGCOLOR; -void SkinTheme::paintListBox(PaintEvent& ev) -{ - Graphics* g = ev.graphics(); + if (const SkinStylePropertyPtr styleProp = widget->getProperty(SkinStyleProperty::Name)) + style = styleProp->getStyle(); - g->fillRect(colors.background(), g->getClipBounds()); -} + Style::State state; + if (widget->hasMouseOver()) state += Style::hover(); + if (widget->isSelected()) state += Style::clicked(); -void SkinTheme::paintListItem(ui::PaintEvent& ev) -{ - Widget* widget = static_cast(ev.getSource()); - gfx::Rect bounds = widget->clientBounds(); - Graphics* g = ev.graphics(); - gfx::Color fg, bg; - - if (!widget->isEnabled()) { - bg = colors.face(); - fg = colors.disabled(); - } - else if (widget->isSelected()) { - fg = colors.listitemSelectedText(); - bg = colors.listitemSelectedFace(); - } - else { - fg = colors.listitemNormalText(); - bg = colors.listitemNormalFace(); + g->fillRect(bg, bounds); + style->paint(g, bounds, widget->text().c_str(), state); } - g->fillRect(bg, bounds); + void SkinTheme::paintListBox(PaintEvent& ev) + { + Graphics* g = ev.graphics(); - if (widget->hasText()) { - bounds.shrink(widget->border()); - drawTextString(g, NULL, fg, bg, widget, bounds, 0); + g->fillRect(colors.background(), g->getClipBounds()); } -} -void SkinTheme::paintMenu(PaintEvent& ev) -{ - Widget* widget = static_cast(ev.getSource()); - Graphics* g = ev.graphics(); - - g->fillRect(BGCOLOR, g->getClipBounds()); -} + void SkinTheme::paintListItem(PaintEvent& ev) + { + const Widget* widget = ev.getSource(); + Rect bounds = widget->clientBounds(); + Graphics* g = ev.graphics(); + gfx::Color fg, bg; -void SkinTheme::paintMenuItem(ui::PaintEvent& ev) -{ - int scale = guiscale(); - Graphics* g = ev.graphics(); - MenuItem* widget = static_cast(ev.getSource()); - gfx::Rect bounds = widget->clientBounds(); - gfx::Color fg, bg; - int c, bar; - - // TODO ASSERT? - if (!widget->parent()->parent()) - return; - - bar = (widget->parent()->parent()->type() == kMenuBarWidget); - - // Colors - if (!widget->isEnabled()) { - fg = ColorNone; - bg = colors.menuitemNormalFace(); - } - else { - if (widget->isHighlighted()) { - fg = colors.menuitemHighlightText(); - bg = colors.menuitemHighlightFace(); + if (!widget->isEnabled()) { + bg = colors.face(); + fg = colors.disabled(); } - else if (widget->hasMouse()) { - fg = colors.menuitemHotText(); - bg = colors.menuitemHotFace(); + else if (widget->isSelected()) { + fg = colors.listitemSelectedText(); + bg = colors.listitemSelectedFace(); } else { - fg = colors.menuitemNormalText(); - bg = colors.menuitemNormalFace(); + fg = colors.listitemNormalText(); + bg = colors.listitemNormalFace(); } - } - // Background - g->fillRect(bg, bounds); + g->fillRect(bg, bounds); - // Draw an indicator for selected items - if (widget->isSelected()) { - she::Surface* icon = - (widget->isEnabled() ? - parts.checkSelected()->bitmap(0): - parts.checkDisabled()->bitmap(0)); + if (widget->hasText()) { + bounds.shrink(widget->border()); + drawTextString(g, nullptr, fg, bg, widget, bounds, 0); + } + } - int x = bounds.x+4*scale-icon->width()/2; - int y = bounds.y+bounds.h/2-icon->height()/2; - g->drawRgbaSurface(icon, x, y); + void SkinTheme::paintMenu(PaintEvent& ev) + { + const Widget* widget = ev.getSource(); + Graphics* g = ev.graphics(); + + g->fillRect(BGCOLOR, g->getClipBounds()); } - // Text - if (bar) - widget->setAlign(CENTER | MIDDLE); - else - widget->setAlign(LEFT | MIDDLE); - - Rect pos = bounds; - if (!bar) - pos.offset(widget->childSpacing()/2, 0); - drawTextString(g, NULL, fg, ColorNone, widget, pos, 0); - - // For menu-box - if (!bar) { - // Draw the arrown (to indicate which this menu has a sub-menu) - if (widget->getSubmenu()) { - // Enabled - if (widget->isEnabled()) { - for (c=0; c<3*scale; c++) - g->drawVLine(fg, - bounds.x2()-3*scale-c, - bounds.y+bounds.h/2-c, 2*c+1); + void SkinTheme::paintMenuItem(PaintEvent& ev) + { + const int scale = guiscale(); + Graphics* g = ev.graphics(); + const auto widget = static_cast(ev.getSource()); + const Rect bounds = widget->clientBounds(); + gfx::Color fg, bg; + + // TODO ASSERT? + if (!widget->parent()->parent()) + return; + + const int bar = widget->parent()->parent()->type() == kMenuBarWidget; + + // Colors + if (!widget->isEnabled()) { + fg = ColorNone; + bg = colors.menuitemNormalFace(); + } + else { + if (widget->isHighlighted()) { + fg = colors.menuitemHighlightText(); + bg = colors.menuitemHighlightFace(); + } + else if (widget->hasMouse()) { + fg = colors.menuitemHotText(); + bg = colors.menuitemHotFace(); } - // Disabled else { - for (c=0; c<3*scale; c++) - g->drawVLine(colors.background(), - bounds.x2()-3*scale-c+1, - bounds.y+bounds.h/2-c+1, 2*c+1); - - for (c=0; c<3*scale; c++) - g->drawVLine(colors.disabled(), - bounds.x2()-3*scale-c, - bounds.y+bounds.h/2-c, 2*c+1); + fg = colors.menuitemNormalText(); + bg = colors.menuitemNormalFace(); } } - // Draw the keyboard shortcut - else if (AppMenuItem* appMenuItem = dynamic_cast(widget)) { - if (appMenuItem->key() && !appMenuItem->key()->accels().empty()) { - int old_align = appMenuItem->align(); - pos = bounds; - pos.w -= widget->childSpacing()/4; + // Background + g->fillRect(bg, bounds); - std::string buf = appMenuItem->key()->accels().front().toString(); + // Draw an indicator for selected items + if (widget->isSelected()) { + she::Surface* icon = + widget->isEnabled() ? + parts.checkSelected()->bitmap(0): + parts.checkDisabled()->bitmap(0); + + const int x = 4 * scale - icon->width() / 2 + bounds.x; + const int y = bounds.h / 2 - icon->height() / 2 + bounds.y; + g->drawRgbaSurface(icon, x, y); + } - widget->setAlign(RIGHT | MIDDLE); - drawTextString(g, buf.c_str(), fg, ColorNone, widget, pos, 0); - widget->setAlign(old_align); + // Text + if (bar) + widget->setAlign(CENTER | MIDDLE); + else + widget->setAlign(LEFT | MIDDLE); + + Rect pos = bounds; + if (!bar) + pos.offset(widget->childSpacing()/2, 0); + drawTextString(g, nullptr, fg, ColorNone, widget, pos, 0); + + // For menu-box + if (!bar) { + // Draw the arrown (to indicate which this menu has a sub-menu) + if (widget->getSubmenu()) + { + int c; + // Enabled + if (widget->isEnabled()) { + for (c = 0; c < 3 * scale; c++) + g->drawVLine(fg, + bounds.x2() - 3 * scale - c, + bounds.y + bounds.h / 2 - c, 2 * c + 1); + } + // Disabled + else { + for (c = 0; c < 3 * scale; c++) + g->drawVLine(colors.background(), + bounds.x2() - 3 * scale - c + 1, + bounds.y + bounds.h / 2 - c + 1, 2 * c + 1); + + for (c = 0; c < 3 * scale; c++) + g->drawVLine(colors.disabled(), + bounds.x2() - 3 * scale - c, + bounds.y + bounds.h / 2 - c, 2 * c + 1); + } } - } - } -} + // Draw the keyboard shortcut + else if (const auto appMenuItem = dynamic_cast(widget)) { + if (appMenuItem->key() && !appMenuItem->key()->accels().empty()) { + const int old_align = appMenuItem->align(); -void SkinTheme::paintSplitter(PaintEvent& ev) -{ - Graphics* g = ev.graphics(); + pos = bounds; + pos.w -= widget->childSpacing() / 4; - g->fillRect(colors.splitterNormalFace(), g->getClipBounds()); -} + const std::string buf = appMenuItem->key()->accels().front().toString(); -void SkinTheme::paintRadioButton(PaintEvent& ev) -{ - Graphics* g = ev.graphics(); - ButtonBase* widget = static_cast(ev.getSource()); - gfx::Rect bounds = widget->clientBounds(); - IButtonIcon* iconInterface = widget->iconInterface(); - gfx::Color bg = BGCOLOR; - - gfx::Rect box, text, icon; - widget->getTextIconInfo(&box, &text, &icon, - iconInterface ? iconInterface->iconAlign(): 0, - iconInterface ? iconInterface->size().w: 0, - iconInterface ? iconInterface->size().h: 0); - - // Background - g->fillRect(bg, g->getClipBounds()); - - // Mouse - if (widget->isEnabled()) { - if (widget->hasMouseOver()) - g->fillRect(bg = colors.radioHotFace(), bounds); - else if (widget->hasFocus()) - g->fillRect(bg = colors.radioFocusFace(), bounds); + widget->setAlign(RIGHT | MIDDLE); + drawTextString(g, buf.c_str(), fg, ColorNone, widget, pos, 0); + widget->setAlign(old_align); + } + } + } } - // Text - drawTextString(g, NULL, ColorNone, ColorNone, widget, text, 0); + void SkinTheme::paintSplitter(PaintEvent& ev) + { + Graphics* g = ev.graphics(); + g->fillRect(colors.splitterNormalFace(), g->getClipBounds()); + } - // Icon - if (iconInterface) - paintIcon(widget, g, iconInterface, icon.x, icon.y); + void SkinTheme::paintRadioButton(PaintEvent& ev) + { + Graphics* g = ev.graphics(); + const auto widget = static_cast(ev.getSource()); + const Rect bounds = widget->clientBounds(); + IButtonIcon* iconInterface = widget->iconInterface(); + gfx::Color bg = BGCOLOR; + + Rect box, text, icon; + widget->getTextIconInfo(&box, &text, &icon, + iconInterface ? iconInterface->iconAlign(): 0, + iconInterface ? iconInterface->size().w: 0, + iconInterface ? iconInterface->size().h: 0); - // Focus - if (widget->hasFocus()) - drawRect(g, bounds, parts.radioFocus().get(), gfx::ColorNone); -} + // Background + g->fillRect(bg, g->getClipBounds()); + + // Mouse + if (widget->isEnabled()) { + if (widget->hasMouseOver()) + g->fillRect(bg = colors.radioHotFace(), bounds); + else if (widget->hasFocus()) + g->fillRect(bg = colors.radioFocusFace(), bounds); + } -void SkinTheme::paintSeparator(ui::PaintEvent& ev) -{ - Graphics* g = ev.graphics(); - Widget* widget = static_cast(ev.getSource()); - gfx::Rect bounds = widget->clientBounds(); - - // background - g->fillRect(BGCOLOR, bounds); - - if (widget->align() & HORIZONTAL) { - int h = parts.separatorHorz()->bitmap(0)->height(); - drawHline(g, gfx::Rect(bounds.x, bounds.y+bounds.h/2-h/2, - bounds.w, h), - parts.separatorHorz().get()); - } + // Text + drawTextString(g, nullptr, ColorNone, ColorNone, widget, text, 0); - if (widget->align() & VERTICAL) { - int w = parts.separatorVert()->bitmap(0)->width(); - drawVline(g, gfx::Rect(bounds.x+bounds.w/2-w/2, bounds.y, - w, bounds.h), - parts.separatorVert().get()); + // Icon + if (iconInterface) + paintIcon(widget, g, iconInterface, icon.x, icon.y); + + // Focus + if (widget->hasFocus()) + drawRect(g, bounds, parts.radioFocus().get(), ColorNone); } - // text - if (widget->hasText()) { - int h = widget->textHeight(); - Rect r( - bounds.x + widget->border().left()/2 + h/2, - bounds.y + bounds.h/2 - h/2, - widget->textWidth(), h); - - drawTextString(g, NULL, - colors.separatorLabel(), BGCOLOR, - widget, r, 0); + void SkinTheme::paintSeparator(PaintEvent& ev) + { + Graphics* g = ev.graphics(); + const Widget* widget = ev.getSource(); + const Rect bounds = widget->clientBounds(); + + // background + g->fillRect(BGCOLOR, bounds); + + if (widget->align() & HORIZONTAL) { + int h = parts.separatorHorz()->bitmap(0)->height(); + drawHline(g, gfx::Rect(bounds.x, bounds.y + bounds.h / 2 - h / 2, + bounds.w, h), + parts.separatorHorz().get()); + } + + if (widget->align() & VERTICAL) { + int w = parts.separatorVert()->bitmap(0)->width(); + drawVline(g, gfx::Rect(bounds.x + bounds.w / 2 - w / 2, bounds.y, + w, bounds.h), + parts.separatorVert().get()); + } + + // text + if (widget->hasText()) { + const int h = widget->textHeight(); + const Rect r( + bounds.x + widget->border().left()/2 + h/2, + bounds.y + bounds.h/2 - h/2, + widget->textWidth(), h); + + drawTextString(g, nullptr, + colors.separatorLabel(), BGCOLOR, + widget, r, 0); + } } -} -void SkinTheme::paintSlider(PaintEvent& ev) -{ - Graphics* g = ev.graphics(); - Slider* widget = static_cast(ev.getSource()); - Rect bounds = widget->clientBounds(); - int min, max, value; - - // Outside borders - gfx::Color bgcolor = widget->bgColor(); - if (!is_transparent(bgcolor)) - g->fillRect(bgcolor, bounds); - - widget->getSliderThemeInfo(&min, &max, &value); - - Rect rc(Rect(bounds).shrink(widget->border())); - int x; - if (min != max) - x = rc.x + rc.w * (value-min) / (max-min); - else - x = rc.x; - - rc = widget->clientBounds(); - - // The mini-look is used for sliders with tiny borders. - bool isMiniLook = false; - - // The BG painter is used for sliders without a number-indicator and - // customized background (e.g. RGB sliders) - ISliderBgPainter* bgPainter = NULL; - - SkinPropertyPtr skinPropery = widget->getProperty(SkinProperty::Name); - if (skinPropery) - isMiniLook = (skinPropery->getLook() == MiniLook); - - SkinSliderPropertyPtr skinSliderPropery = widget->getProperty(SkinSliderProperty::Name); - if (skinSliderPropery) - bgPainter = skinSliderPropery->getBgPainter(); - - // Draw customized background - if (bgPainter) { - SkinPartPtr nw = parts.miniSliderEmpty(); - she::Surface* thumb = - (widget->hasFocus() ? parts.miniSliderThumbFocused()->bitmap(0): - parts.miniSliderThumb()->bitmap(0)); - - // Draw background - g->fillRect(BGCOLOR, rc); + void SkinTheme::paintSlider(PaintEvent& ev) + { + Graphics* g = ev.graphics(); + const auto widget = static_cast(ev.getSource()); + Rect bounds = widget->clientBounds(); + int min, max, value; + + // Outside borders + if (const gfx::Color bgcolor = widget->bgColor(); !is_transparent(bgcolor)) + g->fillRect(bgcolor, bounds); + + widget->getSliderThemeInfo(&min, &max, &value); + + Rect rc(Rect(bounds).shrink(widget->border())); + int x; + if (min != max) + x = rc.x + rc.w * (value-min) / (max-min); + else + x = rc.x; + + rc = widget->clientBounds(); + + // The mini-look is used for sliders with tiny borders. + bool isMiniLook = false; - // Draw thumb - g->drawRgbaSurface(thumb, x-thumb->width()/2, rc.y); + // The BG painter is used for sliders without a number-indicator and + // customized background (e.g. RGB sliders) + ISliderBgPainter* bgPainter = nullptr; - // Draw borders - rc.shrink(Border( + if (const SkinPropertyPtr skinProperty = widget->getProperty(SkinProperty::Name)) + isMiniLook = skinProperty->getLook() == MiniLook; + + if (const SkinSliderPropertyPtr skinSliderProperty = widget->getProperty(SkinSliderProperty::Name)) + bgPainter = skinSliderProperty->getBgPainter(); + + // Draw customized background + if (bgPainter) { + const SkinPartPtr nw = parts.miniSliderEmpty(); + she::Surface* thumb = + widget->hasFocus() ? parts.miniSliderThumbFocused()->bitmap(0): + parts.miniSliderThumb()->bitmap(0); + + // Draw background + g->fillRect(BGCOLOR, rc); + + // Draw thumb + g->drawRgbaSurface(thumb, x-thumb->width()/2, rc.y); + + // Draw borders + rc.shrink(Border( 3 * guiscale(), thumb->height(), 3 * guiscale(), 1 * guiscale())); - drawRect(g, rc, nw.get(), gfx::ColorNone); + drawRect(g, rc, nw.get(), ColorNone); - // Draw background (using the customized ISliderBgPainter implementation) - rc.shrink(Border(1, 1, 1, 2) * guiscale()); - if (!rc.isEmpty()) - bgPainter->paint(widget, g, rc); - } - else { - // Draw borders - SkinPartPtr full_part; - SkinPartPtr empty_part; - - if (isMiniLook) { - full_part = widget->hasMouseOver() ? parts.miniSliderFullFocused(): - parts.miniSliderFull(); - empty_part = widget->hasMouseOver() ? parts.miniSliderEmptyFocused(): - parts.miniSliderEmpty(); + // Draw background (using the customized ISliderBgPainter implementation) + rc.shrink(Border(1, 1, 1, 2) * guiscale()); + if (!rc.isEmpty()) + bgPainter->paint(widget, g, rc); } else { - full_part = widget->hasFocus() ? parts.sliderFullFocused(): - parts.sliderFull(); - empty_part = widget->hasFocus() ? parts.sliderEmptyFocused(): - parts.sliderEmpty(); - } + // Draw borders + SkinPartPtr full_part; + SkinPartPtr empty_part; + + if (isMiniLook) { + full_part = widget->hasMouseOver() ? parts.miniSliderFullFocused(): + parts.miniSliderFull(); + empty_part = widget->hasMouseOver() ? parts.miniSliderEmptyFocused(): + parts.miniSliderEmpty(); + } + else { + full_part = widget->hasFocus() ? parts.sliderFullFocused(): + parts.sliderFull(); + empty_part = widget->hasFocus() ? parts.sliderEmptyFocused(): + parts.sliderEmpty(); + } - if (value == min) - drawRect(g, rc, empty_part.get(), colors.sliderEmptyFace()); - else if (value == max) - drawRect(g, rc, full_part.get(), colors.sliderFullFace()); - else - drawRect2(g, rc, x, - full_part.get(), empty_part.get(), - colors.sliderFullFace(), - colors.sliderEmptyFace()); + if (value == min) + drawRect(g, rc, empty_part.get(), colors.sliderEmptyFace()); + else if (value == max) + drawRect(g, rc, full_part.get(), colors.sliderFullFace()); + else + drawRect2(g, rc, x, + full_part.get(), empty_part.get(), + colors.sliderFullFace(), + colors.sliderEmptyFace()); - // Draw text - std::string old_text = widget->text(); - widget->setTextQuiet(widget->convertValueToText(value)); + // Draw text + const std::string old_text = widget->text(); + widget->setTextQuiet(widget->convertValueToText(value)); - { - IntersectClip clip(g, Rect(rc.x, rc.y, x-rc.x, rc.h)); - if (clip) { - drawTextString(g, NULL, - colors.sliderFullText(), ColorNone, - widget, rc, 0); + { + if (const IntersectClip clip(g, Rect(rc.x, rc.y, x - rc.x, rc.h)); clip) { + drawTextString(g, nullptr, + colors.sliderFullText(), ColorNone, + widget, rc, 0); + } } - } - { - IntersectClip clip(g, Rect(x+1, rc.y, rc.w-(x-rc.x+1), rc.h)); - if (clip) { - drawTextString(g, NULL, - colors.sliderEmptyText(), - ColorNone, widget, rc, 0); + { + if (const IntersectClip clip(g, Rect(x + 1, rc.y, rc.w - (x - rc.x + 1), rc.h)); clip) { + drawTextString(g, nullptr, + colors.sliderEmptyText(), + ColorNone, widget, rc, 0); + } } - } - widget->setTextQuiet(old_text.c_str()); + widget->setTextQuiet(old_text.c_str()); + } } -} -void SkinTheme::paintComboBoxEntry(ui::PaintEvent& ev) -{ - Graphics* g = ev.graphics(); - Entry* widget = static_cast(ev.getSource()); - gfx::Rect bounds = widget->clientBounds(); - bool password = widget->isPassword(); - int scroll, caret, state, selbeg, selend; - const std::string& textString = widget->text(); - int c, ch, x, y, w; - int caret_x; + void SkinTheme::paintComboBoxEntry(PaintEvent& ev) + { + Graphics* g = ev.graphics(); + const auto widget = static_cast(ev.getSource()); + const Rect bounds = widget->clientBounds(); + const bool password = widget->isPassword(); + int scroll, caret, state, selbeg, selend; + const std::string& textString = widget->text(); + int c; - widget->getEntryThemeInfo(&scroll, &caret, &state, &selbeg, &selend); + widget->getEntryThemeInfo(&scroll, &caret, &state, &selbeg, &selend); - // Outside borders - g->fillRect(BGCOLOR, bounds); + // Outside borders + g->fillRect(BGCOLOR, bounds); - gfx::Color fg, bg = colors.background(); + gfx::Color bg = colors.background(); - drawRect(g, bounds, - (widget->hasFocus() ? - parts.sunken2Focused().get(): - parts.sunken2Normal().get()), bg); + drawRect(g, bounds, + widget->hasFocus() ? + parts.sunken2Focused().get(): + parts.sunken2Normal().get(), bg); - // Draw the text - x = bounds.x + widget->border().left(); - y = bounds.y + bounds.h/2 - widget->textHeight()/2; + // Draw the text + int x = bounds.x + widget->border().left(); + int y = bounds.y + bounds.h / 2 - widget->textHeight() / 2; - base::utf8_const_iterator utf8_it = base::utf8_const_iterator(textString.begin()); - int textlen = base::utf8_length(textString); + auto utf8_it = base::utf8_const_iterator(textString.begin()); + const int textlen = base::utf8_length(textString); - if (scroll < textlen) - utf8_it += scroll; + if (scroll < textlen) + utf8_it += scroll; - for (c=scroll; c= selbeg && c <= selend) { + if (widget->hasFocus()) + bg = colors.selected(); + else + bg = colors.disabled(); + fg = colors.background(); + } - // Selected - if ((c >= selbeg) && (c <= selend)) { - if (widget->hasFocus()) - bg = colors.selected(); - else - bg = colors.disabled(); - fg = colors.background(); + // Disabled + if (!widget->isEnabled()) { + bg = ColorNone; + fg = colors.disabled(); + } + + const int w = g->measureChar(ch).w; + if (x + w > bounds.x2() - 3) + return; + + const int caret_x = x; + g->drawChar(ch, fg, bg, x, y); + x += w; + + // Caret + if (c == caret && state && widget->hasFocus()) + drawEntryCaret(g, widget, caret_x, y); } - // Disabled - if (!widget->isEnabled()) { - bg = ColorNone; - fg = colors.disabled(); + // Draw the caret if it is next of the last character + if (c == caret && state && + widget->hasFocus() && + widget->isEnabled()) { + drawEntryCaret(g, widget, x, y); } + } - w = g->measureChar(ch).w; - if (x+w > bounds.x2()-3) - return; + void SkinTheme::paintComboBoxButton(PaintEvent& ev) + { + const auto widget = static_cast(ev.getSource()); + Graphics* g = ev.graphics(); + IButtonIcon* iconInterface = widget->iconInterface(); + SkinPartPtr part_nw; + gfx::Color bg; - caret_x = x; - g->drawChar(ch, fg, bg, x, y); - x += w; + if (widget->isSelected()) { + bg = colors.buttonSelectedFace(); + part_nw = parts.toolbuttonPushed(); + } + // With mouse + else if (widget->isEnabled() && widget->hasMouseOver()) { + bg = colors.buttonHotFace(); + part_nw = parts.toolbuttonHot(); + } + // Without mouse + else { + bg = colors.buttonNormalFace(); + part_nw = parts.toolbuttonLast(); + } - // Caret - if ((c == caret) && (state) && (widget->hasFocus())) - drawEntryCaret(g, widget, caret_x, y); - } + const Rect rc = widget->clientBounds(); - // Draw the caret if it is next of the last character - if ((c == caret) && (state) && - (widget->hasFocus()) && - (widget->isEnabled())) { - drawEntryCaret(g, widget, x, y); - } -} + // external background + g->fillRect(BGCOLOR, rc); -void SkinTheme::paintComboBoxButton(PaintEvent& ev) -{ - Button* widget = static_cast(ev.getSource()); - Graphics* g = ev.graphics(); - IButtonIcon* iconInterface = widget->iconInterface(); - SkinPartPtr part_nw; - gfx::Color bg; - - if (widget->isSelected()) { - bg = colors.buttonSelectedFace(); - part_nw = parts.toolbuttonPushed(); - } - // With mouse - else if (widget->isEnabled() && widget->hasMouseOver()) { - bg = colors.buttonHotFace(); - part_nw = parts.toolbuttonHot(); + // draw borders + drawRect(g, rc, part_nw.get(), bg); + + // Paint the icon + if (iconInterface) { + // Icon + const int x = rc.x + rc.w/2 - iconInterface->size().w/2; + const int y = rc.y + rc.h/2 - iconInterface->size().h/2; + + paintIcon(widget, ev.graphics(), iconInterface, x, y); + } } - // Without mouse - else { - bg = colors.buttonNormalFace(); - part_nw = parts.toolbuttonLast(); + + void SkinTheme::paintTextBox(PaintEvent& ev) + { + Graphics* g = ev.graphics(); + Widget* widget = ev.getSource(); + + drawTextBox(g, widget, nullptr, nullptr, + colors.textboxFace(), + colors.textboxText()); } - Rect rc = widget->clientBounds(); + void SkinTheme::paintView(PaintEvent& ev) + { + Graphics* g = ev.graphics(); + const auto widget = static_cast(ev.getSource()); + const Rect bounds = widget->clientBounds(); + const gfx::Color bg = BGCOLOR; + Style* style = styles.view(); - // external background - g->fillRect(BGCOLOR, rc); + if (const SkinStylePropertyPtr styleProp = widget->getProperty(SkinStyleProperty::Name)) + style = styleProp->getStyle(); - // draw borders - drawRect(g, rc, part_nw.get(), bg); + Style::State state; + if (widget->hasMouseOver()) state += Style::hover(); - // Paint the icon - if (iconInterface) { - // Icon - int x = rc.x + rc.w/2 - iconInterface->size().w/2; - int y = rc.y + rc.h/2 - iconInterface->size().h/2; + if (!is_transparent(bg)) + g->fillRect(bg, bounds); - paintIcon(widget, ev.graphics(), iconInterface, x, y); + style->paint(g, bounds, nullptr, state); } -} -void SkinTheme::paintTextBox(ui::PaintEvent& ev) -{ - Graphics* g = ev.graphics(); - Widget* widget = static_cast(ev.getSource()); + void SkinTheme::paintViewScrollbar(PaintEvent& ev) + { + const auto widget = static_cast(ev.getSource()); + Graphics* g = ev.graphics(); + int pos, len; - drawTextBox(g, widget, NULL, NULL, - colors.textboxFace(), - colors.textboxText()); -} + bool isMiniLook = false; + if (const SkinPropertyPtr skinProperty = widget->getProperty(SkinProperty::Name)) + isMiniLook = skinProperty->getLook() == MiniLook; -void SkinTheme::paintView(PaintEvent& ev) -{ - Graphics* g = ev.graphics(); - View* widget = static_cast(ev.getSource()); - gfx::Rect bounds = widget->clientBounds(); - gfx::Color bg = BGCOLOR; - Style* style = styles.view(); + Style* bgStyle; + Style* thumbStyle; - SkinStylePropertyPtr styleProp = widget->getProperty(SkinStyleProperty::Name); - if (styleProp) - style = styleProp->getStyle(); + if (widget->isTransparent()) { + bgStyle = styles.transparentScrollbar(); + thumbStyle = styles.transparentScrollbarThumb(); + } + else if (isMiniLook) { + bgStyle = styles.miniScrollbar(); + thumbStyle = styles.miniScrollbarThumb(); + } + else { + bgStyle = styles.scrollbar(); + thumbStyle = styles.scrollbarThumb(); + } - Style::State state; - if (widget->hasMouseOver()) state += Style::hover(); + widget->getScrollBarThemeInfo(&pos, &len); - if (!is_transparent(bg)) - g->fillRect(bg, bounds); + Style::State state; + if (widget->hasMouse()) state += Style::hover(); - style->paint(g, bounds, nullptr, state); -} + Rect rc = widget->clientBounds(); + bgStyle->paint(g, rc, nullptr, state); -void SkinTheme::paintViewScrollbar(PaintEvent& ev) -{ - ScrollBar* widget = static_cast(ev.getSource()); - Graphics* g = ev.graphics(); - int pos, len; + // Horizontal bar + if (widget->align() & HORIZONTAL) { + rc.x += pos; + rc.w = len; + } + // Vertical bar + else { + rc.y += pos; + rc.h = len; + } - bool isMiniLook = false; - SkinPropertyPtr skinPropery = widget->getProperty(SkinProperty::Name); - if (skinPropery) - isMiniLook = (skinPropery->getLook() == MiniLook); + thumbStyle->paint(g, rc, nullptr, state); + } - skin::Style* bgStyle; - skin::Style* thumbStyle; + void SkinTheme::paintViewViewport(PaintEvent& ev) + { + const auto widget = static_cast(ev.getSource()); + Graphics* g = ev.graphics(); - if (widget->isTransparent()) { - bgStyle = styles.transparentScrollbar(); - thumbStyle = styles.transparentScrollbarThumb(); - } - else if (isMiniLook) { - bgStyle = styles.miniScrollbar(); - thumbStyle = styles.miniScrollbarThumb(); + if (const gfx::Color bg = BGCOLOR; !is_transparent(bg)) + g->fillRect(bg, widget->clientBounds()); } - else { - bgStyle = styles.scrollbar(); - thumbStyle = styles.scrollbarThumb(); + + void SkinTheme::paintWindow(PaintEvent& ev) + { + Graphics* g = ev.graphics(); + const auto window = static_cast(ev.getSource()); + Rect pos = window->clientBounds(); + const Rect cpos = window->clientChildrenBounds(); + + if (!window->isDesktop()) { + // window frame + if (window->hasText()) { + styles.window()->paint(g, pos, nullptr, Style::State()); + styles.windowTitle()->paint(g, + Rect(cpos.x, pos.y+3*guiscale(), cpos.w, // TODO this hard-coded 3 should be configurable in skin.xml + window->textHeight()), + window->text().c_str(), Style::State()); + } + // menubox + else { + styles.menubox()->paint(g, pos, nullptr, Style::State()); + } + } + // desktop + else { + styles.desktop()->paint(g, pos, nullptr, Style::State()); + } } - widget->getScrollBarThemeInfo(&pos, &len); + void SkinTheme::paintPopupWindow(PaintEvent& ev) + { + const Widget* widget = ev.getSource(); + const auto window = static_cast(ev.getSource()); + Graphics* g = ev.graphics(); + Rect pos = window->clientBounds(); - Style::State state; - if (widget->hasMouse()) state += Style::hover(); + if (!is_transparent(BGCOLOR)) + styles.menubox()->paint(g, pos, nullptr, Style::State()); - gfx::Rect rc = widget->clientBounds(); - bgStyle->paint(g, rc, NULL, state); + pos.shrink(window->border()); - // Horizontal bar - if (widget->align() & HORIZONTAL) { - rc.x += pos; - rc.w = len; - } - // Vertical bar - else { - rc.y += pos; - rc.h = len; + g->drawAlignedUIString(window->text(), + colors.text(), + window->bgColor(), pos, + window->align()); } - thumbStyle->paint(g, rc, NULL, state); -} - -void SkinTheme::paintViewViewport(PaintEvent& ev) -{ - Viewport* widget = static_cast(ev.getSource()); - Graphics* g = ev.graphics(); - gfx::Color bg = BGCOLOR; + void SkinTheme::paintWindowButton(PaintEvent& ev) + { + const auto widget = static_cast(ev.getSource()); + Graphics* g = ev.graphics(); + const Rect rc = widget->clientBounds(); + SkinPartPtr part; - if (!is_transparent(bg)) - g->fillRect(bg, widget->clientBounds()); -} + if (widget->isSelected()) + part = parts.windowCloseButtonSelected(); + else if (widget->hasMouseOver()) + part = parts.windowCloseButtonHot(); + else + part = parts.windowCloseButtonNormal(); -void SkinTheme::paintWindow(PaintEvent& ev) -{ - Graphics* g = ev.graphics(); - Window* window = static_cast(ev.getSource()); - Rect pos = window->clientBounds(); - Rect cpos = window->clientChildrenBounds(); - - if (!window->isDesktop()) { - // window frame - if (window->hasText()) { - styles.window()->paint(g, pos, NULL, Style::State()); - styles.windowTitle()->paint(g, - gfx::Rect(cpos.x, pos.y+3*guiscale(), cpos.w, // TODO this hard-coded 3 should be configurable in skin.xml - window->textHeight()), - window->text().c_str(), Style::State()); - } - // menubox - else { - styles.menubox()->paint(g, pos, NULL, Style::State()); - } + g->drawRgbaSurface(part->bitmap(0), rc.x, rc.y); } - // desktop - else { - styles.desktop()->paint(g, pos, NULL, Style::State()); - } -} -void SkinTheme::paintPopupWindow(PaintEvent& ev) -{ - Widget* widget = static_cast(ev.getSource()); - Window* window = static_cast(ev.getSource()); - Graphics* g = ev.graphics(); - gfx::Rect pos = window->clientBounds(); + void SkinTheme::paintTooltip(PaintEvent& ev) + { + const auto widget = static_cast(ev.getSource()); + Graphics* g = ev.graphics(); + const Rect absRc = widget->bounds(); + Rect rc = widget->clientBounds(); + const gfx::Color fg = colors.tooltipText(); + const gfx::Color bg = colors.tooltipFace(); + const SkinPartPtr tooltipPart = parts.tooltip(); + + she::Surface* nw = tooltipPart->bitmapNW(); + she::Surface* n = tooltipPart->bitmapN(); + she::Surface* ne = tooltipPart->bitmapNE(); + she::Surface* e = tooltipPart->bitmapE(); + she::Surface* se = tooltipPart->bitmapSE(); + she::Surface* s = tooltipPart->bitmapS(); + she::Surface* sw = tooltipPart->bitmapSW(); + she::Surface* w = tooltipPart->bitmapW(); + + switch (widget->arrowAlign()) { + case TOP | LEFT: nw = parts.tooltipArrow()->bitmapNW(); break; + case TOP | RIGHT: ne = parts.tooltipArrow()->bitmapNE(); break; + case BOTTOM | LEFT: sw = parts.tooltipArrow()->bitmapSW(); break; + case BOTTOM | RIGHT: se = parts.tooltipArrow()->bitmapSE(); break; + default: break; + } - if (!is_transparent(BGCOLOR)) - styles.menubox()->paint(g, pos, NULL, Style::State()); + drawRect(g, rc, nw, n, ne, e, se, s, sw, w); - pos.shrink(window->border()); + // Draw arrow in sides + she::Surface* arrow = nullptr; + Rect target(widget->target()); + target = target.createIntersection(Rect(0, 0, display_w(), display_h())); + target.offset(-absRc.origin()); - g->drawAlignedUIString(window->text(), - colors.text(), - window->bgColor(), pos, - window->align()); -} + switch (widget->arrowAlign()) { + case TOP: + arrow = parts.tooltipArrow()->bitmapN(); + g->drawRgbaSurface(arrow, + target.x + target.w / 2 - arrow->width() / 2, + rc.y); + break; + case BOTTOM: + arrow = parts.tooltipArrow()->bitmapS(); + g->drawRgbaSurface(arrow, + target.x + target.w / 2 - arrow->width() / 2, + rc.y + rc.h-arrow->height()); + break; + case LEFT: + arrow = parts.tooltipArrow()->bitmapW(); + g->drawRgbaSurface(arrow, + rc.x, + target.y + target.h / 2 - arrow->height() / 2); + break; + case RIGHT: + arrow = parts.tooltipArrow()->bitmapE(); + g->drawRgbaSurface(arrow, + rc.x + rc.w - arrow->width(), + target.y + target.h / 2 - arrow->height() / 2); + break; + default: break; + } -void SkinTheme::paintWindowButton(ui::PaintEvent& ev) -{ - ButtonBase* widget = static_cast(ev.getSource()); - Graphics* g = ev.graphics(); - Rect rc = widget->clientBounds(); - SkinPartPtr part; - - if (widget->isSelected()) - part = parts.windowCloseButtonSelected(); - else if (widget->hasMouseOver()) - part = parts.windowCloseButtonHot(); - else - part = parts.windowCloseButtonNormal(); - - g->drawRgbaSurface(part->bitmap(0), rc.x, rc.y); -} + // Fill background + g->fillRect( + bg, Rect(rc).shrink( + Border( + w->width(), + n->height(), + e->width(), + s->height()))); -void SkinTheme::paintTooltip(PaintEvent& ev) -{ - ui::TipWindow* widget = static_cast(ev.getSource()); - Graphics* g = ev.graphics(); - Rect absRc = widget->bounds(); - Rect rc = widget->clientBounds(); - gfx::Color fg = colors.tooltipText(); - gfx::Color bg = colors.tooltipFace(); - SkinPartPtr tooltipPart = parts.tooltip(); - - she::Surface* nw = tooltipPart->bitmapNW(); - she::Surface* n = tooltipPart->bitmapN(); - she::Surface* ne = tooltipPart->bitmapNE(); - she::Surface* e = tooltipPart->bitmapE(); - she::Surface* se = tooltipPart->bitmapSE(); - she::Surface* s = tooltipPart->bitmapS(); - she::Surface* sw = tooltipPart->bitmapSW(); - she::Surface* w = tooltipPart->bitmapW(); - - switch (widget->arrowAlign()) { - case TOP | LEFT: nw = parts.tooltipArrow()->bitmapNW(); break; - case TOP | RIGHT: ne = parts.tooltipArrow()->bitmapNE(); break; - case BOTTOM | LEFT: sw = parts.tooltipArrow()->bitmapSW(); break; - case BOTTOM | RIGHT: se = parts.tooltipArrow()->bitmapSE(); break; - } + rc.shrink(widget->border()); - drawRect(g, rc, nw, n, ne, e, se, s, sw, w); - - // Draw arrow in sides - she::Surface* arrow = NULL; - gfx::Rect target(widget->target()); - target = target.createIntersection(gfx::Rect(0, 0, ui::display_w(), ui::display_h())); - target.offset(-absRc.origin()); - - switch (widget->arrowAlign()) { - case TOP: - arrow = parts.tooltipArrow()->bitmapN(); - g->drawRgbaSurface(arrow, - target.x+target.w/2-arrow->width()/2, - rc.y); - break; - case BOTTOM: - arrow = parts.tooltipArrow()->bitmapS(); - g->drawRgbaSurface(arrow, - target.x+target.w/2-arrow->width()/2, - rc.y+rc.h-arrow->height()); - break; - case LEFT: - arrow = parts.tooltipArrow()->bitmapW(); - g->drawRgbaSurface(arrow, - rc.x, - target.y+target.h/2-arrow->height()/2); - break; - case RIGHT: - arrow = parts.tooltipArrow()->bitmapE(); - g->drawRgbaSurface(arrow, - rc.x+rc.w-arrow->width(), - target.y+target.h/2-arrow->height()/2); - break; + g->drawAlignedUIString(widget->text(), fg, bg, rc, widget->align()); } - // Fill background - g->fillRect( - bg, Rect(rc).shrink( - Border( - w->width(), - n->height(), - e->width(), - s->height()))); - - rc.shrink(widget->border()); - - g->drawAlignedUIString(widget->text(), fg, bg, rc, widget->align()); -} + gfx::Color SkinTheme::getWidgetBgColor(const Widget* widget) + { + const gfx::Color c = widget->bgColor(); + const bool decorative = widget->isDecorative(); -gfx::Color SkinTheme::getWidgetBgColor(Widget* widget) -{ - gfx::Color c = widget->bgColor(); - bool decorative = widget->isDecorative(); - - if (!is_transparent(c) || widget->type() == kWindowWidget) - return c; - else if (decorative) - return colors.selected(); - else + if (!is_transparent(c) || widget->type() == kWindowWidget) + return c; + if (decorative) + return colors.selected(); return colors.face(); -} + } -void SkinTheme::drawTextString(Graphics* g, const char *t, gfx::Color fg_color, gfx::Color bg_color, - Widget* widget, const Rect& rc, - int selected_offset) -{ - if (t || widget->hasText()) { - Rect textrc; + void SkinTheme::drawTextString(Graphics* g, const char *t, gfx::Color fg_color, const gfx::Color bg_color, + const Widget* widget, const Rect& rc, + const int selected_offset) + { + if (t || widget->hasText()) { + Rect textrc; - g->setFont(widget->font()); + g->setFont(widget->font()); - if (!t) - t = widget->text().c_str(); + if (!t) + t = widget->text().c_str(); - textrc.setSize(g->measureUIString(t)); + textrc.setSize(g->measureUIString(t)); - // Horizontally text alignment + // Horizontally text alignment - if (widget->align() & RIGHT) - textrc.x = rc.x + rc.w - textrc.w - 1; - else if (widget->align() & CENTER) - textrc.x = rc.center().x - textrc.w/2; - else - textrc.x = rc.x; + if (widget->align() & RIGHT) + textrc.x = rc.x + rc.w - textrc.w - 1; + else if (widget->align() & CENTER) + textrc.x = rc.center().x - textrc.w / 2; + else + textrc.x = rc.x; - // Vertically text alignment + // Vertically text alignment - if (widget->align() & BOTTOM) - textrc.y = rc.y + rc.h - textrc.h - 1; - else if (widget->align() & MIDDLE) - textrc.y = rc.center().y - textrc.h/2; - else - textrc.y = rc.y; + if (widget->align() & BOTTOM) + textrc.y = rc.y + rc.h - textrc.h - 1; + else if (widget->align() & MIDDLE) + textrc.y = rc.center().y - textrc.h / 2; + else + textrc.y = rc.y; - if (widget->isSelected()) { - textrc.x += selected_offset; - textrc.y += selected_offset; - } + if (widget->isSelected()) { + textrc.x += selected_offset; + textrc.y += selected_offset; + } - // Background - if (!is_transparent(bg_color)) { - if (!widget->isEnabled()) - g->fillRect(bg_color, Rect(textrc).inflate(guiscale(), guiscale())); - else - g->fillRect(bg_color, textrc); - } + // Background + if (!is_transparent(bg_color)) { + if (!widget->isEnabled()) + g->fillRect(bg_color, Rect(textrc).inflate(guiscale(), guiscale())); + else + g->fillRect(bg_color, textrc); + } - // Text - Rect textWrap = textrc.createIntersection( - // TODO add ui::Widget::getPadding() property - // Rect(widget->clientBounds()).shrink(widget->border())); - widget->clientBounds()).inflate(0, 1*guiscale()); + // Text + const Rect textWrap = textrc.createIntersection( + // TODO add Widget::getPadding() property + widget->clientBounds()).inflate(0, 1*guiscale()); + + if (const IntersectClip clip(g, textWrap); clip) { + if (!widget->isEnabled()) { + // Draw white part + g->drawUIString(t, + colors.background(), + ColorNone, + textrc.origin() + Point(guiscale(), guiscale())); + } - IntersectClip clip(g, textWrap); - if (clip) { - if (!widget->isEnabled()) { - // Draw white part g->drawUIString(t, - colors.background(), - gfx::ColorNone, - textrc.origin() + Point(guiscale(), guiscale())); + !widget->isEnabled() ? + colors.disabled(): + geta(fg_color) > 0 ? fg_color : + colors.text(), + bg_color, textrc.origin()); } - - g->drawUIString(t, - (!widget->isEnabled() ? - colors.disabled(): - (gfx::geta(fg_color) > 0 ? fg_color : - colors.text())), - bg_color, textrc.origin()); } } -} - -void SkinTheme::drawEntryCaret(ui::Graphics* g, Entry* widget, int x, int y) -{ - gfx::Color color = colors.text(); - int h = widget->textHeight(); - for (int u=x; udrawVLine(color, u, y-1, h+2); -} + void SkinTheme::drawEntryCaret(Graphics* g, const Entry* widget, const int x, const int y) + { + const gfx::Color color = colors.text(); + const int h = widget->textHeight(); -she::Surface* SkinTheme::getToolIcon(const char* toolId) const -{ - std::map::const_iterator it = m_toolicon.find(toolId); - if (it != m_toolicon.end()) - return it->second; - else - return NULL; -} + for (int u = x; u < x + 2 * guiscale(); ++u) + g->drawVLine(color, u, y - 1, h + 2); + } -void SkinTheme::drawRect(Graphics* g, const Rect& rc, - she::Surface* nw, she::Surface* n, she::Surface* ne, - she::Surface* e, she::Surface* se, she::Surface* s, - she::Surface* sw, she::Surface* w) -{ - int x, y; + she::Surface* SkinTheme::getToolIcon(const char* toolId) const + { + if (const auto it = m_toolicon.find(toolId); it != m_toolicon.end()) + return it->second; - // Top + return nullptr; + } - g->drawRgbaSurface(nw, rc.x, rc.y); + void SkinTheme::drawRect(Graphics* g, const Rect& rc, + she::Surface* nw, she::Surface* n, she::Surface* ne, + she::Surface* e, she::Surface* se, she::Surface* s, + she::Surface* sw, she::Surface* w) { - IntersectClip clip(g, Rect(rc.x+nw->width(), rc.y, - rc.w-nw->width()-ne->width(), rc.h)); - if (clip) { - for (x = rc.x+nw->width(); - x < rc.x+rc.w-ne->width(); - x += n->width()) { - g->drawRgbaSurface(n, x, rc.y); + int x; + + // Top + g->drawRgbaSurface(nw, rc.x, rc.y); + { + const IntersectClip clip(g, Rect(rc.x + nw->width(), rc.y, + rc.w-nw->width()-ne->width(), rc.h)); + if (clip) { + for (x = rc.x + nw->width(); + x < rc.x + rc.w-ne->width(); + x += n->width()) { + g->drawRgbaSurface(n, x, rc.y); + } } } - } - - g->drawRgbaSurface(ne, rc.x+rc.w-ne->width(), rc.y); - // Bottom + g->drawRgbaSurface(ne, rc.x + rc.w-ne->width(), rc.y); - g->drawRgbaSurface(sw, rc.x, rc.y+rc.h-sw->height()); - { - IntersectClip clip(g, Rect(rc.x+sw->width(), rc.y, - rc.w-sw->width()-se->width(), rc.h)); - if (clip) { - for (x = rc.x+sw->width(); - x < rc.x+rc.w-se->width(); - x += s->width()) { - g->drawRgbaSurface(s, x, rc.y+rc.h-s->height()); + // Bottom + g->drawRgbaSurface(sw, rc.x, rc.y + rc.h-sw->height()); + { + const IntersectClip clip(g, Rect(rc.x + sw->width(), rc.y, + rc.w-sw->width() - se->width(), rc.h)); + if (clip) { + for (x = rc.x + sw->width(); + x < rc.x + rc.w-se->width(); + x += s->width()) { + g->drawRgbaSurface(s, x, rc.y + rc.h - s->height()); + } } } - } - g->drawRgbaSurface(se, rc.x+rc.w-se->width(), rc.y+rc.h-se->height()); - { - IntersectClip clip(g, Rect(rc.x, rc.y+nw->height(), - rc.w, rc.h-nw->height()-sw->height())); - if (clip) { - // Left - for (y = rc.y+nw->height(); - y < rc.y+rc.h-sw->height(); - y += w->height()) { - g->drawRgbaSurface(w, rc.x, y); - } + g->drawRgbaSurface(se, rc.x + rc.w-se->width(), rc.y + rc.h-se->height()); + { + const IntersectClip clip(g, Rect(rc.x, rc.y + nw->height(), + rc.w, rc.h - nw->height()-sw->height())); + if (clip) { + int y; + // Left + for (y = rc.y + nw->height(); + y < rc.y + rc.h - sw->height(); + y += w->height()) { + g->drawRgbaSurface(w, rc.x, y); + } - // Right - for (y = rc.y+ne->height(); - y < rc.y+rc.h-se->height(); - y += e->height()) { - g->drawRgbaSurface(e, rc.x+rc.w-e->width(), y); + // Right + for (y = rc.y + ne->height(); + y < rc.y + rc.h - se->height(); + y += e->height()) { + g->drawRgbaSurface(e, rc.x + rc.w - e->width(), y); + } } } } -} -void SkinTheme::drawRect(ui::Graphics* g, const gfx::Rect& rc, SkinPart* skinPart, gfx::Color bg) -{ - drawRect(g, rc, - skinPart->bitmap(0), - skinPart->bitmap(1), - skinPart->bitmap(2), - skinPart->bitmap(3), - skinPart->bitmap(4), - skinPart->bitmap(5), - skinPart->bitmap(6), - skinPart->bitmap(7)); - - // Center - if (!is_transparent(bg)) { - gfx::Rect inside = rc; - inside.shrink(Border( + void SkinTheme::drawRect(Graphics* g, const Rect& rc, const SkinPart* skinPart, const gfx::Color bg) + { + drawRect(g, rc, + skinPart->bitmap(0), + skinPart->bitmap(1), + skinPart->bitmap(2), + skinPart->bitmap(3), + skinPart->bitmap(4), + skinPart->bitmap(5), + skinPart->bitmap(6), + skinPart->bitmap(7)); + + // Center + if (!is_transparent(bg)) { + Rect inside = rc; + inside.shrink(Border( skinPart->bitmap(7)->width(), skinPart->bitmap(1)->height(), skinPart->bitmap(3)->width(), skinPart->bitmap(5)->height())); - IntersectClip clip(g, inside); - if (clip) - g->fillRect(bg, inside); + if (const IntersectClip clip(g, inside); clip) + g->fillRect(bg, inside); + } } -} -void SkinTheme::drawRect2(Graphics* g, const Rect& rc, int x_mid, - SkinPart* nw1, SkinPart* nw2, - gfx::Color bg1, gfx::Color bg2) -{ - Rect rc2(rc.x, rc.y, x_mid-rc.x+1, rc.h); + void SkinTheme::drawRect2(Graphics* g, const Rect& rc, const int x_mid, + const SkinPart* nw1, const SkinPart* nw2, + const gfx::Color bg1, const gfx::Color bg2) { - IntersectClip clip(g, rc2); - if (clip) - drawRect(g, rc, nw1, bg1); - } + Rect rc2(rc.x, rc.y, x_mid - rc.x + 1, rc.h); + { + if (const IntersectClip clip(g, rc2); clip) + drawRect(g, rc, nw1, bg1); + } - rc2.x += rc2.w; - rc2.w = rc.w - rc2.w; + rc2.x += rc2.w; + rc2.w = rc.w - rc2.w; - IntersectClip clip(g, rc2); - if (clip) - drawRect(g, rc, nw2, bg2); -} + if (const IntersectClip clip(g, rc2); clip) + drawRect(g, rc, nw2, bg2); + } -void SkinTheme::drawHline(ui::Graphics* g, const gfx::Rect& rc, SkinPart* part) -{ - int x; + void SkinTheme::drawHline(Graphics* g, const Rect& rc, const SkinPart* skinPart) + { + int x; - for (x = rc.x; - x < rc.x2()-part->size().w; - x += part->size().w) { - g->drawRgbaSurface(part->bitmap(0), x, rc.y); - } + for (x = rc.x; + x < rc.x2() - skinPart->size().w; + x += skinPart->size().w) { + g->drawRgbaSurface(skinPart->bitmap(0), x, rc.y); + } - if (x < rc.x2()) { - Rect rc2(x, rc.y, rc.w-(x-rc.x), part->size().h); - IntersectClip clip(g, rc2); - if (clip) - g->drawRgbaSurface(part->bitmap(0), x, rc.y); + if (x < rc.x2()) { + const Rect rc2(x, rc.y, rc.w-(x-rc.x), skinPart->size().h); + if (const IntersectClip clip(g, rc2); clip) + g->drawRgbaSurface(skinPart->bitmap(0), x, rc.y); + } } -} -void SkinTheme::drawVline(ui::Graphics* g, const gfx::Rect& rc, SkinPart* part) -{ - int y; + void SkinTheme::drawVline(Graphics* g, const Rect& rc, const SkinPart* skinPart) + { + int y; - for (y = rc.y; - y < rc.y2()-part->size().h; - y += part->size().h) { - g->drawRgbaSurface(part->bitmap(0), rc.x, y); - } + for (y = rc.y; + y < rc.y2() - skinPart->size().h; + y += skinPart->size().h) { + g->drawRgbaSurface(skinPart->bitmap(0), rc.x, y); + } - if (y < rc.y2()) { - Rect rc2(rc.x, y, part->size().w, rc.h-(y-rc.y)); - IntersectClip clip(g, rc2); - if (clip) - g->drawRgbaSurface(part->bitmap(0), rc.x, y); + if (y < rc.y2()) { + const Rect rc2(rc.x, y, skinPart->size().w, rc.h - (y - rc.y)); + if (const IntersectClip clip(g, rc2); clip) + g->drawRgbaSurface(skinPart->bitmap(0), rc.x, y); + } } -} -void SkinTheme::paintProgressBar(ui::Graphics* g, const gfx::Rect& rc0, double progress) -{ - g->drawRect(colors.text(), rc0); + void SkinTheme::paintProgressBar(Graphics* g, const Rect& rc, const double progress) + { + g->drawRect(colors.text(), rc); - gfx::Rect rc = rc0; - rc.shrink(1); + Rect r = rc; + r.shrink(1); - int u = (int)((double)rc.w*progress); - u = MID(0, u, rc.w); + int u = static_cast(progress * r.w); + u = MID(0, u, r.w); - if (u > 0) - g->fillRect(colors.selected(), gfx::Rect(rc.x, rc.y, u, rc.h)); + if (u > 0) + g->fillRect(colors.selected(), Rect(r.x, r.y, u, r.h)); - if (1+u < rc.w) - g->fillRect(colors.background(), gfx::Rect(rc.x+u, rc.y, rc.w-u, rc.h)); -} + if (1+u < r.w) + g->fillRect(colors.background(), Rect(r.x + u, r.y, r.w - u, r.h)); + } -void SkinTheme::paintIcon(Widget* widget, Graphics* g, IButtonIcon* iconInterface, int x, int y) -{ - she::Surface* icon_bmp = NULL; + void SkinTheme::paintIcon(const Widget* widget, Graphics* g, IButtonIcon* iconInterface, const int x, const int y) + { + she::Surface* icon_bmp = nullptr; - // enabled - if (widget->isEnabled()) { - if (widget->isSelected()) // selected - icon_bmp = iconInterface->selectedIcon(); - else - icon_bmp = iconInterface->normalIcon(); - } - // disabled - else { - icon_bmp = iconInterface->disabledIcon(); - } + // enabled + if (widget->isEnabled()) { + if (widget->isSelected()) // selected + icon_bmp = iconInterface->selectedIcon(); + else + icon_bmp = iconInterface->normalIcon(); + } + // disabled + else { + icon_bmp = iconInterface->disabledIcon(); + } - if (icon_bmp) - g->drawRgbaSurface(icon_bmp, x, y); -} + if (icon_bmp) + g->drawRgbaSurface(icon_bmp, x, y); + } -std::shared_ptr SkinTheme::loadFont(const std::vector>& fonts) -{ - std::shared_ptr fallback; - std::vector> candidates; - - for (const auto& [themeFont, size] : fonts) { - bool isTrueType = base::get_file_extension(themeFont) != "png"; - if (isTrueType) { - if (auto f = she::instance()->loadTrueTypeFont(themeFont.c_str(), size * guiscale())) { - f->setAntialias(true); - // std::cout << "Loaded font: " << themeFont << std::endl; - return std::shared_ptr(f); - // } else { - // std::cout << "Could not load font: " << themeFont << std::endl; - } - auto themeLower = base::string_to_lower(base::get_file_title(themeFont)); - for (auto& dir : base::get_font_paths()) { - auto item = FileSystemModule::instance()->getFileItemFromPath(dir); - if (!item) - continue; - for (auto child : item->children()) { - if (child->isFolder()) + std::shared_ptr SkinTheme::loadFont(const std::vector>& fonts) const + { + std::shared_ptr fallback; + std::vector> candidates; + + for (const auto& [themeFont, size] : fonts) { + if (base::get_file_extension(themeFont) != "png") { + if (const auto f = she::instance()->loadTrueTypeFont(themeFont.c_str(), size * guiscale())) { + f->setAntialias(true); + return std::shared_ptr(f); + } + auto themeLower = base::string_to_lower(base::get_file_title(themeFont)); + for (auto& dir : base::get_font_paths()) { + const auto item = FileSystemModule::instance()->getFileItemFromPath(dir); + if (!item) continue; - auto shortName = base::string_to_lower(child->displayName()); - if (shortName.find(themeLower) != std::string::npos) - candidates.emplace_back(shortName, child->fileName()); + for (const auto child : item->children()) { + if (child->isFolder()) + continue; + if (auto shortName = base::string_to_lower(child->displayName()); shortName.find(themeLower) != std::string::npos) + candidates.emplace_back(shortName, child->fileName()); + } } + } else { + try { + const auto f = she::instance()->loadSpriteSheetFont(themeFont.c_str(), guiscale()); + if (f->isScalable()) + f->setSize(size); + return std::shared_ptr(f); + } catch(const std::exception&) {} // do nothing } - } else { - try { - auto f = she::instance()->loadSpriteSheetFont(themeFont.c_str(), guiscale()); - if (f->isScalable()) - f->setSize(size); + } + + std::ranges::sort(candidates, [](auto& a, auto& b){ + return a.first.size() > b.first.size(); + }); + while (!candidates.empty()) { + auto& themeFont = candidates.back().second; + // Use the size from the first font pair (if available) for fallback fonts + const auto size = fonts.empty() ? 0 : fonts.front().second; + if (const auto f = she::instance()->loadTrueTypeFont(themeFont.c_str(), static_cast(size) * guiscale())) { return std::shared_ptr(f); - } catch(const std::exception&) {} // do nothing + } + candidates.pop_back(); } - } - std::sort(candidates.begin(), candidates.end(), [](auto& a, auto& b){ - return a.first.size() > b.first.size(); - }); - while (!candidates.empty()) { - auto& themeFont = candidates.back().second; - // Use the size from the first font pair (if available) for fallback fonts - auto size = fonts.empty() ? 0 : fonts.front().second; - if (auto f = she::instance()->loadTrueTypeFont(themeFont.c_str(), size * guiscale())) { - // std::cout << "Loaded fallback font: " << themeFont << std::endl; - return std::shared_ptr(f); - } - candidates.pop_back(); + return fallback; } - return fallback; } - -} // namespace skin -} // namespace app diff --git a/src/app/ui/skin/skin_theme.h b/src/app/ui/skin/skin_theme.h index 1eb5d164d..fb11aa56e 100644 --- a/src/app/ui/skin/skin_theme.h +++ b/src/app/ui/skin/skin_theme.h @@ -1,5 +1,6 @@ -// Aseprite -// Copyright (C) 2001-2015 David Capello +// Aseprite | Copyright (C) 2001-2016 David Capello +// LibreSprite | Copyright (C) 2021-2025 LibreSprite contributors +// Besprited | Copyright (C) 2026 Veritaware // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License version 2 as @@ -30,126 +31,125 @@ namespace she { class Surface; } -namespace app { - namespace skin { +namespace app::skin +{ - // This is the GUI theme used by Aseprite (which use images from - // data/skins directory). - class SkinTheme : public ui::Theme + // This is the GUI theme used by Aseprite (which use images from + // data/skins directory). + class SkinTheme : public ui::Theme , public app::gen::SkinFile { - public: - static const char* kThemeCloseButtonId; - - static SkinTheme* instance(); - - SkinTheme(); - ~SkinTheme(); - - std::shared_ptr getDefaultFont() const override { return m_defaultFont; } - std::shared_ptr getWidgetFont(const ui::Widget* widget) const override; - std::shared_ptr getMiniFont() const { return m_miniFont; } - - ui::Cursor* getCursor(ui::CursorType type) override; - void initWidget(ui::Widget* widget) override; - void getWindowMask(ui::Widget* widget, gfx::Region& region) override; - void setDecorativeWidgetBounds(ui::Widget* widget) override; - int getScrollbarSize() override; - - void paintDesktop(ui::PaintEvent& ev) override; - void paintBox(ui::PaintEvent& ev) override; - void paintButton(ui::PaintEvent& ev) override; - void paintCheckBox(ui::PaintEvent& ev) override; - void paintEntry(ui::PaintEvent& ev) override; - void paintGrid(ui::PaintEvent& ev) override; - void paintLabel(ui::PaintEvent& ev) override; - void paintLinkLabel(ui::PaintEvent& ev) override; - void paintListBox(ui::PaintEvent& ev) override; - void paintListItem(ui::PaintEvent& ev) override; - void paintMenu(ui::PaintEvent& ev) override; - void paintMenuItem(ui::PaintEvent& ev) override; - void paintSplitter(ui::PaintEvent& ev) override; - void paintRadioButton(ui::PaintEvent& ev) override; - void paintSeparator(ui::PaintEvent& ev) override; - void paintSlider(ui::PaintEvent& ev) override; - void paintComboBoxEntry(ui::PaintEvent& ev) override; - void paintComboBoxButton(ui::PaintEvent& ev) override; - void paintTextBox(ui::PaintEvent& ev) override; - void paintView(ui::PaintEvent& ev) override; - void paintViewScrollbar(ui::PaintEvent& ev) override; - void paintViewViewport(ui::PaintEvent& ev) override; - void paintWindow(ui::PaintEvent& ev) override; - void paintPopupWindow(ui::PaintEvent& ev) override; - void paintTooltip(ui::PaintEvent& ev) override; - void paintWindowButton(ui::PaintEvent& ev); - - int get_button_selected_offset() const { return 0; } // TODO Configurable in xml - - she::Surface* getToolIcon(const char* toolId) const; - - // Helper functions to draw bounds/hlines with sheet parts - void drawRect(ui::Graphics* g, const gfx::Rect& rc, - she::Surface* nw, she::Surface* n, she::Surface* ne, - she::Surface* e, she::Surface* se, she::Surface* s, - she::Surface* sw, she::Surface* w); - void drawRect(ui::Graphics* g, const gfx::Rect& rc, SkinPart* skinPart, gfx::Color bg = gfx::ColorNone); - void drawRect2(ui::Graphics* g, const gfx::Rect& rc, int x_mid, SkinPart* nw1, SkinPart* nw2, gfx::Color bg1, gfx::Color bg2); - void drawHline(ui::Graphics* g, const gfx::Rect& rc, SkinPart* skinPart); - void drawVline(ui::Graphics* g, const gfx::Rect& rc, SkinPart* skinPart); - void paintProgressBar(ui::Graphics* g, const gfx::Rect& rc, double progress); - - Style* getStyle(const std::string& id) { - return m_stylesheet.getStyle(id); - } - - SkinPartPtr getPartById(const std::string& id) { - return m_parts_by_id[id]; - } - - int getDimensionById(const std::string& id) { - return m_dimensions_by_id[id] * ui::guiscale(); - } - - gfx::Color getColorById(const std::string& id); - - protected: - void onRegenerate() override; - - private: - void loadSheet(const std::string& skinId); - void loadFonts(const std::string& skinId); - void loadXml(const std::string& skinId); - void loadSkinXml(const std::string& filename); - void loadThemeXml(const std::string& filename); - - she::Surface* sliceSheet(she::Surface* sur, const gfx::Rect& bounds); - gfx::Color getWidgetBgColor(ui::Widget* widget); - void drawTextString(ui::Graphics* g, const char *t, gfx::Color fg_color, gfx::Color bg_color, - ui::Widget* widget, const gfx::Rect& rc, - int selected_offset); - void drawEntryCaret(ui::Graphics* g, ui::Entry* widget, int x, int y); - - void paintIcon(ui::Widget* widget, ui::Graphics* g, ui::IButtonIcon* iconInterface, int x, int y); - - std::shared_ptr loadFont(const std::vector>& fonts); - - she::Surface* m_sheet; - std::map m_parts_by_id; - std::map m_toolicon; - std::map m_colors_by_id; - std::map m_dimensions_by_id; - std::vector m_cursors; - StyleSheet m_stylesheet; - std::shared_ptr m_defaultFont; - std::shared_ptr m_miniFont; - }; - - inline SkinPartPtr get_part_by_id(const std::string& id) { - return static_cast(ui::Manager::getDefault()->theme())->getPartById(id); + public: + static const char* kThemeCloseButtonId; + + static SkinTheme* instance(); + + SkinTheme(); + ~SkinTheme() override; + + std::shared_ptr getDefaultFont() const override { return m_defaultFont; } + std::shared_ptr getWidgetFont(const ui::Widget* widget) const override; + std::shared_ptr getMiniFont() const { return m_miniFont; } + + ui::Cursor* getCursor(ui::CursorType type) override; + void initWidget(ui::Widget* widget) override; + void getWindowMask(ui::Widget* widget, gfx::Region& region) override; + void setDecorativeWidgetBounds(ui::Widget* widget) override; + int getScrollbarSize() override; + + void paintDesktop(ui::PaintEvent& ev) override; + void paintBox(ui::PaintEvent& ev) override; + void paintButton(ui::PaintEvent& ev) override; + void paintCheckBox(ui::PaintEvent& ev) override; + void paintEntry(ui::PaintEvent& ev) override; + void paintGrid(ui::PaintEvent& ev) override; + void paintLabel(ui::PaintEvent& ev) override; + void paintLinkLabel(ui::PaintEvent& ev) override; + void paintListBox(ui::PaintEvent& ev) override; + void paintListItem(ui::PaintEvent& ev) override; + void paintMenu(ui::PaintEvent& ev) override; + void paintMenuItem(ui::PaintEvent& ev) override; + void paintSplitter(ui::PaintEvent& ev) override; + void paintRadioButton(ui::PaintEvent& ev) override; + void paintSeparator(ui::PaintEvent& ev) override; + void paintSlider(ui::PaintEvent& ev) override; + void paintComboBoxEntry(ui::PaintEvent& ev) override; + void paintComboBoxButton(ui::PaintEvent& ev) override; + void paintTextBox(ui::PaintEvent& ev) override; + void paintView(ui::PaintEvent& ev) override; + void paintViewScrollbar(ui::PaintEvent& ev) override; + void paintViewViewport(ui::PaintEvent& ev) override; + void paintWindow(ui::PaintEvent& ev) override; + void paintPopupWindow(ui::PaintEvent& ev) override; + void paintTooltip(ui::PaintEvent& ev) override; + void paintWindowButton(ui::PaintEvent& ev); + + static int get_button_selected_offset() { return 0; } // TODO Configurable in xml + + she::Surface* getToolIcon(const char* toolId) const; + + // Helper functions to draw bounds/hlines with sheet parts + static void drawRect(ui::Graphics* g, const gfx::Rect& rc, + she::Surface* nw, she::Surface* n, she::Surface* ne, + she::Surface* e, she::Surface* se, she::Surface* s, + she::Surface* sw, she::Surface* w); + static void drawRect(ui::Graphics* g, const gfx::Rect& rc, const SkinPart* skinPart, gfx::Color bg = gfx::ColorNone); + static void drawRect2(ui::Graphics* g, const gfx::Rect& rc, int x_mid, const SkinPart* nw1, const SkinPart* nw2, gfx::Color bg1, gfx::Color bg2); + static void drawHline(ui::Graphics* g, const gfx::Rect& rc, const SkinPart* skinPart); + static void drawVline(ui::Graphics* g, const gfx::Rect& rc, const SkinPart* skinPart); + void paintProgressBar(ui::Graphics* g, const gfx::Rect& rc, double progress); + + Style* getStyle(const std::string& id) { + return m_stylesheet.getStyle(id); } - inline gfx::Color get_color_by_id(const std::string& id) { - return static_cast(ui::Manager::getDefault()->theme())->getColorById(id); + SkinPartPtr getPartById(const std::string& id) { + return m_parts_by_id[id]; } - } // namespace skin -} // namespace app + int getDimensionById(const std::string& id) { + return m_dimensions_by_id[id] * ui::guiscale(); + } + + gfx::Color getColorById(const std::string& id); + + protected: + void onRegenerate() override; + + private: + void loadSheet(const std::string& skinId); + void loadFonts(const std::string& skinId); + void loadXml(const std::string& skinId); + void loadSkinXml(const std::string& filename); + void loadThemeXml(const std::string& filename); + + she::Surface* sliceSheet(she::Surface* sur, const gfx::Rect& bounds) const; + gfx::Color getWidgetBgColor(const ui::Widget* widget); + void drawTextString(ui::Graphics* g, const char *t, gfx::Color fg_color, gfx::Color bg_color, + const ui::Widget* widget, const gfx::Rect& rc, + int selected_offset); + void drawEntryCaret(ui::Graphics* g, const ui::Entry* widget, int x, int y); + + static void paintIcon(const ui::Widget* widget, ui::Graphics* g, ui::IButtonIcon* iconInterface, int x, int y); + + std::shared_ptr loadFont(const std::vector>& fonts) const; + + she::Surface* m_sheet; + std::map m_parts_by_id; + std::map m_toolicon; + std::map m_colors_by_id; + std::map m_dimensions_by_id; + std::vector m_cursors; + StyleSheet m_stylesheet; + std::shared_ptr m_defaultFont; + std::shared_ptr m_miniFont; + }; + + inline SkinPartPtr get_part_by_id(const std::string& id) { + return static_cast(ui::Manager::getDefault()->theme())->getPartById(id); + } + + inline gfx::Color get_color_by_id(const std::string& id) { + return static_cast(ui::Manager::getDefault()->theme())->getColorById(id); + } + +} From 2f2bd55d379d72aafaa29d292d88fa3bd5563350 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Pra=C5=BAmo?= Date: Wed, 4 Feb 2026 03:56:34 +0100 Subject: [PATCH 12/41] Important README update --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 47f9333dd..8dda3c9af 100644 --- a/README.md +++ b/README.md @@ -28,6 +28,9 @@ In 2026 [Nidrax](https://github.com/Nidrax) forked the project under the [Verita organization to create his own opinionated version of the editor independently of LibreSprite's team design decisions and thus Besprited was born. +### And why *Besprited*? +Because this project is BS. What other reason did you expect? + ## Contributing Feel free to contribute to the project! Check out the [contributing guidelines](CONTRIBUTING.md) to get started. From a68dbd2aa25220ad580cc883c32ff67b378ed335 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Pra=C5=BAmo?= Date: Wed, 4 Feb 2026 13:07:38 +0100 Subject: [PATCH 13/41] Modify the logo :) --- data/splash.ase | Bin 1546 -> 1585 bytes data/splash.png | Bin 1061 -> 1086 bytes docs/branding.png | Bin 1224 -> 2461 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/data/splash.ase b/data/splash.ase index 6864548f761dd2cec508e86035445d410730a4e4..c55c2b5abda8f1b3cf0a5be657aa320766450bf5 100644 GIT binary patch delta 838 zcmV-M1G)T)46zIWF_8g(0kN@xXaWHhlj;H;f6EfXAP7aX_5XjktF)**BqD_jXOYgB zi^5GcOs>m;_NUm8w2g{(Vnb4908X2c$}b}`+V^5OKe_CPm1b6H<{3vYrF|_2-PoCD z9KwV~dCr=AyrT*WUh_yzC^L#wwC*P^x&+&=!_frZdpG(XR_1pfO61{$^b$}j-1fsJ ze-Y^^ON+#I!#|Ir=*aRPbjdTzj&#ZMWoED{v9q#RM4=I+D|zzua`lLv)v6gQ-}5wX zkUfALAk<4VE8R<46flzMWzTDR%c*G97&ylEpg;@2KK~}(izwk zM@DCuV!T|QCr2!sG`u}k#T?Y<=@2+?ATQVr<2-%c!xd3sP&B+fErm?+v~Bh>f1c%@ zrXr?z?ylX-cvgGb3Yg+~lH0#QFUON_S03KQnrGzq=k$U3&ayd;u>4=35trZ6IQ;#D zk!(*~TmD3PPm{(02kXEef2S~RwzK~;GGjZTh2WAQD@b-ABLFGr&>Kb_I_ zH26N>>qSGZ7Y(_ti*YiMd=7Kcf9dgb2X_M1CXojD9tYzwWG8S}lSu=ONAIb3;2Ww# zs4o1hDH_a4x#tHypi?jczK#Y#fj!NFW6vCnfUl!b65o?M?-jaZ=5tjrqzZ;q!H_B# zQqPC+23~}B(b50_00kfe02u&20RI92000000000E0UiK&ob8rT5`!QRe?xnP-2bxu za&)a?V3I0r-Vct(5Ox??yygQwW1F=RQ)c+AtynU{XKlui8M|>Nf>+3ZQ=j^CgL(6DB#r-~D=1}EqS~Lw94HKlp=Pv&z)3M1z2qAo#<#0Yb zq?wLow6kH-u}+ftv35A>Fgq)EU?JrQA%yU!jCWQ=Np)VT?(FPmBBw0FZOnw$T&ayl>v0u(`0$=x=>*NDhxn{0jMw_@x%B4 zeuW*sRFnS$9DkQV62l-21AEl}U)(DpfS1@#LW_=!BFjtKY4ur8N()w6be^(0ODp0? z>MSjZBd4>pCXSTO(xNyrI?ELCvOG^tact7?_8cl^QJ<$l;P?Q%U^k58^y?m0WC#P% z@b%e~o;SJv7=N^KJo$Fz?p<8-^!)yuHZb2V zi_-|p{{QJ#-QoFtOxkWHt@;|}fw)FzPz{2mwa7_t-C)nw98Lu}>Y~MTd#LV|dUT`#qkl|1}_QQC_G;1QH z%*L~(Ldk4AYchn)c3XEMJ+oDw_8~cQX=hb>-%-t_iue?-`)3O09O$c|MKn+GxQ`)w zWaVsHGz}095@f(FDieAm{QET9~h#BMH^vP#q4{;Yh3F1aUhX!+-~C6951J diff --git a/data/splash.png b/data/splash.png index 9756a8056afb28dbd4ca3a7952d23aeb44004cd7..bc72853510bb5a76912f83f19cbced83cc047501 100644 GIT binary patch delta 839 zcmV-N1GxO92)+oA(JWX=L_t(|ob8+0lA|yT0C_Zz{{Nqy3iuH5fhvxvIfjXFI1#V4d9WYcX!UkY^RU z{fWSzpspO^JyPEP0-em9Kxx(K)LxZzeD~FywhY zwi@&00@n*26vwVEyPB525n~Xz7L<+JVnqK8dGfLHeZ$|hzPy*fD{aX_#ruZ8{}kBY ze!7FdhX)Oml0z<9iPJ4@i%6NF7*E9M&oPLuPE0>dy`-(6tkk#MfSHM9}7T7mI8 zv~~^tzrflv^<;tJnjE%e!Ie3lypA{i`}G3*b>1g%$>&nN;J&|>!FLgOCTfDf@q$P5 zzeb?Gp3!4F3GI_)xz<}-?A7G42`rn})Tyb#Ah3lZrg(ptH|7}@81S0*8!I`D8eS?; zx0-aLK&M+!t*zv=YIvnUFtjQ@M0fgjI!RXg)BN@a=4sFMM1z_-HT@kE z*vWW0N!I#P2ppN{7WH_2otplR8fIyi09=|KM(&s{YP0cp5WUm%^V; zV9}bsPF;V0-xT{Wferj!1b-L7-$n3ukz4#3SBW4ZXWgGL6?s2|K?GV5PksnAkp$NK zZ40S~WmkAcEHWU_L=e~>zzFPpf%U{v> zCAKa{e^TC2V3c?i7{1W*c#-!1n!zkEIaGo0ieXz-+(y|W2?p22f!_RcEs zaRyJR`Qy(j@M#9msCn{d7U+Byk-mr~CPrEEh{Kzjvl`5GmUF5E=81jx#kjE}&nOQ2 z9f7@d9xX78S{+jnGmiE=;au5ZsoCB-j~D0;i3tuYdA`n--=}}G^Qc~KCUA9N$n$+} zHs<95$BqWYxuc7&4$EJNF$f$J(m`!8qCZ2Pc&>b1@OM}*_Y&AMmMm1fF8KSU!20o? zn4`u@;}d^}_0oiX(E8%D6eHgzdm5CP#8s5Zqp4HxVHbTB-D7=rB`6M4~hbzIHT||4EVCP@~07*qoM6N<$f<&>C761SM diff --git a/docs/branding.png b/docs/branding.png index a36341e264e98aacbc872bcdaabefe46f2873854..3bc129af89a29ab2afd18faf625f0ec64b38a909 100644 GIT binary patch literal 2461 zcmbVO3se(V8cwy%L29}^%h}q}bvql^ZCy!b@*rfU35W@=N`NI1K|~p5CdrV;Br_9| zz@n?R?y0qGt+fieAoZ-QZcD4J)>ae|A6*OLfwj1@t&daDLIt})P|&(}AmsF+ZBKJf z=H5H^yZ`I^?tkXRoUAlSbZoRpB$8yL8*@dXDQYk$qo#uA4&&lMFj#XkEh%73lj)Xf z4CTh>wiTM2gZTsX#Y1iN`_AaRyVPifQCEHfzOlCdt7qEI zqk(^*X#rHRAa5R7mA0r1@(j^5v zIN_jpsD!f7ZoPEyK(iF0NxgJYya_RR43wQtFJ~!pd6tDJcMvEkO-h7x0Sp*$Q9KR> zTuwKK1@zK!yBL@YuVE=P4&fboX|muD$~Wae28N{|RIZQ_2%>@#P&ukW5nP)P2PqL{ zJdCJdL?ct6m_mtx{qRo;+_9t;%QdEkoq?5JYUg$Uxw%=B7K{`}u(XG#88;+Y#7h_-ua|;QCvtFkB4*uOxK5yAZ~*tf3OOR= zG!7(*2+reUo#W0)0;Zgli*oZEz$zkGkDcKe&d%J&bY%Nm4nS>9rihPw#^Q2CTyT6! z8Au~skb9yzOVC5XxfI9vSb|C^17Xe*vhiRBmcn_4wJ?lxlBt}@kRhc;u24YFETY{c z zrY#{*ZGzG&qckPBj3U&83@22mOqrlfK($sarJyFV0OySi;S;ExJWqo2RxN_!xJn_j zYEVjMCDf=4M{!c7RU{}?B}jY%Nl=sivsoJ4E!_FD?Fctc&;*uFbAYX2_)3^5Z+PaU zp>Y{tI3dVeFC_$CDN-7KP2ZyeKP`g^vwk}TjQ#-K6EKdk@_wA9l5L<`KdvYEe$jJy z*$>D5)7ZOD?BCVj&x$=CB!7k=mnc z{?uStb(CFRryUkGN1y%(E)vzRJU!12sUMA;zn-~tg;HXjW@^$ubuuYy=D%x4 zKdF9wMs2X*<^L?8gnt=}NIG$f=OF z{MuJMR#?@l){b7AvjbyZ;|vG-4i9hXD()>BFn69!x_0%I%AS}nIx1C5X6#7*`Wijw zvbEto^_ews89N8x`dyr%)LHlbPR(Mvy4ZR`{m~=s*$*8*ziVAjH`ktG9lNvX?1h6D zznHenUbDY&rDm-3$kUa~+_-_2^xBO$A~^)B_x|_owB(FiOT}HqSzWi+-S}{{yx-dr z9}2Fa-$}8T+R7c>Bm5~-UGtt3^6d4Qt8f46VyJ!X^Yl3aTwD zz%9+Yt4`brH9PiWc2BVB(4$e+P1>Wv<(a= z&N}FSS^aLQLVV+e6|b)@8u;JFyIUajVekA_)%>aT7oPw+y*_=jc)t1exdx!vKq?UJ mpTp9Pk_ZA8qJOJ(q9dY8 zU`{69{Ze+hlkKm&4Q8Zzd-vvAMYcdAUc$8lMx^))fr}*_hkYxz3K;3clQ%S$G-vEd z9wy`+VB`Tlvr}VfKlD28&!9z|-c}OfdVgU>%prK>F-TkG7?2t$V1#MC)HOQV~ES zFKaSO;R*Q6ZJSSFX&&fAT>(AOOquW5($)2JsCIf*kl7N#ci^V^?@G73-O~5V#B}K@ zdPOh>YKtUoL8VqF9x%R~SkKZ!!xs1SdrY+n#w$2zQi9q|kx#6E8Qb>t)lV;doDbkb zHmDYkKDAh$hdR0MhsNEByOxJlH)X|UQE0+f>Sy`=xW7V@kSV7n&$s}|#*0F&Fyf{; z87;Iz8A`vdKYEebEbxgbOdN!;-)l#A+b?9@ARFmO+@9cJ11386*D_nCk)u5Zz_dL! z7TWK4Kvg_B{XE|)j3wDw0VaCMvWLIS0P>PX1~`9nWe+1wQf(KP@rP& zTnAm4n-~VA)#1=@r1Qy#>-$w~j<%HSo=rif4XVPhDhVt2{!@C?#{Hn97ecR`;N8N6 zbp`>&M7RRuV+WX@gGu!MB=Z9VJ^rKEW&slI`vPb*tj90g2v5tXa?8bJ_}CV?uxJsL z!2+e`M_~KT68E6<8MB+QfHPuyKiSud6~{_glo8l(3@5C*I3SJKv{5~0v`Fbn=wwsQ z+=Mag6k0ni>iQh+#xsr*;W1LeU{_!vE>0LLFm7Y^==z2_7uafCb5K6Jw)Nob4~DX~ z5X^~k(cg|^+^9S7Th02QNh)p=$r1xowW8Xc(Wekos zkQ&LCH)1PTz h>p%RTy#B0^Db0I}j+Ji2iFWznJmwreQWAdY`d{8zM)?2$ From a67ede67d51b58a6ac8e02f45b24b86b8339a4b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Pra=C5=BAmo?= Date: Wed, 4 Feb 2026 15:05:31 +0100 Subject: [PATCH 14/41] Add community and support links --- README.md | 3 +++ docs/btn_discord.png | Bin 0 -> 720 bytes docs/btn_ko-fi.png | Bin 0 -> 659 bytes 3 files changed, 3 insertions(+) create mode 100644 docs/btn_discord.png create mode 100644 docs/btn_ko-fi.png diff --git a/README.md b/README.md index 8dda3c9af..8097033dc 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,9 @@ ![Besprited](docs/branding.png) ## Introduction +[![Discord](docs/btn_discord.png)](https://discord.gg/bKYnjMsp62) +[![Ko-Fi](docs/btn_ko-fi.png)](https://ko-fi.com/veritaware) + Besprited is a free and open source program for creating and animating 2D sprites. It features: * Real-time animation previews. * Onion skinning. diff --git a/docs/btn_discord.png b/docs/btn_discord.png new file mode 100644 index 0000000000000000000000000000000000000000..bed0f2337552d4529038cdb46240d8a2fd1dad23 GIT binary patch literal 720 zcmV;>0x$iEP)Px%ib+I4R9J=WSv`)MP!RqwsgO7VohwV0P?WSjKnhnbEVuvp!T|sW zjJzOpKiaQPfg-Dc3yBUVj|3y^;9O1Qg%SNIvbwF-$wxc$+3}_Ch9GpYU3vh3-E-Mq zk0T!dkfhZ^XRot=m`EA|POeS=m;?JmHxQcs{{qcN;>?(V_fF)YeRMu+9HPuU z=FK(2X64_kCE=R<*XddXQZ8*sGU)z44WN-gDqHS^beylZOAotDcY>S?LKlmvhxzP! zzl|JR2;Z!H><^_;KA$zVG`X}v;H`;6+DOt$-4j72P-Y)R8E7^y*Idt*g+*3lpOrVI z9Y=nfA!Lj9RlZS@^NiBuU_qm2Nn$y9$GrL00-%x1p-y3`#7l&e(U3U&VJ48%wCU~A zLmc^tBOgUpcgl-rk|yVCTWKEiMo#u*0EU$HpkvHp>LCc-_5t(RwH*I7q|^5dvU`xE z)lDEwKJ<||h(PLD9NVR*_8S|5(8XqDCM1r01fknTpZbp^k=qDDwSXTm;*xUR%8zXWR8y$&|GXp(FC6jUiE8#dVVO;9tCM~C`Ql2)A$ zCr|3xoZLN^>b?6z+1V%`7$!LdLz7DzHfZ{NQ`mTr*0N4}6X6efq&E`c%-92Ix={p7 zlP*asV@5p!df$bMtnNJ^KQhK&WBw8oh~KwH^n=d~=iB$6=V|z(6^!Tyk$1{o8Ug`; zNE|T?r|bowKb45Y5%=Nkb?rE`7)iVjZ?9_y0Dc3v#h0I{?*W4V0000P)Px%O-V#SR9J=WnLkd$FcikWS24lbF`X;2!jvoY0Q3MbvTy;^8Ht6F3(y1f3YnNw zWlqP;-B1`3r;h7qKPRdXl7CXA^f`TYKEFS1OXz4G?;1qJyxsf|01$NXmh(Se)<2=F zflfpkh}R87JZM_YOhZIKS@+p`CH~NIj>GCze0#Fn@SCFf8r;X(r^2kgpJT$jG6A~@ z7HKASTopO6vMk8(RTViBYyiM+pDLnb?P`uG^R_k6lfs9W4=mCQO(SpAM08q^CZh6X zJ_rETZbK9)f{m|=+&XXa{_ORQvJOb$K$O@-B-&N(AvwFmXK2=pVK(}cPxtN1yzWpD z*fb3mY1Y;l=9t8#m+RqspA%3Ku19*GF+#>gpe~kq{rTO$C89yvOC!RSx@UBoVv5O$ z!1-48%QTUZgw#w0R}XD0(k!@s>dk_)hcuCKDXc{qXFscfg0yf&URC5?QG7OT+`JAc z4dZK|DWdV7h=$?`cJ$H({}PA6pS2uQbWQolj4`~)0 zvKm;{z=|2;(iu2EOEG@Tj;m^$FCujjOu>@f#+r&}&4PO_A>t;YN1>}Zgw#A8iC|V# zbeEQcFC&ikkQ{)#2A1_eMDFFQd1e~B#P&56-zG`s3R#bhuwzVFBZ0e)c^ih|L)~xs zewtM2v*7E{> Date: Wed, 4 Feb 2026 17:24:36 +0100 Subject: [PATCH 15/41] Add new icons, fix one bad pixel in splash --- data/icons/ase.ico | Bin 5414 -> 32038 bytes data/icons/ase16.png | Bin 229 -> 246 bytes data/icons/ase32.png | Bin 292 -> 343 bytes data/icons/ase48.png | Bin 354 -> 657 bytes data/icons/ase64.png | Bin 420 -> 476 bytes data/icons/doc.ico | Bin 5414 -> 13094 bytes data/icons/doc16.png | Bin 215 -> 226 bytes data/icons/doc32.png | Bin 344 -> 322 bytes data/icons/doc48.png | Bin 403 -> 441 bytes data/icons/doc64.png | Bin 471 -> 470 bytes data/splash.ase | Bin 1585 -> 1399 bytes data/splash.png | Bin 1086 -> 964 bytes 12 files changed, 0 insertions(+), 0 deletions(-) diff --git a/data/icons/ase.ico b/data/icons/ase.ico index 1e299d7243a0f167c83f9781ab5f0ff492c2e019..67fe4cc96107e9c36d2191d4bddd888cd04164c4 100644 GIT binary patch literal 32038 zcmeHPJ%}Vl6s}_rHrz{$-9)(X0ud2m76Vf=V?$HHV6$sE!O+A&qf5oWOe5h21OpK+ z(b!821rv?LvEEL9L)CXx{i^zJy1J{O?(6reUcK*oRXx+&*Sp5tGxyDd2gc&H`S89m z?;2ySuaEZE*8i>bJ$lsIuNm|HE5_X19PNki81vs-#yqq!cBq}<=(i9(UjOE!L!TxS zO5EGOec!7Mi4Eoa`=8$rDJ>K$zE5v&o0O)-qn4P9Z7m-Ch>zLu12G;oh}js=i18Y7 z9Bk;+5aZ8{QYV)K>XwSK{}C@SV&@(b-#1or4T+Wb=AQhUaoF*%TBSSN9@{3LGuO7= z*e0J>DTlT{#_A7o8Efv;d0Y;N!Je5Kkq;cio;oMbFFBE)`{uH1{$mAV^-le~)5gW- z*Xpl*-=y}Bl^@qlEN`rTjQp4z$QL%xIpPYB~BaShr{>Tx^4KC6b>gT+$bMqrlE+QYJmLJ#hP~^O@m!2Oy zr$SBtRCzJ)mh;PXdM^ELZsCCSV8rLi*a+P~&MP)^#Mmj2^Us-E^tk!w&h6$uM{eXl zS8mCF&fG7Ix!fCb(b&fX6E&Ip@{_~i@Wi&yZ2R1{r?x$_O`cQON2cZj+cKV0+}-aE z{a&6pzOj;CI&97oxZ}BV;|gHzZ+!RU@aF!DMK$3>>w3}vzsuYG>|4S)>gnph8VG-I zUjo-I4x$4Zz`qpk&;>FBtmq)6G)EMR(vWM~)&hB@goQtn( z4N_x5eAzdYzsntSi?54+Y7FMzOMbB8pHF3?4kST`7b~0T|ROyzApZ$F(JO}8_HjJ3Lo58YuuqLC5E|%>@oO* z)7Ti|%f2n~$NlA8$h8jHIrX25H}Zt|vM-0f+&9kIm}|(+;U9`Wx3BUK-#^T;F7jPj za{Yh$^VeeeOYPnN8=Pak$I1cjmVcAFee=kvsU8%3b)E%w727^IgtMJmfp6MBc*rh5U1A%wF)q z{(h98{hg&CXm zw$%5u?9kJJpSRb7Ct-;vYtaoIiLwpGuNAdAtW`I3#q^^e$oIab+t3B%I=~MsT`%*8 zE?`VQ$F0q-`j3C3g4cg->#XUi`uz%M^;%oMum0s{J!{j;da8cE0$iW9+rIkz{l9?c z<=(UV-1VyZ{R-sPZ|wI%hR&DE-&dc%|A+D&JAP^Uai0y$)r&Zw7GL$}y>l?t{>OU7 zP+P}X9Q?8PrK~@A#xTYo{#YFR7{|CY{me(>4?P%{8_(l4d+Pnq`JoFsV~BCN@jPC$ zr_!(Gjp>HJZ@d=A{Z+qT0j`f`W4##r#$lem@md`B`|8KL|KmJtLuU+mJllQac%G`? zuK?Fav-_??EDrvu^76dC`tkNZo(ph3_@Og~7?&H*<2AeL_bZ^)i~D2i2S3&k2!ARf z4yeU3Kh5^lkGKE96TE@&ry}BjTAZer`={2g@g2LL^=Wq1?^i&p7x&}ml%*i^(`;XT z{`J2U-Qc0=<^HPQuK?Favr+e@pvIT`ef9bKpXV#huKN87l(v3D`TFYX{vTS;(&Fp- z`xPi{{rd97&r`no?Ogv`)gRN1eb9G5l@d3$e#}=2Vx41{yN;#k2G5vo_*3<#&WCwR z!K%Oe{gJh%Ud~{~iml1O9ci wuYmibeNpkQ5L4CRs;w_@*V?=N#oZrtIGpgRwSl|V1|H4BzQrF2pSL#fe=8Udc>n+a literal 5414 zcmeHL!H&}~5PeNoAaNn#3qnqNjFb)pB3;~WPNY=(+l9k4Y1h+{0jIX z5W7l^h3o)I}Bkyy8ZAHxL*TXiOZ>l{W*?t5|6Nva+NrFyh<(} z1Tvi?Krt+$tW}WV1Zsy8TLf9t0GbRFa!Tc*pTOo3`=)MK6P$r9AZ9>@?-^7)STtBq?4R5(r6=GW%Omibnkk2-q=-ucsNIyqg=(UGD*QO4Gl&rDfi!6RVe^+m3JI2-Rx&7t!K6lFF`ci3ZKM#GHVdC0+ zcjFGEI<{@~m(bILl4#kf)W+G_=X|}r?~c^+16Y1ukK-Y3Q~Q6t3a-QKH@X`7k2PTY UpT$MuAy08q5%-<^(7pxvFZ4g4*Z=?k diff --git a/data/icons/ase16.png b/data/icons/ase16.png index 21a6e0d659794dbbc09f7459f9381b39c4ffc671..a45036effedb985339f48b18c255f7f35eade9c2 100644 GIT binary patch delta 218 zcmV<0044wB0rmlqB!2;OQb$4nuFf3k00026Nkl^&iO8pv77sn8b-sF^qrdyt$rTpIQ2s`hgxSn^{XE5OhkYKW3I-+fhB;2#Aw3j;QuMVog~ukaT#D0mos6XYol# zB!D2IU}lf;fsVq1=hohJ={(ptJN)GTLz||$uqPxs-SnzZSX8laMU80Sxnm!icD9E- yzN)>v^IFN*Q<-eV{A=CVfWU2rg6qzSLJSOx??}A5TNI|o00f?{elF{r5}E+@?_4+l diff --git a/data/icons/ase32.png b/data/icons/ase32.png index ad59b0e8e6cc5ac6d99f53d0e33721753e344de3..2f0bb11e210051bb9178b56bfe6ffe00d6baa213 100644 GIT binary patch delta 316 zcmV-C0mJ^J0@nhNB!2;OQb$4nuFf3k0003INklJr05}9K|1viAGQ1%<2^k ztCLsg+zUWFf%otPBwoR|nT|aL#0{sKiv6%aTX_@klD=R5z@q>FMB8*oBmw|j6v-fn zJV*sW)RPntq<J3(Ey<|9{{xzbp7D+O|rg*wvZvdPCrjT?F3yvxO|hmCg56lNO4&Kd`rb7F6v{;7=JOf`1vQxJyYC~JN%|LJh6BKRf6gwusJ~?A<1PCDhzTLX0pJB;Zi>BkSYuEC O0000_WdjbhKPZ4mJR4*^DWff3g?90dSH(^nAp@}kE8 P0000Px%OG!jQRA_;cK^TW077`64#4}PL z6`ELRV&xSkCQCtb1&sw-dA0R@0fA58hj1&k)m&i#og~J@OO(U}w$kF*u-hzNLD0e- zvLXz_E*v|#dn)$N%l;mQSzZPJu*d#yG{pe$e|^zbA_Fi!JAZ*-B+A)bYS*FG!2obP zi}BfsmLp+^2f9ia;SC)njQJh9N&F{(W)cep&`2U9JLq^8H?BQ{WPRAR%Gq2~Y@`6* ze|;nkCnSKA_Z2_`)e%Sk zh$WCOcFl03=Xe(RV%OYsjf_|Vi@MZRookdD8QM?cOMih~b1ATEVhJqjP*-)WQEFtw z66l{!{<-*II9b`XMyZhztCdK*rB0t8W;j6FEp;|sBO}%bWbFNR_~L1|)XCWU(!M52 zjr94V7KQ_@8z4%}GPJ)7DUZPO7e`88Fg8WcK2|zUSs+*qOB~7qNn0NkXg>!GcChBN z2}EWCz;gAcT1gCs6I_1^LSW=iwUH3vM}fd>5{n%J{z|B>jGY(a#SMoiB+vpHqu}86 zoG}wg3iH8(%*_55arF8@Q~c_o0j-x$KQ#f;V$a7nKidzV+)M$H*J#d(S$KdyR8?31 TGXw;{00000NkvXXu0mjfgghkI delta 328 zcmV-O0k{5<1>ypbBYy!YNkl&6oB0s{KL#pZE8I&7(6I9aKhixa#9@B&H^8jP2pynpr;8x9($Bs!_S;T;eG zz7YYwY3XjDrvXLx)T-+{@D9KWs1zY;H)pZSH57OU;04GmE9387{6%`9Pkdn z3#fDoRk6|+@Iem13n)d1-b1BvrtZi(-JZ*y6t8EdYT8>86>H!ffEN&OFXX1)5%2;8 a!H_TESy>eD9b9Mt0000Px$mPtfGRCt{2n>|hgF%U)v6e$Q!kvbjX z3J6Lnu8=wx$O$QcXOWO@FM&)8pL9n9%sH z(16$znw8V1u7AnwwUG`h85-{j4TwFVtyg#)zfBtNO7#Y?0O$nJumI=;&_v$_OrJoX z&&~KSal9)uAl1a79ivqbOcK-ZTv;0z*6+beli}qRlF>UMoit7`2^s4=@ z{`mPV?bq#JmltLIV=!tEbGW?GzQXkXPeXkj&Hjg1orS7x6>He)PcTF=_^xG->3O$* zb>Z#odxyWZeEp=l^Z5r!1?CJ!6Ocw_5aaG0-Z#b9CRO)o?5+R7Gl6jn!>nVr2d*s% zZ_bU*=bX<7Qnz6*EbBWeQ4Wl8Q&5rljQw!fWsb3x zYyCPlVM5Sml-<>SpCqqkS@z`s6!dU+2dHo1{WE|!0I=Cu|MM-tSFGD^o&Ox*EtdV> z`u8sYe!T>^M-DatNHguA%F3%RAK>-FH~94U1CGaI7S{qT11$sBmH{P%j!kugDC6rv ztltkZ*YCQ%r^5Wu*ShbiaGX1oz8SR{pN%S{jN;A(43H=r#p7ckGJMxF$_;W>Sk`u( z-C#R=EVN#iq^+~1?6g?Rz;$PU7oJe_QHS;H`}nXj3qzSzk1$FNE446W+%ARV@Bc1N zcN-F?!{eva+OXA^7S~;ew?@3%IUSDA+&K-v!1^doF(Gr~owA=CzvJmE=BMbk@9d3P z=lO)jaEUL&IRC@;N8va=4oC4IjPXeL(lk1X4kHJ60$BZ}vc`UPSPoc@PoS{qBRvmp zvAo05_9>WzCM^Rk1DOoOD_LA4sc|%}S%?=qo`i|r1?_jb^oj9BINi&F_Qeh>Va9lQ zYl`iLk8>hxT7FzMcy~&!uygsbmx|>|yW!)UoFhNDNq5_Hvtb|XT>f$MPA|T!2s?{s zY@jaz&kqQsr;Mi?6N2?NI6!p$0|qr8uFpw4S0;A$9P%35caA;{Z{X9%6T|6A!;gb4 zH=YE%gipZ>_#`}!Ps6kL44m+JkrTn$dGL51FtvbZh|@nw?*N*fk%xoJ8~zEA@~52E zPTx4aa(eCb&glbcdQRPA`G}=Gr(zPCv<$QiWHV4$*^{BLp(LnKd5L_xajk#TVWq}j zXIey#pLqUFR-KE_8>E`f^p#SYe&d&~pDys%z5pY_i9togrBoJN{C&#aMVeAK@I@l9af literal 5414 zcmeHLL2leI4CH!)7U*T|7gX>m#|8X=>?wynpywWYDo~*4wf#;%5%f7d_5lUl8B$!y zT060ubruamfF5xuQ4}T1n}}@WO6s~+yxxf1ibx1%|Efejf!puR{`gAd{gue!5bZZ2 zchGB$sW}eHcvJG_-L3ri`dRwEpXzci-?>i;o@uf|7t2t@CG?js^a~Jau z)=OVZr=w%k*4eQ??swa&VVjljACtj3HTf;FTUl=qpW2&lf!m()?2<0w6w zx8C*~t}A(-kjHXtML0a^{3yAI#~v|%uWCHE6`5r`d#6z;&Len!O;xy}EY33CHwBRf zapv%T28o^ws#0F(TU8UoPT|P z+S&2>*Y$gJ$8!D7J3cSJ{y7%+y=g?K>3-p9Fy(U%zegv!(8T)&3|sc@3^B^&d}L}=kwd|yL+BCssC5&1us&MU99^Q OV*fO+3B)kGZx^prw85kJmc)B=-So9{RG&CIwRr@c=(R}RR24micRIc!u ze~z<)Nc+Dz&;ElXxx;5JkT~GdvX%z~)Fx%}1e&b`F~6Q@6Ub%QrD$L%mSifv*6gU3 z-xS8$h06=2+OBe^&pV%F@wrCK&(2YNPu+eA`$H3a4xe&oQ(;xQsQ2NDRnK()P;s6; uj2ejz+N(Ou802D~NNxE2ihmL>1H=FMKGoBge|QCSD1)b~pUXO@geCxIFHQ~s delta 187 zcmV;s07U=d0oMVLB!8YsL_t(Ijbmhh0ynRc{|p3xxrbI`b6!#dR!KLnlK;2>OwP@# zUyOqifLC zF-4&<0KP!P7N|H~Kq|m$05<>P3InWxh))AiEHj#xN94P1^^6id9s}bRLuYY002ovPDHLkV1fbfOC$gQ diff --git a/data/icons/doc32.png b/data/icons/doc32.png index 3f01b8ef489e217e23efb5fb75a73efc1a2e1ead..c3c69266e6cc21c3821680cc554610f7783f2e4f 100644 GIT binary patch delta 296 zcmV+@0oVT60>T22BYyw^b5ch_0Itp)=>Px#{7FPXR9J;$WIzLjt4#i*i;)Q$`@_yO z5K_cMCCjjZ`odKv1RcPFOQJ9IG)cB?zh=v@`|1ydD4SGEk^q+U6WXMD*DuLh#3l`j zP=dtq0ek=+!8c&p4;T#+65Jwyg&CN%lk%7nj_U2)cJ4iy=_A8|?~gA4#HRSi4RE|# zA7Hy&h5-3;8Gu2%CFNyrFWwAPx$b4f%&RA_L==oxLbQZjNQmzNu7tP%m=azHfFa?H07@iu?|3DE+Y(pt zP5_Do1=1hcJ@}fpoqVVA73j7aMq?S33oN%sbXyJ5NTH^CpkAk4-Gxk1%WT}wujcCI zCN?2>0rn}B?|&v2zsrt5)A%x20{L!&{b71JcOxm&cnYi%Dkh_wvyG<^{2qt`(nJAi zqJT6kf!F61Y0fsD0{bdqngBQ9BLBODd>{%)69uG+0@6eQX@VCZ-Gz#+5T78gz+d;E z>d}e7{xHSU<9p>J1yXaD+Ujcwbg9Wne}wcU0ca;Uw;8!Kvibwc-Uz9F~{?{-|2Y%GJmdZw?q4EoEF<1?Xz)$ zcK}|1RD`ldCQczC0dFn51MmV05g`^)oZ2lj;LXE3052d_ghV$c)wMF*Z#Qlq-T`<4 z$`Sf-p5gXIbbEbTU(TnmeG%{uzza~0kSHE9u@TPPcmatBRckd`+iq+1Hk~6OA>2N^1MmW# XWSUk=j?9G!00000NkvXXu0mjf)O@N8 diff --git a/data/icons/doc64.png b/data/icons/doc64.png index 0e133488bd75aa52d85e686a52f1aa4bc8602417..5c405126c27978c87485adc40d85fa2eee2b3d75 100644 GIT binary patch delta 445 zcmcc4e2sa6ayTS;yV7tb^5>Vc)jL6;rsd>V|(@auNUR} zt+(GZ?lN~^-N3xzWLZ7`4BfnG=j!L(Ff*|ilblfHxV`wjeEI3eUk$fR_I(~bk#VK? zm-2VlD-zgepW7a^hf%9RwxO3Rfjwa{(+$QOD;UZc%udc{xod9qZo1sRig!Q5QXJN` z&VCoMPWHRzJqFPOdHU%=iVaN$#ux5}(6*4<>pZ&-Cx4ZjzHu(K`{WdpzBI7mA kcmHetw?5(x0O{Gsn4*={BE-_Np8*IwUHx3vIVCg!03qMN5dZ)H delta 446 zcmcb{e4TlMay{cbPZ!6KiaBp*Z}dBCAmXa|Dxh@fTx%uKuqpl?OU`U)K60ud#85G) zH03e#4~B1if7!x*G@N;R!|QH>^G4;H5q+g1d&|wfTfTdH^>gT}EzQE+zh6fu$H3`Hj}LzFLs?(^-1pO` zk9rr+5iMSvmwxE;?cIUfjU8*)S1@j2nDu~X0q5D4+Su@QUyqbGNI7sXcp1xf41 z8nYEK*Sp^{m^O$xT&`sM@$PBzb?&D-Zd<;7WbFX5!X^EH{l5LyukG~o*7tn;emyTc z%zL@i4eFwE#s|vPBzDJL?|@i7`H!8#SGhh{h_n>QJ&V~cFl98oXO^397xdzQz9003kF0000000000000001d$bq5*3G*^>?e z9e;@qgdhw=%k=;Md8PCigiSV4wjN+3^XwEwDj=r=glMfDMjRs~;t-*V*a1}I_K1MP zgec;>M=ucYPlEPv)$6jeawF4UA9Z6aN1tH00bu>dEEfP)p9w*k2^b1}lKBNugcK1f z#a(i*`Vdk`F)tu^i>((TOVH3O*&hi+vORAU-4dd!q_+~x5psp?vO)dW)*#OazWPou z1SxI_)FdHs>U1GeW+kLg8$#~ZiNL!xALR~sJw6$`0}m9F>H;Hwm0w0?wC}}mesb9nE6uFZ%rlN)O8Z(4 zy0J6QID`p}@|-pKct;f$yylUbP-YaVXx&d-bP2X!hocF+_ipq(tjzB|l*q#g=_R06 zxb25cBGOZq7K!bDhJPMK(UIjp=#poa9qE$i%gkU^VrONsh(aSsSMucRdBP`aB&1=MCfqyJ4KCuY0&6Dh!H-x2L6$DW0~?UdFTB(^SM1&)v0q8P94@TLDu% zPjdS==;e6w?aIS{yIAv#{QjIiFyC1=rxBL_3pC>LTN;PIpD>c`iEGQBNbhOVIG}uf zM$xdoA^(g<*h!1VRy3$851`S>QD`i_MY%5b)9B@BH0Gx>x}FB#=XS#a!`gAwp`G)m%oa_7B5cg%dQ3Wij{kSZ8b1w-ojFy1s99re+ZU?ZKclke= zj!hmy2;s{thx6GX&2%iIoeh(Yb&||9kF~>5-&wf>3n@nkA%s6=yt67ws`FBHXJ3+2AbI}S4j_5|+gBjj_4*@_)Hrh=NLp5`0Fmw$AkxLq z8%TvYqyWi2_Z}d5HeoW5{J(A+ko>Ym8bsEC$Y&lPYgSrY1Iea>DL~RcBpXNq!NluL zjCUqSG0N88=4(;lartdw^X-3q+0rjY9J6y4`)Du+;U{)Z_95?*wWiomgF3i#^5)5;wgP) z<6Ga8EbMo_>6n@pmibK5-C$|0F8kdZGt*@bwYXKDn^m)CF&B5-XAfTu#MK)kG~WBIA8AYo1%PQWjyL-AKtojz$j7OD|Ztr*0KR!7>T(17!(OKzF zzCZuc`19N*%iaxt;ui=`zkkW%&)=4bIsP%x|6Hp4Cm&;c`q{Xv?JMukbdy7VQ6}3K zIfhm;^!oKVC4baCRl0M&o4)&EL;JZGznc88yZ_qNd7U`#&UM{|MiXoJiZ8wVSi)Y; zbX9F4+fO<6$A&5D1>uuDnS0&euPlEc?Xb#uh2Ebvno?&xcRpvgTM%r(w6BlNvC;Ny zQ}TJ4o`&^{1BLESwtg?VEBRS*sKFAhwvdApv?PMgw|``dYbn2YY4UOw+4?}CW(5J~ z>ef5|H~lRtS(}tFNh|jrf8Q~IGKq*i&zS9!XKxh@PW!QDZG_R`^xR_;BzG68J(*ef z!G!BQ=%AwfuVR=t^n5$=L+^TnP h-lQun*E#(7$JEje4@)jhcg3d~Cr*82>%1=G4FIoeC?@~_ diff --git a/data/splash.png b/data/splash.png index bc72853510bb5a76912f83f19cbced83cc047501..cc0f006f307776f544d822c9f1bbb1b10ac2bcae 100644 GIT binary patch delta 892 zcmV-?1B3j&2*d}FF;NUqOjJbx0042SG`7_|-}d#35AXN@000DZQchC<|NsB9EkK9> z00UM@L_t(|ob8*5a;q>50KxwMf9?c)i1jm=&nocK4Bk=m z=Fcq9`6?oP6HQExvg8rF4>eacnCookR0*t;`+Y6OtrzmFVz)mLc(u;i0%NP)HWe}J zYR?mol^tw#_G+E;1-dCQ(Saq;)3Ne@bvZg`_2tb3CI^N*&&O6{zFgpXp@ZVs)n!-H z@;71(0@s4FQCp1YpCL~^R=#ieo7R{25_qL8S*Up5@b{kr`}?oN%xbHQFZ@mG%Mkg% zcstv-WuyJcXDdeDCa-i*W)f#nC6A`gI|TYLRSMg((H7@1XHO8L9n1o2F`7Dm?+_S| z7jI_?JbQw$32eoDqrho$zENNpM(eu^tUMCV6}W~r!d5FVUWeAM!T%Rnd#0W&FkF+v zwk)_Z$CKCb#(%$FV871$1TOhpsu$e%*E0An0?$NE5IA1&X#Up-)Ymh5Y$u_8k}TJH zYm2>_JT`%4^O`y}H5df8P{b5}5A()6!vX_d(|%(mr%}U81?pClZWQQr3#zr1oK_95 z6sTN{yHlX^iVB8S#fRul-%cmVN`IQ){=hu#xt?fHQ>UiCV*)!FPbbM*e+q#k6WyX7 zudh?n-%*2YPGfXwj>D%P^PG37?e8Dlty9(CSq4vI2J2Gz(+MnE)7Png>+hRlA11JY zzl-4SBKW%q{w{KhKjSJ9MC7dd6Q&~XhcJjh3*yNSfhLl`n!jx!^|0&;&xl0^1eyo} z+XEPZebUE@2()n!7(YOI{P2GNm-p>^T$(?o?_{{`wR8C^8o$KW<>*h!I|_^vj{?IN zS{^Ub{$Deg1tv#}I1$5t5Do+Rv5BT!aurU$tn;fWE@}Hh?UK&BXmL#7B1C>S+ZnbT zKM~GXz#P*QxD8h^WaU`?eto;VmcSHa6!_Yn{1b)1C4DBj3#$qg7s%y!ABi`SDTU4VhxYPKYHA87Edn!Pg|e^!B?X7G-hH-Bb<&Q}rXn`mNklqHYYeW#BeeBp0eUxvsB#@pGxEgS7mK3g&JHhHCkGLtxqDtR<@-XYM3sZ!XM zjkY+CIeUT_?O+yIi_z41e}}+$ym&iH;Mo&|O<*hL8wF02^Nj+-Fk0VTVC9i;uD~_4 z5w==^@jA424gSBt+B5ZJf#I4Qwq?PUIi9?ZH~#ze0{eB|CveH=1$lVrKpTU+eaxDn3Ma`gS@=R{GQY_6O!^&-Fxu znmRT89TV8ecsfbe`cnuTndlbvczvCk{*D@Ka~h*da~wYXnCHApZGZpZZk?+B&N6r! zGgz0xpH5)Wn!Zk5e}CT;`!InG{9Ocp7s1~}@OP10{25n?AR=eopD-19KZHR9S`bfu z2sDud*8FV?sfT4(ct$KTAkah**dD+L?2|rLM4*j>!1w{uez-_pSAuGr7_v_o`wFIUZqrlhp Date: Wed, 4 Feb 2026 17:29:21 +0100 Subject: [PATCH 16/41] Rebrand project from LibreSprite to Besprited (#19) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Updated: - documentation - build config - desktop files - installers - GitHub workflow files - CMakeLists.txt files in src, desktop, and emscripten - data files and source config Co-authored-by: Daniel Praźmo --- .github/workflows/cmakeAndroid.yml | 2 +- .github/workflows/cmakeLinux.yml | 8 +-- .github/workflows/cmakeMacOs.yml | 55 +++++++++---------- .github/workflows/cmakeWin64.yml | 4 +- .github/workflows/codeql-analysis.yml | 2 +- CMakeLists.txt | 5 +- INSTALL.md | 32 +++++------ SCRIPTING.md | 4 +- Theming.md | 12 ++-- data/gui.xml | 5 +- data/scripts/examples/http.js | 2 +- data/skins/default/README.md | 12 ++-- data/widgets/send_crash.xml | 2 +- desktop/CMakeLists.txt | 8 +-- desktop/Info.plist | 10 ++-- desktop/gnome/libresprite.thumbnailer | 4 +- ...ithub.libresprite.libresprite.metainfo.xml | 22 ++++---- desktop/kde/CMakeLists.txt | 10 ++-- desktop/kde/librespritethumbnail.desktop | 4 +- desktop/libresprite-thumbnailer | 10 ++-- desktop/libresprite.desktop | 10 ++-- emscripten/CMakeLists.txt | 6 +- emscripten/index.html | 4 +- installer/WindowsInstaller.iss | 12 ++-- package_linux.sh | 20 +++---- src/CMakeLists.txt | 16 ++++-- src/app/resource_finder.cpp | 28 +++++----- src/config.h | 8 +-- 28 files changed, 162 insertions(+), 155 deletions(-) diff --git a/.github/workflows/cmakeAndroid.yml b/.github/workflows/cmakeAndroid.yml index 51208a443..97efa653c 100644 --- a/.github/workflows/cmakeAndroid.yml +++ b/.github/workflows/cmakeAndroid.yml @@ -46,6 +46,6 @@ jobs: - name: Archive production artifacts uses: actions/upload-artifact@v4 with: - name: libresprite-development-android + name: besprited-development-android path: | android/app/build/outputs/apk/all_in_one/debug/app-all_in_one-debug.apk diff --git a/.github/workflows/cmakeLinux.yml b/.github/workflows/cmakeLinux.yml index f7b7aa8d7..e16639568 100644 --- a/.github/workflows/cmakeLinux.yml +++ b/.github/workflows/cmakeLinux.yml @@ -33,17 +33,17 @@ jobs: - name: mkdir run: mkdir build - name: cmake - run: cd build && cmake -G Ninja -DCMAKE_BUILD_TYPE=Release .. && ninja libresprite + run: cd build && cmake -G Ninja -DCMAKE_BUILD_TYPE=Release .. && ninja besprited - name: appimage run: | cd build/bin export ARCH="$(uname -m)" sh ../../package_linux.sh - mv ./LibreSprite-anylinux-$ARCH.AppImage ../../ + mv ./Besprited-anylinux-$ARCH.AppImage ../../ - name: Archive production artifacts if: runner.arch == 'X64' uses: actions/upload-artifact@v4 with: - name: libresprite-development-linux-x86_64 - path: LibreSprite-anylinux-x86_64.AppImage + name: besprited-development-linux-x86_64 + path: Besprited-anylinux-x86_64.AppImage if-no-files-found: error diff --git a/.github/workflows/cmakeMacOs.yml b/.github/workflows/cmakeMacOs.yml index 91a5b487f..1451bc9a5 100644 --- a/.github/workflows/cmakeMacOs.yml +++ b/.github/workflows/cmakeMacOs.yml @@ -44,7 +44,6 @@ jobs: - name: Download & Lint Info.plist run: | - curl -L https://raw.githubusercontent.com/LibreSprite/LibreSprite/master/desktop/Info.plist --output desktop/Info.plist plutil desktop/Info.plist - name: Generate Makefiles @@ -61,46 +60,46 @@ jobs: - name: Generate .icns run: | - mkdir libresprite.iconset - sips -z 16 16 data/icons/ase64.png --out libresprite.iconset/icon_16x16.png - sips -z 32 32 data/icons/ase64.png --out libresprite.iconset/icon_16x16@2x.png - sips -z 32 32 data/icons/ase64.png --out libresprite.iconset/icon_32x32.png - sips -z 64 64 data/icons/ase64.png --out libresprite.iconset/icon_32x32@2x.png - sips -z 128 128 data/icons/ase64.png --out libresprite.iconset/icon_128x128.png - sips -z 256 256 data/icons/ase64.png --out libresprite.iconset/icon_128x128@2x.png - sips -z 256 256 data/icons/ase64.png --out libresprite.iconset/icon_256x256.png - sips -z 512 512 data/icons/ase64.png --out libresprite.iconset/icon_256x256@2x.png - sips -z 512 512 data/icons/ase64.png --out libresprite.iconset/icon_512x512.png - sips -z 1024 1024 data/icons/ase64.png --out libresprite.iconset/icon_512x512@2x.png - iconutil -c icns -o libresprite.icns libresprite.iconset - rm -R libresprite.iconset + mkdir besprited.iconset + sips -z 16 16 data/icons/ase64.png --out besprited.iconset/icon_16x16.png + sips -z 32 32 data/icons/ase64.png --out besprited.iconset/icon_16x16@2x.png + sips -z 32 32 data/icons/ase64.png --out besprited.iconset/icon_32x32.png + sips -z 64 64 data/icons/ase64.png --out besprited.iconset/icon_32x32@2x.png + sips -z 128 128 data/icons/ase64.png --out besprited.iconset/icon_128x128.png + sips -z 256 256 data/icons/ase64.png --out besprited.iconset/icon_128x128@2x.png + sips -z 256 256 data/icons/ase64.png --out besprited.iconset/icon_256x256.png + sips -z 512 512 data/icons/ase64.png --out besprited.iconset/icon_256x256@2x.png + sips -z 512 512 data/icons/ase64.png --out besprited.iconset/icon_512x512.png + sips -z 1024 1024 data/icons/ase64.png --out besprited.iconset/icon_512x512@2x.png + iconutil -c icns -o besprited.icns besprited.iconset + rm -R besprited.iconset - name: Build Apple Bundle run: | mkdir bundle/ - mkdir bundle/libresprite.app - mkdir bundle/libresprite.app/Contents - mkdir bundle/libresprite.app/Contents/libs - mkdir bundle/libresprite.app/Contents/MacOS - mkdir bundle/libresprite.app/Contents/Resources - cp ./build/bin/libresprite ./bundle/libresprite.app/Contents/MacOS/ - cp -r ./build/bin/data/ ./bundle/libresprite.app/Contents/MacOS/data/ - cp ./libresprite.icns ./bundle/libresprite.app/Contents/Resources/ - cp ./desktop/Info.plist ./bundle/libresprite.app/Contents/ - chmod +x ./bundle/libresprite.app/Contents/MacOS/libresprite + mkdir bundle/besprited.app + mkdir bundle/besprited.app/Contents + mkdir bundle/besprited.app/Contents/libs + mkdir bundle/besprited.app/Contents/MacOS + mkdir bundle/besprited.app/Contents/Resources + cp ./build/bin/besprited ./bundle/besprited.app/Contents/MacOS/ + cp -r ./build/bin/data/ ./bundle/besprited.app/Contents/MacOS/data/ + cp ./besprited.icns ./bundle/besprited.app/Contents/Resources/ + cp ./desktop/Info.plist ./bundle/besprited.app/Contents/ + chmod +x ./bundle/besprited.app/Contents/MacOS/besprited - name: Put Dylibs run: | - dylibbundler -od -b -ns -x ./bundle/libresprite.app/Contents/MacOS/libresprite -d ./bundle/libresprite.app/Contents/libs/ + dylibbundler -od -b -ns -x ./bundle/besprited.app/Contents/MacOS/besprited -d ./bundle/besprited.app/Contents/libs/ - name: Create DMG run: | - codesign --force --deep -s - ./bundle/libresprite.app - hdiutil create -volname "LibreSprite" -srcfolder bundle -ov -format UDZO "libresprite.dmg" + codesign --force --deep -s - ./bundle/besprited.app + hdiutil create -volname "Besprited" -srcfolder bundle -ov -format UDZO "besprited.dmg" - name: Upload Artifacts uses: actions/upload-artifact@v4 with: name: macos-arm64 - path: libresprite.dmg + path: besprited.dmg if-no-files-found: error diff --git a/.github/workflows/cmakeWin64.yml b/.github/workflows/cmakeWin64.yml index 44c4c087e..a57951c33 100644 --- a/.github/workflows/cmakeWin64.yml +++ b/.github/workflows/cmakeWin64.yml @@ -49,10 +49,10 @@ jobs: make -j 4 cd .. rm build/bin/gen.exe - node package_win.js build/bin/libresprite.exe + node package_win.js build/bin/besprited.exe - name: Archive production artifacts uses: actions/upload-artifact@v4 with: - name: libresprite-development-windows-x86_64 + name: besprited-development-windows-x86_64 path: | build/bin/* diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index e9e794298..4d0f32f82 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -61,7 +61,7 @@ jobs: - name: mkdir run: mkdir build - name: cmake - run: cd build && cmake -G Ninja .. && ninja libresprite + run: cd build && cmake -G Ninja .. && ninja besprited - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v1 diff --git a/CMakeLists.txt b/CMakeLists.txt index 192a69ee7..3d5a5610b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,6 @@ # Aseprite | Copyright (C) 2001-2016 David Capello # LibreSprite | Copyright (C) 2022 LibreSprite contributors +# Besprited | Copyright (C) 2026 Veritaware cmake_minimum_required(VERSION 4.1) @@ -16,8 +17,8 @@ endif() # Note: This needs to be done before the project command set(CMAKE_CONFIGURATION_TYPES "${CMAKE_BUILD_TYPE}" CACHE INTERNAL "internal") -# LibreSprite project -project(libresprite C CXX) +# Besprited project +project(besprited C CXX) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) set(CMAKE_CXX_STANDARD 20) diff --git a/INSTALL.md b/INSTALL.md index 1f345ea20..bf21cc9c0 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -17,16 +17,16 @@ ## Platforms -You can download installers from the [website](https://libresprite.github.io/). -If you want to compile LibreSprite from source, continue reading. +You can download installers from the [releases page](https://github.com/Veritaware/Besprited/releases). +If you want to compile Besprited from source, continue reading. -You should be able to compile LibreSprite on the following platforms: +You should be able to compile Besprited on the following platforms: * Windows 10 + VS2015 Community Edition + Windows 10 SDK * Mac OS X 11.0 Big Sur + Xcode 7.3 + OS X 11.0 SDK * Linux + GCC 8.5 or higher with C++14 support -To compile LibreSprite you will need: +To compile Besprited you will need: * [CMake](http://www.cmake.org/) (3.4 or greater) * [Ninja](https://ninja-build.org) @@ -36,20 +36,20 @@ To compile LibreSprite you will need: Clone the repository and its submodules using the following command: - git clone --recursive https://github.com/LibreSprite/LibreSprite + git clone --recursive https://github.com/Veritaware/Besprited (You can use [Git for Windows](https://git-for-windows.github.io/) to clone the repository on Windows.) To update an existing clone, use the following commands: - cd LibreSprite + cd Besprited git pull git submodule update --init --recursive ## Dependencies -You'll need the following dependencies to compile LibreSprite: +You'll need the following dependencies to compile Besprited: ### Linux dependencies @@ -78,22 +78,22 @@ In a terminal, install the dependencies using brew: First, create the `build` directory with the following commands: - cd LibreSprite + cd Besprited mkdir build cd build Then following the platform-specific instructions for compiling below. The `build` directory will contain the results of the compilation process. -If you want to build a fresh copy of LibreSprite, remove the `build` directory +If you want to build a fresh copy of Besprited, remove the `build` directory and recompile. ### Linux details -To compile LibreSprite, run the following commands: +To compile Besprited, run the following commands: cmake -G Ninja .. - ninja libresprite + ninja besprited ### Windows details @@ -103,26 +103,26 @@ Run the following in mingw32.exe: ### MacOS details -To compile LibreSprite, run the following commands: +To compile Besprited, run the following commands: ``` cmake \ -DCMAKE_OSX_SYSROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk \ -G Ninja \ .. - ninja libresprite + ninja besprited ``` ### Android details Before you can make an Android build, you must make a native build for your OS, so follow the appropriate instructions above. Once that is done, download -https://github.com/LibreSprite/ls-android-deps as android/ in the LibreSprite +https://github.com/LibreSprite/ls-android-deps as android/ in the Besprited directory. Now you can open the android subdirectory in Android Studio and build -LibreSprite for Android. +Besprited for Android. ## Installing -Once you've finished compiling, you can install LibreSprite by running the +Once you've finished compiling, you can install Besprited by running the following command from the `build` directory: ninja install diff --git a/SCRIPTING.md b/SCRIPTING.md index 1e923ecde..62cfa37a2 100644 --- a/SCRIPTING.md +++ b/SCRIPTING.md @@ -901,7 +901,7 @@ # global app [class App] ## Properties: - `platform`: read-only. Returns one of: emscripten, windows, macos, android, linux. - - `version`: read-only. Returns LibreSprite's current version as a string. + - `version`: read-only. Returns Besprited's current version as a string. - `activeDocument`: read-only. Returns the currently active Document. - `command`: read-only. Returns an object with functions for running commands. - `activeSprite`: read-only. Returns the currently active Sprite. @@ -1833,7 +1833,7 @@ # global app [class App] ## Properties: - `platform`: read-only. Returns one of: emscripten, windows, macos, android, linux. - - `version`: read-only. Returns LibreSprite's current version as a string. + - `version`: read-only. Returns Besprited's current version as a string. - `activeDocument`: read-only. Returns the currently active Document. - `command`: read-only. Returns an object with functions for running commands. - `activeSprite`: read-only. Returns the currently active Sprite. diff --git a/Theming.md b/Theming.md index 22e781ba2..8ba0f79f3 100644 --- a/Theming.md +++ b/Theming.md @@ -1,6 +1,6 @@ # Theming -If you don't like the default look of LibreSprite, DON'T PANIC, there's plenty of community made themes that make the app looks awesome. +If you don't like the default look of Besprited, DON'T PANIC, there's plenty of community made themes that make the app looks awesome. @@ -25,15 +25,15 @@ Well, most of the available themes can be found [here](https://libresprite.githu ## How to Install? -Simple, download the .zip archive, extract and copy to the /data/skins part of the directory where libresprite.exe is. +Simple, download the .zip archive, extract and copy to the /data/skins part of the directory where besprited.exe is. -Then open LibreSprite up, go to Edit, Preferences and go to the Theme tab. +Then open Besprited, go to Edit, Preferences and go to the Theme tab. Select the theme that you just put into the /data/skins folder, and click Select in the bottom left. ![](C:\Users\charl\AppData\Roaming\marktext\images\2022-02-07-19-53-19-image.png) -Restart LibreSprite to see the changes. +Restart Besprited to see the changes. @@ -47,6 +47,6 @@ Well, just go back to the Themes tab in Preferences, and select a different them -**NOTE: DO NOT DELETE THE FILES BEFORE YOU CHANGE THE THEME** If this does happen, simply copy the original, call it the same as the deleted theme and launch LibreSprite again. +**NOTE: DO NOT DELETE THE FILES BEFORE YOU CHANGE THE THEME** If this does happen, simply copy the original, call it the same as the deleted theme and launch Besprited again. -If this doesn't fix it, then, you'll need to reinstall the theme and try again the steps above, or reinstall LibreSprite. +If this doesn't fix it, then, you'll need to reinstall the theme and try again the steps above, or reinstall Besprited. diff --git a/data/gui.xml b/data/gui.xml index cdd5d1bcf..08b8aaeef 100644 --- a/data/gui.xml +++ b/data/gui.xml @@ -793,19 +793,22 @@ - + + + + diff --git a/data/scripts/examples/http.js b/data/scripts/examples/http.js index dbc1270f1..7624687c5 100644 --- a/data/scripts/examples/http.js +++ b/data/scripts/examples/http.js @@ -1,6 +1,6 @@ const methods = { init(){ - storage.fetch("https://raw.githubusercontent.com/LibreSprite/LibreSprite/master/README.md", "read_me"); + storage.fetch("https://raw.githubusercontent.com/Veritaware/Besprited/trunk/README.md", "read_me"); }, read_me_fetch(){ console.log("Read me: " + storage.get("read_me")); diff --git a/data/skins/default/README.md b/data/skins/default/README.md index 702f3e34e..9dffef481 100644 --- a/data/skins/default/README.md +++ b/data/skins/default/README.md @@ -8,23 +8,23 @@ by BlackRaven#7273(Discord) ### 1. Download the zip file or clone the repository ### 2. Put it in your skin folder -Open LibreSprite. +Open Besprited. Go to *Edit/Preferences/Theme*, you can see there are 2 paths at the top of the *Available Themes* list. *For example on windows:* -> -- C:\Users\\AppData\Roaming\Libresprite\data\skins\ -- +> -- C:\Users\\AppData\Roaming\Besprited\data\skins\ -- -> -- C:\Program Files\Libresprite\data\skins\ -- +> -- C:\Program Files\Besprited\data\skins\ -- *or linux:* -> -- /home//.config/libresprite/data/skins/ -- +> -- /home//.config/besprited/data/skins/ -- -> -- /tmp/.mount_LibreShxiPnk/usr/bin/data/skins/ -- (You should need be root user to modify this directory) +> -- /tmp/.mount_BespritShxiPnk/usr/bin/data/skins/ -- (You should need be root user to modify this directory) Choose 1 of them then click *Open Folder*. Copy the file you've just downloaded here and extract it. ### 3. Apply theme -Open the *Preferences/Theme* dialog again, choose a theme from the list, click *Select* then click *OK*. Restart Libresprite to make the change happen. +Open the *Preferences/Theme* dialog again, choose a theme from the list, click *Select* then click *OK*. Restart Besprited to make the change happen. diff --git a/data/widgets/send_crash.xml b/data/widgets/send_crash.xml index 9ec639879..eb080a23d 100644 --- a/data/widgets/send_crash.xml +++ b/data/widgets/send_crash.xml @@ -8,7 +8,7 @@