cherry-pick #1: initial Kindred branding + assembly joint fix

Cherry-picked 316d4f4b52 with conflict resolution:
- CMakeLists.txt: merged Kindred version vars with upstream 1.2.0-dev base
- src/Main/*.cpp: applied Kindred branding (banner, copyright, license)
- Resolved add/add conflicts for files already copied in Phase 1
- Includes assembly joint flip overconstrain fix
This commit is contained in:
forbes
2026-02-13 14:05:31 -06:00
parent 87a0af0b0f
commit 9be9f9420a
36 changed files with 3384 additions and 68 deletions

View File

@@ -0,0 +1,98 @@
#!/bin/bash
# generate-icons.sh - Generate application icons for Kindred Create
#
# This script generates icon files for all platforms from the source SVG.
# Prerequisites:
# - Inkscape (SVG to PNG conversion)
# - ImageMagick (ICO generation for Windows)
# - png2icns or iconutil (ICNS generation for macOS)
#
# Usage: ./generate-icons.sh
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
SVG_SOURCE="$SCRIPT_DIR/kindred-logo.svg"
OUTPUT_DIR="$SCRIPT_DIR/../icons"
# Check for source file
if [ ! -f "$SVG_SOURCE" ]; then
echo "Error: Source SVG not found at $SVG_SOURCE"
echo "Please place kindred-logo.svg in the branding directory."
exit 1
fi
# Check for Inkscape
if ! command -v inkscape &> /dev/null; then
echo "Error: Inkscape is required but not installed."
echo "Install with: sudo apt install inkscape (Debian/Ubuntu)"
exit 1
fi
echo "Generating icons from $SVG_SOURCE..."
# Generate PNGs for Linux/hicolor icon theme
for size in 16 24 32 48 64 128 256 512; do
dir="$OUTPUT_DIR/hicolor/${size}x${size}/apps"
mkdir -p "$dir"
echo " Generating ${size}x${size} PNG..."
inkscape -w $size -h $size "$SVG_SOURCE" -o "$dir/kindred-create.png" 2>/dev/null
done
# Copy SVG for scalable
mkdir -p "$OUTPUT_DIR/hicolor/scalable/apps"
cp "$SVG_SOURCE" "$OUTPUT_DIR/hicolor/scalable/apps/kindred-create.svg"
echo " Copied scalable SVG"
# Generate Windows ICO (requires ImageMagick)
if command -v convert &> /dev/null; then
echo " Generating Windows ICO..."
convert \
"$OUTPUT_DIR/hicolor/16x16/apps/kindred-create.png" \
"$OUTPUT_DIR/hicolor/24x24/apps/kindred-create.png" \
"$OUTPUT_DIR/hicolor/32x32/apps/kindred-create.png" \
"$OUTPUT_DIR/hicolor/48x48/apps/kindred-create.png" \
"$OUTPUT_DIR/hicolor/64x64/apps/kindred-create.png" \
"$OUTPUT_DIR/hicolor/128x128/apps/kindred-create.png" \
"$OUTPUT_DIR/hicolor/256x256/apps/kindred-create.png" \
"$OUTPUT_DIR/kindred-create.ico"
echo " Created kindred-create.ico"
else
echo " Warning: ImageMagick not found, skipping ICO generation."
echo " Install with: sudo apt install imagemagick"
fi
# Generate macOS ICNS (requires png2icns or iconutil)
if command -v png2icns &> /dev/null; then
echo " Generating macOS ICNS..."
png2icns "$OUTPUT_DIR/kindred-create.icns" \
"$OUTPUT_DIR/hicolor/16x16/apps/kindred-create.png" \
"$OUTPUT_DIR/hicolor/32x32/apps/kindred-create.png" \
"$OUTPUT_DIR/hicolor/128x128/apps/kindred-create.png" \
"$OUTPUT_DIR/hicolor/256x256/apps/kindred-create.png" \
"$OUTPUT_DIR/hicolor/512x512/apps/kindred-create.png"
echo " Created kindred-create.icns"
elif command -v iconutil &> /dev/null; then
echo " Generating macOS ICNS using iconutil..."
ICONSET_DIR="$OUTPUT_DIR/kindred-create.iconset"
mkdir -p "$ICONSET_DIR"
cp "$OUTPUT_DIR/hicolor/16x16/apps/kindred-create.png" "$ICONSET_DIR/icon_16x16.png"
cp "$OUTPUT_DIR/hicolor/32x32/apps/kindred-create.png" "$ICONSET_DIR/icon_16x16@2x.png"
cp "$OUTPUT_DIR/hicolor/32x32/apps/kindred-create.png" "$ICONSET_DIR/icon_32x32.png"
cp "$OUTPUT_DIR/hicolor/64x64/apps/kindred-create.png" "$ICONSET_DIR/icon_32x32@2x.png"
cp "$OUTPUT_DIR/hicolor/128x128/apps/kindred-create.png" "$ICONSET_DIR/icon_128x128.png"
cp "$OUTPUT_DIR/hicolor/256x256/apps/kindred-create.png" "$ICONSET_DIR/icon_128x128@2x.png"
cp "$OUTPUT_DIR/hicolor/256x256/apps/kindred-create.png" "$ICONSET_DIR/icon_256x256.png"
cp "$OUTPUT_DIR/hicolor/512x512/apps/kindred-create.png" "$ICONSET_DIR/icon_256x256@2x.png"
cp "$OUTPUT_DIR/hicolor/512x512/apps/kindred-create.png" "$ICONSET_DIR/icon_512x512.png"
iconutil -c icns "$ICONSET_DIR" -o "$OUTPUT_DIR/kindred-create.icns"
rm -rf "$ICONSET_DIR"
echo " Created kindred-create.icns"
else
echo " Warning: Neither png2icns nor iconutil found, skipping ICNS generation."
echo " Install png2icns with: sudo apt install icnsutils"
fi
echo ""
echo "Icon generation complete!"
echo "Output directory: $OUTPUT_DIR"

View File

@@ -0,0 +1,214 @@
#!/usr/bin/env python3
"""
Generate Kindred Create splash screen and about images.
This script creates branded splash screens with:
- Rounded dark rectangle background (Catppuccin Mocha base #1e1e2e)
- Kindred logo centered
- "Kindred Create" title text
- Version string
Requirements:
pip install Pillow cairosvg
Usage:
python generate-splash.py [--version VERSION] [--freecad-version FREECAD_VERSION]
"""
import argparse
import os
import sys
from pathlib import Path
try:
from PIL import Image, ImageDraw, ImageFont
except ImportError:
print("Error: Pillow is required. Install with: pip install Pillow")
sys.exit(1)
try:
import cairosvg
except ImportError:
print("Warning: cairosvg not found. Will try alternative SVG conversion.")
cairosvg = None
# Catppuccin Mocha colors
COLORS = {
'base': '#1e1e2e',
'surface0': '#313244',
'text': '#cdd6f4',
'subtext0': '#a6adc8',
'blue': '#89b4fa',
'lavender': '#b4befe',
}
def hex_to_rgb(hex_color):
"""Convert hex color to RGB tuple."""
hex_color = hex_color.lstrip('#')
return tuple(int(hex_color[i:i+2], 16) for i in (0, 2, 4))
def create_rounded_rectangle(draw, bbox, radius, fill):
"""Draw a rounded rectangle."""
x1, y1, x2, y2 = bbox
draw.rounded_rectangle(bbox, radius=radius, fill=fill)
def load_svg_as_image(svg_path, width, height):
"""Load an SVG file and convert to PIL Image at specified size."""
if cairosvg:
import io
png_data = cairosvg.svg2png(url=str(svg_path), output_width=width, output_height=height)
return Image.open(io.BytesIO(png_data)).convert('RGBA')
else:
# Fallback: try using inkscape command line
import subprocess
import tempfile
with tempfile.NamedTemporaryFile(suffix='.png', delete=False) as tmp:
tmp_path = tmp.name
try:
subprocess.run([
'inkscape', '-w', str(width), '-h', str(height),
str(svg_path), '-o', tmp_path
], check=True, capture_output=True)
img = Image.open(tmp_path).convert('RGBA')
return img
finally:
if os.path.exists(tmp_path):
os.unlink(tmp_path)
def get_font(size, bold=False):
"""Get a font, falling back to default if not available."""
font_names = [
'/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf' if bold else '/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf',
'/usr/share/fonts/truetype/liberation/LiberationSans-Bold.ttf' if bold else '/usr/share/fonts/truetype/liberation/LiberationSans-Regular.ttf',
'/usr/share/fonts/TTF/DejaVuSans-Bold.ttf' if bold else '/usr/share/fonts/TTF/DejaVuSans.ttf',
]
for font_name in font_names:
if os.path.exists(font_name):
return ImageFont.truetype(font_name, size)
# Fallback to default
return ImageFont.load_default()
def create_splash(output_path, logo_path, width, height, version, freecad_version, scale=1):
"""Create a splash screen image."""
# Scale dimensions
w = int(width * scale)
h = int(height * scale)
radius = int(16 * scale)
padding = int(30 * scale)
# Create image with transparent background
img = Image.new('RGBA', (w, h), (0, 0, 0, 0))
draw = ImageDraw.Draw(img)
# Draw rounded rectangle background
bg_color = hex_to_rgb(COLORS['base'])
create_rounded_rectangle(draw, (padding, padding, w - padding, h - padding), radius, bg_color)
# Load and place logo
logo_max_width = int(300 * scale)
logo_max_height = int(150 * scale)
try:
logo = load_svg_as_image(logo_path, logo_max_width, logo_max_height)
# Center logo horizontally, place in upper portion
logo_x = (w - logo.width) // 2
logo_y = int(80 * scale)
img.paste(logo, (logo_x, logo_y), logo)
except Exception as e:
print(f"Warning: Could not load logo: {e}")
logo_y = int(80 * scale)
# Draw "Kindred Create" title
title_font = get_font(int(24 * scale), bold=True)
title = "Kindred Create"
title_bbox = draw.textbbox((0, 0), title, font=title_font)
title_width = title_bbox[2] - title_bbox[0]
title_x = (w - title_width) // 2
title_y = int(250 * scale)
draw.text((title_x, title_y), title, fill=hex_to_rgb(COLORS['text']), font=title_font)
# Draw version string
version_font = get_font(int(12 * scale))
version_str = f"v{version} (FreeCAD {freecad_version})"
version_bbox = draw.textbbox((0, 0), version_str, font=version_font)
version_width = version_bbox[2] - version_bbox[0]
version_x = (w - version_width) // 2
version_y = title_y + int(35 * scale)
draw.text((version_x, version_y), version_str, fill=hex_to_rgb(COLORS['subtext0']), font=version_font)
# Save
img.save(output_path, 'PNG')
print(f"Created: {output_path}")
def create_about(output_path, logo_path, width, height, scale=1):
"""Create an about dialog image."""
# Scale dimensions
w = int(width * scale)
h = int(height * scale)
# Create image
img = Image.new('RGBA', (w, h), hex_to_rgb(COLORS['base']) + (255,))
draw = ImageDraw.Draw(img)
# Load and place logo
logo_max_width = int(200 * scale)
logo_max_height = int(100 * scale)
try:
logo = load_svg_as_image(logo_path, logo_max_width, logo_max_height)
logo_x = (w - logo.width) // 2
logo_y = int(30 * scale)
img.paste(logo, (logo_x, logo_y), logo)
except Exception as e:
print(f"Warning: Could not load logo: {e}")
# Save
img.save(output_path, 'PNG')
print(f"Created: {output_path}")
def main():
parser = argparse.ArgumentParser(description='Generate Kindred Create splash screens')
parser.add_argument('--version', default='0.1.0', help='Kindred Create version')
parser.add_argument('--freecad-version', default='1.0.0', help='FreeCAD version')
args = parser.parse_args()
script_dir = Path(__file__).parent
logo_path = script_dir / 'kindred-logo.svg'
icons_dir = script_dir.parent.parent / 'src' / 'Gui' / 'Icons'
if not logo_path.exists():
print(f"Error: Logo not found at {logo_path}")
sys.exit(1)
# Create splash screens (600x400 as per spec)
create_splash(
icons_dir / 'kindredcreatesplash.png',
logo_path,
600, 400,
args.version,
args.freecad_version,
scale=1
)
# Create 2x version for HiDPI
create_splash(
icons_dir / 'kindredcreatesplash_2x.png',
logo_path,
600, 400,
args.version,
args.freecad_version,
scale=2
)
# Create about image
create_about(
icons_dir / 'kindredcreateabout.png',
logo_path,
400, 200,
scale=1
)
print("\nSplash screen generation complete!")
if __name__ == '__main__':
main()

View File

@@ -0,0 +1,106 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="1028"
height="1028"
viewBox="0 0 271.99167 271.99167"
version="1.1"
id="svg1"
inkscape:version="1.4.2 (2aeb623e1d, 2025-05-12)"
sodipodi:docname="kindred-logo.svg"
inkscape:export-filename="../3290ed6b/kindred-logo-blue-baack.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="true"
inkscape:zoom="1.036062"
inkscape:cx="397.6596"
inkscape:cy="478.25323"
inkscape:window-width="2494"
inkscape:window-height="1371"
inkscape:window-x="1146"
inkscape:window-y="1112"
inkscape:window-maximized="1"
inkscape:current-layer="layer1"
inkscape:export-bgcolor="#79c0c500">
<inkscape:grid
type="axonomgrid"
id="grid6"
units="mm"
originx="0"
originy="0"
spacingx="0.99999998"
spacingy="1"
empcolor="#0099e5"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="5"
dotted="false"
gridanglex="30"
gridanglez="30"
enabled="true"
visible="true" />
</sodipodi:namedview>
<defs
id="defs1">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 123.49166 : 1"
inkscape:vp_y="0 : 999.99998 : 0"
inkscape:vp_z="210.00001 : 123.49166 : 1"
inkscape:persp3d-origin="105 : 73.991665 : 1"
id="perspective1" />
</defs>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<path
sodipodi:type="star"
style="fill:#7c4a82;fill-opacity:1;stroke:#12101c;stroke-width:5;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
id="path6-81-5"
inkscape:flatsided="true"
sodipodi:sides="6"
sodipodi:cx="61.574867"
sodipodi:cy="103.99491"
sodipodi:r1="25.000006"
sodipodi:r2="22.404818"
sodipodi:arg1="-1.5707963"
sodipodi:arg2="-1.0471974"
inkscape:rounded="0.77946499"
inkscape:randomized="0"
d="m 61.574868,78.994905 c 19.486629,10e-7 11.907325,-4.375912 21.65064,12.500004 9.743314,16.875911 9.743314,8.12409 -1e-6,25.000001 -9.743315,16.87592 -2.164011,12.50001 -21.65064,12.50001 -19.486629,0 -11.907326,4.37591 -21.65064,-12.50001 -9.743314,-16.875912 -9.743314,-8.12409 0,-25.000002 9.743315,-16.875916 2.164012,-12.500003 21.650641,-12.500003 z"
transform="matrix(1.9704344,0,0,1.8525167,-28.510585,-40.025402)" />
<path
sodipodi:type="star"
style="fill:#ff9701;fill-opacity:1;stroke:#12101c;stroke-width:5;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
id="path6-81-5-6"
inkscape:flatsided="true"
sodipodi:sides="6"
sodipodi:cx="61.574867"
sodipodi:cy="103.99491"
sodipodi:r1="25.000006"
sodipodi:r2="22.404818"
sodipodi:arg1="-1.5707963"
sodipodi:arg2="-1.0471974"
inkscape:rounded="0.77946499"
inkscape:randomized="0"
d="m 61.574868,78.994905 c 19.486629,10e-7 11.907325,-4.375912 21.65064,12.500004 9.743314,16.875921 9.743314,8.12409 -1e-6,25.000001 -9.743315,16.87592 -2.164011,12.50001 -21.65064,12.50001 -19.48663,0 -11.907326,4.37591 -21.65064,-12.50001 -9.743314,-16.875913 -9.743315,-8.12409 10e-7,-25.000002 9.743315,-16.875916 2.164011,-12.500003 21.65064,-12.500003 z"
transform="matrix(1.9704344,0,0,1.8525167,56.811738,-86.338327)" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 491 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 721 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 982 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@@ -0,0 +1,106 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="1028"
height="1028"
viewBox="0 0 271.99167 271.99167"
version="1.1"
id="svg1"
inkscape:version="1.4.2 (2aeb623e1d, 2025-05-12)"
sodipodi:docname="kindred-logo.svg"
inkscape:export-filename="../3290ed6b/kindred-logo-blue-baack.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="true"
inkscape:zoom="1.036062"
inkscape:cx="397.6596"
inkscape:cy="478.25323"
inkscape:window-width="2494"
inkscape:window-height="1371"
inkscape:window-x="1146"
inkscape:window-y="1112"
inkscape:window-maximized="1"
inkscape:current-layer="layer1"
inkscape:export-bgcolor="#79c0c500">
<inkscape:grid
type="axonomgrid"
id="grid6"
units="mm"
originx="0"
originy="0"
spacingx="0.99999998"
spacingy="1"
empcolor="#0099e5"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="5"
dotted="false"
gridanglex="30"
gridanglez="30"
enabled="true"
visible="true" />
</sodipodi:namedview>
<defs
id="defs1">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 123.49166 : 1"
inkscape:vp_y="0 : 999.99998 : 0"
inkscape:vp_z="210.00001 : 123.49166 : 1"
inkscape:persp3d-origin="105 : 73.991665 : 1"
id="perspective1" />
</defs>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<path
sodipodi:type="star"
style="fill:#7c4a82;fill-opacity:1;stroke:#12101c;stroke-width:5;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
id="path6-81-5"
inkscape:flatsided="true"
sodipodi:sides="6"
sodipodi:cx="61.574867"
sodipodi:cy="103.99491"
sodipodi:r1="25.000006"
sodipodi:r2="22.404818"
sodipodi:arg1="-1.5707963"
sodipodi:arg2="-1.0471974"
inkscape:rounded="0.77946499"
inkscape:randomized="0"
d="m 61.574868,78.994905 c 19.486629,10e-7 11.907325,-4.375912 21.65064,12.500004 9.743314,16.875911 9.743314,8.12409 -1e-6,25.000001 -9.743315,16.87592 -2.164011,12.50001 -21.65064,12.50001 -19.486629,0 -11.907326,4.37591 -21.65064,-12.50001 -9.743314,-16.875912 -9.743314,-8.12409 0,-25.000002 9.743315,-16.875916 2.164012,-12.500003 21.650641,-12.500003 z"
transform="matrix(1.9704344,0,0,1.8525167,-28.510585,-40.025402)" />
<path
sodipodi:type="star"
style="fill:#ff9701;fill-opacity:1;stroke:#12101c;stroke-width:5;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
id="path6-81-5-6"
inkscape:flatsided="true"
sodipodi:sides="6"
sodipodi:cx="61.574867"
sodipodi:cy="103.99491"
sodipodi:r1="25.000006"
sodipodi:r2="22.404818"
sodipodi:arg1="-1.5707963"
sodipodi:arg2="-1.0471974"
inkscape:rounded="0.77946499"
inkscape:randomized="0"
d="m 61.574868,78.994905 c 19.486629,10e-7 11.907325,-4.375912 21.65064,12.500004 9.743314,16.875921 9.743314,8.12409 -1e-6,25.000001 -9.743315,16.87592 -2.164011,12.50001 -21.65064,12.50001 -19.48663,0 -11.907326,4.37591 -21.65064,-12.50001 -9.743314,-16.875913 -9.743315,-8.12409 10e-7,-25.000002 9.743315,-16.875916 2.164011,-12.500003 21.65064,-12.500003 z"
transform="matrix(1.9704344,0,0,1.8525167,56.811738,-86.338327)" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

View File

@@ -0,0 +1,109 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<FCParameters>
<FCParamGroup Name="Root">
<FCParamGroup Name="BaseApp">
<FCParamGroup Name="Preferences">
<FCParamGroup Name="Editor">
<FCUInt Name="Text" Value="3453416703"/>
<FCUInt Name="Bookmark" Value="3032415999"/>
<FCUInt Name="Breakpoint" Value="4086016255"/>
<FCUInt Name="Keyword" Value="3416717311"/>
<FCUInt Name="Comment" Value="2139095295"/>
<FCUInt Name="Block comment" Value="2139095295"/>
<FCUInt Name="Number" Value="4206069759"/>
<FCUInt Name="String" Value="2799935999"/>
<FCUInt Name="Character" Value="4073902335"/>
<FCUInt Name="Class name" Value="2310339327"/>
<FCUInt Name="Define name" Value="2310339327"/>
<FCUInt Name="Operator" Value="2312199935"/>
<FCUInt Name="Python output" Value="2796290303"/>
<FCUInt Name="Python error" Value="4086016255"/>
<FCUInt Name="Current line highlight" Value="1162304255"/>
</FCParamGroup>
<FCParamGroup Name="OutputWindow">
<FCUInt Name="colorText" Value="3453416703"/>
<FCUInt Name="colorLogging" Value="2497893887"/>
<FCUInt Name="colorWarning" Value="4192382975"/>
<FCUInt Name="colorError" Value="4086016255"/>
</FCParamGroup>
<FCParamGroup Name="View">
<FCUInt Name="BackgroundColor" Value="505294591"/>
<FCUInt Name="BackgroundColor2" Value="286333951"/>
<FCUInt Name="BackgroundColor3" Value="404235775"/>
<FCUInt Name="BackgroundColor4" Value="825378047"/>
<FCBool Name="Simple" Value="0"/>
<FCBool Name="Gradient" Value="1"/>
<FCBool Name="UseBackgroundColorMid" Value="0"/>
<FCUInt Name="HighlightColor" Value="3416717311"/>
<FCUInt Name="SelectionColor" Value="3032415999"/>
<FCUInt Name="PreselectColor" Value="2497893887"/>
<FCUInt Name="DefaultShapeColor" Value="1482387711"/>
<FCBool Name="RandomColor" Value="0"/>
<FCUInt Name="DefaultShapeLineColor" Value="2470768383"/>
<FCUInt Name="DefaultShapeVertexColor" Value="2470768383"/>
<FCUInt Name="BoundingBoxColor" Value="1819509759"/>
<FCUInt Name="AnnotationTextColor" Value="3453416703"/>
<FCUInt Name="SketchEdgeColor" Value="3453416703"/>
<FCUInt Name="SketchVertexColor" Value="3453416703"/>
<FCUInt Name="EditedEdgeColor" Value="3416717311"/>
<FCUInt Name="EditedVertexColor" Value="4123402495"/>
<FCUInt Name="ConstructionColor" Value="4206069759"/>
<FCUInt Name="ExternalColor" Value="4192382975"/>
<FCUInt Name="FullyConstrainedColor" Value="2799935999"/>
<FCUInt Name="InternalAlignedGeoColor" Value="1959907071"/>
<FCUInt Name="FullyConstraintElementColor" Value="2799935999"/>
<FCUInt Name="FullyConstraintConstructionElementColor" Value="2497893887"/>
<FCUInt Name="FullyConstraintInternalAlignmentColor" Value="2312199935"/>
<FCUInt Name="FullyConstraintConstructionPointColor" Value="2799935999"/>
<FCUInt Name="ConstrainedIcoColor" Value="2310339327"/>
<FCUInt Name="NonDrivingConstrDimColor" Value="2139095295"/>
<FCUInt Name="ConstrainedDimColor" Value="3416717311"/>
<FCUInt Name="ExprBasedConstrDimColor" Value="4206069759"/>
<FCUInt Name="DeactivatedConstrDimColor" Value="1819509759"/>
<FCUInt Name="CursorTextColor" Value="3453416703"/>
<FCUInt Name="CursorCrosshairColor" Value="3416717311"/>
<FCUInt Name="CreateLineColor" Value="2799935999"/>
<FCUInt Name="ShadowLightColor" Value="2470768128"/>
<FCUInt Name="ShadowGroundColor" Value="286333952"/>
<FCUInt Name="HiddenLineColor" Value="825378047"/>
<FCUInt Name="HiddenLineFaceColor" Value="505294591"/>
<FCUInt Name="HiddenLineBackground" Value="505294591"/>
<FCBool Name="EnableBacklight" Value="1"/>
<FCUInt Name="BacklightColor" Value="1162304255"/>
<FCFloat Name="BacklightIntensity" Value="0.30"/>
</FCParamGroup>
<FCParamGroup Name="TreeView">
<FCUInt Name="TreeEditColor" Value="3416717311"/>
<FCUInt Name="TreeActiveColor" Value="2799935999"/>
</FCParamGroup>
<FCParamGroup Name="MainWindow">
<FCText Name="StyleSheet">KindredCreate.qss</FCText>
</FCParamGroup>
<FCParamGroup Name="Mod">
<FCParamGroup Name="Start">
<FCUInt Name="BackgroundColor1" Value="404235775"/>
<FCUInt Name="BackgroundTextColor" Value="3453416703"/>
<FCUInt Name="PageColor" Value="505294591"/>
<FCUInt Name="PageTextColor" Value="3453416703"/>
<FCUInt Name="BoxColor" Value="825378047"/>
<FCUInt Name="LinkColor" Value="2310339327"/>
<FCUInt Name="BackgroundColor2" Value="286333951"/>
</FCParamGroup>
<FCParamGroup Name="Part">
<FCUInt Name="VertexColor" Value="3032415999"/>
<FCUInt Name="EdgeColor" Value="2310339327"/>
</FCParamGroup>
<FCParamGroup Name="PartDesign">
<FCUInt Name="DefaultDatumColor" Value="3416717311"/>
</FCParamGroup>
<FCParamGroup Name="Draft">
<FCUInt Name="snapcolor" Value="2799935999"/>
</FCParamGroup>
<FCParamGroup Name="Sketcher">
<FCUInt Name="GridLineColor" Value="1162304255"/>
</FCParamGroup>
</FCParamGroup>
</FCParamGroup>
</FCParamGroup>
</FCParamGroup>
</FCParameters>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<package format="1" xmlns="https://wiki.freecad.org/Package_Metadata">
<name>Kindred Create Preference Packs</name>
<description>Default preference packs for Kindred Create, featuring the Catppuccin Mocha color theme.</description>
<version>0.1.0</version>
<maintainer email="support@kindredsystems.net">Kindred Systems LLC</maintainer>
<license>LGPL-2.1-or-later</license>
<url type="website">https://kindredsystems.net</url>
<content>
<preferencepack>
<name>KindredCreate</name>
<description>The default Kindred Create theme based on Catppuccin Mocha - a soothing dark color palette.</description>
</preferencepack>
</content>
</package>