--- /dev/null
+Tilman Sauerbeck (tilman at code-monkey de)
--- /dev/null
+Copyright (c) 2006 Tilman Sauerbeck (tilman at code-monkey de)
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--- /dev/null
+require "rake/packagetask"
+require "rake/contrib/sshpublisher"
+
+PKG_NAME = "snett"
+PKG_VERSION = File.read("bin/snett").
+ match(/^\s*VERSION = \"(.*)\"\s$/).captures.first
+
+task :install do
+ destdir = ENV["DESTDIR"] || ""
+ prefix = ENV["PREFIX"] || "/usr/local"
+
+ ddir = destdir + prefix + "/bin"
+
+ FileUtils::Verbose.mkdir_p(ddir) unless File.directory?(ddir)
+ FileUtils::Verbose.install("bin/snett", ddir, :mode => 0755)
+
+ ddir = destdir + prefix + "/share/snett"
+
+ FileUtils::Verbose.mkdir_p(ddir) unless File.directory?(ddir)
+ FileUtils::Verbose.install(Dir["data/*"], ddir, :mode => 0644)
+end
+
+Rake::PackageTask.new(PKG_NAME, PKG_VERSION) do |t|
+ t.need_tar_gz = true
+ t.package_files.include("[A-Z]*", "bin/snett", "data/logo*")
+end
+
+task :publish => [:package] do
+ Rake::SshFilePublisher.
+ new("code-monkey.de", ".",
+ "pkg", "#{PKG_NAME}-#{PKG_VERSION}.tar.gz").
+ upload
+end
--- /dev/null
+#!/usr/bin/env ruby
+
+# vim:syn=ruby
+#
+# Copyright (c) 2006 Tilman Sauerbeck (tilman at code-monkey de)
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so, subject to
+# the following conditions:
+#
+# The above copyright notice and this permission notice shall be
+# included in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+require "gtk2"
+require "xmmsclient"
+require "xmmsclient_glib"
+require "singleton"
+require "pp"
+
+PKG_NAME = "snett"
+DATADIR = "/usr/local/share/#{PKG_NAME}/"
+SIZE = 64
+
+class Gtk::MenuItem
+ def set_callback(meth, args = [])
+ args.unshift(meth)
+
+ signal_connect("button_release_event") do
+ Snett::Snett.instance.xmms.send(*args)
+ false
+ end
+ end
+end
+
+class XmmsClient::XmmsClient
+ def playback_next
+ playlist_set_next_rel(1).notifier { playback_tickle }
+ end
+
+ def playback_prev
+ playlist_set_next_rel(-1).notifier { playback_tickle }
+ end
+end
+
+module Snett
+ VERSION = "0.0.1"
+
+ class Snett < Gtk::Window
+ attr_reader :icon, :xmms
+
+ include Singleton
+
+ def initialize
+ super(Gtk::Window::TOPLEVEL)
+
+ @menu = nil
+ @tooltips = Gtk::Tooltips.new
+
+ @xmms = XmmsClient::XmmsClient.new(PKG_NAME)
+ @xmms.connect(ENV["XMMS_PATH"])
+ @xmms.add_to_glib_mainloop
+
+ @broadcasts = []
+
+ self.set_title(PKG_NAME)
+
+ signal_connect("destroy") do
+ @broadcasts.each { |bc| bc.disconnect }
+
+ Gtk.main_quit
+ end
+
+ self.resizable = false
+ self.decorated = false
+
+ @icon = Gdk::Pixbuf.new(DATADIR + "logo#{SIZE}.png")
+
+ self.resize(@icon.width, @icon.height)
+
+ #self.colormap = self.screen.rgba_colormap
+
+ pixmap, mask = @icon.render_pixmap_and_mask(self.colormap, 255)
+ self.shape_combine_mask(mask, 0, 0)
+
+ # load icon and put it in an eventbox
+ event_box = Gtk::EventBox.new.add(Gtk::Image.new(@icon))
+ event_box.events = Gdk::Event::BUTTON_PRESS_MASK |
+ Gdk::Event::BUTTON_RELEASE_MASK
+
+ event_box.signal_connect("button_release_event") do |_, event|
+ menu.popup(event) if event.button == 3
+ false
+ end
+
+ event_box.signal_connect("button_press_event") do |_, event|
+ if event.button == 1
+ x, y = Gdk::Display.default.pointer[1, 2]
+ self.begin_move_drag(event.button, x, y, event.time)
+ end
+
+ false
+ end
+
+ @broadcasts << @xmms.broadcast_playback_current_id
+ @broadcasts.last.notifier(&method(:on_playback_current_id))
+
+ @xmms.playback_current_id.
+ notifier(&method(:on_playback_current_id))
+
+ add(event_box)
+ end
+
+ private
+ def menu
+ @menu ||= Menu.new
+ end
+
+ def on_playback_current_id(res)
+ return if res.value.zero?
+
+ @xmms.medialib_get_info(res.value).
+ notifier(&method(:on_mlib_get_info))
+ end
+
+ def on_mlib_get_info(res)
+ info = res.value[:server]
+
+ s = "%s - %s" % [info[:artist], info[:title]]
+ @tooltips.set_tip(self, s, nil)
+ end
+ end
+
+ class Menu < Gtk::Menu
+ def initialize
+ super
+
+ [
+ [Gtk::Stock::MEDIA_PLAY, :playback_start],
+ [Gtk::Stock::MEDIA_PAUSE, :playback_pause],
+ [Gtk::Stock::MEDIA_STOP, :playback_stop]
+ ].each do |(stock, meth)|
+ item = Gtk::ImageMenuItem.new(stock)
+ item.set_callback(meth)
+
+ append(item)
+ end
+
+ append(Gtk::SeparatorMenuItem.new)
+
+ [
+ [Gtk::Stock::MEDIA_NEXT, :playback_next],
+ [Gtk::Stock::MEDIA_PREVIOUS, :playback_prev]
+ ].each do |(stock, meth)|
+ item = Gtk::ImageMenuItem.new(stock)
+ item.set_callback(meth)
+
+ append(item)
+ end
+
+ append(Gtk::SeparatorMenuItem.new)
+
+ [
+ [Gtk::Stock::OPEN, "Load playlist...", :load],
+ [Gtk::Stock::ADD, "Append playlist...", :append]
+ ].each do |(stock, text, sym)|
+ item = Gtk::ImageMenuItem.new(text)
+ item.image = Gtk::Image.new(stock, Gtk::IconSize::MENU)
+
+ item.signal_connect("button_release_event") do
+ PlaylistDialog.new(sym).show_all
+ false
+ end
+
+ append(item)
+ end
+
+ item = Gtk::ImageMenuItem.new(Gtk::Stock::CLEAR)
+ item.set_callback(:playlist_clear)
+
+ append(item)
+
+ append(Gtk::SeparatorMenuItem.new)
+
+ item = Gtk::ImageMenuItem.new(Gtk::Stock::ABOUT)
+ item.signal_connect("button_release_event") do
+ props = {
+ "name" => PKG_NAME,
+ "version" => VERSION,
+ "copyright" => "(c) 2006 Tilman Sauerbeck",
+ "logo" => Gdk::Pixbuf.new(DATADIR + "logo128.png")
+ }
+
+ Gtk::AboutDialog.show(Snett.instance, props)
+ false
+ end
+
+ append(item)
+
+ item = Gtk::ImageMenuItem.new(Gtk::Stock::QUIT)
+ item.signal_connect("button_release_event") do
+ Snett.instance.signal_emit("destroy")
+ false
+ end
+
+ append(item)
+
+ show_all
+ end
+
+ def popup(event)
+ super(nil, nil, event.button, event.time)
+ end
+ end
+
+ class PlaylistDialog < Gtk::Dialog
+ def initialize(mode)
+ super("Playlists", Snett.instance,
+ Gtk::Dialog::DESTROY_WITH_PARENT | Gtk::Dialog::MODAL,
+ [Gtk::Stock::OK, Gtk::Dialog::RESPONSE_ACCEPT],
+ [Gtk::Stock::CANCEL, Gtk::Dialog::RESPONSE_REJECT])
+
+ @mode = mode
+
+ signal_connect("response") do |_, id|
+ on_ok if id == Gtk::Dialog::RESPONSE_ACCEPT
+ destroy
+ end
+
+ @store = Gtk::ListStore.new(String)
+
+ @view = Gtk::TreeView.new(@store)
+ renderer = Gtk::CellRendererText.new
+
+ col = Gtk::TreeViewColumn.new("Name", renderer, :text => 0)
+ @view.append_column(col)
+
+ vbox.add(@view)
+
+ Snett.instance.xmms.medialib_playlists_list.
+ notifier(&method(:on_playlists_list))
+ end
+
+ private
+ def on_playlists_list(res)
+ res.value.sort.each do |list|
+ next if list[0, 1] == "_"
+
+ @store.append[0] = list
+ end
+ end
+
+ def on_ok
+ selection = @view.selection
+ iter = selection.selected
+ return if iter.nil?
+
+ Snett.instance.xmms.playlist_clear if @mode == :load
+ Snett.instance.xmms.medialib_playlist_load(iter[0])
+ end
+ end
+end
+
+Gtk.init
+Snett::Snett.instance.show_all
+Gtk.main
--- /dev/null
+<?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://web.resource.org/cc/"
+ 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://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="32px"
+ height="32px"
+ id="svg1307"
+ sodipodi:version="0.32"
+ inkscape:version="0.43"
+ sodipodi:docbase="/home/cjay/Projects/affe"
+ sodipodi:docname="affen-icon.svg">
+ <defs
+ id="defs1309">
+ <linearGradient
+ id="linearGradient2202">
+ <stop
+ style="stop-color:#53fff6;stop-opacity:1;"
+ offset="0"
+ id="stop2204" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0"
+ offset="1"
+ id="stop2206" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2192">
+ <stop
+ style="stop-color:#3aff34;stop-opacity:1;"
+ offset="0"
+ id="stop2194" />
+ <stop
+ style="stop-color:#3aff34;stop-opacity:0;"
+ offset="1"
+ id="stop2196" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2192"
+ id="radialGradient2198"
+ cx="10.450541"
+ cy="10.613079"
+ fx="10.450541"
+ fy="10.613079"
+ r="7.412169"
+ gradientTransform="matrix(1,-5.507701e-8,-1.498259e-8,0.981927,1.069577,0.547813)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2202"
+ id="radialGradient2208"
+ cx="22.727674"
+ cy="13.916094"
+ fx="22.727674"
+ fy="13.916094"
+ r="2.9023552"
+ gradientTransform="matrix(1.276924,7.108063e-7,-2.394891e-6,4.30235,-6.293784,-45.95583)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2192"
+ id="radialGradient2237"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,-5.507701e-8,-1.498259e-8,0.981927,1.069577,0.547813)"
+ cx="10.450541"
+ cy="10.613079"
+ fx="10.450541"
+ fy="10.613079"
+ r="7.412169" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2202"
+ id="radialGradient2239"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.276924,7.108063e-7,-2.394891e-6,4.30235,-6.293784,-45.95583)"
+ cx="22.727674"
+ cy="13.916094"
+ fx="22.727674"
+ fy="13.916094"
+ r="2.9023552" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="13.156042"
+ inkscape:cx="16.470634"
+ inkscape:cy="15.737933"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ inkscape:window-width="841"
+ inkscape:window-height="650"
+ inkscape:window-x="304"
+ inkscape:window-y="252" />
+ <metadata
+ id="metadata1312">
+ <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
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <path
+ sodipodi:type="arc"
+ style="color:#000000;fill:#5e3c20;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.47739285;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:6.1101583;stroke-opacity:1"
+ id="path2228"
+ sodipodi:cx="24.960255"
+ sodipodi:cy="7.2183509"
+ sodipodi:rx="4.4205103"
+ sodipodi:ry="5.5814524"
+ d="M 29.380765 7.2183509 A 4.4205103 5.5814524 0 1 1 20.539744,7.2183509 A 4.4205103 5.5814524 0 1 1 29.380765 7.2183509 z"
+ transform="matrix(1.303761,0,0,0.841377,-8.578214,7.792)" />
+ <path
+ transform="matrix(1.23531,0,0,1.833793,-3.76074,-18.59641)"
+ d="M 24.379784 21.998037 A 7.99264 3.750736 0 1 1 8.3945041,21.998037 A 7.99264 3.750736 0 1 1 24.379784 21.998037 z"
+ sodipodi:ry="3.750736"
+ sodipodi:rx="7.99264"
+ sodipodi:cy="21.998037"
+ sodipodi:cx="16.387144"
+ id="path2249"
+ style="color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.75327599;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:6.1101583;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#path2228"
+ id="use2230"
+ transform="matrix(0.930519,0,0,0.999048,-13.73107,-1.919476)"
+ width="32"
+ height="32" />
+ <path
+ sodipodi:type="arc"
+ style="color:#000000;fill:#5e3c20;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.61271989;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:6.1101583;stroke-opacity:1"
+ id="path2226"
+ sodipodi:cx="16.297842"
+ sodipodi:cy="16.237978"
+ sodipodi:rx="9.6000986"
+ sodipodi:ry="13.797351"
+ d="M 25.897941 16.237978 A 9.6000986 13.797351 0 1 1 6.6977434,16.237978 A 9.6000986 13.797351 0 1 1 25.897941 16.237978 z"
+ transform="matrix(1,0,0,0.665911,0.113958,1.960509)" />
+ <path
+ sodipodi:type="arc"
+ style="color:#000000;fill:#9c7658;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:6.1101583;stroke-opacity:1"
+ id="path2232"
+ sodipodi:cx="15.002944"
+ sodipodi:cy="12.7105"
+ sodipodi:rx="3.0363102"
+ sodipodi:ry="4.9116783"
+ d="M 18.039254 12.7105 A 3.0363102 4.9116783 0 1 1 11.966634,12.7105 A 3.0363102 4.9116783 0 1 1 18.039254 12.7105 z"
+ transform="matrix(1.624864,0,0,1.34923,-10.48016,-4.657047)" />
+ <path
+ transform="matrix(1.320297,0,0,0.882114,0.694725,2.658306)"
+ d="M 18.039254 12.7105 A 3.0363102 4.9116783 0 1 1 11.966634,12.7105 A 3.0363102 4.9116783 0 1 1 18.039254 12.7105 z"
+ sodipodi:ry="4.9116783"
+ sodipodi:rx="3.0363102"
+ sodipodi:cy="12.7105"
+ sodipodi:cx="15.002944"
+ id="path2241"
+ style="color:#000000;fill:#9c7658;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:6.1101583;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:type="arc"
+ style="color:#000000;fill:#9c7658;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:6.1101583;stroke-opacity:1"
+ id="path2243"
+ sodipodi:cx="16.387144"
+ sodipodi:cy="21.998037"
+ sodipodi:rx="7.99264"
+ sodipodi:ry="3.750736"
+ d="M 24.379784 21.998037 A 7.99264 3.750736 0 1 1 8.3945041,21.998037 A 7.99264 3.750736 0 1 1 24.379784 21.998037 z"
+ transform="matrix(1.23531,0,0,1.833793,-3.76074,-18.59641)" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer3"
+ inkscape:label="mid">
+ <path
+ sodipodi:type="arc"
+ style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.43193111;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:6.1101583;stroke-opacity:1"
+ id="path2264"
+ sodipodi:cx="17.624142"
+ sodipodi:cy="18.110775"
+ sodipodi:rx="2.2759655"
+ sodipodi:ry="1.342236"
+ d="M 19.900107 18.110775 A 2.2759655 1.342236 0 1 1 15.348176,18.110775 A 2.2759655 1.342236 0 1 1 19.900107 18.110775 z"
+ transform="matrix(1.187665,0,0,1.128281,-4.014511,-1.804267)" />
+ <path
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:0.93750048;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 9.7938385,22.209107 L 23.335051,22.209107"
+ id="path2266" />
+ <rect
+ style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.93749976;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:6.1101583;stroke-opacity:1"
+ id="rect2270"
+ width="4.0936708"
+ height="4.3832722"
+ x="15.325839"
+ y="22.334106"
+ ry="0.6875"
+ rx="0.5" />
+ <rect
+ y="22.209106"
+ x="18.370232"
+ height="3.1937904"
+ width="3.1431065"
+ id="rect2272"
+ style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.8125;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:6.1101583;stroke-opacity:1"
+ ry="0.625"
+ rx="0.625" />
+ <rect
+ style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.81250018;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:6.1101583;stroke-opacity:1"
+ id="rect2274"
+ width="3.2454782"
+ height="3.53125"
+ x="11.751606"
+ y="22.271606"
+ ry="0.8125"
+ rx="0.86565632" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="eyes">
+ <path
+ sodipodi:type="arc"
+ style="color:#000000;fill:url(#radialGradient2237);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.58796048;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:6.1101583;stroke-opacity:1"
+ id="path2190"
+ sodipodi:cx="11.520118"
+ sodipodi:cy="10.969087"
+ sodipodi:rx="3.5721297"
+ sodipodi:ry="5.7600589"
+ d="M 15.092247 10.969087 A 3.5721297 5.7600589 0 1 1 7.947988,10.969087 A 3.5721297 5.7600589 0 1 1 15.092247 10.969087 z"
+ transform="matrix(0.938372,0,0,0.770671,2.755812,3.72269)" />
+ <path
+ sodipodi:type="arc"
+ style="color:#000000;fill:url(#radialGradient2239);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.59321404;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:6.1101583;stroke-opacity:1"
+ id="path2200"
+ sodipodi:cx="22.727674"
+ sodipodi:cy="13.916094"
+ sodipodi:rx="2.7237489"
+ sodipodi:ry="3.0809617"
+ d="M 25.451423 13.916094 A 2.7237489 3.0809617 0 1 1 20.003926,13.916094 A 2.7237489 3.0809617 0 1 1 25.451423 13.916094 z"
+ transform="matrix(0.91526,0,0,0.776198,-5.879296e-2,2.543973)" />
+ </g>
+</svg>