summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTavmjong Bah <tavmjong@free.fr>2014-10-10 18:56:07 +0000
committertavmjong-free <tavmjong@free.fr>2014-10-10 18:56:07 +0000
commite18383b3ae2e644cabdcccbbdaf3da850a62e814 (patch)
tree8f3b1f65b387ee84f10d95e274fa68e5f7795ea8
parentAdded background and no border options. (diff)
downloadinkscape-e18383b3ae2e644cabdcccbbdaf3da850a62e814.tar.gz
inkscape-e18383b3ae2e644cabdcccbbdaf3da850a62e814.zip
New procedural templates.
(bzr r13341.1.267)
-rw-r--r--share/extensions/empty_business_card.inx32
-rw-r--r--share/extensions/empty_business_card.py45
-rw-r--r--share/extensions/empty_desktop.inx39
-rw-r--r--share/extensions/empty_desktop.py46
-rw-r--r--share/extensions/empty_dvd_cover.inx31
-rw-r--r--share/extensions/empty_dvd_cover.py64
-rw-r--r--share/extensions/empty_generic.inx47
-rw-r--r--share/extensions/empty_generic.py82
-rw-r--r--share/extensions/empty_icon.inx24
-rw-r--r--share/extensions/empty_icon.py36
-rw-r--r--share/extensions/empty_video.inx35
-rw-r--r--share/extensions/empty_video.py46
12 files changed, 527 insertions, 0 deletions
diff --git a/share/extensions/empty_business_card.inx b/share/extensions/empty_business_card.inx
new file mode 100644
index 000000000..1513ebf26
--- /dev/null
+++ b/share/extensions/empty_business_card.inx
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<inkscape-extension xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape">
+ <_name>Business Card</_name>
+ <id>org.inkscape.render.empty_business_card</id>
+ <dependency type="executable" location="extensions">business_card.py</dependency>
+ <dependency type="executable" location="extensions">inkex.py</dependency>
+
+ <param name="size" _gui-text="Business card size:" type="enum">
+ <item value="74mmx52mm">74mm x 52mm (A8)</item>
+ <item value="85mmx55mm">85mm x 55mm (Europe)</item>
+ <item value="90mmx55mm">90mm x 55mm (Australia, India, ...)</item>
+ <item value="91mmx55mm">91mm x 55mm (Japan)</item>
+ <item value="90mmx54mm">90mm x 54mm (China, ...)</item>
+ <item value="90mmx50mm">90mm x 50mm (India, Russia, ...)</item>
+ <item value="3.5inx2in">3.5in x 2in (United States, Canada)</item>
+ </param>
+
+ <effect needs-live-preview="false">
+ <object-type>all</object-type>
+ <effects-menu hidden="true" />
+ </effect>
+ <inkscape:_templateinfo>
+ <inkscape:_name>Business Card...</inkscape:_name>
+ <inkscape:author>Tavmjong Bah</inkscape:author>
+ <inkscape:_shortdesc>Business card of chosen size.</inkscape:_shortdesc>
+ <inkscape:date>2014-10-09</inkscape:date>
+ <inkscape:_keywords>business card</inkscape:_keywords>
+ </inkscape:_templateinfo>
+ <script>
+ <command reldir="extensions" interpreter="python">business_card.py</command>
+ </script>
+</inkscape-extension>
diff --git a/share/extensions/empty_business_card.py b/share/extensions/empty_business_card.py
new file mode 100644
index 000000000..586c37abc
--- /dev/null
+++ b/share/extensions/empty_business_card.py
@@ -0,0 +1,45 @@
+#!/usr/bin/env python
+
+# Written by Tavmjong Bah
+
+import inkex
+import re
+
+class C(inkex.Effect):
+ def __init__(self):
+ inkex.Effect.__init__(self)
+ self.OptionParser.add_option("-s", "--size", action="store", type="string", dest="card_size", default="90mmx55mm", help="Business card size")
+
+ def effect(self):
+
+ size = self.options.card_size
+
+ p = re.compile('([0-9.]*)([a-z][a-z])x([0-9.]*)([a-z][a-z])')
+ m = p.match( size )
+ width = m.group(1)
+ width_unit = m.group(2)
+ height = m.group(3)
+ height_unit = m.group(4)
+
+ root = self.document.getroot()
+ root.set("id", "SVGRoot")
+ root.set("width", width + width_unit)
+ root.set("height", height + height_unit)
+ root.set("viewBox", "0 0 " + width + " " + height )
+
+ namedview = root.find(inkex.addNS('namedview', 'sodipodi'))
+ if namedview is None:
+ namedview = inkex.etree.SubElement( root, inkex.addNS('namedview', 'sodipodi') );
+
+ namedview.set(inkex.addNS('document-units', 'inkscape'), width_unit)
+
+ width_int = int(self.uutounit(float(width), 'px'))
+ height_int = int(self.uutounit(float(height), 'px'))
+
+ namedview.set(inkex.addNS('zoom', 'inkscape'), str(2) )
+ namedview.set(inkex.addNS('cx', 'inkscape'), str(width_int/2.0) )
+ namedview.set(inkex.addNS('cy', 'inkscape'), str(height_int/2.0) )
+
+
+c = C()
+c.affect()
diff --git a/share/extensions/empty_desktop.inx b/share/extensions/empty_desktop.inx
new file mode 100644
index 000000000..75762b660
--- /dev/null
+++ b/share/extensions/empty_desktop.inx
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<inkscape-extension xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape">
+ <_name>Desktop</_name>
+ <id>org.inkscape.render.empty_desktop</id>
+ <dependency type="executable" location="extensions">empty_desktop.py</dependency>
+ <dependency type="executable" location="extensions">inkex.py</dependency>
+
+ <param name="size" _gui-text="Desktop size:" type="enum">
+ <item value="Custom">Custom</item>
+ <item value="640x480">640x480 (VGA)</item>
+ <item value="800x600">800x600 (SVGA)</item>
+ <item value="1024x768">1024x768 (XGA)</item>
+ <item value="1366x768">1366x768 (HD)</item>
+ <item value="1600x900">1600x900 (HD+)</item>
+ <item value="1600x1200">1600x1200 (UXGA)</item>
+ <item value="1920x1080">1920x1080 (FHD)</item>
+ <item value="1920x1200">1920x1200 (WUXGA)</item>
+ <item value="2560x1600">2560x1600 (WQXGA)</item>
+ </param>
+
+ <!-- Maximum size is '16k' -->
+ <param name="width" _gui-text="Custom Width:" type="int" min="240" max="15360">1920</param>
+ <param name="height" _gui-text="Custom Height:" type="int" min="160" max="8640">1080</param>
+
+ <effect needs-live-preview="false">
+ <object-type>all</object-type>
+ <effects-menu hidden="true" />
+ </effect>
+ <inkscape:_templateinfo>
+ <inkscape:_name>Desktop...</inkscape:_name>
+ <inkscape:author>Tavmjong Bah</inkscape:author>
+ <inkscape:_shortdesc>Empty desktop of chosen size.</inkscape:_shortdesc>
+ <inkscape:date>2014-10-09</inkscape:date>
+ <inkscape:_keywords>empty desktop</inkscape:_keywords>
+ </inkscape:_templateinfo>
+ <script>
+ <command reldir="extensions" interpreter="python">empty_desktop.py</command>
+ </script>
+</inkscape-extension>
diff --git a/share/extensions/empty_desktop.py b/share/extensions/empty_desktop.py
new file mode 100644
index 000000000..31cb35f9d
--- /dev/null
+++ b/share/extensions/empty_desktop.py
@@ -0,0 +1,46 @@
+#!/usr/bin/env python
+
+# Written by Tavmjong Bah
+
+import inkex
+import re
+
+class C(inkex.Effect):
+ def __init__(self):
+ inkex.Effect.__init__(self)
+ self.OptionParser.add_option("-s", "--size", action="store", type="string", dest="desktop_size", default="16", help="Desktop size")
+
+ self.OptionParser.add_option("-w", "--width", action="store", type="int", dest="desktop_width", default="1920", help="Custom width")
+ self.OptionParser.add_option("-z", "--height", action="store", type="int", dest="desktop_height", default="1080", help="Custom height")
+
+ def effect(self):
+
+ size = self.options.desktop_size
+ width = self.options.desktop_width
+ height = self.options.desktop_height
+
+ if size != "Custom":
+ p = re.compile('([0-9]*)x([0-9]*)')
+ m = p.match( size )
+ width = int(m.group(1))
+ height = int(m.group(2))
+
+
+ root = self.document.getroot()
+ root.set("id", "SVGRoot")
+ root.set("width", str(width) + 'px')
+ root.set("height", str(height) + 'px')
+ root.set("viewBox", "0 0 " + str(width) + " " + str(height) )
+
+ namedview = root.find(inkex.addNS('namedview', 'sodipodi'))
+ if namedview is None:
+ namedview = inkex.etree.SubElement( root, inkex.addNS('namedview', 'sodipodi') );
+
+ namedview.set(inkex.addNS('document-units', 'inkscape'), 'px')
+
+ namedview.set(inkex.addNS('cx', 'inkscape'), str(width/2.0) )
+ namedview.set(inkex.addNS('cy', 'inkscape'), str(height/2.0) )
+
+
+c = C()
+c.affect()
diff --git a/share/extensions/empty_dvd_cover.inx b/share/extensions/empty_dvd_cover.inx
new file mode 100644
index 000000000..facb523d1
--- /dev/null
+++ b/share/extensions/empty_dvd_cover.inx
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<inkscape-extension xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape">
+ <_name>DVD Cover</_name>
+ <id>org.inkscape.render.empty_dvd_cover</id>
+ <dependency type="executable" location="extensions">empty_dvd_cover.py</dependency>
+ <dependency type="executable" location="extensions">inkex.py</dependency>
+
+ <param name="spine" _gui-text="DVD spine width:" type="enum">
+ <item value="14">Normal (14mm)</item>
+ <item value="9">Slim (9mm)</item>
+ <item value="7">Super Slim (7mm)</item>
+ <item value="5">Ultra Slim (5mm)</item>
+ </param>
+
+ <param name="bleed" _gui-text="DVD cover bleed (mm):" type="float" min="0" max="25">3</param>
+
+ <effect needs-live-preview="false">
+ <object-type>all</object-type>
+ <effects-menu hidden="true" />
+ </effect>
+ <inkscape:_templateinfo>
+ <inkscape:_name>DVD Cover...</inkscape:_name>
+ <inkscape:author>Tavmjong Bah</inkscape:author>
+ <inkscape:_shortdesc>DVD cover of chosen size.</inkscape:_shortdesc>
+ <inkscape:date>2014-10-10</inkscape:date>
+ <inkscape:_keywords>dvd cover</inkscape:_keywords>
+ </inkscape:_templateinfo>
+ <script>
+ <command reldir="extensions" interpreter="python">empty_dvd_cover.py</command>
+ </script>
+</inkscape-extension>
diff --git a/share/extensions/empty_dvd_cover.py b/share/extensions/empty_dvd_cover.py
new file mode 100644
index 000000000..1456de51d
--- /dev/null
+++ b/share/extensions/empty_dvd_cover.py
@@ -0,0 +1,64 @@
+#!/usr/bin/env python
+
+# Written by Tavmjong Bah
+
+import inkex
+
+class C(inkex.Effect):
+ def __init__(self):
+ inkex.Effect.__init__(self)
+ self.OptionParser.add_option("-s", "--spine", action="store", type="string", dest="dvd_cover_spine", default="normal", help="Dvd spine width")
+ self.OptionParser.add_option("-b", "--bleed", action="store", type="float", dest="dvd_cover_bleed", default="3", help="Bleed (extra area around image")
+
+ def create_horizontal_guideline(self, name, position):
+ self.create_guideline(name, "0,1", 0, position)
+
+ def create_vertical_guideline(self, name, position):
+ self.create_guideline(name, "1,0", position, 0)
+
+ def create_guideline(self, label, orientation, x,y):
+ namedview = self.root.find(inkex.addNS('namedview', 'sodipodi'))
+ guide = inkex.etree.SubElement(namedview, inkex.addNS('guide', 'sodipodi'))
+ guide.set("orientation", orientation)
+ guide.set("position", str(x)+","+str(y))
+ # No need to set label (causes translation problems, etc.)
+ # guide.set(inkex.addNS('label', 'inkscape'), label)
+
+ def effect(self):
+
+ # Dimensions in mm
+ width = 259.0 # Before adding spine width or bleed
+ height = 183.0 # Before adding bleed
+
+ bleed = self.options.dvd_cover_bleed
+ spine = float( self.options.dvd_cover_spine )
+
+ width += spine
+ width += 2.0 * bleed
+ height += 2.0 * bleed
+
+ self.root = self.document.getroot()
+ self.root.set("id", "SVGRoot")
+ self.root.set("width", str(width) + 'mm')
+ self.root.set("height", str(height) + 'mm')
+ self.root.set("viewBox", "0 0 " + str(width) + " " + str(height) )
+
+ namedview = self.root.find(inkex.addNS('namedview', 'sodipodi'))
+ if namedview is None:
+ namedview = inkex.etree.SubElement( self.root, inkex.addNS('namedview', 'sodipodi') );
+
+ namedview.set(inkex.addNS('document-units', 'inkscape'), "mm")
+
+ # Until units are supported in 'cx', etc.
+ namedview.set(inkex.addNS('cx', 'inkscape'), str(self.uutounit( width, 'px' )/2.0 ) )
+ namedview.set(inkex.addNS('cy', 'inkscape'), str(self.uutounit( height, 'px' )/2.0 ) )
+
+ self.create_horizontal_guideline("bottom", str(self.uutounit( bleed, 'px' )) )
+ self.create_horizontal_guideline("top", str(self.uutounit( height-bleed, 'px' )) )
+ self.create_vertical_guideline("left edge", str(self.uutounit( bleed, 'px' )) )
+ self.create_vertical_guideline("left spline", str(self.uutounit( (width-spine)/2.0,'px' )) )
+ self.create_vertical_guideline("right spline", str(self.uutounit( (width+spine)/2.0,'px' )) )
+ self.create_vertical_guideline("left edge", str(self.uutounit( width-bleed, 'px' )) )
+
+c = C()
+c.affect()
diff --git a/share/extensions/empty_generic.inx b/share/extensions/empty_generic.inx
new file mode 100644
index 000000000..b430cfba5
--- /dev/null
+++ b/share/extensions/empty_generic.inx
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<inkscape-extension xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape">
+ <_name>Generic Canvas</_name>
+ <id>org.inkscape.render.empty_generic_canvas</id>
+ <dependency type="executable" location="extensions">empty_generic.py</dependency>
+ <dependency type="executable" location="extensions">inkex.py</dependency>
+
+ <param name="width" _gui-text="Custom Width:" type="float" min="1" max="15360">800</param>
+ <param name="height" _gui-text="Custom Height:" type="float" min="1" max="8640">600</param>
+
+ <param name="unit" _gui-text="SVG Unit:" type="enum">
+ <item value="px">'px'</item>
+ <item value="in">'in'</item>
+ <item value="mm">'mm'</item>
+ <item value="cm">'cm'</item>
+ <item value="pc">'pc'</item>
+ <item value="pt">'pt'</item>
+ </param>
+
+ <param name="background" _gui-text="Canvas background:" type="enum">
+ <item value="normal">Normal</item>
+ <item value="black">Black Opaque</item>
+ <item value="gray">Gray Opaque</item>
+ <item value="white">White Opaque</item>
+ </param>
+
+ <param name="noborder" type="boolean" _gui-text="Hide border">false</param>
+
+ <!--
+ <param name="layer" type="boolean" _gui-text="Include default layer">true</param>
+ -->
+
+ <effect needs-live-preview="false">
+ <object-type>all</object-type>
+ <effects-menu hidden="true" />
+ </effect>
+ <inkscape:_templateinfo>
+ <inkscape:_name>Generic canvas...</inkscape:_name>
+ <inkscape:author>Tavmjong Bah</inkscape:author>
+ <inkscape:_shortdesc>Genric canvas of choosen size.</inkscape:_shortdesc>
+ <inkscape:date>2014-10-09</inkscape:date>
+ <inkscape:_keywords>empty generic canvas</inkscape:_keywords>
+ </inkscape:_templateinfo>
+ <script>
+ <command reldir="extensions" interpreter="python">empty_generic.py</command>
+ </script>
+</inkscape-extension>
diff --git a/share/extensions/empty_generic.py b/share/extensions/empty_generic.py
new file mode 100644
index 000000000..62e27d220
--- /dev/null
+++ b/share/extensions/empty_generic.py
@@ -0,0 +1,82 @@
+#!/usr/bin/env python
+
+# Written by Tavmjong Bah
+
+import inkex
+import re
+
+class C(inkex.Effect):
+ def __init__(self):
+ inkex.Effect.__init__(self)
+ self.OptionParser.add_option("-w", "--width", action="store", type="int", dest="generic_width", default="1920", help="Custom width")
+ self.OptionParser.add_option("-z", "--height", action="store", type="int", dest="generic_height", default="1080", help="Custom height")
+ self.OptionParser.add_option("-u", "--unit", action="store", type="string", dest="generic_unit", default="px", help="SVG Unit")
+ self.OptionParser.add_option("-b", "--background", action="store", type="string", dest="generic_background", default="normal", help="Canvas background")
+ self.OptionParser.add_option("-n", "--noborder", action="store", type="inkbool", dest="generic_noborder", default=False)
+ # self.OptionParser.add_option("-l", "--layer", action="store", type="inkbool", dest="generic_layer", default=True)
+
+ def effect(self):
+
+ width = self.options.generic_width
+ height = self.options.generic_height
+ unit = self.options.generic_unit
+
+ root = self.document.getroot()
+ root.set("id", "SVGRoot")
+ root.set("width", str(width) + unit)
+ root.set("height", str(height) + unit)
+ root.set("viewBox", "0 0 " + str(width) + " " + str(height) )
+
+ namedview = root.find(inkex.addNS('namedview', 'sodipodi'))
+ if namedview is None:
+ namedview = inkex.etree.SubElement( root, inkex.addNS('namedview', 'sodipodi') );
+
+ namedview.set(inkex.addNS('document-units', 'inkscape'), unit)
+
+ # Until units are supported in 'cx', etc.
+ namedview.set(inkex.addNS('zoom', 'inkscape'), str(512.0/self.uutounit( width, 'px' )) )
+ namedview.set(inkex.addNS('cx', 'inkscape'), str(self.uutounit( width, 'px' )/2.0 ) )
+ namedview.set(inkex.addNS('cy', 'inkscape'), str(self.uutounit( height, 'px' )/2.0 ) )
+
+ if self.options.generic_background == "white":
+ namedview.set( 'pagecolor', "#ffffff" )
+ namedview.set( 'bordercolor', "#666666" )
+ namedview.set(inkex.addNS('pageopacity', 'inkscape'), "1.0" )
+ namedview.set(inkex.addNS('pageshadow', 'inkscape'), "0" )
+
+ if self.options.generic_background == "gray":
+ namedview.set( 'pagecolor', "#808080" )
+ namedview.set( 'bordercolor', "#444444" )
+ namedview.set(inkex.addNS('pageopacity', 'inkscape'), "1.0" )
+ namedview.set(inkex.addNS('pageshadow', 'inkscape'), "0" )
+
+ if self.options.generic_background == "black":
+ namedview.set( 'pagecolor', "#000000" )
+ namedview.set( 'bordercolor', "#999999" )
+ namedview.set(inkex.addNS('pageopacity', 'inkscape'), "1.0" )
+ namedview.set(inkex.addNS('pageshadow', 'inkscape'), "0" )
+
+ if self.options.generic_noborder:
+ pagecolor = namedview.get( 'pagecolor' )
+ namedview.set( 'bordercolor', pagecolor )
+ namedview.set( 'borderopacity', "0" )
+
+ # This nees more thought... we need to set "Current layer" to (root), how?
+ # if self.options.generic_layer:
+ # # Add layer
+ # inkex.debug( "We want a layer" )
+ # else:
+ # # Remove layer id default document (assuming only one)
+ # inkex.debug( "We don't want a layer" )
+ # layer_node = self.current_layer
+ # if layer_node is not None:
+ # inkex.debug( "We have layer" )
+ # root.remove(layer_node)
+ # try:
+ # del namedview.attrib[ inkex.addNS('current-layer', 'inkscape') ]
+ # except:
+ # pass
+
+
+c = C()
+c.affect()
diff --git a/share/extensions/empty_icon.inx b/share/extensions/empty_icon.inx
new file mode 100644
index 000000000..9e36b9d20
--- /dev/null
+++ b/share/extensions/empty_icon.inx
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<inkscape-extension xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape">
+ <_name>Icon</_name>
+ <id>org.inkscape.render.empty_icon</id>
+ <dependency type="executable" location="extensions">empty_icon.py</dependency>
+ <dependency type="executable" location="extensions">inkex.py</dependency>
+
+ <param name="size" _gui-text="Icon size:" type="int" min="8" max="256">16</param>
+
+ <effect needs-live-preview="false">
+ <object-type>all</object-type>
+ <effects-menu hidden="true" />
+ </effect>
+ <inkscape:_templateinfo>
+ <inkscape:_name>Icon...</inkscape:_name>
+ <inkscape:author>Tavmjong Bah</inkscape:author>
+ <inkscape:_shortdesc>Empty icon of chosen size.</inkscape:_shortdesc>
+ <inkscape:date>2014-10-09</inkscape:date>
+ <inkscape:_keywords>empty icon</inkscape:_keywords>
+ </inkscape:_templateinfo>
+ <script>
+ <command reldir="extensions" interpreter="python">empty_icon.py</command>
+ </script>
+</inkscape-extension>
diff --git a/share/extensions/empty_icon.py b/share/extensions/empty_icon.py
new file mode 100644
index 000000000..979edbae4
--- /dev/null
+++ b/share/extensions/empty_icon.py
@@ -0,0 +1,36 @@
+#!/usr/bin/env python
+
+# Written by Tavmjong Bah
+
+import inkex
+
+class C(inkex.Effect):
+ def __init__(self):
+ inkex.Effect.__init__(self)
+ self.OptionParser.add_option("-s", "--size", action="store", type="int", dest="icon_size", default="16", help="Icon size")
+
+ def effect(self):
+
+ size = self.options.icon_size
+
+ root = self.document.getroot()
+ root.set("id", "SVGRoot")
+ root.set("width", str(size) + 'px')
+ root.set("height", str(size) + 'px')
+ root.set("viewBox", "0 0 " + str(size) + " " + str(size) )
+
+ namedview = root.find(inkex.addNS('namedview', 'sodipodi'))
+ if namedview is None:
+ namedview = inkex.etree.SubElement( root, inkex.addNS('namedview', 'sodipodi') );
+
+ namedview.set(inkex.addNS('document-units', 'inkscape'), 'px')
+
+ namedview.set(inkex.addNS('zoom', 'inkscape'), str(256.0/size) )
+ namedview.set(inkex.addNS('cx', 'inkscape'), str(size/2.0) )
+ namedview.set(inkex.addNS('cy', 'inkscape'), str(size/2.0) )
+ namedview.set(inkex.addNS('grid-bbox', 'inkscape'), "true" )
+
+
+
+c = C()
+c.affect()
diff --git a/share/extensions/empty_video.inx b/share/extensions/empty_video.inx
new file mode 100644
index 000000000..8ca148cfc
--- /dev/null
+++ b/share/extensions/empty_video.inx
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<inkscape-extension xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape">
+ <_name>Video Screen</_name>
+ <id>org.inkscape.render.empty_video</id>
+ <dependency type="executable" location="extensions">empty_video.py</dependency>
+ <dependency type="executable" location="extensions">inkex.py</dependency>
+
+ <param name="size" _gui-text="Video size:" type="enum">
+ <item value="Custom">Custom</item>
+ <item value="720x486">720x486 (NTSC)</item>
+ <item value="720x576">720x576 (PAL)</item>
+ <item value="1920x1080">1920x1080 (HDTV)</item>
+ <item value="3840x2160">3840x2160 (4K)</item>
+ <item value="7680x4320">7680x4320 (8K)</item>
+ </param>
+
+ <!-- Maximum size is '16k' -->
+ <param name="width" _gui-text="Custom Width:" type="int" min="240" max="15360">1920</param>
+ <param name="height" _gui-text="Custom Height:" type="int" min="160" max="8640">1080</param>
+
+ <effect needs-live-preview="false">
+ <object-type>all</object-type>
+ <effects-menu hidden="true" />
+ </effect>
+ <inkscape:_templateinfo>
+ <inkscape:_name>Video...</inkscape:_name>
+ <inkscape:author>Tavmjong Bah</inkscape:author>
+ <inkscape:_shortdesc>Video screen of chosen size.</inkscape:_shortdesc>
+ <inkscape:date>2014-10-09</inkscape:date>
+ <inkscape:_keywords>empty video</inkscape:_keywords>
+ </inkscape:_templateinfo>
+ <script>
+ <command reldir="extensions" interpreter="python">empty_video.py</command>
+ </script>
+</inkscape-extension>
diff --git a/share/extensions/empty_video.py b/share/extensions/empty_video.py
new file mode 100644
index 000000000..4b440704c
--- /dev/null
+++ b/share/extensions/empty_video.py
@@ -0,0 +1,46 @@
+#!/usr/bin/env python
+
+# Written by Tavmjong Bah
+
+import inkex
+import re
+
+class C(inkex.Effect):
+ def __init__(self):
+ inkex.Effect.__init__(self)
+ self.OptionParser.add_option("-s", "--size", action="store", type="string", dest="video_size", default="16", help="Video size")
+
+ self.OptionParser.add_option("-w", "--width", action="store", type="int", dest="video_width", default="1920", help="Custom width")
+ self.OptionParser.add_option("-z", "--height", action="store", type="int", dest="video_height", default="1080", help="Custom height")
+
+ def effect(self):
+
+ size = self.options.video_size
+ width = self.options.video_width
+ height = self.options.video_height
+
+ if size != "Custom":
+ p = re.compile('([0-9]*)x([0-9]*)')
+ m = p.match( size )
+ width = int(m.group(1))
+ height = int(m.group(2))
+
+
+ root = self.document.getroot()
+ root.set("id", "SVGRoot")
+ root.set("width", str(width) + 'px')
+ root.set("height", str(height) + 'px')
+ root.set("viewBox", "0 0 " + str(width) + " " + str(height) )
+
+ namedview = root.find(inkex.addNS('namedview', 'sodipodi'))
+ if namedview is None:
+ namedview = inkex.etree.SubElement( root, inkex.addNS('namedview', 'sodipodi') );
+
+ namedview.set(inkex.addNS('document-units', 'inkscape'), 'px')
+
+ namedview.set(inkex.addNS('cx', 'inkscape'), str(width/2.0) )
+ namedview.set(inkex.addNS('cy', 'inkscape'), str(height/2.0) )
+
+
+c = C()
+c.affect()