merge generating icons from SVG source

This commit is contained in:
Fischlurch 2008-09-05 05:54:14 +02:00
parent 7a6b987a50
commit f2c9e67fbc
11 changed files with 1233 additions and 33 deletions

6
.gitignore vendored
View file

@ -2,10 +2,11 @@
*~
*.tar.*
.[^.]*
*.o
*.os
*.gch
,valgrind.log*
admin/scons/*.pyc
*.pyc
optcache
Makefile.in
build/*
@ -13,5 +14,8 @@ bin/*
autom4te.cache/*
scripts/*
configure
config.log
aclocal.m4
semantic.cache
wiki/backups/*
doc/devel/draw/*.png

View file

@ -37,6 +37,7 @@ BINDIR = 'bin'
TESTDIR = 'tests'
ICONDIR = 'icons'
VERSION = '0.1+pre.01'
SVGRENDERER = 'admin/render-icon'
#-----------------------------------Configuration
# NOTE: scons -h for help.
@ -68,7 +69,7 @@ def setupBasicEnvironment():
, CCFLAGS='-Wall ' # -fdiagnostics-show-option
)
RegisterPrecompiledHeader_Builder(env)
RegisterIcon_Builder(env,SVGRENDERER)
handleNoBugSwitches(env)
env.Append(CPPDEFINES = '_GNU_SOURCE')
@ -225,6 +226,10 @@ def configurePlatform(env):
if not conf.CheckPkgConfig('gtkmm-2.4', 2.8):
print 'Unable to configure GTK--, exiting.'
Exit(1)
if not conf.CheckPkgConfig('glibmm-2.4', '2.16'):
print 'Unable to configure Lib glib--, exiting.'
Exit(1)
if not conf.CheckPkgConfig('cairomm-1.0', 0.6):
print 'Unable to configure Cairo--, exiting.'
@ -234,6 +239,10 @@ def configurePlatform(env):
print 'Unable to configure the GNOME DevTool Library, exiting.'
Exit(1)
if not conf.CheckPkgConfig('librsvg-2.0', '2.18.1'):
print 'Need rsvg Library for rendering icons.'
Exit(1)
if not conf.CheckPkgConfig('xv'): Exit(1)
# if not conf.CheckPkgConfig('xext'): Exit(1)
# if not conf.CheckPkgConfig('sm'): Exit(1)
@ -281,26 +290,29 @@ def defineBuildTargets(env, artifacts):
+ env.StaticLibrary('$BINDIR/lumi.la', objlib)
)
# use PCH to speed up building
precomp = ( env.PrecompiledHeader('$SRCDIR/pre')
)
env.Depends(objproc, precomp)
env.Depends(objlib, precomp)
artifacts['lumiera'] = env.Program('$BINDIR/lumiera', ['$SRCDIR/main.cpp']+ core )
artifacts['plugins'] = env.SharedLibrary('$BINDIR/lumiera-plugin', objplug)
# the Lumiera GTK GUI
envgtk = env.Clone().mergeConf(['gtkmm-2.4','cairomm-1.0','gdl-1.0','xv','xext','sm'])
envgtk = env.Clone().mergeConf(['gtkmm-2.4','cairomm-1.0','gdl-1.0','librsvg-2.0','xv','xext','sm'])
objgui = srcSubtree(envgtk,'$SRCDIR/gui')
# render and install Icons
vector_icon_dir = env.subst('$ICONDIR/svg')
prerendered_icon_dir = env.subst('$ICONDIR/prerendered')
artifacts['icons'] = ( [env.IconRender(f) for f in scanSubtree(vector_icon_dir, ['*.svg'])]
+ [env.IconCopy(f) for f in scanSubtree(prerendered_icon_dir, ['*.png'])]
)
artifacts['lumigui'] = ( envgtk.Program('$BINDIR/lumigui', objgui + core)
+ env.Install('$BINDIR', env.Glob('$ICONDIR/*.png'))
+ env.Install('$BINDIR', env.Glob('$SRCDIR/gui/*.rc'))
+ artifacts['icons']
)
# call subdir SConscript(s) for independent components
SConscript(dirs=[SRCDIR+'/tool'], exports='env artifacts core')
SConscript(dirs=['admin'], exports='env envgtk artifacts core')
SConscript(dirs=[TESTDIR], exports='env artifacts core')

17
admin/SConscript Normal file
View file

@ -0,0 +1,17 @@
# -*- python -*-
##
## SConscript - SCons buildscript for helper tools (called by SConstruct)
##
Import('env','envgtk','artifacts','core')
vgsuppr = env.Program('#$BINDIR/vgsuppression',['vgsuppression.c']+core)
rsvg = envgtk.Program('#$BINDIR/rsvg-convert','rsvg-convert.c')
artifacts['tools'] += [ vgsuppr ## for supressing false valgrind alarms
+ rsvg ## for rendering SVG icons (uses librsvg)
]
# Rendering the SVG Icons depends on rsvg-convert
env.Depends(artifacts['icons'], rsvg)

178
admin/render-icon.py Executable file
View file

@ -0,0 +1,178 @@
#!/usr/bin/python
# render-icons.py - Icon rendering utility script
#
# Copyright (C) Lumiera.org
# 2008, Joel Holdsworth <joel@airwebreathe.org.uk>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 2 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
import sys
import getopt
from xml.dom import minidom
import os
import shutil
#svgDir = "svg"
#prerenderedDir = "prerendered"
inkscapePath = "/usr/bin/inkscape"
rsvgPath = "./rsvg-convert"
artworkLayerPrefix = "artwork:"
def createDirectory( name ):
if os.path.exists(name) == False:
os.mkdir(name)
def copyMergeDirectory( src, dst ):
listing = os.listdir(src)
for file_name in listing:
src_file_path = os.path.join(src, file_name)
dst_file_path = os.path.join(dst, file_name)
shutil.copyfile(src_file_path, dst_file_path)
def getDocumentSize( svg_element ):
width = float(svg_element.getAttribute("width"))
height = float(svg_element.getAttribute("height"))
return [width, height]
def findChildLayerElement( parent_element ):
for node in parent_element.childNodes:
if node.nodeType == minidom.Node.ELEMENT_NODE:
if node.tagName == "g":
if node.getAttribute("inkscape:groupmode") == "layer":
return node
return None
def parsePlateLayer( layer ):
rectangles = []
for node in layer.childNodes:
if node.nodeType == minidom.Node.ELEMENT_NODE:
if node.tagName == "rect":
x = float(node.getAttribute("x"))
y = float(node.getAttribute("y"))
width = float(node.getAttribute("width"))
height = float(node.getAttribute("height"))
rectangles.append([x, y, width, height])
return rectangles
def parseSVG( file_path ):
print "Parsing " + file_path
svgdoc = minidom.parse(file_path)
for root_node in svgdoc.childNodes:
if root_node.nodeType == minidom.Node.ELEMENT_NODE:
if root_node.tagName == "svg":
size = getDocumentSize( root_node )
layer = findChildLayerElement( root_node )
if layer != None:
layer_name = layer.getAttribute("inkscape:label")
if layer_name[:len(artworkLayerPrefix)] == artworkLayerPrefix:
artwork_name = layer_name[len(artworkLayerPrefix):]
plate = findChildLayerElement( layer )
if plate != None:
return artwork_name, size, parsePlateLayer( plate )
return None
def renderSvgInkscape(file_path, out_dir, artwork_name, rectangle, doc_size):
# Calculate the rendering rectangle
x1 = rectangle[0]
y1 = doc_size[1] - rectangle[1] - rectangle[3]
x2 = x1 + rectangle[2]
y2 = y1 + rectangle[3]
# Call Inkscape to do the render
os.spawnlp(os.P_WAIT, inkscapePath, inkscapePath,
file_path,
"-z",
"-a %g:%g:%g:%g" % (x1, y1, x2, y2),
"-w %g" % (rectangle[2]), "-h %g" % (rectangle[3]),
"--export-png=" + os.path.join(out_dir, "%gx%g/%s.png" % (rectangle[2], rectangle[3], artwork_name)))
def renderSvgRsvg(file_path, out_dir, artwork_name, rectangle, doc_size):
# Prepare a Cairo context
width = int(rectangle[2])
height = int(rectangle[3])
if not os.path.exists(rsvgPath):
print "Error: executable %s not found." % rsvgPath
os.spawnlp(os.P_WAIT, rsvgPath, rsvgPath,
"--source-rect=%g:%g:%g:%g" % (rectangle[0], rectangle[1], rectangle[2], rectangle[3]),
"--output=" + os.path.join(out_dir, "%gx%g/%s.png" % (rectangle[2], rectangle[3], artwork_name)),
file_path)
def renderSvgIcon(file_path, out_dir):
artwork_name, doc_size, rectangles = parseSVG(file_path)
for rectangle in rectangles:
renderSvgRsvg(file_path, out_dir, artwork_name, rectangle, doc_size)
def getTargetNames(file_path):
"""get a list of target names to be rendered from the given source SVG
usable to setup the build targets for SCons
"""
artwork_name, _ , rectangles = parseSVG(file_path)
return ["%gx%g/%s.png" % (rectangle[2], rectangle[3], artwork_name) for rectangle in rectangles ]
#def renderSvgIcons():
# listing = os.listdir(svgDir)
# for file_path in listing:
# [root, extension] = os.path.splitext(file_path)
# if extension.lower() == ".svg":
# renderSvgIcon(os.path.join(svgDir, file_path))
#def copyPrerenderedIcons():
# listing = os.listdir(prerenderedDir)
# for list_item in listing:
# src_dir = os.path.join(prerenderedDir, list_item)
# copyMergeDirectory(src_dir, list_item)
def printHelp():
print "render-icon.py SRCFILE.svg TARGETDIR"
print "An icon rendering utility script for lumiera"
def parseArguments(argv):
optlist, args = getopt.getopt(argv, "")
if len(args) == 2:
return args[0], args[1]
printHelp()
return None, None
def main(argv):
in_path, out_dir = parseArguments(argv)
if in_path == None or out_dir == None:
return
if os.path.exists(out_dir) == False:
print "Directory not found: " + out_dir
return
# Create the icons folders
createDirectory(os.path.join(out_dir, "48x48"))
createDirectory(os.path.join(out_dir, "32x32"))
createDirectory(os.path.join(out_dir, "24x24"))
createDirectory(os.path.join(out_dir, "22x22"))
createDirectory(os.path.join(out_dir, "16x16"))
renderSvgIcon(in_path, out_dir)
# Copy in prerendered icons
#copyPrerenderedIcons()
if __name__=="__main__":
main(sys.argv[1:])

219
admin/rsvg-convert.c Normal file
View file

@ -0,0 +1,219 @@
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*-
rsvg-convert.c: Command line utility for exercising rsvg with cairo.
Copyright (C) 2005 Red Hat, Inc.
Copyright (C) 2005 Dom Lachowicz <cinamod@hotmail.com>
Copyright (C) 2005 Caleb Moore <c.moore@student.unsw.edu.au>
Copyright (C) 2008 Joel Holdsworth <joel@airwebreathe.org.uk>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this program; if not, write to the
Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
Authors: Carl Worth <cworth@cworth.org>,
Caleb Moore <c.moore@student.unsw.edu.au>,
Dom Lachowicz <cinamod@hotmail.com>,
Joel Holdsworth <joel@airwebreathe.org.uk>
*/
#ifndef N_
#define N_(X) X
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <librsvg-2/librsvg/rsvg.h>
#include <librsvg-2/librsvg/rsvg-cairo.h>
#ifdef CAIRO_HAS_PS_SURFACE
#include <cairo-ps.h>
#endif
#ifdef CAIRO_HAS_PDF_SURFACE
#include <cairo-pdf.h>
#endif
#ifdef CAIRO_HAS_SVG_SURFACE
#include <cairo-svg.h>
#endif
#ifndef _
#define _(X) X
#endif
struct RsvgSizeCallbackData {
gint width;
gint height;
};
struct RsvgSourceRectangle {
double left;
double top;
double width;
double height;
};
static void
display_error (GError * err)
{
if (err) {
g_print ("%s", err->message);
g_error_free (err);
}
}
static void
rsvg_cairo_size_callback (int *width, int *height, gpointer data)
{
RsvgDimensionData *dimensions = data;
*width = dimensions->width;
*height = dimensions->height;
}
static cairo_status_t
rsvg_cairo_write_func (void *closure, const unsigned char *data, unsigned int length)
{
fwrite (data, 1, length, (FILE *) closure);
return CAIRO_STATUS_SUCCESS;
}
int
main (int argc, char **argv)
{
GOptionContext *g_option_context;
int width = -1;
int height = -1;
char *source_rect_string = NULL;
char *output = NULL;
GError *error = NULL;
char *filename = NULL;
char **args = NULL;
RsvgHandle *rsvg;
cairo_surface_t *surface = NULL;
cairo_t *cr = NULL;
RsvgDimensionData dimensions;
FILE *output_file = stdout;
struct RsvgSourceRectangle source_rect = {0, 0, 0, 0};
GOptionEntry options_table[] = {
{"width", 'w', 0, G_OPTION_ARG_INT, &width,
N_("width [optional; defaults to the SVG's width]"), N_("<int>")},
{"height", 'h', 0, G_OPTION_ARG_INT, &height,
N_("height [optional; defaults to the SVG's height]"), N_("<int>")},
{"source-rect", 'r', 0, G_OPTION_ARG_STRING, &source_rect_string,
N_("source rectangle [optional; defaults to rectangle of the SVG document]"), N_("left:top:width:height")},
{"output", 'o', 0, G_OPTION_ARG_STRING, &output,
N_("output filename"), NULL},
{G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &args, NULL, N_("FILE")},
{NULL}
};
g_thread_init(NULL);
g_option_context = g_option_context_new (_("- SVG Converter"));
g_option_context_add_main_entries (g_option_context, options_table, NULL);
g_option_context_set_help_enabled (g_option_context, TRUE);
if (!g_option_context_parse (g_option_context, &argc, &argv, &error)) {
display_error (error);
exit (1);
}
g_option_context_free (g_option_context);
if (output != NULL) {
output_file = fopen (output, "wb");
if (!output_file) {
fprintf (stderr, _("Error saving to file: %s\n"), output);
exit (1);
}
}
if (args[0] != NULL) {
filename = args[0];
}
/* Parse the source rect */
if(source_rect_string != NULL) {
const int n = sscanf(source_rect_string, "%lg:%lg:%lg:%lg",
&source_rect.left, &source_rect.top,
&source_rect.width, &source_rect.height);
if(n != 4 || source_rect.width <= 0.0 || source_rect.height < 0.0) {
fprintf (stderr, _("Invalid source rect: %s\n"), source_rect_string);
exit(1);
}
}
rsvg_init ();
rsvg = rsvg_handle_new_from_file (filename, &error);
if (!rsvg) {
fprintf (stderr, _("Error reading SVG:"));
display_error (error);
fprintf (stderr, "\n");
exit (1);
}
/* if the user did not specify a source rectangle, get the page size from the SVG */
if(source_rect_string == NULL) {
rsvg_handle_set_size_callback (rsvg, rsvg_cairo_size_callback, &dimensions, NULL);
source_rect.left = 0;
source_rect.top = 0;
source_rect.width = dimensions.width;
source_rect.height = dimensions.height;
}
rsvg_handle_get_dimensions (rsvg, &dimensions);
if(width != -1 && height != -1) {
dimensions.width = width;
dimensions.height = height;
} else if(source_rect_string != NULL) {
dimensions.width = source_rect.width;
dimensions.height = source_rect.height;
}
surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
dimensions.width, dimensions.height);
cr = cairo_create (surface);
cairo_translate(cr, -source_rect.left, -source_rect.top);
if(width != -1 && height != -1 && source_rect_string != NULL) {
cairo_scale(cr, (double)dimensions.width / (double)source_rect.width,
(double)dimensions.height / (double)source_rect.height);
}
rsvg_handle_render_cairo (rsvg, cr);
cairo_surface_write_to_png_stream (surface, rsvg_cairo_write_func, output_file);
g_object_unref (G_OBJECT (rsvg));
cairo_destroy (cr);
cairo_surface_destroy (surface);
fclose (output_file);
rsvg_term ();
return 0;
}

