feat(icons): add Catppuccin Mocha icon override infrastructure
Some checks failed
Build and Test / build (push) Has been cancelled
Set up the foundation for custom Kindred Create icons: - Add kindred-icons/ directory with Catppuccin Mocha themed SVG icons - Modify BitmapFactory to prioritize kindred-icons/ in search path - Add CMake install rules to package icons with application - Include documentation (README.md) with design guidelines - Add 12 initial icons as proof of concept: - File: document-new, document-open, document-save - Edit: edit-undo, edit-redo, edit-copy, edit-cut, edit-paste, delete - View: zoom-in, zoom-out, view-refresh - System: preferences-system All icons follow the standard template: - 32x32 viewBox - Rounded rectangle background (rx=4, surface0 #313244) - Catppuccin Mocha color palette Closes #3
98
kindred-icons/README.md
Normal file
@@ -0,0 +1,98 @@
|
||||
# Kindred Create Icons
|
||||
|
||||
This directory contains custom Catppuccin Mocha themed SVG icons that override the default FreeCAD icons.
|
||||
|
||||
## How It Works
|
||||
|
||||
Icons placed in this directory are loaded **before** the default FreeCAD icons. To override an icon, simply create an SVG file with the same name as the original icon.
|
||||
|
||||
For example, to override `document-save.svg`, create `kindred-icons/document-save.svg`.
|
||||
|
||||
## Icon Design Standards
|
||||
|
||||
All Kindred Create icons follow these guidelines:
|
||||
|
||||
### Template
|
||||
|
||||
```svg
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
|
||||
<rect x="2" y="2" width="28" height="28" rx="4" fill="#313244"/>
|
||||
<!-- Icon content using Catppuccin Mocha colors -->
|
||||
</svg>
|
||||
```
|
||||
|
||||
### Specifications
|
||||
|
||||
| Property | Value |
|
||||
|----------|-------|
|
||||
| ViewBox | 32x32 |
|
||||
| Background | Rounded rect, rx=4, fill=`#313244` (surface0) |
|
||||
| Stroke width | 1.5-2.5 for main elements |
|
||||
| Style | Flat, minimal, geometric |
|
||||
|
||||
### Catppuccin Mocha Palette
|
||||
|
||||
| Color | Hex | Usage |
|
||||
|-------|-----|-------|
|
||||
| Base | `#1e1e2e` | Deep backgrounds |
|
||||
| Mantle | `#181825` | Darker backgrounds |
|
||||
| Crust | `#11111b` | Darkest backgrounds |
|
||||
| Surface0 | `#313244` | **Icon backgrounds** |
|
||||
| Surface1 | `#45475a` | Elevated surfaces |
|
||||
| Surface2 | `#585b70` | Higher surfaces |
|
||||
| Overlay0 | `#6c7086` | Subtle elements |
|
||||
| Overlay1 | `#7f849c` | More visible overlays |
|
||||
| Overlay2 | `#9399b2` | Prominent overlays |
|
||||
| Subtext0 | `#a6adc8` | Tertiary text |
|
||||
| Subtext1 | `#bac2de` | Secondary text |
|
||||
| Text | `#cdd6f4` | **Primary text/strokes** |
|
||||
| Lavender | `#b4befe` | Soft purple accent |
|
||||
| Blue | `#89b4fa` | **File operations** |
|
||||
| Sapphire | `#74c7ec` | Links, info |
|
||||
| Sky | `#89dceb` | Light blue accent |
|
||||
| Teal | `#94e2d5` | Success secondary |
|
||||
| Green | `#a6e3a1` | **Creation/Success** |
|
||||
| Yellow | `#f9e2af` | **Sketcher, warnings** |
|
||||
| Peach | `#fab387` | **Settings, caution** |
|
||||
| Maroon | `#eba0ac` | Soft red |
|
||||
| Red | `#f38ba8` | **Deletion/Error** |
|
||||
| Mauve | `#cba6f7` | **Primary accent** |
|
||||
| Pink | `#f5c2e7` | Decorative |
|
||||
| Flamingo | `#f2cdcd` | Soft accents |
|
||||
| Rosewater | `#f5e0dc` | Lightest accent |
|
||||
|
||||
### Workbench Color Coding
|
||||
|
||||
Each workbench uses a distinct accent color:
|
||||
|
||||
| Workbench | Primary | Accent |
|
||||
|-----------|---------|--------|
|
||||
| Part Design | Blue `#89b4fa` | Sapphire `#74c7ec` |
|
||||
| Sketcher | Yellow `#f9e2af` | Peach `#fab387` |
|
||||
| Assembly | Green `#a6e3a1` | Teal `#94e2d5` |
|
||||
| TechDraw | Mauve `#cba6f7` | Lavender `#b4befe` |
|
||||
| Spreadsheet | Sky `#89dceb` | Sapphire `#74c7ec` |
|
||||
| Mesh | Pink `#f5c2e7` | Flamingo `#f2cdcd` |
|
||||
| Draft | Peach `#fab387` | Yellow `#f9e2af` |
|
||||
|
||||
## Adding New Icons
|
||||
|
||||
1. Identify the original icon name (e.g., `document-save.svg`)
|
||||
2. Create your SVG using the template above
|
||||
3. Save it in this directory with the exact same filename
|
||||
4. The new icon will be used on next application start
|
||||
|
||||
## Finding Original Icon Names
|
||||
|
||||
Original icons are located in:
|
||||
- `src/Gui/Icons/` - Core GUI icons
|
||||
- `src/Mod/*/Gui/Resources/icons/` - Module-specific icons
|
||||
|
||||
Use the same filename to override.
|
||||
|
||||
## Related Issues
|
||||
|
||||
- Epic: https://git.kindred-systems.com/kindred/create/issues/7
|
||||
- Phase 1 (Core): https://git.kindred-systems.com/kindred/create/issues/4
|
||||
- Phase 2 (Workbench): https://git.kindred-systems.com/kindred/create/issues/5
|
||||
- Phase 3 (Complete): https://git.kindred-systems.com/kindred/create/issues/6
|
||||
13
kindred-icons/delete.svg
Normal file
@@ -0,0 +1,13 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
|
||||
<rect x="2" y="2" width="28" height="28" rx="4" fill="#313244"/>
|
||||
<!-- Trash can body -->
|
||||
<path d="M8 10 L10 26 L22 26 L24 10" fill="#45475a" stroke="#f38ba8" stroke-width="1.5" stroke-linejoin="round"/>
|
||||
<!-- Trash can lid -->
|
||||
<rect x="6" y="7" width="20" height="3" rx="1" fill="#585b70" stroke="#f38ba8" stroke-width="1.5"/>
|
||||
<!-- Handle -->
|
||||
<path d="M12 7 L12 5 L20 5 L20 7" fill="none" stroke="#f38ba8" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<!-- Trash lines -->
|
||||
<line x1="12" y1="13" x2="12" y2="23" stroke="#f38ba8" stroke-width="1.5" stroke-linecap="round"/>
|
||||
<line x1="16" y1="13" x2="16" y2="23" stroke="#f38ba8" stroke-width="1.5" stroke-linecap="round"/>
|
||||
<line x1="20" y1="13" x2="20" y2="23" stroke="#f38ba8" stroke-width="1.5" stroke-linecap="round"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 881 B |
10
kindred-icons/document-new.svg
Normal file
@@ -0,0 +1,10 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
|
||||
<rect x="2" y="2" width="28" height="28" rx="4" fill="#313244"/>
|
||||
<!-- Document shape -->
|
||||
<path d="M9 5 L9 27 L23 27 L23 11 L17 5 Z" fill="#45475a" stroke="#89b4fa" stroke-width="1.5"/>
|
||||
<!-- Folded corner -->
|
||||
<path d="M17 5 L17 11 L23 11" fill="#313244" stroke="#89b4fa" stroke-width="1.5" stroke-linejoin="round"/>
|
||||
<!-- Plus sign for "new" -->
|
||||
<circle cx="22" cy="22" r="6" fill="#a6e3a1"/>
|
||||
<path d="M22 19 L22 25 M19 22 L25 22" stroke="#1e1e2e" stroke-width="2" stroke-linecap="round"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 572 B |
10
kindred-icons/document-open.svg
Normal file
@@ -0,0 +1,10 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
|
||||
<rect x="2" y="2" width="28" height="28" rx="4" fill="#313244"/>
|
||||
<!-- Folder back -->
|
||||
<path d="M5 10 L5 25 L27 25 L27 12 L15 12 L13 10 Z" fill="#45475a" stroke="#89b4fa" stroke-width="1.5"/>
|
||||
<!-- Folder front/open flap -->
|
||||
<path d="M5 14 L9 10 L27 10 L27 12 L5 14" fill="#585b70" stroke="#74c7ec" stroke-width="1"/>
|
||||
<!-- Arrow pointing up (open) -->
|
||||
<path d="M16 22 L16 16" stroke="#a6e3a1" stroke-width="2" stroke-linecap="round"/>
|
||||
<path d="M13 19 L16 15 L19 19" stroke="#a6e3a1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" fill="none"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 643 B |
14
kindred-icons/document-save.svg
Normal file
@@ -0,0 +1,14 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
|
||||
<rect x="2" y="2" width="28" height="28" rx="4" fill="#313244"/>
|
||||
<!-- Floppy disk body -->
|
||||
<path d="M7 6 L7 26 L25 26 L25 10 L21 6 Z" fill="#45475a" stroke="#89b4fa" stroke-width="1.5"/>
|
||||
<!-- Metal slider -->
|
||||
<rect x="10" y="6" width="10" height="8" rx="1" fill="#1e1e2e" stroke="#6c7086" stroke-width="1"/>
|
||||
<!-- Slider notch -->
|
||||
<rect x="17" y="7" width="2" height="6" fill="#313244"/>
|
||||
<!-- Label area -->
|
||||
<rect x="9" y="17" width="14" height="7" rx="1" fill="#cdd6f4"/>
|
||||
<!-- Label lines -->
|
||||
<line x1="11" y1="19" x2="21" y2="19" stroke="#313244" stroke-width="1" stroke-linecap="round"/>
|
||||
<line x1="11" y1="22" x2="17" y2="22" stroke="#313244" stroke-width="1" stroke-linecap="round"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 779 B |
11
kindred-icons/edit-copy.svg
Normal file
@@ -0,0 +1,11 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
|
||||
<rect x="2" y="2" width="28" height="28" rx="4" fill="#313244"/>
|
||||
<!-- Back document -->
|
||||
<rect x="10" y="5" width="14" height="18" rx="2" fill="#45475a" stroke="#6c7086" stroke-width="1.5"/>
|
||||
<!-- Front document -->
|
||||
<rect x="6" y="9" width="14" height="18" rx="2" fill="#585b70" stroke="#94e2d5" stroke-width="1.5"/>
|
||||
<!-- Lines on front document -->
|
||||
<line x1="9" y1="14" x2="17" y2="14" stroke="#cdd6f4" stroke-width="1.5" stroke-linecap="round"/>
|
||||
<line x1="9" y1="18" x2="15" y2="18" stroke="#cdd6f4" stroke-width="1.5" stroke-linecap="round"/>
|
||||
<line x1="9" y1="22" x2="17" y2="22" stroke="#cdd6f4" stroke-width="1.5" stroke-linecap="round"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 728 B |
14
kindred-icons/edit-cut.svg
Normal file
@@ -0,0 +1,14 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
|
||||
<rect x="2" y="2" width="28" height="28" rx="4" fill="#313244"/>
|
||||
<!-- Scissors -->
|
||||
<!-- Left blade -->
|
||||
<ellipse cx="10" cy="24" rx="4" ry="4" fill="none" stroke="#94e2d5" stroke-width="2"/>
|
||||
<line x1="13" y1="21" x2="16" y2="14" stroke="#94e2d5" stroke-width="2" stroke-linecap="round"/>
|
||||
<!-- Right blade -->
|
||||
<ellipse cx="22" cy="24" rx="4" ry="4" fill="none" stroke="#94e2d5" stroke-width="2"/>
|
||||
<line x1="19" y1="21" x2="16" y2="14" stroke="#94e2d5" stroke-width="2" stroke-linecap="round"/>
|
||||
<!-- Pivot point -->
|
||||
<circle cx="16" cy="14" r="2" fill="#a6e3a1"/>
|
||||
<!-- Cut line indicator -->
|
||||
<line x1="16" y1="6" x2="16" y2="11" stroke="#f38ba8" stroke-width="2" stroke-linecap="round" stroke-dasharray="2,2"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 799 B |
12
kindred-icons/edit-paste.svg
Normal file
@@ -0,0 +1,12 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
|
||||
<rect x="2" y="2" width="28" height="28" rx="4" fill="#313244"/>
|
||||
<!-- Clipboard back -->
|
||||
<rect x="7" y="6" width="18" height="22" rx="2" fill="#45475a" stroke="#94e2d5" stroke-width="1.5"/>
|
||||
<!-- Clipboard clip -->
|
||||
<rect x="12" y="4" width="8" height="5" rx="1" fill="#585b70" stroke="#94e2d5" stroke-width="1"/>
|
||||
<!-- Pasted content indicator -->
|
||||
<rect x="10" y="12" width="12" height="12" rx="1" fill="#a6e3a1" fill-opacity="0.3" stroke="#a6e3a1" stroke-width="1.5"/>
|
||||
<!-- Lines on pasted content -->
|
||||
<line x1="12" y1="15" x2="20" y2="15" stroke="#cdd6f4" stroke-width="1.5" stroke-linecap="round"/>
|
||||
<line x1="12" y1="19" x2="18" y2="19" stroke="#cdd6f4" stroke-width="1.5" stroke-linecap="round"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 787 B |
6
kindred-icons/edit-redo.svg
Normal file
@@ -0,0 +1,6 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
|
||||
<rect x="2" y="2" width="28" height="28" rx="4" fill="#313244"/>
|
||||
<!-- Curved arrow going right/forward -->
|
||||
<path d="M22 12 L26 16 L22 20" stroke="#a6e3a1" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" fill="none"/>
|
||||
<path d="M26 16 L14 16 C10 16 7 19 7 23" stroke="#a6e3a1" stroke-width="2.5" stroke-linecap="round" fill="none"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 425 B |
6
kindred-icons/edit-undo.svg
Normal file
@@ -0,0 +1,6 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
|
||||
<rect x="2" y="2" width="28" height="28" rx="4" fill="#313244"/>
|
||||
<!-- Curved arrow going left/back -->
|
||||
<path d="M10 12 L6 16 L10 20" stroke="#a6e3a1" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" fill="none"/>
|
||||
<path d="M6 16 L18 16 C22 16 25 19 25 23" stroke="#a6e3a1" stroke-width="2.5" stroke-linecap="round" fill="none"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 421 B |
10
kindred-icons/preferences-system.svg
Normal file
@@ -0,0 +1,10 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
|
||||
<rect x="2" y="2" width="28" height="28" rx="4" fill="#313244"/>
|
||||
<!-- Gear outer -->
|
||||
<path d="M16 6 L18 6 L19 8 L21 9 L23 8 L24.5 9.5 L23.5 11.5 L24.5 13.5 L26.5 14 L26.5 16 L26 18 L24 19 L25 21 L23.5 22.5 L21.5 21.5 L19.5 22.5 L19 24.5 L17 25 L15 24.5 L14 22.5 L12 21.5 L10 22.5 L8.5 21 L9.5 19 L8 17 L6 16.5 L6 14.5 L8 14 L9 12 L8 10 L9.5 8.5 L11.5 9.5 L13.5 8.5 L14 6.5 Z"
|
||||
fill="#45475a" stroke="#fab387" stroke-width="1.5" stroke-linejoin="round"/>
|
||||
<!-- Gear center -->
|
||||
<circle cx="16" cy="16" r="4" fill="#313244" stroke="#fab387" stroke-width="1.5"/>
|
||||
<!-- Center dot -->
|
||||
<circle cx="16" cy="16" r="1.5" fill="#fab387"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 716 B |
9
kindred-icons/view-refresh.svg
Normal file
@@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
|
||||
<rect x="2" y="2" width="28" height="28" rx="4" fill="#313244"/>
|
||||
<!-- Circular arrow -->
|
||||
<path d="M16 6 A10 10 0 1 1 6 16" fill="none" stroke="#cba6f7" stroke-width="2.5" stroke-linecap="round"/>
|
||||
<!-- Arrow head -->
|
||||
<path d="M16 6 L12 9 L16 12" fill="none" stroke="#cba6f7" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<!-- Center indicator -->
|
||||
<circle cx="16" cy="16" r="3" fill="#b4befe"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 497 B |
10
kindred-icons/zoom-in.svg
Normal file
@@ -0,0 +1,10 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
|
||||
<rect x="2" y="2" width="28" height="28" rx="4" fill="#313244"/>
|
||||
<!-- Magnifying glass circle -->
|
||||
<circle cx="14" cy="14" r="8" fill="#45475a" stroke="#cba6f7" stroke-width="2"/>
|
||||
<!-- Handle -->
|
||||
<line x1="20" y1="20" x2="27" y2="27" stroke="#cba6f7" stroke-width="3" stroke-linecap="round"/>
|
||||
<!-- Plus sign -->
|
||||
<line x1="14" y1="10" x2="14" y2="18" stroke="#a6e3a1" stroke-width="2" stroke-linecap="round"/>
|
||||
<line x1="10" y1="14" x2="18" y2="14" stroke="#a6e3a1" stroke-width="2" stroke-linecap="round"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 589 B |
9
kindred-icons/zoom-out.svg
Normal file
@@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
|
||||
<rect x="2" y="2" width="28" height="28" rx="4" fill="#313244"/>
|
||||
<!-- Magnifying glass circle -->
|
||||
<circle cx="14" cy="14" r="8" fill="#45475a" stroke="#cba6f7" stroke-width="2"/>
|
||||
<!-- Handle -->
|
||||
<line x1="20" y1="20" x2="27" y2="27" stroke="#cba6f7" stroke-width="3" stroke-linecap="round"/>
|
||||
<!-- Minus sign -->
|
||||
<line x1="10" y1="14" x2="18" y2="14" stroke="#f38ba8" stroke-width="2" stroke-linecap="round"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 491 B |
@@ -63,6 +63,13 @@ BitmapFactoryInst& BitmapFactoryInst::instance()
|
||||
if (!_pcSingleton) {
|
||||
_pcSingleton = new BitmapFactoryInst;
|
||||
std::map<std::string, std::string>::const_iterator it;
|
||||
|
||||
// Kindred Create custom icons - highest priority
|
||||
// These override default FreeCAD icons with Catppuccin Mocha themed versions
|
||||
_pcSingleton->addPath(
|
||||
QStringLiteral("%1/kindred-icons").arg(QString::fromStdString(App::Application::getHomePath()))
|
||||
);
|
||||
|
||||
it = App::GetApplication().Config().find("ProgramIcons");
|
||||
if (it != App::GetApplication().Config().end()) {
|
||||
QString home = QString::fromStdString(App::Application::getHomePath());
|
||||
|
||||
@@ -1618,3 +1618,15 @@ INSTALL(
|
||||
DESTINATION
|
||||
${CMAKE_INSTALL_DATADIR}/3Dconnexion
|
||||
)
|
||||
|
||||
# Kindred Create custom icons - Catppuccin Mocha themed overrides
|
||||
INSTALL(
|
||||
DIRECTORY
|
||||
${CMAKE_SOURCE_DIR}/kindred-icons/
|
||||
DESTINATION
|
||||
kindred-icons
|
||||
FILES_MATCHING
|
||||
PATTERN "*.svg"
|
||||
PATTERN "*.png"
|
||||
PATTERN "README.md"
|
||||
)
|
||||
|
||||