aboutsummaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorlizzie <lizzie@eden-emu.dev>2025-10-14 20:47:17 +0200
committercrueter <crueter@eden-emu.dev>2025-10-14 20:47:17 +0200
commitac59b6eae5685956a80ef2bf38e2325705b0aea5 (patch)
tree2f398e80c12261d4854966e118912a3fedac3a0f /tools
parentb389a7269794fe9aa8e34faa821659f07ce3f369 (diff)
[android] Android 7.0 support (#2654)
Signed-off-by: lizzie <lizzie@eden-emu.dev> Co-authored-by: crueter <crueter@eden-emu.dev> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2654 Reviewed-by: MaranBr <maranbr@eden-emu.dev> Co-authored-by: lizzie <lizzie@eden-emu.dev> Co-committed-by: lizzie <lizzie@eden-emu.dev>
Diffstat (limited to 'tools')
-rw-r--r--tools/VectorDrawable2Svg.py86
-rwxr-xr-xtools/generate-legacy-icons.sh26
2 files changed, 112 insertions, 0 deletions
diff --git a/tools/VectorDrawable2Svg.py b/tools/VectorDrawable2Svg.py
new file mode 100644
index 0000000000..20f168e1aa
--- /dev/null
+++ b/tools/VectorDrawable2Svg.py
@@ -0,0 +1,86 @@
+#!/usr/bin/env python2
+"""
+VectorDrawable2Svg
+This script convert your VectorDrawable to a Svg
+Author: Alessandro Lucchet
+
+Usage: drop one or more vector drawable onto this script to convert them to svg format
+"""
+
+from xml.dom.minidom import *
+import sys
+
+# extracts all paths inside vdContainer and add them into svgContainer
+def convertPaths(vdContainer,svgContainer,svgXml):
+ vdPaths = vdContainer.getElementsByTagName('path')
+ for vdPath in vdPaths:
+ # only iterate in the first level
+ if vdPath.parentNode == vdContainer:
+ svgPath = svgXml.createElement('path')
+ svgPath.attributes['d'] = vdPath.attributes['android:pathData'].value
+ if vdPath.hasAttribute('android:fillColor'):
+ svgPath.attributes['fill'] = vdPath.attributes['android:fillColor'].value
+ else:
+ svgPath.attributes['fill'] = 'none'
+ if vdPath.hasAttribute('android:strokeLineJoin'):
+ svgPath.attributes['stroke-linejoin'] = vdPath.attributes['android:strokeLineJoin'].value
+ if vdPath.hasAttribute('android:strokeLineCap'):
+ svgPath.attributes['stroke-linecap'] = vdPath.attributes['android:strokeLineCap'].value
+ if vdPath.hasAttribute('android:strokeMiterLimit'):
+ svgPath.attributes['stroke-miterlimit'] = vdPath.attributes['android:strokeMiterLimit'].value
+ if vdPath.hasAttribute('android:strokeWidth'):
+ svgPath.attributes['stroke-width'] = vdPath.attributes['android:strokeWidth'].value
+ if vdPath.hasAttribute('android:strokeColor'):
+ svgPath.attributes['stroke'] = vdPath.attributes['android:strokeColor'].value
+ svgContainer.appendChild(svgPath);
+
+# define the function which converts a vector drawable to a svg
+def convertVd(vdFilePath):
+
+ # create svg xml
+ svgXml = Document()
+ svgNode = svgXml.createElement('svg')
+ svgXml.appendChild(svgNode);
+
+ # open vector drawable
+ vdXml = parse(vdFilePath)
+ vdNode = vdXml.getElementsByTagName('vector')[0]
+
+ # setup basic svg info
+ svgNode.attributes['xmlns'] = 'http://www.w3.org/2000/svg'
+ svgNode.attributes['width'] = vdNode.attributes['android:viewportWidth'].value
+ svgNode.attributes['height'] = vdNode.attributes['android:viewportHeight'].value
+ svgNode.attributes['viewBox'] = '0 0 {} {}'.format(vdNode.attributes['android:viewportWidth'].value, vdNode.attributes['android:viewportHeight'].value)
+
+ # iterate through all groups
+ vdGroups = vdXml.getElementsByTagName('group')
+ for vdGroup in vdGroups:
+
+ # create the group
+ svgGroup = svgXml.createElement('g')
+
+ # setup attributes of the group
+ if vdGroup.hasAttribute('android:translateX'):
+ svgGroup.attributes['transform'] = 'translate({},{})'.format(vdGroup.attributes['android:translateX'].value,vdGroup.attributes['android:translateY'].value)
+
+ # iterate through all paths inside the group
+ convertPaths(vdGroup,svgGroup,svgXml)
+
+ # append the group to the svg node
+ svgNode.appendChild(svgGroup);
+
+ # iterate through all svg-level paths
+ convertPaths(vdNode,svgNode,svgXml)
+
+ # write xml to file
+ svgXml.writexml(open(vdFilePath + '.svg', 'w'),indent="",addindent=" ",newl='\n')
+
+# script begin
+if len(sys.argv)>1:
+ iterArgs = iter(sys.argv)
+ next(iterArgs) #skip the first entry (it's the name of the script)
+ for arg in iterArgs:
+ convertVd(arg)
+else:
+ print("You have to pass me something")
+ sys.exit()
diff --git a/tools/generate-legacy-icons.sh b/tools/generate-legacy-icons.sh
new file mode 100755
index 0000000000..9bf14e8093
--- /dev/null
+++ b/tools/generate-legacy-icons.sh
@@ -0,0 +1,26 @@
+#!/bin/sh -e
+
+# Generate SDK <26 icons for android
+# requires imagemagick, inkscape
+
+ROOTDIR=$PWD
+
+cd src/android/app/src/main
+
+pushd res/drawable
+# convert vector to svg--needed to generate launcher png
+cp ic_yuzu_icon.xml tmp
+
+python3 $ROOTDIR/tools/VectorDrawable2Svg.py tmp
+
+inkscape -w 768 -h 768 tmp.svg -o ic_tmp.png
+magick ic_icon_bg_orig.png -resize 512x512 bg_tmp.png
+
+magick bg_tmp.png -strip -type TrueColor -depth 8 -colorspace sRGB -color-matrix "1 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0" bg_tmp_rgb.png
+magick -verbose bg_tmp_rgb.png ic_tmp.png -gravity center -composite -colorspace sRGB ic_launcher.png
+echo
+
+rm *tmp*
+popd
+
+# Add legacy here when legacy gets merged