View file

@ -28,6 +28,8 @@ import fnmatch
import re
import tarfile
from SCons.Action import Action
#
@ -58,13 +60,13 @@ def srcSubtree(env,tree,isShared=False,builder=None, **args):
else:
builder = lambda f: env.Object(f, **args)
return [builder(f) for f in scanSrcSubtree(root)]
return [builder(f) for f in scanSubtree(root)]
SRCPATTERNS = ['*.c','*.cpp','*.cc']
def scanSrcSubtree(roots):
def scanSubtree(roots, patterns=SRCPATTERNS):
""" first expand (possible) wildcards and filter out non-dirs.
Then scan the given subtree for source filesnames
(python generator function)
@ -73,7 +75,7 @@ def scanSrcSubtree(roots):
for (dir,_,files) in os.walk(root):
if dir.startswith('./'):
dir = dir[2:]
for p in SRCPATTERNS:
for p in patterns:
for f in fnmatch.filter(files, p):
yield os.path.join(dir,f)
@ -102,22 +104,50 @@ def filterNodes(nlist, removeName=None):
return filter(predicate, nlist)
def RegisterPrecompiledHeader_Builder(env):
""" Registeres an Custom Builder for generating a precompiled Header.
Note you should define a dependency to the PCH file
"""
def genCmdline(source, target, env, for_signature):
return '$CXXCOM -x c++-header %s' % source[0]
def fixSourceDependency(target, source, env):
print "precompiled header: %s --> %s" % (source[0],target[0])
return (target, source)
def getDirname(dir):
""" extract directory name without leading path """
dir = os.path.realpath(dir)
if not os.path.isdir(dir):
dir,_ = os.path.split(dir)
_, name = os.path.split(dir)
return name
gchBuilder = env.Builder( generator = genCmdline
, emitter = fixSourceDependency
, suffix = '.gch'
, src_suffix = '.hpp'
)
env.Append(BUILDERS = {'PrecompiledHeader' : gchBuilder})
def RegisterIcon_Builder(env, renderer):
""" Registeres Custom Builders for generating and installing Icons.
Additionally you need to build the tool (rsvg-convert.c)
used to generate png from the svg source using librsvg.
"""
renderer = __import__(renderer) # load python script for invoking the render
renderer.rsvgPath = env.subst("$BINDIR/rsvg-convert")
def invokeRenderer(target, source, env):
source = str(source[0])
targetdir = env.subst("$BINDIR")
renderer.main([source,targetdir])
return 0
def createIconTargets(target,source,env):
""" parse the SVG to get the target file names """
source = str(source[0])
targetdir = os.path.basename(str(target[0]))
targetfiles = renderer.getTargetNames(source) # parse SVG
return (["$BINDIR/%s" % name for name in targetfiles], source)
def IconCopy(env, source):
"""Copy icon to corresponding icon dir. """
subdir = getDirname(source)
return env.Install("$BINDIR/%s" % subdir, source)
buildIcon = env.Builder( action = Action(invokeRenderer, "rendering Icon: $SOURCE --> $TARGETS")
, single_source = True
, emitter = createIconTargets
)
env.Append(BUILDERS = {'IconRender' : buildIcon})
env.AddMethod(IconCopy)

View file

@ -81,6 +81,12 @@ class LumieraEnvironment(Environment):
"""
pattern = self.subst(pattern)
return glob.glob(pattern)
def AddMethod (self, function):
""" temporary workaround; newer versions of SCons provide this as a global function """
self.__dict__[function.__name__] = function.__get__(self)
class LumieraConfigContext(SConf):

