merge generating icons from SVG source
This commit is contained in:
parent
7a6b987a50
commit
f2c9e67fbc
11 changed files with 1233 additions and 33 deletions
6
.gitignore
vendored
6
.gitignore
vendored
|
|
@ -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
|
||||
|
|
|
|||
28
SConstruct
28
SConstruct
|
|
@ -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
17
admin/SConscript
Normal 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
178
admin/render-icon.py
Executable 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
219
admin/rsvg-convert.c
Normal 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;
|
||||
}
|
||||
|
||||
|
|
@ -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)
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
BIN
icons/prerendered/16x16/panel-timeline.png
Normal file
BIN
icons/prerendered/16x16/panel-timeline.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 453 B |
BIN
icons/prerendered/32x32/panel-viewer.png
Normal file
BIN
icons/prerendered/32x32/panel-viewer.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.5 KiB |
732
icons/svg/tool-arrow.svg
Normal file
732
icons/svg/tool-arrow.svg
Normal 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 |
|
|
@ -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"
|
||||
|
|
|
|||
Loading…
Reference in a new issue