Binary file not shown.

After

Width:  |  Height:  |  Size: 453 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

732
icons/svg/tool-arrow.svg Normal file
View file

@ -0,0 +1,732 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="150"
height="100"
id="svg2"
sodipodi:version="0.32"
inkscape:version="0.46"
version="1.0"
sodipodi:docname="tool-arrow.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape">
<defs
id="defs4">
<linearGradient
inkscape:collect="always"
id="linearGradient10554">
<stop
style="stop-color:white;stop-opacity:1;"
offset="0"
id="stop10556" />
<stop
style="stop-color:white;stop-opacity:0;"
offset="1"
id="stop10558" />
</linearGradient>
<linearGradient
id="linearGradient124">
<stop
style="stop-color:#ffffff;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop125" />
<stop
style="stop-color:silver;stop-opacity:1;"
offset="1"
id="stop126" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient8773">
<stop
style="stop-color:black;stop-opacity:0.3137255"
offset="0"
id="stop8775" />
<stop
style="stop-color:black;stop-opacity:0;"
offset="1"
id="stop8777" />
</linearGradient>
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
id="perspective10" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient124"
id="linearGradient14467"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.559542,1.292457,-0.3231142,0.1398855,-29.871557,-250.82036)"
x1="253.75711"
y1="-129.52815"
x2="252.00447"
y2="-135.47408" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient124"
id="radialGradient14469"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.5869533,0,0,0.8448423,-29.87156,-250.82036)"
cx="307.7507"
cy="361.47824"
fx="307.7507"
fy="361.47824"
r="12.509617" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient10554"
id="linearGradient14471"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.7041896,0,0,0.7041896,-18.406429,-249.43017)"
x1="240.9062"
y1="425.18195"
x2="248.28683"
y2="437.96558" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient10554"
id="linearGradient14473"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-137.34366,-352.57235)"
x1="240.9062"
y1="425.18195"
x2="248.28683"
y2="437.96558" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient124"
id="linearGradient14475"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2,0,0,0.5,-20.55174,-11.55357)"
x1="253.75711"
y1="-129.52815"
x2="252.00447"
y2="-135.47408" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient124"
id="radialGradient14477"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.833516,0,0,1.199737,2.4375,-23.45032)"
cx="307.7507"
cy="361.47824"
fx="307.7507"
fy="361.47824"
r="12.509617" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient8773"
id="radialGradient14479"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.234973,0,18.5877)"
cx="-57.850174"
cy="24.296782"
fx="-58.028885"
fy="27.01318"
r="8.087534" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient10554"
id="linearGradient14481"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.125001,0,0,1.125001,-202.51184,-408.14432)"
x1="240.9062"
y1="425.18195"
x2="248.28683"
y2="437.96558" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient124"
id="radialGradient14483"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9377063,0,0,1.3497053,-220.82833,-410.36528)"
cx="307.7507"
cy="361.47824"
fx="307.7507"
fy="361.47824"
r="12.509617" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient124"
id="linearGradient14485"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.8939146,2.0648066,-0.5162016,0.2234786,-220.82833,-410.36529)"
x1="253.75711"
y1="-129.52815"
x2="252.00447"
y2="-135.47408" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient8773"
id="radialGradient14487"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.234973,0,18.5877)"
cx="-57.850174"
cy="24.296782"
fx="-58.028885"
fy="27.01318"
r="8.087534" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient10554"
id="linearGradient14489"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-144.34366,-395.57235)"
x1="240.9062"
y1="425.18195"
x2="248.28683"
y2="437.96558" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient124"
id="radialGradient14491"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.6670334,0,0,2.399476,-491.25039,-801.09382)"
cx="307.7507"
cy="361.47824"
fx="307.7507"
fy="361.47824"
r="12.509617" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient124"
id="linearGradient14493"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.5891814,3.6707672,-0.9176918,0.3972953,-491.25038,-801.09383)"
x1="253.75711"
y1="-129.52815"
x2="252.00447"
y2="-135.47408" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient8773"
id="radialGradient14495"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.234973,0,18.5877)"
cx="-57.850174"
cy="24.296782"
fx="-58.028885"
fy="27.01318"
r="8.087534" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient8773"
id="radialGradient7954"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.234973,0,18.5877)"
cx="-57.850174"
cy="24.296782"
fx="-58.028885"
fy="27.01318"
r="8.087534" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient10554"
id="linearGradient7960"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.3333333,0,0,1.3333333,-220.12487,-531.76312)"
x1="240.9062"
y1="425.18195"
x2="248.28683"
y2="437.96558" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient124"
id="radialGradient7963"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.1113546,0,0,1.5996493,-241.83329,-534.39538)"
cx="307.7507"
cy="361.47824"
fx="307.7507"
fy="361.47824"
r="12.509617" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient124"
id="linearGradient7966"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.0594534,2.447176,-0.611794,0.2648633,-241.83329,-534.39539)"
x1="253.75711"
y1="-129.52815"
x2="252.00447"
y2="-135.47408" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient8773"
id="radialGradient8746"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.234973,0,18.5877)"
cx="-57.850174"
cy="24.296782"
fx="-58.028885"
fy="27.01318"
r="8.087534" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient124"
id="linearGradient8748"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.0594534,2.447176,-0.611794,0.2648633,-241.83329,-534.39539)"
x1="253.75711"
y1="-129.52815"
x2="252.00447"
y2="-135.47408" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient124"
id="radialGradient8750"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.1113546,0,0,1.5996493,-241.83329,-534.39538)"
cx="307.7507"
cy="361.47824"
fx="307.7507"
fy="361.47824"
r="12.509617" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient10554"
id="linearGradient8752"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.3333333,0,0,1.3333333,-220.12487,-531.76312)"
x1="240.9062"
y1="425.18195"
x2="248.28683"
y2="437.96558" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient10554"
id="linearGradient8755"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.3333333,0,0,1.3333333,-220.1248,-531.60971)"
x1="240.9062"
y1="425.18195"
x2="248.28683"
y2="437.96558" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient124"
id="radialGradient8758"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.1113546,0,0,1.5996493,-241.83322,-534.24197)"
cx="307.7507"
cy="361.47824"
fx="307.7507"
fy="361.47824"
r="12.509617" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient124"
id="linearGradient8761"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.0594534,2.447176,-0.611794,0.2648633,-241.83322,-534.24198)"
x1="253.75711"
y1="-129.52815"
x2="252.00447"
y2="-135.47408" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient124"
id="linearGradient8771"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.0594534,2.447176,-0.611794,0.2648633,-241.83322,-534.24198)"
x1="253.75711"
y1="-129.52815"
x2="252.00447"
y2="-135.47408" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient124"
id="radialGradient8773"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.1113546,0,0,1.5996493,-241.83322,-534.24197)"
cx="307.7507"
cy="361.47824"
fx="307.7507"
fy="361.47824"
r="12.509617" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient10554"
id="linearGradient8775"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.3333333,0,0,1.3333333,-220.1248,-531.60971)"
x1="240.9062"
y1="425.18195"
x2="248.28683"
y2="437.96558" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient10554"
id="linearGradient8778"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.3333333,0,0,1.3333333,-220.3124,-531.60971)"
x1="240.9062"
y1="425.18195"
x2="248.28683"
y2="437.96558" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient124"
id="radialGradient8781"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.1113546,0,0,1.5996493,-242.02082,-534.24197)"
cx="307.7507"
cy="361.47824"
fx="307.7507"
fy="361.47824"
r="12.509617" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient124"
id="linearGradient8784"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.0594534,2.447176,-0.611794,0.2648633,-242.02082,-534.24198)"
x1="253.75711"
y1="-129.52815"
x2="252.00447"
y2="-135.47408" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient8773"
id="radialGradient8830"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.234973,0,18.5877)"
cx="-57.850174"
cy="24.296782"
fx="-58.028885"
fy="27.01318"
r="8.087534" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient124"
id="linearGradient8832"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.5891814,3.6707672,-0.9176918,0.3972953,-491.25038,-801.09383)"
x1="253.75711"
y1="-129.52815"
x2="252.00447"
y2="-135.47408" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient124"
id="radialGradient8834"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.6670334,0,0,2.399476,-491.25039,-801.09382)"
cx="307.7507"
cy="361.47824"
fx="307.7507"
fy="361.47824"
r="12.509617" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient10554"
id="linearGradient8836"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-144.34366,-395.57235)"
x1="240.9062"
y1="425.18195"
x2="248.28683"
y2="437.96558" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient8773"
id="radialGradient8838"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.234973,0,18.5877)"
cx="-57.850174"
cy="24.296782"
fx="-58.028885"
fy="27.01318"
r="8.087534" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient124"
id="linearGradient8840"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.0594534,2.447176,-0.611794,0.2648633,-242.02082,-534.24198)"
x1="253.75711"
y1="-129.52815"
x2="252.00447"
y2="-135.47408" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient124"
id="radialGradient8842"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.1113546,0,0,1.5996493,-242.02082,-534.24197)"
cx="307.7507"
cy="361.47824"
fx="307.7507"
fy="361.47824"
r="12.509617" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient10554"
id="linearGradient8844"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.3333333,0,0,1.3333333,-220.3124,-531.60971)"
x1="240.9062"
y1="425.18195"
x2="248.28683"
y2="437.96558" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient10554"
id="linearGradient8855"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-144.34366,-395.57235)"
x1="240.9062"
y1="425.18195"
x2="248.28683"
y2="437.96558" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient124"
id="radialGradient8858"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.6670334,0,0,2.399476,-491.25039,-801.09382)"
cx="307.7507"
cy="361.47824"
fx="307.7507"
fy="361.47824"
r="12.509617" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient124"
id="linearGradient8861"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.5891814,3.6707672,-0.9176918,0.3972953,-491.25038,-801.09383)"
x1="253.75711"
y1="-129.52815"
x2="252.00447"
y2="-135.47408" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
gridtolerance="10000"
guidetolerance="10"
objecttolerance="10"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="5.6568543"
inkscape:cx="64.614973"
inkscape:cy="46.534319"
inkscape:document-units="px"
inkscape:current-layer="layer3"
showgrid="true"
inkscape:snap-nodes="false"
inkscape:snap-bbox="true"
inkscape:snap-global="true"
showguides="true"
inkscape:guide-bbox="true"
inkscape:window-width="1679"
inkscape:window-height="977"
inkscape:window-x="1281"
inkscape:window-y="48">
<inkscape:grid
type="xygrid"
id="grid13478"
visible="true"
enabled="true"
spacingx="0.5px"
spacingy="0.5px"
empspacing="2" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:groupmode="layer"
id="layer3"
inkscape:label="artwork:tool-arrow"
style="display:inline">
<path
transform="matrix(0.989175,0,0,1.31555,167.22388,56.536408)"
d="M -49.76264,24.296782 A 8.087534,1.9003495 0 1 1 -65.937708,24.296782 A 8.087534,1.9003495 0 1 1 -49.76264,24.296782 z"
sodipodi:ry="1.9003495"
sodipodi:rx="8.087534"
sodipodi:cy="24.296782"
sodipodi:cx="-57.850174"
id="path8771"
style="opacity:0.7;fill:url(#radialGradient14479);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
sodipodi:type="arc" />
<g
style="display:inline"
id="g79"
transform="translate(-156.06247,-331.09622)">
<path
sodipodi:nodetypes="cccccccc"
style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="M 258.57812,401.60617 L 258.57812,417.04968 L 263.125,414.04968 L 265.90625,420.48718 L 268.1875,419.48718 L 265.46875,413.20593 L 269.56185,412.76843 L 258.57812,401.60617 z"
id="rect16" />
<path
sodipodi:nodetypes="ccccccccc"
id="rect91"
d="M 481.01295,-78.954349 L 484.11717,-79.645589 L 484.52504,-78.954349 L 491.01295,-78.954349 L 491.01998,-77.463121 L 484.28372,-77.462474 L 483.9729,-76.666406 L 481.00254,-77.462159 L 481.01295,-78.954349 z"
style="fill:url(#linearGradient14475);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.24999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
transform="matrix(0.397295,0.917691,-0.917691,0.397295,0,0)" />
<path
style="fill:url(#radialGradient14477);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
d="M 268.45834,412.37995 L 264.03447,412.8429 L 259.08804,416.09773 L 259.07888,402.85299 L 268.45834,412.37995 z"
id="path15"
sodipodi:nodetypes="ccccc" />
</g>
<path
style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient14473);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
d="M 111.38437,80.978458 L 107.31977,81.366268 L 103.50867,84.146458 L 103.49998,72.973838 L 111.38437,80.978458 z"
id="path7947"
sodipodi:nodetypes="ccccc" />
<g
style="display:inline"
id="g14435"
transform="translate(-22.000014,29.000022)">
<path
sodipodi:nodetypes="cccccccc"
style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="M 150.5,48.5 L 150.5,59.5 L 153.5,57.5 L 155.5,61.5 L 157.5,60.5 L 155.5,56.5 L 158.5,56.5 L 150.5,48.5 z"
id="path14451" />
<path
sodipodi:nodetypes="ccccccccc"
id="path14453"
d="M 154.008,54.448252 L 155.59103,55.96514 L 155.06871,56.768088 L 156.83361,60.279957 L 155.71008,60.83563 L 154.0092,57.369925 L 153.22923,57.090442 L 153.04079,54.858996 L 154.008,54.448252 z"
style="fill:url(#linearGradient14467);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.24999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" />
<path
style="fill:url(#radialGradient14469);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
d="M 157.29014,55.997498 L 154.8557,55.999843 L 151.00417,58.559717 L 151.0033,49.735141 L 157.29014,55.997498 z"
id="path14455"
sodipodi:nodetypes="ccccc" />
<path
sodipodi:nodetypes="ccccc"
id="path14457"
d="M 156.09792,55.503506 L 154.63636,55.542223 L 151.51178,57.639513 L 151.50565,50.893522 L 156.09792,55.503506 z"
style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient14471);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
</g>
<g
inkscape:groupmode="layer"
id="layer4"
inkscape:label="plate#1"
style="display:none">
<rect
y="69"
x="97"
height="22"
width="22"
id="rect14465"
style="fill:#000000;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:3.7750001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
<rect
style="fill:#000000;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:3.7750001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;display:inline"
id="rect72"
width="24"
height="24"
x="96"
y="68" />
<rect
y="76"
x="124"
height="16"
width="16"
id="rect14403"
style="fill:#000000;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:3.7750001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
<rect
y="60"
x="60"
height="32"
width="32"
id="rect7952"
style="fill:#000000;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:3.7750001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
<rect
style="fill:#000000;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:3.7750001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;display:inline"
id="rect14367"
width="48"
height="48"
x="8"
y="44" />
</g>
<g
style="display:inline"
id="g8787"
transform="translate(-31,31)">
<path
transform="matrix(1.3189,0,0,1.7540667,185.96524,13.868621)"
d="M -49.76264,24.296782 A 8.087534,1.9003495 0 1 1 -65.937708,24.296782 A 8.087534,1.9003495 0 1 1 -49.76264,24.296782 z"
sodipodi:ry="1.9003495"
sodipodi:rx="8.087534"
sodipodi:cy="24.296782"
sodipodi:cx="-57.850174"
id="path7938"
style="opacity:0.7;fill:url(#radialGradient8838);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
sodipodi:type="arc" />
<path
id="path7942"
d="M 99.5,32.5 L 99.5,53.5 L 105.5,49.5 L 109.5,57.5 L 112.5,56 L 108.5,48.5 L 114.5,47.5 L 99.5,32.5 z"
style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
sodipodi:nodetypes="cccccccc" />
<path
style="fill:url(#linearGradient8840);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="M 106.14218,43.762567 L 108.68314,47.878279 L 108.0534,48.743512 L 111.81444,55.783603 L 109.72399,56.828242 L 105.89701,49.207272 L 104.7583,49.248655 L 104.31084,44.540282 L 106.14218,43.762567 z"
id="path7944"
sodipodi:nodetypes="ccccccccc" />
<path
sodipodi:nodetypes="ccccc"
id="path7946"
d="M 113.46659,47.173634 L 106.30247,48.357306 L 100.0002,52.575985 L 99.998595,33.713208 L 113.46659,47.173634 z"
style="fill:url(#radialGradient8842);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient8844);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
d="M 112.42262,46.84474 L 106.10081,47.889164 L 100.50373,51.642958 L 100.52338,34.953163 L 112.42262,46.84474 z"
id="path7948"
sodipodi:nodetypes="ccccc" />
</g>
<path
transform="matrix(1.9783517,0,0,2.6311023,150.44787,21.072802)"
d="M -49.76264,24.296782 A 8.087534,1.9003495 0 1 1 -65.937708,24.296782 A 8.087534,1.9003495 0 1 1 -49.76264,24.296782 z"
sodipodi:ry="1.9003495"
sodipodi:rx="8.087534"
sodipodi:cy="24.296782"
sodipodi:cx="-57.850174"
id="path14357"
style="opacity:0.7;fill:url(#radialGradient8830);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
sodipodi:type="arc" />
<path
id="path14359"
d="M 21.0313,49.019882 L 21.0313,79.906929 L 30.125067,73.906919 L 35.687572,86.781929 L 40.250076,84.781929 L 34.812571,72.219419 L 42.998778,71.344419 L 21.0313,49.019882 z"
style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
sodipodi:nodetypes="cccccccc" />
<path
style="fill:url(#linearGradient8861);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.24999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;display:inline"
d="M 30.994554,65.913749 L 35.187554,71.393389 L 34.416573,72.549189 L 39.58759,84.520119 L 35.94075,86.096749 L 30.602775,73.733639 L 29.099899,73.732579 L 28.247541,67.080319 L 30.994554,65.913749 z"
id="path14361"
sodipodi:nodetypes="ccccccccc" />
<path
sodipodi:nodetypes="ccccc"
id="path14363"
d="M 41.928178,70.962049 L 32.149196,71.998439 L 21.514496,79.013179 L 21.543527,50.266617 L 41.928178,70.962049 z"
style="fill:url(#radialGradient8858);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
<path
style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient8855);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
d="M 40.852205,70.572499 L 31.965383,71.521739 L 22.007218,78.076499 L 22.08452,51.595929 L 40.852205,70.572499 z"
id="path14365"
sodipodi:nodetypes="ccccc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 29 KiB

View file

@ -124,6 +124,8 @@ class "GtkProgressBar" style:highest "lumiera_progressbars"
style "timeline_body"
{
gtkmm__CustomObject_TimelineBody::background = "#7E838B"
gtkmm__CustomObject_TimelineBody::selection = "#2D2D90"
gtkmm__CustomObject_TimelineBody::selection_alpha = 0.5
}
style "timeline_ruler" = "default_base"
@ -137,16 +139,16 @@ style "timeline_ruler" = "default_base"
gtkmm__CustomObject_TimelineRuler::annotation_vert_margin = 0
gtkmm__CustomObject_TimelineRuler::min_division_width = 100
gtkmm__CustomObject_TimelineRuler::mouse_chevron_size = 5
gtkmm__CustomObject_TimelineRuler::selection_chevron_size = 5
gtkmm__CustomObject_TimelineRuler::playback_arrow_colour = "#2D2D90"
gtkmm__CustomObject_TimelineRuler::playback_arrow_alpha = 0.5
gtkmm__CustomObject_TimelineRuler::playback_arrow_size = 10
gtkmm__CustomObject_TimelineRuler::playback_arrow_stem_size = 3
}
style "timeline_header_base" = "default_base"
{
# fg[NORMAL] = { 0.77, 0.77, 0.72 }
# bg[NORMAL] = { 0.18, 0.19, 0.22 }
# bg[ACTIVE] = { 0.20, 0.20, 0.20 }
# bg[PRELIGHT] = { 0.20, 0.20, 0.20 }
# bg[INSENSITIVE] = { 0.20, 0.20, 0.20 }
# bg[SELECTED] = { 0.20, 0.20, 0.20 }
}
class "gtkmm__CustomObject_TimelineBody" style:highest "timeline_body"