Comparar commits
232 Commits
| Autor | SHA1 | Data | |
|---|---|---|---|
| f8562992d9 | |||
| ee1ac265bd | |||
| 6efdf8b750 | |||
| 0d2fcc27bb | |||
| 43f2dec84f | |||
| d5768b8184 | |||
| ab4888efca | |||
| 5847ab0081 | |||
| 7a4b510a2a | |||
| 9b188f4d4e | |||
| ae918845ff | |||
| ed275b8736 | |||
| e377735696 | |||
| 0979b84e85 | |||
| b4cd3aa305 | |||
| d266d851ac | |||
| cb76fc11ff | |||
| 8e4ff492f2 | |||
| 20440530e2 | |||
| 5fde6b4db4 | |||
| e5b3ac585f | |||
| 13007fa6af | |||
| 3baac6bf26 | |||
| 6d995200f9 | |||
| d9e952bcba | |||
| 4c0f10b950 | |||
| b77391b13d | |||
| 5d30d526fc | |||
| a199f1019e | |||
| b6e0295968 | |||
| d9c310bdf9 | |||
| fd69e2fbaa | |||
| 45e59f82d5 | |||
| 08c0ad0991 | |||
| 58339c78f7 | |||
| 3000ce1dd2 | |||
| fa5833a969 | |||
| 1a83844fe0 | |||
| 5a946e87e5 | |||
| 9a892d0a67 | |||
| 01534acefa | |||
| a51c43fc0d | |||
| 0a3d4be746 | |||
| f6a7119247 | |||
| 850f9bcb9b | |||
| 92995493d0 | |||
| 4bc283a420 | |||
| 124f6f647d | |||
| a49ec03b67 | |||
| bdf8a7638a | |||
| b268362880 | |||
| 35ce340691 | |||
| 444cc7cd58 | |||
| 5ce1e3edd5 | |||
| 53a5b0bc3d | |||
| b01a20d806 | |||
| ceea5d06dc | |||
| 9425b1e1b5 | |||
| 72fc8cb4b2 | |||
| 8880d9a08e | |||
| a51329e0dd | |||
| 4ffb187890 | |||
| 0256a65b18 | |||
| cbbb254886 | |||
| d24459f6a4 | |||
| 2dfb1a1566 | |||
| 8e53da5ca1 | |||
| 746e6b9ede | |||
| d3bbfa798a | |||
| 908b564cb8 | |||
| ffa85938a2 | |||
| c634c8f514 | |||
| d7eea33c9d | |||
| 6a02d3b74a | |||
| 92020328ea | |||
| 5ad55ccab3 | |||
| 16d2593b09 | |||
| 47e5220357 | |||
| aca7ff9d02 | |||
| 3abf4537db | |||
| 666395e547 | |||
| 533c830838 | |||
| 1900e51ff1 | |||
| 513f9301dc | |||
| 3aa9e24f81 | |||
| 58eed3a889 | |||
| 4058056b70 | |||
| a9fe7ddd27 | |||
| ac52161047 | |||
| e2803df857 | |||
| 8aa2e7105e | |||
| f968221bff | |||
| 90b4bf31f3 | |||
| 49b355b8cf | |||
| edfd24bbd3 | |||
| c5042bdc57 | |||
| e6c650d7b8 | |||
| 52e3e7e2ef | |||
| 82558792b5 | |||
| e0e5e5b812 | |||
| 31041fa39a | |||
| 1dcbc4ce07 | |||
| 003b10afa6 | |||
| c1fbb27b0c | |||
| 657abe17fb | |||
| ba5d9e139a | |||
| d345e75952 | |||
| 0f20559e2f | |||
| 5977335253 | |||
| 6d5be5812a | |||
| 5c20b3bdcc | |||
| 17c871897e | |||
| 8947aebe48 | |||
| 802cd5a36a | |||
| 115a652a71 | |||
| 2148fd428a | |||
| 9c90b0b8bb | |||
| e10a75945a | |||
| b1837365a2 | |||
| d9dc24447c | |||
| b35f4b5615 | |||
| ad04ae14dd | |||
| 8392648ffe | |||
| fd07433c87 | |||
| a78ad58de5 | |||
| 052df42b29 | |||
| cd3847ba67 | |||
| cabc112d1c | |||
| cfde5a42b4 | |||
| 72710425e5 | |||
| 606bb0d065 | |||
| 7ec7ff72e3 | |||
| b6dd370470 | |||
| 5b23026ae8 | |||
| e71656aeb3 | |||
| 67b5575fb4 | |||
| 0a71517161 | |||
| 5735d6d6f3 | |||
| c98881b676 | |||
| 7806c91c86 | |||
| a34ebbd3db | |||
| 635afa73e5 | |||
| ee5b1a19ea | |||
| cb3b67991b | |||
| 1504c90b4d | |||
| 9a8efff960 | |||
| 9068149d07 | |||
| 4decb6c260 | |||
| 8303145003 | |||
| 039a772795 | |||
| 84f34bcf18 | |||
| c766a4dedc | |||
| 4fe43a950f | |||
| 437dc66cf7 | |||
| d4e172aafb | |||
| 28a8c346c7 | |||
| a4c8d23fbb | |||
| d35f173453 | |||
| 3a9589074f | |||
| 8cf80c99bd | |||
| 0bbde2077c | |||
| 519fb78c84 | |||
| 2d828b4587 | |||
| 0dd34ca8f3 | |||
| 2d6bcd02b6 | |||
| 5fa4fd391e | |||
| 535059df62 | |||
| 6f10706ac1 | |||
| a5a3d6b85c | |||
| cae74bf6e7 | |||
| 08b979fa0a | |||
| 7a20522c2f | |||
| 8243b2ed34 | |||
| 1ea5d3dd67 | |||
| 4c2ef51454 | |||
| c7696d412c | |||
| 82adb4653d | |||
| 41e80ee47b | |||
| 87ea90d054 | |||
| ec24905ed0 | |||
| 1758a56ef2 | |||
| 934606eb2f | |||
| 043790eda2 | |||
| eed81c45a1 | |||
| edf995395a | |||
| e12d09e52e | |||
| 0ec0cd8f75 | |||
| 473b656412 | |||
| 22c0b68add | |||
| 8edf61af6a | |||
| e8aad1c034 | |||
| 4091c9be50 | |||
| d2be6895f0 | |||
| 52b8588f3f | |||
| e7669d3117 | |||
| 1804a55426 | |||
| b514740e19 | |||
| d39e964bc5 | |||
| c7f6281e11 | |||
| 4afc22c686 | |||
| fb64f74663 | |||
| 3896c62844 | |||
| 52033cb0a9 | |||
| 48c21be900 | |||
| 72a903992d | |||
| f8351aadb4 | |||
| 29da8eda3e | |||
| b202684e0a | |||
| 873571f1ab | |||
| 48342cdd18 | |||
| 90e02345fb | |||
| b48731ed6a | |||
| 870b4cdd7b | |||
| ecfdc66706 | |||
| aa8d23e65b | |||
| 5013de9127 | |||
| 0c0d4d6c57 | |||
| 9da85017b9 | |||
| 4174f71436 | |||
| 3088768fe6 | |||
| acb6caaba0 | |||
| 8619d73007 | |||
| 18666de36f | |||
| e9af41d634 | |||
| 9763743a95 | |||
| b6ffa2de70 | |||
| 74adbe6c3f | |||
| fd42d4e601 | |||
| 0b97a39edc | |||
| 23e2ed5297 | |||
| 273841ec65 | |||
| d128149d8d |
@@ -7,6 +7,7 @@ dist
|
||||
build
|
||||
eggs
|
||||
parts
|
||||
.idea
|
||||
bin
|
||||
var
|
||||
sdist
|
||||
|
||||
@@ -18,6 +18,8 @@ install:
|
||||
install -m 644 img/*.png $(DESTDIR)$(DATADIR)img/
|
||||
install -m 644 img/*.svg $(DESTDIR)$(DATADIR)img/
|
||||
install -m 644 img/*.xml $(DESTDIR)$(DATADIR)img/
|
||||
install -d $(DESTDIR)$(DATADIR)img/darker
|
||||
install -m 644 img/darker/*.png $(DESTDIR)$(DATADIR)img/darker
|
||||
install -d $(DESTDIR)$(DATADIR)img/dark
|
||||
install -m 644 img/dark/*.png $(DESTDIR)$(DATADIR)img/dark
|
||||
install -d $(DESTDIR)$(DATADIR)img/light
|
||||
@@ -26,11 +28,14 @@ install:
|
||||
install -m 644 img/lighter/*.png $(DESTDIR)$(DATADIR)img/lighter
|
||||
install -d $(DESTDIR)$(DATADIR)img/standard
|
||||
install -m 644 img/standard/*.png $(DESTDIR)$(DATADIR)img/standard
|
||||
install -d $(DESTDIR)$(DATADIR)img/links
|
||||
install -m 644 img/links/*.png $(DESTDIR)$(DATADIR)img/links
|
||||
install -d $(DESTDIR)$(DATADIR)template
|
||||
install -m 644 template/*.xml $(DESTDIR)$(DATADIR)template
|
||||
install -d $(DESTDIR)$(DATADIR)ui
|
||||
install -m 644 ui/*.ui $(DESTDIR)$(DATADIR)ui/
|
||||
install -m 644 ui/*.xml $(DESTDIR)$(DATADIR)ui/
|
||||
install -m 644 ui/*.css $(DESTDIR)$(DATADIR)ui/
|
||||
install -d $(DESTDIR)$(DATADIR)coverflow
|
||||
install -d $(DESTDIR)$(DATADIR)coverflow/img
|
||||
install -m 644 coverflow/*.css $(DESTDIR)$(DATADIR)coverflow/
|
||||
@@ -43,4 +48,5 @@ install:
|
||||
install -m 644 tmpl/* $(DESTDIR)$(DATADIR)tmpl/
|
||||
install -d $(DESTDIR)$(GLIB_DIR)
|
||||
install -m 644 schema/$(GLIB_SCHEME) $(DESTDIR)$(GLIB_DIR)
|
||||
cd po;./lang.sh $(DESTDIR)$(LOCALEDIR)
|
||||
cd po;./install_all.sh $(DESTDIR)$(LOCALEDIR)
|
||||
|
||||
|
||||
@@ -1,9 +1,13 @@
|
||||
#coverart-browser v1.0 beta 3
|
||||
================
|
||||
#coverart-browser - v2.2 development (Colonel K)
|
||||
|
||||
Browse your coverart albums in Rhythmbox v2.96 and later
|
||||
Browse your coverart albums in Rhythmbox v3 and later.
|
||||
|
||||

|
||||
If you have reached here looking for the stable version of the plugin please read the README files for
|
||||
|
||||
- rhythmbox 2.96 - 2.99: https://github.com/fossfreedom/coverart-browser/tree/release-1.2
|
||||
- rhythmbox 3.0+: https://github.com/fossfreedom/coverart-browser/tree/release-2.1
|
||||
|
||||

|
||||
|
||||
-----------
|
||||
|
||||
@@ -20,108 +24,66 @@ Browse your coverart albums in Rhythmbox v2.96 and later
|
||||
|
||||
##Summary: whats new in this release
|
||||
|
||||
- single click play for O/S's using GTK+3.6 or later for Tile-view
|
||||
- new artists view: displays album-artists in a tree-view
|
||||
- artists view: clicking on an album-artist displays the albums for that artist
|
||||
- artists view: Download all artist covers using the covers properties menu option
|
||||
- artists view: ... or drag and drop covers from cover view or from nautilus/firefox
|
||||
- artists view: drag and drop of albums to playlists
|
||||
- artists view: Filter buttons or filter search/quick track filter correctly filters view to show only the artists that have those filtered albums
|
||||
- artists view: hovering the mouse pointer over the artist cover displays a tooltip of a larger version of the cover
|
||||
- artists view: supports sorting of album-artist via clicking on its column header - ascending/descending/unsorted.
|
||||
- artists view: right click of albums displays the same right click menu as in tile view or coverflow view
|
||||
- artists view: right click of artists to play or queue all albums for that artist
|
||||
- artists view: independent sort toolbar buttons - for example show albums for an artist by ascending year whilst in the tile view show albums by name
|
||||
- new look (optional) to display album information within (on top of) the cover rather than below (beneath) the cover
|
||||
- new lighter icon-theme from the brilliant designer - jrbastien
|
||||
- new Rhythmbox 3 coverart source icon - again from jrbastien
|
||||
- Look & Feel integration: Rhythmbox 3 style toolbar and button popup menus
|
||||
- Look & Feel integration: New toolbar menu-button to switch between views including RB's own library view
|
||||
- Look & Feel integration: New toolbar menu-button in RB's library view to switch to plugin views (RB v3 and later)
|
||||
- Optional export and embed coverart from most file-formats to MP3.
|
||||
- Remember quick artist filter between rhythmbox sessions
|
||||
- support drag-and-drop of albums onto playlists or external devices for RB2.99 and later
|
||||
- Rework Album & Playlist favourite supports - this declutters menus and now can be optionally enabled through properties button
|
||||
- Right click support for the external plugin Repeat One Song
|
||||
- Optionally use sort fields for album artists or album artists (right click - properties - sort tab)
|
||||
- Use new Rhythmbox 3 progress bars for loading
|
||||
- Tooltip support to display cover name and artist only if album information is not already displayed
|
||||
- Support for Alternative-Toolbar & Headerbar - add view switcher to headerbar and remove from source toolbars
|
||||
- Support for Alternative-Toolbar - Toggle between views and sources in sidepane
|
||||
- Export and Embed dialog remembers field values between openings
|
||||
- Quicker startup of plugin
|
||||
- chosen playlist are persistent between rhythmbox sessions
|
||||
- Add CoverArt Playlist to the same menu-button as other views
|
||||
- Remove separate CoverArt Playlist icon on track-view
|
||||
- Rework CoverArt Playlist so that don't have to start CoverArt to play the last saved playlist
|
||||
- various icons display correctly for both light and dark themes
|
||||
- Translated into 25 languages and locales
|
||||
- for developers - doxygen documentation: http://fossfreedom.github.io/coverart-browser/classes.html
|
||||
|
||||
*How it works:*
|
||||
|
||||
- Click the new CoverArt source button (left hand side of screen)
|
||||
- Click the new CoverArt Browser source button (left hand side of screen)
|
||||
- Albums are displayed as clickable buttons containing their album cover
|
||||
- Right click menu option to play, queue & search for coverart for an album.
|
||||
- Download Album & artist artwork via the properties toolbar button
|
||||
|
||||
- https://github.com/fossfreedom/coverart-browser/wiki/how-to-for-version-1.0
|
||||
- https://github.com/fossfreedom/coverart-browser/wiki/how-to-for-version-2.0
|
||||
- https://github.com/fossfreedom/coverart-browser/wiki/Screenshots
|
||||
|
||||
*How to install - Rhythmbox 2.96 to 2.99.1:*
|
||||
|
||||
for debian & debian-based distros such as Ubuntu & Mint:
|
||||
|
||||
sudo apt-get install git gettext python-mako python-lxml gstreamer0.10-plugins-ugly gstreamer0.10-plugins-good gstreamer0.10-plugins-bad
|
||||
|
||||
for fedora and similar:
|
||||
|
||||
yum install git gettext python-mako python-lxml
|
||||
|
||||
what is the fedora equivalent of gstreamer0.10-plugins-ugly/gstreamer0.10-plugins-good/gstreamer0.10-plugins-bad ?
|
||||
|
||||
for opensuse
|
||||
|
||||
sudo zypper in git gettext-runtime python-mako python-lxml typelib-1_0-WebKit-3_0
|
||||
|
||||
what is the opensuse equivalent of gstreamer0.10-plugins-ugly/gstreamer0.10-plugins-good/gstreamer0.10-plugins-bad?
|
||||
|
||||
Then install the plugin:
|
||||
|
||||
<pre>
|
||||
rm -rf ~/.local/share/rhythmbox/plugins/coverart_browser
|
||||
git clone https://github.com/fossfreedom/coverart-browser.git
|
||||
cd coverart-browser
|
||||
./install.sh
|
||||
</pre>
|
||||
|
||||
*How to install - Rhythmbox 3.0 and later:*
|
||||
|
||||
for debian & debian-based distros such as Ubuntu & Mint:
|
||||
N.B. for earlier Rhythmbox versions use version 1.x
|
||||
|
||||
sudo apt-get install git gettext python3-mako python3-lxml gstreamer1.0-plugins-ugly gstreamer1.0-plugins-good gstreamer1.0-plugins-bad
|
||||
Prerequisite is to use a distribution supporting GTK 3.10 or later - for example, Ubuntu 14.04, Arch or Fedora 20
|
||||
|
||||
python3 based package instructions for OpenSuse and Fedora not known
|
||||
for Debian & Debian-based distros such as Ubuntu & Mint:
|
||||
|
||||
sudo apt-get install git gettext python3-mako python3-lxml python3-gi-cairo python3-cairo gstreamer1.0-plugins-ugly gstreamer1.0-plugins-good gstreamer1.0-plugins-bad rhythmbox-plugins
|
||||
|
||||
for Fedora and similar:
|
||||
|
||||
sudo yum install git gettext python3-mako python3-lxml python3-cairo
|
||||
|
||||
NOTE: it is assumed that you have separately installed the patent encumbered codecs found in the good/bad & ugly packages
|
||||
To install the plugin:
|
||||
|
||||
<pre>
|
||||
rm -rf ~/.local/share/rhythmbox/plugins/coverart_browser
|
||||
git clone https://github.com/fossfreedom/coverart-browser.git
|
||||
git clone https://github.com/fossfreedom/coverart-browser.git -b master
|
||||
cd coverart-browser
|
||||
./install.sh --rb3
|
||||
./install.sh
|
||||
</pre>
|
||||
|
||||
To uninstall the plugin:
|
||||
|
||||
<pre>
|
||||
cd coverart-browser
|
||||
./install.sh --uninstall
|
||||
</pre>
|
||||
|
||||
Note 1 - the CoverArt Browser plugin also requires installing the following plugin:
|
||||
|
||||
- https://github.com/fossfreedom/coverart-search-providers
|
||||
|
||||
Note 2 - IMPORTANT NOTE - for some distros (e.g. OpenSuse 12.3) that do not have rhythmbox webkit support, DO NOT install your
|
||||
webkit library. For these distros, it is highly likely that installing webkit v3 will
|
||||
crash rhythmbox if this plugin is also installed and activated.
|
||||
*For Ubuntu 14.04 and later:*
|
||||
|
||||
If your distro crashes with the webkit elements of the application (CoverFlow or CoverArt) use the following workaround:
|
||||
|
||||
gsettings set org.gnome.rhythmbox.plugins.coverart_browser webkit-support false
|
||||
|
||||
Note 3 - Due to an upstream Rhythmbox bug affecting RB V2.98 & V2.99 only - any changes made to the details of a track
|
||||
are not reflected back into the plugin. This can lead to inconsistencies. Please restart rhythmbox for these details
|
||||
to be correctly cached. This bug is fixed in RB3.0 and does not affect RB2.96 & RB2.97 users
|
||||
|
||||
*For Ubuntu 12.04, 12.10, 13.04, 13.10 & 14.04:*
|
||||
|
||||
V1.0 is now available in my rhythmbox PPA - installation instructions in this AskUbuntu Q&A:
|
||||
V2.0 is now available in my rhythmbox PPA - installation instructions in this AskUbuntu Q&A:
|
||||
|
||||
http://askubuntu.com/questions/147942/how-do-i-install-third-party-rhythmbox-plugins
|
||||
|
||||
@@ -144,9 +106,8 @@ Credits:
|
||||
- thanks to Luqman Aden <laden@uwaterloo.ca> for the coverart-search plugin which our cover-search pane is based upon
|
||||
- thanks to Canonical for the Star widget which the ratings capabilities use
|
||||
- our Translators: Launchpad Translation team - individual credits for each locale is shown in the plugin preferences dialog
|
||||
- Button Icons - jrbastien for the four toolbar icon-sets (standard, light, lighter & dark)
|
||||
- Button Icons - [jrbastien](https://github.com/jrbastien) for the five toolbar icon-sets
|
||||
- Flow view is based upon [Contentflow](http://jacksasylum.eu/ContentFlow)
|
||||
- Chief Tester and all-round good egg - jrbastien!
|
||||
|
||||
Licenses:
|
||||
|
||||
|
||||
@@ -6,18 +6,16 @@
|
||||
#+++++++++++++++++++++++++++
|
||||
#for each ui file run the following to create translation .h files
|
||||
intltool-extract --local --type=gettext/glade ui/coverart_artistview.ui
|
||||
intltool-extract --local --type=gettext/glade ui/coverart_artist_pop_rb2.ui
|
||||
intltool-extract --local --type=gettext/glade ui/coverart_artist_pop_rb3.ui
|
||||
intltool-extract --local --type=gettext/glade ui/coverart_browser_pop_rb2.ui
|
||||
intltool-extract --local --type=gettext/glade ui/coverart_browser_pop_rb3.ui
|
||||
intltool-extract --local --type=gettext/glade ui/coverart_browser_prefs.ui
|
||||
intltool-extract --local --type=gettext/glade ui/coverart_browser.ui
|
||||
intltool-extract --local --type=gettext/glade ui/coverart_entryview_pop_rb2.ui
|
||||
intltool-extract --local --type=gettext/glade ui/coverart_entryview_pop_rb3.ui
|
||||
intltool-extract --local --type=gettext/glade ui/coverart_entryview_compact_pop_rb3.ui
|
||||
intltool-extract --local --type=gettext/glade ui/coverart_entryview_full_pop_rb3.ui
|
||||
intltool-extract --local --type=gettext/glade ui/coverart_exportembed.ui
|
||||
intltool-extract --local --type=gettext/glade ui/coverart_iconview.ui
|
||||
intltool-extract --local --type=gettext/glade ui/coverart_leftsidebar.ui
|
||||
intltool-extract --local --type=gettext/glade ui/coverart_listwindow.ui
|
||||
intltool-extract --local --type=gettext/glade ui/coverart_play_pop_rb3.ui
|
||||
intltool-extract --local --type=gettext/glade ui/coverart_rightsidebar.ui
|
||||
intltool-extract --local --type=gettext/glade ui/coverart_topbar.ui
|
||||
intltool-extract --local --type=gettext/xml img/popups.xml.in
|
||||
@@ -25,7 +23,7 @@ intltool-extract --local --type=gettext/xml img/popups.xml.in
|
||||
#create a new template file called po/package.pot by running below
|
||||
|
||||
#create a template file for the mako templates
|
||||
pybabel extract -F babel.cfg -o po/coverartbrowser.pot .
|
||||
pybabel extract -F babel.cfg -o po/coverartbrowser.pot -c "TRANSLATORS:" .
|
||||
|
||||
# po/files_to_be_translated are all the .h files generated by intltool
|
||||
xgettext -c -a -j -f po/files_to_be_translated -o po/coverartbrowser.pot
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
[Plugin]
|
||||
Loader=python
|
||||
Loader=python3
|
||||
Module=coverart_browser
|
||||
IAge=2
|
||||
Depends=rb;coverart_search_providers
|
||||
Name=CoverArt Browser
|
||||
Name[ast]=Navegador de portaes
|
||||
Name[az]=CoverArt gəzgini
|
||||
Name[bg]=CoverArt Браузър
|
||||
Name[bs]=CoverArt Browser
|
||||
Name[bg]=CoverArt Browser
|
||||
Name[ca]=Navegador de Portades
|
||||
Name[cs]=Prohlížeč CoverArt
|
||||
Name[de]=CoverArt Browser
|
||||
Name[en_AU]=CoverArt Browser
|
||||
Name[en_GB]=CoverArt Browser
|
||||
Name[en_US]=CoverArt Browser
|
||||
Name[es]=Navegador de carátulas
|
||||
@@ -26,19 +26,22 @@ Name[pl]=Przeglądarka okładek
|
||||
Name[pt]=Arte das Capas
|
||||
Name[pt_BR]=Arte das Capas
|
||||
Name[ro]=Navigator CoverArt
|
||||
Name[ru]=Браузер обложек
|
||||
Name[zh_CN]=封面浏览器
|
||||
Description=Browse and play your albums through their covers
|
||||
Description[ast]=Navegar y reproducir los álbumes per aciu de les portaes
|
||||
Description[az]=Üz şəklinə görə albomlara bax və oxud
|
||||
Description[bs]=Pregledajte i reproducirajte vaše albume na osnovu njihovih omota
|
||||
Description[bg]=Търсете и слушайте албумите си посредством обложките им
|
||||
Description[ca]=Navega i reprodueix els àlbums mitjançant les seues portades
|
||||
Description[de]=Durchsuchen und geben Sie Ihre Alben über deren Cover wieder
|
||||
Description[en_AU]=Browse and play your albums through their covers
|
||||
Description[en_GB]=Browse and play your albums through their covers
|
||||
Description[en_US]=Browse and play your albums through their covers
|
||||
Description[es]=Navegue y reproduzca sus álbumes mediante sus carátulas
|
||||
Description[fi]=Selaa ja toista levyjäsi kansikuvien kautta
|
||||
Description[fr]=Parcourir les jaquettes de vos albums et les jouer
|
||||
Description[fr_CA]=Parcourir les pochettes de vos albums et les jouer
|
||||
Description[gl]=Examinar e reproducir os seus álbums a través das súas cubertas
|
||||
Description[gl]=Buscar e reproducir os álbums a través das cubertas
|
||||
Description[hr]=Pregledavajte i slušajte albume preko omota
|
||||
Description[it]=Sfoglia e riproduce gli album per copertina
|
||||
Description[ko]=앨범을 표지로 찾아보고 연주합니다.
|
||||
@@ -47,9 +50,10 @@ Description[pl]=Przeglądaj i odtwarzaj Twoje albumy według ich okładek
|
||||
Description[pt]=Navegue e toque seus álbums através de suas capas
|
||||
Description[pt_BR]=Navegue e toque seus álbums através de suas capas
|
||||
Description[ro]=Parcurge și redă albumele prin intermediul coperților lor
|
||||
Description[ru]=Просматривайте и воспроизводите альбомы по обложкам
|
||||
Description[zh_CN]=浏览封面并播放专辑
|
||||
Authors=fossfreedom <foss.freedom@gmail.com>, Agustín Carrasco <asermax@gmail.com>
|
||||
Copyright=© 2012 fossfreedom, Agustín Carrasco © 2007 Alexandre Rosenfeld
|
||||
Website=http://github.com/fossfreedom/coverart-browser
|
||||
Help=https://github.com/fossfreedom/coverart-browser/blob/release-1.0/README.md
|
||||
Version=1.0
|
||||
Help=https://github.com/fossfreedom/coverart-browser/blob/release-2.0/README.md
|
||||
Version=2.0
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
[Plugin]
|
||||
Loader=python
|
||||
Loader=python3
|
||||
Module=coverart_browser
|
||||
IAge=2
|
||||
Depends=rb;coverart_search_providers
|
||||
@@ -8,5 +8,5 @@ _Description=Browse and play your albums through their covers
|
||||
Authors=fossfreedom <foss.freedom@gmail.com>, Agustín Carrasco <asermax@gmail.com>
|
||||
Copyright=© 2012 fossfreedom, Agustín Carrasco © 2007 Alexandre Rosenfeld
|
||||
Website=http://github.com/fossfreedom/coverart-browser
|
||||
Help=https://github.com/fossfreedom/coverart-browser/blob/release-1.0/README.md
|
||||
Version=1.0
|
||||
Help=https://github.com/fossfreedom/coverart-browser/blob/release-2.0/README.md
|
||||
Version=2.0
|
||||
|
||||
@@ -1,55 +0,0 @@
|
||||
[Plugin]
|
||||
Loader=python3
|
||||
Module=coverart_browser
|
||||
IAge=2
|
||||
Depends=rb;coverart_search_providers
|
||||
Name=CoverArt Browser
|
||||
Name[ast]=Navegador de portaes
|
||||
Name[az]=CoverArt gəzgini
|
||||
Name[bg]=CoverArt Браузър
|
||||
Name[bs]=CoverArt Browser
|
||||
Name[ca]=Navegador de Portades
|
||||
Name[cs]=Prohlížeč CoverArt
|
||||
Name[de]=CoverArt Browser
|
||||
Name[en_GB]=CoverArt Browser
|
||||
Name[en_US]=CoverArt Browser
|
||||
Name[es]=Navegador de carátulas
|
||||
Name[fi]=Kansikuvaselain
|
||||
Name[fr]=Navigateur de jaquettes
|
||||
Name[fr_CA]=Navigateur de pochettes
|
||||
Name[gl]=Navegador de cubertas
|
||||
Name[hr]=CoverArt Preglednik
|
||||
Name[it]=Gestore di CoverArt
|
||||
Name[ko]=앨범 표지 찾아보기
|
||||
Name[ms]=Pelayar CoverArt
|
||||
Name[pl]=Przeglądarka okładek
|
||||
Name[pt]=Arte das Capas
|
||||
Name[pt_BR]=Arte das Capas
|
||||
Name[ro]=Navigator CoverArt
|
||||
Name[zh_CN]=封面浏览器
|
||||
Description=Browse and play your albums through their covers
|
||||
Description[ast]=Navegar y reproducir los álbumes per aciu de les portaes
|
||||
Description[az]=Üz şəklinə görə albomlara bax və oxud
|
||||
Description[bs]=Pregledajte i reproducirajte vaše albume na osnovu njihovih omota
|
||||
Description[ca]=Navega i reprodueix els àlbums mitjançant les seues portades
|
||||
Description[en_GB]=Browse and play your albums through their covers
|
||||
Description[en_US]=Browse and play your albums through their covers
|
||||
Description[es]=Navegue y reproduzca sus álbumes mediante sus carátulas
|
||||
Description[fi]=Selaa ja toista levyjäsi kansikuvien kautta
|
||||
Description[fr]=Parcourir les jaquettes de vos albums et les jouer
|
||||
Description[fr_CA]=Parcourir les pochettes de vos albums et les jouer
|
||||
Description[gl]=Examinar e reproducir os seus álbums a través das súas cubertas
|
||||
Description[hr]=Pregledavajte i slušajte albume preko omota
|
||||
Description[it]=Sfoglia e riproduce gli album per copertina
|
||||
Description[ko]=앨범을 표지로 찾아보고 연주합니다.
|
||||
Description[ms]=Layar dan mainkan album anda menerusi kulit album mereka
|
||||
Description[pl]=Przeglądaj i odtwarzaj Twoje albumy według ich okładek
|
||||
Description[pt]=Navegue e toque seus álbums através de suas capas
|
||||
Description[pt_BR]=Navegue e toque seus álbums através de suas capas
|
||||
Description[ro]=Parcurge și redă albumele prin intermediul coperților lor
|
||||
Description[zh_CN]=浏览封面并播放专辑
|
||||
Authors=fossfreedom <foss.freedom@gmail.com>, Agustín Carrasco <asermax@gmail.com>
|
||||
Copyright=© 2012 fossfreedom, Agustín Carrasco © 2007 Alexandre Rosenfeld
|
||||
Website=http://github.com/fossfreedom/coverart-browser
|
||||
Help=https://github.com/fossfreedom/coverart-browser/blob/release-1.0/README.md
|
||||
Version=1.0
|
||||
@@ -1,12 +0,0 @@
|
||||
[Plugin]
|
||||
Loader=python3
|
||||
Module=coverart_browser
|
||||
IAge=2
|
||||
Depends=rb;coverart_search_providers
|
||||
_Name=CoverArt Browser
|
||||
_Description=Browse and play your albums through their covers
|
||||
Authors=fossfreedom <foss.freedom@gmail.com>, Agustín Carrasco <asermax@gmail.com>
|
||||
Copyright=© 2012 fossfreedom, Agustín Carrasco © 2007 Alexandre Rosenfeld
|
||||
Website=http://github.com/fossfreedom/coverart-browser
|
||||
Help=https://github.com/fossfreedom/coverart-browser/blob/release-1.0/README.md
|
||||
Version=1.0
|
||||
@@ -18,32 +18,31 @@
|
||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
# define plugin
|
||||
import rb
|
||||
import locale
|
||||
import gettext
|
||||
|
||||
from gi.repository import GObject
|
||||
from gi.repository import Gtk
|
||||
from gi.repository import RB
|
||||
from gi.repository import GdkPixbuf
|
||||
from gi.repository import Peas
|
||||
from gi.repository import Gio
|
||||
from gi.repository import GLib
|
||||
|
||||
from coverart_browser_prefs import Preferences
|
||||
import rb
|
||||
from coverart_browser_prefs import GSetting
|
||||
from coverart_browser_prefs import CoverLocale
|
||||
from coverart_browser_prefs import Preferences
|
||||
from coverart_browser_source import CoverArtBrowserSource
|
||||
from coverart_utils import Theme
|
||||
from coverart_listview import ListView
|
||||
from coverart_queueview import QueueView
|
||||
from coverart_playsourceview import PlaySourceView
|
||||
from coverart_toolbar import TopToolbar
|
||||
from coverart_play_source import CoverArtPlaySource
|
||||
|
||||
import coverart_rb3compat as rb3compat
|
||||
|
||||
|
||||
class CoverArtBrowserEntryType(RB.RhythmDBEntryType):
|
||||
'''
|
||||
Entry type for our source.
|
||||
'''
|
||||
|
||||
def __init__(self):
|
||||
'''
|
||||
Initializes the entry type.
|
||||
@@ -64,8 +63,7 @@ class CoverArtBrowserPlugin(GObject.Object, Peas.Activatable):
|
||||
Initialises the plugin object.
|
||||
'''
|
||||
GObject.Object.__init__(self)
|
||||
if not rb3compat.compare_pygobject_version('3.9'):
|
||||
GObject.threads_init()
|
||||
self._externalmenu = None
|
||||
|
||||
def do_activate(self):
|
||||
'''
|
||||
@@ -78,55 +76,61 @@ class CoverArtBrowserPlugin(GObject.Object, Peas.Activatable):
|
||||
self.shell = self.object
|
||||
self.db = self.shell.props.db
|
||||
|
||||
try:
|
||||
entry_type = CoverArtBrowserEntryType()
|
||||
self.db.register_entry_type(entry_type)
|
||||
except NotImplementedError:
|
||||
entry_type = self.db.entry_register_type(
|
||||
'CoverArtBrowserEntryType')
|
||||
self.entry_type = CoverArtBrowserEntryType()
|
||||
self.db.register_entry_type(self.entry_type)
|
||||
|
||||
# we do some specific functionality when working with alternative toolbar
|
||||
# variables defined by the externalpluginmenu
|
||||
self.using_alternative_toolbar = False
|
||||
self.using_headerbar = False
|
||||
|
||||
cl = CoverLocale()
|
||||
cl.switch_locale(cl.Locale.LOCALE_DOMAIN)
|
||||
|
||||
entry_type.category = RB.RhythmDBEntryCategory.NORMAL
|
||||
|
||||
self.entry_type.category = RB.RhythmDBEntryCategory.NORMAL
|
||||
|
||||
group = RB.DisplayPageGroup.get_by_id('library')
|
||||
# load plugin icon
|
||||
|
||||
theme = Gtk.IconTheme.get_default()
|
||||
rb.append_plugin_source_path(theme, '/icons')
|
||||
theme.append_search_path(rb.find_plugin_file(self, 'img'))
|
||||
|
||||
iconfile = Gio.ThemedIcon(name = 'coverart-icon-symbolic')
|
||||
|
||||
# lets assume that python3 versions of RB only has the new icon attribute in the source
|
||||
if rb3compat.PYVER >=3:
|
||||
iconfile = Gio.File.new_for_path(
|
||||
rb.find_plugin_file(self, 'img/covermgr_rb3.png'))
|
||||
|
||||
self.source = CoverArtBrowserSource(
|
||||
shell=self.shell,
|
||||
name=_("CoverArt"),
|
||||
entry_type=entry_type,
|
||||
plugin=self,
|
||||
icon=Gio.FileIcon.new(iconfile),
|
||||
query_model=self.shell.props.library_source.props.base_query_model)
|
||||
else:
|
||||
what, width, height = Gtk.icon_size_lookup(Gtk.IconSize.LARGE_TOOLBAR)
|
||||
pxbf = GdkPixbuf.Pixbuf.new_from_file_at_size(
|
||||
rb.find_plugin_file(self, 'img/covermgr.png'), width, height)
|
||||
# our plugin model shared between sources
|
||||
self.source_query_model = RB.RhythmDBQueryModel.new_empty(self.shell.props.db)
|
||||
|
||||
self.source = CoverArtBrowserSource(
|
||||
shell=self.shell,
|
||||
name=_("CoverArt"), entry_type=entry_type,
|
||||
plugin=self, pixbuf=pxbf,
|
||||
query_model=self.shell.props.library_source.props.base_query_model)
|
||||
|
||||
self.shell.register_entry_type_for_source(self.source, entry_type)
|
||||
self.source = CoverArtBrowserSource(
|
||||
shell=self.shell,
|
||||
name=_("CoverArt"),
|
||||
entry_type=self.entry_type,
|
||||
plugin=self,
|
||||
icon=iconfile,
|
||||
query_model=self.shell.props.library_source.props.base_query_model)
|
||||
|
||||
self.shell.register_entry_type_for_source(self.source, self.entry_type)
|
||||
self.source.props.visibility = False
|
||||
self.shell.append_display_page(self.source, group)
|
||||
|
||||
self.source.props.query_model.connect('complete', self.load_complete)
|
||||
if rb3compat.PYVER >=3:
|
||||
self._externalmenu = ExternalPluginMenu(self)
|
||||
else:
|
||||
self._externalmenu = None
|
||||
|
||||
self.playlist_source = GObject.new(
|
||||
CoverArtPlaySource,
|
||||
name=_("CoverArt Playlist"),
|
||||
shell=self.shell,
|
||||
plugin=self,
|
||||
entry_type=self.entry_type)
|
||||
|
||||
self.shell.append_display_page(self.playlist_source, self.source)
|
||||
|
||||
self.shell.props.db.connect('load-complete', self.load_complete)
|
||||
# GLib.timeout_add_seconds(3, self.load_complete) # kludge - if plugin activated after RB has loaded then do stuff
|
||||
def delayed(*args):
|
||||
if self.shell.props.selected_page:
|
||||
self._externalmenu = ExternalPluginMenu(self)
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
|
||||
GLib.timeout_add(100, delayed)
|
||||
|
||||
cl.switch_locale(cl.Locale.RB)
|
||||
print("CoverArtBrowser DEBUG - end do_activate")
|
||||
|
||||
@@ -138,119 +142,176 @@ class CoverArtBrowserPlugin(GObject.Object, Peas.Activatable):
|
||||
print("CoverArtBrowser DEBUG - do_deactivate")
|
||||
self.source.delete_thyself()
|
||||
if self._externalmenu:
|
||||
self._externalmenu.cleanup()
|
||||
self._externalmenu.cleanup(full_cleanup=True)
|
||||
del self.shell
|
||||
del self.db
|
||||
del self.source
|
||||
|
||||
print("CoverArtBrowser DEBUG - end do_deactivate")
|
||||
|
||||
|
||||
def load_complete(self, *args, **kwargs):
|
||||
'''
|
||||
Called by Rhythmbox when it has completed loading all data
|
||||
Used to automatically switch to the browser if the user
|
||||
has set in the preferences
|
||||
'''
|
||||
|
||||
gs = GSetting()
|
||||
setting = gs.get_setting(gs.Path.PLUGIN)
|
||||
|
||||
if setting[gs.PluginKey.AUTOSTART]:
|
||||
GLib.idle_add(self.shell.props.display_page_tree.select,
|
||||
self.source)
|
||||
|
||||
self._externalmenu.autostart_source()
|
||||
|
||||
def _translation_helper(self):
|
||||
'''
|
||||
a method just to help out with translation strings
|
||||
it is not meant to be called by itself
|
||||
'''
|
||||
|
||||
|
||||
# define .plugin text strings used for translation
|
||||
plugin = _('CoverArt Browser')
|
||||
desc = _('Browse and play your albums through their covers')
|
||||
|
||||
#. TRANSLATORS: This is the icon-grid view that the user sees
|
||||
|
||||
# . TRANSLATORS: This is the icon-grid view that the user sees
|
||||
tile = _('Tiles')
|
||||
|
||||
|
||||
#. TRANSLATORS: This is the cover-flow view the user sees - they can swipe album covers from side-to-side
|
||||
artist = _('Flow')
|
||||
|
||||
|
||||
#. TRANSLATORS: percentage size that the image will be expanded
|
||||
scale = _('Scale by %:')
|
||||
|
||||
class ExternalPluginMenu(GObject.Object):
|
||||
# stop PyCharm removing the Preference import on optimisation
|
||||
pref = Preferences()
|
||||
|
||||
|
||||
class ExternalPluginMenu(GObject.Object):
|
||||
toolbar_pos = GObject.property(type=str, default=TopToolbar.name)
|
||||
|
||||
|
||||
def __init__(self, plugin):
|
||||
super(ExternalPluginMenu, self).__init__()
|
||||
|
||||
|
||||
self.plugin = plugin
|
||||
self.shell = plugin.shell
|
||||
self.source = plugin.source
|
||||
self.app_id = None
|
||||
self.locations = ['library-toolbar', 'queue-toolbar', 'playsource-toolbar']
|
||||
|
||||
from coverart_browser_source import Views
|
||||
self._views = Views(self.shell)
|
||||
|
||||
self._connect_properties()
|
||||
self._connect_signals()
|
||||
|
||||
self._create_menu()
|
||||
|
||||
def _connect_signals(self):
|
||||
self.connect('notify::toolbar-pos', self._on_notify_toolbar_pos)
|
||||
self.shell.props.display_page_tree.connect(
|
||||
"selected", self.on_page_change
|
||||
self._views = Views(self.shell)
|
||||
|
||||
self._use_standard_control = True
|
||||
self.plugin.using_alternative_toolbar = hasattr(self.shell, 'alternative_toolbar')
|
||||
if self.plugin.using_alternative_toolbar:
|
||||
from alttoolbar_type import AltToolbarHeaderBar
|
||||
self.plugin.using_headerbar = isinstance(self.shell.alternative_toolbar.toolbar_type, AltToolbarHeaderBar)
|
||||
|
||||
if self.plugin.using_headerbar:
|
||||
self._use_standard_control = False
|
||||
|
||||
# register with headerbar to complete the setup for coverart-browser
|
||||
print ("registering")
|
||||
self.shell.alternative_toolbar.toolbar_type.setup_completed_async(self._headerbar_toolbar_completed)
|
||||
|
||||
if self._use_standard_control:
|
||||
# ... otherwise just use the standard menubutton approach
|
||||
self.source.props.visibility = True # make the source visible
|
||||
gs = GSetting()
|
||||
setting = gs.get_setting(gs.Path.PLUGIN)
|
||||
setting.bind(gs.PluginKey.TOOLBAR_POS, self, 'toolbar_pos',
|
||||
Gio.SettingsBindFlags.GET)
|
||||
|
||||
self.connect('notify::toolbar-pos', self._on_notify_toolbar_pos)
|
||||
self.shell.props.display_page_tree.connect(
|
||||
"selected", self.on_page_change
|
||||
)
|
||||
|
||||
def _connect_properties(self):
|
||||
gs = GSetting()
|
||||
setting = gs.get_setting(gs.Path.PLUGIN)
|
||||
setting.bind(gs.PluginKey.TOOLBAR_POS, self, 'toolbar_pos',
|
||||
Gio.SettingsBindFlags.GET)
|
||||
|
||||
self._create_menu()
|
||||
|
||||
def autostart_source(self):
|
||||
self.source.props.visibility = True
|
||||
|
||||
if self._use_standard_control:
|
||||
GLib.timeout_add(1000, self.shell.props.display_page_tree.select,
|
||||
self.source)
|
||||
|
||||
else:
|
||||
# mimic user clicking category button and cover switch
|
||||
self.shell.alternative_toolbar.toolbar_type.library_browser_radiobutton.set_active(True)
|
||||
self.shell.alternative_toolbar.toolbar_type.stack.set_visible_child_name("coverview")
|
||||
|
||||
def _headerbar_toolbar_completed(self, *args):
|
||||
print ("headerbar_toolbar_completed")
|
||||
# if we are using the alternative_toolbar and headerbar then setup the switch
|
||||
# which will control access to the various views
|
||||
self._sh_hcc = self.shell.alternative_toolbar.toolbar_type.connect('song-category-clicked',
|
||||
self._headerbar_category_clicked)
|
||||
self._add_coverart_header_switch()
|
||||
|
||||
sources = { self.shell.props.queue_source,
|
||||
self.shell.props.library_source,
|
||||
self.source }
|
||||
|
||||
for source in sources:
|
||||
self.shell.alternative_toolbar.toolbar_type.add_always_visible_source(source)
|
||||
|
||||
def _on_notify_toolbar_pos(self, *args):
|
||||
# for standard menu control ... when moving the toolbar position reposition the menubutton
|
||||
if self.toolbar_pos == TopToolbar.name:
|
||||
self._create_menu()
|
||||
else:
|
||||
self.cleanup()
|
||||
|
||||
def cleanup(self):
|
||||
|
||||
def cleanup(self, full_cleanup = False):
|
||||
# for standard menu control, cleanup where necessary
|
||||
if self.app_id:
|
||||
app = Gio.Application.get_default()
|
||||
for location in self.locations:
|
||||
app.remove_plugin_menu_item(location, self.app_id)
|
||||
self.app_id = None
|
||||
|
||||
if not self._use_standard_control and full_cleanup:
|
||||
self.shell.alternative_toolbar.toolbar_type.stack.disconnect(self._sh_stack_id)
|
||||
self.shell.alternative_toolbar.toolbar_type.stack.remove(self._box_coverview)
|
||||
self.shell.alternative_toolbar.toolbar_type.disconnect(self._sh_hcc)
|
||||
self.shell.alternative_toolbar.toolbar_type.headerbar.remove(self.stack_switcher)
|
||||
self.stack_switcher = None
|
||||
self._sh_stack_id = None
|
||||
self._sh_hcc = None
|
||||
|
||||
|
||||
def _create_menu(self):
|
||||
# for the standard menu control button add the button
|
||||
# to all supported view types
|
||||
app = Gio.Application.get_default()
|
||||
self.app_id = 'coverart-browser'
|
||||
|
||||
self.locations = ['library-toolbar']
|
||||
|
||||
action_name = 'coverart-browser-views'
|
||||
self.action = Gio.SimpleAction.new_stateful(
|
||||
action_name, GLib.VariantType.new('s'),
|
||||
self._views.get_action_name(ListView.name)
|
||||
)
|
||||
)
|
||||
self.action.connect("activate", self.view_change_cb)
|
||||
app.add_action(self.action)
|
||||
|
||||
|
||||
menu_item = Gio.MenuItem()
|
||||
section = Gio.Menu()
|
||||
menu = Gio.Menu()
|
||||
toolbar_item = Gio.MenuItem()
|
||||
|
||||
|
||||
for view_name in self._views.get_view_names():
|
||||
menu_item.set_label(self._views.get_menu_name(view_name))
|
||||
menu_item.set_action_and_target_value(
|
||||
'app.' + action_name, self._views.get_action_name(view_name)
|
||||
)
|
||||
)
|
||||
section.append_item(menu_item)
|
||||
|
||||
|
||||
menu.append_section(None, section)
|
||||
|
||||
cl = CoverLocale()
|
||||
cl.switch_locale(cl.Locale.LOCALE_DOMAIN)
|
||||
toolbar_item.set_label(_('Views'))
|
||||
cl.switch_locale(cl.Locale.LOCALE_DOMAIN)
|
||||
toolbar_item.set_label('…')
|
||||
cl.switch_locale(cl.Locale.RB)
|
||||
|
||||
toolbar_item.set_submenu(menu)
|
||||
@@ -258,26 +319,191 @@ class ExternalPluginMenu(GObject.Object):
|
||||
app.add_plugin_menu_item(location, self.app_id, toolbar_item)
|
||||
|
||||
|
||||
def _add_coverart_header_switch(self):
|
||||
# define the header switch control + stack control for coverart
|
||||
self._box_coverview = Gtk.Box()
|
||||
image_name = 'view-cover-symbolic'
|
||||
stack = self.shell.alternative_toolbar.toolbar_type.stack
|
||||
stack.add_named(self._box_coverview, "coverview")
|
||||
stack.child_set_property(self._box_coverview, "icon-name", image_name)
|
||||
|
||||
self.stack_switcher = Gtk.StackSwitcher()
|
||||
self.stack_switcher.set_stack(stack)
|
||||
self.stack_switcher.show_all()
|
||||
self.stack_switcher.set_sensitive(False)
|
||||
|
||||
self.shell.alternative_toolbar.toolbar_type.headerbar.pack_start(self.stack_switcher)
|
||||
|
||||
# create a treeview and store for all views coverart supports
|
||||
self._store = Gtk.ListStore(str, str)
|
||||
for view_name in self._views.get_view_names():
|
||||
self._store.append([self._views.get_menu_name(view_name), view_name])
|
||||
|
||||
tree = Gtk.TreeView(self._store)
|
||||
renderer = Gtk.CellRendererText()
|
||||
column = Gtk.TreeViewColumn(_("CoverArt"), renderer, text=0)
|
||||
tree.append_column(column)
|
||||
tree.connect('button-press-event', self._tree_row_click)
|
||||
self.tree = tree
|
||||
|
||||
self._box_coverview.pack_start(tree, True, True, 0)
|
||||
|
||||
self._sh_stack_id = stack.connect('notify::visible-child-name', self._change_stack)
|
||||
stack.show_all()
|
||||
self.stack = stack
|
||||
|
||||
self._current_tree_view = None
|
||||
|
||||
def _change_stack(self, widget, value):
|
||||
print ("changed stack")
|
||||
child_name = self.stack.get_visible_child_name()
|
||||
print (child_name)
|
||||
if child_name == "listview":
|
||||
self.source.props.visibility = False
|
||||
# if we've toggled to listview then we are no longer in coverart so reset back to songview
|
||||
self._current_tree_view = None
|
||||
self._select_view(ListView.name)
|
||||
if self.shell.alternative_toolbar.toolbar_type.library_song_radiobutton.get_active():
|
||||
self.stack_switcher.set_sensitive(False)
|
||||
return
|
||||
self.source.props.visibility = True
|
||||
|
||||
# so we are in coverview so we need to reset the coverview to what was last selected when in this mode
|
||||
selection = self.tree.get_selection()
|
||||
liststore, list_iter = selection.get_selected()
|
||||
if not list_iter:
|
||||
# nothing was selected to set the view back to what was remembered
|
||||
self._current_tree_view = self._select_view(None)
|
||||
treeiter = liststore.get_iter_first()
|
||||
|
||||
while treeiter != None:
|
||||
if liststore[treeiter][1] == self._current_tree_view:
|
||||
print ("about to set treeview")
|
||||
print (treeiter)
|
||||
path = liststore.get_path(treeiter)
|
||||
print (path)
|
||||
#self.tree.row_activated(liststore.get_path(treeiter), 0)
|
||||
self.tree.set_cursor(path)
|
||||
break
|
||||
treeiter = liststore.iter_next(treeiter)
|
||||
else:
|
||||
# we have been here before so set the view correctly
|
||||
path = liststore.get_path(list_iter)
|
||||
self._current_tree_view = liststore[path][1]
|
||||
self._select_view(liststore[path][1])
|
||||
|
||||
def _headerbar_category_clicked(self, headerbar, song_category):
|
||||
|
||||
print ("clicked headerbar song-category buttons")
|
||||
if self.stack.get_visible_child_name() == 'coverview' and song_category:
|
||||
# if we've clicked song when in coverview then we disable the switcher
|
||||
# and set the view back to song
|
||||
|
||||
#self.stack.set_visible_child_name('listview')
|
||||
|
||||
#if self.shell.props.display_page_tree.select != self.shell.props.library_source:
|
||||
# self._select_view(ListView.name)
|
||||
|
||||
#self.stack_switcher.set_sensitive(not song_category)
|
||||
#self.stack_switcher.set_sensitive(False)
|
||||
self.source.props.visibility = True
|
||||
|
||||
self._select_view(ListView.name)
|
||||
|
||||
if self.stack.get_visible_child_name() == 'listview' and not song_category:
|
||||
# if we've clicked category when in listview then we enable the switcher
|
||||
self.stack_switcher.set_sensitive(True)
|
||||
self.source.props.visibility = False
|
||||
|
||||
|
||||
if self.stack.get_visible_child_name() == 'listview' and song_category:
|
||||
# if we've clicked song when in listview then we disable the switcher
|
||||
self.stack_switcher.set_sensitive(False)
|
||||
self.source.props.visibility = False
|
||||
|
||||
if self.stack.get_visible_child_name() == 'coverview' and not song_category:
|
||||
# if we've clicked category when in coverview then we move to the last coverart view
|
||||
# and ensure the switcher is still enabled
|
||||
self.source.props.visibility = True
|
||||
|
||||
self._select_view(None)
|
||||
self.stack_switcher.set_sensitive(True)
|
||||
|
||||
def _tree_row_click(self, widget, event):
|
||||
'''
|
||||
event called when clicking on a row in the header treeview
|
||||
'''
|
||||
print('_tree_row_click')
|
||||
|
||||
try:
|
||||
treepath, treecolumn, cellx, celly = widget.get_path_at_pos(event.x, event.y)
|
||||
except:
|
||||
return
|
||||
|
||||
print (self._store[treepath][1])
|
||||
self._current_tree_view = self._store[treepath][1]
|
||||
self._select_view(self._store[treepath][1])
|
||||
|
||||
|
||||
def on_page_change(self, display_page_tree, page):
|
||||
'''
|
||||
Called when the display page changes. Grabs query models and sets the
|
||||
standard menubutton - Called when the display page changes. Grabs query models and sets the
|
||||
active view.
|
||||
'''
|
||||
|
||||
print ("on_page_change")
|
||||
if page == self.shell.props.library_source:
|
||||
self.action.set_state(self._views.get_action_name(ListView.name))
|
||||
elif page == self.shell.props.queue_source:
|
||||
self.action.set_state(self._views.get_action_name(QueueView.name))
|
||||
elif page == self.plugin.playlist_source:
|
||||
self.action.set_state(self._views.get_action_name(PlaySourceView.name))
|
||||
|
||||
|
||||
def view_change_cb(self, action, current):
|
||||
'''
|
||||
Called when the view state on a page is changed. Sets the new
|
||||
standard menubutton - Called when the view state on a page is changed. Sets the new
|
||||
state.
|
||||
'''
|
||||
print ("view_change_cb")
|
||||
action.set_state(current)
|
||||
view_name = self._views.get_view_name_for_action(current)
|
||||
if view_name != ListView.name:
|
||||
self._select_view(view_name)
|
||||
|
||||
def _select_view(self, view_name):
|
||||
'''
|
||||
with the view_name decide which view to be displayed
|
||||
or if view_name is None then use the last remembered view_name
|
||||
|
||||
return view_name
|
||||
'''
|
||||
|
||||
if not self.shell.props.display_page_tree:
|
||||
return
|
||||
|
||||
print ("_select_view")
|
||||
print (view_name)
|
||||
if view_name != ListView.name and \
|
||||
view_name != QueueView.name and \
|
||||
view_name != PlaySourceView.name:
|
||||
gs = GSetting()
|
||||
setting = gs.get_setting(gs.Path.PLUGIN)
|
||||
setting[gs.PluginKey.VIEW_NAME] = view_name
|
||||
if view_name:
|
||||
setting[gs.PluginKey.VIEW_NAME] = view_name
|
||||
else:
|
||||
view_name = setting[gs.PluginKey.VIEW_NAME]
|
||||
player = self.shell.props.shell_player
|
||||
player.set_selected_source(self.source) #.playlist_source)
|
||||
|
||||
GLib.idle_add(self.shell.props.display_page_tree.select,
|
||||
self.source)
|
||||
|
||||
self.source)
|
||||
elif view_name == ListView.name:
|
||||
GLib.idle_add(self.shell.props.display_page_tree.select,
|
||||
self.shell.props.library_source)
|
||||
elif view_name == QueueView.name:
|
||||
GLib.idle_add(self.shell.props.display_page_tree.select,
|
||||
self.shell.props.queue_source)
|
||||
elif view_name == PlaySourceView.name:
|
||||
GLib.idle_add(self.shell.props.display_page_tree.select,
|
||||
self.plugin.playlist_source)
|
||||
|
||||
return view_name
|
||||
|
||||
@@ -16,23 +16,27 @@
|
||||
# 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
import locale
|
||||
import gettext
|
||||
import os
|
||||
import shutil
|
||||
import webbrowser
|
||||
|
||||
from gi.repository import Gio
|
||||
from gi.repository import GObject
|
||||
from gi.repository import Gtk
|
||||
from gi.repository import PeasGtk
|
||||
from gi.repository import Peas
|
||||
from gi.repository import RB
|
||||
from gi.repository import Gdk
|
||||
from gi.repository import GLib
|
||||
|
||||
import rb
|
||||
import locale
|
||||
import gettext
|
||||
import os
|
||||
import shutil
|
||||
import webbrowser
|
||||
from stars import ReactiveStar
|
||||
from stars import StarSize
|
||||
import coverart_rb3compat as rb3compat
|
||||
|
||||
|
||||
def webkit_support():
|
||||
'''
|
||||
function that returns True/False if webkit technology is supported
|
||||
@@ -41,6 +45,7 @@ def webkit_support():
|
||||
settings = gs.get_setting(gs.Path.PLUGIN)
|
||||
return settings[gs.PluginKey.WEBKIT]
|
||||
|
||||
|
||||
class CoverLocale:
|
||||
'''
|
||||
This class manages the locale
|
||||
@@ -128,7 +133,6 @@ class GSetting:
|
||||
|
||||
self.PluginKey = self._enum(
|
||||
CUSTOM_STATUSBAR='custom-statusbar',
|
||||
DISPLAY_BOTTOM='display-bottom',
|
||||
DISPLAY_TEXT='display-text',
|
||||
DISPLAY_TEXT_POS='display-text-pos',
|
||||
RANDOM='random-queue',
|
||||
@@ -163,8 +167,13 @@ class GSetting:
|
||||
FLOW_MAX='flow-max-albums',
|
||||
WEBKIT='webkit-support',
|
||||
ARTIST_PANED_POSITION='artist-paned-pos',
|
||||
ARTIST_PANED_DISPLAY='artist-paned-display',
|
||||
USE_FAVOURITES='use-favourites')
|
||||
USE_FAVOURITES='use-favourites',
|
||||
ARTIST_INFO_PANED_POSITION='artist-info-paned-pos',
|
||||
LAST_GENRE_FOLDER='last-genre-folder',
|
||||
ENTRY_VIEW_MODE='entry-view-mode',
|
||||
FOLLOWING='following',
|
||||
ACTIVATIONS='activations',
|
||||
TEXT_ALIGNMENT='text-alignment')
|
||||
|
||||
self.setting = {}
|
||||
|
||||
@@ -224,6 +233,7 @@ class Preferences(GObject.Object, PeasGtk.Configurable):
|
||||
'''
|
||||
__gtype_name__ = 'CoverArtBrowserPreferences'
|
||||
object = GObject.property(type=GObject.Object)
|
||||
|
||||
GENRE_POPUP = 1
|
||||
GENRE_LIST = 2
|
||||
|
||||
@@ -235,85 +245,93 @@ class Preferences(GObject.Object, PeasGtk.Configurable):
|
||||
GObject.Object.__init__(self)
|
||||
gs = GSetting()
|
||||
self.settings = gs.get_setting(gs.Path.PLUGIN)
|
||||
|
||||
|
||||
self._first_run = True
|
||||
self._cover_size = 0
|
||||
self._cover_size_delay = 0
|
||||
|
||||
def do_create_configure_widget(self):
|
||||
'''
|
||||
Creates the plugin's preferences dialog
|
||||
'''
|
||||
return self._create_display_contents(self)
|
||||
|
||||
|
||||
def display_preferences_dialog(self, plugin):
|
||||
print("DEBUG - display_preferences_dialog")
|
||||
if self._first_run:
|
||||
self._first_run = False
|
||||
#self._dialog = Gtk.Dialog(_('Browser Preferences'), None,
|
||||
# Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT, (Gtk.STOCK_OK, Gtk.ResponseType.OK))
|
||||
|
||||
|
||||
cl = CoverLocale()
|
||||
cl.switch_locale(cl.Locale.LOCALE_DOMAIN)
|
||||
|
||||
self._dialog = Gtk.Dialog(modal=True, destroy_with_parent=True)
|
||||
self._dialog.add_button(Gtk.STOCK_OK, Gtk.ResponseType.OK)
|
||||
self._dialog.set_title(_('Browser Preferences'))
|
||||
self._dialog.set_title(_('Browser Preferences'))
|
||||
content_area = self._dialog.get_content_area()
|
||||
content_area.pack_start(self._create_display_contents(plugin), True, True, 0)
|
||||
|
||||
|
||||
helpbutton = self._dialog.add_button(Gtk.STOCK_HELP, Gtk.ResponseType.HELP)
|
||||
helpbutton.connect('clicked', self._display_help)
|
||||
|
||||
|
||||
self._dialog.show_all()
|
||||
|
||||
|
||||
print("shown")
|
||||
|
||||
while True:
|
||||
response = self._dialog.run()
|
||||
|
||||
|
||||
print("and run")
|
||||
|
||||
if response != Gtk.ResponseType.HELP:
|
||||
break
|
||||
|
||||
|
||||
self._dialog.hide()
|
||||
|
||||
|
||||
print("DEBUG - display_preferences_dialog end")
|
||||
|
||||
def _display_help(self, *args):
|
||||
peas = Peas.Engine.get_default()
|
||||
uri = peas.get_plugin_info('coverart_browser').get_help_uri()
|
||||
|
||||
|
||||
webbrowser.open(uri)
|
||||
|
||||
|
||||
def _create_display_contents(self, plugin):
|
||||
print("DEBUG - create_display_contents")
|
||||
# create the ui
|
||||
self._first_run = True
|
||||
cl = CoverLocale()
|
||||
cl.switch_locale(cl.Locale.LOCALE_DOMAIN)
|
||||
builder = Gtk.Builder()
|
||||
builder.set_translation_domain(cl.Locale.LOCALE_DOMAIN)
|
||||
builder.add_from_file(rb.find_plugin_file(plugin,
|
||||
'ui/coverart_browser_prefs.ui'))
|
||||
'ui/coverart_browser_prefs.ui'))
|
||||
self.launchpad_button = builder.get_object('show_launchpad')
|
||||
self.launchpad_label = builder.get_object('launchpad_label')
|
||||
|
||||
|
||||
builder.connect_signals(self)
|
||||
|
||||
#. TRANSLATORS: Do not translate this string.
|
||||
# . TRANSLATORS: Do not translate this string.
|
||||
translators = _('translator-credits')
|
||||
|
||||
if translators != "translator-credits":
|
||||
self.launchpad_label.set_text(translators)
|
||||
else:
|
||||
self.launchpad_button.set_visible(False)
|
||||
|
||||
|
||||
gs = GSetting()
|
||||
# bind the toggles to the settings
|
||||
toggle_statusbar = builder.get_object('custom_statusbar_checkbox')
|
||||
self.settings.bind(gs.PluginKey.CUSTOM_STATUSBAR,
|
||||
toggle_statusbar, 'active', Gio.SettingsBindFlags.DEFAULT)
|
||||
|
||||
toggle_bottom = builder.get_object('display_bottom_checkbox')
|
||||
self.settings.bind(gs.PluginKey.DISPLAY_BOTTOM, toggle_bottom,
|
||||
'active', Gio.SettingsBindFlags.DEFAULT)
|
||||
toggle_statusbar, 'active', Gio.SettingsBindFlags.DEFAULT)
|
||||
|
||||
toggle_text = builder.get_object('display_text_checkbox')
|
||||
self.settings.bind(gs.PluginKey.DISPLAY_TEXT, toggle_text, 'active',
|
||||
Gio.SettingsBindFlags.DEFAULT)
|
||||
Gio.SettingsBindFlags.DEFAULT)
|
||||
|
||||
box_text = builder.get_object('display_text_box')
|
||||
self.settings.bind(gs.PluginKey.DISPLAY_TEXT, box_text, 'sensitive',
|
||||
Gio.SettingsBindFlags.GET)
|
||||
|
||||
Gio.SettingsBindFlags.GET)
|
||||
|
||||
self.display_text_pos = self.settings[gs.PluginKey.DISPLAY_TEXT_POS]
|
||||
self.display_text_under_radiobutton = builder.get_object('display_text_under_radiobutton')
|
||||
self.display_text_within_radiobutton = builder.get_object('display_text_within_radiobutton')
|
||||
@@ -323,40 +341,43 @@ class Preferences(GObject.Object, PeasGtk.Configurable):
|
||||
else:
|
||||
self.display_text_within_radiobutton.set_active(True)
|
||||
|
||||
|
||||
random_scale = builder.get_object('random_adjustment')
|
||||
self.settings.bind(gs.PluginKey.RANDOM, random_scale, 'value',
|
||||
Gio.SettingsBindFlags.DEFAULT)
|
||||
Gio.SettingsBindFlags.DEFAULT)
|
||||
|
||||
toggle_text_ellipsize = builder.get_object(
|
||||
'display_text_ellipsize_checkbox')
|
||||
self.settings.bind(gs.PluginKey.DISPLAY_TEXT_ELLIPSIZE,
|
||||
toggle_text_ellipsize, 'active', Gio.SettingsBindFlags.DEFAULT)
|
||||
toggle_text_ellipsize, 'active', Gio.SettingsBindFlags.DEFAULT)
|
||||
|
||||
box_text_ellipsize_length = builder.get_object(
|
||||
'display_text_ellipsize_length_box')
|
||||
self.settings.bind(gs.PluginKey.DISPLAY_TEXT_ELLIPSIZE,
|
||||
box_text_ellipsize_length, 'sensitive', Gio.SettingsBindFlags.GET)
|
||||
box_text_ellipsize_length, 'sensitive', Gio.SettingsBindFlags.GET)
|
||||
|
||||
spinner_text_ellipsize_length = builder.get_object(
|
||||
'display_text_ellipsize_length_spin')
|
||||
self.settings.bind(gs.PluginKey.DISPLAY_TEXT_ELLIPSIZE_LENGTH,
|
||||
spinner_text_ellipsize_length, 'value',
|
||||
Gio.SettingsBindFlags.DEFAULT)
|
||||
spinner_text_ellipsize_length, 'value',
|
||||
Gio.SettingsBindFlags.DEFAULT)
|
||||
|
||||
spinner_font_size = builder.get_object(
|
||||
'display_font_spin')
|
||||
self.settings.bind(gs.PluginKey.DISPLAY_FONT_SIZE,
|
||||
spinner_font_size, 'value',
|
||||
Gio.SettingsBindFlags.DEFAULT)
|
||||
spinner_font_size, 'value',
|
||||
Gio.SettingsBindFlags.DEFAULT)
|
||||
|
||||
cover_size_scale = builder.get_object('cover_size_adjustment')
|
||||
self.settings.bind(gs.PluginKey.COVER_SIZE, cover_size_scale, 'value',
|
||||
Gio.SettingsBindFlags.DEFAULT)
|
||||
|
||||
#self.settings.bind(gs.PluginKey.COVER_SIZE, cover_size_scale, 'value',
|
||||
# Gio.SettingsBindFlags.DEFAULT)
|
||||
self._cover_size = self.settings[gs.PluginKey.COVER_SIZE]
|
||||
cover_size_scale.set_value(self._cover_size)
|
||||
cover_size_scale.connect('value-changed', self.on_cover_size_scale_changed)
|
||||
|
||||
add_shadow = builder.get_object('add_shadow_checkbox')
|
||||
self.settings.bind(gs.PluginKey.ADD_SHADOW, add_shadow, 'active',
|
||||
Gio.SettingsBindFlags.DEFAULT)
|
||||
Gio.SettingsBindFlags.DEFAULT)
|
||||
|
||||
rated_box = builder.get_object('rated_box')
|
||||
self.stars = ReactiveStar(size=StarSize.BIG)
|
||||
@@ -371,43 +392,53 @@ class Preferences(GObject.Object, PeasGtk.Configurable):
|
||||
|
||||
autostart = builder.get_object('autostart_checkbox')
|
||||
self.settings.bind(gs.PluginKey.AUTOSTART,
|
||||
autostart, 'active', Gio.SettingsBindFlags.DEFAULT)
|
||||
autostart, 'active', Gio.SettingsBindFlags.DEFAULT)
|
||||
|
||||
toolbar_pos_combo = builder.get_object('show_in_combobox')
|
||||
renderer = Gtk.CellRendererText()
|
||||
toolbar_pos_combo.pack_start(renderer, True)
|
||||
toolbar_pos_combo.add_attribute(renderer, 'text', 1)
|
||||
self.settings.bind(gs.PluginKey.TOOLBAR_POS, toolbar_pos_combo,
|
||||
'active-id', Gio.SettingsBindFlags.DEFAULT)
|
||||
'active-id', Gio.SettingsBindFlags.DEFAULT)
|
||||
|
||||
light_source_combo = builder.get_object('light_source_combobox')
|
||||
renderer = Gtk.CellRendererText()
|
||||
light_source_combo.pack_start(renderer, True)
|
||||
light_source_combo.add_attribute(renderer, 'text', 1)
|
||||
self.settings.bind(gs.PluginKey.SHADOW_IMAGE, light_source_combo,
|
||||
'active-id', Gio.SettingsBindFlags.DEFAULT)
|
||||
'active-id', Gio.SettingsBindFlags.DEFAULT)
|
||||
|
||||
combo_liststore = builder.get_object('combo_liststore')
|
||||
|
||||
from coverart_utils import Theme
|
||||
|
||||
|
||||
for theme in Theme(self).themes:
|
||||
combo_liststore.append([theme, theme])
|
||||
|
||||
|
||||
theme_combo = builder.get_object('theme_combobox')
|
||||
renderer = Gtk.CellRendererText()
|
||||
theme_combo.pack_start(renderer, True)
|
||||
theme_combo.add_attribute(renderer, 'text', 1)
|
||||
self.settings.bind(gs.PluginKey.THEME, theme_combo,
|
||||
'active-id', Gio.SettingsBindFlags.DEFAULT)
|
||||
'active-id', Gio.SettingsBindFlags.DEFAULT)
|
||||
|
||||
button_relief = builder.get_object('button_relief_checkbox')
|
||||
self.settings.bind(gs.PluginKey.BUTTON_RELIEF, button_relief, 'active',
|
||||
Gio.SettingsBindFlags.DEFAULT)
|
||||
Gio.SettingsBindFlags.DEFAULT)
|
||||
|
||||
# create user data files
|
||||
popup = RB.find_user_data_file('plugins/coverart_browser/img/usericons/popups.xml')
|
||||
|
||||
cachedir = RB.user_cache_dir() + "/coverart_browser/usericons"
|
||||
if not os.path.exists(cachedir):
|
||||
os.makedirs(cachedir)
|
||||
|
||||
popup = cachedir + "/popups.xml"
|
||||
|
||||
temp = RB.find_user_data_file('plugins/coverart_browser/img/usericons/popups.xml')
|
||||
|
||||
# lets see if there is a legacy file - if necessary copy it to the cache dir
|
||||
if os.path.isfile(temp) and not os.path.isfile(popup):
|
||||
shutil.copyfile(temp, popup)
|
||||
|
||||
if not os.path.isfile(popup):
|
||||
template = rb.find_plugin_file(plugin, 'template/popups.xml')
|
||||
folder = os.path.split(popup)[0]
|
||||
@@ -418,7 +449,6 @@ class Preferences(GObject.Object, PeasGtk.Configurable):
|
||||
# now prepare the genre tab
|
||||
from coverart_utils import GenreConfiguredSpriteSheet
|
||||
from coverart_utils import get_stock_size
|
||||
from coverart_utils import GenreType
|
||||
|
||||
self._sheet = GenreConfiguredSpriteSheet(plugin, "genre", get_stock_size())
|
||||
|
||||
@@ -427,13 +457,13 @@ class Preferences(GObject.Object, PeasGtk.Configurable):
|
||||
self._iters = {}
|
||||
for key in list(self._sheet.keys()):
|
||||
store_iter = self.alt_liststore.append([key, self._sheet[key]])
|
||||
self._iters[(key,self.GENRE_POPUP)] = store_iter
|
||||
self._iters[(key, self.GENRE_POPUP)] = store_iter
|
||||
|
||||
for key, value in self._sheet.genre_alternate.items():
|
||||
if key.genre_type == GenreConfiguredSpriteSheet.GENRE_USER:
|
||||
store_iter = self.alt_user_liststore.append([key.name,
|
||||
self._sheet[self._sheet.genre_alternate[key]],
|
||||
self._sheet.genre_alternate[key]])
|
||||
self._sheet[self._sheet.genre_alternate[key]],
|
||||
self._sheet.genre_alternate[key]])
|
||||
self._iters[(key.name, self.GENRE_LIST)] = store_iter
|
||||
|
||||
self.amend_mode = False
|
||||
@@ -443,18 +473,21 @@ class Preferences(GObject.Object, PeasGtk.Configurable):
|
||||
self.genre_view = builder.get_object('genre_view')
|
||||
self.save_button = builder.get_object('save_button')
|
||||
self.filechooserdialog = builder.get_object('filechooserdialog')
|
||||
last_genre_folder = self.settings[gs.PluginKey.LAST_GENRE_FOLDER]
|
||||
if last_genre_folder != "":
|
||||
self.filechooserdialog.set_current_folder(last_genre_folder)
|
||||
|
||||
padding_scale = builder.get_object('padding_adjustment')
|
||||
self.settings.bind(gs.PluginKey.ICON_PADDING, padding_scale, 'value',
|
||||
Gio.SettingsBindFlags.DEFAULT)
|
||||
Gio.SettingsBindFlags.DEFAULT)
|
||||
|
||||
spacing_scale = builder.get_object('spacing_adjustment')
|
||||
self.settings.bind(gs.PluginKey.ICON_SPACING, spacing_scale, 'value',
|
||||
Gio.SettingsBindFlags.DEFAULT)
|
||||
Gio.SettingsBindFlags.DEFAULT)
|
||||
|
||||
icon_automatic = builder.get_object('icon_automatic_checkbox')
|
||||
self.settings.bind(gs.PluginKey.ICON_AUTOMATIC,
|
||||
icon_automatic, 'active', Gio.SettingsBindFlags.DEFAULT)
|
||||
icon_automatic, 'active', Gio.SettingsBindFlags.DEFAULT)
|
||||
|
||||
#flow tab
|
||||
flow_combo = builder.get_object('flow_combobox')
|
||||
@@ -462,27 +495,27 @@ class Preferences(GObject.Object, PeasGtk.Configurable):
|
||||
flow_combo.pack_start(renderer, True)
|
||||
flow_combo.add_attribute(renderer, 'text', 1)
|
||||
self.settings.bind(gs.PluginKey.FLOW_APPEARANCE, flow_combo,
|
||||
'active-id', Gio.SettingsBindFlags.DEFAULT)
|
||||
'active-id', Gio.SettingsBindFlags.DEFAULT)
|
||||
|
||||
flow_hide = builder.get_object('hide_caption_checkbox')
|
||||
self.settings.bind(gs.PluginKey.FLOW_HIDE_CAPTION,
|
||||
flow_hide, 'active', Gio.SettingsBindFlags.DEFAULT)
|
||||
flow_hide, 'active', Gio.SettingsBindFlags.DEFAULT)
|
||||
|
||||
flow_scale = builder.get_object('cover_scale_adjustment')
|
||||
self.settings.bind(gs.PluginKey.FLOW_SCALE, flow_scale, 'value',
|
||||
Gio.SettingsBindFlags.DEFAULT)
|
||||
Gio.SettingsBindFlags.DEFAULT)
|
||||
|
||||
flow_width = builder.get_object('cover_width_adjustment')
|
||||
self.settings.bind(gs.PluginKey.FLOW_WIDTH, flow_width, 'value',
|
||||
Gio.SettingsBindFlags.DEFAULT)
|
||||
Gio.SettingsBindFlags.DEFAULT)
|
||||
|
||||
flow_max = builder.get_object('flow_max_adjustment')
|
||||
self.settings.bind(gs.PluginKey.FLOW_MAX, flow_max, 'value',
|
||||
Gio.SettingsBindFlags.DEFAULT)
|
||||
Gio.SettingsBindFlags.DEFAULT)
|
||||
|
||||
flow_automatic = builder.get_object('automatic_checkbox')
|
||||
self.settings.bind(gs.PluginKey.FLOW_AUTOMATIC,
|
||||
flow_automatic, 'active', Gio.SettingsBindFlags.DEFAULT)
|
||||
flow_automatic, 'active', Gio.SettingsBindFlags.DEFAULT)
|
||||
|
||||
self.background_colour = self.settings[gs.PluginKey.FLOW_BACKGROUND_COLOUR]
|
||||
self.white_radiobutton = builder.get_object('white_radiobutton')
|
||||
@@ -492,13 +525,48 @@ class Preferences(GObject.Object, PeasGtk.Configurable):
|
||||
self.white_radiobutton.set_active(True)
|
||||
else:
|
||||
self.black_radiobutton.set_active(True)
|
||||
|
||||
|
||||
self.text_alignment = self.settings[gs.PluginKey.TEXT_ALIGNMENT]
|
||||
self.text_alignment_left_radiobutton = builder.get_object('left_alignment_radiobutton')
|
||||
self.text_alignment_centre_radiobutton = builder.get_object('centre_alignment_radiobutton')
|
||||
self.text_alignment_right_radiobutton = builder.get_object('right_alignment_radiobutton')
|
||||
|
||||
if self.text_alignment == 0:
|
||||
self.text_alignment_left_radiobutton.set_active(True)
|
||||
elif self.text_alignment == 1:
|
||||
self.text_alignment_centre_radiobutton.set_active(True)
|
||||
else:
|
||||
self.text_alignment_right_radiobutton.set_active(True)
|
||||
|
||||
# return the dialog
|
||||
self._first_run = False
|
||||
print("end create dialog contents")
|
||||
return builder.get_object('main_notebook')
|
||||
|
||||
def on_cover_size_scale_changed(self, scale):
|
||||
self._cover_size = scale.get_value()
|
||||
|
||||
def delay(*args):
|
||||
print('delay')
|
||||
print(self._cover_size_delay)
|
||||
self._cover_size_delay = self._cover_size_delay + 1
|
||||
|
||||
if self._cover_size_delay >= 8:
|
||||
gs = GSetting()
|
||||
self.settings[gs.PluginKey.COVER_SIZE] = self._cover_size
|
||||
self._cover_size_delay = 0
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
if self._cover_size_delay == 0:
|
||||
Gdk.threads_add_timeout(GLib.PRIORITY_DEFAULT_IDLE, 100, delay, None)
|
||||
else:
|
||||
self._cover_size_delay = 1
|
||||
|
||||
def on_flow_combobox_changed(self, combobox):
|
||||
current_val = combobox.get_model()[combobox.get_active()][0]
|
||||
gs=GSetting()
|
||||
gs = GSetting()
|
||||
if self.settings[gs.PluginKey.FLOW_APPEARANCE] != current_val:
|
||||
if current_val == 'flow-vert':
|
||||
default_size = 150
|
||||
@@ -506,10 +574,10 @@ class Preferences(GObject.Object, PeasGtk.Configurable):
|
||||
default_size = 600
|
||||
|
||||
self.settings[gs.PluginKey.FLOW_WIDTH] = default_size
|
||||
|
||||
|
||||
if current_val == 'carousel':
|
||||
self.settings[gs.PluginKey.FLOW_HIDE_CAPTION] = True
|
||||
|
||||
|
||||
def on_background_radio_toggled(self, button):
|
||||
if button.get_active():
|
||||
gs = GSetting()
|
||||
@@ -517,8 +585,11 @@ class Preferences(GObject.Object, PeasGtk.Configurable):
|
||||
self.settings[gs.PluginKey.FLOW_BACKGROUND_COLOUR] = 'W'
|
||||
else:
|
||||
self.settings[gs.PluginKey.FLOW_BACKGROUND_COLOUR] = 'B'
|
||||
|
||||
|
||||
def on_display_text_pos_radio_toggled(self, button):
|
||||
if self._first_run:
|
||||
return
|
||||
|
||||
if button.get_active():
|
||||
gs = GSetting()
|
||||
if button == self.display_text_under_radiobutton:
|
||||
@@ -526,10 +597,23 @@ class Preferences(GObject.Object, PeasGtk.Configurable):
|
||||
else:
|
||||
self.settings[gs.PluginKey.DISPLAY_TEXT_POS] = False
|
||||
self.settings[gs.PluginKey.ADD_SHADOW] = False
|
||||
|
||||
|
||||
def on_text_alignment_radiobutton_toggled(self, button):
|
||||
if self._first_run:
|
||||
return
|
||||
|
||||
if button.get_active():
|
||||
gs = GSetting()
|
||||
if button == self.text_alignment_left_radiobutton:
|
||||
self.settings[gs.PluginKey.TEXT_ALIGNMENT] = 0
|
||||
elif button == self.text_alignment_centre_radiobutton:
|
||||
self.settings[gs.PluginKey.TEXT_ALIGNMENT] = 1
|
||||
else:
|
||||
self.settings[gs.PluginKey.TEXT_ALIGNMENT] = 2
|
||||
|
||||
def on_add_shadow_checkbox_toggled(self, button):
|
||||
if button.get_active():
|
||||
#gs = GSetting()
|
||||
# gs = GSetting()
|
||||
#self.settings[gs.PluginKey.DISPLAY_TEXT_POS] = True
|
||||
self.display_text_under_radiobutton.set_active(True)
|
||||
|
||||
@@ -542,32 +626,32 @@ class Preferences(GObject.Object, PeasGtk.Configurable):
|
||||
'''
|
||||
action when genre edit area is saved
|
||||
'''
|
||||
entry_value = self.genre_entry.get_text()
|
||||
entry_value = self.genre_entry.get_text()
|
||||
treeiter = self.genre_combobox.get_active_iter()
|
||||
icon_value = self.alt_liststore[treeiter][0]
|
||||
# model 0 is the icon name, model 1 is the pixbuf
|
||||
|
||||
|
||||
if self.amend_mode:
|
||||
key = self._sheet.amend_genre_info(self.current_genre,
|
||||
entry_value, icon_value)
|
||||
entry_value, icon_value)
|
||||
|
||||
self.alt_user_liststore[self._iters[(self.current_genre,
|
||||
self.GENRE_LIST)]][1]=self._sheet[self._sheet.genre_alternate[key]]
|
||||
self.GENRE_LIST)]][1] = self._sheet[self._sheet.genre_alternate[key]]
|
||||
self.alt_user_liststore[self._iters[(self.current_genre,
|
||||
self.GENRE_LIST)]][0]=key.name
|
||||
self.GENRE_LIST)]][0] = key.name
|
||||
store_iter = self._iters[(self.current_genre, self.GENRE_LIST)]
|
||||
del self._iters[(self.current_genre, self.GENRE_LIST)]
|
||||
self._iters[(key.name, self.GENRE_LIST)] = store_iter
|
||||
|
||||
|
||||
else:
|
||||
self.amend_mode = True
|
||||
key = self._sheet.amend_genre_info('',
|
||||
entry_value, icon_value)
|
||||
entry_value, icon_value)
|
||||
self.current_genre = key.name
|
||||
|
||||
store_iter = self.alt_user_liststore.append([key.name,
|
||||
self._sheet[self._sheet.genre_alternate[key]],
|
||||
self._sheet.genre_alternate[key]])
|
||||
self._sheet[self._sheet.genre_alternate[key]],
|
||||
self._sheet.genre_alternate[key]])
|
||||
self._iters[(key.name, self.GENRE_LIST)] = store_iter
|
||||
selection = self.genre_view.get_selection()
|
||||
selection.select_iter(store_iter)
|
||||
@@ -575,15 +659,23 @@ class Preferences(GObject.Object, PeasGtk.Configurable):
|
||||
self.save_button.set_sensitive(False)
|
||||
self._toggle_new_genre_state()
|
||||
|
||||
|
||||
|
||||
def on_genre_filechooserbutton_file_set(self, filechooser):
|
||||
'''
|
||||
action when genre new icon button is pressed
|
||||
'''
|
||||
key = self._sheet.add_genre_icon( self.filechooserdialog.get_filename() )
|
||||
key = self._sheet.add_genre_icon(self.filechooserdialog.get_filename())
|
||||
store_iter = self.alt_liststore.append([key.name, self._sheet[key.name]])
|
||||
self._iters[(key.name,self.GENRE_POPUP)] = store_iter
|
||||
|
||||
self._iters[(key.name, self.GENRE_POPUP)] = store_iter
|
||||
|
||||
gs = GSetting()
|
||||
last_genre_folder = self.filechooserdialog.get_current_folder()
|
||||
|
||||
print(last_genre_folder)
|
||||
print(self.filechooserdialog.get_filename())
|
||||
if last_genre_folder:
|
||||
self.settings[gs.PluginKey.LAST_GENRE_FOLDER] = last_genre_folder
|
||||
|
||||
def on_genre_view_selection_changed(self, view):
|
||||
'''
|
||||
action when user selects a row in the list of genres
|
||||
@@ -595,7 +687,7 @@ class Preferences(GObject.Object, PeasGtk.Configurable):
|
||||
if index != '':
|
||||
self.genre_combobox.set_active_iter(self._iters[(index, self.GENRE_POPUP)])
|
||||
self.amend_mode = True
|
||||
self.current_genre=rb3compat.unicodestr(model[genre_iter][0], 'utf-8')
|
||||
self.current_genre = rb3compat.unicodestr(model[genre_iter][0], 'utf-8')
|
||||
else:
|
||||
self.genre_entry.set_text('')
|
||||
self.genre_combobox.set_active_iter(None)
|
||||
@@ -609,7 +701,7 @@ class Preferences(GObject.Object, PeasGtk.Configurable):
|
||||
self.blank_iter = None
|
||||
except:
|
||||
self.blank_iter = None
|
||||
|
||||
|
||||
def on_add_button_clicked(self, button):
|
||||
'''
|
||||
action when a new genre is added to the table
|
||||
@@ -620,8 +712,8 @@ class Preferences(GObject.Object, PeasGtk.Configurable):
|
||||
self.blank_iter = self.alt_user_liststore.append(['', None, ''])
|
||||
selection = self.genre_view.get_selection()
|
||||
selection.select_iter(self.blank_iter)
|
||||
|
||||
|
||||
|
||||
|
||||
def on_delete_button_clicked(self, button):
|
||||
'''
|
||||
action when a genre is to be deleted
|
||||
@@ -630,7 +722,7 @@ class Preferences(GObject.Object, PeasGtk.Configurable):
|
||||
|
||||
model, genre_iter = selection.get_selected()
|
||||
if genre_iter:
|
||||
index = rb3compat.unicodestr(model[genre_iter][0],'utf-8')
|
||||
index = rb3compat.unicodestr(model[genre_iter][0], 'utf-8')
|
||||
model.remove(genre_iter)
|
||||
|
||||
if index:
|
||||
@@ -638,7 +730,7 @@ class Preferences(GObject.Object, PeasGtk.Configurable):
|
||||
self._sheet.delete_genre(index)
|
||||
|
||||
self._toggle_new_genre_state()
|
||||
|
||||
|
||||
def set_save_sensitivity(self, _):
|
||||
'''
|
||||
action to toggle the state of the save button depending
|
||||
@@ -652,7 +744,7 @@ class Preferences(GObject.Object, PeasGtk.Configurable):
|
||||
try:
|
||||
test = self._iters[(entry_value, self.GENRE_LIST)]
|
||||
if RB.search_fold(self.current_genre) == RB.search_fold(entry_value):
|
||||
#if the current entry is the same then could save
|
||||
# if the current entry is the same then could save
|
||||
enable = True
|
||||
except:
|
||||
# reach here if this is a brand new entry
|
||||
@@ -678,8 +770,8 @@ class Preferences(GObject.Object, PeasGtk.Configurable):
|
||||
else:
|
||||
test = True
|
||||
|
||||
self.settings[gs.PluginKey.NEW_GENRE_ICON]=test
|
||||
|
||||
self.settings[gs.PluginKey.NEW_GENRE_ICON] = test
|
||||
|
||||
def on_show_launchpad_toggled(self, button):
|
||||
self.launchpad_label.set_visible(button.get_active())
|
||||
|
||||
|
||||
@@ -16,11 +16,17 @@
|
||||
# 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
from gi.repository import GdkPixbuf
|
||||
|
||||
from datetime import date
|
||||
from collections import OrderedDict
|
||||
from collections import namedtuple
|
||||
|
||||
from gi.repository import GObject
|
||||
from gi.repository import Gdk
|
||||
from gi.repository import RB
|
||||
from gi.repository import Gio
|
||||
from gi.repository import GLib
|
||||
|
||||
from coverart_browser_prefs import CoverLocale
|
||||
from coverart_browser_prefs import GSetting
|
||||
from coverart_utils import create_pixbuf_from_file_at_size
|
||||
@@ -29,20 +35,17 @@ from coverart_utils import ConfiguredSpriteSheet
|
||||
from coverart_utils import get_stock_size
|
||||
from coverart_utils import CaseInsensitiveDict
|
||||
from coverart_utils import Theme
|
||||
from datetime import date
|
||||
from collections import OrderedDict
|
||||
import rb
|
||||
import coverart_rb3compat as rb3compat
|
||||
|
||||
from collections import namedtuple
|
||||
|
||||
|
||||
MenuNodeT = namedtuple('MenuNode', 'label menutype typevalue')
|
||||
|
||||
|
||||
|
||||
def MenuNode(label, menutype=None, typevalue=None):
|
||||
return MenuNodeT(label, menutype, typevalue)
|
||||
|
||||
class OptionsController(GObject.Object):
|
||||
|
||||
class OptionsController(GObject.Object):
|
||||
# properties
|
||||
options = GObject.property(type=object, default=None)
|
||||
current_key = GObject.property(type=str, default=None)
|
||||
@@ -84,10 +87,10 @@ class OptionsController(GObject.Object):
|
||||
'''
|
||||
if sheet:
|
||||
del sheet
|
||||
|
||||
|
||||
return ConfiguredSpriteSheet(plugin, typestr, get_stock_size())
|
||||
|
||||
def create_button_image( self, plugin, image, icon_name):
|
||||
def create_button_image(self, plugin, image, icon_name):
|
||||
'''
|
||||
helper function to create a button image
|
||||
'''
|
||||
@@ -95,13 +98,13 @@ class OptionsController(GObject.Object):
|
||||
del image
|
||||
|
||||
path = 'img/' + Theme(self.plugin).current + '/'
|
||||
|
||||
|
||||
return create_pixbuf_from_file_at_size(
|
||||
rb.find_plugin_file(self.plugin, path + icon_name),
|
||||
*get_stock_size())
|
||||
|
||||
class PlaylistPopupController(OptionsController):
|
||||
|
||||
class PlaylistPopupController(OptionsController):
|
||||
def __init__(self, plugin, album_model):
|
||||
super(PlaylistPopupController, self).__init__()
|
||||
|
||||
@@ -121,13 +124,9 @@ class PlaylistPopupController(OptionsController):
|
||||
|
||||
self._spritesheet = None
|
||||
self._update_options(shell)
|
||||
|
||||
|
||||
# get the playlist model so we can monitor changes
|
||||
if rb3compat.is_rb3(shell):
|
||||
playlist_model = shell.props.display_page_model
|
||||
else:
|
||||
playlist_manager = shell.props.playlist_manager
|
||||
playlist_model = playlist_manager.props.display_page_model
|
||||
playlist_model = shell.props.display_page_model
|
||||
|
||||
# connect signals to update playlists
|
||||
playlist_model.connect('row-inserted', self._update_options, shell)
|
||||
@@ -135,8 +134,8 @@ class PlaylistPopupController(OptionsController):
|
||||
playlist_model.connect('row-changed', self._update_options, shell)
|
||||
|
||||
def update_images(self, *args):
|
||||
self._spritesheet = self.create_spritesheet( self.plugin,
|
||||
self._spritesheet, 'playlist')
|
||||
self._spritesheet = self.create_spritesheet(self.plugin,
|
||||
self._spritesheet, 'playlist')
|
||||
|
||||
if args[-1]:
|
||||
self.update_image = True
|
||||
@@ -144,10 +143,10 @@ class PlaylistPopupController(OptionsController):
|
||||
def _update_options(self, *args):
|
||||
shell = args[-1]
|
||||
self.update_images(False)
|
||||
|
||||
|
||||
playlist_manager = shell.props.playlist_manager
|
||||
still_exists = self.current_key == self._library_name or\
|
||||
self.current_key == self._queue_name
|
||||
still_exists = self.current_key == self._library_name or \
|
||||
self.current_key == self._queue_name
|
||||
|
||||
# retrieve the options
|
||||
values = OrderedDict()
|
||||
@@ -169,7 +168,7 @@ class PlaylistPopupController(OptionsController):
|
||||
self.values = values
|
||||
self.options = list(values.keys())
|
||||
|
||||
self.current_key = self.current_key if still_exists else\
|
||||
self.current_key = self.current_key if still_exists else \
|
||||
self._library_name
|
||||
|
||||
def do_action(self):
|
||||
@@ -179,7 +178,7 @@ class PlaylistPopupController(OptionsController):
|
||||
self._album_model.remove_filter('model')
|
||||
else:
|
||||
self._album_model.replace_filter('model',
|
||||
playlist.get_query_model())
|
||||
playlist.get_query_model())
|
||||
|
||||
def get_current_image(self):
|
||||
playlist = self.values[self.current_key]
|
||||
@@ -213,7 +212,7 @@ class GenrePopupController(OptionsController):
|
||||
|
||||
# create a new property model for the genres
|
||||
genres_model = RB.RhythmDBPropertyModel.new(shell.props.db,
|
||||
RB.RhythmDBPropType.GENRE)
|
||||
RB.RhythmDBPropType.GENRE)
|
||||
|
||||
query = shell.props.library_source.props.base_query_model
|
||||
genres_model.props.query_model = query
|
||||
@@ -227,21 +226,21 @@ class GenrePopupController(OptionsController):
|
||||
|
||||
self._connect_properties()
|
||||
self._connect_signals(query, genres_model)
|
||||
|
||||
|
||||
# generate initial popup
|
||||
self._update_options(genres_model)
|
||||
|
||||
def update_images(self, *args):
|
||||
if self._spritesheet:
|
||||
del self._spritesheet
|
||||
|
||||
|
||||
self._spritesheet = GenreConfiguredSpriteSheet(self.plugin,
|
||||
'genre', get_stock_size())
|
||||
self._default_image = self.create_button_image( self.plugin,
|
||||
self._default_image, 'default_genre.png')
|
||||
self._unrecognised_image = self.create_button_image( self.plugin,
|
||||
self._unrecognised_image, 'unrecognised_genre.png')
|
||||
|
||||
'genre', get_stock_size())
|
||||
self._default_image = self.create_button_image(self.plugin,
|
||||
self._default_image, 'default_genre.png')
|
||||
self._unrecognised_image = self.create_button_image(self.plugin,
|
||||
self._unrecognised_image, 'unrecognised_genre.png')
|
||||
|
||||
if args[-1]:
|
||||
self.update_image = True
|
||||
|
||||
@@ -257,13 +256,13 @@ class GenrePopupController(OptionsController):
|
||||
setting = gs.get_setting(gs.Path.PLUGIN)
|
||||
|
||||
setting.bind(gs.PluginKey.NEW_GENRE_ICON, self, 'new_genre_icon',
|
||||
Gio.SettingsBindFlags.GET)
|
||||
Gio.SettingsBindFlags.GET)
|
||||
|
||||
def _update_options(self, *args):
|
||||
genres_model = args[-1]
|
||||
|
||||
self.update_images(False)
|
||||
|
||||
|
||||
still_exists = False
|
||||
|
||||
# retrieve the options
|
||||
@@ -271,6 +270,8 @@ class GenrePopupController(OptionsController):
|
||||
row_num = 0
|
||||
for row in genres_model:
|
||||
if row_num == 0:
|
||||
cl = CoverLocale()
|
||||
cl.switch_locale(cl.Locale.LOCALE_DOMAIN)
|
||||
genre = _('All Genres')
|
||||
row_num = row_num + 1
|
||||
else:
|
||||
@@ -282,7 +283,7 @@ class GenrePopupController(OptionsController):
|
||||
|
||||
self.options = options
|
||||
|
||||
self.current_key = self.current_key if still_exists else\
|
||||
self.current_key = self.current_key if still_exists else \
|
||||
self._initial_genre
|
||||
|
||||
def do_action(self):
|
||||
@@ -304,7 +305,7 @@ class GenrePopupController(OptionsController):
|
||||
image = self._find_alternates(test_genre)
|
||||
|
||||
if image == self._unrecognised_image and \
|
||||
test_genre in self._spritesheet:
|
||||
test_genre in self._spritesheet:
|
||||
image = self._spritesheet[test_genre]
|
||||
|
||||
return image
|
||||
@@ -324,15 +325,15 @@ class GenrePopupController(OptionsController):
|
||||
# in a mixture of cases, both unicode (normalized or not) and str
|
||||
# and as usual python cannot mix and match these types.
|
||||
|
||||
|
||||
|
||||
test_genre = RB.search_fold(test_genre)
|
||||
|
||||
|
||||
ret, sprite = self._match_genres(test_genre, self._spritesheet.GENRE_USER)
|
||||
if ret:
|
||||
return sprite
|
||||
|
||||
|
||||
for genre in sorted(self._spritesheet.locale_names,
|
||||
key=lambda b: (-len(b), b)):
|
||||
key=lambda b: (-len(b), b)):
|
||||
if RB.search_fold(genre) in test_genre:
|
||||
return self._spritesheet[self._spritesheet.locale_names[genre]]
|
||||
|
||||
@@ -344,23 +345,23 @@ class GenrePopupController(OptionsController):
|
||||
ret, sprite = self._match_genres(test_genre, self._spritesheet.GENRE_SYSTEM)
|
||||
if ret:
|
||||
return sprite
|
||||
|
||||
|
||||
# check if any of the default genres are a substring
|
||||
# of test_genre - check in reverse order so that we
|
||||
# test largest strings first (prevents spurious matches with
|
||||
# short strings)
|
||||
for genre in sorted(self._spritesheet.names,
|
||||
key=lambda b: (-len(b), b)):
|
||||
key=lambda b: (-len(b), b)):
|
||||
if RB.search_fold(genre) in test_genre:
|
||||
return self._spritesheet[genre]
|
||||
|
||||
|
||||
# if no matches then default to unrecognised image
|
||||
return self._unrecognised_image
|
||||
|
||||
def _match_genres(self, test_genre, genre_type):
|
||||
case_search = CaseInsensitiveDict(
|
||||
dict((k.name, v) for k, v in self._spritesheet.genre_alternate.items()
|
||||
if k.genre_type==genre_type))
|
||||
if k.genre_type == genre_type))
|
||||
|
||||
if test_genre in case_search:
|
||||
return (True, self._spritesheet[case_search[test_genre]])
|
||||
@@ -369,6 +370,8 @@ class GenrePopupController(OptionsController):
|
||||
|
||||
|
||||
def get_current_description(self):
|
||||
cl = CoverLocale()
|
||||
cl.switch_locale(cl.Locale.LOCALE_DOMAIN)
|
||||
if self.current_key == self._initial_genre:
|
||||
return _('All Genres')
|
||||
else:
|
||||
@@ -376,23 +379,22 @@ class GenrePopupController(OptionsController):
|
||||
|
||||
|
||||
class SortPopupController(OptionsController):
|
||||
|
||||
def __init__(self, plugin, viewmgr):
|
||||
super(SortPopupController, self).__init__()
|
||||
|
||||
self._viewmgr=viewmgr
|
||||
self._viewmgr = viewmgr
|
||||
self.plugin = plugin
|
||||
# sorts dictionary
|
||||
cl = CoverLocale()
|
||||
cl.switch_locale(cl.Locale.LOCALE_DOMAIN)
|
||||
|
||||
self.values = OrderedDict([(_('Sort by album name'), 'name'),
|
||||
(_('Sort by album artist'), 'artist'),
|
||||
(_('Sort by year'), 'year'),
|
||||
(_('Sort by rating'), 'rating')])
|
||||
(_('Sort by album artist'), 'artist'),
|
||||
(_('Sort by year'), 'year'),
|
||||
(_('Sort by rating'), 'rating')])
|
||||
|
||||
self.options = list(self.values.keys())
|
||||
|
||||
|
||||
# get the current sort key and initialise the superclass
|
||||
gs = GSetting()
|
||||
source_settings = gs.get_setting(gs.Path.PLUGIN)
|
||||
@@ -400,17 +402,17 @@ class SortPopupController(OptionsController):
|
||||
|
||||
self._spritesheet = None
|
||||
self.update_images(False)
|
||||
|
||||
|
||||
self.current_key = list(self.values.keys())[
|
||||
list(self.values.values()).index(value)]
|
||||
|
||||
def update_images(self, *args):
|
||||
self._spritesheet = self.create_spritesheet( self.plugin,
|
||||
self._spritesheet, 'sort')
|
||||
|
||||
self._spritesheet = self.create_spritesheet(self.plugin,
|
||||
self._spritesheet, 'sort')
|
||||
|
||||
if args[-1]:
|
||||
self.update_image = True
|
||||
|
||||
|
||||
def do_action(self):
|
||||
sort = self.values[self.current_key]
|
||||
|
||||
@@ -423,9 +425,9 @@ class SortPopupController(OptionsController):
|
||||
def get_current_image(self):
|
||||
sort = self.values[self.current_key]
|
||||
return self._spritesheet[sort]
|
||||
|
||||
class ArtistSortPopupController(OptionsController):
|
||||
|
||||
|
||||
class ArtistSortPopupController(OptionsController):
|
||||
def __init__(self, plugin, viewmgr):
|
||||
super(ArtistSortPopupController, self).__init__()
|
||||
|
||||
@@ -436,35 +438,35 @@ class ArtistSortPopupController(OptionsController):
|
||||
cl.switch_locale(cl.Locale.LOCALE_DOMAIN)
|
||||
|
||||
self.values = OrderedDict([(_('Sort by album name'), 'name_artist'),
|
||||
(_('Sort by year'), 'year_artist'),
|
||||
(_('Sort by rating'), 'rating_artist')])
|
||||
(_('Sort by year'), 'year_artist'),
|
||||
(_('Sort by rating'), 'rating_artist')])
|
||||
|
||||
self.options = list(self.values.keys())
|
||||
|
||||
|
||||
# get the current sort key and initialise the superclass
|
||||
gs = GSetting()
|
||||
source_settings = gs.get_setting(gs.Path.PLUGIN)
|
||||
value = source_settings[gs.PluginKey.SORT_BY_ARTIST]
|
||||
|
||||
|
||||
if value not in list(self.values.values()):
|
||||
print ("here")
|
||||
print("here")
|
||||
value = 'name_artist'
|
||||
source_settings[gs.PluginKey.SORT_BY_ARTIST]=value
|
||||
source_settings[gs.PluginKey.SORT_BY_ARTIST] = value
|
||||
|
||||
self._spritesheet = None
|
||||
self.update_images(False)
|
||||
|
||||
|
||||
self.current_key = list(self.values.keys())[
|
||||
list(self.values.values()).index(value)]
|
||||
print (self.current_key)
|
||||
print(self.current_key)
|
||||
|
||||
def update_images(self, *args):
|
||||
self._spritesheet = self.create_spritesheet( self.plugin,
|
||||
self._spritesheet, 'sort_artist')
|
||||
|
||||
self._spritesheet = self.create_spritesheet(self.plugin,
|
||||
self._spritesheet, 'sort_artist')
|
||||
|
||||
if args[-1]:
|
||||
self.update_image = True
|
||||
|
||||
|
||||
def do_action(self):
|
||||
sort = self.values[self.current_key]
|
||||
|
||||
@@ -480,9 +482,9 @@ class ArtistSortPopupController(OptionsController):
|
||||
|
||||
|
||||
class PropertiesMenuController(OptionsController):
|
||||
artist_paned_display = GObject.property(type=bool, default=False)
|
||||
favourites = GObject.property(type=bool, default=False)
|
||||
|
||||
follow = GObject.property(type=bool, default=False)
|
||||
|
||||
def __init__(self, plugin, source):
|
||||
super(PropertiesMenuController, self).__init__()
|
||||
|
||||
@@ -496,64 +498,63 @@ class PropertiesMenuController(OptionsController):
|
||||
self.values = OrderedDict()
|
||||
self.values[MenuNode(_('Download all covers'))] = 'download'
|
||||
self.values[MenuNode(_('Play random album'))] = 'random'
|
||||
self.values[MenuNode(_('Follow playing song'), 'check',
|
||||
(True if self.follow else False))] = 'follow'
|
||||
self.values[MenuNode('separator1', 'separator')] = ''
|
||||
self.values[MenuNode(_('Quick artist filter'), 'check',
|
||||
(True if self.artist_paned_display else False))] = 'quick artist'
|
||||
self.values[MenuNode(_('Use favourites only'), 'check',
|
||||
(True if self.favourites else False))] = 'favourite'
|
||||
(True if self.favourites else False))] = 'favourite'
|
||||
self.values[MenuNode('separator2', 'separator')] = ''
|
||||
self.values[MenuNode(_('Browser Preferences'))] = 'browser prefs'
|
||||
self.values[MenuNode(_('Search Preferences'))] = 'search prefs'
|
||||
|
||||
|
||||
self.options = list(self.values.keys())
|
||||
|
||||
self.update_images(False)
|
||||
if self.artist_paned_display:
|
||||
self._source.propertiesbutton_callback('quick artist')
|
||||
|
||||
|
||||
if self.favourites:
|
||||
self._source.propertiesbutton_callback('favourite')
|
||||
|
||||
|
||||
if self.follow:
|
||||
self._source.propertiesbutton_callback('follow')
|
||||
|
||||
self.current_key = None
|
||||
|
||||
|
||||
def _connect_properties(self):
|
||||
gs = GSetting()
|
||||
setting = gs.get_setting(gs.Path.PLUGIN)
|
||||
setting.bind(
|
||||
gs.PluginKey.ARTIST_PANED_DISPLAY,
|
||||
self,
|
||||
'artist-paned-display',
|
||||
Gio.SettingsBindFlags.DEFAULT)
|
||||
|
||||
setting.bind(
|
||||
gs.PluginKey.USE_FAVOURITES,
|
||||
self,
|
||||
'favourites',
|
||||
Gio.SettingsBindFlags.DEFAULT)
|
||||
|
||||
setting.bind(
|
||||
gs.PluginKey.FOLLOWING,
|
||||
self,
|
||||
'follow',
|
||||
Gio.SettingsBindFlags.DEFAULT)
|
||||
|
||||
def _change_key(self, dict, old, new):
|
||||
for i in range(len(dict)):
|
||||
k,v = dict.popitem(False)
|
||||
k, v = dict.popitem(False)
|
||||
dict[new if old == k else k] = v
|
||||
|
||||
def update_images(self, *args):
|
||||
self._image = self.create_button_image( self.plugin,
|
||||
None, 'properties.png')
|
||||
|
||||
self._image = self.create_button_image(self.plugin,
|
||||
None, 'properties.png')
|
||||
|
||||
if args[-1]:
|
||||
self.update_image = True
|
||||
|
||||
|
||||
def do_action(self):
|
||||
if self.current_key:
|
||||
key = [node for node in self.values if node.label == self.current_key]
|
||||
|
||||
if self.current_key == _('Quick artist filter'):
|
||||
self.artist_paned_display = not self.artist_paned_display
|
||||
|
||||
|
||||
|
||||
if self.current_key == _('Use favourites only'):
|
||||
self.favourites = not self.favourites
|
||||
|
||||
|
||||
if self.current_key == _('Follow playing song'):
|
||||
self.follow = not self.follow
|
||||
|
||||
self._source.propertiesbutton_callback(self.values[key[0]])
|
||||
self.current_key = None
|
||||
|
||||
@@ -563,8 +564,8 @@ class PropertiesMenuController(OptionsController):
|
||||
def get_current_description(self):
|
||||
return _('Properties')
|
||||
|
||||
class DecadePopupController(OptionsController):
|
||||
|
||||
class DecadePopupController(OptionsController):
|
||||
def __init__(self, plugin, album_model):
|
||||
super(DecadePopupController, self).__init__()
|
||||
|
||||
@@ -572,7 +573,7 @@ class DecadePopupController(OptionsController):
|
||||
self.plugin = plugin
|
||||
|
||||
self._spritesheet = None
|
||||
|
||||
|
||||
# decade options
|
||||
cl = CoverLocale()
|
||||
cl.switch_locale(cl.Locale.LOCALE_DOMAIN)
|
||||
@@ -580,7 +581,7 @@ class DecadePopupController(OptionsController):
|
||||
self.values = OrderedDict()
|
||||
|
||||
self.values[_('All Decades')] = [-1, 'All Decades']
|
||||
#'20s' as in the decade 2010
|
||||
# '20s' as in the decade 2010
|
||||
self.values[_('20s')] = [2020, '20s']
|
||||
#'10s' as in the decade 2010
|
||||
self.values[_('10s')] = [2010, '10s']
|
||||
@@ -612,13 +613,13 @@ class DecadePopupController(OptionsController):
|
||||
# define a initial decade an set the initial key
|
||||
self._initial_decade = self.options[0]
|
||||
self.update_images(False)
|
||||
|
||||
|
||||
self.current_key = self._initial_decade
|
||||
|
||||
def update_images(self, *args):
|
||||
self._spritesheet = self.create_spritesheet( self.plugin,
|
||||
self._spritesheet, 'decade')
|
||||
|
||||
self._spritesheet = self.create_spritesheet(self.plugin,
|
||||
self._spritesheet, 'decade')
|
||||
|
||||
if args[-1]:
|
||||
self.update_image = True
|
||||
|
||||
@@ -627,7 +628,7 @@ class DecadePopupController(OptionsController):
|
||||
self._album_model.remove_filter('decade')
|
||||
else:
|
||||
self._album_model.replace_filter('decade',
|
||||
self.values[self.current_key][0])
|
||||
self.values[self.current_key][0])
|
||||
|
||||
def get_current_image(self):
|
||||
decade = self.values[self.current_key][1]
|
||||
@@ -638,22 +639,21 @@ class DecadePopupController(OptionsController):
|
||||
|
||||
|
||||
class SortOrderToggleController(OptionsController):
|
||||
|
||||
toolbar_type = "album"
|
||||
|
||||
|
||||
def __init__(self, plugin, viewmgr):
|
||||
super(SortOrderToggleController, self).__init__()
|
||||
|
||||
self._viewmgr = viewmgr
|
||||
self.plugin = plugin
|
||||
|
||||
|
||||
# options
|
||||
self.values = OrderedDict([(_('Sort in descending order'), False),
|
||||
(_('Sort in ascending order'), True)])
|
||||
(_('Sort in ascending order'), True)])
|
||||
self.options = list(self.values.keys())
|
||||
|
||||
self._images = []
|
||||
|
||||
|
||||
# set the current key
|
||||
self.gs = GSetting()
|
||||
self.settings = self.gs.get_setting(self.gs.Path.PLUGIN)
|
||||
@@ -662,44 +662,43 @@ class SortOrderToggleController(OptionsController):
|
||||
self.current_key = list(self.values.keys())[
|
||||
list(self.values.values()).index(sort_order)]
|
||||
self.update_images(False)
|
||||
|
||||
|
||||
def get_key(self):
|
||||
return self.gs.PluginKey.SORT_ORDER
|
||||
|
||||
|
||||
def update_images(self, *args):
|
||||
# initialize images
|
||||
if len(self._images) > 0:
|
||||
del self._images[:]
|
||||
|
||||
self._images.append(self.create_button_image( self.plugin,
|
||||
None, 'arrow_down.png'))
|
||||
self._images.append(self.create_button_image( self.plugin,
|
||||
None, 'arrow_up.png'))
|
||||
|
||||
self._images.append(self.create_button_image(self.plugin,
|
||||
None, 'arrow_down.png'))
|
||||
self._images.append(self.create_button_image(self.plugin,
|
||||
None, 'arrow_up.png'))
|
||||
|
||||
if args[-1]:
|
||||
self.update_image = True
|
||||
|
||||
|
||||
def do_action(self):
|
||||
sort_order = self.values[self.current_key]
|
||||
self.settings[self.key] = sort_order
|
||||
self._viewmgr.current_view.get_default_manager().emit('sort', self.toolbar_type)
|
||||
|
||||
|
||||
def get_current_image(self):
|
||||
return self._images[self.get_current_key_index()]
|
||||
|
||||
|
||||
|
||||
class ArtistSortOrderToggleController(SortOrderToggleController):
|
||||
|
||||
toolbar_type = "artist"
|
||||
|
||||
|
||||
def __init__(self, plugin, model):
|
||||
super(ArtistSortOrderToggleController, self).__init__(plugin, model)
|
||||
|
||||
|
||||
def get_key(self):
|
||||
return self.gs.PluginKey.SORT_ORDER_ARTIST
|
||||
|
||||
|
||||
class AlbumSearchEntryController(OptionsController):
|
||||
|
||||
# properties
|
||||
search_text = GObject.property(type=str, default='')
|
||||
|
||||
@@ -714,22 +713,47 @@ class AlbumSearchEntryController(OptionsController):
|
||||
self.values[_('Search all fields')] = 'all'
|
||||
self.values[_('Search album artists')] = 'album_artist'
|
||||
self.values[_('Search track artists')] = 'artist'
|
||||
self.values[_('Search composers')] = 'composers'
|
||||
self.values[_('Search albums')] = 'album_name'
|
||||
self.values[_('Search tracks')] = 'track'
|
||||
self.values[_('Search titles')] = 'track'
|
||||
|
||||
self.options = list(self.values.keys())
|
||||
self.current_key = list(self.values.keys())[0]
|
||||
|
||||
self._typing = False
|
||||
self._typing_counter = 0
|
||||
self._current_search_text = ""
|
||||
|
||||
def do_action(self):
|
||||
# remove old filter
|
||||
self._album_model.remove_filter(self._filter_type, False)
|
||||
|
||||
# asign the new filter
|
||||
# assign the new filter
|
||||
self._filter_type = self.values[self.current_key]
|
||||
|
||||
self.do_search(self.search_text, True)
|
||||
|
||||
def _search_typing(self, *args):
|
||||
self._typing_counter = self._typing_counter + 1
|
||||
|
||||
if self._typing_counter >= 4 and self._typing:
|
||||
self._typing = False
|
||||
self._change_filter(self._current_search_text, False)
|
||||
|
||||
return self._typing
|
||||
|
||||
def _change_filter(self, search_text, force):
|
||||
# self.search_text = search_text
|
||||
self._current_search_text = search_text
|
||||
|
||||
if search_text:
|
||||
self._album_model.replace_filter(self._filter_type,
|
||||
search_text)
|
||||
elif not force:
|
||||
self._album_model.remove_filter(self._filter_type)
|
||||
|
||||
def do_search(self, search_text, force=False):
|
||||
'''
|
||||
if self.search_text != search_text or force:
|
||||
self.search_text = search_text
|
||||
|
||||
@@ -739,8 +763,28 @@ class AlbumSearchEntryController(OptionsController):
|
||||
elif not force:
|
||||
self._album_model.remove_filter(self._filter_type)
|
||||
|
||||
class AlbumQuickSearchController(object):
|
||||
'''
|
||||
# self.search_text = search_text
|
||||
if force:
|
||||
self._typing_counter = 99
|
||||
self._typing = False
|
||||
self._change_filter(search_text, force)
|
||||
return
|
||||
|
||||
if self._current_search_text != search_text:
|
||||
|
||||
#self.search_text = search_text
|
||||
self._current_search_text = search_text
|
||||
self._typing_counter = 0
|
||||
|
||||
if not self._typing:
|
||||
self._typing = True
|
||||
|
||||
Gdk.threads_add_timeout(GLib.PRIORITY_DEFAULT_IDLE, 100,
|
||||
self._search_typing)
|
||||
|
||||
|
||||
class AlbumQuickSearchController(object):
|
||||
def __init__(self, album_manager):
|
||||
self._album_manager = album_manager
|
||||
|
||||
@@ -751,7 +795,7 @@ class AlbumQuickSearchController(object):
|
||||
|
||||
def _on_quick_search(self, quick_search, search_text, *args):
|
||||
album = self._album_manager.model.find_first_visible('album_name',
|
||||
search_text)
|
||||
search_text)
|
||||
|
||||
if album:
|
||||
path = self._album_manager.model.get_path(album)
|
||||
@@ -776,24 +820,25 @@ class AlbumQuickSearchController(object):
|
||||
def _on_hide(self, quick_search, *args):
|
||||
self._album_manager.current_view.grab_focus()
|
||||
|
||||
class ViewController(OptionsController):
|
||||
|
||||
class ViewController(OptionsController):
|
||||
def __init__(self, shell, viewmgr):
|
||||
super(ViewController, self).__init__()
|
||||
|
||||
self._viewmgr = viewmgr
|
||||
|
||||
from coverart_browser_source import Views
|
||||
|
||||
views = Views(shell)
|
||||
|
||||
|
||||
self.values = OrderedDict()
|
||||
for view_name in views.get_view_names():
|
||||
self.values[views.get_menu_name(view_name)] = view_name
|
||||
print (view_name)
|
||||
|
||||
print(view_name)
|
||||
|
||||
self.options = list(self.values.keys())
|
||||
viewmgr.connect('new-view', self.on_notify_view_name)
|
||||
|
||||
|
||||
def on_notify_view_name(self, *args):
|
||||
for key in self.options:
|
||||
if self.values[key] == self._viewmgr.view_name:
|
||||
|
||||
@@ -17,23 +17,22 @@
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
from coverart_external_plugins import CreateExternalPluginMenu
|
||||
import json
|
||||
import os
|
||||
from xml.sax.saxutils import escape
|
||||
|
||||
from gi.repository import Gdk
|
||||
from gi.repository import Gtk
|
||||
from gi.repository import GLib
|
||||
from gi.repository import GObject
|
||||
from gi.repository import Gio
|
||||
|
||||
from coverart_browser_prefs import GSetting
|
||||
from coverart_browser_prefs import webkit_support
|
||||
from coverart_album import AlbumsModel
|
||||
from coverart_widgets import AbstractView
|
||||
from coverart_widgets import PanedCollapsible
|
||||
import rb
|
||||
import json
|
||||
import os
|
||||
from os.path import expanduser
|
||||
from xml.sax.saxutils import escape
|
||||
from collections import namedtuple
|
||||
|
||||
|
||||
class FlowShowingPolicy(GObject.Object):
|
||||
'''
|
||||
@@ -56,12 +55,13 @@ class FlowShowingPolicy(GObject.Object):
|
||||
self._album_manager = album_manager
|
||||
self._model = album_manager.model
|
||||
|
||||
|
||||
class CoverFlowView(AbstractView):
|
||||
__gtype_name__ = "CoverFlowView"
|
||||
|
||||
name = 'coverflowview'
|
||||
|
||||
#properties
|
||||
# properties
|
||||
flow_background = GObject.property(type=str, default='W')
|
||||
flow_automatic = GObject.property(type=bool, default=False)
|
||||
flow_scale = GObject.property(type=int, default=100)
|
||||
@@ -70,61 +70,60 @@ class CoverFlowView(AbstractView):
|
||||
flow_appearance = GObject.property(type=str, default='coverflow')
|
||||
flow_max = GObject.property(type=int, default=100)
|
||||
panedposition = PanedCollapsible.Paned.EXPAND
|
||||
|
||||
|
||||
def __init__(self):
|
||||
super(CoverFlowView, self).__init__()
|
||||
|
||||
self.ext_menu_pos = 0
|
||||
self._external_plugins = None
|
||||
|
||||
self.show_policy = FlowShowingPolicy(self)
|
||||
if webkit_support():
|
||||
from gi.repository import WebKit
|
||||
|
||||
self.view = WebKit.WebView()
|
||||
else:
|
||||
self.view = None
|
||||
|
||||
|
||||
self._last_album = None
|
||||
self._has_initialised = False
|
||||
self._filter_changed_inprogress = False
|
||||
self._on_first_use = True
|
||||
|
||||
|
||||
def _connect_properties(self):
|
||||
gs = GSetting()
|
||||
settings = gs.get_setting(gs.Path.PLUGIN)
|
||||
settings.bind(gs.PluginKey.FLOW_APPEARANCE, self,
|
||||
'flow_appearance', Gio.SettingsBindFlags.GET)
|
||||
'flow_appearance', Gio.SettingsBindFlags.GET)
|
||||
settings.bind(gs.PluginKey.FLOW_HIDE_CAPTION, self,
|
||||
'flow_hide', Gio.SettingsBindFlags.GET)
|
||||
'flow_hide', Gio.SettingsBindFlags.GET)
|
||||
settings.bind(gs.PluginKey.FLOW_SCALE, self,
|
||||
'flow_scale', Gio.SettingsBindFlags.GET)
|
||||
'flow_scale', Gio.SettingsBindFlags.GET)
|
||||
settings.bind(gs.PluginKey.FLOW_AUTOMATIC, self,
|
||||
'flow_automatic', Gio.SettingsBindFlags.GET)
|
||||
'flow_automatic', Gio.SettingsBindFlags.GET)
|
||||
settings.bind(gs.PluginKey.FLOW_BACKGROUND_COLOUR, self,
|
||||
'flow_background', Gio.SettingsBindFlags.GET)
|
||||
'flow_background', Gio.SettingsBindFlags.GET)
|
||||
settings.bind(gs.PluginKey.FLOW_WIDTH, self,
|
||||
'flow_width', Gio.SettingsBindFlags.GET)
|
||||
'flow_width', Gio.SettingsBindFlags.GET)
|
||||
settings.bind(gs.PluginKey.FLOW_MAX, self,
|
||||
'flow_max', Gio.SettingsBindFlags.GET)
|
||||
|
||||
'flow_max', Gio.SettingsBindFlags.GET)
|
||||
|
||||
def _connect_signals(self, source):
|
||||
self.connect('notify::flow-background',
|
||||
self.filter_changed)
|
||||
self.filter_changed)
|
||||
self.connect('notify::flow-scale',
|
||||
self.filter_changed)
|
||||
self.filter_changed)
|
||||
self.connect('notify::flow-hide',
|
||||
self.filter_changed)
|
||||
self.filter_changed)
|
||||
self.connect('notify::flow-width',
|
||||
self.filter_changed)
|
||||
self.filter_changed)
|
||||
self.connect('notify::flow-appearance',
|
||||
self.filter_changed)
|
||||
self.filter_changed)
|
||||
self.connect('notify::flow-max',
|
||||
self.filter_changed)
|
||||
self.filter_changed)
|
||||
|
||||
def filter_changed(self, *args):
|
||||
# we can get several filter_changed calls per second
|
||||
# lets simplify the processing & potential flickering when the
|
||||
# call to this method has slowed stopped
|
||||
|
||||
|
||||
self._filter_changed_event = True
|
||||
|
||||
if self._filter_changed_inprogress:
|
||||
@@ -139,16 +138,16 @@ class CoverFlowView(AbstractView):
|
||||
else:
|
||||
self._filter_changed_event = False
|
||||
return True
|
||||
|
||||
Gdk.threads_add_timeout(GLib.PRIORITY_DEFAULT_IDLE, 250, filter_events, None)
|
||||
|
||||
|
||||
|
||||
GLib.timeout_add(250, filter_events, None)
|
||||
|
||||
|
||||
def _filter_changed(self, *args):
|
||||
path = rb.find_plugin_file(self.plugin, 'coverflow/index.html')
|
||||
f = open(path)
|
||||
string = f.read()
|
||||
f.close()
|
||||
|
||||
|
||||
if self.flow_background == 'W':
|
||||
background_colour = 'white'
|
||||
if len(self.album_manager.model.store) <= self.flow_max:
|
||||
@@ -164,13 +163,13 @@ class CoverFlowView(AbstractView):
|
||||
|
||||
string = string.replace('#BACKGROUND_COLOUR', background_colour)
|
||||
string = string.replace('#FOREGROUND_COLOUR', foreground_colour)
|
||||
string = string.replace('#FACTOR', str(float(self.flow_scale)/100))
|
||||
string = string.replace('#FACTOR', str(float(self.flow_scale) / 100))
|
||||
|
||||
if self.flow_hide:
|
||||
if self.flow_hide:
|
||||
caption = ""
|
||||
else:
|
||||
caption = '<div class="globalCaption"></div>'
|
||||
|
||||
|
||||
string = string.replace('#GLOBAL_CAPTION', caption)
|
||||
|
||||
addon = background_colour
|
||||
@@ -190,49 +189,45 @@ class CoverFlowView(AbstractView):
|
||||
identifier = "'start'"
|
||||
else:
|
||||
identifier = str(identifier)
|
||||
|
||||
|
||||
string = string.replace('#START', identifier)
|
||||
|
||||
|
||||
#TRANSLATORS: for example 'Number of covers limited to 150'
|
||||
display_message = _("Number of covers limited to %d") % self.flow_max
|
||||
string = string.replace('#MAXCOVERS',
|
||||
'<p>' + display_message + '</p>')
|
||||
'<p>' + display_message + '</p>')
|
||||
|
||||
items = self.flow.initialise(self.album_manager.model, self.flow_max)
|
||||
|
||||
string = string.replace('#ITEMS', items)
|
||||
|
||||
base = os.path.dirname(path) + "/"
|
||||
Gdk.threads_enter()
|
||||
print (string)
|
||||
|
||||
base = os.path.dirname(path) + "/"
|
||||
#Gdk.threads_enter()
|
||||
print(string)
|
||||
self.view.load_string(string, "text/html", "UTF-8", "file://" + base)
|
||||
Gdk.threads_leave()
|
||||
#Gdk.threads_leave()
|
||||
|
||||
if self._on_first_use:
|
||||
self._on_first_use = False
|
||||
Gdk.threads_add_timeout(GLib.PRIORITY_DEFAULT_IDLE, 250,
|
||||
self.source.show_hide_pane, (self.last_album, PanedCollapsible.Paned.EXPAND))
|
||||
GLib.timeout_add(250, self.source.show_hide_pane, (self.last_album, PanedCollapsible.Paned.EXPAND))
|
||||
|
||||
def get_view_icon_name(self):
|
||||
return "flowview.png"
|
||||
|
||||
def scroll_to_album(self):
|
||||
self.flow.scroll_to_album(self.last_album, self.view)
|
||||
|
||||
def initialise(self, source):
|
||||
if self._has_initialised:
|
||||
return
|
||||
|
||||
|
||||
self._has_initialised = True
|
||||
|
||||
super(CoverFlowView,self).initialise(source)
|
||||
|
||||
super(CoverFlowView, self).initialise(source)
|
||||
|
||||
self.album_manager = source.album_manager
|
||||
self.ext_menu_pos = 6
|
||||
|
||||
|
||||
self._connect_properties()
|
||||
self._connect_signals(source)
|
||||
|
||||
|
||||
# lets check that all covers have finished loading before
|
||||
# initialising the flowcontrol and other signals
|
||||
if not self.album_manager.cover_man.has_finished_loading:
|
||||
@@ -249,7 +244,7 @@ class CoverFlowView(AbstractView):
|
||||
self.album_manager.model.connect('album-updated', self.filter_changed)
|
||||
self.album_manager.model.connect('visual-updated', self.filter_changed)
|
||||
self.album_manager.model.connect('filter-changed', self.filter_changed)
|
||||
|
||||
|
||||
self.filter_changed()
|
||||
|
||||
@property
|
||||
@@ -264,20 +259,8 @@ class CoverFlowView(AbstractView):
|
||||
self.selectionchanged_callback()
|
||||
|
||||
def item_rightclicked_callback(self, album):
|
||||
if not self._external_plugins:
|
||||
# initialise external plugin menu support
|
||||
self._external_plugins = \
|
||||
CreateExternalPluginMenu("ca_covers_view",
|
||||
self.ext_menu_pos, self.popup)
|
||||
self._external_plugins.create_menu('popup_menu', True)
|
||||
|
||||
self.last_album = album
|
||||
self.popup.get_gtkmenu(self.source, 'popup_menu').popup(None,
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
3,
|
||||
Gtk.get_current_event_time())
|
||||
self.popup.popup(self.source, 'popup_menu', 3, Gtk.get_current_event_time())
|
||||
|
||||
def item_clicked_callback(self, album):
|
||||
'''
|
||||
@@ -288,12 +271,11 @@ class CoverFlowView(AbstractView):
|
||||
# to expand the entry view
|
||||
if self.flow_automatic:
|
||||
self.source.click_count += 1
|
||||
|
||||
|
||||
self.last_album = album
|
||||
|
||||
if self.source.click_count == 1:
|
||||
Gdk.threads_add_timeout(GLib.PRIORITY_DEFAULT_IDLE, 250,
|
||||
self.source.show_hide_pane, album)
|
||||
GLib.timeout_add(250, self.source.show_hide_pane, album)
|
||||
|
||||
def item_activated_callback(self, album):
|
||||
'''
|
||||
@@ -309,8 +291,8 @@ class CoverFlowView(AbstractView):
|
||||
Callback called when something is dropped onto the flow view - hopefully a webpath
|
||||
to a picture
|
||||
'''
|
||||
print ("item_drop_callback %s" % webpath)
|
||||
print ("dropped on album %s" % album)
|
||||
print("item_drop_callback %s" % webpath)
|
||||
print("dropped on album %s" % album)
|
||||
self.album_manager.cover_man.update_cover(album, uri=webpath)
|
||||
|
||||
def get_selected_objects(self):
|
||||
@@ -327,19 +309,22 @@ class CoverFlowView(AbstractView):
|
||||
def switch_to_view(self, source, album):
|
||||
self.initialise(source)
|
||||
self.show_policy.initialise(source.album_manager)
|
||||
|
||||
|
||||
self.last_album = album
|
||||
self.scroll_to_album()
|
||||
|
||||
self.scroll_to_album(self.last_album)
|
||||
|
||||
def grab_focus(self):
|
||||
self.view.grab_focus()
|
||||
|
||||
def scroll_to_album(self, album):
|
||||
self.flow.scroll_to_album(album, self.view)
|
||||
|
||||
|
||||
class FlowControl(object):
|
||||
|
||||
def __init__(self, callback_view):
|
||||
self.callback_view = callback_view
|
||||
self.album_identifier = {}
|
||||
|
||||
|
||||
def get_identifier(self, album):
|
||||
index = -1
|
||||
for row in self.album_identifier:
|
||||
@@ -370,11 +355,11 @@ class FlowControl(object):
|
||||
obj['identifier'] = str(index)
|
||||
|
||||
webview.execute_script("update_album('%s')" % json.dumps(obj))
|
||||
|
||||
|
||||
def receive_message_signal(self, webview, param):
|
||||
# this will be key to passing stuff back and forth - need
|
||||
# to develop some-sort of message protocol to distinguish "events"
|
||||
|
||||
|
||||
title = webview.get_title()
|
||||
if (not title) or (title == '"clear"'):
|
||||
return
|
||||
@@ -383,7 +368,7 @@ class FlowControl(object):
|
||||
try:
|
||||
signal = args["signal"]
|
||||
except:
|
||||
print ("unhandled: %s " % title)
|
||||
print("unhandled: %s " % title)
|
||||
return
|
||||
|
||||
if signal == 'clickactive':
|
||||
@@ -395,9 +380,9 @@ class FlowControl(object):
|
||||
self.callback_view.item_activated_callback(self.album_identifier[int(args['param'][0])])
|
||||
elif signal == 'dropactive':
|
||||
self.callback_view.item_drop_callback(self.album_identifier[int(args['param'][0])],
|
||||
args['param'][1])
|
||||
args['param'][1])
|
||||
else:
|
||||
print ("unhandled signal: %s" % signal)
|
||||
print("unhandled signal: %s" % signal)
|
||||
|
||||
def scroll_to_album(self, album, webview):
|
||||
for row in self.album_identifier:
|
||||
@@ -411,14 +396,14 @@ class FlowControl(object):
|
||||
index = 0
|
||||
items = ""
|
||||
self.album_identifier = {}
|
||||
|
||||
|
||||
def html_elements(fullfilename, title, caption, identifier):
|
||||
|
||||
return '<div class="item"><img class="content" src="' +\
|
||||
escape(fullfilename) + '" title="' +\
|
||||
escape(title) + '" identifier="' +\
|
||||
identifier + '"/> <div class="caption">' +\
|
||||
escape(caption) + '</div> </div>'
|
||||
return '<div class="item"><img class="content" src="' + \
|
||||
escape(fullfilename) + '" title="' + \
|
||||
escape(title) + '" identifier="' + \
|
||||
identifier + '"/> <div class="caption">' + \
|
||||
escape(caption) + '</div> </div>'
|
||||
|
||||
|
||||
for row in model.store:
|
||||
@@ -426,11 +411,11 @@ class FlowControl(object):
|
||||
cover = row[album_col].cover.original
|
||||
cover = cover.replace(
|
||||
'rhythmbox-missing-artwork.svg',
|
||||
'rhythmbox-missing-artwork.png') ## need a white vs black when we change the background colour
|
||||
'rhythmbox-missing-artwork.png') # # need a white vs black when we change the background colour
|
||||
|
||||
self.album_identifier[index] = row[album_col]
|
||||
items += html_elements(
|
||||
fullfilename = cover,
|
||||
fullfilename=cover,
|
||||
caption=row[album_col].name,
|
||||
title=row[album_col].artist,
|
||||
identifier=str(index))
|
||||
@@ -441,7 +426,7 @@ class FlowControl(object):
|
||||
break
|
||||
|
||||
if index != 0:
|
||||
#self.callback_view.last_album = self.album_identifier[0]
|
||||
# self.callback_view.last_album = self.album_identifier[0]
|
||||
pass
|
||||
else:
|
||||
self.callback_view.last_album = None
|
||||
|
||||
@@ -17,6 +17,8 @@
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
import gettext
|
||||
|
||||
from gi.repository import Gdk
|
||||
from gi.repository import Gtk
|
||||
from gi.repository import GLib
|
||||
@@ -25,140 +27,169 @@ from gi.repository import Gio
|
||||
from gi.repository import Pango
|
||||
from gi.repository import PangoCairo
|
||||
from gi.repository import GdkPixbuf
|
||||
from gi.repository import RB
|
||||
from gi.repository.GdkPixbuf import Pixbuf
|
||||
|
||||
from coverart_widgets import EnhancedIconView
|
||||
from coverart_external_plugins import CreateExternalPluginMenu
|
||||
from coverart_browser_prefs import GSetting
|
||||
from coverart_browser_prefs import CoverLocale
|
||||
from coverart_album import AlbumsModel
|
||||
from coverart_widgets import AbstractView
|
||||
from coverart_widgets import PanedCollapsible
|
||||
import coverart_rb3compat as rb3compat
|
||||
import rb
|
||||
|
||||
|
||||
PLAY_SIZE_X = 30
|
||||
PLAY_SIZE_Y = 30
|
||||
|
||||
|
||||
class CellRendererThumb(Gtk.CellRendererPixbuf):
|
||||
markup=GObject.property(type=str, default="")
|
||||
|
||||
markup = GObject.property(type=str, default="")
|
||||
|
||||
def __init__(self, font_description, cell_area_source):
|
||||
super(CellRendererThumb, self).__init__()
|
||||
self.font_description = font_description
|
||||
self.cell_area_source = cell_area_source
|
||||
ypad = 0
|
||||
|
||||
def do_render(self, cr, widget,
|
||||
background_area,
|
||||
cell_area,
|
||||
flags):
|
||||
|
||||
|
||||
|
||||
def do_render(self, cr, widget,
|
||||
background_area,
|
||||
cell_area,
|
||||
flags):
|
||||
|
||||
x_offset = cell_area.x + 1
|
||||
y_offset = cell_area.y + 1
|
||||
wi = 0
|
||||
he = 0
|
||||
#IMAGE
|
||||
pixbuf = self.props.pixbuf.scale_simple(cell_area.width-2, cell_area.height-2,
|
||||
GdkPixbuf.InterpType.NEAREST)
|
||||
# first paint the cover
|
||||
pixbuf = self.props.pixbuf.scale_simple(cell_area.width - 2, cell_area.height - 2,
|
||||
GdkPixbuf.InterpType.NEAREST)
|
||||
Gdk.cairo_set_source_pixbuf(cr, pixbuf, x_offset, y_offset)
|
||||
cr.paint()
|
||||
|
||||
|
||||
alpha = 0.40
|
||||
|
||||
if((flags & Gtk.CellRendererState.PRELIT) == Gtk.CellRendererState.PRELIT):
|
||||
|
||||
if ((flags & Gtk.CellRendererState.PRELIT) == Gtk.CellRendererState.PRELIT):
|
||||
# if the cursor is over the cell then slightly dim
|
||||
alpha -= 0.15
|
||||
|
||||
if hasattr(Gtk.IconView, "get_cell_rect") and self.cell_area_source.hover_pixbuf:
|
||||
# this only works on Gtk+3.6 and later
|
||||
Gdk.cairo_set_source_pixbuf(cr,
|
||||
self.cell_area_source.hover_pixbuf, x_offset, y_offset)
|
||||
|
||||
if self.cell_area_source.hover_pixbuf:
|
||||
# if a hover pixbuf is given then paint this as well either just above the cover album info
|
||||
# of at the bottom of the cell area if album info is not within the cover area
|
||||
full, calc_x_offset, calc_y_offset = self.cell_area_source.calc_play_icon_offset(x_offset, y_offset)
|
||||
|
||||
Gdk.cairo_set_source_pixbuf(cr,
|
||||
self.cell_area_source.hover_pixbuf,
|
||||
calc_x_offset,
|
||||
calc_y_offset - PLAY_SIZE_Y)
|
||||
cr.paint()
|
||||
|
||||
#if((flags & Gtk.CellRendererState.SELECTED) == Gtk.CellRendererState.SELECTED or \
|
||||
# (flags & Gtk.CellRendererState.FOCUSED) == Gtk.CellRendererState.FOCUSED):
|
||||
# alpha -= 0.15
|
||||
|
||||
|
||||
if not(self.cell_area_source.display_text and self.cell_area_source.display_text_pos==False):
|
||||
|
||||
if not (self.cell_area_source.display_text and self.cell_area_source.display_text_pos == False):
|
||||
return
|
||||
|
||||
#PANGO LAYOUT
|
||||
layout_width = cell_area.width - 2
|
||||
|
||||
# the rest of the routine paints the contents of text within a cover if specified
|
||||
|
||||
# PANGO LAYOUT
|
||||
layout_width = cell_area.width - 2
|
||||
pango_layout = PangoCairo.create_layout(cr)
|
||||
pango_layout.set_markup(self.markup , -1)
|
||||
pango_layout.set_alignment(Pango.Alignment.CENTER)
|
||||
pango_layout.set_markup(self.markup, -1)
|
||||
pango_layout.set_alignment(self.cell_area_source.text_alignment)
|
||||
pango_layout.set_font_description(self.font_description)
|
||||
pango_layout.set_width( int(layout_width * Pango.SCALE))
|
||||
pango_layout.set_width(int(layout_width * Pango.SCALE))
|
||||
pango_layout.set_wrap(Pango.WrapMode.WORD_CHAR)
|
||||
wi,he = pango_layout.get_pixel_size()
|
||||
|
||||
wi, he = pango_layout.get_pixel_size()
|
||||
|
||||
rect_offset = y_offset + (int((2.0 * self.cell_area_source.cover_size) / 3.0))
|
||||
rect_height = int(self.cell_area_source.cover_size / 3.0)
|
||||
was_to_large = False;
|
||||
if(he > rect_height):
|
||||
was_to_large = True
|
||||
|
||||
if he > rect_height:
|
||||
pango_layout.set_ellipsize(Pango.EllipsizeMode.END)
|
||||
pango_layout.set_height( int((self.cell_area_source.cover_size / 3.0) * Pango.SCALE))
|
||||
pango_layout.set_height(int((self.cell_area_source.cover_size / 3.0) * Pango.SCALE))
|
||||
wi, he = pango_layout.get_pixel_size()
|
||||
|
||||
#RECTANGLE
|
||||
|
||||
# RECTANGLE
|
||||
cr.set_source_rgba(0.0, 0.0, 0.0, alpha)
|
||||
cr.set_line_width(0)
|
||||
cr.rectangle(x_offset,
|
||||
cr.rectangle(x_offset,
|
||||
rect_offset,
|
||||
cell_area.width - 1,
|
||||
rect_height - 1)
|
||||
cr.fill()
|
||||
|
||||
#DRAW FONT
|
||||
|
||||
# DRAW FONT
|
||||
cr.set_source_rgba(1.0, 1.0, 1.0, 1.0)
|
||||
cr.move_to(x_offset,
|
||||
y_offset
|
||||
+ 2.0 * self.cell_area_source.cover_size / 3.0
|
||||
+ (((self.cell_area_source.cover_size/3.0) - he) / 2.0)
|
||||
)
|
||||
y_offset
|
||||
+ 2.0 * self.cell_area_source.cover_size / 3.0
|
||||
+ (((self.cell_area_source.cover_size / 3.0) - he) / 2.0)
|
||||
)
|
||||
PangoCairo.show_layout(cr, pango_layout)
|
||||
|
||||
|
||||
class AlbumArtCellArea(Gtk.CellAreaBox):
|
||||
|
||||
font_family = GObject.property(type=str, default="Sans")
|
||||
font_size = GObject.property(type=int, default=10)
|
||||
cover_size = GObject.property(type=int, default=0)
|
||||
display_text_pos = GObject.property(type=bool, default=False)
|
||||
display_text = GObject.property(type=bool, default=False)
|
||||
add_shadow = GObject.property(type=bool, default=False)
|
||||
hover_pixbuf = GObject.property(type=object, default=None)
|
||||
|
||||
text_alignment = GObject.property(type=int, default=1)
|
||||
|
||||
def __init__(self, ):
|
||||
super(AlbumArtCellArea, self).__init__()
|
||||
|
||||
|
||||
self.font_description = Pango.FontDescription.new()
|
||||
self.font_description.set_family(self.font_family)
|
||||
self.font_description.set_size(int(self.font_size * Pango.SCALE))
|
||||
|
||||
|
||||
self._connect_properties()
|
||||
|
||||
#Add own cellrenderer
|
||||
|
||||
# Add own cellrenderer
|
||||
renderer_thumb = CellRendererThumb(self.font_description, self)
|
||||
|
||||
|
||||
self.pack_start(renderer_thumb, False, False, False)
|
||||
self.attribute_connect(renderer_thumb, "pixbuf", AlbumsModel.columns['pixbuf'])
|
||||
self.attribute_connect(renderer_thumb, "pixbuf", AlbumsModel.columns['pixbuf'])
|
||||
self.attribute_connect(renderer_thumb, "markup", AlbumsModel.columns['markup'])
|
||||
self.props.spacing = 2
|
||||
|
||||
|
||||
def _connect_properties(self):
|
||||
gs = GSetting()
|
||||
setting = gs.get_setting(gs.Path.PLUGIN)
|
||||
|
||||
setting.bind(gs.PluginKey.COVER_SIZE, self, 'cover-size',
|
||||
Gio.SettingsBindFlags.GET)
|
||||
|
||||
Gio.SettingsBindFlags.GET)
|
||||
|
||||
setting.bind(gs.PluginKey.DISPLAY_TEXT_POS, self, 'display-text-pos',
|
||||
Gio.SettingsBindFlags.GET)
|
||||
|
||||
Gio.SettingsBindFlags.GET)
|
||||
|
||||
setting.bind(gs.PluginKey.DISPLAY_TEXT, self, 'display-text',
|
||||
Gio.SettingsBindFlags.GET)
|
||||
|
||||
Gio.SettingsBindFlags.GET)
|
||||
|
||||
setting.bind(gs.PluginKey.ADD_SHADOW, self, 'add-shadow',
|
||||
Gio.SettingsBindFlags.GET)
|
||||
|
||||
setting.bind(gs.PluginKey.TEXT_ALIGNMENT, self, 'text-alignment',
|
||||
Gio.SettingsBindFlags.GET)
|
||||
|
||||
|
||||
def calc_play_icon_offset(self, initial_x_offset, initial_y_offset):
|
||||
'''
|
||||
calculates the x & y offset for the play hover icon
|
||||
:param initial_x_offset: current x_offset
|
||||
:param initial_y_offset: current y_offset
|
||||
:return: bool, x & y offset where bool is the full cover position
|
||||
'''
|
||||
full_cover = False
|
||||
if not (self.display_text and self.display_text_pos == False):
|
||||
y_offset = initial_y_offset + self.cover_size - 10
|
||||
full_cover = True
|
||||
else:
|
||||
y_offset = initial_y_offset + (int((2.0 * self.cover_size) / 3.0))
|
||||
|
||||
x_offset = initial_x_offset
|
||||
if self.add_shadow:
|
||||
x_offset = initial_x_offset + 10
|
||||
y_offset = y_offset - 10
|
||||
|
||||
return full_cover, x_offset, y_offset
|
||||
|
||||
|
||||
class AlbumShowingPolicy(GObject.Object):
|
||||
'''
|
||||
Policy that mostly takes care of how and when things should be showed on
|
||||
@@ -183,7 +214,7 @@ class AlbumShowingPolicy(GObject.Object):
|
||||
|
||||
def _connect_signals(self):
|
||||
self._cover_view.props.vadjustment.connect('value-changed',
|
||||
self._viewport_changed)
|
||||
self._viewport_changed)
|
||||
self._model.connect('album-updated', self._album_updated)
|
||||
self._model.connect('visual-updated', self._album_updated)
|
||||
|
||||
@@ -216,6 +247,7 @@ class AlbumShowingPolicy(GObject.Object):
|
||||
# if our path is on the viewport, emit the signal to update it
|
||||
self._cover_view.queue_draw()
|
||||
|
||||
|
||||
class CoverIconView(EnhancedIconView, AbstractView):
|
||||
__gtype_name__ = "CoverIconView"
|
||||
|
||||
@@ -227,44 +259,37 @@ class CoverIconView(EnhancedIconView, AbstractView):
|
||||
display_text_pos = GObject.property(type=bool, default=False)
|
||||
name = 'coverview'
|
||||
panedposition = PanedCollapsible.Paned.COLLAPSE
|
||||
|
||||
text_alignment = GObject.property(type=int, default=1)
|
||||
|
||||
__gsignals__ = {
|
||||
'update-toolbar': (GObject.SIGNAL_RUN_LAST, None, ())
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
if not rb3compat.compare_pygobject_version("3.9"):
|
||||
super(CoverIconView, self).__init__(cell_area=AlbumArtCellArea(), *args, **kwargs)
|
||||
else:
|
||||
# this works in trusty but not in earlier versions - define in the super above
|
||||
super(CoverIconView, self).__init__(*args, **kwargs)
|
||||
self.props.cell_area = AlbumArtCellArea()
|
||||
|
||||
self.ext_menu_pos = 0
|
||||
self._external_plugins = None
|
||||
super(CoverIconView, self).__init__(cell_area=AlbumArtCellArea(), *args, **kwargs)
|
||||
|
||||
self.gs = GSetting()
|
||||
# custom text renderer
|
||||
self._text_renderer = None
|
||||
self.show_policy = AlbumShowingPolicy(self)
|
||||
self.view = self
|
||||
self._has_initialised = False
|
||||
self._last_play_path = None
|
||||
self._recheck_in_progress = False
|
||||
self._current_hover_path = None
|
||||
|
||||
self._last_path = None
|
||||
self._calc_motion_step = 0
|
||||
self.set_selection_mode(Gtk.SelectionMode.MULTIPLE)
|
||||
self.object_column = AlbumsModel.columns['album']
|
||||
|
||||
def initialise(self, source):
|
||||
if self._has_initialised:
|
||||
return
|
||||
|
||||
|
||||
self._has_initialised = True
|
||||
|
||||
self.view_name = "covers_view"
|
||||
super(CoverIconView,self).initialise(source)
|
||||
|
||||
super(CoverIconView, self).initialise(source)
|
||||
|
||||
self.shell = source.shell
|
||||
self.album_manager = source.album_manager
|
||||
self.ext_menu_pos = 6
|
||||
|
||||
# setup iconview drag&drop support
|
||||
# first drag and drop on the coverart view to receive coverart
|
||||
@@ -273,41 +298,45 @@ class CoverIconView(EnhancedIconView, AbstractView):
|
||||
self.drag_dest_add_text_targets()
|
||||
self.connect('drag-drop', self.on_drag_drop)
|
||||
self.connect('drag-data-received',
|
||||
self.on_drag_data_received)
|
||||
self.on_drag_data_received)
|
||||
self.source.paned.connect("expanded", self.bottom_expander_expanded_callback)
|
||||
|
||||
# lastly support drag-drop from coverart to devices/nautilus etc
|
||||
self.connect('drag-begin', self.on_drag_begin)
|
||||
self.enable_model_drag_source(Gdk.ModifierType.BUTTON1_MASK,
|
||||
[], Gdk.DragAction.COPY)
|
||||
#targets = Gtk.TargetList.new([Gtk.TargetEntry.new("application/x-rhythmbox-entry", 0, 0),
|
||||
# Gtk.TargetEntry.new("text/uri-list", 0, 1) ])
|
||||
targets = Gtk.TargetList.new([Gtk.TargetEntry.new("text/uri-list", 0, 0) ])
|
||||
# targets = Gtk.TargetList.new([Gtk.TargetEntry.new("application/x-rhythmbox-entry", 0, 0),
|
||||
# Gtk.TargetEntry.new("text/uri-list", 0, 1) ])
|
||||
targets = Gtk.TargetList.new([Gtk.TargetEntry.new("text/uri-list", 0, 0)])
|
||||
# N.B. values taken from rhythmbox v2.97 widgets/rb_entry_view.c
|
||||
targets.add_uri_targets(1)
|
||||
|
||||
|
||||
self.drag_source_set_target_list(targets)
|
||||
self.connect("drag-data-get", self.on_drag_data_get)
|
||||
|
||||
# set the model to the view
|
||||
#self.set_pixbuf_column(AlbumsModel.columns['pixbuf'])
|
||||
# self.set_pixbuf_column(AlbumsModel.columns['pixbuf'])
|
||||
self.set_model(self.album_manager.model.store)
|
||||
|
||||
|
||||
# setup view to monitor mouse movements
|
||||
self.add_events(Gdk.EventMask.POINTER_MOTION_MASK)
|
||||
|
||||
|
||||
self.hover_pixbufs = {
|
||||
'button_play':None,
|
||||
'button_play_hover':None,
|
||||
'button_playpause':None,
|
||||
'button_playpause_hover':None }
|
||||
|
||||
'button_play': None,
|
||||
'button_play_hover': None,
|
||||
'button_playpause': None,
|
||||
'button_playpause_hover': None,
|
||||
'button_queue': None,
|
||||
'button_queue_hover': None,
|
||||
}
|
||||
|
||||
for pixbuf_type in self.hover_pixbufs:
|
||||
filename = 'img/' + pixbuf_type + '.png'
|
||||
filename = rb.find_plugin_file(self.plugin, filename)
|
||||
self.hover_pixbufs[pixbuf_type] = GdkPixbuf.Pixbuf.new_from_file_at_size(filename,
|
||||
PLAY_SIZE_X, PLAY_SIZE_Y)
|
||||
|
||||
self.hover_pixbufs[pixbuf_type] = GdkPixbuf.Pixbuf.new_from_file_at_size(filename,
|
||||
PLAY_SIZE_X,
|
||||
PLAY_SIZE_Y)
|
||||
|
||||
self._connect_properties()
|
||||
self._connect_signals()
|
||||
|
||||
@@ -329,45 +358,67 @@ class CoverIconView(EnhancedIconView, AbstractView):
|
||||
Gio.SettingsBindFlags.GET)
|
||||
|
||||
setting.bind(self.gs.PluginKey.DISPLAY_TEXT, self,
|
||||
'display_text_enabled', Gio.SettingsBindFlags.GET)
|
||||
'display_text_enabled', Gio.SettingsBindFlags.GET)
|
||||
|
||||
setting.bind(self.gs.PluginKey.ICON_AUTOMATIC, self,
|
||||
'icon_automatic', Gio.SettingsBindFlags.GET)
|
||||
|
||||
setting.bind(self.gs.PluginKey.DISPLAY_TEXT_POS, self,
|
||||
'display-text-pos', Gio.SettingsBindFlags.GET)
|
||||
'icon_automatic', Gio.SettingsBindFlags.GET)
|
||||
|
||||
setting.bind(self.gs.PluginKey.DISPLAY_TEXT_POS, self,
|
||||
'display-text-pos', Gio.SettingsBindFlags.GET)
|
||||
|
||||
setting.bind(self.gs.PluginKey.TEXT_ALIGNMENT, self,
|
||||
'text-alignment', Gio.SettingsBindFlags.GET)
|
||||
|
||||
def _connect_signals(self):
|
||||
self.connect("item-clicked", self.item_clicked_callback)
|
||||
self.connect("selection-changed", self.selectionchanged_callback)
|
||||
self.connect("item-activated", self.item_activated_callback)
|
||||
self.connect("item-activated", self.item_activated_callback)
|
||||
self.connect('notify::icon-spacing',
|
||||
self.on_notify_icon_spacing)
|
||||
self.on_notify_icon_spacing)
|
||||
self.connect('notify::icon-padding',
|
||||
self.on_notify_icon_padding)
|
||||
self.on_notify_icon_padding)
|
||||
self.connect('notify::display-text-enabled',
|
||||
self._activate_markup)
|
||||
self._activate_markup)
|
||||
self.connect('notify::display-text-pos',
|
||||
self._activate_markup)
|
||||
self._activate_markup)
|
||||
self.connect('notify::text-alignment',
|
||||
self._create_and_configure_renderer)
|
||||
self.connect("motion-notify-event", self.on_pointer_motion)
|
||||
|
||||
|
||||
self.add_events(Gdk.EventMask.SCROLL_MASK)
|
||||
self.connect("scroll-event", self.on_scroll_event)
|
||||
|
||||
def get_view_icon_name(self):
|
||||
return "iconview.png"
|
||||
|
||||
def resize_icon(self, cover_size):
|
||||
def resize_icon(self, cover_size):
|
||||
'''
|
||||
Callback called when to resize the icon
|
||||
[common to all views]
|
||||
'''
|
||||
self.set_item_width(cover_size)
|
||||
|
||||
def pre_display_popup(self):
|
||||
if not self._external_plugins:
|
||||
# initialise external plugin menu support
|
||||
self._external_plugins = \
|
||||
CreateExternalPluginMenu("ca_covers_view",
|
||||
self.ext_menu_pos, self.popup)
|
||||
self._external_plugins.create_menu('popup_menu', True)
|
||||
def on_scroll_event(self, widget, scroll_event):
|
||||
if scroll_event.state & Gdk.ModifierType.CONTROL_MASK:
|
||||
settings = self.gs.get_setting(self.gs.Path.PLUGIN)
|
||||
cover_size = settings[self.gs.PluginKey.COVER_SIZE]
|
||||
if scroll_event.direction == Gdk.ScrollDirection.UP:
|
||||
if cover_size <= 195:
|
||||
settings[self.gs.PluginKey.COVER_SIZE] = cover_size + 5
|
||||
elif scroll_event.direction == Gdk.ScrollDirection.DOWN:
|
||||
if cover_size >= 55:
|
||||
settings[self.gs.PluginKey.COVER_SIZE] = cover_size - 5
|
||||
elif scroll_event.direction == Gdk.ScrollDirection.SMOOTH:
|
||||
delta = scroll_event.delta_y
|
||||
print (delta)
|
||||
if delta < 0 and cover_size <= 195: # negative delta means scroll up
|
||||
settings[self.gs.PluginKey.COVER_SIZE] = cover_size - int(delta * 5)
|
||||
if delta > 0 and cover_size >= 55: # positive delta means scroll down
|
||||
settings[self.gs.PluginKey.COVER_SIZE] = cover_size - int(delta * 5)
|
||||
|
||||
GLib.idle_add(self.queue_draw)
|
||||
|
||||
return True
|
||||
|
||||
def on_drag_drop(self, widget, context, x, y, time):
|
||||
'''
|
||||
@@ -377,10 +428,7 @@ class CoverIconView(EnhancedIconView, AbstractView):
|
||||
'''
|
||||
|
||||
# stop the propagation of the signal (deactivates superclass callback)
|
||||
if rb3compat.is_rb3(self.shell):
|
||||
widget.stop_emission_by_name('drag-drop')
|
||||
else:
|
||||
widget.stop_emission('drag-drop')
|
||||
widget.stop_emission_by_name('drag-drop')
|
||||
|
||||
# obtain the path of the icon over which the drag operation finished
|
||||
path, pos = widget.get_dest_item_at_pos(x, y)
|
||||
@@ -393,17 +441,14 @@ class CoverIconView(EnhancedIconView, AbstractView):
|
||||
return result
|
||||
|
||||
def on_drag_data_received(self, widget, drag_context, x, y, data, info,
|
||||
time):
|
||||
time):
|
||||
'''
|
||||
Callback called when the drag source has prepared the data (pixbuf)
|
||||
for us to use.
|
||||
'''
|
||||
|
||||
# stop the propagation of the signal (deactivates superclass callback)
|
||||
if rb3compat.is_rb3(self.shell):
|
||||
widget.stop_emission_by_name('drag-data-received')
|
||||
else:
|
||||
widget.stop_emission('drag-data-received')
|
||||
widget.stop_emission_by_name('drag-data-received')
|
||||
|
||||
# get the album and the info and ask the loader to update the cover
|
||||
path, pos = widget.get_dest_item_at_pos(x, y)
|
||||
@@ -434,10 +479,7 @@ class CoverIconView(EnhancedIconView, AbstractView):
|
||||
|
||||
sel = data.set_uris(uris)
|
||||
# stop the propagation of the signal (deactivates superclass callback)
|
||||
if rb3compat.is_rb3(self.shell):
|
||||
widget.stop_emission_by_name('drag-data-get')
|
||||
else:
|
||||
widget.stop_emission('drag-data-get')
|
||||
widget.stop_emission_by_name('drag-data-get')
|
||||
|
||||
def on_drag_begin(self, widget, context):
|
||||
'''
|
||||
@@ -452,136 +494,168 @@ class CoverIconView(EnhancedIconView, AbstractView):
|
||||
item = Gtk.STOCK_DND_MULTIPLE
|
||||
|
||||
widget.drag_source_set_icon_stock(item)
|
||||
if rb3compat.is_rb3(self.shell):
|
||||
widget.stop_emission_by_name('drag-begin')
|
||||
else:
|
||||
widget.stop_emission('drag-begin')
|
||||
|
||||
def _cover_play_hotspot(self, path, in_vacinity=False):
|
||||
|
||||
if path and hasattr(self, "get_cell_rect"):
|
||||
# get_cell_rect only exists in Gtk+3.6 and later
|
||||
valid, rect = self.get_cell_rect(path, None) # rect of widget coords
|
||||
|
||||
cursor_x, cursor_y = self.get_pointer() # returns widget coords
|
||||
c_x = cursor_x - rect.x
|
||||
c_y = cursor_y - rect.y
|
||||
|
||||
sizing = (rect.width / 2) if in_vacinity else 0
|
||||
if c_x < (PLAY_SIZE_X + sizing) and \
|
||||
c_y < (PLAY_SIZE_Y + sizing) and \
|
||||
c_x > (self.icon_padding + self.icon_spacing) and \
|
||||
c_y > (self.icon_padding + self.icon_spacing):
|
||||
widget.stop_emission_by_name('drag-begin')
|
||||
|
||||
def _cover_play_hotspot(self, path, in_vacinity=False):
|
||||
if path:
|
||||
valid, rect = self.get_cell_rect(path, None) # rect of widget coords
|
||||
|
||||
cursor_x, cursor_y = self.get_pointer() # returns widget coords
|
||||
c_x = cursor_x - rect.x - (self.icon_padding / 2) - (self.icon_spacing / 2)
|
||||
c_y = cursor_y - rect.y - (self.icon_padding / 2) - (self.icon_spacing / 2)
|
||||
|
||||
sizing = (rect.width / 3) if in_vacinity else 0
|
||||
|
||||
full, x_offset, y_offset = self.props.cell_area.calc_play_icon_offset(0, 0)
|
||||
if full and c_y > y_offset:
|
||||
return False
|
||||
|
||||
y_offset = y_offset - PLAY_SIZE_Y
|
||||
|
||||
if (y_offset - PLAY_SIZE_Y) < 0:
|
||||
return False
|
||||
|
||||
if c_x < (PLAY_SIZE_X + sizing + x_offset) and \
|
||||
c_y < (PLAY_SIZE_Y + sizing + y_offset) and \
|
||||
c_x > x_offset and \
|
||||
c_y > (y_offset - sizing):
|
||||
return True
|
||||
|
||||
|
||||
# c_y 0 value at top - largest at bottom of the cover
|
||||
return False
|
||||
|
||||
|
||||
def on_pointer_motion(self, widget, event):
|
||||
self._calculate_hotspot(event)
|
||||
|
||||
def _calculate_hotspot(self, event):
|
||||
path = self.get_path_at_pos(event.x, event.y)
|
||||
self._current_mouse_x = event.x
|
||||
self._current_mouse_y = event.y
|
||||
|
||||
if self._calc_motion_step == 0:
|
||||
self._calc_motion_step = 1
|
||||
Gdk.threads_add_timeout(GLib.PRIORITY_DEFAULT_IDLE, 100,
|
||||
self._calculate_hotspot)
|
||||
else:
|
||||
path = self.get_path_at_pos(self._current_mouse_x,
|
||||
self._current_mouse_y)
|
||||
|
||||
if not self._last_path or self._last_path != path:
|
||||
self._display_icon(None, self._last_path)
|
||||
|
||||
def _display_icon(self, icon, path):
|
||||
self.props.cell_area.hover_pixbuf = icon
|
||||
if path and self.props.window:
|
||||
valid, rect = self.get_cell_rect(path, None)
|
||||
self.props.window.invalidate_rect(rect, True)
|
||||
|
||||
self.queue_draw()
|
||||
|
||||
def _calculate_hotspot(self, *args):
|
||||
|
||||
path = self.get_path_at_pos(self._current_mouse_x,
|
||||
self._current_mouse_y)
|
||||
|
||||
# if the current path was not the same as the last path then
|
||||
# reset the counter
|
||||
if not self._last_path or self._last_path != path:
|
||||
self._display_icon(None, self._last_path)
|
||||
self._last_path = path
|
||||
self._calc_motion_step = 0
|
||||
return False
|
||||
|
||||
self._calc_motion_step = self._calc_motion_step + 1
|
||||
|
||||
# if havent yet reached the requisite number of steps then
|
||||
# let the thread roll to the next increment
|
||||
if self._calc_motion_step < 8:
|
||||
return True
|
||||
|
||||
if not self._cover_play_hotspot(path, in_vacinity=True):
|
||||
# we are not near the hot-spot so decrement the counter
|
||||
# hoping next time around we are near
|
||||
self._calc_motion_step = self._calc_motion_step - 1
|
||||
self._display_icon(None, self._last_path)
|
||||
return True
|
||||
|
||||
# from here on in, we are going to display a hotspot icon
|
||||
# so lets decide which one
|
||||
|
||||
(_, playing) = self.shell.props.shell_player.get_playing()
|
||||
|
||||
if playing and not self._last_play_path:
|
||||
|
||||
calc_path = -1
|
||||
if playing:
|
||||
entry = self.shell.props.shell_player.get_playing_entry()
|
||||
album = self.album_manager.model.get_from_dbentry(entry)
|
||||
self._last_play_path = self.album_manager.model.get_path(album)
|
||||
|
||||
if playing and self._last_play_path == path:
|
||||
calc_path = self.album_manager.model.get_path(album)
|
||||
|
||||
if playing and calc_path == path:
|
||||
icon = 'button_playpause'
|
||||
elif playing:
|
||||
icon = 'button_queue'
|
||||
else:
|
||||
icon = 'button_play'
|
||||
|
||||
def recheck_hotspot(args):
|
||||
path = args[0]
|
||||
in_vacinity = args[1]
|
||||
|
||||
if self._cover_play_hotspot(path, in_vacinity):
|
||||
current_path = self.get_path_at_pos(event.x, event.y)
|
||||
if current_path == path:
|
||||
self._current_hover_path = path
|
||||
|
||||
else:
|
||||
self._current_hover_path = None
|
||||
|
||||
self._recheck_in_progress = False
|
||||
self._calculate_hotspot(event)
|
||||
self.queue_draw()
|
||||
|
||||
if self._cover_play_hotspot(path, in_vacinity=True):
|
||||
exact_hotspot = self._cover_play_hotspot(path)
|
||||
if path == self._current_hover_path:
|
||||
if exact_hotspot:
|
||||
icon = icon + '_hover'
|
||||
hover = self.hover_pixbufs[icon]
|
||||
elif exact_hotspot:
|
||||
if not self._recheck_in_progress:
|
||||
self._recheck_in_progress = True
|
||||
Gdk.threads_add_timeout(GLib.PRIORITY_DEFAULT_IDLE, 150,
|
||||
recheck_hotspot, (path, False))
|
||||
hover = None
|
||||
else:
|
||||
hover = None
|
||||
if not self._recheck_in_progress:
|
||||
self._recheck_in_progress = True
|
||||
Gdk.threads_add_timeout(GLib.PRIORITY_DEFAULT_IDLE, 450,
|
||||
recheck_hotspot, (path, True))
|
||||
else:
|
||||
hover = None
|
||||
|
||||
self.props.cell_area.hover_pixbuf = hover
|
||||
|
||||
|
||||
# now we've got the icon - lets double check that we are
|
||||
# actually hovering exactly on the hotspot because the icon will visually change
|
||||
|
||||
exact_hotspot = self._cover_play_hotspot(path)
|
||||
if exact_hotspot:
|
||||
icon = icon + '_hover'
|
||||
|
||||
hover = self.hover_pixbufs[icon]
|
||||
|
||||
self._display_icon(hover, path)
|
||||
self._calc_motion_step = self._calc_motion_step - 1
|
||||
|
||||
return True
|
||||
|
||||
def item_clicked_callback(self, iconview, event, path):
|
||||
'''
|
||||
Callback called when the user clicks somewhere on the cover_view.
|
||||
Along with source "show_hide_pane", takes care of showing/hiding the bottom
|
||||
pane after a second click on a selected album.
|
||||
'''
|
||||
|
||||
|
||||
# first test if we've clicked on the cover-play icon
|
||||
if self._cover_play_hotspot(path):
|
||||
(_, playing) = self.shell.props.shell_player.get_playing()
|
||||
|
||||
|
||||
# first see if anything is playing...
|
||||
if playing:
|
||||
entry = self.shell.props.shell_player.get_playing_entry()
|
||||
album = self.album_manager.model.get_from_dbentry(entry)
|
||||
|
||||
|
||||
# if the current playing entry corresponds to the album
|
||||
# we are hovering over then we are requesting to pause
|
||||
if self.album_manager.model.get_from_path(path) == album:
|
||||
self._last_play_path = path
|
||||
self._last_path = path
|
||||
self.shell.props.shell_player.pause()
|
||||
self.on_pointer_motion(self, event)
|
||||
return
|
||||
|
||||
# if we are not playing and the last thing played is what
|
||||
# we are still hovering over then we must be requesting to play
|
||||
|
||||
if self._last_play_path and self._last_play_path == path:
|
||||
self.shell.props.shell_player.play()
|
||||
self.on_pointer_motion(self, event)
|
||||
return
|
||||
|
||||
# otherwise, this must be a new album so we are asking just
|
||||
# to play this new album
|
||||
|
||||
self._last_play_path = path
|
||||
|
||||
# play selected album ... just need a short interval
|
||||
|
||||
# this must be a new album so we are asking just
|
||||
# to play this new album ... just need a short interval
|
||||
# for the selection event to kick in first
|
||||
def delay(*args):
|
||||
self.source.play_selected_album(self.source.favourites)
|
||||
self.props.cell_area.hover_pixbuf= \
|
||||
self.hover_pixbufs['button_play_hover']
|
||||
|
||||
if playing: # if we are playing then queue up the next album
|
||||
self.source.queue_selected_album(None, self.source.favourites)
|
||||
album = self.get_selected_objects()[0]
|
||||
cl = CoverLocale()
|
||||
cl.switch_locale(cl.Locale.LOCALE_DOMAIN)
|
||||
message = gettext.gettext('Album has added to list of playing albums')
|
||||
self.display_notification(album.name,
|
||||
message,
|
||||
album.cover.original)
|
||||
else: # otherwise just play it
|
||||
self._last_path = path
|
||||
self.source.play_selected_album(self.source.favourites)
|
||||
|
||||
icon = 'button_play_hover'
|
||||
self.props.cell_area.hover_pixbuf = \
|
||||
self.hover_pixbufs[icon]
|
||||
|
||||
Gdk.threads_add_timeout(GLib.PRIORITY_DEFAULT_IDLE, 250,
|
||||
delay, None)
|
||||
|
||||
delay, None)
|
||||
|
||||
return
|
||||
|
||||
|
||||
# to expand the entry view
|
||||
ctrl = event.state & Gdk.ModifierType.CONTROL_MASK
|
||||
shift = event.state & Gdk.ModifierType.SHIFT_MASK
|
||||
@@ -590,10 +664,10 @@ class CoverIconView(EnhancedIconView, AbstractView):
|
||||
self.source.click_count += 1 if not ctrl and not shift else 0
|
||||
|
||||
if self.source.click_count == 1:
|
||||
album = self.album_manager.model.get_from_path(path)\
|
||||
album = self.album_manager.model.get_from_path(path) \
|
||||
if path else None
|
||||
Gdk.threads_add_timeout(GLib.PRIORITY_DEFAULT_IDLE, 250,
|
||||
self.source.show_hide_pane, album)
|
||||
self.source.show_hide_pane, album)
|
||||
|
||||
def item_activated_callback(self, iconview, path):
|
||||
'''
|
||||
@@ -617,13 +691,20 @@ class CoverIconView(EnhancedIconView, AbstractView):
|
||||
self.set_row_spacing(self.icon_spacing)
|
||||
self.set_column_spacing(self.icon_spacing)
|
||||
|
||||
def _create_and_configure_renderer(self):
|
||||
#Add own cellrenderer
|
||||
self._text_renderer = Gtk.CellRendererText()
|
||||
def _create_and_configure_renderer(self, *args):
|
||||
if not self._text_renderer:
|
||||
# Add own cellrenderer
|
||||
self._text_renderer = Gtk.CellRendererText()
|
||||
|
||||
self._text_renderer.props.alignment = Pango.Alignment.CENTER
|
||||
self._text_renderer.props.alignment = self.text_alignment
|
||||
self._text_renderer.props.wrap_mode = Pango.WrapMode.WORD
|
||||
self._text_renderer.props.xalign = 0.5
|
||||
if self.text_alignment == 1:
|
||||
self._text_renderer.props.xalign = 0.5
|
||||
elif self.text_alignment == 0:
|
||||
self._text_renderer.props.xalign = 0
|
||||
else:
|
||||
self._text_renderer.props.xalign = 1
|
||||
|
||||
self._text_renderer.props.yalign = 0
|
||||
self._text_renderer.props.width = \
|
||||
self.album_manager.cover_man.cover_size
|
||||
@@ -643,16 +724,16 @@ class CoverIconView(EnhancedIconView, AbstractView):
|
||||
# set the renderer
|
||||
self.pack_end(self._text_renderer, False)
|
||||
self.add_attribute(self._text_renderer,
|
||||
'markup', AlbumsModel.columns['markup'])
|
||||
'markup', AlbumsModel.columns['markup'])
|
||||
elif self._text_renderer:
|
||||
# remove the cell renderer
|
||||
self.props.cell_area.remove(self._text_renderer)
|
||||
|
||||
|
||||
if self.display_text_enabled:
|
||||
self.set_tooltip_column(-1) # turnoff tooltips
|
||||
self.set_tooltip_column(-1) # turnoff tooltips
|
||||
else:
|
||||
self.set_tooltip_column(AlbumsModel.columns['tooltip'])
|
||||
|
||||
|
||||
def bottom_expander_expanded_callback(self, paned, expand):
|
||||
'''
|
||||
Callback connected to expanded signal of the paned GtkExpander
|
||||
@@ -666,21 +747,18 @@ class CoverIconView(EnhancedIconView, AbstractView):
|
||||
self.source.last_selected_album)
|
||||
|
||||
self.scroll_to_path(path, False, 0, 0)
|
||||
|
||||
|
||||
return False
|
||||
|
||||
Gdk.threads_add_idle(GObject.PRIORITY_DEFAULT_IDLE,
|
||||
scroll_to_album, None)
|
||||
scroll_to_album, None)
|
||||
|
||||
|
||||
def switch_to_view(self, source, album):
|
||||
self.initialise(source)
|
||||
self.show_policy.initialise(source.album_manager)
|
||||
|
||||
if album:
|
||||
path = source.album_manager.model.get_path(album)
|
||||
self.select_and_scroll_to_path(path)
|
||||
|
||||
self.scroll_to_album(album)
|
||||
|
||||
def grab_focus(self):
|
||||
super(EnhancedIconView, self).grab_focus()
|
||||
|
||||
|
||||
@@ -17,6 +17,11 @@
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
import shutil
|
||||
import os
|
||||
import sys
|
||||
import subprocess
|
||||
|
||||
from gi.repository import GObject
|
||||
from gi.repository import Gtk
|
||||
from gi.repository import GLib
|
||||
@@ -25,15 +30,10 @@ from gi.repository import Gdk
|
||||
from gi.repository import Peas
|
||||
from gi.repository import Gst
|
||||
|
||||
from coverart_album import Album
|
||||
from coverart_utils import NaturalString
|
||||
import rb
|
||||
import shutil
|
||||
import coverart_rb3compat as rb3compat
|
||||
import os.path
|
||||
import os
|
||||
import sys
|
||||
import subprocess
|
||||
|
||||
|
||||
class CoverArtExport(GObject.Object):
|
||||
'''
|
||||
@@ -41,68 +41,93 @@ class CoverArtExport(GObject.Object):
|
||||
|
||||
'''
|
||||
TARGET_BITRATE = 128
|
||||
|
||||
|
||||
def __init__(self, plugin, shell, album_manager):
|
||||
self.plugin = plugin
|
||||
self.shell = shell
|
||||
self.album_manager = album_manager
|
||||
|
||||
|
||||
self._gstreamer_has_initialised = False
|
||||
|
||||
self.has_opened_previously = False
|
||||
self._values = {}
|
||||
|
||||
def is_search_plugin_enabled(self):
|
||||
peas = Peas.Engine.get_default()
|
||||
loaded_plugins = peas.get_loaded_plugins()
|
||||
|
||||
|
||||
result = False
|
||||
if 'coverart_search_providers' in loaded_plugins:
|
||||
info = peas.get_plugin_info('coverart_search_providers')
|
||||
version = info.get_version()
|
||||
|
||||
|
||||
if NaturalString(version) >= "0.9":
|
||||
result = True
|
||||
|
||||
|
||||
return result
|
||||
|
||||
|
||||
def embed_albums(self, selected_albums):
|
||||
'''
|
||||
method to create the menu items for all supported plugins
|
||||
method to export and embed coverart to chosen albums
|
||||
|
||||
:selected_albums: `Album` - array of albums
|
||||
'''
|
||||
|
||||
|
||||
self._initialise_gstreamer()
|
||||
|
||||
|
||||
from coverart_search_tracks import CoverArtTracks
|
||||
|
||||
|
||||
search_tracks = CoverArtTracks()
|
||||
playlist_manager = self.shell.props.playlist_manager
|
||||
playlists_entries = playlist_manager.get_playlists()
|
||||
|
||||
ui = Gtk.Builder()
|
||||
ui.add_from_file(rb.find_plugin_file(self.plugin,
|
||||
'ui/coverart_exportembed.ui'))
|
||||
'ui/coverart_exportembed.ui'))
|
||||
ui.connect_signals(self)
|
||||
embeddialog = ui.get_object('exportembeddialog')
|
||||
folderchooserbutton = ui.get_object('folderchooserbutton')
|
||||
embeddialog.set_transient_for(self.shell.props.window)
|
||||
folderchooserbutton = ui.get_object('folderchooserbutton')
|
||||
use_album_name_checkbutton = ui.get_object('use_album_name_checkbutton')
|
||||
open_filemanager_checkbutton = ui.get_object('open_filemanager_checkbutton')
|
||||
convert_checkbutton = ui.get_object('convert_checkbutton')
|
||||
bitrate_spinbutton = ui.get_object('bitrate_spinbutton')
|
||||
resize_checkbutton = ui.get_object('resize_checkbutton')
|
||||
resize_spinbutton = ui.get_object('resize_spinbutton')
|
||||
bitrate_spinbutton.set_value(self.TARGET_BITRATE)
|
||||
resize_spinbutton.set_value(128)
|
||||
|
||||
downloads_dir = GLib.get_user_special_dir(GLib.UserDirectory.DIRECTORY_DOWNLOAD)
|
||||
folderchooserbutton.set_current_folder(downloads_dir)
|
||||
|
||||
# predefine values if not previously opened the dialog
|
||||
if self.has_opened_previously:
|
||||
print (self._values)
|
||||
if not self._values['toresize']:
|
||||
resize_spinbutton.set_value(128)
|
||||
else:
|
||||
resize_spinbutton.set_value(self._values['resize'])
|
||||
|
||||
if not self._values['convert']:
|
||||
bitrate_spinbutton.set_value(self.TARGET_BITRATE)
|
||||
else:
|
||||
bitrate_spinbutton.set_value(self._values['bitrate'])
|
||||
|
||||
folderchooserbutton.set_current_folder(self._values['final_folder_store'])
|
||||
use_album_name_checkbutton.set_active(self._values['use_album_name'])
|
||||
open_filemanager_checkbutton.set_active(self._values['open_filemanager'])
|
||||
convert_checkbutton.set_active(self._values['convert'])
|
||||
resize_checkbutton.set_active(self._values['toresize'])
|
||||
|
||||
else:
|
||||
bitrate_spinbutton.set_value(self.TARGET_BITRATE)
|
||||
resize_spinbutton.set_value(128)
|
||||
|
||||
downloads_dir = GLib.get_user_special_dir(GLib.UserDirectory.DIRECTORY_DOWNLOAD)
|
||||
folderchooserbutton.set_current_folder(downloads_dir)
|
||||
|
||||
response = embeddialog.run()
|
||||
|
||||
|
||||
if response != Gtk.ResponseType.OK:
|
||||
embeddialog.destroy()
|
||||
return
|
||||
|
||||
#ok pressed - now fetch values from the dialog
|
||||
self.has_opened_previously = True
|
||||
# ok pressed - now fetch values from the dialog
|
||||
final_folder_store = folderchooserbutton.get_current_folder()
|
||||
use_album_name = use_album_name_checkbutton.get_active()
|
||||
open_filemanager = open_filemanager_checkbutton.get_active()
|
||||
@@ -113,7 +138,16 @@ class CoverArtExport(GObject.Object):
|
||||
resize = int(resize_spinbutton.get_value())
|
||||
else:
|
||||
resize = -1
|
||||
|
||||
|
||||
self._values['bitrate'] = bitrate
|
||||
self._values['resize'] = resize
|
||||
self._values['final_folder_store'] = final_folder_store
|
||||
self._values['use_album_name'] = use_album_name
|
||||
self._values['open_filemanager'] = open_filemanager
|
||||
self._values['convert'] = convert
|
||||
self._values['toresize'] = toresize
|
||||
|
||||
print (self._values)
|
||||
embeddialog.destroy()
|
||||
|
||||
albums = {}
|
||||
@@ -127,27 +161,28 @@ class CoverArtExport(GObject.Object):
|
||||
|
||||
def complete():
|
||||
self.album_manager.progress = 1
|
||||
|
||||
|
||||
if open_filemanager:
|
||||
#code taken from http://stackoverflow.com/questions/1795111/is-there-a-cross-platform-way-to-open-a-file-browser-in-python
|
||||
if sys.platform=='win32':
|
||||
if sys.platform == 'win32':
|
||||
import winreg
|
||||
path= r('SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon')
|
||||
|
||||
path = r('SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon')
|
||||
for root in (winreg.HKEY_CURRENT_USER, winreg.HKEY_LOCAL_MACHINE):
|
||||
try:
|
||||
with winreg.OpenKey(root, path) as k:
|
||||
value, regtype= winreg.QueryValueEx(k, 'Shell')
|
||||
value, regtype = winreg.QueryValueEx(k, 'Shell')
|
||||
except WindowsError:
|
||||
pass
|
||||
else:
|
||||
if regtype in (winreg.REG_SZ, winreg.REG_EXPAND_SZ):
|
||||
shell= value
|
||||
shell = value
|
||||
break
|
||||
else:
|
||||
shell= 'Explorer.exe'
|
||||
shell = 'Explorer.exe'
|
||||
subprocess.Popen([shell, final_folder_store])
|
||||
|
||||
elif sys.platform=='darwin':
|
||||
elif sys.platform == 'darwin':
|
||||
subprocess.Popen(['open', final_folder_store])
|
||||
|
||||
else:
|
||||
@@ -156,29 +191,29 @@ class CoverArtExport(GObject.Object):
|
||||
self._albumiter = iter(albums)
|
||||
self._tracknumber = 0
|
||||
self._album = next(self._albumiter)
|
||||
|
||||
|
||||
def idle_call(data):
|
||||
exit_idle = True
|
||||
|
||||
track = albums[self._album][self._tracknumber]
|
||||
|
||||
|
||||
if not process_track(self._album, track):
|
||||
exit_idle = False
|
||||
|
||||
self._tracknumber = self._tracknumber + 1
|
||||
|
||||
if self._tracknumber >= len(albums[self._album]):
|
||||
if self._tracknumber >= len(albums[self._album]):
|
||||
try:
|
||||
self._tracknumber = 0
|
||||
self._album = next(self._albumiter)
|
||||
except StopIteration:
|
||||
exit_idle = False
|
||||
|
||||
|
||||
if not exit_idle:
|
||||
complete()
|
||||
|
||||
return exit_idle
|
||||
|
||||
|
||||
def process_track(album, track):
|
||||
self.album_manager.progress = self._track_count / total
|
||||
self._track_count = self._track_count + 1
|
||||
@@ -186,16 +221,16 @@ class CoverArtExport(GObject.Object):
|
||||
key = album.create_ext_db_key()
|
||||
finalPath = rb3compat.unquote(track.location)[7:]
|
||||
album_name = RB.search_fold(album.name)
|
||||
|
||||
|
||||
if use_album_name:
|
||||
folder_store = final_folder_store + '/' + album_name
|
||||
else:
|
||||
folder_store = final_folder_store
|
||||
|
||||
|
||||
try:
|
||||
if not os.path.exists(folder_store):
|
||||
os.makedirs(folder_store)
|
||||
|
||||
|
||||
if convert:
|
||||
self.convert_to_mp3(finalPath, folder_store, bitrate)
|
||||
finalPath = self._calc_mp3_filename(finalPath, folder_store)
|
||||
@@ -208,28 +243,28 @@ class CoverArtExport(GObject.Object):
|
||||
|
||||
dest = os.path.join(folder_store, os.path.basename(finalPath))
|
||||
desturi = 'file://' + rb3compat.pathname2url(dest)
|
||||
|
||||
|
||||
return search_tracks.embed(desturi, key, resize)
|
||||
|
||||
data = None
|
||||
|
||||
|
||||
Gdk.threads_add_idle(GLib.PRIORITY_DEFAULT_IDLE, idle_call, data)
|
||||
|
||||
def _initialise_gstreamer(self):
|
||||
|
||||
|
||||
if self._gstreamer_has_initialised:
|
||||
return
|
||||
|
||||
|
||||
self._gstreamer_has_initialised = True
|
||||
Gst.init(None)
|
||||
|
||||
|
||||
def on_new_decoded_pad(dbin, pad):
|
||||
decode = pad.get_parent()
|
||||
pipeline = decode.get_parent()
|
||||
convert = pipeline.get_by_name('convert')
|
||||
decode.link(convert)
|
||||
|
||||
#we are going to mimic the following
|
||||
|
||||
# we are going to mimic the following
|
||||
# gst-launch-1.0 filesrc location="02 - ABBA - Knowing Me, Knowing You.ogg" !
|
||||
# decodebin ! audioconvert ! audioresample ! lamemp3enc target=bitrate bitrate=128 !
|
||||
# xingmux ! id3v2mux ! filesink location="mytrack.mp3"
|
||||
@@ -242,15 +277,15 @@ class CoverArtExport(GObject.Object):
|
||||
convert = Gst.ElementFactory.make('audioconvert', 'convert')
|
||||
sample = Gst.ElementFactory.make('audioresample', 'sample')
|
||||
encoder = Gst.ElementFactory.make('lamemp3enc', 'encoder')
|
||||
encoder.set_property('target', 'bitrate')
|
||||
encoder.set_property('target', 'bitrate')
|
||||
encoder.set_property('bitrate', self.TARGET_BITRATE)
|
||||
|
||||
xing = Gst.ElementFactory.make('xingmux', 'xing') # needed to make bitrate more accurate
|
||||
xing = Gst.ElementFactory.make('xingmux', 'xing') # needed to make bitrate more accurate
|
||||
mux = Gst.ElementFactory.make('id3v2mux', 'mux')
|
||||
if not mux:
|
||||
# use id3mux where not available
|
||||
mux = Gst.ElementFactory.make('id3mux', 'mux')
|
||||
|
||||
|
||||
sink = Gst.ElementFactory.make('filesink', 'sink')
|
||||
|
||||
converter.add(source)
|
||||
@@ -267,33 +302,33 @@ class CoverArtExport(GObject.Object):
|
||||
#it doesnt have source-pads (http://stackoverflow.com/questions/2993777/gstreamer-of-pythons-gst-linkerror-problem)
|
||||
|
||||
decoder.connect("pad-added", on_new_decoded_pad)
|
||||
|
||||
|
||||
Gst.Element.link(convert, sample)
|
||||
Gst.Element.link(sample, encoder)
|
||||
Gst.Element.link(encoder, xing)
|
||||
Gst.Element.link(xing, mux)
|
||||
Gst.Element.link(mux, sink)
|
||||
|
||||
self.converter=converter
|
||||
self.source=source
|
||||
self.sink=sink
|
||||
self.encoder=encoder
|
||||
|
||||
|
||||
self.converter = converter
|
||||
self.source = source
|
||||
self.sink = sink
|
||||
self.encoder = encoder
|
||||
|
||||
def _calc_mp3_filename(self, filename, save_folder):
|
||||
finalname = os.path.basename(filename)
|
||||
finalname = finalname.rsplit('.')[0] + ".mp3"
|
||||
return save_folder + "/" + finalname
|
||||
return save_folder + "/" + finalname
|
||||
|
||||
def convert_to_mp3(self, filename, save_folder, bitrate):
|
||||
|
||||
|
||||
self.source.set_property('location', filename)
|
||||
self.sink.set_property('location', self._calc_mp3_filename(filename, save_folder))
|
||||
print (bitrate)
|
||||
print(bitrate)
|
||||
if bitrate < 32:
|
||||
bitrate = self.TARGET_BITRATE
|
||||
|
||||
|
||||
self.encoder.set_property('bitrate', int(bitrate))
|
||||
print (bitrate)
|
||||
print(bitrate)
|
||||
|
||||
# Start playing
|
||||
ret = self.converter.set_state(Gst.State.PLAYING)
|
||||
@@ -311,7 +346,7 @@ class CoverArtExport(GObject.Object):
|
||||
# for some reason in ubuntu 12.04 Gst.CLOCK_TIME_NONE fails
|
||||
msg = bus.timed_pop_filtered(
|
||||
18446744073709551615, Gst.MessageType.ERROR | Gst.MessageType.EOS)
|
||||
|
||||
|
||||
# Parse message
|
||||
if (msg):
|
||||
if msg.type == Gst.MessageType.ERROR:
|
||||
|
||||
@@ -19,20 +19,19 @@
|
||||
|
||||
from gi.repository import Peas
|
||||
from gi.repository import GObject
|
||||
from gi.repository import Gtk
|
||||
import lxml.etree as ET
|
||||
|
||||
import rb
|
||||
import coverart_rb3compat as rb3compat
|
||||
from coverart_rb3compat import ActionGroup
|
||||
from coverart_rb3compat import Action
|
||||
from coverart_rb3compat import ApplicationShell
|
||||
from coverart_rb3compat import Menu
|
||||
from coverart_utils import CaseInsensitiveDict
|
||||
|
||||
|
||||
class ExternalPlugin(GObject.Object):
|
||||
'''
|
||||
class for all supported ExternalPlugins
|
||||
'''
|
||||
|
||||
def __init__(self, **kargs):
|
||||
super(ExternalPlugin, self).__init__(**kargs)
|
||||
|
||||
@@ -50,7 +49,7 @@ class ExternalPlugin(GObject.Object):
|
||||
:param key: `str` name of attribute
|
||||
:param val: `str` value of attribute
|
||||
'''
|
||||
|
||||
|
||||
if key == 'is_album_menu':
|
||||
if val == 'yes':
|
||||
self.attributes[key] = True
|
||||
@@ -67,16 +66,16 @@ class ExternalPlugin(GObject.Object):
|
||||
loaded_plugins = peas.get_loaded_plugins()
|
||||
|
||||
if self.attributes['plugin_name'] in CaseInsensitiveDict(loaded_plugins):
|
||||
print ("found %s" % self.attributes['plugin_name'])
|
||||
print("found %s" % self.attributes['plugin_name'])
|
||||
return True
|
||||
|
||||
print ("search for %s" % self.attributes['plugin_name'])
|
||||
print (loaded_plugins)
|
||||
|
||||
print("search for %s" % self.attributes['plugin_name'])
|
||||
print(loaded_plugins)
|
||||
|
||||
return False
|
||||
|
||||
def create_menu_item(self, menubar, section_name, at_position,
|
||||
save_actiongroup, save_menu, for_album = False):
|
||||
save_actiongroup, save_menu, for_album=False):
|
||||
'''
|
||||
method to create the menu item appropriate to the plugin.
|
||||
A plugin can have many menu items - all menuitems are enclosed
|
||||
@@ -92,32 +91,35 @@ class ExternalPlugin(GObject.Object):
|
||||
'''
|
||||
if for_album and not self.attributes['is_album_menu']:
|
||||
return False
|
||||
|
||||
|
||||
if not self.is_activated():
|
||||
return False
|
||||
|
||||
action = ApplicationShell(save_menu.shell).lookup_action(self.attributes['action_group_name'],
|
||||
self.attributes['action_name'], self.attributes['action_type'])
|
||||
self.attributes['action_name'],
|
||||
self.attributes['action_type'])
|
||||
|
||||
if action:
|
||||
self.attributes['action']=action
|
||||
|
||||
self.attributes['action'] = action
|
||||
|
||||
if self.attributes['new_menu_name'] != '':
|
||||
self.attributes['label'] = self.attributes['new_menu_name']
|
||||
else:
|
||||
self.attributes['label']=action.label
|
||||
#self.attributes['sensitive']=action.get_sensitive()
|
||||
self.attributes['label'] = action.label
|
||||
# self.attributes['sensitive']=action.get_sensitive()
|
||||
else:
|
||||
print("action not found")
|
||||
print(self.attributes)
|
||||
return False
|
||||
|
||||
action = save_actiongroup.add_action(func=self.menuitem_callback,
|
||||
action_name=self.attributes['action_name'], album=for_album,
|
||||
shell=save_menu.shell, label=self.attributes['label'])
|
||||
|
||||
action_name=self.attributes['action_name'], album=for_album,
|
||||
shell=save_menu.shell, label=self.attributes['label'])
|
||||
|
||||
new_menu_item = save_menu.insert_menu_item(menubar, section_name,
|
||||
at_position, action)
|
||||
at_position, action)
|
||||
return new_menu_item
|
||||
|
||||
|
||||
def do_deactivate(self):
|
||||
pass
|
||||
|
||||
@@ -134,6 +136,19 @@ class ExternalPlugin(GObject.Object):
|
||||
|
||||
page.get_entry_view().select_all()
|
||||
|
||||
def activate(self, shell):
|
||||
'''
|
||||
method called to initiate the external plugin action
|
||||
the action is defined by defining the action_group_name, action_name and action_type
|
||||
'''
|
||||
|
||||
action = ApplicationShell(shell).lookup_action(self.attributes['action_group_name'],
|
||||
self.attributes['action_name'],
|
||||
self.attributes['action_type'])
|
||||
|
||||
if action:
|
||||
action.activate()
|
||||
|
||||
def menuitem_callback(self, action, param, args):
|
||||
'''
|
||||
method called when a menu-item is clicked. Basically, an Action
|
||||
@@ -147,9 +162,10 @@ class ExternalPlugin(GObject.Object):
|
||||
shell = args['shell']
|
||||
if for_album:
|
||||
self.set_entry_view_selected_entries(shell)
|
||||
|
||||
|
||||
self.attributes['action'].activate()
|
||||
|
||||
|
||||
class CreateExternalPluginMenu(GObject.Object):
|
||||
'''
|
||||
This is the key class called to initialise all supported plugins
|
||||
@@ -158,35 +174,31 @@ class CreateExternalPluginMenu(GObject.Object):
|
||||
:param at_position: `int` position within the GtkMenu to create menu - ignored for RB2.99
|
||||
:param popup: `Menu` whole popupmenu including sub-menus
|
||||
'''
|
||||
|
||||
def __init__(self, section_name, at_position, popup, **kargs):
|
||||
super(CreateExternalPluginMenu, self).__init__(**kargs)
|
||||
|
||||
self.menu = popup
|
||||
self.section_name = section_name
|
||||
self.at_position = at_position
|
||||
|
||||
|
||||
self._actiongroup = ActionGroup(popup.shell, section_name + '_externalplugins')
|
||||
|
||||
|
||||
# all supported plugins will be defined in the following array by parsing
|
||||
# the plugins XML file for the definition. Supported plugins are split between
|
||||
# rb2.99 and later and rb2.98 and earlier due to the likelihood that earlier
|
||||
# plugins may never be updated by their authors
|
||||
|
||||
# the plugins XML file for the definition.
|
||||
|
||||
self.supported_plugins = []
|
||||
|
||||
|
||||
extplugins = rb.find_plugin_file(popup.plugin, 'ui/coverart_external_plugins.xml')
|
||||
root = ET.parse(open(extplugins)).getroot()
|
||||
|
||||
if rb3compat.is_rb3(popup.shell):
|
||||
base = 'rb3/plugin'
|
||||
else:
|
||||
base = 'rb2/plugin'
|
||||
base = 'rb3/plugin'
|
||||
|
||||
for elem in root.xpath(base):
|
||||
pluginname = elem.attrib['name']
|
||||
|
||||
basemenu = base + "[@name='" + pluginname + "']/menu"
|
||||
|
||||
|
||||
for menuelem in root.xpath(basemenu):
|
||||
ext = ExternalPlugin()
|
||||
ext.appendattribute('plugin_name', pluginname)
|
||||
@@ -204,8 +216,8 @@ class CreateExternalPluginMenu(GObject.Object):
|
||||
ext.appendattribute(key, val)
|
||||
|
||||
self.supported_plugins.append(ext)
|
||||
|
||||
def create_menu(self, menu_name, for_album = False):
|
||||
|
||||
def create_menu(self, menu_name, for_album=False):
|
||||
'''
|
||||
method to create the menu items for all supported plugins
|
||||
|
||||
@@ -215,18 +227,18 @@ class CreateExternalPluginMenu(GObject.Object):
|
||||
EntryView
|
||||
'''
|
||||
self.menu_name = menu_name
|
||||
|
||||
self._actiongroup.remove_actions()
|
||||
|
||||
self._actiongroup.remove_actions()
|
||||
self.menu.remove_menu_items(self.menu_name, self.section_name)
|
||||
|
||||
|
||||
items_added = False
|
||||
|
||||
for plugin in self.supported_plugins:
|
||||
new_menu_item = plugin.create_menu_item(self.menu_name, self.section_name,
|
||||
self.at_position, self._actiongroup, self.menu, for_album)
|
||||
self.at_position, self._actiongroup, self.menu, for_album)
|
||||
|
||||
if (not items_added) and new_menu_item:
|
||||
items_added = True
|
||||
items_added = True
|
||||
|
||||
if items_added:
|
||||
self.menu.insert_separator(self.menu_name, self.at_position)
|
||||
|
||||
@@ -17,10 +17,12 @@
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
from coverart_widgets import AbstractView
|
||||
from gi.repository import GObject
|
||||
from gi.repository import GLib
|
||||
|
||||
from coverart_widgets import AbstractView
|
||||
|
||||
|
||||
class ListShowingPolicy(GObject.Object):
|
||||
'''
|
||||
Policy that mostly takes care of how and when things should be showed on
|
||||
@@ -38,37 +40,37 @@ class ListShowingPolicy(GObject.Object):
|
||||
return
|
||||
|
||||
self._has_initialised = True
|
||||
|
||||
|
||||
|
||||
class ListView(AbstractView):
|
||||
|
||||
__gtype_name__ = "ListView"
|
||||
|
||||
name = 'listview'
|
||||
use_plugin_window = False
|
||||
|
||||
|
||||
def __init__(self):
|
||||
super(ListView, self).__init__()
|
||||
self.view = self
|
||||
self._has_initialised = False
|
||||
self._has_initialised = False
|
||||
self.show_policy = ListShowingPolicy(self)
|
||||
|
||||
|
||||
def initialise(self, source):
|
||||
if self._has_initialised:
|
||||
return
|
||||
|
||||
|
||||
self._has_initialised = True
|
||||
|
||||
self.view_name = "list_view"
|
||||
super(ListView, self).initialise(source)
|
||||
#self.album_manager = source.album_manager
|
||||
# self.album_manager = source.album_manager
|
||||
self.shell = source.shell
|
||||
|
||||
|
||||
def switch_to_view(self, source, album):
|
||||
self.initialise(source)
|
||||
|
||||
|
||||
GLib.idle_add(self.shell.props.display_page_tree.select,
|
||||
self.shell.props.library_source)
|
||||
|
||||
self.shell.props.library_source)
|
||||
|
||||
def get_selected_objects(self):
|
||||
'''
|
||||
finds what has been selected
|
||||
|
||||
@@ -0,0 +1,258 @@
|
||||
# -*- Mode: python; coding: utf-8; tab-width: 4; indent-tabs-mode: nil; -*-
|
||||
#
|
||||
# Copyright (C) 2012 - fossfreedom
|
||||
# Copyright (C) 2012 - Agustin Carrasco
|
||||
#
|
||||
# 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, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
# define plugin
|
||||
from gi.repository import Gtk
|
||||
from gi.repository import RB
|
||||
from gi.repository import GObject
|
||||
from gi.repository import GLib
|
||||
from gi.repository import Gdk
|
||||
|
||||
from coverart_rb3compat import Menu
|
||||
from coverart_external_plugins import CreateExternalPluginMenu
|
||||
from coverart_entryview import CoverArtEntryView
|
||||
from coverart_rb3compat import ActionGroup
|
||||
from coverart_rb3compat import ApplicationShell
|
||||
from coverart_browser_prefs import CoverLocale
|
||||
from coverart_widgets import PressButton
|
||||
from coverart_utils import create_button_image
|
||||
import xml.etree.ElementTree as ET
|
||||
|
||||
import rb
|
||||
import os
|
||||
|
||||
class CoverArtPlayEntryView(CoverArtEntryView):
|
||||
__hash__ = GObject.__hash__
|
||||
|
||||
def __init__(self, shell, source):
|
||||
'''
|
||||
Initializes the entryview.
|
||||
'''
|
||||
super(CoverArtPlayEntryView, self).__init__(shell, source)
|
||||
|
||||
def define_menu(self):
|
||||
popup = Menu(self.plugin, self.shell)
|
||||
popup.load_from_file('N/A',
|
||||
'ui/coverart_play_pop_rb3.ui')
|
||||
signals = {
|
||||
'remove_from_playlist_menu_item': self.remove_from_playlist_menu_item_callback
|
||||
}
|
||||
|
||||
popup.connect_signals(signals)
|
||||
popup.connect('pre-popup', self.pre_popup_menu_callback)
|
||||
self.popup = popup
|
||||
|
||||
def pre_popup_menu_callback(self, *args):
|
||||
'''
|
||||
Callback when the popup menu is about to be displayed
|
||||
'''
|
||||
|
||||
if not self.external_plugins:
|
||||
self.external_plugins = \
|
||||
CreateExternalPluginMenu("playlist_entry_view", 1, self.popup)
|
||||
self.external_plugins.create_menu('play_popup_menu')
|
||||
|
||||
def remove_from_playlist_menu_item_callback(self, *args):
|
||||
print("remove_from_playlist_menu_item_callback")
|
||||
entries = self.get_selected_entries()
|
||||
for entry in entries:
|
||||
print(entry)
|
||||
self.source.source_query_model.remove_entry(entry)
|
||||
|
||||
def do_show_popup(self, over_entry):
|
||||
if over_entry:
|
||||
print("CoverArtBrowser DEBUG - do_show_popup()")
|
||||
|
||||
self.popup.popup(self.source,
|
||||
'play_popup_menu', 0, Gtk.get_current_event_time())
|
||||
|
||||
return over_entry
|
||||
|
||||
def play_track_menu_item_callback(self, *args):
|
||||
print("CoverArtBrowser DEBUG - play_track_menu_item_callback()")
|
||||
|
||||
selected = self.get_selected_entries()
|
||||
entry = selected[0]
|
||||
|
||||
# Start the music
|
||||
player = self.shell.props.shell_player
|
||||
player.play_entry(entry, self.source)
|
||||
|
||||
print("CoverArtBrowser DEBUG - play_track_menu_item_callback()")
|
||||
|
||||
|
||||
class CoverArtPlaySource(RB.BrowserSource):
|
||||
def __init__(self, **kwargs):
|
||||
'''
|
||||
Initializes the source.
|
||||
'''
|
||||
super(CoverArtPlaySource, self).__init__(**kwargs)
|
||||
#self.external_plugins = None
|
||||
self.hasActivated = False
|
||||
|
||||
self.save_in_progress = False
|
||||
self.save_interrupt = False
|
||||
self.filename = RB.user_cache_dir() + "/coverart_browser/playlist.xml"
|
||||
|
||||
def do_selected(self):
|
||||
'''
|
||||
Called by Rhythmbox when the source is selected. It makes sure to
|
||||
create the ui the first time the source is showed.
|
||||
'''
|
||||
print("CoverArtBrowser DEBUG - do_selected")
|
||||
|
||||
# first time of activation -> add graphical stuff
|
||||
if not self.hasActivated:
|
||||
self.do_impl_activate()
|
||||
|
||||
# indicate that the source was activated before
|
||||
self.hasActivated = True
|
||||
|
||||
print("CoverArtBrowser DEBUG - end do_selected")
|
||||
|
||||
|
||||
def do_impl_activate(self):
|
||||
'''
|
||||
Called by do_selected the first time the source is activated.
|
||||
It creates all the source ui and connects the necessary signals for it
|
||||
correct behavior.
|
||||
'''
|
||||
print('do_impl_activate')
|
||||
|
||||
self.plugin = self.props.plugin
|
||||
self.shell = self.props.shell
|
||||
|
||||
player = self.shell.props.shell_player
|
||||
player.set_playing_source(self)
|
||||
player.set_selected_source(self)
|
||||
|
||||
|
||||
# define a query model that we'll use for playing
|
||||
self.source_query_model = self.plugin.source_query_model
|
||||
|
||||
grid = Gtk.Grid()
|
||||
|
||||
self.entryview = self.get_entry_view()
|
||||
|
||||
child = self.get_children()
|
||||
print (child)
|
||||
|
||||
grid = child[0]
|
||||
self.rbsourcetoolbar = grid.get_children()[1] # need to remember the reference to stop crashes when python cleans up unlinked objects
|
||||
grid.remove(grid.get_children()[1])
|
||||
|
||||
self.get_entry_view().set_model(self.source_query_model)
|
||||
'''
|
||||
# enable sorting on the entryview
|
||||
entryview.set_columns_clickable(True)
|
||||
self.shell.props.library_source.get_entry_view().set_columns_clickable(
|
||||
True)
|
||||
'''
|
||||
cl = CoverLocale()
|
||||
cl.switch_locale(cl.Locale.LOCALE_DOMAIN)
|
||||
location = rb.find_plugin_file(self.plugin, 'ui/playsource-toolbar.ui')
|
||||
ui = Gtk.Builder()
|
||||
ui.set_translation_domain(cl.Locale.RB)
|
||||
ui.add_from_file(location)
|
||||
toolbar_menu = ui.get_object('playsource-toolbar')
|
||||
app = self.shell.props.application
|
||||
app.link_shared_menus(toolbar_menu)
|
||||
self.toolbar = RB.ButtonBar.new(toolbar_menu, toolbar_menu)
|
||||
self.toolbar.props.hexpand_set = False
|
||||
grid.attach(self.toolbar, 0, 0, 1, 1)
|
||||
|
||||
grid.show_all()
|
||||
|
||||
appshell = ApplicationShell(self.shell)
|
||||
action_group = ActionGroup(self.shell, 'PlaySourceActions')
|
||||
action_group.add_action(func=self.clear_playsource,
|
||||
action_name='playsource-clear', action_state=ActionGroup.STANDARD,
|
||||
action_type='app')
|
||||
action_group.add_action(func=self.shuffle_playsource,
|
||||
action_name='playsource-shuffle', action_state=ActionGroup.STANDARD,
|
||||
action_type='app')
|
||||
appshell.insert_action_group(action_group)
|
||||
|
||||
|
||||
# if the alternative-toolbar is loaded then lets connect to the toolbar-visibility signal
|
||||
# to control our sources toolbar visibility
|
||||
|
||||
#if hasattr(self.shell, 'alternative_toolbar'):
|
||||
# self.shell.alternative_toolbar.connect('toolbar-visibility', self._visibility)
|
||||
|
||||
self._load_model()
|
||||
|
||||
self.source_query_model.connect('row-inserted', self.save_changed_model)
|
||||
self.source_query_model.connect('row-changed', self.save_changed_model)
|
||||
self.source_query_model.connect('row-deleted', self.save_changed_model)
|
||||
|
||||
def _load_model(self):
|
||||
if not os.path.isfile(self.filename):
|
||||
return
|
||||
|
||||
parser = ET.XMLParser(encoding="utf-8")
|
||||
tree = ET.parse(self.filename, parser=parser)
|
||||
|
||||
root = tree.getroot()
|
||||
|
||||
for child in root.findall('./entry/text'):
|
||||
location = child.text
|
||||
entry = self.shell.props.db.entry_lookup_by_location(location)
|
||||
if entry:
|
||||
self.source_query_model.add_entry(entry, -1)
|
||||
|
||||
self.props.query_model = self.source_query_model
|
||||
|
||||
def clear_playsource(self, *args):
|
||||
for row in self.get_entry_view().props.model:
|
||||
self.get_entry_view().props.model.remove_entry(row[0])
|
||||
|
||||
def shuffle_playsource(self, *args):
|
||||
self.get_entry_view().props.model.shuffle_entries()
|
||||
self._save_model()
|
||||
|
||||
def save_changed_model(self, *args):
|
||||
|
||||
if self.save_in_progress:
|
||||
self.save_interrupt = True
|
||||
return
|
||||
|
||||
self.save_in_progress = True
|
||||
|
||||
Gdk.threads_add_timeout_seconds(GLib.PRIORITY_DEFAULT_IDLE, 1, self._save_model, None)
|
||||
|
||||
def _save_model(self, *args):
|
||||
if self.save_interrupt:
|
||||
self.save_interrupt = False
|
||||
return True
|
||||
|
||||
root = ET.Element('root')
|
||||
element = ET.SubElement(root, 'entry')
|
||||
for row in self.source_query_model:
|
||||
location = row[0].get_string(RB.RhythmDBPropType.LOCATION)
|
||||
subelement = ET.SubElement(element, 'text')
|
||||
subelement.text = location
|
||||
|
||||
tree = ET.ElementTree(root)
|
||||
tree.write(self.filename)
|
||||
|
||||
self.save_in_progress = False
|
||||
return False
|
||||
|
||||
GObject.type_register(CoverArtPlayEntryView)
|
||||
@@ -0,0 +1,377 @@
|
||||
# -*- Mode: python; coding: utf-8; tab-width: 4; indent-tabs-mode: nil; -*-
|
||||
#
|
||||
# Copyright (C) 2012 - fossfreedom
|
||||
# Copyright (C) 2012 - Agustin Carrasco
|
||||
#
|
||||
# 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, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
import urllib.parse
|
||||
import json
|
||||
import os
|
||||
import random
|
||||
|
||||
from gi.repository import RB
|
||||
from gi.repository import Gtk
|
||||
|
||||
from coverart_utils import idle_iterator
|
||||
import rb
|
||||
|
||||
|
||||
LOAD_CHUNK = 50
|
||||
|
||||
|
||||
class WebPlaylist(object):
|
||||
MAX_TRACKS_TO_ADD = 3 # number of tracks to add to a source for each fetch
|
||||
MIN_TRACKS_TO_FETCH = 5 # number of tracks in source before a fetch will be required
|
||||
TOTAL_TRACKS_REMEMBERED = 25 # total number of tracks for all artists before a fetch is allowed
|
||||
MAX_TRACKS_PER_ARTIST = 3 # number of tracks allowed to be remembered per artist
|
||||
|
||||
def __init__(self, shell, source, playlist_name):
|
||||
|
||||
self.shell = shell
|
||||
# lets fill up the queue with artists
|
||||
self.candidate_artist = {}
|
||||
self.shell.props.shell_player.connect('playing-song-changed', self.playing_song_changed)
|
||||
self.source = source
|
||||
self.search_entry = None
|
||||
self.playlist_started = False
|
||||
self.played_artist = {}
|
||||
self.tracks_not_played = 0
|
||||
# cache for artist information: valid for a month, can be used indefinitely
|
||||
# if offline, discarded if unused for six months
|
||||
self.info_cache = rb.URLCache(name=playlist_name,
|
||||
path=os.path.join('coverart_browser', playlist_name),
|
||||
refresh=30,
|
||||
discard=180)
|
||||
self.info_cache.clean()
|
||||
|
||||
def playing_song_changed(self, player, entry):
|
||||
if not entry:
|
||||
return
|
||||
|
||||
if player.get_playing_source() != self.source:
|
||||
self.playlist_started = False
|
||||
self.played_artist.clear()
|
||||
self.tracks_not_played = 0
|
||||
|
||||
if self.playlist_started and len(self.source.props.query_model) < self.MIN_TRACKS_TO_FETCH:
|
||||
self.start(entry)
|
||||
|
||||
def start(self, seed_entry, reinitialise=False):
|
||||
artist = seed_entry.get_string(RB.RhythmDBPropType.ARTIST)
|
||||
|
||||
if reinitialise:
|
||||
self.played_artist.clear()
|
||||
self.tracks_not_played = 0
|
||||
self.playlist_started = False
|
||||
|
||||
player = self.shell.props.shell_player
|
||||
_, is_playing = player.get_playing()
|
||||
|
||||
if is_playing:
|
||||
player.stop()
|
||||
|
||||
for row in self.source.props.query_model:
|
||||
self.source.props.query_model.remove_entry(row[0])
|
||||
|
||||
if self.tracks_not_played > self.TOTAL_TRACKS_REMEMBERED:
|
||||
print(("we have plenty of tracks to play yet - no need to fetch more %d", self.tracks_not_played))
|
||||
self.add_tracks_to_source()
|
||||
return
|
||||
|
||||
search_artist = urllib.parse.quote(artist.encode("utf8"))
|
||||
if search_artist in self.played_artist:
|
||||
print("we have already searched for that artist")
|
||||
return
|
||||
|
||||
self.search_entry = seed_entry
|
||||
self.played_artist[search_artist] = True
|
||||
|
||||
self.playlist_started = True
|
||||
self._running = False
|
||||
self._start_process()
|
||||
|
||||
def _start_process(self):
|
||||
if not self._running:
|
||||
self._running = True
|
||||
self.search_website()
|
||||
|
||||
def search_website(self):
|
||||
pass
|
||||
|
||||
def _clear_next(self):
|
||||
self.search_artists = ""
|
||||
self._running = False
|
||||
|
||||
@idle_iterator
|
||||
def _load_albums(self):
|
||||
def process(row, data):
|
||||
entry = data['model'][row.path][0]
|
||||
|
||||
lookup = entry.get_string(RB.RhythmDBPropType.ARTIST_FOLDED)
|
||||
lookup_title = entry.get_string(RB.RhythmDBPropType.TITLE_FOLDED)
|
||||
|
||||
if lookup in self.artist and \
|
||||
lookup_title in \
|
||||
self.artist[lookup]:
|
||||
|
||||
if lookup not in self.candidate_artist:
|
||||
self.candidate_artist[lookup] = []
|
||||
|
||||
# N.B. every artist has an array of dicts with a known format of track & add-to-source elements
|
||||
# the following extracts the track-title and add-to-source to form a dict of track-title and a value
|
||||
# of the add-to-source
|
||||
d = dict((i['track-title'], i['add-to-source']) for i in self.candidate_artist[lookup])
|
||||
if len(d) < self.MAX_TRACKS_PER_ARTIST and lookup_title not in d:
|
||||
# we only append a max of three tracks to each artist
|
||||
self.candidate_artist[lookup].append({
|
||||
'track': entry,
|
||||
'add-to-source': False,
|
||||
'track-title': lookup_title})
|
||||
self.tracks_not_played = self.tracks_not_played + 1
|
||||
|
||||
|
||||
def after(data):
|
||||
# update the progress
|
||||
pass
|
||||
|
||||
def error(exception):
|
||||
print(('Error processing entries: ' + str(exception)))
|
||||
|
||||
def finish(data):
|
||||
|
||||
self.add_tracks_to_source()
|
||||
self._clear_next()
|
||||
|
||||
return LOAD_CHUNK, process, after, error, finish
|
||||
|
||||
def display_error_message(self):
|
||||
dialog = Gtk.MessageDialog(None,
|
||||
Gtk.DialogFlags.MODAL,
|
||||
Gtk.MessageType.INFO,
|
||||
Gtk.ButtonsType.OK,
|
||||
_("No matching tracks have been found"))
|
||||
|
||||
dialog.run()
|
||||
dialog.destroy()
|
||||
|
||||
def add_tracks_to_source(self):
|
||||
entries = []
|
||||
for artist in self.candidate_artist:
|
||||
|
||||
d = dict((i['track'], (self.candidate_artist[artist].index(i),
|
||||
i['add-to-source'],
|
||||
artist)) for i in self.candidate_artist[artist])
|
||||
|
||||
for entry, elements in d.items():
|
||||
element_pos, add_to_source, artist = elements
|
||||
if not add_to_source:
|
||||
entries.append({entry: elements})
|
||||
|
||||
random.shuffle(entries)
|
||||
|
||||
count = 0
|
||||
for row in entries:
|
||||
print(row)
|
||||
entry, elements = list(row.items())[0]
|
||||
element_pos, add_to_source, artist = elements
|
||||
self.source.add_entry(entry, -1)
|
||||
self.candidate_artist[artist][element_pos]['add-to-source'] = True
|
||||
|
||||
count = count + 1
|
||||
self.tracks_not_played = self.tracks_not_played - 1
|
||||
if count == self.MAX_TRACKS_TO_ADD:
|
||||
break
|
||||
|
||||
player = self.shell.props.shell_player
|
||||
|
||||
_, is_playing = player.get_playing()
|
||||
|
||||
if len(self.source.props.query_model) > 0 and not is_playing:
|
||||
player.play_entry(self.source.props.query_model[0][0], self.source)
|
||||
|
||||
|
||||
class LastFMTrackPlaylist(WebPlaylist):
|
||||
def __init__(self, shell, source):
|
||||
WebPlaylist.__init__(self, shell, source, "lastfm_trackplaylist")
|
||||
|
||||
def search_website(self):
|
||||
# unless already cached - directly fetch from lastfm similar track information
|
||||
apikey = "844353bce568b93accd9ca47674d6c3e"
|
||||
url = "http://ws.audioscrobbler.com/2.0/?method=track.getsimilar&api_key={0}&artist={1}&track={2}&format=json"
|
||||
|
||||
artist = self.search_entry.get_string(RB.RhythmDBPropType.ARTIST)
|
||||
title = self.search_entry.get_string(RB.RhythmDBPropType.TITLE)
|
||||
artist = urllib.parse.quote(artist.encode("utf8"))
|
||||
title = urllib.parse.quote(title.encode("utf8"))
|
||||
formatted_url = url.format(urllib.parse.quote(apikey),
|
||||
artist,
|
||||
title)
|
||||
|
||||
print(formatted_url)
|
||||
cachekey = "artist:%s:title:%s" % (artist, title)
|
||||
self.info_cache.fetch(cachekey, formatted_url, self.similar_info_cb, None)
|
||||
|
||||
def similar_info_cb(self, data, _):
|
||||
|
||||
if not data:
|
||||
print("nothing to do")
|
||||
self.display_error_message()
|
||||
self._clear_next()
|
||||
return
|
||||
|
||||
similar = json.loads(data.decode('utf-8'))
|
||||
|
||||
# loop through the response and find all titles for the artists returned
|
||||
self.artist = {}
|
||||
|
||||
if 'similartracks' not in similar:
|
||||
print("No matching data returned from LastFM")
|
||||
self.display_error_message()
|
||||
self._clear_next()
|
||||
return
|
||||
for song in similar['similartracks']['track']:
|
||||
name = RB.search_fold(song['artist']['name'])
|
||||
if name not in self.artist:
|
||||
self.artist[name] = []
|
||||
|
||||
self.artist[name].append(RB.search_fold(song['name']))
|
||||
|
||||
if len(self.artist) == 0:
|
||||
print("no artists returned")
|
||||
self._clear_next()
|
||||
return
|
||||
|
||||
# loop through every track - see if the track contains the artist & title
|
||||
# if yes then this is a candidate similar track to remember
|
||||
|
||||
query_model = self.shell.props.library_source.props.base_query_model
|
||||
|
||||
self._load_albums(iter(query_model), albums={}, model=query_model,
|
||||
total=len(query_model), progress=0.)
|
||||
|
||||
|
||||
class EchoNestPlaylist(WebPlaylist):
|
||||
def __init__(self, shell, source):
|
||||
WebPlaylist.__init__(self, shell, source, "echonest_playlist")
|
||||
|
||||
def search_website(self):
|
||||
# unless already cached - directly fetch from echonest similar artist information
|
||||
apikey = "N685TONJGZSHBDZMP"
|
||||
url = "http://developer.echonest.com/api/v4/playlist/basic?api_key={0}&artist={1}&format=json&results=100&type=artist-radio&limited_interactivity=true"
|
||||
|
||||
artist = self.search_entry.get_string(RB.RhythmDBPropType.ARTIST)
|
||||
artist = urllib.parse.quote(artist.encode("utf8"))
|
||||
formatted_url = url.format(urllib.parse.quote(apikey),
|
||||
artist)
|
||||
|
||||
print(formatted_url)
|
||||
cachekey = "artist:%s" % artist
|
||||
self.info_cache.fetch(cachekey, formatted_url, self.similar_info_cb, None)
|
||||
|
||||
def similar_info_cb(self, data, _):
|
||||
|
||||
if not data:
|
||||
print("nothing to do")
|
||||
self.display_error_message()
|
||||
self._clear_next()
|
||||
return
|
||||
|
||||
similar = json.loads(data.decode('utf-8'))
|
||||
|
||||
# loop through the response and find all titles for the artists returned
|
||||
self.artist = {}
|
||||
|
||||
if 'songs' not in similar['response']:
|
||||
print("No matching data returned from EchoNest")
|
||||
self.display_error_message()
|
||||
self._clear_next()
|
||||
return
|
||||
for song in similar['response']['songs']:
|
||||
name = RB.search_fold(song['artist_name'])
|
||||
if name not in self.artist:
|
||||
self.artist[name] = []
|
||||
|
||||
self.artist[name].append(RB.search_fold(song['title']))
|
||||
|
||||
if len(self.artist) == 0:
|
||||
print("no artists returned")
|
||||
self._clear_next()
|
||||
return
|
||||
|
||||
# loop through every track - see if the track contains the artist & title
|
||||
# if yes then this is a candidate similar track to remember
|
||||
|
||||
query_model = self.shell.props.library_source.props.base_query_model
|
||||
|
||||
self._load_albums(iter(query_model), albums={}, model=query_model,
|
||||
total=len(query_model), progress=0.)
|
||||
|
||||
|
||||
class EchoNestGenrePlaylist(WebPlaylist):
|
||||
def __init__(self, shell, source):
|
||||
WebPlaylist.__init__(self, shell, source, "echonest_genre_playlist")
|
||||
|
||||
def search_website(self):
|
||||
# unless already cached - directly fetch from echonest similar artist information
|
||||
apikey = "N685TONJGZSHBDZMP"
|
||||
url = "http://developer.echonest.com/api/v4/playlist/basic?api_key={0}&genre={1}&format=json&results=100&type=genre-radio&limited_interactivity=true"
|
||||
|
||||
genre = self.search_entry.get_string(RB.RhythmDBPropType.GENRE).lower()
|
||||
genre = urllib.parse.quote(genre.encode("utf8"))
|
||||
formatted_url = url.format(urllib.parse.quote(apikey),
|
||||
genre)
|
||||
|
||||
print(formatted_url)
|
||||
cachekey = "genre:%s" % genre
|
||||
self.info_cache.fetch(cachekey, formatted_url, self.similar_info_cb, None)
|
||||
|
||||
def similar_info_cb(self, data, _):
|
||||
|
||||
if not data:
|
||||
print("nothing to do")
|
||||
self.display_error_message()
|
||||
self._clear_next()
|
||||
return
|
||||
|
||||
similar = json.loads(data.decode('utf-8'))
|
||||
|
||||
# loop through the response and find all titles for the artists returned
|
||||
self.artist = {}
|
||||
|
||||
if 'songs' not in similar['response']:
|
||||
print("No matching data returned from EchoNest")
|
||||
self.display_error_message()
|
||||
self._clear_next()
|
||||
return
|
||||
for song in similar['response']['songs']:
|
||||
name = RB.search_fold(song['artist_name'])
|
||||
if name not in self.artist:
|
||||
self.artist[name] = []
|
||||
|
||||
self.artist[name].append(RB.search_fold(song['title']))
|
||||
|
||||
if len(self.artist) == 0:
|
||||
print("no artists returned")
|
||||
self._clear_next()
|
||||
return
|
||||
|
||||
# loop through every track - see if the track contains the artist & title
|
||||
# if yes then this is a candidate similar track to remember
|
||||
|
||||
query_model = self.shell.props.library_source.props.base_query_model
|
||||
|
||||
self._load_albums(iter(query_model), albums={}, model=query_model,
|
||||
total=len(query_model), progress=0.)
|
||||
@@ -0,0 +1,80 @@
|
||||
# -*- Mode: python; coding: utf-8; tab-width: 4; indent-tabs-mode: nil; -*-
|
||||
#
|
||||
# Copyright (C) 2012 - fossfreedom
|
||||
# Copyright (C) 2012 - Agustin Carrasco
|
||||
#
|
||||
# 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, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
from gi.repository import GObject
|
||||
from gi.repository import GLib
|
||||
|
||||
from coverart_widgets import AbstractView
|
||||
|
||||
|
||||
class PlaySourceShowingPolicy(GObject.Object):
|
||||
'''
|
||||
Policy that mostly takes care of how and when things should be showed on
|
||||
the view that makes use of the `AlbumsModel`.
|
||||
'''
|
||||
|
||||
def __init__(self, list_view):
|
||||
super(PlaySourceShowingPolicy, self).__init__()
|
||||
|
||||
self.counter = 0
|
||||
self._has_initialised = False
|
||||
|
||||
def initialise(self, album_manager):
|
||||
if self._has_initialised:
|
||||
return
|
||||
|
||||
self._has_initialised = True
|
||||
|
||||
|
||||
class PlaySourceView(AbstractView):
|
||||
__gtype_name__ = "PlaySourceView"
|
||||
|
||||
name = 'playsourceview'
|
||||
use_plugin_window = False
|
||||
|
||||
def __init__(self):
|
||||
super(PlaySourceView, self).__init__()
|
||||
self.view = self
|
||||
self._has_initialised = False
|
||||
self.show_policy = PlaySourceShowingPolicy(self)
|
||||
|
||||
def initialise(self, source):
|
||||
if self._has_initialised:
|
||||
return
|
||||
|
||||
self._has_initialised = True
|
||||
|
||||
self.view_name = "playsource_view"
|
||||
super(PlaySourceView, self).initialise(source)
|
||||
# self.album_manager = source.album_manager
|
||||
self.shell = source.shell
|
||||
|
||||
def switch_to_view(self, source, album):
|
||||
self.initialise(source)
|
||||
|
||||
GLib.idle_add(self.shell.props.display_page_tree.select,
|
||||
source.plugin.playlist_source)
|
||||
|
||||
def get_selected_objects(self):
|
||||
'''
|
||||
finds what has been selected
|
||||
|
||||
returns an array of `Album`
|
||||
'''
|
||||
return []
|
||||
@@ -0,0 +1,80 @@
|
||||
# -*- Mode: python; coding: utf-8; tab-width: 4; indent-tabs-mode: nil; -*-
|
||||
#
|
||||
# Copyright (C) 2012 - fossfreedom
|
||||
# Copyright (C) 2012 - Agustin Carrasco
|
||||
#
|
||||
# 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, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
from gi.repository import GObject
|
||||
from gi.repository import GLib
|
||||
|
||||
from coverart_widgets import AbstractView
|
||||
|
||||
|
||||
class QueueShowingPolicy(GObject.Object):
|
||||
'''
|
||||
Policy that mostly takes care of how and when things should be showed on
|
||||
the view that makes use of the `AlbumsModel`.
|
||||
'''
|
||||
|
||||
def __init__(self, list_view):
|
||||
super(QueueShowingPolicy, self).__init__()
|
||||
|
||||
self.counter = 0
|
||||
self._has_initialised = False
|
||||
|
||||
def initialise(self, album_manager):
|
||||
if self._has_initialised:
|
||||
return
|
||||
|
||||
self._has_initialised = True
|
||||
|
||||
|
||||
class QueueView(AbstractView):
|
||||
__gtype_name__ = "QueueView"
|
||||
|
||||
name = 'queueview'
|
||||
use_plugin_window = False
|
||||
|
||||
def __init__(self):
|
||||
super(QueueView, self).__init__()
|
||||
self.view = self
|
||||
self._has_initialised = False
|
||||
self.show_policy = QueueShowingPolicy(self)
|
||||
|
||||
def initialise(self, source):
|
||||
if self._has_initialised:
|
||||
return
|
||||
|
||||
self._has_initialised = True
|
||||
|
||||
self.view_name = "queue_view"
|
||||
super(QueueView, self).initialise(source)
|
||||
# self.album_manager = source.album_manager
|
||||
self.shell = source.shell
|
||||
|
||||
def switch_to_view(self, source, album):
|
||||
self.initialise(source)
|
||||
|
||||
GLib.idle_add(self.shell.props.display_page_tree.select,
|
||||
self.shell.props.queue_source)
|
||||
|
||||
def get_selected_objects(self):
|
||||
'''
|
||||
finds what has been selected
|
||||
|
||||
returns an array of `Album`
|
||||
'''
|
||||
return []
|
||||
@@ -22,14 +22,24 @@
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
import sys
|
||||
import xml.etree.ElementTree as ET
|
||||
|
||||
from gi.repository import Gtk
|
||||
from gi.repository import Gio
|
||||
from gi.repository import GLib
|
||||
from gi.repository import GObject
|
||||
from gi.repository import RB
|
||||
import sys
|
||||
|
||||
import rb
|
||||
import lxml.etree as ET
|
||||
|
||||
def gtk_version():
|
||||
'''
|
||||
returns float of the major and minor parts of the GTK version
|
||||
e.g. return float(3.10)
|
||||
'''
|
||||
|
||||
return float(str(Gtk.get_major_version())+"."+str(Gtk.get_minor_version()))
|
||||
|
||||
def pygobject_version():
|
||||
'''
|
||||
@@ -37,31 +47,33 @@ def pygobject_version():
|
||||
e.g. version (3, 9, 5) return float(3.9)
|
||||
'''
|
||||
to_number = lambda t: ".".join(str(v) for v in t)
|
||||
|
||||
|
||||
str_version = to_number(GObject.pygobject_version)
|
||||
|
||||
return float(str_version.rsplit('.',1)[0])
|
||||
|
||||
|
||||
return float(str_version.rsplit('.', 1)[0])
|
||||
|
||||
|
||||
def compare_pygobject_version(version):
|
||||
'''
|
||||
return True if version is less than pygobject_version
|
||||
i.e. 3.9 < 3.11
|
||||
'''
|
||||
to_number = lambda t: ".".join(str(v) for v in t)
|
||||
|
||||
|
||||
str_version = to_number(GObject.pygobject_version)
|
||||
|
||||
split = str_version.rsplit('.',2)
|
||||
split_compare = version.rsplit('.',2)
|
||||
|
||||
if int(split_compare[0])<int(split[0]):
|
||||
|
||||
split = str_version.rsplit('.', 2)
|
||||
split_compare = version.rsplit('.', 2)
|
||||
|
||||
if int(split_compare[0]) < int(split[0]):
|
||||
return True
|
||||
|
||||
if int(split_compare[1])<int(split[1]):
|
||||
|
||||
if int(split_compare[1]) < int(split[1]):
|
||||
return True
|
||||
|
||||
|
||||
return False
|
||||
|
||||
|
||||
|
||||
PYVER = sys.version_info[0]
|
||||
|
||||
if PYVER >= 3:
|
||||
@@ -74,65 +86,75 @@ if PYVER >= 3:
|
||||
import http.client
|
||||
else:
|
||||
import httplib
|
||||
|
||||
|
||||
|
||||
def responses():
|
||||
if PYVER >=3:
|
||||
if PYVER >= 3:
|
||||
return http.client.responses
|
||||
else:
|
||||
return httplib.responses
|
||||
|
||||
|
||||
def unicodestr(param, charset):
|
||||
if PYVER >=3:
|
||||
return param#str(param, charset)
|
||||
if PYVER >= 3:
|
||||
return param # str(param, charset)
|
||||
else:
|
||||
return unicode(param, charset)
|
||||
|
||||
|
||||
|
||||
def unicodeencode(param, charset):
|
||||
if PYVER >=3:
|
||||
return param#str(param).encode(charset)
|
||||
if PYVER >= 3:
|
||||
return param # str(param).encode(charset)
|
||||
else:
|
||||
return unicode(param).encode(charset)
|
||||
|
||||
|
||||
|
||||
def unicodedecode(param, charset):
|
||||
if PYVER >=3:
|
||||
if PYVER >= 3:
|
||||
return param
|
||||
else:
|
||||
return param.decode(charset)
|
||||
|
||||
|
||||
def urlparse(uri):
|
||||
if PYVER >=3:
|
||||
if PYVER >= 3:
|
||||
return urllib.parse.urlparse(uri)
|
||||
else:
|
||||
return rb2urlparse(uri)
|
||||
|
||||
|
||||
|
||||
def url2pathname(url):
|
||||
if PYVER >=3:
|
||||
if PYVER >= 3:
|
||||
return urllib.request.url2pathname(url)
|
||||
else:
|
||||
return urllib.url2pathname(url)
|
||||
|
||||
|
||||
def urlopen(filename):
|
||||
if PYVER >=3:
|
||||
if PYVER >= 3:
|
||||
return urllib.request.urlopen(filename)
|
||||
else:
|
||||
return urllib.urlopen(filename)
|
||||
|
||||
|
||||
|
||||
def pathname2url(filename):
|
||||
if PYVER >=3:
|
||||
if PYVER >= 3:
|
||||
return urllib.request.pathname2url(filename)
|
||||
else:
|
||||
return urllib.pathname2url(filename)
|
||||
|
||||
|
||||
def unquote(uri):
|
||||
if PYVER >=3:
|
||||
if PYVER >= 3:
|
||||
return urllib.parse.unquote(uri)
|
||||
else:
|
||||
return urllib.unquote(uri)
|
||||
|
||||
|
||||
|
||||
def quote(uri, safe=None):
|
||||
if PYVER >=3:
|
||||
if PYVER >= 3:
|
||||
if safe:
|
||||
return urllib.parse.quote(uri,safe=safe)
|
||||
return urllib.parse.quote(uri, safe=safe)
|
||||
else:
|
||||
return urllib.parse.quote(uri)
|
||||
else:
|
||||
@@ -140,34 +162,42 @@ def quote(uri, safe=None):
|
||||
return urllib.quote(uri, safe=safe)
|
||||
else:
|
||||
return urllib.quote(uri)
|
||||
|
||||
|
||||
|
||||
def quote_plus(uri):
|
||||
if PYVER >=3:
|
||||
if PYVER >= 3:
|
||||
return urllib.parse.quote_plus(uri)
|
||||
else:
|
||||
return urllib.quote_plus(uri)
|
||||
|
||||
|
||||
def is_rb3(*args):
|
||||
if hasattr(RB.Shell.props, 'ui_manager'):
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
|
||||
class Menu(object):
|
||||
return True
|
||||
|
||||
|
||||
class Menu(GObject.Object):
|
||||
'''
|
||||
Menu object used to create window popup menus
|
||||
'''
|
||||
__gsignals__ = {
|
||||
'pre-popup': (GObject.SIGNAL_RUN_LAST, None, ())
|
||||
}
|
||||
|
||||
def __init__(self, plugin, shell):
|
||||
'''
|
||||
Initializes the menu.
|
||||
'''
|
||||
super(Menu, self).__init__()
|
||||
self.plugin = plugin
|
||||
self.shell = shell
|
||||
self._unique_num = 0
|
||||
|
||||
|
||||
self._rbmenu_items = {}
|
||||
self._rbmenu_objects = {}
|
||||
|
||||
|
||||
def add_menu_item(self, menubar, section_name, action):
|
||||
'''
|
||||
add a new menu item to the popup
|
||||
@@ -186,7 +216,7 @@ class Menu(object):
|
||||
:param action: `Action` to associate with the menu item
|
||||
'''
|
||||
label = action.label
|
||||
|
||||
|
||||
if is_rb3(self.shell):
|
||||
app = self.shell.props.application
|
||||
item = Gio.MenuItem()
|
||||
@@ -196,14 +226,14 @@ class Menu(object):
|
||||
if not section_name in self._rbmenu_items:
|
||||
self._rbmenu_items[section_name] = []
|
||||
self._rbmenu_items[section_name].append(label)
|
||||
|
||||
|
||||
app.add_plugin_menu_item(section_name, label, item)
|
||||
else:
|
||||
item = Gtk.MenuItem(label=label)
|
||||
action.associate_menuitem(item)
|
||||
self._rbmenu_items[label] = item
|
||||
bar = self.get_menu_object(menubar)
|
||||
|
||||
|
||||
if position == -1:
|
||||
bar.append(item)
|
||||
else:
|
||||
@@ -240,15 +270,15 @@ class Menu(object):
|
||||
if is_rb3(self.shell):
|
||||
if not section_name in self._rbmenu_items:
|
||||
return
|
||||
|
||||
|
||||
app = self.shell.props.application
|
||||
|
||||
|
||||
for menu_item in self._rbmenu_items[section_name]:
|
||||
app.remove_plugin_menu_item(section_name, menu_item)
|
||||
|
||||
if self._rbmenu_items[section_name]:
|
||||
del self._rbmenu_items[section_name][:]
|
||||
|
||||
|
||||
else:
|
||||
|
||||
if not self._rbmenu_items:
|
||||
@@ -262,8 +292,8 @@ class Menu(object):
|
||||
|
||||
bar.show_all()
|
||||
uim.ensure_update()
|
||||
|
||||
def load_from_file(self, rb2_ui_filename, rb3_ui_filename ):
|
||||
|
||||
def load_from_file(self, rb2_ui_filename, rb3_ui_filename):
|
||||
'''
|
||||
utility function to load the menu structure
|
||||
:param rb2_ui_filename: `str` RB2.98 and below UI file
|
||||
@@ -272,21 +302,22 @@ class Menu(object):
|
||||
self.builder = Gtk.Builder()
|
||||
try:
|
||||
from coverart_browser_prefs import CoverLocale
|
||||
|
||||
cl = CoverLocale()
|
||||
|
||||
|
||||
self.builder.set_translation_domain(cl.Locale.LOCALE_DOMAIN)
|
||||
except:
|
||||
pass
|
||||
|
||||
|
||||
if is_rb3(self.shell):
|
||||
ui_filename = rb3_ui_filename
|
||||
else:
|
||||
ui_filename = rb2_ui_filename
|
||||
|
||||
self.ui_filename = ui_filename
|
||||
|
||||
|
||||
self.builder.add_from_file(rb.find_plugin_file(self.plugin,
|
||||
ui_filename))
|
||||
ui_filename))
|
||||
|
||||
def _connect_rb3_signals(self, signals):
|
||||
def _menu_connect(action_name, func):
|
||||
@@ -294,29 +325,29 @@ class Menu(object):
|
||||
action.connect('activate', func)
|
||||
action.set_enabled(True)
|
||||
self.shell.props.window.add_action(action)
|
||||
|
||||
for key,value in signals.items():
|
||||
_menu_connect( key, value)
|
||||
|
||||
|
||||
for key, value in signals.items():
|
||||
_menu_connect(key, value)
|
||||
|
||||
def _connect_rb2_signals(self, signals):
|
||||
def _menu_connect(menu_item_name, func):
|
||||
menu_item = self.get_menu_object(menu_item_name)
|
||||
menu_item.connect('activate', func)
|
||||
|
||||
for key,value in signals.items():
|
||||
_menu_connect( key, value)
|
||||
|
||||
|
||||
for key, value in signals.items():
|
||||
_menu_connect(key, value)
|
||||
|
||||
def connect_signals(self, signals):
|
||||
'''
|
||||
connect all signal handlers with their menuitem counterparts
|
||||
:param signals: `dict` key is the name of the menuitem
|
||||
and value is the function callback when the menu is activated
|
||||
'''
|
||||
'''
|
||||
if is_rb3(self.shell):
|
||||
self._connect_rb3_signals(signals)
|
||||
else:
|
||||
self._connect_rb2_signals(signals)
|
||||
|
||||
|
||||
def get_gtkmenu(self, source, popup_name):
|
||||
'''
|
||||
utility function to obtain the GtkMenu from the menu UI file
|
||||
@@ -325,7 +356,7 @@ class Menu(object):
|
||||
if popup_name in self._rbmenu_objects:
|
||||
return self._rbmenu_objects[popup_name]
|
||||
item = self.builder.get_object(popup_name)
|
||||
|
||||
|
||||
if is_rb3(self.shell):
|
||||
app = self.shell.props.application
|
||||
app.link_shared_menus(item)
|
||||
@@ -333,11 +364,11 @@ class Menu(object):
|
||||
popup_menu.attach_to_widget(source, None)
|
||||
else:
|
||||
popup_menu = item
|
||||
|
||||
|
||||
self._rbmenu_objects[popup_name] = popup_menu
|
||||
|
||||
|
||||
return popup_menu
|
||||
|
||||
|
||||
def get_menu_object(self, menu_name_or_link):
|
||||
'''
|
||||
utility function returns the GtkMenuItem/Gio.MenuItem
|
||||
@@ -354,9 +385,9 @@ class Menu(object):
|
||||
popup_menu = app.get_plugin_menu(menu_name_or_link)
|
||||
else:
|
||||
popup_menu = item
|
||||
print (menu_name_or_link)
|
||||
print(menu_name_or_link)
|
||||
self._rbmenu_objects[menu_name_or_link] = popup_menu
|
||||
|
||||
|
||||
return popup_menu
|
||||
|
||||
def set_sensitive(self, menu_or_action_item, enable):
|
||||
@@ -366,23 +397,32 @@ class Menu(object):
|
||||
that is to be enabled/disabled
|
||||
:param enable: `bool` value to enable/disable
|
||||
'''
|
||||
|
||||
|
||||
if is_rb3(self.shell):
|
||||
item = self.shell.props.window.lookup_action(menu_or_action_item)
|
||||
item.set_enabled(enable)
|
||||
else:
|
||||
item = self.get_menu_object(menu_or_action_item)
|
||||
item.set_sensitive(enable)
|
||||
|
||||
|
||||
def popup(self, source, menu_name, button, time):
|
||||
'''
|
||||
utility function to show the popup menu
|
||||
'''
|
||||
self.emit('pre-popup')
|
||||
menu = self.get_gtkmenu(source, menu_name)
|
||||
menu.popup(None, None, None, None, button, time)
|
||||
|
||||
|
||||
class ActionGroup(object):
|
||||
'''
|
||||
container for all Actions used to associate with menu items
|
||||
'''
|
||||
|
||||
# action_state
|
||||
STANDARD=0
|
||||
TOGGLE=1
|
||||
|
||||
STANDARD = 0
|
||||
TOGGLE = 1
|
||||
|
||||
def __init__(self, shell, group_name):
|
||||
'''
|
||||
constructor
|
||||
@@ -391,12 +431,12 @@ class ActionGroup(object):
|
||||
'''
|
||||
self.group_name = group_name
|
||||
self.shell = shell
|
||||
|
||||
|
||||
self._actions = {}
|
||||
|
||||
|
||||
if is_rb3(self.shell):
|
||||
self.actiongroup = Gio.SimpleActionGroup()
|
||||
else:
|
||||
else:
|
||||
self.actiongroup = Gtk.ActionGroup(group_name)
|
||||
uim = self.shell.props.ui_manager
|
||||
uim.insert_action_group(self.actiongroup)
|
||||
@@ -404,14 +444,14 @@ class ActionGroup(object):
|
||||
@property
|
||||
def name(self):
|
||||
return self.group_name
|
||||
|
||||
|
||||
def remove_actions(self):
|
||||
'''
|
||||
utility function to remove all actions associated with the ActionGroup
|
||||
'''
|
||||
for action in self.actiongroup.list_actions():
|
||||
self.actiongroup.remove_action(action)
|
||||
|
||||
|
||||
def get_action(self, action_name):
|
||||
'''
|
||||
utility function to obtain the Action from the ActionGroup
|
||||
@@ -434,8 +474,8 @@ class ActionGroup(object):
|
||||
'''
|
||||
args['accel'] = accel
|
||||
return self.add_action(func, action_name, **args)
|
||||
|
||||
def add_action(self, func, action_name, **args ):
|
||||
|
||||
def add_action(self, func, action_name, **args):
|
||||
'''
|
||||
Creates an Action and adds it to the ActionGroup
|
||||
|
||||
@@ -452,21 +492,21 @@ class ActionGroup(object):
|
||||
if 'label' in args:
|
||||
label = args['label']
|
||||
else:
|
||||
label=action_name
|
||||
label = action_name
|
||||
|
||||
if 'accel' in args:
|
||||
accel = args['accel']
|
||||
else:
|
||||
accel = None
|
||||
|
||||
state = ActionGroup.STANDARD
|
||||
|
||||
state = ActionGroup.STANDARD
|
||||
if 'action_state' in args:
|
||||
state = args['action_state']
|
||||
|
||||
|
||||
if is_rb3(self.shell):
|
||||
if state == ActionGroup.TOGGLE:
|
||||
action = Gio.SimpleAction.new_stateful(action_name, None,
|
||||
GLib.Variant('b', False))
|
||||
GLib.Variant('b', False))
|
||||
else:
|
||||
action = Gio.SimpleAction.new(action_name, None)
|
||||
|
||||
@@ -476,7 +516,7 @@ class ActionGroup(object):
|
||||
action_type = 'app'
|
||||
|
||||
app = Gio.Application.get_default()
|
||||
|
||||
|
||||
if action_type == 'app':
|
||||
app.add_action(action)
|
||||
else:
|
||||
@@ -484,56 +524,58 @@ class ActionGroup(object):
|
||||
self.actiongroup.add_action(action)
|
||||
|
||||
if accel:
|
||||
app.add_accelerator(accel, action_type+"."+action_name, None)
|
||||
app.add_accelerator(accel, action_type + "." + action_name, None)
|
||||
else:
|
||||
if 'stock_id' in args:
|
||||
stock_id = args['stock_id']
|
||||
else:
|
||||
stock_id = Gtk.STOCK_CLEAR
|
||||
|
||||
|
||||
if state == ActionGroup.TOGGLE:
|
||||
action = Gtk.ToggleAction(label=label,
|
||||
name=action_name,
|
||||
tooltip='', stock_id=stock_id)
|
||||
name=action_name,
|
||||
tooltip='', stock_id=stock_id)
|
||||
else:
|
||||
action = Gtk.Action(label=label,
|
||||
name=action_name,
|
||||
tooltip='', stock_id=stock_id)
|
||||
|
||||
name=action_name,
|
||||
tooltip='', stock_id=stock_id)
|
||||
|
||||
if accel:
|
||||
self.actiongroup.add_action_with_accel(action, accel)
|
||||
else:
|
||||
self.actiongroup.add_action(action)
|
||||
|
||||
|
||||
act = Action(self.shell, action)
|
||||
act.connect('activate', func, args)
|
||||
|
||||
act.label = label
|
||||
act.accel = accel
|
||||
|
||||
|
||||
self._actions[action_name] = act
|
||||
|
||||
|
||||
return act
|
||||
|
||||
|
||||
class ApplicationShell(object):
|
||||
'''
|
||||
Unique class that mirrors RB.Application & RB.Shell menu functionality
|
||||
'''
|
||||
# storage for the instance reference
|
||||
__instance = None
|
||||
|
||||
|
||||
class __impl:
|
||||
""" Implementation of the singleton interface """
|
||||
|
||||
def __init__(self, shell):
|
||||
self.shell = shell
|
||||
|
||||
|
||||
if is_rb3(self.shell):
|
||||
self._uids = {}
|
||||
else:
|
||||
self._uids = []
|
||||
|
||||
|
||||
self._action_groups = {}
|
||||
|
||||
|
||||
def insert_action_group(self, action_group):
|
||||
'''
|
||||
Adds an ActionGroup to the ApplicationShell
|
||||
@@ -541,7 +583,7 @@ class ApplicationShell(object):
|
||||
:param action_group: `ActionGroup` to add
|
||||
'''
|
||||
self._action_groups[action_group.name] = action_group
|
||||
|
||||
|
||||
def lookup_action(self, action_group_name, action_name, action_type='app'):
|
||||
'''
|
||||
looks up (finds) an action created by another plugin. If found returns
|
||||
@@ -551,7 +593,7 @@ class ApplicationShell(object):
|
||||
:param action_name: `str` unique name for the action to look for
|
||||
:param action_type: `str` RB2.99+ action type ("win" or "app")
|
||||
'''
|
||||
|
||||
|
||||
if is_rb3(self.shell):
|
||||
if action_type == "app":
|
||||
action = self.shell.props.application.lookup_action(action_name)
|
||||
@@ -569,7 +611,7 @@ class ApplicationShell(object):
|
||||
action = None
|
||||
if actiongroup:
|
||||
action = actiongroup.get_action(action_name)
|
||||
|
||||
|
||||
if action:
|
||||
return Action(self.shell, action)
|
||||
else:
|
||||
@@ -598,24 +640,24 @@ class ApplicationShell(object):
|
||||
for elem in root.findall(".//menuitem"):
|
||||
action_name = elem.attrib['action']
|
||||
item_name = elem.attrib['name']
|
||||
|
||||
|
||||
group = self._action_groups[group_name]
|
||||
act = group.get_action(action_name)
|
||||
|
||||
|
||||
item = Gio.MenuItem()
|
||||
item.set_detailed_action('app.' + action_name)
|
||||
item.set_label(act.label)
|
||||
item.set_attribute_value("accel", GLib.Variant("s", act.accel))
|
||||
app = Gio.Application.get_default()
|
||||
index = menu+action_name
|
||||
app.add_plugin_menu_item(menu,
|
||||
index, item)
|
||||
index = menu + action_name
|
||||
app.add_plugin_menu_item(menu,
|
||||
index, item)
|
||||
self._uids[index] = menu
|
||||
else:
|
||||
uim = self.shell.props.ui_manager
|
||||
self._uids.append(uim.add_ui_from_string(ui_string))
|
||||
uim.ensure_update()
|
||||
|
||||
|
||||
def add_browser_menuitems(self, ui_string, group_name):
|
||||
'''
|
||||
utility function to add popup menu items to existing browser popups
|
||||
@@ -635,19 +677,19 @@ class ApplicationShell(object):
|
||||
root = ET.fromstring(ui_string)
|
||||
for elem in root.findall("./popup"):
|
||||
popup_name = elem.attrib['name']
|
||||
|
||||
|
||||
menuelem = elem.find('.//menuitem')
|
||||
action_name = menuelem.attrib['action']
|
||||
item_name = menuelem.attrib['name']
|
||||
|
||||
|
||||
group = self._action_groups[group_name]
|
||||
act = group.get_action(action_name)
|
||||
|
||||
|
||||
item = Gio.MenuItem()
|
||||
item.set_detailed_action('win.' + action_name)
|
||||
item.set_label(act.label)
|
||||
app = Gio.Application.get_default()
|
||||
|
||||
|
||||
if popup_name == 'QueuePlaylistViewPopup':
|
||||
plugin_type = 'queue-popup'
|
||||
elif popup_name == 'BrowserSourceViewPopup':
|
||||
@@ -657,11 +699,11 @@ class ApplicationShell(object):
|
||||
elif popup_name == 'PodcastViewPopup':
|
||||
plugin_type = 'podcast-episode-popup'
|
||||
else:
|
||||
print ("unknown type %s" % plugin_type)
|
||||
|
||||
index = plugin_type+action_name
|
||||
print("unknown type %s" % plugin_type)
|
||||
|
||||
index = plugin_type + action_name
|
||||
app.add_plugin_menu_item(plugin_type, index, item)
|
||||
self._uids[index]=plugin_type
|
||||
self._uids[index] = plugin_type
|
||||
else:
|
||||
uim = self.shell.props.ui_manager
|
||||
self._uids.append(uim.add_ui_from_string(ui_string))
|
||||
@@ -673,9 +715,8 @@ class ApplicationShell(object):
|
||||
'''
|
||||
if is_rb3(self.shell):
|
||||
for uid in self._uids:
|
||||
|
||||
Gio.Application.get_default().remove_plugin_menu_item(self._uids[uid],
|
||||
uid)
|
||||
Gio.Application.get_default().remove_plugin_menu_item(self._uids[uid],
|
||||
uid)
|
||||
else:
|
||||
uim = self.shell.props.ui_manager
|
||||
for uid in self._uids:
|
||||
@@ -700,11 +741,12 @@ class ApplicationShell(object):
|
||||
""" Delegate access to implementation """
|
||||
return setattr(self.__instance, attr, value)
|
||||
|
||||
|
||||
class Action(object):
|
||||
'''
|
||||
class that wraps around either a Gio.Action or a Gtk.Action
|
||||
'''
|
||||
|
||||
|
||||
def __init__(self, shell, action):
|
||||
'''
|
||||
constructor.
|
||||
@@ -714,19 +756,19 @@ class Action(object):
|
||||
'''
|
||||
self.shell = shell
|
||||
self.action = action
|
||||
|
||||
|
||||
self._label = ''
|
||||
self._accel = ''
|
||||
self._current_state = False
|
||||
self._do_update_state = True
|
||||
|
||||
|
||||
def connect(self, address, func, args):
|
||||
self._connect_func = func
|
||||
self._connect_args = args
|
||||
|
||||
|
||||
if address == 'activate':
|
||||
func = self._activate
|
||||
|
||||
|
||||
if is_rb3(self.shell):
|
||||
self.action.connect(address, func, args)
|
||||
else:
|
||||
@@ -736,9 +778,9 @@ class Action(object):
|
||||
if self._do_update_state:
|
||||
self._current_state = not self._current_state
|
||||
self.set_state(self._current_state)
|
||||
|
||||
|
||||
self._connect_func(action, None, self._connect_args)
|
||||
|
||||
|
||||
@property
|
||||
def label(self):
|
||||
'''
|
||||
@@ -751,21 +793,21 @@ class Action(object):
|
||||
return self.action.get_label()
|
||||
else:
|
||||
return self._label
|
||||
|
||||
|
||||
@label.setter
|
||||
def label(self, new_label):
|
||||
if not is_rb3(self.shell):
|
||||
self.action.set_label(new_label)
|
||||
|
||||
|
||||
self._label = new_label
|
||||
|
||||
|
||||
@property
|
||||
def accel(self):
|
||||
'''
|
||||
get the accelerator associated with the Action
|
||||
'''
|
||||
return self._accel
|
||||
|
||||
|
||||
@accel.setter
|
||||
def accel(self, new_accelerator):
|
||||
if new_accelerator:
|
||||
@@ -783,7 +825,7 @@ class Action(object):
|
||||
return self.action.get_enabled()
|
||||
else:
|
||||
return self.action.get_sensitive()
|
||||
|
||||
|
||||
def set_state(self, value):
|
||||
'''
|
||||
set the state of a stateful action - this is applicable only
|
||||
@@ -800,7 +842,7 @@ class Action(object):
|
||||
self.action.activate(None)
|
||||
else:
|
||||
self.action.activate()
|
||||
|
||||
|
||||
def set_active(self, value):
|
||||
'''
|
||||
activate or deactivate a stateful action signal
|
||||
@@ -809,7 +851,7 @@ class Action(object):
|
||||
|
||||
:param value: `boolean` state value
|
||||
'''
|
||||
|
||||
|
||||
if is_rb3(self.shell):
|
||||
self.action.change_state(GLib.Variant('b', value))
|
||||
self._current_state = value
|
||||
@@ -818,7 +860,7 @@ class Action(object):
|
||||
self._do_update_state = True
|
||||
else:
|
||||
self.action.set_active(value)
|
||||
|
||||
|
||||
def get_active(self):
|
||||
'''
|
||||
get the state of the action
|
||||
@@ -838,7 +880,7 @@ class Action(object):
|
||||
|
||||
'''
|
||||
if is_rb3(self.shell):
|
||||
menuitem.set_detailed_action('win.'+self.action.get_name())
|
||||
menuitem.set_detailed_action('win.' + self.action.get_name())
|
||||
else:
|
||||
menuitem.set_related_action(self.action)
|
||||
|
||||
|
||||
@@ -18,13 +18,15 @@
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
import rb
|
||||
from gi.repository import Gtk
|
||||
from mako.template import Template
|
||||
|
||||
import rb
|
||||
import coverart_rb3compat as rb3compat
|
||||
from coverart_album import Album
|
||||
from coverart_browser_prefs import webkit_support
|
||||
|
||||
|
||||
class CoverSearchPane(Gtk.Box):
|
||||
'''
|
||||
This UI represents a pane where different covers can be presented
|
||||
@@ -32,6 +34,7 @@ class CoverSearchPane(Gtk.Box):
|
||||
customize the default search and select covers from the pane and use them
|
||||
as the covers (either with a double click or dragging them).
|
||||
'''
|
||||
|
||||
def __init__(self, plugin, selection_color):
|
||||
'''
|
||||
Initializes the pane, loading it's html templates and it's ui.
|
||||
@@ -54,34 +57,35 @@ class CoverSearchPane(Gtk.Box):
|
||||
'''
|
||||
Loads the templates and stylesheets to be used by the pane.
|
||||
'''
|
||||
# input_encoding='utf-8',
|
||||
# input_encoding='utf-8',
|
||||
|
||||
path = rb.find_plugin_file(plugin,
|
||||
'tmpl/albumartsearch-tmpl.html')
|
||||
'tmpl/albumartsearch-tmpl.html')
|
||||
self.template = Template(filename=path,
|
||||
default_filters=['decode.utf8'],
|
||||
module_directory='/tmp/',
|
||||
encoding_errors='replace')
|
||||
default_filters=['decode.utf8'],
|
||||
module_directory='/tmp/',
|
||||
encoding_errors='replace')
|
||||
path = rb.find_plugin_file(plugin,
|
||||
'tmpl/albumartsearchempty-tmpl.html')
|
||||
'tmpl/albumartsearchempty-tmpl.html')
|
||||
self.empty_template = Template(filename=path,
|
||||
default_filters=['decode.utf8'],
|
||||
module_directory='/tmp/',
|
||||
encoding_errors='replace')
|
||||
default_filters=['decode.utf8'],
|
||||
module_directory='/tmp/',
|
||||
encoding_errors='replace')
|
||||
path = rb.find_plugin_file(plugin,
|
||||
'tmpl/artistartsearch-tmpl.html')
|
||||
'tmpl/artistartsearch-tmpl.html')
|
||||
self.artist_template = Template(filename=path,
|
||||
default_filters=['decode.utf8'],
|
||||
module_directory='/tmp/',
|
||||
encoding_errors='replace')
|
||||
default_filters=['decode.utf8'],
|
||||
module_directory='/tmp/',
|
||||
encoding_errors='replace')
|
||||
self.styles = rb.find_plugin_file(plugin, 'tmpl/main.css')
|
||||
|
||||
def init_gui(self):
|
||||
'''
|
||||
Initializes the pane ui.
|
||||
'''
|
||||
#---- set up webkit pane -----#
|
||||
# ---- set up webkit pane -----#
|
||||
from gi.repository import WebKit
|
||||
|
||||
self.webview = WebKit.WebView()
|
||||
settings = self.webview.get_settings()
|
||||
settings.set_property('enable-default-context-menu', False)
|
||||
@@ -102,13 +106,13 @@ class CoverSearchPane(Gtk.Box):
|
||||
of the album or artist passed.
|
||||
|
||||
'''
|
||||
print ("coverart-search do_search")
|
||||
print("coverart-search do_search")
|
||||
if coverobject is self.current_searchobject:
|
||||
return
|
||||
|
||||
self.current_searchobject = coverobject
|
||||
self.callback = callback
|
||||
|
||||
|
||||
if isinstance(coverobject, Album):
|
||||
artist = coverobject.artist
|
||||
album_name = coverobject.name
|
||||
@@ -119,9 +123,9 @@ class CoverSearchPane(Gtk.Box):
|
||||
if artist.upper() == "UNKNOWN":
|
||||
artist = ""
|
||||
|
||||
if not(album_name == "" and artist == ""):
|
||||
if not (album_name == "" and artist == ""):
|
||||
artist = rb3compat.unicodestr(artist.replace('&', '&'),
|
||||
'utf-8')
|
||||
'utf-8')
|
||||
album_name = rb3compat.unicodestr(album_name.replace('&', '&'), 'utf-8')
|
||||
self.render_album_art_search(artist, album_name)
|
||||
else:
|
||||
@@ -130,9 +134,9 @@ class CoverSearchPane(Gtk.Box):
|
||||
if artist_name.upper() == "UNKNOWN":
|
||||
artist_name = ""
|
||||
|
||||
if not(artist_name == ""):
|
||||
if not (artist_name == ""):
|
||||
artist = rb3compat.unicodestr(artist_name.replace('&', '&'),
|
||||
'utf-8')
|
||||
'utf-8')
|
||||
self.render_artist_art_search(artist)
|
||||
|
||||
|
||||
@@ -141,23 +145,23 @@ class CoverSearchPane(Gtk.Box):
|
||||
Renders the template on the webview.
|
||||
'''
|
||||
temp_file = self.template.render(artist=artist, album=album_name,
|
||||
stylesheet=self.styles, selection_color=self.selection_color)
|
||||
stylesheet=self.styles, selection_color=self.selection_color)
|
||||
|
||||
print ("here")
|
||||
print("here")
|
||||
self.webview.load_string(temp_file, 'text/html', 'utf-8',
|
||||
self.basepath)
|
||||
self.basepath)
|
||||
|
||||
def render_artist_art_search(self, artist):
|
||||
'''
|
||||
Renders the template on the webview.
|
||||
'''
|
||||
temp_file = self.artist_template.render(artist=artist,
|
||||
stylesheet=self.styles, selection_color=self.selection_color)
|
||||
stylesheet=self.styles, selection_color=self.selection_color)
|
||||
|
||||
print ("here")
|
||||
print("here")
|
||||
self.webview.load_string(temp_file, 'text/html', 'utf-8',
|
||||
self.basepath)
|
||||
|
||||
self.basepath)
|
||||
|
||||
def clear(self):
|
||||
'''
|
||||
Clears the webview of any specific info/covers.
|
||||
@@ -166,7 +170,7 @@ class CoverSearchPane(Gtk.Box):
|
||||
temp_file = self.empty_template.render(stylesheet=self.styles)
|
||||
|
||||
self.webview.load_string(temp_file, 'text/html', 'utf-8',
|
||||
self.basepath)
|
||||
self.basepath)
|
||||
|
||||
def set_cover(self, webview, arg):
|
||||
'''
|
||||
@@ -179,6 +183,6 @@ class CoverSearchPane(Gtk.Box):
|
||||
|
||||
print(title)
|
||||
if title:
|
||||
#self.album_manager.cover_man.update_cover(self.current_searchobject,
|
||||
# self.album_manager.cover_man.update_cover(self.current_searchobject,
|
||||
# uri=title)
|
||||
self.callback(self.current_searchobject, uri=title)
|
||||
|
||||
@@ -36,9 +36,9 @@ from coverart_controllers import ArtistSortOrderToggleController
|
||||
from coverart_controllers import AlbumSearchEntryController
|
||||
from coverart_widgets import SearchEntry
|
||||
from coverart_browser_prefs import webkit_support
|
||||
|
||||
import rb
|
||||
|
||||
|
||||
class Toolbar(GObject.Object):
|
||||
def __init__(self, plugin, mainbox, controllers):
|
||||
super(Toolbar, self).__init__()
|
||||
@@ -52,7 +52,7 @@ class Toolbar(GObject.Object):
|
||||
# create the toolbar
|
||||
builder = Gtk.Builder()
|
||||
builder.set_translation_domain(cl.Locale.LOCALE_DOMAIN)
|
||||
|
||||
print (ui_file)
|
||||
builder.add_from_file(ui_file)
|
||||
|
||||
# assign the controllers to the buttons
|
||||
@@ -61,7 +61,7 @@ class Toolbar(GObject.Object):
|
||||
builder.get_object(button).controller = controller
|
||||
|
||||
if not webkit_support():
|
||||
#button = builder.get_object('flowview_button')
|
||||
# button = builder.get_object('flowview_button')
|
||||
#button.set_visible(False)
|
||||
separator = builder.get_object('properties_separator')
|
||||
if separator:
|
||||
@@ -81,18 +81,22 @@ class Toolbar(GObject.Object):
|
||||
search_entry.controller = controllers['search']
|
||||
|
||||
Theme(self.plugin).connect('theme_changed', self._theme_changed,
|
||||
controllers)
|
||||
controllers)
|
||||
|
||||
self.builder = builder.get_object('toolbar')
|
||||
|
||||
#now theme the toolbar including child objects such as the button popups
|
||||
|
||||
# now theme the toolbar including child objects such as the button popups
|
||||
style_context = self.builder.get_style_context()
|
||||
style_context.add_class(Gtk.STYLE_CLASS_TOOLBAR)
|
||||
|
||||
view_button = builder.get_object(ToolbarObject.VIEW)
|
||||
view_button.set_visible(not self.plugin.using_headerbar)
|
||||
|
||||
def _theme_changed(self, toolbar, controllers):
|
||||
for controller in list(controllers.values()):
|
||||
controller.update_images(True)
|
||||
|
||||
|
||||
class TopToolbar(Toolbar):
|
||||
ui = 'ui/coverart_topbar.ui'
|
||||
name = 'main'
|
||||
@@ -115,11 +119,11 @@ class LeftToolbar(Toolbar):
|
||||
if self.builder.get_visible():
|
||||
self.builder.hide()
|
||||
self.plugin.shell.remove_widget(self.builder,
|
||||
RB.ShellUILocation.SIDEBAR)
|
||||
RB.ShellUILocation.SIDEBAR)
|
||||
|
||||
def show(self):
|
||||
self.plugin.shell.add_widget(self.builder,
|
||||
RB.ShellUILocation.SIDEBAR, expand=False, fill=False)
|
||||
RB.ShellUILocation.SIDEBAR, expand=False, fill=False)
|
||||
self.builder.show()
|
||||
|
||||
|
||||
@@ -131,32 +135,33 @@ class RightToolbar(Toolbar):
|
||||
if self.builder.get_visible():
|
||||
self.builder.hide()
|
||||
self.plugin.shell.remove_widget(self.builder,
|
||||
RB.ShellUILocation.RIGHT_SIDEBAR)
|
||||
RB.ShellUILocation.RIGHT_SIDEBAR)
|
||||
|
||||
def show(self):
|
||||
self.plugin.shell.add_widget(self.builder,
|
||||
RB.ShellUILocation.RIGHT_SIDEBAR, expand=False, fill=False)
|
||||
RB.ShellUILocation.RIGHT_SIDEBAR, expand=False, fill=False)
|
||||
self.builder.show()
|
||||
|
||||
|
||||
class ToolbarObject(object):
|
||||
#properties
|
||||
|
||||
PROPERTIES='properties_button'
|
||||
SORT_BY='sort_by'
|
||||
SORT_ORDER='sort_order'
|
||||
SORT_BY_ARTIST='sort_by_artist'
|
||||
SORT_ORDER_ARTIST='sort_order_artist'
|
||||
GENRE='genre_button'
|
||||
PLAYLIST='playlist_button'
|
||||
DECADE='decade_button'
|
||||
SEARCH='search'
|
||||
VIEW='view_button'
|
||||
|
||||
# properties
|
||||
|
||||
PROPERTIES = 'properties_button'
|
||||
SORT_BY = 'sort_by'
|
||||
SORT_ORDER = 'sort_order'
|
||||
SORT_BY_ARTIST = 'sort_by_artist'
|
||||
SORT_ORDER_ARTIST = 'sort_order_artist'
|
||||
GENRE = 'genre_button'
|
||||
PLAYLIST = 'playlist_button'
|
||||
DECADE = 'decade_button'
|
||||
SEARCH = 'search'
|
||||
VIEW = 'view_button'
|
||||
|
||||
|
||||
class ToolbarManager(GObject.Object):
|
||||
# properties
|
||||
toolbar_pos = GObject.property(type=str, default=TopToolbar.name)
|
||||
|
||||
|
||||
def __init__(self, plugin, main_box, viewmgr):
|
||||
super(ToolbarManager, self).__init__()
|
||||
self.plugin = plugin
|
||||
@@ -166,19 +171,36 @@ class ToolbarManager(GObject.Object):
|
||||
# initialize toolbars
|
||||
self._bars = {}
|
||||
self._bars[TopToolbar.name] = TopToolbar(plugin, main_box,
|
||||
controllers)
|
||||
controllers)
|
||||
self._bars[LeftToolbar.name] = LeftToolbar(plugin, main_box,
|
||||
controllers)
|
||||
controllers)
|
||||
self._bars[RightToolbar.name] = RightToolbar(plugin, main_box,
|
||||
controllers)
|
||||
controllers)
|
||||
|
||||
self.last_toolbar_pos = None
|
||||
|
||||
# if the alternative-toolbar is loaded then lets connect to the toolbar-visibility signal
|
||||
# to control our sources toolbar visibility
|
||||
|
||||
if self.plugin.using_alternative_toolbar:
|
||||
if self.plugin.using_headerbar:
|
||||
self.toolbar_pos = TopToolbar.name # we dont allow other toolbar position with headerbar
|
||||
self._on_notify_toolbar_pos()
|
||||
|
||||
self.plugin.shell.alternative_toolbar.connect('toolbar-visibility', self._visibility)
|
||||
|
||||
# connect signal and properties
|
||||
self._connect_signals()
|
||||
self._connect_properties()
|
||||
|
||||
|
||||
self._controllers = controllers
|
||||
|
||||
|
||||
def _visibility(self, altplugin, value):
|
||||
if value:
|
||||
self._bars[self.toolbar_pos].show()
|
||||
else:
|
||||
self._bars[self.toolbar_pos].hide()
|
||||
|
||||
def set_enabled(self, enabled, toolbar_object=None):
|
||||
'''
|
||||
enable or disable the toolbar object.
|
||||
@@ -193,20 +215,22 @@ class ToolbarManager(GObject.Object):
|
||||
else:
|
||||
for controller in self._controllers:
|
||||
self._controllers[controller].enabled = enabled
|
||||
|
||||
|
||||
def _connect_signals(self):
|
||||
self.connect('notify::toolbar-pos', self._on_notify_toolbar_pos)
|
||||
if not self.plugin.using_headerbar:
|
||||
self.connect('notify::toolbar-pos', self._on_notify_toolbar_pos)
|
||||
|
||||
def _connect_properties(self):
|
||||
gs = GSetting()
|
||||
setting = gs.get_setting(gs.Path.PLUGIN)
|
||||
setting.bind(gs.PluginKey.TOOLBAR_POS, self, 'toolbar_pos',
|
||||
Gio.SettingsBindFlags.GET)
|
||||
|
||||
if not self.plugin.using_headerbar:
|
||||
gs = GSetting()
|
||||
setting = gs.get_setting(gs.Path.PLUGIN)
|
||||
setting.bind(gs.PluginKey.TOOLBAR_POS, self, 'toolbar_pos',
|
||||
Gio.SettingsBindFlags.GET)
|
||||
|
||||
def _create_controllers(self, plugin, viewmgr):
|
||||
controllers = {}
|
||||
|
||||
album_model=viewmgr.source.album_manager.model
|
||||
|
||||
album_model = viewmgr.source.album_manager.model
|
||||
controllers[ToolbarObject.PROPERTIES] = \
|
||||
PropertiesMenuController(plugin, viewmgr.source)
|
||||
controllers[ToolbarObject.SORT_BY] = \
|
||||
@@ -225,7 +249,7 @@ class ToolbarManager(GObject.Object):
|
||||
DecadePopupController(plugin, album_model)
|
||||
controllers[ToolbarObject.SEARCH] = \
|
||||
AlbumSearchEntryController(album_model)
|
||||
|
||||
|
||||
controllers[ToolbarObject.VIEW] = viewmgr.controller
|
||||
|
||||
return controllers
|
||||
|
||||
@@ -15,6 +15,12 @@
|
||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
from bisect import bisect_left, bisect_right
|
||||
import collections
|
||||
import re
|
||||
import logging
|
||||
import sys
|
||||
from collections import namedtuple
|
||||
|
||||
from gi.repository import GdkPixbuf
|
||||
from gi.repository import Gdk
|
||||
from gi.repository import Gtk
|
||||
@@ -23,17 +29,14 @@ from gi.repository import RB
|
||||
from gi.repository import GObject
|
||||
from gi.repository import Gio
|
||||
import lxml.etree as ET
|
||||
|
||||
import rb
|
||||
from coverart_browser_prefs import CoverLocale
|
||||
from coverart_browser_prefs import GSetting
|
||||
import collections
|
||||
import re
|
||||
import coverart_rb3compat as rb3compat
|
||||
import logging
|
||||
import sys
|
||||
from coverart_search_providers import lastfm_connected
|
||||
from coverart_search_providers import get_search_providers
|
||||
from collections import namedtuple
|
||||
|
||||
|
||||
class FauxTb(object):
|
||||
def __init__(self, tb_frame, tb_lineno, tb_next):
|
||||
@@ -41,8 +44,10 @@ class FauxTb(object):
|
||||
self.tb_lineno = tb_lineno
|
||||
self.tb_next = tb_next
|
||||
|
||||
|
||||
def current_stack(skip=0):
|
||||
try: 1/0
|
||||
try:
|
||||
1 / 0
|
||||
except ZeroDivisionError:
|
||||
f = sys.exc_info()[2].tb_frame
|
||||
for i in range(skip + 2):
|
||||
@@ -53,6 +58,7 @@ def current_stack(skip=0):
|
||||
f = f.f_back
|
||||
return lst
|
||||
|
||||
|
||||
def extend_traceback(tb, stack):
|
||||
"""Extend traceback with stack info."""
|
||||
head = tb
|
||||
@@ -60,17 +66,20 @@ def extend_traceback(tb, stack):
|
||||
head = FauxTb(tb_frame, tb_lineno, head)
|
||||
return head
|
||||
|
||||
|
||||
def full_exc_info():
|
||||
"""Like sys.exc_info, but includes the full traceback."""
|
||||
t, v, tb = sys.exc_info()
|
||||
full_tb = extend_traceback(tb, current_stack(1))
|
||||
return t, v, full_tb
|
||||
|
||||
|
||||
def dumpstack(message):
|
||||
''' dumps the current stack - useful of debugging
|
||||
'''
|
||||
logging.error(message, exc_info=full_exc_info())
|
||||
|
||||
|
||||
def uniquify_and_sort(iterable):
|
||||
''' Removes duplicates of an iterables and returns a list of unique
|
||||
elements.
|
||||
@@ -86,6 +95,7 @@ def uniquify_and_sort(iterable):
|
||||
|
||||
GenreType = namedtuple("GenreType", ["name", "genre_type"])
|
||||
|
||||
|
||||
class NaturalString(str):
|
||||
'''
|
||||
this class implements an object that can naturally compare
|
||||
@@ -97,7 +107,7 @@ class NaturalString(str):
|
||||
super(NaturalString, self).__init__()
|
||||
convert = lambda text: int(text) if text.isdigit() else text.lower()
|
||||
alphanum_key = lambda key: [convert(c) for c in re.split('([0-9]+)',
|
||||
key)]
|
||||
key)]
|
||||
|
||||
self._string_elements = alphanum_key(string)
|
||||
|
||||
@@ -298,7 +308,6 @@ class SortedCollection(object):
|
||||
|
||||
|
||||
class ReversedSortedCollection(object):
|
||||
|
||||
def __init__(self, sorted_collection):
|
||||
self._sorted_collection = sorted_collection
|
||||
|
||||
@@ -354,7 +363,6 @@ class ReversedSortedCollection(object):
|
||||
|
||||
|
||||
class IdleCallIterator(object):
|
||||
|
||||
def __init__(self, chunk, process, after=None, error=None, finish=None):
|
||||
default = lambda *_: None
|
||||
|
||||
@@ -368,7 +376,8 @@ class IdleCallIterator(object):
|
||||
def __call__(self, iterator, **data):
|
||||
self._iter = iterator
|
||||
|
||||
Gdk.threads_add_idle(GLib.PRIORITY_DEFAULT_IDLE, self._idle_call, data)
|
||||
#Gdk.threads_add_idle(GLib.PRIORITY_DEFAULT_IDLE, self._idle_call, data)
|
||||
GLib.idle_add(self._idle_call, data)
|
||||
|
||||
def _idle_call(self, data):
|
||||
if self._stop:
|
||||
@@ -403,6 +412,7 @@ def idle_iterator(func):
|
||||
|
||||
return iter_function
|
||||
|
||||
|
||||
class Theme:
|
||||
'''
|
||||
This class manages the theme details
|
||||
@@ -421,7 +431,7 @@ class Theme:
|
||||
'''
|
||||
__gsignals__ = {
|
||||
'theme_changed': (GObject.SIGNAL_RUN_LAST, None, ())
|
||||
}
|
||||
}
|
||||
# below public variables and methods that can be called for Theme
|
||||
def __init__(self, plugin):
|
||||
'''
|
||||
@@ -453,11 +463,11 @@ class Theme:
|
||||
|
||||
def _connect_properties(self):
|
||||
self.setting.bind(self.gs.PluginKey.THEME, self,
|
||||
'theme', Gio.SettingsBindFlags.GET)
|
||||
'theme', Gio.SettingsBindFlags.GET)
|
||||
|
||||
def _connect_signals(self):
|
||||
self.connect('notify::theme', self._on_theme_changed,
|
||||
None)
|
||||
None)
|
||||
|
||||
def _on_theme_changed(self, *args):
|
||||
self.emit('theme_changed')
|
||||
@@ -480,11 +490,11 @@ class Theme:
|
||||
""" Delegate access to implementation """
|
||||
return setattr(self.__instance, attr, value)
|
||||
|
||||
class SpriteSheet(object):
|
||||
|
||||
class SpriteSheet(object):
|
||||
def __init__(self, image, icon_width, icon_height, x_spacing, y_spacing,
|
||||
x_start, y_start, across_dimension, down_dimension,
|
||||
alpha_color=None, size=None):
|
||||
x_start, y_start, across_dimension, down_dimension,
|
||||
alpha_color=None, size=None):
|
||||
# load the image
|
||||
base_image = GdkPixbuf.Pixbuf.new_from_file(image)
|
||||
|
||||
@@ -499,15 +509,15 @@ class SpriteSheet(object):
|
||||
for y in range(0, down_dimension):
|
||||
for x in range(0, across_dimension):
|
||||
sprite = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB, True,
|
||||
8, icon_width, icon_height)
|
||||
8, icon_width, icon_height)
|
||||
|
||||
base_image.copy_area(x_start + (x * delta_x),
|
||||
y_start + (y * delta_y), icon_width, icon_height,
|
||||
sprite, 0, 0)
|
||||
y_start + (y * delta_y), icon_width, icon_height,
|
||||
sprite, 0, 0)
|
||||
|
||||
if size:
|
||||
sprite = sprite.scale_simple(size[0], size[1],
|
||||
GdkPixbuf.InterpType.BILINEAR)
|
||||
GdkPixbuf.InterpType.BILINEAR)
|
||||
|
||||
self._sprites.append(sprite)
|
||||
|
||||
@@ -517,14 +527,15 @@ class SpriteSheet(object):
|
||||
def __getitem__(self, index):
|
||||
return self._sprites[index]
|
||||
|
||||
|
||||
class ConfiguredSpriteSheet(object):
|
||||
def __init__(self, plugin, sprite_name, size=None):
|
||||
popups = rb.find_plugin_file(plugin, 'img/popups.xml')
|
||||
root = ET.parse(open(popups)).getroot()
|
||||
base = 'theme/theme[@folder_name="' + Theme(plugin).current\
|
||||
+ '"]/spritesheet[@name="' + sprite_name + '"]/'
|
||||
image = rb.find_plugin_file(plugin, 'img/' + Theme(plugin).current\
|
||||
+ '/' + root.xpath(base + 'image')[0].text)
|
||||
base = 'theme/theme[@folder_name="' + Theme(plugin).current \
|
||||
+ '"]/spritesheet[@name="' + sprite_name + '"]/'
|
||||
image = rb.find_plugin_file(plugin, 'img/' + Theme(plugin).current \
|
||||
+ '/' + root.xpath(base + 'image')[0].text)
|
||||
icon_width = int(root.xpath(base + 'icon')[0].attrib['width'])
|
||||
icon_height = int(root.xpath(base + 'icon')[0].attrib['height'])
|
||||
x_spacing = int(root.xpath(base + 'spacing')[0].attrib['x'])
|
||||
@@ -536,7 +547,7 @@ class ConfiguredSpriteSheet(object):
|
||||
|
||||
try:
|
||||
alpha_color = list(map(int,
|
||||
root.xpath(base + 'alpha')[0].text.split(' ')))
|
||||
root.xpath(base + 'alpha')[0].text.split(' ')))
|
||||
except:
|
||||
alpha_color = None
|
||||
|
||||
@@ -547,7 +558,7 @@ class ConfiguredSpriteSheet(object):
|
||||
lang = cl.get_locale()
|
||||
|
||||
base = sprite_name + '/' + sprite_name + \
|
||||
'[@spritesheet="' + sprite_name + '"]'
|
||||
'[@spritesheet="' + sprite_name + '"]'
|
||||
|
||||
for elem in root.xpath(base + '[not(@xml:lang)]'):
|
||||
self.names.append(elem.text)
|
||||
@@ -557,12 +568,12 @@ class ConfiguredSpriteSheet(object):
|
||||
|
||||
if (not self.locale_names) and len(lang) > 2:
|
||||
for elem in root.xpath(base + '[@xml:lang="' + \
|
||||
lang[0:2] + '"]'):
|
||||
lang[0:2] + '"]'):
|
||||
self.locale_names[elem.text] = elem.attrib['name']
|
||||
|
||||
self._sheet = SpriteSheet(image, icon_width, icon_height, x_spacing,
|
||||
y_spacing, x_start, y_start, across_dimension, down_dimension,
|
||||
alpha_color, size)
|
||||
y_spacing, x_start, y_start, across_dimension, down_dimension,
|
||||
alpha_color, size)
|
||||
|
||||
self._genre_db = RB.ExtDB(name='cb_genre')
|
||||
|
||||
@@ -581,6 +592,7 @@ class ConfiguredSpriteSheet(object):
|
||||
def keys(self):
|
||||
return self.names
|
||||
|
||||
|
||||
class GenreConfiguredSpriteSheet(ConfiguredSpriteSheet):
|
||||
'''
|
||||
A sprite-sheet of genres. Creates a pixbuf representation of a picture
|
||||
@@ -602,7 +614,7 @@ class GenreConfiguredSpriteSheet(ConfiguredSpriteSheet):
|
||||
|
||||
def __init__(self, plugin, sprite_name, size=None):
|
||||
super(GenreConfiguredSpriteSheet, self).__init__(plugin, sprite_name,
|
||||
size)
|
||||
size)
|
||||
self.genre_alternate = {} # contains GenreType tuples
|
||||
self._alt_icons = {}
|
||||
self._sprite_name = sprite_name
|
||||
@@ -613,7 +625,8 @@ class GenreConfiguredSpriteSheet(ConfiguredSpriteSheet):
|
||||
self._parse_popups(plugin, root, self.GENRE_SYSTEM)
|
||||
|
||||
try:
|
||||
self._user_popups = RB.find_user_data_file('plugins/coverart_browser/img/usericons/popups.xml')
|
||||
# self._user_popups = RB.find_user_data_file('plugins/coverart_browser/img/usericons/popups.xml')
|
||||
self._user_popups = RB.user_cache_dir() + "/coverart_browser/usericons/popups.xml"
|
||||
root = ET.parse(open(self._user_popups)).getroot()
|
||||
self._parse_popups(plugin, root, self.GENRE_USER)
|
||||
elem = root.xpath(self._sprite_name + '/index')
|
||||
@@ -625,7 +638,7 @@ class GenreConfiguredSpriteSheet(ConfiguredSpriteSheet):
|
||||
sprite = GdkPixbuf.Pixbuf.new_from_file(icon_location)
|
||||
if self._size:
|
||||
sprite = sprite.scale_simple(self._size[0], self._size[1],
|
||||
GdkPixbuf.InterpType.BILINEAR)
|
||||
GdkPixbuf.InterpType.BILINEAR)
|
||||
|
||||
self._alt_icons[str(index)] = sprite
|
||||
self.names.append(str(index))
|
||||
@@ -653,20 +666,20 @@ class GenreConfiguredSpriteSheet(ConfiguredSpriteSheet):
|
||||
# if (not self.locale_alternate) and len(lang) > 2:
|
||||
if len(lang) > 2:
|
||||
for elem in root.xpath(base + '[@xml:lang="' + \
|
||||
lang[0:2] + '"]/alt'):
|
||||
lang[0:2] + '"]/alt'):
|
||||
self.genre_alternate[GenreType(name=elem.text, genre_type=self.GENRE_LOCALE)] = elem.attrib['genre']
|
||||
|
||||
def add_genre_icon(self, filename):
|
||||
root = ET.parse(open(self._user_popups)).getroot()
|
||||
elem = root.xpath(self._sprite_name + '/index')
|
||||
next_index = long(elem[0].text)
|
||||
next_index = int(elem[0].text)
|
||||
elem[0].text = str(next_index + 1)
|
||||
tree = ET.ElementTree(root)
|
||||
tree.write(self._user_popups, pretty_print=True, xml_declaration=True)
|
||||
|
||||
key = RB.ExtDBKey.create_storage('icon', str(next_index))
|
||||
uri = "file://" + rb3compat.pathname2url(filename)
|
||||
|
||||
|
||||
self._genre_db.store_uri(key, RB.ExtDBSourceType.USER_EXPLICIT, uri)
|
||||
|
||||
pixbuf = GdkPixbuf.Pixbuf.new_from_file(filename)
|
||||
@@ -674,7 +687,7 @@ class GenreConfiguredSpriteSheet(ConfiguredSpriteSheet):
|
||||
|
||||
if self._size:
|
||||
pixbuf = pixbuf.scale_simple(self._size[0], self._size[1],
|
||||
GdkPixbuf.InterpType.BILINEAR)
|
||||
GdkPixbuf.InterpType.BILINEAR)
|
||||
|
||||
self._alt_icons[new_genre.name] = pixbuf
|
||||
self.names.append(new_genre.name)
|
||||
@@ -730,6 +743,7 @@ class GenreConfiguredSpriteSheet(ConfiguredSpriteSheet):
|
||||
print("nothing found to amend")
|
||||
return None
|
||||
|
||||
|
||||
def get_stock_size():
|
||||
what, width, height = Gtk.icon_size_lookup(Gtk.IconSize.BUTTON)
|
||||
|
||||
@@ -741,30 +755,38 @@ def create_pixbuf_from_file_at_size(filename, width, height):
|
||||
|
||||
if pixbuf.get_width() != width or pixbuf.get_height() != height:
|
||||
pixbuf = pixbuf.scale_simple(width, height,
|
||||
GdkPixbuf.InterpType.BILINEAR)
|
||||
GdkPixbuf.InterpType.BILINEAR)
|
||||
|
||||
return pixbuf
|
||||
|
||||
|
||||
'''
|
||||
class to search through a dict without case-sensitivity nor
|
||||
unicode vs string issues
|
||||
'''
|
||||
|
||||
|
||||
class CaseInsensitiveDict(collections.Mapping):
|
||||
def __init__(self, d):
|
||||
self._d = d
|
||||
self._s = dict((RB.search_fold(k), k) for k in d)
|
||||
|
||||
def __contains__(self, k):
|
||||
return RB.search_fold(k) in self._s
|
||||
|
||||
def __len__(self):
|
||||
return len(self._s)
|
||||
|
||||
def __iter__(self):
|
||||
return iter(self._s)
|
||||
|
||||
def __getitem__(self, k):
|
||||
return self._d[self._s[RB.search_fold(k)]]
|
||||
|
||||
def actual_key_case(self, k):
|
||||
return self._s.get(RB.search_fold(k))
|
||||
|
||||
|
||||
|
||||
def check_lastfm(force_check=False):
|
||||
'''
|
||||
check validity of lastfm connection
|
||||
@@ -773,12 +795,44 @@ def check_lastfm(force_check=False):
|
||||
|
||||
Also returns True if lastFM is not in the list of search providers
|
||||
'''
|
||||
|
||||
|
||||
providers = get_search_providers()
|
||||
|
||||
print(providers)
|
||||
print(force_check)
|
||||
|
||||
if force_check or 'lastfm-search' in providers:
|
||||
return lastfm_connected()
|
||||
connected = lastfm_connected()
|
||||
print(connected)
|
||||
return connected
|
||||
elif not 'lastfm-search' in providers:
|
||||
print("not lastm-search")
|
||||
return True
|
||||
else:
|
||||
print("returning default")
|
||||
return False
|
||||
|
||||
def create_button_image_symbolic(style_context, icon_name):
|
||||
'''
|
||||
create a pixbuf for the given symbolic icon_name sized according to the stock icon size
|
||||
'''
|
||||
theme = Gtk.IconTheme()
|
||||
default = theme.get_default()
|
||||
iconinfo = default.lookup_icon(icon_name, 128, 0)
|
||||
pixbuf, symbol = iconinfo.load_symbolic_for_context(style_context)
|
||||
|
||||
width, height = get_stock_size()
|
||||
pixbuf = pixbuf.scale_simple(width, height,
|
||||
GdkPixbuf.InterpType.BILINEAR)
|
||||
|
||||
return pixbuf
|
||||
|
||||
|
||||
def create_button_image(plugin, image_filename):
|
||||
'''
|
||||
create a pixbuf for the given image_filename sized according to the stock icon size
|
||||
'''
|
||||
path = 'img/'
|
||||
|
||||
return create_pixbuf_from_file_at_size(
|
||||
rb.find_plugin_file(plugin, path + image_filename),
|
||||
*get_stock_size())
|
||||
|
||||
@@ -23,16 +23,18 @@ from gi.repository import Gdk
|
||||
from gi.repository import GLib
|
||||
from gi.repository import GObject
|
||||
from gi.repository import Gio
|
||||
|
||||
from gi.repository import Notify
|
||||
import cairo
|
||||
|
||||
from coverart_browser_prefs import GSetting
|
||||
|
||||
from coverart_external_plugins import ExternalPlugin
|
||||
import rb
|
||||
|
||||
|
||||
def enum(**enums):
|
||||
return type('Enum', (object,), enums)
|
||||
|
||||
|
||||
class OptionsWidget(Gtk.Widget):
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(OptionsWidget, self).__init__(*args, **kwargs)
|
||||
@@ -54,7 +56,7 @@ class OptionsWidget(Gtk.Widget):
|
||||
|
||||
# connect signals
|
||||
self._options_changed_id = self._controller.connect('notify::options',
|
||||
self._update_options)
|
||||
self._update_options)
|
||||
self._current_key_changed_id = self._controller.connect(
|
||||
'notify::current-key', self._update_current_key)
|
||||
self._update_image_changed_id = self._controller.connect(
|
||||
@@ -68,7 +70,7 @@ class OptionsWidget(Gtk.Widget):
|
||||
|
||||
def _update_visibility(self, *args):
|
||||
self.set_visible(self._controller.enabled)
|
||||
|
||||
|
||||
def _update_options(self, *args):
|
||||
self.update_options()
|
||||
|
||||
@@ -86,14 +88,14 @@ class OptionsWidget(Gtk.Widget):
|
||||
|
||||
def update_image(self):
|
||||
pass
|
||||
|
||||
|
||||
def calc_popup_position(self, widget):
|
||||
# this calculates the popup positioning - algorithm taken
|
||||
# from Gtk3.8 gtk/gtkmenubutton.c
|
||||
|
||||
|
||||
toplevel = self.get_toplevel()
|
||||
toplevel.set_type_hint(Gdk.WindowTypeHint.DROPDOWN_MENU)
|
||||
|
||||
|
||||
menu_req, pref_req = widget.get_preferred_size()
|
||||
align = widget.get_halign()
|
||||
direction = self.get_direction()
|
||||
@@ -107,7 +109,7 @@ class OptionsWidget(Gtk.Widget):
|
||||
|
||||
allocation = self.get_allocation()
|
||||
|
||||
ret, x,y = window.get_origin()
|
||||
ret, x, y = window.get_origin()
|
||||
x += allocation.x
|
||||
y += allocation.y
|
||||
|
||||
@@ -120,15 +122,15 @@ class OptionsWidget(Gtk.Widget):
|
||||
y -= menu_req.height
|
||||
else:
|
||||
y -= menu_req.height
|
||||
|
||||
|
||||
return x, y
|
||||
|
||||
class OptionsPopupWidget(OptionsWidget):
|
||||
|
||||
class OptionsPopupWidget(OptionsWidget):
|
||||
# signals
|
||||
__gsignals__ = {
|
||||
'item-clicked': (GObject.SIGNAL_RUN_LAST, None, (str,))
|
||||
}
|
||||
}
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
OptionsWidget.__init__(self, *args, **kwargs)
|
||||
@@ -189,31 +191,96 @@ class OptionsPopupWidget(OptionsWidget):
|
||||
if self._controller:
|
||||
# inform the controller
|
||||
self._controller.option_selected(key)
|
||||
|
||||
|
||||
def _popup_callback(self, *args):
|
||||
x, y = self.calc_popup_position(self._popup_menu)
|
||||
|
||||
|
||||
return x, y, False, None
|
||||
|
||||
|
||||
def show_popup(self, align=True):
|
||||
'''
|
||||
show the current popup menu
|
||||
'''
|
||||
|
||||
|
||||
if align:
|
||||
self._popup_menu.popup(None, None, self._popup_callback, self, 0,
|
||||
Gtk.get_current_event_time())
|
||||
Gtk.get_current_event_time())
|
||||
else:
|
||||
self._popup_menu.popup(None, None, None, None, 0,
|
||||
Gtk.get_current_event_time())
|
||||
|
||||
Gtk.get_current_event_time())
|
||||
|
||||
def do_delete_thyself(self):
|
||||
self.clear_popupmenu()
|
||||
del self._popupmenu
|
||||
|
||||
class PressButton(Gtk.Button):
|
||||
button_relief = GObject.property(type=bool, default=False)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(PressButton, self).__init__(*args, **kwargs)
|
||||
|
||||
gs = GSetting()
|
||||
setting = gs.get_setting(gs.Path.PLUGIN)
|
||||
setting.bind(gs.PluginKey.BUTTON_RELIEF, self,
|
||||
'button_relief', Gio.SettingsBindFlags.GET)
|
||||
|
||||
self.connect('notify::button-relief',
|
||||
self.on_notify_button_relief)
|
||||
|
||||
def on_notify_button_relief(self, *arg):
|
||||
if self.button_relief:
|
||||
self.set_relief(Gtk.ReliefStyle.NONE)
|
||||
else:
|
||||
self.set_relief(Gtk.ReliefStyle.HALF)
|
||||
|
||||
def set_image(self, pixbuf=None, symbolic=None):
|
||||
'''
|
||||
set the image for the button
|
||||
:param pixbuf: if given the image is set via a pixbuf
|
||||
:param symbolic: if given, the image is set via a themed icon
|
||||
:return:
|
||||
'''
|
||||
image = self.get_image()
|
||||
|
||||
if not image:
|
||||
image = Gtk.Image()
|
||||
super(PressButton, self).set_image(image)
|
||||
|
||||
if pixbuf:
|
||||
if hasattr(self, "controller.enabled") and not self.controller.enabled:
|
||||
pixbuf = self._getBlendedPixbuf(pixbuf)
|
||||
|
||||
self.get_image().set_from_pixbuf(pixbuf)
|
||||
|
||||
if symbolic:
|
||||
icon = Gio.ThemedIcon(name=symbolic)
|
||||
self.get_image().set_from_gicon(icon, Gtk.IconSize.BUTTON)
|
||||
|
||||
self.on_notify_button_relief()
|
||||
|
||||
def _getBlendedPixbuf(self, pixbuf):
|
||||
"""Turn a pixbuf into a blended version of the pixbuf by drawing a
|
||||
transparent alpha blend on it."""
|
||||
pixbuf = pixbuf.copy()
|
||||
|
||||
w, h = pixbuf.get_width(), pixbuf.get_height()
|
||||
surface = cairo.ImageSurface(
|
||||
cairo.FORMAT_ARGB32, pixbuf.get_width(), pixbuf.get_height())
|
||||
context = cairo.Context(surface)
|
||||
|
||||
Gdk.cairo_set_source_pixbuf(context, pixbuf, 0, 0)
|
||||
context.paint()
|
||||
|
||||
context.set_source_rgba(32, 32, 32, 0.4)
|
||||
context.set_line_width(0)
|
||||
context.rectangle(0, 0, w, h)
|
||||
context.fill()
|
||||
|
||||
pixbuf = Gdk.pixbuf_get_from_surface(surface, 0, 0, w, h)
|
||||
|
||||
return pixbuf
|
||||
|
||||
class EnhancedButton(Gtk.ToggleButton):
|
||||
|
||||
button_relief = GObject.property(type=bool, default=False)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
@@ -222,10 +289,10 @@ class EnhancedButton(Gtk.ToggleButton):
|
||||
gs = GSetting()
|
||||
setting = gs.get_setting(gs.Path.PLUGIN)
|
||||
setting.bind(gs.PluginKey.BUTTON_RELIEF, self,
|
||||
'button_relief', Gio.SettingsBindFlags.GET)
|
||||
'button_relief', Gio.SettingsBindFlags.GET)
|
||||
|
||||
self.connect('notify::button-relief',
|
||||
self.on_notify_button_relief)
|
||||
self.on_notify_button_relief)
|
||||
|
||||
def on_notify_button_relief(self, *arg):
|
||||
if self.button_relief:
|
||||
@@ -235,23 +302,32 @@ class EnhancedButton(Gtk.ToggleButton):
|
||||
|
||||
|
||||
class PixbufButton(EnhancedButton):
|
||||
|
||||
button_relief = GObject.property(type=bool, default=False)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(PixbufButton, self).__init__(*args, **kwargs)
|
||||
|
||||
def set_image(self, pixbuf):
|
||||
def set_image(self, pixbuf=None, symbolic=None):
|
||||
'''
|
||||
set the image for the button
|
||||
:param pixbuf: if given, image is set from a pixbuf
|
||||
:param symbolic: if given image is set from a symbolic name
|
||||
:return:
|
||||
'''
|
||||
image = self.get_image()
|
||||
|
||||
if not image:
|
||||
image = Gtk.Image()
|
||||
super(PixbufButton, self).set_image(image)
|
||||
|
||||
if not self.controller.enabled:
|
||||
pixbuf = self._getBlendedPixbuf(pixbuf)
|
||||
|
||||
self.get_image().set_from_pixbuf(pixbuf)
|
||||
if pixbuf:
|
||||
if hasattr(self, "controller.enabled") and not self.controller.enabled:
|
||||
pixbuf = self._getBlendedPixbuf(pixbuf)
|
||||
|
||||
self.get_image().set_from_pixbuf(pixbuf)
|
||||
if symbolic:
|
||||
icon = Gio.ThemedIcon(name=symbolic)
|
||||
self.get_image().set_from_gicon(icon, Gtk.IconSize.BUTTON)
|
||||
|
||||
self.on_notify_button_relief()
|
||||
|
||||
@@ -259,12 +335,12 @@ class PixbufButton(EnhancedButton):
|
||||
"""Turn a pixbuf into a blended version of the pixbuf by drawing a
|
||||
transparent alpha blend on it."""
|
||||
pixbuf = pixbuf.copy()
|
||||
|
||||
w,h = pixbuf.get_width(), pixbuf.get_height()
|
||||
|
||||
w, h = pixbuf.get_width(), pixbuf.get_height()
|
||||
surface = cairo.ImageSurface(
|
||||
cairo.FORMAT_ARGB32, pixbuf.get_width(), pixbuf.get_height())
|
||||
context = cairo.Context(surface)
|
||||
|
||||
|
||||
Gdk.cairo_set_source_pixbuf(context, pixbuf, 0, 0)
|
||||
context.paint()
|
||||
|
||||
@@ -284,7 +360,7 @@ class PopupButton(PixbufButton, OptionsPopupWidget):
|
||||
# signals
|
||||
__gsignals__ = {
|
||||
'item-clicked': (GObject.SIGNAL_RUN_LAST, None, (str,))
|
||||
}
|
||||
}
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
'''
|
||||
@@ -292,13 +368,13 @@ class PopupButton(PixbufButton, OptionsPopupWidget):
|
||||
'''
|
||||
PixbufButton.__init__(self, *args, **kwargs)
|
||||
OptionsPopupWidget.__init__(self, *args, **kwargs)
|
||||
|
||||
self._popup_menu.attach_to_widget(self, None) #critical to ensure theming works
|
||||
|
||||
self._popup_menu.attach_to_widget(self, None) # critical to ensure theming works
|
||||
self._popup_menu.connect('deactivate', self.popup_deactivate)
|
||||
|
||||
# initialise some variables
|
||||
self._first_menu_item = None
|
||||
|
||||
|
||||
def popup_deactivate(self, *args):
|
||||
self.set_active(False)
|
||||
|
||||
@@ -321,14 +397,15 @@ class PopupButton(PixbufButton, OptionsPopupWidget):
|
||||
if (event.button == Gdk.BUTTON_PRIMARY):
|
||||
self.show_popup()
|
||||
self.set_active(True)
|
||||
|
||||
|
||||
|
||||
class TextPopupButton(EnhancedButton, OptionsPopupWidget):
|
||||
__gtype_name__ = "TextPopupButton"
|
||||
|
||||
# signals
|
||||
__gsignals__ = {
|
||||
'item-clicked': (GObject.SIGNAL_RUN_LAST, None, (str,))
|
||||
}
|
||||
}
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
'''
|
||||
@@ -336,8 +413,8 @@ class TextPopupButton(EnhancedButton, OptionsPopupWidget):
|
||||
'''
|
||||
EnhancedButton.__init__(self, *args, **kwargs)
|
||||
OptionsPopupWidget.__init__(self, *args, **kwargs)
|
||||
|
||||
self._popup_menu.attach_to_widget(self, None) #critical to ensure theming works
|
||||
|
||||
self._popup_menu.attach_to_widget(self, None) # critical to ensure theming works
|
||||
self._popup_menu.connect('deactivate', self.popup_deactivate)
|
||||
|
||||
# initialise some variables
|
||||
@@ -362,7 +439,7 @@ class MenuButton(PixbufButton, OptionsPopupWidget):
|
||||
# signals
|
||||
__gsignals__ = {
|
||||
'item-clicked': (GObject.SIGNAL_RUN_LAST, None, (str,))
|
||||
}
|
||||
}
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
'''
|
||||
@@ -370,11 +447,11 @@ class MenuButton(PixbufButton, OptionsPopupWidget):
|
||||
'''
|
||||
PixbufButton.__init__(self, *args, **kwargs)
|
||||
OptionsPopupWidget.__init__(self, *args, **kwargs)
|
||||
|
||||
self._popup_menu.attach_to_widget(self, None) #critical to ensure theming works
|
||||
|
||||
self._popup_menu.attach_to_widget(self, None) # critical to ensure theming works
|
||||
self._popup_menu.connect('deactivate', self.popup_deactivate)
|
||||
self._states = {}
|
||||
|
||||
|
||||
def popup_deactivate(self, *args):
|
||||
self.set_active(False)
|
||||
|
||||
@@ -382,11 +459,11 @@ class MenuButton(PixbufButton, OptionsPopupWidget):
|
||||
'''
|
||||
add a new menu item to the popup
|
||||
'''
|
||||
|
||||
|
||||
label = key.label
|
||||
menutype = key.menutype
|
||||
typevalue = key.typevalue
|
||||
|
||||
|
||||
if menutype and menutype == 'separator':
|
||||
new_menu_item = Gtk.SeparatorMenuItem().new()
|
||||
elif menutype and menutype == 'check':
|
||||
@@ -399,7 +476,7 @@ class MenuButton(PixbufButton, OptionsPopupWidget):
|
||||
|
||||
new_menu_item.show()
|
||||
self._popup_menu.append(new_menu_item)
|
||||
|
||||
|
||||
def clear_popupmenu(self):
|
||||
'''
|
||||
reinitialises/clears the current popup menu and associated actions
|
||||
@@ -416,7 +493,7 @@ class MenuButton(PixbufButton, OptionsPopupWidget):
|
||||
|
||||
for key in self._controller.options:
|
||||
self.add_menuitem(key)
|
||||
|
||||
|
||||
self._states = {}
|
||||
|
||||
def _fire_item_clicked(self, menu_item):
|
||||
@@ -426,14 +503,14 @@ class MenuButton(PixbufButton, OptionsPopupWidget):
|
||||
value of the selected item.
|
||||
'''
|
||||
self.emit('item-clicked', menu_item.get_label())
|
||||
|
||||
|
||||
def update_image(self):
|
||||
super(MenuButton, self).update_image()
|
||||
self.set_image(self._controller.get_current_image())
|
||||
|
||||
def update_current_key(self):
|
||||
# select the item if it isn't already
|
||||
#item = self.get_menuitems()[self._controller.get_current_key_index()]
|
||||
# item = self.get_menuitems()[self._controller.get_current_key_index()]
|
||||
|
||||
# update the current image and tooltip
|
||||
self.set_image(self._controller.get_current_image())
|
||||
@@ -484,8 +561,8 @@ class ImageToggleButton(PixbufButton, OptionsWidget):
|
||||
|
||||
|
||||
class ImageRadioButton(Gtk.RadioButton, OptionsWidget):
|
||||
# this is legacy code that will not as yet work with
|
||||
# the new toolbar - consider removing this later
|
||||
# this is legacy code that will not as yet work with
|
||||
# the new toolbar - consider removing this later
|
||||
|
||||
__gtype_name__ = "ImageRadioButton"
|
||||
|
||||
@@ -501,16 +578,16 @@ class ImageRadioButton(Gtk.RadioButton, OptionsWidget):
|
||||
gs = GSetting()
|
||||
setting = gs.get_setting(gs.Path.PLUGIN)
|
||||
setting.bind(gs.PluginKey.BUTTON_RELIEF, self,
|
||||
'button_relief', Gio.SettingsBindFlags.GET)
|
||||
'button_relief', Gio.SettingsBindFlags.GET)
|
||||
|
||||
self.connect('notify::button-relief',
|
||||
self.on_notify_button_relief)
|
||||
self.on_notify_button_relief)
|
||||
|
||||
# initialise some variables
|
||||
self.image_display = False
|
||||
self.initialised = False
|
||||
|
||||
#ensure button appearance rather than standard radio toggle
|
||||
# ensure button appearance rather than standard radio toggle
|
||||
self.set_mode(False)
|
||||
|
||||
#label colours
|
||||
@@ -519,7 +596,7 @@ class ImageRadioButton(Gtk.RadioButton, OptionsWidget):
|
||||
|
||||
def update_image(self):
|
||||
super(ImageRadioButton, self).update_image()
|
||||
#self.set_image(self._controller.get_current_image(Gtk.Buildable.get_name(self)))
|
||||
# self.set_image(self._controller.get_current_image(Gtk.Buildable.get_name(self)))
|
||||
|
||||
def do_toggled(self):
|
||||
if self.get_active():
|
||||
@@ -544,10 +621,9 @@ class ImageRadioButton(Gtk.RadioButton, OptionsWidget):
|
||||
|
||||
def update_current_key(self):
|
||||
# update the current image and tooltip
|
||||
#self.set_image(self._controller.get_current_image(Gtk.Buildable.get_name(self)))
|
||||
self.set_tooltip_text("") #self._controller.get_current_description())
|
||||
# self.set_image(self._controller.get_current_image(Gtk.Buildable.get_name(self)))
|
||||
self.set_tooltip_text("") #self._controller.get_current_description())
|
||||
|
||||
from gi.repository import Gdk
|
||||
if self.controller.current_key == Gtk.Buildable.get_name(self):
|
||||
self.set_active(True)
|
||||
self._set_colour(Gtk.StateFlags.NORMAL)
|
||||
@@ -555,14 +631,14 @@ class ImageRadioButton(Gtk.RadioButton, OptionsWidget):
|
||||
self._set_colour(Gtk.StateFlags.INSENSITIVE)
|
||||
|
||||
def _set_colour(self, state_flag):
|
||||
|
||||
|
||||
if len(self.get_children()) == 0:
|
||||
return
|
||||
|
||||
def get_standard_colour(label, state_flag):
|
||||
def get_standard_colour(label, state_flag):
|
||||
context = label.get_style_context()
|
||||
return context.get_color(state_flag)
|
||||
|
||||
|
||||
label0 = self.get_children()[0]
|
||||
|
||||
if not self._not_active_colour:
|
||||
@@ -571,23 +647,25 @@ class ImageRadioButton(Gtk.RadioButton, OptionsWidget):
|
||||
if not self._active_colour:
|
||||
self._active_colour = get_standard_colour(label0, Gtk.StateFlags.NORMAL)
|
||||
|
||||
if state_flag == Gtk.StateFlags.INSENSITIVE:
|
||||
if state_flag == Gtk.StateFlags.INSENSITIVE:
|
||||
label0.override_color(Gtk.StateType.NORMAL, self._not_active_colour)
|
||||
else:
|
||||
label0.override_color(Gtk.StateType.NORMAL, self._active_colour)
|
||||
|
||||
|
||||
class SearchEntry(RB.SearchEntry, OptionsPopupWidget):
|
||||
__gtype_name__ = "SearchEntry"
|
||||
|
||||
# signals
|
||||
__gsignals__ = {
|
||||
'item-clicked': (GObject.SIGNAL_RUN_LAST, None, (str,))
|
||||
}
|
||||
}
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
RB.SearchEntry.__init__(self, *args, **kwargs)
|
||||
OptionsPopupWidget.__init__(self)
|
||||
|
||||
# self.props.explicit_mode = True
|
||||
|
||||
@OptionsPopupWidget.controller.setter
|
||||
def controller(self, controller):
|
||||
if self._controller:
|
||||
@@ -604,13 +682,15 @@ class SearchEntry(RB.SearchEntry, OptionsPopupWidget):
|
||||
self._update_search_text()
|
||||
|
||||
def _update_search_text(self, *args):
|
||||
if not self.searching():
|
||||
self.grab_focus()
|
||||
self.set_text(self._controller.search_text)
|
||||
|
||||
def update_current_key(self):
|
||||
super(SearchEntry, self).update_current_key()
|
||||
|
||||
self.set_placeholder(self._controller.get_current_description())
|
||||
|
||||
|
||||
def do_show_popup(self):
|
||||
'''
|
||||
Callback called by the search entry when the magnifier is clicked.
|
||||
@@ -634,7 +714,7 @@ class QuickSearchEntry(Gtk.Frame):
|
||||
__gsignals__ = {
|
||||
'quick-search': (GObject.SIGNAL_RUN_LAST, None, (str,)),
|
||||
'arrow-pressed': (GObject.SIGNAL_RUN_LAST, None, (object,))
|
||||
}
|
||||
}
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(QuickSearchEntry, self).__init__(*args, **kwargs)
|
||||
@@ -642,7 +722,7 @@ class QuickSearchEntry(Gtk.Frame):
|
||||
|
||||
# text entry for the quick search input
|
||||
text_entry = Gtk.Entry(halign='center', valign='center',
|
||||
margin=5)
|
||||
margin=5)
|
||||
|
||||
self.add(text_entry)
|
||||
|
||||
@@ -674,7 +754,7 @@ class QuickSearchEntry(Gtk.Frame):
|
||||
return False
|
||||
|
||||
Gdk.threads_add_timeout_seconds(GLib.PRIORITY_DEFAULT_IDLE, 4,
|
||||
hide_on_timeout, None)
|
||||
hide_on_timeout, None)
|
||||
|
||||
def do_parent_set(self, old_parent, *args):
|
||||
if old_parent:
|
||||
@@ -682,18 +762,24 @@ class QuickSearchEntry(Gtk.Frame):
|
||||
|
||||
parent = self.get_parent()
|
||||
self._on_parent_key_press_id = parent.connect('key-press-event',
|
||||
self._on_parent_key_press, self.get_child())
|
||||
self._on_parent_key_press, self.get_child())
|
||||
|
||||
def _on_parent_key_press(self, parent, event, entry):
|
||||
if not self.get_visible() and \
|
||||
event.keyval not in [Gdk.KEY_Shift_L, Gdk.KEY_Shift_R,
|
||||
Gdk.KEY_Control_L, Gdk.KEY_Control_R, Gdk.KEY_Escape]:
|
||||
event.keyval not in [Gdk.KEY_Shift_L,
|
||||
Gdk.KEY_Shift_R,
|
||||
Gdk.KEY_Control_L,
|
||||
Gdk.KEY_Control_R,
|
||||
Gdk.KEY_Escape,
|
||||
Gdk.KEY_Alt_L,
|
||||
Gdk.KEY_Super_L,
|
||||
Gdk.KEY_Super_R]:
|
||||
# grab focus, redirect the pressed key and make the quick search
|
||||
# entry visible
|
||||
entry.set_text('')
|
||||
entry.grab_focus()
|
||||
entry.im_context_filter_keypress(event)
|
||||
self.show_all()
|
||||
entry.im_context_filter_keypress(event)
|
||||
|
||||
elif self.get_visible() and event.keyval == Gdk.KEY_Escape:
|
||||
self._hide_quick_search()
|
||||
@@ -755,12 +841,11 @@ class ProxyPopupButton(Gtk.Frame):
|
||||
|
||||
|
||||
class OptionsListViewWidget(OptionsWidget):
|
||||
|
||||
# signals
|
||||
__gsignals__ = {
|
||||
'item-clicked': (GObject.SIGNAL_RUN_LAST, None, (str,)),
|
||||
'deactivate': (GObject.SIGNAL_RUN_LAST, None, ())
|
||||
}
|
||||
}
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
OptionsWidget.__init__(self, *args, **kwargs)
|
||||
@@ -770,7 +855,7 @@ class OptionsListViewWidget(OptionsWidget):
|
||||
def controller(self, controller):
|
||||
ui = Gtk.Builder()
|
||||
ui.add_from_file(rb.find_plugin_file(controller.plugin,
|
||||
'ui/coverart_listwindow.ui'))
|
||||
'ui/coverart_listwindow.ui'))
|
||||
ui.connect_signals(self)
|
||||
self._listwindow = ui.get_object('listwindow')
|
||||
self._liststore = ui.get_object('liststore')
|
||||
@@ -835,10 +920,10 @@ class OptionsListViewWidget(OptionsWidget):
|
||||
if self._increment:
|
||||
if button is self._scrolldown_button:
|
||||
adjustment.set_value(adjustment.get_value()
|
||||
+ self._step)
|
||||
+ self._step)
|
||||
else:
|
||||
adjustment.set_value(adjustment.get_value()
|
||||
- self._step)
|
||||
- self._step)
|
||||
|
||||
return self._increment
|
||||
|
||||
@@ -848,7 +933,7 @@ class OptionsListViewWidget(OptionsWidget):
|
||||
self.on_scroll_button_released()
|
||||
|
||||
Gdk.threads_add_timeout(GLib.PRIORITY_DEFAULT_IDLE, 50,
|
||||
scroll, None)
|
||||
scroll, None)
|
||||
|
||||
def on_scroll_button_leave(self, *args):
|
||||
self._increment = False
|
||||
@@ -881,7 +966,7 @@ class ListViewButton(PixbufButton, OptionsListViewWidget):
|
||||
__gsignals__ = {
|
||||
'item-clicked': (GObject.SIGNAL_RUN_LAST, None, (str,)),
|
||||
'deactivate': (GObject.SIGNAL_RUN_LAST, None, ())
|
||||
}
|
||||
}
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
'''
|
||||
@@ -889,19 +974,19 @@ class ListViewButton(PixbufButton, OptionsListViewWidget):
|
||||
'''
|
||||
PixbufButton.__init__(self, *args, **kwargs)
|
||||
OptionsListViewWidget.__init__(self, *args, **kwargs)
|
||||
|
||||
|
||||
self._popup.connect('deactivate', self.popup_deactivate)
|
||||
|
||||
|
||||
def popup_deactivate(self, *args):
|
||||
# add a slight delay to allow the click of button to occur
|
||||
# before the deactivation of the button - this will allow
|
||||
# us to toggle the popup via the button correctly
|
||||
|
||||
|
||||
def deactivate(*args):
|
||||
self.set_active(False)
|
||||
|
||||
|
||||
Gdk.threads_add_timeout(GLib.PRIORITY_DEFAULT_IDLE, 50, deactivate, None)
|
||||
|
||||
|
||||
def update_image(self):
|
||||
super(ListViewButton, self).update_image()
|
||||
self.set_image(self._controller.get_current_image())
|
||||
@@ -931,9 +1016,9 @@ class EnhancedIconView(Gtk.IconView):
|
||||
# signals
|
||||
__gsignals__ = {
|
||||
'item-clicked': (GObject.SIGNAL_RUN_LAST, None, (object, object))
|
||||
}
|
||||
}
|
||||
|
||||
object_column = GObject.property(type=int, default= -1)
|
||||
object_column = GObject.property(type=int, default=-1)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(EnhancedIconView, self).__init__(*args, **kwargs)
|
||||
@@ -954,7 +1039,7 @@ class EnhancedIconView(Gtk.IconView):
|
||||
# don't need to reaccommodate if it's a vertical change
|
||||
self._reallocate_count += 1
|
||||
Gdk.threads_add_timeout(GLib.PRIORITY_DEFAULT_IDLE, 500,
|
||||
self._reallocate_columns, None)
|
||||
self._reallocate_columns, None)
|
||||
|
||||
Gtk.IconView.do_size_allocate(self, allocation)
|
||||
|
||||
@@ -965,12 +1050,6 @@ class EnhancedIconView(Gtk.IconView):
|
||||
self.set_columns(0)
|
||||
self.set_columns(-1)
|
||||
|
||||
def pre_display_popup(self):
|
||||
'''
|
||||
called just before popup is displayed
|
||||
'''
|
||||
pass
|
||||
|
||||
def do_button_press_event(self, event):
|
||||
'''
|
||||
Other than the default behavior, adds an event firing when the mouse
|
||||
@@ -986,16 +1065,14 @@ class EnhancedIconView(Gtk.IconView):
|
||||
# if the item being clicked isn't selected, we should clear
|
||||
# the current selection
|
||||
if len(self.get_selected_objects()) > 0 and \
|
||||
not self.path_is_selected(current_path):
|
||||
not self.path_is_selected(current_path):
|
||||
self.unselect_all()
|
||||
|
||||
self.select_path(current_path)
|
||||
self.set_cursor(current_path, None, False)
|
||||
|
||||
if self.popup:
|
||||
self.pre_display_popup()
|
||||
self.popup.get_gtkmenu(self.source, 'popup_menu').popup(None,
|
||||
None, None, None, event.button, event.time)
|
||||
self.popup.popup(self.source, 'popup_menu', event.button, event.time)
|
||||
else:
|
||||
self.emit('item-clicked', event, current_path)
|
||||
|
||||
@@ -1016,7 +1093,7 @@ class EnhancedIconView(Gtk.IconView):
|
||||
|
||||
model = self.get_model()
|
||||
selected_objects = list(reversed([model[selected][self.object_column]
|
||||
for selected in selected_items]))
|
||||
for selected in selected_items]))
|
||||
|
||||
return selected_objects
|
||||
|
||||
@@ -1030,19 +1107,37 @@ class EnhancedIconView(Gtk.IconView):
|
||||
self.scroll_to_path(path, True, 0.5, 0.5)
|
||||
|
||||
|
||||
class HiddenExpander(Gtk.Bin):
|
||||
__gtype_name__ = "HiddenExpander"
|
||||
|
||||
expanded = GObject.property(type=bool, default=False)
|
||||
label = GObject.property(type=str, default='')
|
||||
|
||||
def __init__(self, label='', visible=False):
|
||||
super(HiddenExpander, self).__init__() # *args, **kwargs)
|
||||
self.label = label
|
||||
self.set_visible(visible)
|
||||
|
||||
def get_expanded(self):
|
||||
return self.expanded
|
||||
|
||||
def set_expanded(self, expanded):
|
||||
self.expanded = expanded
|
||||
|
||||
|
||||
class PanedCollapsible(Gtk.Paned):
|
||||
__gtype_name__ = "PanedCollapsible"
|
||||
|
||||
# properties
|
||||
# this two properties indicate which one of the Paned childs is collapsible
|
||||
# only one can be True at a time, the widget takes care of keeping this
|
||||
# restriction consitent.
|
||||
# restriction consistent.
|
||||
collapsible1 = GObject.property(type=bool, default=False)
|
||||
collapsible2 = GObject.property(type=bool, default=False)
|
||||
|
||||
# values for expand method
|
||||
Paned = enum(DEFAULT=1, EXPAND=2, COLLAPSE=3)
|
||||
|
||||
|
||||
# this indicates the latest position for the handle before a child was
|
||||
# collapsed
|
||||
collapsible_y = GObject.property(type=int, default=0)
|
||||
@@ -1053,18 +1148,20 @@ class PanedCollapsible(Gtk.Paned):
|
||||
# signals
|
||||
__gsignals__ = {
|
||||
'expanded': (GObject.SIGNAL_RUN_LAST, None, (bool,))
|
||||
}
|
||||
}
|
||||
|
||||
Min_Paned_Size = 80
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(PanedCollapsible, self).__init__(*args, **kwargs)
|
||||
|
||||
self._connect_properties()
|
||||
self._from_paned_handle = 0
|
||||
|
||||
def _connect_properties(self):
|
||||
self.connect('notify::collapsible1', self._on_collapsible1_changed)
|
||||
self.connect('notify::collapsible2', self._on_collapsible2_changed)
|
||||
self.connect('notify::collapsible_label',
|
||||
self._on_collapsible_label_changed)
|
||||
self._on_collapsible_label_changed)
|
||||
|
||||
def _on_collapsible1_changed(self, *args):
|
||||
if self.collapsible1 and self.collapsible2:
|
||||
@@ -1077,7 +1174,7 @@ class PanedCollapsible(Gtk.Paned):
|
||||
|
||||
def _on_collapsible2_changed(self, *args):
|
||||
if self.collapsible1 and self.collapsible2:
|
||||
# check consistency, only one collapsible at a time
|
||||
# check consistency, only one collapsible at a time
|
||||
self.collapsible1 = False
|
||||
|
||||
child = self.get_child2()
|
||||
@@ -1108,32 +1205,71 @@ class PanedCollapsible(Gtk.Paned):
|
||||
# move the lower pane to the bottom since it's collapsed
|
||||
self._collapse()
|
||||
else:
|
||||
# restitute the lower pane to it's expanded size
|
||||
# reinstate the lower pane to it's expanded size
|
||||
if not self.collapsible_y:
|
||||
# if there isn't a saved size, use half of the space
|
||||
new_y = self.get_allocated_height() / 2
|
||||
self.collapsible_y = new_y
|
||||
|
||||
# if the calculated new position is less than the minimum then
|
||||
# use half the space
|
||||
|
||||
current_pos = self.get_allocated_height() - \
|
||||
self.get_handle_window().get_height()
|
||||
|
||||
if ((current_pos - self.collapsible_y) < self.Min_Paned_Size):
|
||||
self.collapsible_y = self.get_allocated_height() / 2
|
||||
|
||||
self.set_position(self.collapsible_y)
|
||||
|
||||
self.emit('expanded', expand)
|
||||
|
||||
def do_button_press_event(self, *args):
|
||||
def do_button_press_event(self, event):
|
||||
'''
|
||||
This callback allows or denies the paned handle to move depending on
|
||||
the expanded expander
|
||||
'''
|
||||
if not self._expander or self._expander.get_expanded():
|
||||
Gtk.Paned.do_button_press_event(self, *args)
|
||||
# if not self._expander or self._expander.get_expanded():
|
||||
self._from_paned_handle = 1
|
||||
|
||||
if event.type == Gdk.EventType._2BUTTON_PRESS:
|
||||
self._from_paned_handle = 2
|
||||
|
||||
Gtk.Paned.do_button_press_event(self, event)
|
||||
|
||||
def do_button_release_event(self, *args):
|
||||
'''
|
||||
Callback when the paned handle is released from its mouse click.
|
||||
'''
|
||||
if not self._expander or self._expander.get_expanded():
|
||||
if self._from_paned_handle != 0:
|
||||
Gtk.Paned.do_button_release_event(self, *args)
|
||||
|
||||
if (not self._expander or self._expander.get_expanded()) and self._from_paned_handle == 1:
|
||||
print("in an expanded situation")
|
||||
self.collapsible_y = self.get_position()
|
||||
|
||||
# if the current paned handle pos is less than the minimum the force a collapse
|
||||
current_pos = self.get_allocated_height() - \
|
||||
self.get_handle_window().get_height()
|
||||
|
||||
if ((current_pos - self.collapsible_y) < self.Min_Paned_Size):
|
||||
self.expand(PanedCollapsible.Paned.COLLAPSE)
|
||||
|
||||
if self._from_paned_handle == 2:
|
||||
# we are dealing with a double click situation
|
||||
|
||||
if self._expander.get_expanded():
|
||||
# if we are in an expanded position - lets collapse the pane
|
||||
print("collapsing")
|
||||
self.expand(PanedCollapsible.Paned.COLLAPSE)
|
||||
else:
|
||||
# the current paned position is closed, so lets open the pane fully
|
||||
self.expand(PanedCollapsible.Paned.EXPAND)
|
||||
print("expanding")
|
||||
self.set_position(0)
|
||||
print(self.get_position())
|
||||
self._from_paned_handle = 0
|
||||
|
||||
def do_remove(self, widget):
|
||||
'''
|
||||
Overwrites the super class remove method, taking care of removing the
|
||||
@@ -1154,7 +1290,7 @@ class PanedCollapsible(Gtk.Paned):
|
||||
|
||||
def do_add(self, widget):
|
||||
'''
|
||||
This method had to be overwrited to allow the add and packs method to
|
||||
This method had to be overridden to allow the add and packs method to
|
||||
work with Glade.
|
||||
'''
|
||||
if not self.get_child1():
|
||||
@@ -1197,17 +1333,20 @@ class PanedCollapsible(Gtk.Paned):
|
||||
Gtk.Paned.pack2(self, widget, *args, **kwargs)
|
||||
|
||||
def _create_expander(self, widget):
|
||||
self._expander = Gtk.Expander(label=self.collapsible_label,
|
||||
visible=True)
|
||||
# self._expander = Gtk.Expander(label=self.collapsible_label,
|
||||
# visible=True)
|
||||
self._expander = HiddenExpander(label=self.collapsible_label,
|
||||
visible=True)
|
||||
|
||||
self._expander.add(widget)
|
||||
|
||||
# connect the expanded signal
|
||||
self._expander.connect('notify::expanded',
|
||||
self._on_collapsible_expanded)
|
||||
self._on_collapsible_expanded)
|
||||
|
||||
# connect the initial collapse
|
||||
self._allocate_id = self._expander.connect('size-allocate',
|
||||
self._initial_collapse)
|
||||
self._initial_collapse)
|
||||
|
||||
return self._expander
|
||||
|
||||
@@ -1218,8 +1357,8 @@ class PanedCollapsible(Gtk.Paned):
|
||||
|
||||
def _collapse(self):
|
||||
new_y = self.get_allocated_height() - \
|
||||
self.get_handle_window().get_height() - \
|
||||
self._expander.get_label_widget().get_allocated_height()
|
||||
self.get_handle_window().get_height() # - \
|
||||
# self._expander.get_label_widget().get_allocated_height()
|
||||
|
||||
self.set_position(new_y)
|
||||
|
||||
@@ -1233,9 +1372,9 @@ class PanedCollapsible(Gtk.Paned):
|
||||
self._expander.set_expanded(True)
|
||||
elif force == PanedCollapsible.Paned.COLLAPSE:
|
||||
self._expander.set_expanded(False)
|
||||
elif force==PanedCollapsible.Paned.DEFAULT:
|
||||
elif force == PanedCollapsible.Paned.DEFAULT:
|
||||
self._expander.set_expanded(not self._expander.get_expanded())
|
||||
|
||||
|
||||
def get_expansion_status(self):
|
||||
'''
|
||||
returns the position of the expander i.e. expanded or not
|
||||
@@ -1246,6 +1385,7 @@ class PanedCollapsible(Gtk.Paned):
|
||||
|
||||
return value
|
||||
|
||||
|
||||
class AbstractView(GObject.Object):
|
||||
'''
|
||||
intention is to document 'the must have' methods all views should define
|
||||
@@ -1260,28 +1400,65 @@ class AbstractView(GObject.Object):
|
||||
# where abstractview is part of multiple inheritance
|
||||
__gsignals__ = {
|
||||
'update-toolbar': (GObject.SIGNAL_RUN_LAST, None, ())
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
def __init__(self):
|
||||
super(AbstractView, self).__init__()
|
||||
|
||||
def initialise(self, source):
|
||||
self.source = source
|
||||
self.plugin = source.plugin
|
||||
|
||||
|
||||
self._notification_displayed = 0
|
||||
Notify.init("coverart_browser")
|
||||
|
||||
self.connect('update-toolbar', self.do_update_toolbar)
|
||||
|
||||
|
||||
def do_update_toolbar(self, *args):
|
||||
'''
|
||||
called when update-toolbar signal is emitted
|
||||
by default the toolbar objects are made visible
|
||||
'''
|
||||
from coverart_toolbar import ToolbarObject
|
||||
|
||||
self.source.toolbar_manager.set_enabled(True, ToolbarObject.SORT_BY)
|
||||
self.source.toolbar_manager.set_enabled(True, ToolbarObject.SORT_ORDER)
|
||||
self.source.toolbar_manager.set_enabled(False, ToolbarObject.SORT_BY_ARTIST)
|
||||
self.source.toolbar_manager.set_enabled(False, ToolbarObject.SORT_ORDER_ARTIST)
|
||||
|
||||
|
||||
def display_notification(self, title, text, file):
|
||||
|
||||
# first see if the notification plugin is enabled
|
||||
# if it is, we use standard notifications
|
||||
# if it is not, we use the infobar
|
||||
|
||||
def hide_notification(*args):
|
||||
if self._notification_displayed > 7:
|
||||
self.source.notification_infobar.response(0)
|
||||
self._notification_displayed = 0
|
||||
return False
|
||||
|
||||
self._notification_displayed = self._notification_displayed + 1
|
||||
return True
|
||||
|
||||
notifyext = ExternalPlugin()
|
||||
notifyext.appendattribute('plugin_name', 'notification')
|
||||
|
||||
if notifyext.is_activated():
|
||||
n = Notify.Notification.new(title, text, file)
|
||||
n.show()
|
||||
else:
|
||||
self.source.notification_text.set_text(title + " : " + text)
|
||||
# self.source.notification_infobar.set_visible(True)#reveal_notification.set_reveal_child(True)
|
||||
self.source.notification_infobar.show() #reveal_notification.set_reveal_child(True)
|
||||
|
||||
if self._notification_displayed == 0:
|
||||
Gdk.threads_add_timeout_seconds(GLib.PRIORITY_DEFAULT_IDLE, 1,
|
||||
hide_notification, None)
|
||||
else:
|
||||
self._notification_displayed = 1 # reset notification for new label
|
||||
|
||||
|
||||
def resize_icon(self, cover_size):
|
||||
'''
|
||||
resize the view main picture icon
|
||||
@@ -1310,6 +1487,15 @@ class AbstractView(GObject.Object):
|
||||
'''
|
||||
pass
|
||||
|
||||
def scroll_to_album(self, album):
|
||||
'''
|
||||
scroll to the album in the view
|
||||
'''
|
||||
if album:
|
||||
path = self.source.album_manager.model.get_path(album)
|
||||
if path:
|
||||
self.select_and_scroll_to_path(path)
|
||||
|
||||
def set_popup_menu(self, popup):
|
||||
'''
|
||||
define the popup menu (right click) used for the view
|
||||
@@ -1328,33 +1514,33 @@ class AbstractView(GObject.Object):
|
||||
consistent
|
||||
'''
|
||||
pass
|
||||
|
||||
|
||||
def get_view_icon_name(self):
|
||||
'''
|
||||
every view should have an icon - subject to removal
|
||||
since we'll probably just have text buttons for the view
|
||||
'''
|
||||
return ""
|
||||
|
||||
|
||||
def get_default_manager(self):
|
||||
'''
|
||||
every view should have a default manager
|
||||
for example an AlbumManager or ArtistManager
|
||||
by default - use the AlbumManager from the source
|
||||
'''
|
||||
|
||||
|
||||
return self.source.album_manager
|
||||
|
||||
|
||||
def switch_to_coverpane(self, cover_search_pane):
|
||||
'''
|
||||
called from the source to update the coverpane when
|
||||
it is switched from the track pane
|
||||
'''
|
||||
|
||||
|
||||
selected = self.get_selected_objects()
|
||||
|
||||
if selected:
|
||||
manager = self.get_default_manager()
|
||||
cover_search_pane.do_search(selected[0],
|
||||
manager.cover_man.update_cover)
|
||||
manager.cover_man.update_cover)
|
||||
|
||||
|
||||
@@ -0,0 +1,230 @@
|
||||
# -*- Mode: python; coding: utf-8; tab-width: 4; indent-tabs-mode: nil; -*-
|
||||
#
|
||||
# Copyright (C) 2014 - fossfreedom
|
||||
# GTK3 port https://github.com/exaile-dev/exaile/blob/master/xlgui/cover.py
|
||||
#
|
||||
# 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, 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
from gi.repository import Gtk
|
||||
from gi.repository import GdkPixbuf
|
||||
from gi.repository import GObject
|
||||
|
||||
from coverart_browser_prefs import CoverLocale
|
||||
import rb
|
||||
|
||||
|
||||
class CoverWindow(GObject.Object):
|
||||
"""Shows the cover in a simple image viewer"""
|
||||
|
||||
# signals
|
||||
__gsignals__ = {
|
||||
'close-window': (GObject.SIGNAL_RUN_LAST, None, ())
|
||||
}
|
||||
|
||||
def __init__(self, plugin, parent, savedir=None):
|
||||
"""Initializes and shows the cover
|
||||
|
||||
:param plugin: source
|
||||
:type plugin: RBSource
|
||||
:param parent: Parent window to attach to
|
||||
:type parent: Gtk.Window
|
||||
:param savedir: Initial directory for the Save As functionality
|
||||
:type savedir: basestring
|
||||
"""
|
||||
|
||||
super(CoverWindow, self).__init__()
|
||||
cl = CoverLocale()
|
||||
cl.switch_locale(cl.Locale.LOCALE_DOMAIN)
|
||||
self.builder = Gtk.Builder()
|
||||
self.builder.add_from_file(rb.find_plugin_file(plugin,
|
||||
'ui/coverart_window.ui'))
|
||||
self.builder.connect_signals(self)
|
||||
|
||||
self.cover_window = self.builder.get_object('CoverWindow')
|
||||
self.cover_window.connect('destroy', self.send_destroy_signal)
|
||||
self.layout = self.builder.get_object('layout')
|
||||
self.toolbar = self.builder.get_object('toolbar')
|
||||
self.save_as_button = self.builder.get_object('save_as_button')
|
||||
self.zoom_in_button = self.builder.get_object('zoom_in_button')
|
||||
self.zoom_out_button = self.builder.get_object('zoom_out_button')
|
||||
self.zoom_100_button = self.builder.get_object('zoom_100_button')
|
||||
self.zoom_fit_button = self.builder.get_object('zoom_fit_button')
|
||||
self.close_button = self.builder.get_object('close_button')
|
||||
self.image = self.builder.get_object('image')
|
||||
self.statusbar = self.builder.get_object('statusbar')
|
||||
self.scrolledwindow = self.builder.get_object('scrolledwindow')
|
||||
self.scrolledwindow.set_hadjustment(self.layout.get_hadjustment())
|
||||
self.scrolledwindow.set_vadjustment(self.layout.get_vadjustment())
|
||||
|
||||
self.savedir = savedir
|
||||
|
||||
if parent:
|
||||
self.cover_window.set_transient_for(parent)
|
||||
self.cover_window_width = 500
|
||||
self.cover_window_height = 500 + self.toolbar.size_request().height + \
|
||||
self.statusbar.size_request().height
|
||||
self.cover_window.set_default_size(self.cover_window_width, \
|
||||
self.cover_window_height)
|
||||
|
||||
self.min_percent = 1
|
||||
self.max_percent = 500
|
||||
self.ratio = 1.5
|
||||
self.image_interp = GdkPixbuf.InterpType.BILINEAR
|
||||
self.image_fitted = True
|
||||
|
||||
def send_destroy_signal(self, *args):
|
||||
self.emit('close-window')
|
||||
|
||||
def show_all(self, title, pixbuf):
|
||||
self.image_original_pixbuf = pixbuf
|
||||
self.image_pixbuf = self.image_original_pixbuf
|
||||
|
||||
self.cover_window.set_title(title)
|
||||
self.cover_window.show_all()
|
||||
self.set_ratio_to_fit()
|
||||
self.update_widgets()
|
||||
|
||||
def available_image_width(self):
|
||||
"""Returns the available horizontal space for the image"""
|
||||
return self.cover_window.get_size()[0]
|
||||
|
||||
def available_image_height(self):
|
||||
"""Returns the available vertical space for the image"""
|
||||
return self.cover_window.get_size()[1] - \
|
||||
self.toolbar.size_request().height - \
|
||||
self.statusbar.size_request().height
|
||||
|
||||
def center_image(self):
|
||||
"""Centers the image in the layout"""
|
||||
new_x = max(0, int((self.available_image_width() - \
|
||||
self.image_pixbuf.get_width()) / 2))
|
||||
new_y = max(0, int((self.available_image_height() - \
|
||||
self.image_pixbuf.get_height()) / 2))
|
||||
self.layout.move(self.image, new_x, new_y)
|
||||
|
||||
def update_widgets(self):
|
||||
"""Updates image, layout, scrolled window, tool bar and status bar"""
|
||||
# if self.cover_window.window:
|
||||
# self.cover_window.window.freeze_updates()
|
||||
self.apply_zoom()
|
||||
self.layout.set_size(self.image_pixbuf.get_width(), \
|
||||
self.image_pixbuf.get_height())
|
||||
if self.image_fitted or \
|
||||
(self.image_pixbuf.get_width() == self.available_image_width() and \
|
||||
self.image_pixbuf.get_height() == self.available_image_height()):
|
||||
self.scrolledwindow.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.NEVER)
|
||||
else:
|
||||
self.scrolledwindow.set_policy(Gtk.PolicyType.AUTOMATIC,
|
||||
Gtk.PolicyType.AUTOMATIC)
|
||||
percent = int(100 * self.image_ratio)
|
||||
message = str(self.image_original_pixbuf.get_width()) + " x " + \
|
||||
str(self.image_original_pixbuf.get_height()) + \
|
||||
" pixels " + str(percent) + '%'
|
||||
self.zoom_in_button.set_sensitive(percent < self.max_percent)
|
||||
self.zoom_out_button.set_sensitive(percent > self.min_percent)
|
||||
self.statusbar.pop(self.statusbar.get_context_id(''))
|
||||
self.statusbar.push(self.statusbar.get_context_id(''), message)
|
||||
self.image.set_from_pixbuf(self.image_pixbuf)
|
||||
self.center_image()
|
||||
#if self.cover_window.window:
|
||||
# self.cover_window.window.thaw_updates()
|
||||
|
||||
def apply_zoom(self):
|
||||
"""Scales the image if needed"""
|
||||
new_width = int(self.image_original_pixbuf.get_width() * \
|
||||
self.image_ratio)
|
||||
new_height = int(self.image_original_pixbuf.get_height() * \
|
||||
self.image_ratio)
|
||||
if new_width != self.image_pixbuf.get_width() or \
|
||||
new_height != self.image_pixbuf.get_height():
|
||||
self.image_pixbuf = self.image_original_pixbuf.scale_simple(new_width, \
|
||||
new_height, self.image_interp)
|
||||
|
||||
def set_ratio_to_fit(self):
|
||||
"""Calculates and sets the needed ratio to show the full image"""
|
||||
width_ratio = float(self.image_original_pixbuf.get_width()) / \
|
||||
self.available_image_width()
|
||||
height_ratio = float(self.image_original_pixbuf.get_height()) / \
|
||||
self.available_image_height()
|
||||
self.image_ratio = 1 / max(1, width_ratio, height_ratio)
|
||||
|
||||
def on_save_as_button_clicked(self, widget):
|
||||
"""
|
||||
Saves image to user-specified location
|
||||
"""
|
||||
dialog = Gtk.FileChooserDialog(_("Save File"), self.cover_window,
|
||||
Gtk.FileChooserAction.SAVE,
|
||||
(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
|
||||
Gtk.STOCK_SAVE, Gtk.ResponseType.ACCEPT))
|
||||
filename = 'cover.png'
|
||||
dialog.set_current_name(filename)
|
||||
if self.savedir:
|
||||
dialog.set_current_folder(self.savedir)
|
||||
if dialog.run() == Gtk.ResponseType.ACCEPT:
|
||||
filename = dialog.get_filename()
|
||||
lowfilename = filename.lower()
|
||||
if lowfilename.endswith('.jpg') or lowfilename.endswith('.jpeg'):
|
||||
type_ = 'jpeg'
|
||||
else:
|
||||
type_ = 'png'
|
||||
self.image_pixbuf.savev(filename, type_, [None], [None])
|
||||
dialog.destroy()
|
||||
|
||||
def on_zoom_in_button_clicked(self, widget):
|
||||
"""
|
||||
Zooms into the image
|
||||
"""
|
||||
self.image_fitted = False
|
||||
self.image_ratio *= self.ratio
|
||||
self.update_widgets()
|
||||
|
||||
def on_zoom_out_button_clicked(self, widget):
|
||||
"""
|
||||
Zooms out of the image
|
||||
"""
|
||||
self.image_fitted = False
|
||||
self.image_ratio *= 1 / self.ratio
|
||||
self.update_widgets()
|
||||
|
||||
def on_zoom_100_button_clicked(self, widget):
|
||||
"""
|
||||
Restores the original image zoom
|
||||
"""
|
||||
self.image_fitted = False
|
||||
self.image_ratio = 1
|
||||
self.update_widgets()
|
||||
|
||||
def on_zoom_fit_button_clicked(self, widget):
|
||||
"""
|
||||
Zooms the image to fit the window width
|
||||
"""
|
||||
self.image_fitted = True
|
||||
self.set_ratio_to_fit()
|
||||
self.update_widgets()
|
||||
|
||||
def on_close_button_clicked(self, widget):
|
||||
"""
|
||||
Hides the window
|
||||
"""
|
||||
self.cover_window.hide()
|
||||
|
||||
def cover_window_size_allocate(self, widget, allocation):
|
||||
if self.cover_window_width != allocation.width or \
|
||||
self.cover_window_height != allocation.height:
|
||||
if self.image_fitted:
|
||||
self.set_ratio_to_fit()
|
||||
self.update_widgets()
|
||||
self.cover_window_width = allocation.width
|
||||
self.cover_window_height = allocation.height
|
||||
@@ -1,6 +1,7 @@
|
||||
import gi
|
||||
from gi.repository import Pango
|
||||
from gi.repository import Gtk
|
||||
|
||||
gi.require_version("Gtk", "3.0")
|
||||
|
||||
import logging
|
||||
|
||||
|
Antes Largura: | Altura: | Tamanho: 10 KiB Depois Largura: | Altura: | Tamanho: 14 KiB |
|
Antes Largura: | Altura: | Tamanho: 9.4 KiB Depois Largura: | Altura: | Tamanho: 9.6 KiB |
|
Antes Largura: | Altura: | Tamanho: 9.8 KiB Depois Largura: | Altura: | Tamanho: 7.2 KiB |
|
Antes Largura: | Altura: | Tamanho: 8.9 KiB Depois Largura: | Altura: | Tamanho: 8.5 KiB |
|
Depois Largura: | Altura: | Tamanho: 7.6 KiB |
|
Depois Largura: | Altura: | Tamanho: 9.0 KiB |
@@ -0,0 +1,93 @@
|
||||
<?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:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
inkscape:export-ydpi="90"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-filename="/home/jrbastien/Dropbox/CoverArt/Issue_225/coverart_monochrome_icon5.png"
|
||||
sodipodi:docname="coverart_icon_monochrome.svg"
|
||||
inkscape:version="0.48.4 r9939"
|
||||
version="1.1"
|
||||
width="16"
|
||||
height="16"
|
||||
id="svg7384">
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1313"
|
||||
inkscape:window-height="744"
|
||||
id="base"
|
||||
showgrid="false"
|
||||
inkscape:zoom="22.627417"
|
||||
inkscape:cx="7.8121502"
|
||||
inkscape:cy="8.1026068"
|
||||
inkscape:window-x="53"
|
||||
inkscape:window-y="24"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg7384">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid2984" />
|
||||
</sodipodi:namedview>
|
||||
<defs
|
||||
id="defs13" />
|
||||
<metadata
|
||||
id="metadata90">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title>Gnome Symbolic Icon Theme</dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<title
|
||||
id="title9167">Gnome Symbolic Icon Theme</title>
|
||||
<path
|
||||
style="color:#000000;fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
d="M 0 1 L 0 15 L 16 15 L 16 1 L 0 1 z M 3 2 L 15 2 L 15 14 L 3 14 L 3 2 z "
|
||||
id="path3049" />
|
||||
<path
|
||||
id="path3145"
|
||||
style="color:#000000;fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
d="m 8.49454,6.9999998 c -0.1963888,0 -0.2708736,0.00458 -0.421926,0.075312 C 7.8492631,7.1799014 7.6954236,7.3410447 7.5904128,7.5573095 7.5112238,7.7203905 7.5,7.8010382 7.5,7.9941194 c 0,0.1930808 0.011222,0.2737261 0.090413,0.4368099 0.1405533,0.2894579 0.401828,0.4949454 0.7233017,0.557309 0.1058087,0.020535 0.330263,0.013347 0.4369949,-0.015065 C 8.9273383,8.9261648 9.1300999,8.8031091 9.2479793,8.6719249 9.3497026,8.558718 9.4316453,8.391306 9.4740114,8.235115 c 0.034652,-0.1277581 0.034652,-0.3693021 0,-0.4970598 C 9.393561,7.4414403 9.2029191,7.2229953 8.9315348,7.0903743 8.7670195,7.0099746 8.6978322,6.9999998 8.49454,6.9999998 z m 0.00546,-3.2619392 c 0.3435847,0 0.6929605,0.032658 1.0213496,0.1135478 1.5301191,0.3769006 2.7439931,1.5920313 3.1207921,3.1225655 0.161741,0.6569562 0.161741,1.3868971 0,2.0438611 -0.413142,1.678183 -1.83062,2.926869 -3.5463542,3.179339 -0.2588467,0.03813 -0.7345973,0.05226 -0.9646085,0.02839 C 7.0640041,12.114865 6.1115479,11.676536 5.4075798,10.919964 4.646015,10.101478 4.2443755,9.103245 4.2443755,7.9961045 4.2443755,7.312468 4.3736153,6.7297403 4.6699382,6.1225653 5.2189083,4.9976584 6.2624431,4.1511883 7.4786511,3.8516084 7.8070437,3.7707188 8.1564165,3.7380606 8.5000013,3.7380606 z m 0,-0.738061 c -0.2467741,0 -0.4911568,0.00498 -0.6525293,0.028388 C 6.7061092,3.193961 5.780077,3.6778426 4.9820172,4.4761218 4.1839582,5.2743991 3.700631,6.2015307 3.5351045,7.3432048 c -0.046806,0.3228327 -0.046806,0.9829673 0,1.3058001 0.1655265,1.1416745 0.6488537,2.0688051 1.4469127,2.8670811 0.855663,0.855896 1.9055518,1.365449 3.1207923,1.476123 0.2703983,0.02463 0.8115804,-0.0132 1.1064627,-0.05677 1.0961058,-0.161943 2.0226018,-0.633028 2.8087138,-1.419348 0.798063,-0.798276 1.28138,-1.7254067 1.446912,-2.8670813 0.0468,-0.3228328 0.0468,-0.9829675 0,-1.3058001 C 13.299366,6.2015304 12.816049,5.2743988 12.017986,4.4761215 11.219926,3.6778423 10.293899,3.1939607 9.1525306,3.0283866 8.991163,3.0049817 8.7467754,2.9999996 8.5000013,2.9999996 z" />
|
||||
<rect
|
||||
style="color:#000000;fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
id="rect3809"
|
||||
width="1.4146408"
|
||||
height="13.103647"
|
||||
x="-2.9486878"
|
||||
y="2.1104977"
|
||||
transform="matrix(0,-1,0.99999431,0.00337266,0,0)" />
|
||||
<rect
|
||||
style="color:#000000;fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
id="rect3809-0"
|
||||
width="1.1411272"
|
||||
height="13.103621"
|
||||
x="-14.135278"
|
||||
y="2.1503386"
|
||||
transform="matrix(0,-1,0.9999963,0.00272058,0,0)" />
|
||||
<rect
|
||||
style="color:#000000;fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
id="rect3809-0-7"
|
||||
width="1.1411272"
|
||||
height="13.103621"
|
||||
x="-15.180982"
|
||||
y="-14.649317"
|
||||
transform="matrix(-1,0,0.00272058,-0.9999963,0,0)" />
|
||||
</svg>
|
||||
|
Depois Largura: | Altura: | Tamanho: 5.6 KiB |
|
Antes Largura: | Altura: | Tamanho: 60 KiB |
|
Antes Largura: | Altura: | Tamanho: 610 B |
|
Depois Largura: | Altura: | Tamanho: 3.7 KiB |
|
Depois Largura: | Altura: | Tamanho: 1.3 KiB |
|
Depois Largura: | Altura: | Tamanho: 1.2 KiB |
|
Depois Largura: | Altura: | Tamanho: 54 KiB |
|
Depois Largura: | Altura: | Tamanho: 2.7 KiB |
|
Depois Largura: | Altura: | Tamanho: 68 KiB |
|
Depois Largura: | Altura: | Tamanho: 19 KiB |
|
Depois Largura: | Altura: | Tamanho: 3.8 KiB |
|
Depois Largura: | Altura: | Tamanho: 17 KiB |
|
Depois Largura: | Altura: | Tamanho: 22 KiB |
|
Depois Largura: | Altura: | Tamanho: 2.7 KiB |
|
Depois Largura: | Altura: | Tamanho: 3.9 KiB |
@@ -0,0 +1,115 @@
|
||||
<?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:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="24"
|
||||
height="24"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.48.4 r9939"
|
||||
sodipodi:docname="entryview.svg"
|
||||
inkscape:export-filename="/home/jrbastien/Dropbox/CoverArt/2.0/entryview17b.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="16"
|
||||
inkscape:cx="-5.40625"
|
||||
inkscape:cy="9.34375"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
inkscape:window-width="1313"
|
||||
inkscape:window-height="744"
|
||||
inkscape:window-x="53"
|
||||
inkscape:window-y="24"
|
||||
inkscape:window-maximized="1">
|
||||
<inkscape:grid
|
||||
snapvisiblegridlinesonly="true"
|
||||
enabled="true"
|
||||
visible="true"
|
||||
empspacing="5"
|
||||
id="grid3833"
|
||||
type="xygrid" />
|
||||
</sodipodi:namedview>
|
||||
<defs
|
||||
id="defs4" />
|
||||
<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" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
transform="translate(0,-1028.3622)"
|
||||
id="layer1"
|
||||
inkscape:groupmode="layer"
|
||||
inkscape:label="Calque 1">
|
||||
<path
|
||||
style="color:#000000;fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
d="M 1 4 L 1 20 L 17 20 L 17 16 L 16 16 L 16 19 L 2 19 L 2 5 L 16 5 L 16 9 L 17 9 L 17 4 L 1 4 z "
|
||||
transform="translate(0,1028.3622)"
|
||||
id="rect3048" />
|
||||
<path
|
||||
inkscape:transform-center-x="-1.3333345"
|
||||
transform="matrix(0.34143645,0,0,0.3696158,10.73858,1033.6309)"
|
||||
d="m 24.196071,26.328102 0,-13.527561 11.715211,6.76378 z"
|
||||
inkscape:randomized="0"
|
||||
inkscape:rounded="0"
|
||||
inkscape:flatsided="true"
|
||||
sodipodi:arg2="3.1415927"
|
||||
sodipodi:arg1="2.0943951"
|
||||
sodipodi:r2="3.9050703"
|
||||
sodipodi:r1="7.8101406"
|
||||
sodipodi:cy="19.564322"
|
||||
sodipodi:cx="28.101141"
|
||||
sodipodi:sides="3"
|
||||
id="path3765-3-7"
|
||||
style="color:#000000;fill:#bebebe;stroke:none;stroke-width:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;fill-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
sodipodi:type="star"
|
||||
inkscape:transform-center-y="4.6976063e-005" />
|
||||
<rect
|
||||
y="1040.3622"
|
||||
x="11.697332"
|
||||
height="1"
|
||||
width="9.629981"
|
||||
id="rect3090"
|
||||
style="color:#000000;fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path
|
||||
inkscape:transform-center-x="1.3333345"
|
||||
transform="matrix(-0.34143645,0,0,0.3696158,21.26142,1033.6309)"
|
||||
d="m 24.196071,26.328102 0,-13.527561 11.715211,6.76378 z"
|
||||
inkscape:randomized="0"
|
||||
inkscape:rounded="0"
|
||||
inkscape:flatsided="true"
|
||||
sodipodi:arg2="3.1415927"
|
||||
sodipodi:arg1="2.0943951"
|
||||
sodipodi:r2="3.9050703"
|
||||
sodipodi:r1="7.8101406"
|
||||
sodipodi:cy="19.564322"
|
||||
sodipodi:cx="28.101141"
|
||||
sodipodi:sides="3"
|
||||
id="path3765-3-7-4"
|
||||
style="color:#000000;fill:#bebebe;stroke:none;stroke-width:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;fill-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
sodipodi:type="star"
|
||||
inkscape:transform-center-y="4.6976063e-005" />
|
||||
</g>
|
||||
</svg>
|
||||
|
Depois Largura: | Altura: | Tamanho: 4.2 KiB |
@@ -0,0 +1,202 @@
|
||||
<?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="744.09448819"
|
||||
height="1052.3622047"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.48.3.1 r9886"
|
||||
sodipodi:docname="Franco.svg">
|
||||
<defs
|
||||
id="defs4">
|
||||
<linearGradient
|
||||
y2="244.95164"
|
||||
x2="99.124153"
|
||||
y1="400.5535"
|
||||
x1="101.42937"
|
||||
gradientTransform="matrix(1.340328,0,0,1.340328,-31.467381,555.95415)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient6460-1"
|
||||
xlink:href="#linearGradient6364-8"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient6364-8">
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop6366-5" />
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop6368-9" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
y2="244.95164"
|
||||
x2="99.124153"
|
||||
y1="400.5535"
|
||||
x1="101.42937"
|
||||
gradientTransform="matrix(1.340328,0,0,1.340328,133.59345,299.76445)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient3022"
|
||||
xlink:href="#linearGradient6364-8"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient6364-8"
|
||||
id="linearGradient3966"
|
||||
x1="440.96436"
|
||||
y1="94.980904"
|
||||
x2="447.48547"
|
||||
y2="491.33676"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient6364-8-2"
|
||||
id="linearGradient3966-8"
|
||||
x1="440.96436"
|
||||
y1="94.980904"
|
||||
x2="447.48547"
|
||||
y2="491.33676"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient6364-8-2">
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop6366-5-8" />
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop6368-9-1" />
|
||||
</linearGradient>
|
||||
<filter
|
||||
id="filter4002"
|
||||
inkscape:label="Inner Shadow"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:menu-tooltip="Adds a colorizable drop shadow inside"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur4004"
|
||||
stdDeviation="7"
|
||||
result="result8" />
|
||||
<feOffset
|
||||
id="feOffset4006"
|
||||
dx="4"
|
||||
dy="4"
|
||||
result="result11" />
|
||||
<feComposite
|
||||
id="feComposite4008"
|
||||
in2="result11"
|
||||
result="result6"
|
||||
in="SourceGraphic"
|
||||
operator="in" />
|
||||
<feFlood
|
||||
id="feFlood4010"
|
||||
result="result10"
|
||||
in="result6"
|
||||
flood-opacity="1"
|
||||
flood-color="rgb(0,0,0)" />
|
||||
<feBlend
|
||||
id="feBlend4012"
|
||||
in2="result10"
|
||||
mode="normal"
|
||||
in="result6"
|
||||
result="result12" />
|
||||
<feComposite
|
||||
id="feComposite4014"
|
||||
in2="SourceGraphic"
|
||||
result="result2"
|
||||
operator="in" />
|
||||
</filter>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.52225797"
|
||||
inkscape:cx="353.55944"
|
||||
inkscape:cy="380.57923"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1280"
|
||||
inkscape:window-height="1000"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="24"
|
||||
inkscape:window-maximized="1" />
|
||||
<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" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<path
|
||||
id="path3048"
|
||||
style="fill:#333333"
|
||||
d="m 196.23032,388.02753 c -3.1625,-0.17639 -5.74997,-0.41075 -5.74994,-0.5208 4e-5,-0.11006 1.35004,-7.10107 3,-15.53558 1.64997,-8.43452 2.99994,-15.52202 2.99994,-15.75 0,-0.22799 3.08413,-0.41452 6.85362,-0.41452 l 6.85363,0 3.13824,15.6748 c 1.72603,8.62114 3.0294,15.7589 2.89638,15.86169 -0.62424,0.48234 -14.87054,0.97005 -19.99187,0.68441 z m -37.58129,91.8046 c 5.68507,-26.43563 21.62839,-41.0255 44.83129,-41.0255 18.15518,0 31.82505,8.81969 39.52313,25.5 2.87004,6.21885 3.86007,9.44962 6.43518,21 l 0.66884,3 21.92273,0 c 20.18917,0 21.94973,-0.14015 22.26407,-1.77237 0.40759,-2.11648 -10.69635,-24.34334 -26.54806,-53.14148 -11.39707,-20.70531 -11.50643,-20.96649 -10.96706,-26.19245 0.39075,-3.78605 0.15862,-5.5991 -0.82097,-6.41209 -1.04547,-0.86766 -1.11356,-1.68703 -0.29035,-3.49378 1.48268,-3.25413 0.45149,-5.28386 -2.87844,-5.66571 -2.4629,-0.28243 -3.42556,-1.55441 -7.8119,-10.32212 -6.23802,-12.46895 -13.04989,-32.67223 -12.70848,-37.69199 0.14323,-2.10603 -0.32646,-4.23152 -1.0934,-4.94795 -1.12497,-1.05087 -1.10874,-1.72854 0.0994,-4.15034 0.79415,-1.59191 1.50272,-5.1916 1.5746,-7.9993 0.11147,-4.35393 -0.19922,-5.27281 -2.112,-6.24624 -3.68961,-1.87767 -6.00171,-5.26503 -6.6488,-9.74089 -1.36194,-9.42061 -8.59426,-100.10119 -10.02716,-125.72329 -1.81034,-32.3711 -1.86263,-43.55534 -0.21854,-46.73467 2.00375,-3.87483 2.13663,-10.60596 0.24044,-12.17965 -0.76822,-0.63757 -1.16783,-2.03465 -0.88802,-3.10463 0.37015,-1.41548 -0.18621,-2.20962 -2.04244,-2.91536 -3.73433,-1.41979 -4.67277,-4.0055 -4.67277,-12.87495 0,-10.503593 -0.78166,-14.190743 -3.00837,-14.190743 -2.34316,0 -2.96163,2.76543 -2.97798,13.315743 -0.0151,9.73751 -0.89079,12.30685 -4.68642,13.74995 -1.90884,0.72574 -2.41663,1.48443 -2.01682,3.0133 0.32514,1.24334 -0.0225,2.25705 -0.88803,2.58917 -2.02638,0.77759 -1.87332,9.71399 0.22113,12.91052 1.43529,2.19053 1.57348,5.00498 1.09076,22.21482 -0.30401,10.83857 -1.0474,24.6565 -1.65198,30.7065 -0.60458,6.05 -2.02755,24.275 -3.16216,40.5 -1.80776,25.85116 -3.20459,43.53305 -5.49034,69.5 -1.10665,12.57186 -2.71725,16.47258 -7.85201,19.01682 -2.69729,1.33648 -3.098,5.22174 -1.20469,11.68045 1.09273,3.72763 1.22363,5.68776 0.47345,7.08948 -0.57027,1.06555 -0.81718,3.08648 -0.5487,4.49096 0.65367,3.41945 -7.51963,27.25432 -13.27839,38.72229 -4.17675,8.31754 -4.76589,9.02376 -7.76945,9.31336 -3.47466,0.33502 -4.25346,2.44314 -2.27101,6.14738 0.70326,1.31405 0.58446,2.15668 -0.42181,2.99181 -1.02028,0.84675 -1.25209,2.60341 -0.85335,6.46677 0.53305,5.16476 0.33701,5.68256 -7.45546,19.69245 -11.62472,20.89979 -25.68313,47.58052 -28.25219,53.61838 -3.64643,8.56989 -4.21545,8.34839 20.65307,8.03942 l 21.697,-0.26957 1.82246,-8.4745 z"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:export-filename="/home/jrbastien/Ubuntu One/CoverArt/0.8 dark icons/Tour_Effel_Dark.png"
|
||||
inkscape:export-xdpi="29.227327"
|
||||
inkscape:export-ydpi="29.227327" />
|
||||
<path
|
||||
style="fill:#000000"
|
||||
d=""
|
||||
id="path3019"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:#000000"
|
||||
d=""
|
||||
id="path3017"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:#000000"
|
||||
d=""
|
||||
id="path3015"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:#000000"
|
||||
d=""
|
||||
id="path3013"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path3048-1"
|
||||
style="fill:url(#linearGradient3966);stroke:#666666;fill-opacity:1;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
d="m 435.07498,387.56901 c -3.1625,-0.17639 -5.74997,-0.41075 -5.74994,-0.5208 4e-5,-0.11006 1.35004,-7.10107 3,-15.53558 1.64997,-8.43452 2.99994,-15.52202 2.99994,-15.75 0,-0.22799 3.08413,-0.41452 6.85362,-0.41452 l 6.85363,0 3.13824,15.6748 c 1.72603,8.62114 3.0294,15.7589 2.89638,15.86169 -0.62424,0.48234 -14.87054,0.97005 -19.99187,0.68441 z m -37.58129,91.8046 c 5.68507,-26.43563 21.62839,-41.0255 44.83129,-41.0255 18.15518,0 31.82505,8.81969 39.52313,25.5 2.87004,6.21885 3.86007,9.44962 6.43518,21 l 0.66884,3 21.92273,0 c 20.18917,0 21.94973,-0.14015 22.26407,-1.77237 0.40759,-2.11648 -10.69635,-24.34334 -26.54806,-53.14148 -11.39707,-20.70531 -11.50643,-20.96649 -10.96706,-26.19245 0.39075,-3.78605 0.15862,-5.5991 -0.82097,-6.41209 -1.04547,-0.86766 -1.11356,-1.68703 -0.29035,-3.49378 1.48268,-3.25413 0.45149,-5.28386 -2.87844,-5.66571 -2.4629,-0.28243 -3.42556,-1.55441 -7.8119,-10.32212 -6.23802,-12.46895 -13.04989,-32.67223 -12.70848,-37.69199 0.14323,-2.10603 -0.32646,-4.23152 -1.0934,-4.94795 -1.12497,-1.05087 -1.10874,-1.72854 0.0994,-4.15034 0.79415,-1.59191 1.50272,-5.1916 1.5746,-7.9993 0.11147,-4.35393 -0.19922,-5.27281 -2.112,-6.24624 -3.68961,-1.87767 -6.00171,-5.26503 -6.6488,-9.74089 -1.36194,-9.42061 -8.59426,-100.10119 -10.02716,-125.72329 -1.81034,-32.3711 -1.86263,-43.55534 -0.21854,-46.73467 2.00375,-3.87483 2.13663,-10.60596 0.24044,-12.17965 -0.76822,-0.63757 -1.16783,-2.03465 -0.88802,-3.10463 0.37015,-1.41548 -0.18621,-2.20962 -2.04244,-2.91536 -3.73433,-1.41979 -4.67277,-4.0055 -4.67277,-12.87495 0,-10.503592 -0.78166,-14.190742 -3.00837,-14.190742 -2.34316,0 -2.96163,2.76543 -2.97798,13.315742 -0.0151,9.73751 -0.89079,12.30685 -4.68642,13.74995 -1.90884,0.72574 -2.41663,1.48443 -2.01682,3.0133 0.32514,1.24334 -0.0225,2.25705 -0.88803,2.58917 -2.02638,0.77759 -1.87332,9.71399 0.22113,12.91052 1.43529,2.19053 1.57348,5.00498 1.09076,22.21482 -0.30401,10.83857 -1.0474,24.6565 -1.65198,30.7065 -0.60458,6.05 -2.02755,24.275 -3.16216,40.5 -1.80776,25.85116 -3.20459,43.53305 -5.49034,69.5 -1.10665,12.57186 -2.71725,16.47258 -7.85201,19.01682 -2.69729,1.33648 -3.098,5.22174 -1.20469,11.68045 1.09273,3.72763 1.22363,5.68776 0.47345,7.08948 -0.57027,1.06555 -0.81718,3.08648 -0.5487,4.49096 0.65367,3.41945 -7.51963,27.25432 -13.27839,38.72229 -4.17675,8.31754 -4.76589,9.02376 -7.76945,9.31336 -3.47466,0.33502 -4.25346,2.44314 -2.27101,6.14738 0.70326,1.31405 0.58446,2.15668 -0.42181,2.99181 -1.02028,0.84675 -1.25209,2.60341 -0.85335,6.46677 0.53305,5.16476 0.33701,5.68256 -7.45546,19.69245 -11.62472,20.89979 -25.68313,47.58052 -28.25219,53.61838 -3.64643,8.56989 -4.21545,8.34839 20.65307,8.03942 l 21.697,-0.26957 1.82246,-8.4745 z"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:export-filename="/home/jrbastien/Ubuntu One/CoverArt/0.8 icons/Tour_Effel.png"
|
||||
inkscape:export-xdpi="28.748562"
|
||||
inkscape:export-ydpi="28.748562" />
|
||||
<path
|
||||
id="path3048-1-8"
|
||||
style="fill:#b3b3b3;fill-opacity:1;stroke:none;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none;filter:url(#filter4002)"
|
||||
d="m 201.47395,870.08916 c -3.1625,-0.17639 -5.74997,-0.41075 -5.74994,-0.5208 4e-5,-0.11006 1.35004,-7.10107 3,-15.53558 1.64997,-8.43452 2.99994,-15.52202 2.99994,-15.75 0,-0.22799 3.08413,-0.41452 6.85362,-0.41452 l 6.85363,0 3.13824,15.6748 c 1.72603,8.62114 3.0294,15.7589 2.89638,15.86169 -0.62424,0.48234 -14.87054,0.97005 -19.99187,0.68441 z m -37.58129,91.8046 c 5.68507,-26.43563 21.62839,-41.0255 44.83129,-41.0255 18.15518,0 31.82505,8.81969 39.52313,25.5 2.87004,6.21885 3.86007,9.44962 6.43518,21 l 0.66884,3 21.92273,0 c 20.18917,0 21.94973,-0.14015 22.26407,-1.77237 0.40759,-2.11648 -10.69635,-24.34334 -26.54806,-53.14148 -11.39707,-20.70531 -11.50643,-20.96649 -10.96706,-26.19245 0.39075,-3.78605 0.15862,-5.5991 -0.82097,-6.41209 -1.04547,-0.86766 -1.11356,-1.68703 -0.29035,-3.49378 1.48268,-3.25413 0.45149,-5.28386 -2.87844,-5.66571 -2.4629,-0.28243 -3.42556,-1.55441 -7.8119,-10.32212 -6.23802,-12.46895 -13.04989,-32.67223 -12.70848,-37.69199 0.14323,-2.10603 -0.32646,-4.23152 -1.0934,-4.94795 -1.12497,-1.05087 -1.10874,-1.72854 0.0994,-4.15034 0.79415,-1.59191 1.50272,-5.1916 1.5746,-7.9993 0.11147,-4.35393 -0.19922,-5.27281 -2.112,-6.24624 -3.68961,-1.87767 -6.00171,-5.26503 -6.6488,-9.74089 -1.36194,-9.42061 -8.59426,-100.10119 -10.02716,-125.72328 -1.81034,-32.3711 -1.86263,-43.55534 -0.21854,-46.73467 2.00375,-3.87483 2.13663,-10.60596 0.24044,-12.17965 -0.76822,-0.63757 -1.16783,-2.03465 -0.88802,-3.10463 0.37015,-1.41548 -0.18621,-2.20962 -2.04244,-2.91536 -3.73433,-1.41979 -4.67277,-4.0055 -4.67277,-12.87495 0,-10.5036 -0.78166,-14.19075 -3.00837,-14.19075 -2.34316,0 -2.96163,2.76543 -2.97798,13.31575 -0.0151,9.73751 -0.89079,12.30685 -4.68642,13.74995 -1.90884,0.72574 -2.41663,1.48443 -2.01682,3.0133 0.32514,1.24334 -0.0225,2.25705 -0.88803,2.58917 -2.02638,0.77759 -1.87332,9.71399 0.22113,12.91052 1.43529,2.19053 1.57348,5.00498 1.09076,22.21482 -0.30401,10.83857 -1.0474,24.6565 -1.65198,30.70649 -0.60458,6.05 -2.02755,24.275 -3.16216,40.5 -1.80776,25.85116 -3.20459,43.53305 -5.49034,69.5 -1.10665,12.57186 -2.71725,16.47258 -7.85201,19.01682 -2.69729,1.33648 -3.098,5.22174 -1.20469,11.68045 1.09273,3.72763 1.22363,5.68776 0.47345,7.08948 -0.57027,1.06555 -0.81718,3.08648 -0.5487,4.49096 0.65367,3.41945 -7.51963,27.25432 -13.27839,38.72229 -4.17675,8.31754 -4.76589,9.02376 -7.76945,9.31336 -3.47466,0.33502 -4.25346,2.44314 -2.27101,6.14738 0.70326,1.31405 0.58446,2.15668 -0.42181,2.99181 -1.02028,0.84675 -1.25209,2.60341 -0.85335,6.46677 0.53305,5.16476 0.33701,5.68256 -7.45546,19.69245 -11.62472,20.89979 -25.68313,47.58052 -28.25219,53.61838 -3.64643,8.56989 -4.21545,8.34839 20.65307,8.03942 l 21.697,-0.26957 1.82246,-8.4745 z"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:export-filename="/home/jrbastien/Ubuntu One/CoverArt/0.8 light/Tour_Effel_Light.png"
|
||||
inkscape:export-xdpi="100"
|
||||
inkscape:export-ydpi="100" />
|
||||
</g>
|
||||
</svg>
|
||||
|
Depois Largura: | Altura: | Tamanho: 14 KiB |
@@ -0,0 +1,373 @@
|
||||
<?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:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="744.09448819"
|
||||
height="1052.3622047"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.48.4 r9939"
|
||||
sodipodi:docname="Genre_Quebecois.svg">
|
||||
<defs
|
||||
id="defs4">
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
id="filter3839">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="1.885992"
|
||||
id="feGaussianBlur3841" />
|
||||
</filter>
|
||||
<filter
|
||||
color-interpolation-filters="sRGB"
|
||||
inkscape:collect="always"
|
||||
id="filter3839-4">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="1.885992"
|
||||
id="feGaussianBlur3841-9" />
|
||||
</filter>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.53212713"
|
||||
inkscape:cx="231.89759"
|
||||
inkscape:cy="589.80239"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1440"
|
||||
inkscape:window-height="838"
|
||||
inkscape:window-x="1272"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1" />
|
||||
<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" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<path
|
||||
style="fill:#333333;stroke:none;filter:url(#filter3839)"
|
||||
d="m 158.66886,202.42048 c -1.24282,-1.91859 -3.99614,-4.74624 -6.11849,-6.28367 l -3.85881,-2.79531 2.42335,-2.95395 c 4.57156,-5.57251 10.43395,-19.45395 8.21576,-19.45395 -0.49617,0 -0.90213,0.47833 -0.90213,1.06295 0,0.58462 -1.20409,3.52202 -2.67576,6.52756 -3.34771,6.83692 -10.71552,13.84722 -16.31733,15.52557 -3.7809,1.13278 -4.6427,1.05924 -7.87617,-0.67206 -3.17425,-1.6996 -3.66904,-2.47097 -3.93536,-6.13518 -0.26372,-3.62839 0.0617,-4.43119 2.42372,-5.97883 2.02052,-1.3239 2.83615,-1.46425 3.14391,-0.54099 0.7042,2.1126 3.28859,4.21098 5.18629,4.21098 5.25901,0 12.87594,-5.72708 14.96233,-11.25 l 1.03887,-2.75 -4.77525,0 c -5.23603,0 -7.17525,-1.24133 -7.17525,-4.59301 0,-2.69216 1.70981,-3.40699 8.14917,-3.40699 4.70924,0 4.94713,-0.12472 4.29153,-2.25 -2.16346,-7.01337 -10.02555,-15.96707 -17.26216,-19.65891 -4.35269,-2.22058 -10.13687,-2.71894 -13.10713,-1.12931 -3.83357,2.05166 -4.76949,7.97721 -2.4937,15.78822 0.61968,2.12688 0.37382,2.25 -4.4932,2.25 -2.83181,0 -6.60382,-0.60797 -8.38225,-1.35104 -7.92003,-3.3092 -12.963546,-14.24304 -10.609576,-23.00046 2.312466,-8.60297 14.134186,-15.55932 24.463236,-14.39509 8.93345,1.00693 20.22327,8.99665 26.58443,18.81358 1.75731,2.71199 3.35834,4.76765 3.55785,4.56814 0.69158,-0.69158 -5.11825,-13.16126 -8.62402,-18.5098 -2.9593,-4.51482 -3.58357,-6.44847 -3.90216,-12.08672 -0.5025,-8.89315 1.68676,-13.162576 10.23904,-19.967833 3.56979,-2.84057 7.41267,-6.38104 8.53973,-7.86772 l 2.04921,-2.70305 2.04921,2.70305 c 1.12706,1.48668 4.96994,5.02715 8.53973,7.86772 7.83453,6.234117 10.41106,10.793073 10.41106,18.421503 0,6.62555 -1.41372,10.31711 -6.48774,16.94111 -4.65595,6.0782 -8.05961,12.86293 -8.93796,17.81661 -0.36571,2.0625 -0.47319,3.75 -0.23884,3.75 0.23435,0 1.71724,-2.58058 3.29531,-5.73461 3.50271,-7.00073 14.20441,-17.99154 20.47842,-21.03164 10.08278,-4.88567 21.38081,-3.49588 28.76857,3.53885 7.18183,6.83865 7.52916,18.27754 0.78809,25.95519 -3.92717,4.4728 -8.15884,6.27221 -14.75036,6.27221 -4.86702,0 -5.11288,-0.12312 -4.4932,-2.25 1.5791,-5.41982 1.74838,-8.92375 0.56872,-11.7717 -1.53377,-3.70286 -3.70253,-4.9783 -8.46511,-4.9783 -8.75282,0 -21.75002,11.32269 -24.9666,21.75 -0.6556,2.12528 -0.41771,2.25 4.29152,2.25 6.43937,0 8.14918,0.71483 8.14918,3.40699 0,3.35168 -1.93922,4.59301 -7.17525,4.59301 l -4.77525,0 1.03887,2.75 c 2.08639,5.52292 9.70332,11.25 14.96232,11.25 1.89771,0 4.4821,-2.09838 5.1863,-4.21098 0.30776,-0.92326 1.12338,-0.78291 3.14391,0.54099 2.362,1.54764 2.68744,2.35044 2.42372,5.97883 -0.26632,3.66421 -0.76111,4.43558 -3.93536,6.13518 -3.23347,1.7313 -4.09527,1.80484 -7.87617,0.67206 -5.60181,-1.67835 -12.96962,-8.68865 -16.31733,-15.52557 -1.47167,-3.00554 -2.67576,-5.94294 -2.67576,-6.52756 0,-0.58462 -0.40596,-1.06295 -0.90213,-1.06295 -2.21819,0 3.6442,13.88144 8.21576,19.45395 l 2.42335,2.95395 -3.85881,2.79531 c -2.12235,1.53743 -4.87567,4.36508 -6.11849,6.28367 -1.24283,1.9186 -2.48468,3.48836 -2.75968,3.48836 -0.275,0 -1.51685,-1.56976 -2.75968,-3.48836 z m 3.75968,-42.48688 c 0,-1.65 -0.45,-3 -1,-3 -0.55,0 -1,1.35 -1,3 0,1.65 0.45,3 1,3 0.55,0 1,-1.35 1,-3 z"
|
||||
id="path3047-4"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:export-filename="/home/jrbastien/Ubuntu One/CoverArt/1.0 New light/path3047.png"
|
||||
inkscape:export-xdpi="82.564102"
|
||||
inkscape:export-ydpi="82.564102" />
|
||||
<path
|
||||
style="fill:#ffffff;stroke:none;filter:url(#filter3839-4)"
|
||||
d="m 158.66886,208.42047 c -1.24282,-1.91859 -3.99614,-4.74624 -6.11849,-6.28367 l -3.85881,-2.79531 2.42335,-2.95395 c 4.57156,-5.57251 10.43395,-19.45394 8.21576,-19.45394 -0.49617,0 -0.90213,0.47833 -0.90213,1.06295 0,0.58462 -1.20409,3.52202 -2.67576,6.52755 -3.34771,6.83692 -10.71552,13.84722 -16.31733,15.52557 -3.7809,1.13278 -4.6427,1.05924 -7.87617,-0.67206 -3.17425,-1.6996 -3.66904,-2.47097 -3.93536,-6.13518 -0.26372,-3.62839 0.0617,-4.43119 2.42372,-5.97883 2.02052,-1.3239 2.83615,-1.46425 3.14391,-0.54099 0.7042,2.1126 3.28859,4.21098 5.18629,4.21098 5.25901,0 12.87594,-5.72708 14.96233,-11.24999 l 1.03887,-2.75 -4.77525,0 c -5.23603,0 -7.17525,-1.24133 -7.17525,-4.59301 0,-2.69216 1.70981,-3.40699 8.14917,-3.40699 4.70924,0 4.94713,-0.12472 4.29153,-2.25 -2.16346,-7.01337 -10.02555,-15.96707 -17.26216,-19.65891 -4.35269,-2.22058 -10.13687,-2.71894 -13.10713,-1.12931 -3.83357,2.05166 -4.76949,7.97721 -2.4937,15.78822 0.61968,2.12688 0.37382,2.25 -4.4932,2.25 -2.83181,0 -6.60382,-0.60797 -8.38225,-1.35104 -7.92003,-3.3092 -12.963546,-14.24304 -10.609576,-23.00046 2.312466,-8.60297 14.134186,-15.55932 24.463236,-14.39509 8.93345,1.00693 20.22327,8.99665 26.58443,18.81358 1.75731,2.71199 3.35834,4.76765 3.55785,4.56814 0.69158,-0.69158 -5.11825,-13.16126 -8.62402,-18.5098 -2.9593,-4.51482 -3.58357,-6.44847 -3.90216,-12.08672 -0.5025,-8.89315 1.68676,-13.16258 10.23904,-19.967836 3.56979,-2.84057 7.41267,-6.38104 8.53973,-7.86772 l 2.04921,-2.70305 2.04921,2.70305 c 1.12706,1.48668 4.96994,5.02715 8.53973,7.86772 7.83453,6.234116 10.41106,10.793076 10.41106,18.421506 0,6.62555 -1.41372,10.31711 -6.48774,16.94111 -4.65595,6.0782 -8.05961,12.86293 -8.93796,17.81661 -0.36571,2.0625 -0.47319,3.75 -0.23884,3.75 0.23435,0 1.71724,-2.58058 3.29531,-5.73461 3.50271,-7.00073 14.20441,-17.99154 20.47842,-21.03164 10.08278,-4.88567 21.38081,-3.49588 28.76857,3.53885 7.18183,6.83865 7.52916,18.27754 0.78809,25.95519 -3.92717,4.4728 -8.15884,6.27221 -14.75036,6.27221 -4.86702,0 -5.11288,-0.12312 -4.4932,-2.25 1.5791,-5.41982 1.74838,-8.92375 0.56872,-11.7717 -1.53377,-3.70286 -3.70253,-4.9783 -8.46511,-4.9783 -8.75282,0 -21.75002,11.32269 -24.9666,21.75 -0.6556,2.12528 -0.41771,2.25 4.29152,2.25 6.43937,0 8.14918,0.71483 8.14918,3.40699 0,3.35168 -1.93922,4.59301 -7.17525,4.59301 l -4.77525,0 1.03887,2.75 c 2.08639,5.52291 9.70332,11.24999 14.96232,11.24999 1.89771,0 4.4821,-2.09838 5.1863,-4.21098 0.30776,-0.92326 1.12338,-0.78291 3.14391,0.54099 2.362,1.54764 2.68744,2.35044 2.42372,5.97883 -0.26632,3.66421 -0.76111,4.43558 -3.93536,6.13518 -3.23347,1.7313 -4.09527,1.80484 -7.87617,0.67206 -5.60181,-1.67835 -12.96962,-8.68865 -16.31733,-15.52557 -1.47167,-3.00553 -2.67576,-5.94293 -2.67576,-6.52755 0,-0.58462 -0.40596,-1.06295 -0.90213,-1.06295 -2.21819,0 3.6442,13.88143 8.21576,19.45394 l 2.42335,2.95395 -3.85881,2.79531 c -2.12235,1.53743 -4.87567,4.36508 -6.11849,6.28367 -1.24283,1.9186 -2.48468,3.48836 -2.75968,3.48836 -0.275,0 -1.51685,-1.56976 -2.75968,-3.48836 z m 3.75968,-42.48687 c 0,-1.65 -0.45,-3 -1,-3 -0.55,0 -1,1.35 -1,3 0,1.65 0.45,3 1,3 0.55,0 1,-1.35 1,-3 z"
|
||||
id="path3047-4-5"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:export-filename="/home/jrbastien/Ubuntu One/CoverArt/1.0 New light/path3047.png"
|
||||
inkscape:export-xdpi="82.564102"
|
||||
inkscape:export-ydpi="82.564102" />
|
||||
<path
|
||||
style="fill:#b3b3b3;stroke:#333333"
|
||||
d="m 158.66886,205.13477 c -1.24282,-1.91859 -3.99614,-4.74624 -6.11849,-6.28367 l -3.85881,-2.79531 2.42335,-2.95395 c 4.57156,-5.57251 10.43395,-19.45395 8.21576,-19.45395 -0.49617,0 -0.90213,0.47833 -0.90213,1.06295 0,0.58462 -1.20409,3.52202 -2.67576,6.52756 -3.34771,6.83692 -10.71552,13.84722 -16.31733,15.52557 -3.7809,1.13278 -4.6427,1.05924 -7.87617,-0.67206 -3.17425,-1.6996 -3.66904,-2.47097 -3.93536,-6.13518 -0.26372,-3.62839 0.0617,-4.43119 2.42372,-5.97883 2.02052,-1.3239 2.83615,-1.46425 3.14391,-0.54099 0.7042,2.1126 3.28859,4.21098 5.18629,4.21098 5.25901,0 12.87594,-5.72708 14.96233,-11.25 l 1.03887,-2.75 -4.77525,0 c -5.23603,0 -7.17525,-1.24133 -7.17525,-4.59301 0,-2.69216 1.70981,-3.40699 8.14917,-3.40699 4.70924,0 4.94713,-0.12472 4.29153,-2.25 -2.16346,-7.01337 -10.02555,-15.96707 -17.26216,-19.65891 -4.35269,-2.22058 -10.13687,-2.71894 -13.10713,-1.12931 -3.83357,2.05166 -4.76949,7.97721 -2.4937,15.78822 0.61968,2.12688 0.37382,2.25 -4.4932,2.25 -2.83181,0 -6.60382,-0.60797 -8.38225,-1.35104 -7.92003,-3.3092 -12.963546,-14.24304 -10.609576,-23.00046 2.312466,-8.60297 14.134186,-15.55932 24.463236,-14.39509 8.93345,1.00693 20.22327,8.99665 26.58443,18.81358 1.75731,2.71199 3.35834,4.76765 3.55785,4.56814 0.69158,-0.69158 -5.11825,-13.16126 -8.62402,-18.5098 -2.9593,-4.51482 -3.58357,-6.44847 -3.90216,-12.08672 -0.5025,-8.89315 1.68676,-13.16258 10.23904,-19.967836 3.56979,-2.84057 7.41267,-6.38104 8.53973,-7.86772 l 2.04921,-2.70305 2.04921,2.70305 c 1.12706,1.48668 4.96994,5.02715 8.53973,7.86772 7.83453,6.234116 10.41106,10.793076 10.41106,18.421506 0,6.62555 -1.41372,10.31711 -6.48774,16.94111 -4.65595,6.0782 -8.05961,12.86293 -8.93796,17.81661 -0.36571,2.0625 -0.47319,3.75 -0.23884,3.75 0.23435,0 1.71724,-2.58058 3.29531,-5.73461 3.50271,-7.00073 14.20441,-17.99154 20.47842,-21.03164 10.08278,-4.88567 21.38081,-3.49588 28.76857,3.53885 7.18183,6.83865 7.52916,18.27754 0.78809,25.95519 -3.92717,4.4728 -8.15884,6.27221 -14.75036,6.27221 -4.86702,0 -5.11288,-0.12312 -4.4932,-2.25 1.5791,-5.41982 1.74838,-8.92375 0.56872,-11.7717 -1.53377,-3.70286 -3.70253,-4.9783 -8.46511,-4.9783 -8.75282,0 -21.75002,11.32269 -24.9666,21.75 -0.6556,2.12528 -0.41771,2.25 4.29152,2.25 6.43937,0 8.14918,0.71483 8.14918,3.40699 0,3.35168 -1.93922,4.59301 -7.17525,4.59301 l -4.77525,0 1.03887,2.75 c 2.08639,5.52292 9.70332,11.25 14.96232,11.25 1.89771,0 4.4821,-2.09838 5.1863,-4.21098 0.30776,-0.92326 1.12338,-0.78291 3.14391,0.54099 2.362,1.54764 2.68744,2.35044 2.42372,5.97883 -0.26632,3.66421 -0.76111,4.43558 -3.93536,6.13518 -3.23347,1.7313 -4.09527,1.80484 -7.87617,0.67206 -5.60181,-1.67835 -12.96962,-8.68865 -16.31733,-15.52557 -1.47167,-3.00554 -2.67576,-5.94294 -2.67576,-6.52756 0,-0.58462 -0.40596,-1.06295 -0.90213,-1.06295 -2.21819,0 3.6442,13.88144 8.21576,19.45395 l 2.42335,2.95395 -3.85881,2.79531 c -2.12235,1.53743 -4.87567,4.36508 -6.11849,6.28367 -1.24283,1.9186 -2.48468,3.48836 -2.75968,3.48836 -0.275,0 -1.51685,-1.56976 -2.75968,-3.48836 z m 3.75968,-42.48688 c 0,-1.65 -0.45,-3 -1,-3 -0.55,0 -1,1.35 -1,3 0,1.65 0.45,3 1,3 0.55,0 1,-1.35 1,-3 z"
|
||||
id="path3047"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:export-xdpi="82.564102"
|
||||
inkscape:export-ydpi="82.564102" />
|
||||
<path
|
||||
style="fill:#000000"
|
||||
d="m 448.04252,335.21056 c -2.58411,-3.90486 -2.64377,-4.28088 -1.38842,-8.75 2.36519,-8.4202 2.42052,-9.16981 0.67677,-9.16981 -1.00491,0 -1.6228,0.85134 -1.63303,2.25 -0.009,1.2375 -1.03276,4.05 -2.27492,6.25 -1.89789,3.36138 -2.83489,4.04846 -5.86886,4.30353 -2.9275,0.24611 -4.01039,-0.20497 -5.72508,-2.38486 -2.79351,-3.55136 -2.74637,-7.86282 0.10782,-9.86197 3.1443,-2.20235 3.59164,-1.98118 3.42494,1.6933 -0.11897,2.62223 0.26851,3.30928 2.00599,3.5569 1.34948,0.19232 2.7495,-0.54409 3.75,-1.97251 2.11855,-3.02465 2.01917,-3.63527 -0.65344,-4.01484 -1.47682,-0.20974 -2.25,-1.00682 -2.25,-2.31955 0,-1.31273 0.77318,-2.10981 2.25,-2.31955 2.7935,-0.39674 2.91486,-3.12231 0.38652,-8.68045 -2.32594,-5.11319 -4.31878,-6.72462 -7.81866,-6.32226 -3.67436,0.42243 -6.04813,4.92407 -4.44818,8.43558 0.59809,1.31268 1.7759,2.38668 2.61736,2.38668 1.24341,0 1.3115,-0.34972 0.36361,-1.86753 -1.50331,-2.4072 -0.3652,-5.37672 1.89633,-4.94783 2.11197,0.40053 2.84387,4.84283 1.27949,7.76591 -1.4247,2.66207 -6.35601,2.71991 -8.97069,0.10523 -4.18792,-4.18792 -3.47358,-15.24888 1.19603,-18.5196 1.20626,-0.8449 3.69042,-1.53618 5.52036,-1.53618 7.61625,0 11.51476,4.7897 13.54483,16.64112 0.59907,3.49738 1.50025,6.35888 2.00261,6.35888 1.61541,0 -0.39,-13.16311 -3.40998,-22.38242 -1.6003,-4.88534 -2.90523,-9.38534 -2.89986,-10 0.0166,-1.90269 4.68879,-10.96512 7.22385,-14.01186 l 2.4082,-2.89428 4.17909,6.25823 c 5.01866,7.5155 5.27378,10.72719 1.69822,21.37862 -2.70903,8.07006 -4.46866,21.65171 -2.80519,21.65171 0.55063,0 1.28393,-2.70554 1.62956,-6.01231 0.70613,-6.75588 3.52118,-13.07907 6.86562,-15.42161 1.22974,-0.86134 4.12076,-1.56608 6.42449,-1.56608 3.40366,0 4.65039,0.54881 6.6528,2.92853 3.50935,4.17063 4.2565,9.30215 2.01935,13.86925 -3.72668,7.60797 -10.80576,7.34195 -10.80576,-0.40606 0,-2.77121 0.45944,-3.95281 1.62417,-4.17712 2.15621,-0.41524 3.14674,2.41068 1.75591,5.00947 -0.95142,1.77776 -0.86656,1.98472 0.58537,1.42756 0.93397,-0.3584 1.88632,-0.65163 2.11634,-0.65163 0.85544,0 0.38112,-6.20078 -0.61697,-8.06574 -1.43017,-2.6723 -6.08256,-2.50391 -8.72389,0.31574 -4.3537,4.64763 -5.77777,12.75 -2.24093,12.75 1.36314,0 2,0.66667 2,2.09362 0,1.25262 -0.8034,2.30371 -2,2.61663 -2.52507,0.66032 -2.55372,2.47867 -0.0744,4.72242 2.98769,2.70382 5.60373,1.63421 5.42695,-2.21889 -0.17171,-3.7426 0.8241,-4.03713 3.75162,-1.10961 1.60208,1.60208 1.95717,2.83914 1.48812,5.18438 -0.94053,4.70267 -3.40555,6.85902 -7.44184,6.50996 -3.96575,-0.34296 -6.96288,-3.64633 -8.02644,-8.84655 -0.73703,-3.60366 -3.12401,-5.29489 -3.12401,-2.21343 0,1.04785 0.71747,4.01085 1.59438,6.58443 1.56902,4.60484 1.55245,4.75078 -1.04216,9.17814 -1.45009,2.4744 -2.83617,4.4989 -3.08019,4.4989 -0.24401,0 -1.65872,-1.83609 -3.1438,-4.08019 z"
|
||||
id="path3086" />
|
||||
<path
|
||||
style="fill:#000000"
|
||||
d="m 297.75775,335.13026 c -1.11979,-1.83671 -2.03767,-4.99265 -2.03972,-7.01319 -0.005,-4.61059 2.0777,-13.82632 3.1242,-13.82632 0.43144,0 0.93974,3.2625 1.12955,7.25 l 0.34512,7.25 0.19869,-7.25 c 0.10929,-3.9875 0.60353,-7.25 1.09832,-7.25 0.49479,0 1.64743,3.36125 2.56141,7.46945 1.54629,6.95026 1.54686,7.71166 0.008,10.954 -2.73186,5.75698 -4.07995,6.26384 -6.42584,2.41603 z"
|
||||
id="path3084" />
|
||||
<path
|
||||
style="fill:#000000"
|
||||
d="m 369.14283,335.63774 c -1.56934,-2.31669 -1.89237,-4.38358 -1.73433,-11.09696 0.20904,-8.88036 -1.04265,-11.08058 -2.14015,-3.76195 -0.37016,2.46843 -1.3534,5.16843 -2.18497,6 -2.27749,2.2775 -5.97236,1.83177 -8.19043,-0.98805 -2.4382,-3.09967 -3.92463,-3.18379 -4.41772,-0.25 -0.36648,2.18047 -0.41995,2.16502 -1.73007,-0.5 -1.06645,-2.16935 -1.10263,-3.29709 -0.17133,-5.34108 1.10298,-2.42077 1.4961,-2.54768 5.98072,-1.93089 3.75544,0.5165 5.08886,0.31231 6.12671,-0.93824 1.12775,-1.35885 0.98017,-1.96716 -0.98467,-4.05863 -2.2283,-2.37192 -2.24716,-2.53101 -0.52549,-4.43344 2.03943,-2.25354 1.55361,-4.43659 -1.33088,-5.98032 -2.75582,-1.4749 -5.12593,1.07003 -5.12593,5.504 0,6.45265 -7.09337,9.98875 -10.4433,5.20606 -1.55766,-2.22387 -2.12165,-5.77749 -0.91694,-5.77749 0.35186,0 1.21973,0.7875 1.92858,1.75 1.20809,1.64038 1.33027,1.64311 1.95051,0.0436 0.36394,-0.93855 0.23948,-3.6861 -0.27657,-6.10568 -1.30712,-6.12868 -0.47791,-10.22412 2.77517,-13.70656 3.18422,-3.40872 7.21342,-3.90877 10.86826,-1.34882 2.75274,1.9281 6.06123,8.74808 6.09233,12.55848 0.0121,1.48004 0.47196,2.9691 1.02196,3.30902 1.75578,1.08513 1.09889,-6.90558 -1.07636,-13.09345 -2.71508,-7.72349 -2.14883,-14.26052 2.22157,-25.64687 1.84514,-4.80718 3.60368,-8.74468 3.90789,-8.75 0.3042,-0.005 2.2167,4.48884 4.25,9.98703 4.23884,11.46215 4.5981,16.75574 1.6969,25.00329 -2.07382,5.89546 -2.68552,13.54171 -1,12.5 0.55,-0.33992 1.00251,-1.37898 1.00558,-2.30902 0.0129,-3.9017 2.37309,-9.72349 5.01177,-12.36218 7.83481,-7.83481 17.79989,1.14831 14.90117,13.43282 -0.61797,2.61889 -0.84306,5.49265 -0.5002,6.38612 0.5655,1.47366 0.80715,1.45819 2.60253,-0.16661 1.90733,-1.72611 1.97915,-1.72098 1.97915,0.14138 0,4.57848 -5.13247,7.9277 -8.6003,5.61218 -1.73792,-1.16045 -3.3997,-4.87412 -3.3997,-7.59752 0,-3.60688 -2.59778,-5.9228 -5.12593,-4.56977 -2.88449,1.54373 -3.37031,3.72678 -1.33088,5.98032 1.71913,1.89962 1.70748,2.05678 -0.3124,4.21276 -1.63664,1.7469 -1.8698,2.64599 -1.06001,4.0874 0.86694,1.54312 1.77337,1.73762 5.49611,1.17936 5.04192,-0.75608 7.33311,0.46373 7.33311,3.90408 0,1.20253 -0.71174,3.05993 -1.58164,4.12755 -1.31039,1.60824 -1.48937,1.64651 -1.04367,0.22316 0.91426,-2.91967 -1.39978,-3.13217 -4.26067,-0.39127 -4.97808,4.7693 -9.31352,2.66374 -10.59377,-5.14501 -1.10118,-6.71656 -2.59247,-3.87259 -1.89643,3.61659 0.51603,5.55228 0.283,7.41241 -1.32004,10.53707 l -1.9467,3.79451 -1.92854,-2.84696 z"
|
||||
id="path3082" />
|
||||
<path
|
||||
style="fill:#000000"
|
||||
d="m 588.10408,336.11152 c -3.1521,-3.49715 -3.43416,-5.23021 -1.8445,-11.3333 1.67975,-6.44899 1.79296,-7.81453 0.58606,-7.06862 -0.47775,0.29527 -1.17525,2.45427 -1.55,4.79779 -1.53241,9.58316 -9.91102,11.84791 -14.071,3.80341 -1.88939,-3.65369 -2.0597,-5.96937 -0.31035,-4.22002 2.67439,2.67439 10.8,0.13028 10.8,-3.38145 0,-0.80743 -1.2375,-1.94053 -2.75,-2.51801 -2.6256,-1.00245 -2.66442,-1.11279 -0.85819,-2.43918 1.0405,-0.76408 2.36767,-1.54785 2.94927,-1.74172 1.41667,-0.47222 -2.50671,-7.13595 -4.39522,-7.46512 -2.52381,-0.4399 -4.20673,1.41879 -4.88147,5.39132 l -0.65464,3.85416 -3.61515,-3.56028 c -5.66759,-5.58155 -6.16316,-14.1497 -1.25195,-21.64515 2.31782,-3.53744 7.28989,-3.11136 11.14923,0.95543 4.08964,4.30947 5.87984,8.05607 7.42584,15.54108 0.70534,3.41491 1.67272,6.20892 2.14974,6.20892 0.47703,0 0.64559,-0.7875 0.37458,-1.75 -0.271,-0.9625 -0.80625,-3.325 -1.18945,-5.25 -0.38321,-1.925 -2.23412,-7.22887 -4.11315,-11.78637 -4.07464,-9.88286 -3.87149,-12.54118 1.60387,-20.9878 5.81479,-8.97023 6.23932,-9.11456 10.31852,-3.508 7.92107,10.88694 8.30957,13.99595 3.28858,26.31711 -3.18571,7.81752 -5.7629,18.32517 -4.12461,16.81677 0.38727,-0.35657 1.36949,-3.50048 2.18272,-6.98647 3.46919,-14.8711 12.11116,-22.05033 18.43723,-15.31654 1.93435,2.05902 2.45839,3.8362 2.72755,9.25 0.35745,7.18941 -1.52706,11.92878 -5.61265,14.11532 -1.71339,0.91698 -2.02223,0.63738 -2.57998,-2.33569 -1.14749,-6.11668 -6.02791,-7.28168 -8.42891,-2.01206 -1.58501,3.47872 -1.46086,4.20085 0.84824,4.93373 2.72574,0.86512 2.51297,2.35447 -0.5,3.5 -3.097,1.17748 -3.13089,2.05868 -0.18555,4.82569 2.49639,2.34523 5.6969,2.77379 8.70242,1.16528 1.74176,-0.93216 1.80532,-0.77935 0.83433,2.00602 -1.18553,3.40083 -5.23639,7.00301 -7.87527,7.00301 -3.09098,0 -5.85027,-3.34985 -7.41335,-9 -1.29014,-4.66352 -1.45018,-4.89165 -1.05229,-1.5 0.25809,2.2 0.7481,5.83016 1.08891,8.06702 0.51401,3.37365 0.21583,4.53649 -1.749,6.82074 l -2.36865,2.75373 -2.09176,-2.32075 z"
|
||||
id="path3078" />
|
||||
<path
|
||||
style="fill:#000000"
|
||||
d="m 659.28148,333.57168 -2.71511,-4.10281 1.96073,-6.53561 c 1.0784,-3.59458 1.71168,-6.78465 1.40729,-7.08904 -1.23368,-1.23369 -2.0963,-0.38763 -2.74936,2.69656 -0.97296,4.59495 -4.50274,10.62538 -6.61099,11.29451 -3.33266,1.05775 -6.30842,-1.75793 -8.23769,-7.79451 -0.70437,-2.20394 -2.21381,-2.25628 -3.03918,-0.10538 -0.35989,0.93786 0.1313,2.49906 1.14301,3.6329 1.71984,1.92746 1.70529,1.96686 -0.47589,1.28799 -1.64839,-0.51304 -2.25,-0.29698 -2.25,0.80809 0,0.8296 -0.52023,1.82989 -1.15607,2.22286 -1.98058,1.22407 -0.13307,-6.75177 2.07558,-8.96042 1.94397,-1.94397 2.06456,-1.94697 6.04814,-0.15063 4.05876,1.83025 4.06822,1.82952 6.54849,-0.50057 3.18476,-2.99196 3.17831,-4.98487 -0.0161,-4.98487 -2.02406,0 -2.5,-0.49376 -2.5,-2.59362 0,-1.75262 0.64852,-2.76321 2,-3.11663 1.1,-0.28766 2,-0.92053 2,-1.40638 0,-1.17035 -3.74739,-4.88337 -4.92857,-4.88337 -1.76735,0 -4.07143,3.15295 -4.07143,5.57143 0,3.16381 -3.32412,6.42857 -6.54545,6.42857 -3.53675,0 -7.45455,-4.18058 -7.45455,-7.95455 0,-1.675 0.45,-3.04545 1,-3.04545 0.55,0 1,0.9 1,2 0,1.1 0.64511,2 1.43358,2 0.80829,0 1.57159,1.16584 1.75,2.67288 0.17403,1.47009 0.93143,2.87509 1.68311,3.12223 1.05708,0.34755 1.24111,-0.42787 0.81234,-3.42288 -1.96645,-13.73581 -1.96606,-13.75782 0.2952,-16.62223 5.26969,-6.67531 14.82875,-0.82483 17.97283,11 0.67691,2.54582 1.71605,4.25 2.59148,4.25 2.2984,0 1.76875,-3.79437 -2.0988,-15.03562 -2.30849,-6.70977 -3.34019,-11.2249 -2.93434,-12.84192 0.34425,-1.37161 2.39637,-5.47395 4.56026,-9.11631 2.16389,-3.64237 3.95227,-7.27131 3.97419,-8.06432 0.0219,-0.79301 0.85697,0.13317 1.85568,2.05817 0.99871,1.925 3.23078,6.1332 4.96016,9.35155 1.72937,3.21835 3.14431,6.59797 3.14431,7.51026 0,0.9123 -1.57046,6.1541 -3.48992,11.64846 -3.95712,11.3271 -4.39582,14.80696 -1.80374,14.30777 1.08148,-0.20828 2.0093,-1.7868 2.53366,-4.31058 2.18326,-10.50809 12.30669,-16.96077 17.87435,-11.39311 1.84944,1.84944 2.02925,2.82043 1.43515,7.75 -1.09936,9.12197 -1.11119,12.0777 -0.0495,12.36502 0.55,0.14885 1.14322,-1.22148 1.31827,-3.04516 0.26383,-2.74874 0.56311,-3.11258 1.75,-2.12755 1.18041,0.97965 1.43173,0.72789 1.43173,-1.43422 0,-1.44234 0.45,-2.62244 1,-2.62244 0.55,0 1,1.37045 1,3.04545 0,3.77397 -3.9178,7.95455 -7.45455,7.95455 -3.07081,0 -6.54545,-3.21998 -6.54545,-6.06574 0,-2.90888 -1.8023,-5.93426 -3.53518,-5.93426 -1.5948,0 -5.46482,3.45825 -5.46482,4.88337 0,0.48585 0.9,1.11872 2,1.40638 1.35148,0.35342 2,1.36401 2,3.11663 0,2.09986 -0.47594,2.59362 -2.5,2.59362 -3.13748,0 -3.21365,1.98093 -0.18555,4.82569 2.77561,2.60754 2.94485,2.61963 7.35785,0.52552 3.30705,-1.56929 3.569,-1.55436 5.43314,0.30978 2.19116,2.19117 4.01798,10.15135 2.05063,8.93547 -0.63584,-0.39297 -1.15607,-1.39326 -1.15607,-2.22286 0,-1.10507 -0.60161,-1.32113 -2.25,-0.80809 -2.21842,0.69046 -2.22373,0.67087 -0.37872,-1.39536 1.02921,-1.15261 1.60583,-2.78742 1.28139,-3.6329 -0.94095,-2.45207 -2.36788,-1.79295 -3.56734,1.64782 -1.41385,4.05576 -3.90438,6.81493 -6.15142,6.81493 -2.60334,0 -6.49075,-5.18298 -7.80647,-10.40816 -0.63593,-2.52551 -1.59976,-4.59184 -2.14184,-4.59184 -1.4811,0 -1.18648,4.27497 0.58716,8.5199 1.82547,4.36896 1.39354,6.83848 -1.91028,10.92196 l -2.38017,2.94185 -2.71512,-4.10281 z"
|
||||
id="path3076" />
|
||||
<path
|
||||
style="fill:#000000"
|
||||
d="m 283.93108,325.73005 c -2.68937,-1.88372 -5.21679,-6.51724 -5.21679,-9.56395 l 0,-2.22398 2.31445,2.17432 c 2.88524,2.71054 5.29579,2.77128 6.91762,0.17431 1.66599,-2.66767 3.7371,-2.5981 3.03105,0.10182 -0.3023,1.156 -1.94767,2.95432 -3.65638,3.99626 -2.72662,1.66265 -2.84032,1.8949 -0.92932,1.89818 2.26372,0.004 6.32258,-4.25304 6.32258,-6.63112 0,-0.75083 0.48032,-1.36514 1.06739,-1.36514 0.58706,0 0.84777,0.7875 0.57934,1.75 -0.26842,0.9625 -0.80046,2.875 -1.18232,4.25 -0.79724,2.87073 -4.28719,7 -5.91622,7 -0.60675,0 -2.10588,-0.70232 -3.3314,-1.5607 z"
|
||||
id="path3074" />
|
||||
<path
|
||||
style="fill:#000000"
|
||||
d="m 310.49778,325.54075 c -2.51655,-2.88502 -3.78824,-5.95385 -3.70227,-8.93426 l 0.0812,-2.81574 1.16878,2.60441 c 1.81875,4.05276 3.72371,5.89916 6.04123,5.85555 1.9296,-0.0363 1.87808,-0.17549 -0.55378,-1.49595 -2.63744,-1.43209 -4.59103,-5.02498 -3.38697,-6.22904 0.33787,-0.33787 1.30447,0.37105 2.14801,1.57536 1.95648,2.79327 4.15239,2.77499 7.24774,-0.0603 l 2.45635,-2.25 -0.60717,4 c -0.40957,2.69822 -1.59994,4.89497 -3.65768,6.75 -3.54913,3.19951 -5.12669,3.41754 -7.23546,1 z"
|
||||
id="path3072" />
|
||||
<path
|
||||
style="fill:#000000"
|
||||
d="m 286.46038,311.04075 c -0.23132,-0.6875 -0.21633,-2.0375 0.0333,-3 0.40366,-1.5564 1.92794,-1.75 13.77823,-1.75 7.88299,0 13.579,0.41203 13.94791,1.00895 0.34296,0.55492 0.3392,1.90492 -0.008,3 -0.58938,1.85707 -1.53016,1.99105 -13.98118,1.99105 -9.78845,0 -13.46147,-0.33343 -13.76986,-1.25 z"
|
||||
id="path3070" />
|
||||
<path
|
||||
style="fill:#000000"
|
||||
d="m 308.71429,309.29075 c 1.02799,-0.66434 -1.42932,-0.97419 -7.80902,-0.98469 -5.95501,-0.01 -9.08634,0.34499 -8.69098,0.98469 0.79182,1.28119 14.5175,1.28119 16.5,0 z"
|
||||
id="path3068" />
|
||||
<path
|
||||
style="fill:#000000"
|
||||
d="m 277.42155,306.53307 c -5.29714,-5.89259 -1.52406,-19.24232 5.43852,-19.24232 2.34399,0 7.80642,4.7708 9.05826,7.91133 1.68762,4.23382 2.64296,9.08867 1.78847,9.08867 -0.43827,0 -1.25495,-1.31406 -1.81483,-2.92014 -1.15149,-3.30318 -4.56561,-7.07986 -6.40019,-7.07986 -0.67238,0 -0.28439,0.65708 0.86219,1.46017 2.26971,1.58977 5.01109,7.22239 4.00485,8.22863 -0.34357,0.34357 -1.73265,-0.57086 -3.08685,-2.03206 -1.3542,-1.46121 -2.84766,-2.65674 -3.3188,-2.65674 -2.06342,0 -4.15087,2.76337 -4.43291,5.8683 -0.30142,3.31817 -0.33265,3.33862 -2.09871,1.37402 z"
|
||||
id="path3066" />
|
||||
<path
|
||||
style="fill:#000000"
|
||||
d="m 321.24089,306.49177 c 0.69387,-2.49537 -1.75333,-7.20102 -3.74493,-7.20102 -0.64473,0 -2.42966,1.20469 -3.96652,2.6771 -1.53686,1.4724 -3.03657,2.43481 -3.3327,2.13869 -0.85366,-0.85367 1.24258,-5.54082 3.47762,-7.77586 1.12196,-1.12196 1.66837,-2.03993 1.21424,-2.03993 -1.19103,0 -4.67227,4.009 -6.51268,7.5 -1.57739,2.99209 -1.58166,2.99331 -1.62159,0.46189 -0.0557,-3.52907 3.92732,-10.95701 7.12291,-13.2836 8.0805,-5.88313 16.34253,9.26507 9.28073,17.01595 -2.3968,2.63067 -2.51644,2.6623 -1.91708,0.5068 z"
|
||||
id="path3064" />
|
||||
<path
|
||||
style="fill:#000000"
|
||||
d="m 297.23844,299.54075 c -0.38661,-2.6125 -2.08064,-8.24849 -3.76451,-12.52443 -2.72891,-6.92968 -2.93882,-8.18416 -1.93182,-11.54522 1.10355,-3.68333 7.49871,-12.18035 9.16736,-12.18035 0.46164,0 2.71365,2.80681 5.00448,6.23735 4.79188,7.17589 4.8449,8.7817 0.66909,20.26265 -1.40031,3.85 -2.81903,8.6875 -3.1527,10.75 -1.23207,7.6157 -2.46669,3.37941 -2.76865,-9.5 l -0.31066,-13.25 -0.21837,13.25 c -0.22118,13.42066 -1.41067,17.17339 -2.69422,8.5 z"
|
||||
id="path3062" />
|
||||
<path
|
||||
style="fill:#000000"
|
||||
d="m 660.89088,245.49153 c -0.64712,-2.91457 -1.17659,-8.65207 -1.17659,-12.75 0,-6.44661 -0.23585,-7.44466 -1.75,-7.40539 -1.10111,0.0286 -2.67699,1.97524 -4.25,5.25 -1.40668,2.9285 -3.57867,5.72947 -4.96651,6.40477 -1.35658,0.66008 -2.57866,1.08801 -2.71572,0.95094 -0.13707,-0.13707 0.86036,-2.4409 2.21651,-5.11963 2.98861,-5.90326 3.08929,-7.53147 0.46572,-7.53147 -1.46667,0 -2,-0.66667 -2,-2.5 0,-2 0.5,-2.5 2.5,-2.5 2.7383,0 2.96809,-0.63862 1.56126,-4.33887 -2.25025,-5.91861 -9.01269,-8.61724 -12.30669,-4.91113 -0.85547,0.9625 -2.25225,3.4375 -3.10396,5.5 -1.90425,4.61135 -3.11594,4.79729 -3.25821,0.5 -0.0592,-1.7875 -0.28418,-6.05053 -0.5,-9.47339 -0.36092,-5.72411 -0.16995,-6.44615 2.38033,-9 3.77938,-3.78467 10.33443,-3.91165 14.27905,-0.27661 3.51752,3.24146 7.25737,11.23904 8.06649,17.25 0.44326,3.29295 1.10369,4.75 2.15302,4.75 2.2209,0 0.96171,-10.03742 -2.41041,-19.21418 -1.4725,-4.0072 -2.87405,-9.41628 -3.11454,-12.02019 -0.38221,-4.1383 0.0784,-5.6287 3.6582,-11.83784 2.2525,-3.90691 4.09546,-7.48739 4.09546,-7.95662 0,-0.46922 0.41191,-1.10771 0.91536,-1.41886 0.50345,-0.31115 2.97845,3.21906 5.5,7.84491 5.52568,10.137 5.72681,13.09034 1.65189,24.25591 -3.58104,9.81228 -5.06849,20.34687 -2.87292,20.34687 0.9871,0 1.81538,-1.95042 2.58444,-6.08582 2.02031,-10.86368 8.58924,-18.90105 15.45545,-18.91044 1.60179,-0.002 4.06476,1.18509 5.94675,2.86665 2.58885,2.31313 3.20651,3.62358 3.18153,6.75 -0.0573,7.17065 -0.85708,15.37865 -1.49856,15.37913 -0.34983,2.7e-4 -1.41975,-1.68702 -2.3776,-3.74952 -2.49009,-5.36181 -4.42818,-7.25451 -7.39133,-7.2182 -3.48162,0.0427 -5.76615,1.93688 -7.5844,6.28857 -1.95185,4.67143 -1.95011,4.67963 0.98939,4.67963 2,0 2.5,0.5 2.5,2.5 0,1.83333 -0.53333,2.5 -2,2.5 -2.62357,0 -2.52289,1.62821 0.46572,7.53147 1.35615,2.67873 2.35358,4.98256 2.21651,5.11963 -0.13706,0.13707 -1.35914,-0.29086 -2.71572,-0.95094 -1.38784,-0.6753 -3.55983,-3.47627 -4.96651,-6.40477 -1.57301,-3.27476 -3.14889,-5.22143 -4.25,-5.25 -1.53112,-0.0397 -1.75961,1.04901 -1.82685,8.70461 -0.0423,4.8125 -0.6378,10.55 -1.32341,12.75 l -1.24655,4 -1.1766,-5.29922 z"
|
||||
id="path3060" />
|
||||
<path
|
||||
style="fill:#000000"
|
||||
d="m 587.37421,244.97342 c -3.50524,-5.98123 -4.0391,-8.83882 -2.3896,-12.79064 2.38252,-5.70798 3.04885,-10.89203 1.39999,-10.89203 -0.78481,0 -1.69458,1.37136 -2.03329,3.0649 -1.30748,6.53741 -8.50028,10.6842 -13.70276,7.89992 -2.88262,-1.54274 -2.3399,-2.96482 1.13148,-2.96482 4.13496,0 6.61075,-1.47372 8.44959,-5.02964 1.50751,-2.91521 1.48914,-2.97036 -0.98965,-2.97036 -1.85901,0 -2.52568,-0.52791 -2.52568,-2 0,-1.46667 0.66667,-2 2.5,-2 2.92346,0 2.93123,-0.0322 1.07878,-4.4657 -1.59213,-3.81049 -6.6311,-6.96986 -9.609,-6.02471 -1.06164,0.33695 -2.78816,2.55207 -3.8367,4.92248 -3.23633,7.31624 -4.13649,6.63078 -4.10128,-3.12305 0.0353,-9.7628 0.86687,-11.68053 5.81296,-13.40475 7.15984,-2.49593 14.8435,5.79599 15.9394,17.2012 0.42972,4.47226 1.40636,6.0654 2.54071,4.14453 0.95429,-1.61597 -1.4263,-14.10251 -3.92017,-20.56184 -3.14378,-8.14267 -2.93829,-9.69141 2.66389,-20.0775 l 4.19688,-7.78073 4.58035,8.33504 c 5.16474,9.39846 5.54434,12.63221 2.34436,19.97114 -2.31077,5.29961 -4.94333,19.44408 -3.82673,20.56067 1.08528,1.08528 2.60349,-1.76336 2.62124,-4.91827 0.0195,-3.47547 4.14874,-12.77869 6.62093,-14.91722 4.56188,-3.94618 13.36232,-2.68838 14.89108,2.1283 0.86509,2.72566 0.19812,17.92285 -0.76099,17.33954 -0.42036,-0.25566 -1.65933,-2.21925 -2.75327,-4.36354 -2.647,-5.18856 -5.11212,-6.46701 -8.79624,-4.56188 -3.55667,1.83923 -4.84335,3.38208 -5.71421,6.85188 -0.61922,2.46717 -0.4253,2.74441 1.9196,2.74441 1.94174,0 2.60841,0.51117 2.60841,2 0,1.44592 -0.66667,2 -2.40638,2 -1.92361,0 -2.30019,0.40608 -1.87706,2.02412 0.8168,3.12347 5.14767,5.97588 9.07329,5.97588 3.45678,0 3.48756,0.036 1.71015,2 -3.41395,3.77237 -10.38623,1.86686 -12.95181,-3.53969 -0.8515,-1.79441 -1.54819,-3.98206 -1.54819,-4.86144 0,-0.87938 -0.675,-1.59887 -1.5,-1.59887 -1.97452,0 -1.89374,1.55803 0.47499,9.16091 l 1.975,6.33909 -2.92246,6.25 c -1.60735,3.4375 -3.12833,6.25 -3.37997,6.25 -0.25163,0 -1.59607,-1.9428 -2.98764,-4.31733 z"
|
||||
id="path3058" />
|
||||
<path
|
||||
style="fill:#000000"
|
||||
d="m 447.11158,243.09214 c -1.27055,-2.45698 -1.52185,-4.77559 -1.08386,-10 l 0.57021,-6.80139 -5.31938,0 c -6.03869,0 -8.75405,-1.86146 -6.56426,-4.5 0.68469,-0.825 2.08979,-1.5 3.12244,-1.5 4.36462,0 1.09533,-8.22656 -3.75285,-9.44338 -4.45886,-1.1191 -8.2061,1.12249 -9.42143,5.63589 -0.88414,3.28345 -1.30994,3.75213 -2.50661,2.75898 -1.99084,-1.65225 -1.86936,-9.89569 0.18914,-12.83462 1.80955,-2.58349 7.06228,-5.11687 10.60935,-5.11687 3.39163,0 9.47464,5.44546 10.34295,9.25893 0.72395,3.17945 1.16808,6.00707 1.33368,8.49107 0.0458,0.6875 0.5986,1.25 1.22837,1.25 1.89732,0 0.27754,-12.72829 -2.57989,-20.27283 -4.09139,-10.80259 -3.27977,-14.98931 4.87898,-25.1683 1.54014,-1.92151 1.5716,-1.92151 3.11174,0 8.18624,10.21329 8.89626,13.96048 4.83495,25.5168 -2.47518,7.04303 -3.98984,19.92433 -2.34282,19.92433 0.40606,0 1.22578,-2.8125 1.82158,-6.25 1.88526,-10.87705 9.81082,-15.68124 17.8166,-10.79977 1.7524,1.06851 3.71701,2.93462 4.3658,4.1469 1.65049,3.08397 1.37397,9.90549 -0.47654,11.756 -1.39424,1.39424 -1.60369,1.25671 -2.13783,-1.40373 -0.88883,-4.42714 -2.83664,-6.47762 -6.75773,-7.11392 -2.90377,-0.47122 -3.99125,-0.11501 -6.10641,2.00014 -3.09468,3.09468 -3.5096,7.66438 -0.69591,7.66438 1.03265,0 2.43775,0.675 3.12244,1.5 2.18979,2.63854 -0.52557,4.5 -6.56426,4.5 l -5.31938,0 0.57021,6.80139 c 0.43799,5.22441 0.18669,7.54302 -1.08386,10 -0.90974,1.75923 -2.08096,3.19861 -2.60271,3.19861 -0.52175,0 -1.69297,-1.43938 -2.60271,-3.19861 z"
|
||||
id="path3056" />
|
||||
<path
|
||||
style="fill:#000000"
|
||||
d="m 296.66953,243.04074 c -2.1471,-2.27591 -2.23296,-5.26148 -0.33663,-11.70685 0.67642,-2.29907 0.53527,-2.2532 -2.19789,0.71431 -4.01372,4.35787 -7.43636,5.016 -10.74234,2.06563 -1.43169,-1.2777 -2.87956,-3.50381 -3.21747,-4.94692 -0.58538,-2.49993 -0.43007,-2.61899 3.2891,-2.52147 2.30427,0.0604 5.09275,-0.67688 6.80632,-1.79965 l 2.90282,-1.902 -2.64356,-0.88119 c -3.72316,-1.24105 -4.16313,-3.35333 -1.18621,-5.69497 l 2.53837,-1.99668 -2.49073,-0.62514 c -4.28789,-1.07619 -10.67702,3.28211 -10.67702,7.28325 0,3.19394 -1.88602,2.51367 -4.75,-1.7133 -7.30142,-10.7762 5.50982,-27.48497 15.63571,-20.39252 1.28189,0.89788 3.21412,3.48538 4.29384,5.75 l 1.96312,4.1175 -0.59529,-3.5 c -0.32741,-1.925 -1.93451,-6.36302 -3.57134,-9.86227 -1.63682,-3.49925 -2.97604,-7.0091 -2.97604,-7.79966 0,-3.58276 8.7474,-15.33807 11.41341,-15.33807 1.29289,0 7.31919,6.04766 9.93729,9.97251 2.34439,3.51453 2.05831,6.65959 -1.23996,13.63144 -1.58822,3.35718 -3.18501,7.63218 -3.54841,9.5 -0.65321,3.35736 -0.63862,3.34914 1.28025,-0.72145 2.37933,-5.04736 5.53467,-7.3825 9.97556,-7.3825 6.84846,0 12.18186,6.73593 12.18186,15.38535 0,3.63348 -0.59471,5.24869 -2.87023,7.79544 l -2.87022,3.21234 -0.74471,-2.44657 c -1.62858,-5.35029 -7.18441,-8.82099 -11.78372,-7.36122 -2.01381,0.63916 -1.99012,0.72306 0.58505,2.07233 3.36324,1.76219 3.43908,4.04109 0.18383,5.52428 -1.375,0.6265 -2.5,1.53981 -2.5,2.02959 0,1.49765 7.13596,3.97115 9.64202,3.34217 2.81555,-0.70666 3.11305,1.08547 0.89289,5.37878 -2.65972,5.14334 -9.82622,4.54511 -14.09725,-1.17678 -1.45471,-1.94887 -1.58397,-1.98366 -0.95023,-0.25571 0.40344,1.1 0.9614,3.8599 1.23992,6.13312 0.40501,3.30554 0.0825,4.55699 -1.61047,6.25 -2.7073,2.7073 -4.51364,2.67372 -7.16164,-0.13312 z"
|
||||
id="path3054" />
|
||||
<path
|
||||
style="fill:#000000"
|
||||
d="m 301.644,236.48172 c -0.0387,-2.58004 -0.41412,-5.56992 -0.83436,-6.64417 -0.64702,-1.65396 -0.86605,-1.44331 -1.42971,1.375 -0.84431,4.22156 -0.85774,9.55275 -0.0262,10.38434 1.41853,1.41853 2.35673,-0.67692 2.29023,-5.11517 z"
|
||||
id="path3052" />
|
||||
<path
|
||||
style="fill:#000000"
|
||||
d="m 291.88555,230.63575 c 2.71439,-2.45649 2.21497,-3.42788 -0.92126,-1.79187 -1.5125,0.789 -3.56406,1.43731 -4.55902,1.4407 -0.99496,0.003 -1.5309,0.45616 -1.19098,1.00616 0.95494,1.54513 4.63993,1.18334 6.67126,-0.65499 z"
|
||||
id="path3050" />
|
||||
<path
|
||||
style="fill:#000000"
|
||||
d="m 315.21429,231.29074 c 0.33992,-0.55 -0.19602,-1.00277 -1.19098,-1.00616 -0.99496,-0.003 -3.04652,-0.6517 -4.55902,-1.4407 -3.28919,-1.7158 -3.67942,-0.31754 -0.52749,1.89016 2.53483,1.77546 5.36892,2.0268 6.27749,0.5567 z"
|
||||
id="path3048" />
|
||||
<path
|
||||
style="fill:#000000"
|
||||
d="m 309.14953,219.39552 c 0.87191,-1.41078 -2.07427,-2.10478 -8.93524,-2.10478 -7.30433,0 -10.42835,0.79614 -8.33385,2.12385 1.78571,1.13196 16.56781,1.11564 17.26909,-0.0191 z"
|
||||
id="path3046" />
|
||||
<path
|
||||
style="fill:#000000"
|
||||
d="m 323.68063,208.68874 c -1.47123,-4.45785 -5.8444,-6.68507 -10.16728,-5.17811 -1.5627,0.54476 -3.26769,1.78724 -3.78887,2.76107 -0.83794,1.5657 -0.34438,1.82856 4.26494,2.27145 4.33019,0.41608 5.63675,1.03044 7.7187,3.62939 2.95028,3.68293 3.82682,2.13481 1.97251,-3.4838 z"
|
||||
id="path3044" />
|
||||
<path
|
||||
style="fill:#000000"
|
||||
d="m 278.36686,212.75375 c 0.86593,-2.2566 5.72713,-4.46301 9.83295,-4.46301 3.20864,0 3.47843,-0.19885 2.57077,-1.89482 -1.27636,-2.3849 -5.93799,-4.06511 -8.56147,-3.08585 -2.90819,1.08555 -5.17534,4.02477 -5.96298,7.73067 -0.71566,3.36721 0.96501,4.72477 2.12073,1.71301 z"
|
||||
id="path3042" />
|
||||
<path
|
||||
style="fill:#000000"
|
||||
d="m 304.55138,194.37878 c 2.88294,-5.53103 2.72847,-7.9938 -0.76054,-12.12581 -3.43147,-4.06387 -5.33375,-3.56176 -8.51843,2.24845 l -1.94187,3.54281 2.8371,6.32191 c 1.56041,3.47706 3.07924,8.37002 3.37518,10.87326 l 0.53808,4.55134 1.15379,-5.63117 c 0.63458,-3.09714 2.1271,-7.4985 3.31669,-9.78079 z"
|
||||
id="path3040" />
|
||||
<path
|
||||
style="fill:#000000"
|
||||
d="m 516.21037,241.28641 c -1.63435,-1.80594 -1.72217,-2.95171 -0.88718,-11.57564 1.08111,-11.16596 -0.24334,-19.79171 -4.25429,-27.70694 -3.59948,-7.10323 -3.37591,-12.42949 0.81206,-19.34583 1.83333,-3.02771 4.11153,-6.21029 5.06267,-7.07239 1.58356,-1.43532 1.90212,-1.36629 3.77876,0.81884 4.00269,4.66066 7.97327,12.43246 7.98252,15.62458 0.005,1.78106 -1.52402,6.95606 -3.39817,11.5 -4.18973,10.15812 -5.17435,17.38316 -3.62264,26.5827 1.01541,6.02003 0.95696,7.41994 -0.42104,10.08471 -1.87714,3.62998 -2.61079,3.78824 -5.05269,1.08997 z"
|
||||
id="path3036" />
|
||||
<path
|
||||
style="fill:#000000"
|
||||
d="m 502.80828,234.54074 c -1.61566,-1.5125 -3.22671,-3.75819 -3.58012,-4.99042 -0.6387,-2.22694 -0.62429,-2.22995 2.39604,-0.5 2.99539,1.71567 3.07621,1.70285 5.68372,-0.90168 3.14168,-3.1381 3.53209,-9.21019 0.85489,-13.29612 -2.86894,-4.37856 -7.44852,-2.7565 -7.44852,2.63822 0,3.42443 -0.93715,3.51436 -4.28548,0.41123 -6.85923,-6.35692 -4.52596,-21.61123 3.30561,-21.61123 5.6523,0 11.32516,7.63857 13.95118,18.78541 2.00468,8.50937 -0.37241,18.75334 -4.91592,21.18495 -2.61735,1.40076 -2.63189,1.39656 -5.9614,-1.72036 z"
|
||||
id="path3030" />
|
||||
<path
|
||||
style="fill:#000000"
|
||||
d="m 527.54534,236.24783 c -3.20749,-1.85604 -5.16686,-9.33389 -4.55735,-17.39294 0.63544,-8.40201 3.02837,-14.58643 7.47319,-19.31415 5.70867,-6.072 12.48368,-3.56373 13.78333,5.10293 0.84762,5.65235 -0.82705,10.9488 -4.33412,13.70746 l -2.65913,2.09167 -0.76449,-2.95027 c -1.61718,-6.24093 -5.63987,-6.64475 -8.40613,-0.84385 -2.18715,4.5865 -1.16258,10.07424 2.30507,12.34634 2.36484,1.5495 2.80537,1.55863 5.32881,0.11037 2.54876,-1.46279 2.71812,-1.45364 2.30543,0.12451 -0.67517,2.58183 -4.55351,6.81944 -6.80566,7.43608 -1.1,0.30118 -2.75103,0.11301 -3.66895,-0.41815 z"
|
||||
id="path3028" />
|
||||
<g
|
||||
id="g3217">
|
||||
<path
|
||||
id="path3038"
|
||||
d="m 373.27099,241.06823 c -1.84628,-2.63593 -1.95033,-5.32861 -0.43799,-11.33467 1.61864,-6.4282 4.3072,-6.11508 6.34255,0.73868 1.96801,6.62701 1.94689,7.0299 -0.53384,10.18364 -2.52614,3.21146 -3.36503,3.27587 -5.37072,0.41235 z"
|
||||
style="fill:#000000" />
|
||||
<path
|
||||
id="path3034"
|
||||
d="m 361.46427,236.21063 c -1.52802,-0.88999 -4.74998,-5.87251 -4.74998,-7.34548 0,-0.2887 1.18444,-0.0746 2.63208,0.47581 3.15303,1.19878 5.48207,0.58612 7.89102,-2.07575 0.98278,-1.08596 2.5693,-1.97447 3.52559,-1.97447 1.52353,0 1.62459,0.52599 0.81659,4.25 -1.39084,6.41021 -5.69191,9.24628 -10.1153,6.66989 z"
|
||||
style="fill:#000000" />
|
||||
<path
|
||||
id="path3032"
|
||||
d="m 383.50366,236.23263 c -1.5524,-0.905 -3.76993,-6.58507 -3.78379,-9.69193 -0.009,-2.05468 2.73324,-1.42027 5.40351,1.25 2.70807,2.70807 4.64221,3.0781 7.65665,1.46482 2.8803,-1.54149 2.52031,1.18525 -0.65463,4.95845 -2.64398,3.14219 -5.53385,3.81881 -8.62174,2.01866 z"
|
||||
style="fill:#000000" />
|
||||
<path
|
||||
id="path3026"
|
||||
d="m 368.78843,223.41349 c -3.24581,-0.90704 -3.69702,-2.72315 -0.86503,-3.48176 3.75717,-1.00645 13.45518,-0.72293 16.47579,0.48166 l 2.8151,1.12264 -3,1.33225 c -3.15862,1.4027 -11.32454,1.69131 -15.42586,0.54521 z"
|
||||
style="fill:#000000" />
|
||||
<path
|
||||
id="path3024"
|
||||
d="m 355.01357,218.04075 c -3.23464,-3.55134 -4.29928,-6.2843 -4.29928,-11.03638 0,-5.50199 3.43432,-11.08028 7.08696,-11.51119 5.3124,-0.62673 11.97142,8.33556 13.43248,18.07861 0.62854,4.19146 0.49934,4.71825 -1.1559,4.71264 -1.02495,-0.003 -2.63011,-1.35348 -3.56703,-3 -2.8379,-4.98728 -7.79651,-3.11706 -7.79651,2.94058 0,2.673 -1.15044,2.61572 -3.70072,-0.18426 z"
|
||||
style="fill:#000000" />
|
||||
<path
|
||||
id="path3022"
|
||||
d="m 392.71429,217.49075 c 0,-5.59592 -4.97984,-7.12598 -7.16029,-2.2 -0.90934,2.05433 -2.03904,3 -3.58382,3 -2.77389,0 -2.79911,-1.0306 -0.22884,-9.35214 4.66972,-15.11881 15.54237,-18.38805 18.95875,-5.70061 1.40323,5.2112 -0.15236,11.37584 -3.70032,14.66398 -3.34833,3.10313 -4.28548,3.0132 -4.28548,-0.41123 z"
|
||||
style="fill:#000000" />
|
||||
<path
|
||||
id="path3020"
|
||||
d="m 373.29635,217.11089 c -0.22494,-0.72608 -0.66545,-2.8015 -0.97891,-4.61205 -0.31345,-1.81056 -1.92739,-6.68206 -3.58653,-10.82556 -1.65914,-4.14351 -3.0124,-8.73715 -3.00724,-10.20809 0.009,-2.61552 3.96102,-10.21858 7.87383,-15.1487 1.84172,-2.32055 2.07717,-2.37142 3.79025,-0.81883 1.0046,0.91048 3.31662,4.11628 5.13784,7.12399 4.15721,6.86561 4.33517,11.32146 0.74626,18.6863 -1.46947,3.01554 -3.24206,7.9578 -3.93908,10.9828 -1.01385,4.40006 -1.70329,5.56402 -3.44736,5.82014 -1.19903,0.17607 -2.36411,-0.27393 -2.58906,-1 z"
|
||||
style="fill:#000000" />
|
||||
</g>
|
||||
<path
|
||||
style="fill:#000000"
|
||||
d="m 472.42807,161.65144 c -4.29218,-6.5176 -4.61264,-9.69845 -1.82774,-18.14224 1.03732,-3.14515 2.19581,-7.8954 2.57442,-10.55611 0.61402,-4.31513 0.49415,-4.80025 -1.10984,-4.49135 -1.24066,0.23893 -2.02181,1.65606 -2.51934,4.57045 -1.67587,9.81689 -6.0246,14.09861 -11.39833,11.22267 -2.53132,-1.35472 -6.43295,-8.29002 -6.43295,-11.43482 0,-1.66653 0.16435,-1.69591 1.75,-0.31278 4.02038,3.50689 6.07538,3.95811 8.22708,1.80641 2.91731,-2.91731 2.67131,-6.02292 -0.47708,-6.02292 -2.11111,0 -2.5,-0.46667 -2.5,-3 0,-2.53333 0.38889,-3 2.5,-3 1.58824,0 2.5,-0.56364 2.5,-1.54546 0,-1.9654 -4.43946,-6.45454 -6.38312,-6.45454 -2.70269,0 -4.81986,3.13564 -4.42144,6.5484 0.43568,3.73192 -1.15437,3.68942 -3.63545,-0.0972 -3.68975,-5.63128 -0.79027,-17.02227 5.00499,-19.66277 5.77829,-2.632771 13.70308,6.33567 15.15346,17.14906 0.42715,3.18459 0.96892,4.0625 2.50707,4.0625 1.78657,0 1.90143,-0.46982 1.28348,-5.25 -0.37327,-2.8875 -2.07006,-9.075 -3.77065,-13.75 -1.70058,-4.675001 -3.1234,-10.565641 -3.16182,-13.090311 -0.071,-4.66288 1.47523,-7.64415 7.992,-15.40969 l 2.51758,-3 3.50149,4 c 7.79243,8.90183 9.01238,14.60356 5.05497,23.62557 -4.248,9.684491 -6.245,22.130631 -3.63204,22.636441 1.09797,0.21254 1.99112,-1.54002 3.27024,-6.41696 1.95437,-7.45149 5.57568,-12.95977 9.50138,-14.45232 9.53391,-3.624791 16.32607,14.26944 8.20571,21.61827 -1.88379,1.70481 -1.93307,1.65194 -1.79843,-1.92945 0.26597,-7.07507 -6.429,-8.88651 -9.67123,-2.61672 -1.98213,3.83302 -1.97732,3.8495 1.23181,4.21875 2.18229,0.2511 2.75,0.83252 2.75,2.81642 0,1.9839 -0.56771,2.56532 -2.75,2.81642 -3.06486,0.35265 -3.26944,0.94943 -1.58948,4.63653 1.6558,3.63408 4.86591,3.741 8.58948,0.28608 l 2.25,-2.08766 0,2.72398 c 0,3.49599 -2.37156,8.07106 -5.21679,10.06395 -5.45161,3.81845 -9.94702,0.22953 -11.9679,-9.55459 -0.73082,-3.53828 -1.73379,-5.88471 -2.51539,-5.88471 -2.12209,0 -1.54527,7.11585 1.28914,15.90337 2.2004,6.82187 2.42096,8.53625 1.46923,11.42 -1.07823,3.26708 -6.882,11.67663 -8.05851,11.67663 -0.31472,0 -2.24342,-2.53769 -4.286,-5.63931 z"
|
||||
id="path3018" />
|
||||
<path
|
||||
style="fill:#000000"
|
||||
d="m 297.65022,157.87605 c -2.2006,-4.14817 -2.25612,-4.72375 -1.07435,-11.13745 1.01644,-5.51645 1.0058,-6.91568 -0.0577,-7.59022 -2.09414,-1.32824 -2.26904,-1.11667 -3.55604,4.30126 -2.44208,10.28061 -7.5788,11.78157 -14.12212,4.12653 -2.21645,-2.59301 -3.83105,-4.91343 -3.588,-5.15647 0.24304,-0.24304 2.2683,0.3817 4.50057,1.38832 3.96071,1.78603 4.10326,1.78377 5.90569,-0.0935 3.20534,-3.3385 3.41052,-5.94119 0.57039,-7.23524 -3.00177,-1.3677 -3.32056,-4.66808 -0.61415,-6.35826 2.14593,-1.34016 1.79515,-3.22663 -1.22354,-6.58024 -2.31284,-2.56944 -5.86253,-2.93592 -7.64413,-0.78922 -0.66679,0.80343 -1.45799,3.39093 -1.75823,5.75 -0.68255,5.36303 -1.70964,7.40829 -4.02425,8.01357 -1.53525,0.40148 -1.75335,-0.0391 -1.42245,-2.87349 0.21495,-1.84121 -0.33333,-5.15749 -1.2184,-7.3695 -0.88507,-2.21201 -1.60922,-5.85773 -1.60922,-8.1016 0,-3.30639 0.64451,-4.72427 3.4,-7.47976 7.46217,-7.46217 17.46811,-2.56624 21.28275,10.41371 1.37379,4.67458 2.26574,6.18386 3.65515,6.1849 1.60567,0.001 1.7493,-0.53562 1.13671,-4.24861 -0.38566,-2.3375 -1.82368,-7.82895 -3.19561,-12.20322 -3.22539,-10.28389 -2.79188,-14.437901 2.80234,-26.852911 l 4.41866,-9.80612 4.41578,9.30612 c 5.69234,11.99644 6.23101,17.404191 2.82479,28.358611 -3.54723,11.40788 -4.05189,15.44973 -1.9277,15.43897 1.18837,-0.006 2.25078,-1.81601 3.59376,-6.12254 1.23521,-3.96097 3.20554,-7.47943 5.59516,-9.99145 3.20598,-3.37018 4.26481,-3.87455 8.09337,-3.85522 9.43959,0.0477 13.20279,7.87737 9.29638,19.34206 -0.88466,2.59632 -1.39706,5.82649 -1.13868,7.17814 0.30478,1.59432 0.0115,2.45756 -0.83483,2.45756 -2.00513,0 -4.41803,-4.09611 -4.41803,-7.5 0,-6.75824 -5.58111,-9.7037 -9.82569,-5.18555 -2.75235,2.92975 -2.73687,4.45582 0.0757,7.45971 l 2.25,2.40307 -2.88476,2.3064 c -2.31157,1.84813 -2.75629,2.81827 -2.23819,4.88252 0.99254,3.95458 3.93874,5.05236 8.17033,3.04434 1.93827,-0.91977 3.71148,-1.48496 3.94047,-1.25598 0.22898,0.22899 -1.39712,2.5379 -3.61357,5.13091 -3.10664,3.63447 -4.70274,4.71458 -6.96678,4.71458 -3.45447,0 -6.39793,-4.02441 -7.43558,-10.1662 -0.66026,-3.90802 -1.12144,-4.36766 -3.07883,-3.06849 -0.79603,0.52835 -0.82076,2.62419 -0.088,7.46232 0.88025,5.81233 0.76913,7.28145 -0.81675,10.79831 -1.00959,2.23887 -2.14977,4.26484 -2.53373,4.50214 -0.38397,0.2373 -1.74235,-1.53695 -3.01864,-3.94278 z"
|
||||
id="path3016" />
|
||||
<path
|
||||
style="fill:#000000"
|
||||
d="m 388.25173,159.32983 c -3.62395,-3.78259 -4.48377,-10.81352 -2.15736,-17.64115 2.0869,-6.12471 2.05789,-6.39793 -0.67919,-6.39793 -1.71354,0 -2.6169,0.87883 -3.54684,3.45051 -3.6298,10.03804 -16.37653,11.47636 -21.23606,2.39624 -0.96238,-1.79822 -0.86828,-1.89051 0.94057,-0.92244 2.83535,1.51743 7.739,1.33516 11.12023,-0.41334 3.53714,-1.82913 4.94561,-5.41415 2.6351,-6.70717 -2.18858,-1.22479 -2.02984,-2.53701 0.4002,-3.30827 1.9317,-0.6131 1.94539,-0.75554 0.33473,-3.48218 -3.31849,-5.61774 -12.03695,-6.88526 -16.82667,-2.4463 l -2.76989,2.56705 0.67169,-3.81705 c 1.89727,-10.7818 9.05502,-17.6342 16.01919,-15.33581 5.90372,1.9484 9.35388,7.35593 11.01797,17.26876 0.49333,2.93874 1.08243,3.75 2.72309,3.75 1.9431,0 2.05572,-0.41328 1.56687,-5.75 -0.28969,-3.1625 -2.15219,-9.90281 -4.13889,-14.97847 -1.9867,-5.07566 -3.61218,-10.741281 -3.61218,-12.590281 0,-3.60626 4.47114,-13.34338 8.30001,-18.07553 l 2.34181,-2.89428 4.16592,6.23851 c 7.22727,10.82292 7.54674,15.31323 2.01367,28.303221 -1.86711,4.38342 -3.28601,9.71637 -3.59101,13.49683 -0.46452,5.7579 -0.34621,6.25 1.50258,6.25 1.64486,0 2.21144,-1.03708 3.14138,-5.75 2.80814,-14.23161 12.59932,-20.02942 20.64909,-12.22727 3.27212,3.17146 6.52993,10.70781 6.44475,14.90877 -0.0287,1.41518 -0.15088,1.41341 -1.25,-0.0182 -4.42019,-5.75714 -15.59203,-4.87518 -18.47796,1.45873 -0.99615,2.18631 -0.88894,2.60465 0.80531,3.14239 2.37519,0.75385 2.51189,2.0742 0.34056,3.28933 -2.31051,1.29303 -0.90204,4.87805 2.6351,6.70717 3.39603,1.75616 7.31613,1.91405 10.13018,0.40802 3.46945,-1.8568 3.26681,-0.13718 -0.41806,3.54768 -6.26578,6.26579 -14.24686,4.32754 -18.78155,-4.56119 -1.3032,-2.55448 -2.67724,-3.90547 -3.9721,-3.90547 -2.37288,0 -2.39595,0.30996 -0.4905,6.59107 2.58616,8.52504 1.59138,14.31109 -3.20706,18.65362 -1.84221,1.66717 -2.0407,1.61673 -4.74468,-1.20561 z"
|
||||
id="path3014" />
|
||||
<path
|
||||
style="fill:#000000"
|
||||
d="m 648.71928,156.18512 c -1.91535,-3.03634 -2.07749,-4.31729 -1.53716,-12.14437 0.51527,-7.46427 0.37834,-8.75 -0.9319,-8.75 -0.91246,0 -1.53593,0.88665 -1.53593,2.18428 0,3.47554 -3.79112,10.36597 -6.50145,11.8165 -3.68767,1.97358 -6.84916,0.0955 -9.11557,-5.415 -1.03564,-2.51806 -2.2346,-4.57997 -2.66436,-4.58203 -1.52702,-0.007 -2.01484,3.29227 -0.77926,5.27076 1.12682,1.80432 1.0408,1.95356 -0.84218,1.46115 -1.57067,-0.41074 -2.09718,-0.0846 -2.09718,1.29894 0,1.01605 -0.45,2.12548 -1,2.4654 -0.56789,0.35098 -1,-0.49597 -1,-1.96004 0,-2.24937 -0.31818,-2.49821 -2.49556,-1.95172 -2.16848,0.54425 -1.90025,0.0225 2.04656,-3.98095 2.49817,-2.53401 5.01871,-4.60729 5.6012,-4.60729 0.5825,0 2.39607,1.125 4.03017,2.5 3.6798,3.09634 7.21239,3.20219 9.26093,0.27749 2.28645,-3.26437 1.90822,-5.49988 -1.18107,-6.98054 -3.69591,-1.7714 -4.07412,-4.46991 -0.83343,-5.94646 1.41416,-0.64434 2.5712,-1.67416 2.5712,-2.2885 0,-2.10103 -3.11126,-5.56199 -5,-5.56199 -2.39402,0 -5,3.66606 -5,7.03395 0,3.60784 -3.41892,6.96605 -7.09201,6.96605 -1.65775,0 -4.66968,-1.125 -6.69318,-2.5 -2.02349,-1.375 -4.50118,-2.5 -5.50596,-2.5 -1.00479,0 -1.54877,-0.45 -1.20885,-1 0.33992,-0.55 1.49148,-1 2.55902,-1 1.3912,0 1.94098,-0.69141 1.94098,-2.44098 0,-3.18614 1.76205,-4.25667 2.17899,-1.32385 0.20366,1.43258 0.96147,2.21436 2.06227,2.12748 1.35677,-0.10708 1.60753,0.39164 1.13785,2.26298 -0.63105,2.5143 1.20878,5.7471 2.7342,4.80434 1.2188,-0.75326 1.11126,-4.94838 -0.2427,-9.46749 -2.40513,-8.02762 2.42516,-16.96248 9.17011,-16.96248 4.96054,0 10.36163,5.97036 11.9921,13.25604 1.03201,4.61153 1.67357,5.74396 3.25412,5.74396 1.74425,0 1.89405,-0.46669 1.31404,-4.09387 -0.36005,-2.25164 -1.76756,-6.73808 -3.12781,-9.96987 -1.39598,-3.31672 -2.47317,-7.83914 -2.47317,-10.383301 0,-4.57306 2.92597,-13.5672 7.03202,-21.61572 l 2.25947,-4.42893 3.22805,7.09844 c 6.60969,14.53458 7.1973,20.115231 3.14822,29.899181 -1.36706,3.30326 -2.80163,7.69076 -3.18795,9.75 -0.62963,3.35623 -0.48566,3.74407 1.38985,3.74407 1.47313,0 2.26635,-0.81374 2.68064,-2.75 2.19968,-10.28051 6.9235,-16.27686 12.77643,-16.2182 7.88732,0.079 11.47247,8.21249 8.50711,19.29965 -1.43828,5.37755 -0.59135,8.54212 1.76315,6.58806 0.96728,-0.80278 1.41816,-2.36291 1.17052,-4.05022 -0.35092,-2.39093 -0.16865,-2.61916 1.41484,-1.7717 1.5294,0.81851 1.81765,0.58009 1.81765,-1.50339 0,-2.86574 1.94122,-4.6097 2.11848,-1.90322 0.0652,0.99496 0.0454,2.37152 -0.0438,3.05902 -0.0893,0.6875 0.73085,1.25 1.8225,1.25 1.09165,0 2.26293,0.45 2.60285,1 0.33992,0.55 -0.20406,1 -1.20885,1 -1.00478,0 -3.48247,1.125 -5.50596,2.5 -4.30569,2.92579 -8.81868,3.22546 -11.07231,0.73523 -0.87841,-0.97063 -2.04003,-3.7361 -2.58138,-6.14549 -1.59527,-7.1 -5.90347,-8.25381 -8.9818,-2.40548 -1.51302,2.8745 -1.48479,2.99485 0.84525,3.60417 3.10581,0.81218 3.69124,3.73751 1.15843,5.78845 -1.19908,0.97096 -2.68383,1.93327 -3.29946,2.13848 -1.37522,0.45841 -0.31944,4.17626 1.78302,6.27872 2.17571,2.17572 4.79133,1.85788 8.18069,-0.99408 1.6341,-1.375 3.48541,-2.5 4.11403,-2.5 0.62862,0 3.16574,2.08129 5.63803,4.6251 3.19105,3.28335 3.90548,4.47092 2.4627,4.09362 -1.50158,-0.39266 -2.03242,-0.049 -2.03242,1.31588 0,2.87356 -1.87067,3.32888 -2.55036,0.62075 -0.47631,-1.89774 -1.08189,-2.30304 -2.77932,-1.86008 -2.09015,0.54543 -2.10383,0.49978 -0.37037,-1.23584 1.95023,-1.95266 1.92268,-5.05943 -0.0449,-5.05943 -0.66964,0 -2.23848,2.02452 -3.48631,4.49893 -1.51335,3.00093 -3.21811,4.82512 -5.11992,5.47861 -2.54265,0.87368 -3.16604,0.62725 -5.7615,-2.27758 -1.6007,-1.79149 -3.44852,-5.26936 -4.10627,-7.72861 -0.70881,-2.65032 -1.77765,-4.47135 -2.62438,-4.47135 -1.15261,0 -1.27015,0.91743 -0.60859,4.75 1.35636,7.85771 0.98677,12.50647 -1.28355,16.14437 l -2.11834,3.39437 -2.1412,-3.39437 z"
|
||||
id="path3012" />
|
||||
<path
|
||||
style="fill:#000000"
|
||||
d="m 660.82626,157.54075 c -0.79087,-1.40166 -1.23867,-1.50119 -2.24969,-0.5 -2.13582,2.11504 -2.80892,1.39537 -1.69188,-1.80896 0.5865,-1.68243 0.76716,-4.93003 0.40148,-7.21689 l -0.66488,-4.15792 2.32652,3.45232 c 1.27958,1.89877 3.438,4.02134 4.7965,4.71682 l 2.46998,1.2645 -2.24041,0.61419 c -1.77372,0.48625 -2.11567,1.11117 -1.64159,3.00006 0.70205,2.79718 -0.0963,3.13428 -1.50603,0.63588 z"
|
||||
id="path3010" />
|
||||
<path
|
||||
style="fill:#000000"
|
||||
d="m 639.42454,156.29075 c 0.36373,-1.39092 0.0307,-2 -1.09362,-2 -2.3745,0 -1.96884,-1.51849 0.73476,-2.75033 1.29326,-0.58926 3.34056,-3.02399 4.54954,-5.41052 l 2.19815,-4.33915 -0.73626,4 c -0.93085,5.05715 -0.9285,6.30774 0.0188,9.97285 0.74904,2.89805 0.71927,2.92841 -1.18306,1.20682 -1.71483,-1.5519 -2.02323,-1.57891 -2.5436,-0.22284 -0.87281,2.27444 -2.55558,1.87914 -1.94471,-0.45683 z"
|
||||
id="path3008" />
|
||||
<path
|
||||
style="fill:#000000"
|
||||
d="m 559.33389,152.29805 c -1.36096,-3.40136 -1.60986,-5.78322 -1.08074,-10.34215 0.49271,-4.24518 0.37211,-5.72816 -0.42571,-5.23508 -0.61223,0.37838 -1.11315,1.28882 -1.11315,2.02319 0,2.11942 -5.60257,7.54674 -7.79043,7.54674 -1.0934,0 -3.05035,-0.88503 -4.34879,-1.96673 l -2.36078,-1.96673 2.31574,-0.0333 c 3.11832,-0.0448 5.90334,-1.63985 7.24702,-4.15054 0.90882,-1.69815 0.71442,-2.49101 -1.07878,-4.39979 l -2.18738,-2.32836 2.1017,-1.79953 c 1.15593,-0.98974 2.10002,-2.71202 2.09796,-3.82729 -0.01,-5.30251 -7.74635,-12.37663 -12.04391,-11.01264 -2.53059,0.80318 -3.49325,4.81583 -2.18107,9.0913 1.20581,3.9289 0.5328,4.20721 -3.1564,1.30528 -3.74589,-2.94651 -5.61488,-7.07208 -5.61488,-12.39416 0,-9.10194 4.25301,-14.790271 11.05829,-14.790271 7.84838,0 13.00716,6.931041 15.3955,20.684461 0.73687,4.24334 1.61121,7.9866 1.94299,8.31838 1.39708,1.39708 0.42618,-7.62798 -1.94067,-18.03965 -4.71604,-20.745631 -4.15173,-29.870761 2.32573,-37.607851 l 2.86102,-3.4174 2.79571,3.66536 c 6.38236,8.36771 6.84993,14.88375 2.55331,35.582971 -3.12581,15.05877 -3.69319,20.63793 -1.99188,19.58646 0.55,-0.33992 1.00534,-2.05398 1.01187,-3.80902 0.016,-4.30623 2.22262,-12.29036 4.77801,-17.28823 5.05289,-9.882491 15.99745,-10.516041 20.8125,-1.20477 1.67788,3.24466 1.83876,12.07486 0.27543,15.11776 -1.41068,2.74581 -5.97323,7.68426 -7.09934,7.68426 -0.46605,0 -0.55944,-2.17044 -0.20754,-4.8232 0.65011,-4.90076 -0.91279,-8.18251 -3.89236,-8.17306 -2.55594,0.008 -7.42529,3.94274 -9.00861,7.27933 -2.1768,4.58727 -2.10667,5.89853 0.43174,8.07198 2.1014,1.79928 2.10142,1.79985 0.10725,3.97224 -3.30503,3.60042 -1.05459,7.33372 5.20376,8.63262 l 3.08729,0.64075 -2.74271,1.80991 c -3.6265,2.3931 -7.40378,1.39839 -9.5744,-2.52134 -3.79073,-6.84534 -4.21981,-6.83231 -3.64856,0.11077 0.41513,5.04556 0.12293,7.38681 -1.30588,10.4632 l -1.84068,3.96321 -1.76817,-4.41911 z"
|
||||
id="path3006" />
|
||||
<path
|
||||
style="fill:#000000"
|
||||
d="m 639.30715,107.25171 c -2.80055,-4.23192 -7.86815,-7.950871 -10.84286,-7.957221 -2.66872,-0.006 -2.08483,-1.70289 0.83825,-2.43653 2.09086,-0.52478 2.36325,-0.92073 1.41742,-2.06037 -0.64395,-0.77592 -1.01774,-2.20565 -0.83064,-3.17717 0.30604,-1.58913 0.54862,-1.54267 2.41708,0.46289 l 2.0769,2.22929 1.37964,-2.76092 c 1.34281,-2.68724 1.39463,-2.58743 1.94144,3.73907 0.30899,3.575 1.53732,8.637501 2.72963,11.250001 1.1923,2.6125 2.02792,4.75 1.85694,4.75 -0.17099,0 -1.5137,-1.81757 -2.9838,-4.03904 z"
|
||||
id="path3004" />
|
||||
<path
|
||||
style="fill:#000000"
|
||||
d="m 659.73653,110.00091 c -0.0122,-0.43441 0.96219,-2.68441 2.16539,-5 1.4775,-2.84349 2.20788,-6.092081 2.25,-10.007601 0.0614,-5.70604 0.0903,-5.76302 1.83303,-3.61371 1.71029,2.1093 1.83833,2.12249 3.75613,0.38691 2.49397,-2.25702 3.52367,-1.37283 1.91083,1.64079 -0.77266,1.44374 -0.85488,2.41103 -0.22283,2.62171 0.55088,0.18363 1.8529,0.97833 2.8934,1.766 1.80807,1.36874 1.78352,1.43354 -0.55444,1.46394 -2.29392,0.0298 -10.02724,4.571731 -10.07599,5.917801 -0.0348,0.96003 -3.93055,5.71133 -3.95552,4.82416 z"
|
||||
id="path3000" />
|
||||
<g
|
||||
id="g3200"
|
||||
transform="matrix(1.585999,0,0,1.585999,169.37726,-81.031037)"
|
||||
style="fill:#ff0000">
|
||||
<path
|
||||
id="path3036-1"
|
||||
d="m 142.07892,371.19992 c -1.63435,-1.80594 -1.72217,-2.95171 -0.88718,-11.57564 1.08111,-11.16596 -0.24334,-19.79171 -4.25429,-27.70694 -3.59948,-7.10323 -3.37591,-12.42949 0.81206,-19.34583 1.83333,-3.02771 4.11153,-6.21029 5.06267,-7.07239 1.58356,-1.43532 1.90212,-1.36629 3.77876,0.81884 4.00269,4.66066 7.97327,12.43246 7.98252,15.62458 0.005,1.78106 -1.52402,6.95606 -3.39817,11.5 -4.18973,10.15812 -5.17435,17.38316 -3.62264,26.5827 1.01541,6.02003 0.95696,7.41994 -0.42104,10.08471 -1.87714,3.62998 -2.61079,3.78824 -5.05269,1.08997 z"
|
||||
style="fill:#ff0000"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path3030-6"
|
||||
d="m 128.67683,364.45425 c -1.61566,-1.5125 -3.22671,-3.75819 -3.58012,-4.99042 -0.6387,-2.22694 -0.62429,-2.22995 2.39604,-0.5 2.99539,1.71567 3.07621,1.70285 5.68372,-0.90168 3.14168,-3.1381 3.53209,-9.21019 0.85489,-13.29612 -2.86894,-4.37856 -7.44852,-2.7565 -7.44852,2.63822 0,3.42443 -0.93715,3.51436 -4.28548,0.41123 -6.85923,-6.35692 -4.52596,-21.61123 3.30561,-21.61123 5.6523,0 11.32516,7.63857 13.95118,18.78541 2.00468,8.50937 -0.37241,18.75334 -4.91592,21.18495 -2.61735,1.40076 -2.63189,1.39656 -5.9614,-1.72036 z"
|
||||
style="fill:#ff0000"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path3028-2"
|
||||
d="m 153.41389,366.16134 c -3.20749,-1.85604 -5.16686,-9.33389 -4.55735,-17.39294 0.63544,-8.40201 3.02837,-14.58643 7.47319,-19.31415 5.70867,-6.072 12.48368,-3.56373 13.78333,5.10293 0.84762,5.65235 -0.82705,10.9488 -4.33412,13.70746 l -2.65913,2.09167 -0.76449,-2.95027 c -1.61718,-6.24093 -5.63987,-6.64475 -8.40613,-0.84385 -2.18715,4.5865 -1.16258,10.07424 2.30507,12.34634 2.36484,1.5495 2.80537,1.55863 5.32881,0.11037 2.54876,-1.46279 2.71812,-1.45364 2.30543,0.12451 -0.67517,2.58183 -4.55351,6.81944 -6.80566,7.43608 -1.1,0.30118 -2.75103,0.11301 -3.66895,-0.41815 z"
|
||||
style="fill:#ff0000"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(1.7069309,0,0,1.7069309,-128.89437,105.97217)"
|
||||
id="g3217-6">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3038-5"
|
||||
d="m 373.27099,241.06823 c -1.84628,-2.63593 -1.95033,-5.32861 -0.43799,-11.33467 1.61864,-6.4282 4.3072,-6.11508 6.34255,0.73868 1.96801,6.62701 1.94689,7.0299 -0.53384,10.18364 -2.52614,3.21146 -3.36503,3.27587 -5.37072,0.41235 z"
|
||||
style="fill:#000000" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3034-7"
|
||||
d="m 361.46427,236.21063 c -1.52802,-0.88999 -4.74998,-5.87251 -4.74998,-7.34548 0,-0.2887 1.18444,-0.0746 2.63208,0.47581 3.15303,1.19878 5.48207,0.58612 7.89102,-2.07575 0.98278,-1.08596 2.5693,-1.97447 3.52559,-1.97447 1.52353,0 1.62459,0.52599 0.81659,4.25 -1.39084,6.41021 -5.69191,9.24628 -10.1153,6.66989 z"
|
||||
style="fill:#000000" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3032-7"
|
||||
d="m 383.50366,236.23263 c -1.5524,-0.905 -3.76993,-6.58507 -3.78379,-9.69193 -0.009,-2.05468 2.73324,-1.42027 5.40351,1.25 2.70807,2.70807 4.64221,3.0781 7.65665,1.46482 2.8803,-1.54149 2.52031,1.18525 -0.65463,4.95845 -2.64398,3.14219 -5.53385,3.81881 -8.62174,2.01866 z"
|
||||
style="fill:#000000" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3026-1"
|
||||
d="m 368.78843,223.41349 c -3.24581,-0.90704 -3.69702,-2.72315 -0.86503,-3.48176 3.75717,-1.00645 13.45518,-0.72293 16.47579,0.48166 l 2.8151,1.12264 -3,1.33225 c -3.15862,1.4027 -11.32454,1.69131 -15.42586,0.54521 z"
|
||||
style="fill:#000000" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3024-7"
|
||||
d="m 355.01357,218.04075 c -3.23464,-3.55134 -4.29928,-6.2843 -4.29928,-11.03638 0,-5.50199 3.43432,-11.08028 7.08696,-11.51119 5.3124,-0.62673 11.97142,8.33556 13.43248,18.07861 0.62854,4.19146 0.49934,4.71825 -1.1559,4.71264 -1.02495,-0.003 -2.63011,-1.35348 -3.56703,-3 -2.8379,-4.98728 -7.79651,-3.11706 -7.79651,2.94058 0,2.673 -1.15044,2.61572 -3.70072,-0.18426 z"
|
||||
style="fill:#000000" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3022-6"
|
||||
d="m 392.71429,217.49075 c 0,-5.59592 -4.97984,-7.12598 -7.16029,-2.2 -0.90934,2.05433 -2.03904,3 -3.58382,3 -2.77389,0 -2.79911,-1.0306 -0.22884,-9.35214 4.66972,-15.11881 15.54237,-18.38805 18.95875,-5.70061 1.40323,5.2112 -0.15236,11.37584 -3.70032,14.66398 -3.34833,3.10313 -4.28548,3.0132 -4.28548,-0.41123 z"
|
||||
style="fill:#000000" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3020-5"
|
||||
d="m 373.29635,217.11089 c -0.22494,-0.72608 -0.66545,-2.8015 -0.97891,-4.61205 -0.31345,-1.81056 -1.92739,-6.68206 -3.58653,-10.82556 -1.65914,-4.14351 -3.0124,-8.73715 -3.00724,-10.20809 0.009,-2.61552 3.96102,-10.21858 7.87383,-15.1487 1.84172,-2.32055 2.07717,-2.37142 3.79025,-0.81883 1.0046,0.91048 3.31662,4.11628 5.13784,7.12399 4.15721,6.86561 4.33517,11.32146 0.74626,18.6863 -1.46947,3.01554 -3.24206,7.9578 -3.93908,10.9828 -1.01385,4.40006 -1.70329,5.56402 -3.44736,5.82014 -1.19903,0.17607 -2.36411,-0.27393 -2.58906,-1 z"
|
||||
style="fill:#000000" />
|
||||
</g>
|
||||
<path
|
||||
style="color:#000000;fill:#2c2c2c;fill-opacity:1;fill-rule:nonzero;stroke:#2c2c2c;stroke-width:1.43718708;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
d="m 164.28043,528.44679 c -3.91612,-2.91534 -4.55691,-4.61021 -3.66768,-9.70101 0.59261,-3.39268 1.74495,-7.30762 2.56075,-8.69988 0.81582,-1.39226 -1.76374,-0.26048 -5.73237,2.51508 -4.44433,3.10819 -9.2105,5.0464 -12.40946,5.0464 -6.05029,0 -11.12011,-5.77601 -11.12011,-10.50782 0,-2.65046 0.50293,-3.05427 5.46109,-2.54533 3.24121,0.33269 6.80418,-0.72174 10.55758,-2.07919 l 6.82434,-2.46809 -5.52502,-2.02458 c -6.59267,-2.4158 -7.44963,-7.59864 -1.43824,-8.69808 5.71044,-1.04437 3.02541,-3.29502 -3.93096,-3.29502 -7.03817,0 -16.5956,4.97729 -16.5956,8.64261 0,4.32095 -3.46167,4.60324 -7.91323,0.64531 -8.48024,-7.53984 -7.27811,-19.35286 2.8238,-27.74914 10.85074,-9.01867 25.20095,-6.98906 33.21905,4.6983 4.50002,6.55933 4.86658,6.78795 3.63235,2.26542 -0.75504,-2.76658 -4.14961,-9.50256 -7.54349,-14.96883 -5.42212,-8.73301 -5.90194,-10.56366 -3.95534,-15.09047 1.21843,-2.83348 6.22367,-8.33268 11.12278,-12.22046 l 8.90741,-7.06866 8.10915,6.11516 c 14.93895,11.26555 16.39726,16.32278 8.37454,29.04186 -2.67964,4.24824 -5.49934,9.98763 -6.26604,12.75422 l -1.39394,5.03015 3.98865,-5.91762 c 6.92288,-10.27081 16.43155,-12.93174 28.23004,-7.89996 8.26862,3.52637 13.19281,11.03619 13.19281,20.12015 0,6.08962 -1.01591,8.08645 -6.10466,11.99889 -4.75053,2.71939 -5.1898,4.42271 -6.16486,0.67264 -0.076,-5.07712 -8.9853,-11.06957 -16.4576,-11.06957 -7.75112,0 -8.82255,1.35629 -3.55123,4.49539 l 4.53631,2.70138 -5.7648,3.34561 c -5.30719,3.08004 -5.49049,3.50484 -2.30913,5.35138 1.90062,1.10318 7.57865,1.6872 12.59062,2.03842 6.62376,0.46417 6.74133,0.74306 5.56002,4.89787 -3.32368,11.68985 -17.9597,11.91636 -27.41762,0.88354 -2.27674,-2.65585 -2.36707,-2.60123 -1.18808,0.71859 3.94061,11.09626 3.74213,14.43963 -1.0699,18.02192 -5.86621,4.3671 -6.31005,4.36723 -12.17191,0.003 z"
|
||||
id="path3080"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cssssssscssssssssssscssccsssccsscssssssscc"
|
||||
inkscape:export-filename="/home/jrbastien/Ubuntu One/CoverArt/1.1 dark/genre_québécois.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#2c2c2c;fill-opacity:1;stroke:#2c2c2c;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 633.92274,511.61622 c -1.70784,-4.26831 -2.02018,-7.25725 -1.3562,-12.97816 0.61829,-5.32719 0.46695,-7.18816 -0.53422,-6.5694 -0.76827,0.47482 -1.39686,1.61731 -1.39686,2.53887 0,2.65961 -7.03056,9.47025 -9.77606,9.47025 -1.37209,0 -3.82783,-1.11061 -5.45721,-2.46801 l -2.96249,-2.46801 2.90597,-0.0418 c 3.91311,-0.0562 7.40798,-2.05782 9.09414,-5.20844 1.14046,-2.13097 0.89651,-3.12591 -1.35374,-5.5212 l -2.7449,-2.92181 2.63739,-2.2582 c 1.45055,-1.242 2.63527,-3.40326 2.63268,-4.80279 -0.0125,-6.65402 -9.72074,-15.53118 -15.11366,-13.81954 -3.17559,1.00789 -4.38361,6.04329 -2.73699,11.40848 1.51315,4.93031 0.6686,5.27955 -3.9609,1.63798 -4.70064,-3.69752 -7.046,-8.87462 -7.046,-15.55319 0,-11.42184 5.33702,-18.56003 13.87683,-18.56003 9.84878,0 16.32242,8.69764 19.3195,25.95654 0.92469,5.32488 2.02189,10.02222 2.43822,10.43856 1.75318,1.75318 0.53481,-9.5722 -2.4353,-22.6376 -5.91807,-26.03329 -5.20993,-37.48423 2.91851,-47.19335 l 3.59024,-4.28843 3.50828,4.59959 c 8.0091,10.50047 8.59584,18.67732 3.2041,44.65238 -3.92252,18.89695 -4.63452,25.89812 -2.49957,24.57866 0.69018,-0.42657 1.26158,-2.5775 1.26977,-4.77987 0.02,-5.40381 2.78912,-15.42293 5.99584,-21.69466 6.34076,-12.40135 20.07488,-13.19638 26.11719,-1.51184 2.10554,4.07166 2.30742,15.15251 0.34563,18.97098 -1.77023,3.44566 -7.49569,9.64283 -8.90882,9.64283 -0.58484,0 -0.70203,-2.72365 -0.26044,-6.05254 0.81581,-6.14987 -1.14544,-10.26808 -4.88444,-10.25622 -3.2074,0.01 -9.31785,4.94767 -11.30473,9.13469 -2.73163,5.75647 -2.64362,7.40195 0.54178,10.12937 2.637,2.25788 2.63703,2.2586 0.13459,4.98469 -4.14743,4.51809 -1.32339,9.20293 6.53009,10.8329 l 3.87418,0.80407 -3.44177,2.27122 c -4.55082,3.00304 -9.29086,1.75481 -12.01473,-3.16399 -4.75691,-8.59007 -5.29535,-8.57373 -4.5785,0.13901 0.52093,6.33157 0.15426,9.26956 -1.63873,13.13006 l -2.30983,4.97336 -2.21884,-5.54546 z"
|
||||
id="path3006-2" />
|
||||
<rect
|
||||
style="color:#000000;fill:none;stroke:none;stroke-width:2.36100698;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
id="rect3198"
|
||||
width="125.63898"
|
||||
height="125.63899"
|
||||
x="97.537636"
|
||||
y="288.19638"
|
||||
inkscape:export-filename="/home/jrbastien/Ubuntu One/CoverArt/1.1 dark/genre_québécois.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<g
|
||||
transform="matrix(0.36596452,0,0,0.36596452,59.415002,137.45052)"
|
||||
id="layer1-9"
|
||||
style="color:#000000;fill:#2c2c2c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.25158429;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
inkscape:export-filename="/home/jrbastien/Ubuntu One/CoverArt/1.1 dark/genre_québécois.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 144.15625,0.03125 c -0.13825,0.31354858 -36.40104,50.955423 -59,117.46875 41.30895,13.57365 48.17533,45.24368 51.28125,71.375 C 108.69377,86.75113 -18.822472,131.23717 2.375,208.75 7.218782,226.46225 40.75964,260.03271 78.65625,250.3125 119.07933,239.94428 105.98568,182.7267 72.25,190 50.415851,194.70736 49.77397,224.97331 71,230.40625 c -17.53122,4.74162 -34.12577,-34.17765 -3.15625,-49.375 21.344524,-10.47419 54.09634,2.35206 59.84375,35.75 l 16.46875,0 0.0312,0 16.46875,0 c 5.74741,-33.39794 38.49924,-46.22419 59.84375,-35.75 30.96952,15.19735 14.37499,54.11662 -3.15625,49.375 21.22603,-5.43294 20.58417,-35.69889 -1.25,-40.40625 -33.73568,-7.2733 -46.82932,49.94428 -6.40625,60.3125 37.89661,9.72021 71.43748,-23.85025 76.28125,-41.5625 21.19748,-77.51283 -106.31876,-121.99887 -134.0625,-19.875 3.10592,-26.13132 9.97229,-57.80135 51.28125,-71.375 -22.59896,-66.513324 -58.86175,-117.15520141 -59,-117.46875 -1.1e-4,-2.4516e-4 -0.0312,1.8357e-4 -0.0312,0 z m -16.625,243.28125 c -2.76917,13.76764 -10.5875,25.83587 -26.90625,34.46875 32.90955,1.68807 43.38373,38.1235 43.53125,38.8125 l 0,0.0937 c 0,-8.6e-4 0.0307,-0.0598 0.0312,-0.0625 2.2e-4,-0.001 -3.2e-4,-0.0298 0,-0.0312 0.14752,-0.689 10.62171,-37.12443 43.53125,-38.8125 C 171.4,269.14837 163.58168,257.08014 160.8125,243.3125 l -16.625,0 -0.0312,0 -16.625,0 z"
|
||||
transform="translate(147.05822,286.5625)"
|
||||
id="path3178"
|
||||
style="color:#000000;fill:#2c2c2c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.25158429;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
|
||||
<rect
|
||||
width="62.578949"
|
||||
height="20.152544"
|
||||
rx="10.076272"
|
||||
ry="10.076272"
|
||||
x="260.21054"
|
||||
y="506.52594"
|
||||
id="rect2392"
|
||||
style="color:#000000;fill:#2c2c2c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.25158429;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Depois Largura: | Altura: | Tamanho: 67 KiB |
@@ -0,0 +1,213 @@
|
||||
<?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"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.48.3.1 r9886"
|
||||
width="500"
|
||||
height="500"
|
||||
xml:space="preserve"
|
||||
sodipodi:docname="Thumb_down.svg"><metadata
|
||||
id="metadata8"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs6"><linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2515"
|
||||
id="linearGradient6232"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.98766169,0,0,1.0896755,-34.224531,-15.222843)"
|
||||
x1="257.69382"
|
||||
y1="97.573967"
|
||||
x2="360.56195"
|
||||
y2="97.573967" /><linearGradient
|
||||
id="linearGradient2515"
|
||||
y2="45.016998"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x2="20.759001"
|
||||
y1="1"
|
||||
x1="20.759001"><stop
|
||||
id="stop3311"
|
||||
style="stop-color:#f6f6f6"
|
||||
offset="0" /><stop
|
||||
id="stop3313"
|
||||
style="stop-color:#d2d2d2"
|
||||
offset="1" /></linearGradient><linearGradient
|
||||
y2="97.573967"
|
||||
x2="360.56195"
|
||||
y1="97.573967"
|
||||
x1="257.69382"
|
||||
gradientTransform="matrix(0.79012935,0,0,-0.8717404,-322.99681,0.94435315)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient6249"
|
||||
xlink:href="#linearGradient2515"
|
||||
inkscape:collect="always" /><linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2515"
|
||||
id="linearGradient6782"
|
||||
x1="-189.35655"
|
||||
y1="50.600105"
|
||||
x2="-86.646011"
|
||||
y2="50.600105"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(256.87149,236.10798)" /><linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2515-8"
|
||||
id="linearGradient6782-8"
|
||||
x1="-189.35655"
|
||||
y1="50.600105"
|
||||
x2="-86.646011"
|
||||
y2="50.600105"
|
||||
gradientUnits="userSpaceOnUse" /><linearGradient
|
||||
id="linearGradient2515-8"
|
||||
y2="45.016998"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x2="20.759001"
|
||||
y1="1"
|
||||
x1="20.759001"><stop
|
||||
id="stop3311-0"
|
||||
style="stop-color:#f6f6f6"
|
||||
offset="0" /><stop
|
||||
id="stop3313-1"
|
||||
style="stop-color:#d2d2d2"
|
||||
offset="1" /></linearGradient><linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2515-0"
|
||||
id="linearGradient6782-86"
|
||||
x1="-189.35655"
|
||||
y1="50.600105"
|
||||
x2="-86.646011"
|
||||
y2="50.600105"
|
||||
gradientUnits="userSpaceOnUse" /><linearGradient
|
||||
id="linearGradient2515-0"
|
||||
y2="45.016998"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x2="20.759001"
|
||||
y1="1"
|
||||
x1="20.759001"><stop
|
||||
id="stop3311-00"
|
||||
style="stop-color:#f6f6f6"
|
||||
offset="0" /><stop
|
||||
id="stop3313-2"
|
||||
style="stop-color:#d2d2d2"
|
||||
offset="1" /></linearGradient><filter
|
||||
id="filter4056-0"
|
||||
inkscape:label="Inner Shadow"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:menu-tooltip="Adds a colorizable drop shadow inside"
|
||||
color-interpolation-filters="sRGB"><feGaussianBlur
|
||||
id="feGaussianBlur4058-2"
|
||||
stdDeviation="7"
|
||||
result="result8" /><feOffset
|
||||
id="feOffset4060-8"
|
||||
dx="4"
|
||||
dy="4"
|
||||
result="result11" /><feComposite
|
||||
id="feComposite4062-72"
|
||||
in2="result11"
|
||||
result="result6"
|
||||
in="SourceGraphic"
|
||||
operator="in" /><feFlood
|
||||
id="feFlood4064-7"
|
||||
result="result10"
|
||||
in="result6"
|
||||
flood-opacity="1"
|
||||
flood-color="rgb(0,0,0)" /><feBlend
|
||||
id="feBlend4066-4"
|
||||
in2="result10"
|
||||
mode="normal"
|
||||
in="result6"
|
||||
result="result12" /><feComposite
|
||||
id="feComposite4068-6"
|
||||
in2="SourceGraphic"
|
||||
result="result2"
|
||||
operator="in" /></filter><filter
|
||||
id="filter6856"
|
||||
inkscape:label="Inner Shadow"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:menu-tooltip="Adds a colorizable drop shadow inside"
|
||||
color-interpolation-filters="sRGB"><feGaussianBlur
|
||||
id="feGaussianBlur6858"
|
||||
stdDeviation="7"
|
||||
result="result8" /><feOffset
|
||||
id="feOffset6860"
|
||||
dx="4"
|
||||
dy="4"
|
||||
result="result11" /><feComposite
|
||||
id="feComposite6862"
|
||||
in2="result11"
|
||||
result="result6"
|
||||
in="SourceGraphic"
|
||||
operator="in" /><feFlood
|
||||
id="feFlood6864"
|
||||
result="result10"
|
||||
in="result6"
|
||||
flood-opacity="1"
|
||||
flood-color="rgb(0,0,0)" /><feBlend
|
||||
id="feBlend6866"
|
||||
in2="result10"
|
||||
mode="normal"
|
||||
in="result6"
|
||||
result="result12" /><feComposite
|
||||
id="feComposite6868"
|
||||
in2="SourceGraphic"
|
||||
result="result2"
|
||||
operator="in" /></filter></defs><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1280"
|
||||
inkscape:window-height="1000"
|
||||
id="namedview4"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.827"
|
||||
inkscape:cx="250"
|
||||
inkscape:cy="250"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="24"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="g10" /><g
|
||||
id="g10"
|
||||
inkscape:groupmode="layer"
|
||||
inkscape:label="wpzoom_developer"
|
||||
transform="matrix(1.25,0,0,-1.25,0,500)"><g
|
||||
inkscape:label="wpzoom_developer"
|
||||
id="g3030" /><path
|
||||
style="fill:url(#linearGradient6782);fill-opacity:1;stroke:#666666;stroke-width:2.4000001;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
d="m 68.714941,286.07266 c 0,0 23.66646,-8.02015 37.597189,-45.03399 1.64953,-4.38281 10.12858,-5.05491 11.65393,-1.89465 5.43194,11.25397 -0.91188,30.81556 -0.91188,30.81556 25.49151,0.25225 68.09402,-6.4894 45.65374,16.52624 0.96991,0.49199 14.81442,12.22014 -3.51183,17.14597 12.05736,9.74191 4.64063,13.34392 -2.85665,16.64724 16.78512,28.64473 -72.954709,11.50982 -87.211339,3.80398 z"
|
||||
id="path4017"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="csscccccc"
|
||||
inkscape:export-filename="/home/jrbastien/Ubuntu One/CoverArt/0.8 icons/Thumb_down.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" /><path
|
||||
style="fill:#333333;fill-opacity:1;stroke:none"
|
||||
d="m 70.253351,159.8587 c 0,0 23.66646,-8.02015 37.597189,-45.03398 1.64953,-4.38281 10.12858,-5.05491 11.65393,-1.89465 5.43194,11.25397 -0.91188,30.81555 -0.91188,30.81555 25.49151,0.25226 68.09402,-6.4894 45.65373,16.52624 0.96992,0.49199 14.81443,12.22014 -3.51182,17.14597 12.05736,9.74191 4.64063,13.34392 -2.85664,16.64725 16.78511,28.64472 -72.954719,11.50981 -87.211349,3.80397 z"
|
||||
id="path4017-2"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="csscccccc"
|
||||
inkscape:export-filename="/home/jrbastien/Ubuntu One/CoverArt/0.8 dark icons/Thumb_down.png"
|
||||
inkscape:export-xdpi="91.586052"
|
||||
inkscape:export-ydpi="91.586052" /><path
|
||||
style="fill:#b3b3b3;fill-opacity:1;stroke:none;filter:url(#filter6856)"
|
||||
d="m 212.08526,159.8587 c 0,0 23.66646,-8.02015 37.59719,-45.03399 1.64953,-4.3828 10.12858,-5.0549 11.65393,-1.89464 5.43194,11.25397 -0.91188,30.81556 -0.91188,30.81556 25.49151,0.25225 68.09402,-6.48941 45.65372,16.52623 0.96992,0.49199 14.81444,12.22014 -3.51182,17.14597 12.05737,9.74191 4.64063,13.34392 -2.85664,16.64725 16.78512,28.64472 -72.95471,11.50981 -87.21134,3.80397 z"
|
||||
id="path4017-21"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="csscccccc"
|
||||
inkscape:export-filename="/home/jrbastien/Ubuntu One/CoverArt/0.8 light/Thumb_down_light.png"
|
||||
inkscape:export-xdpi="73.268837"
|
||||
inkscape:export-ydpi="73.268837" /></g></svg>
|
||||
|
Depois Largura: | Altura: | Tamanho: 8.3 KiB |
@@ -0,0 +1,665 @@
|
||||
<?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="350"
|
||||
height="200"
|
||||
id="svg6462"
|
||||
version="1.1"
|
||||
inkscape:version="0.48.4 r9939"
|
||||
sodipodi:docname="arrow_up_down.svg"
|
||||
inkscape:export-filename="/home/jrbastien/Ubuntu One/CoverArt/UpDownArrows.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.8051997"
|
||||
inkscape:cx="89.596418"
|
||||
inkscape:cy="295.35798"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1440"
|
||||
inkscape:window-height="838"
|
||||
inkscape:window-x="1272"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true" />
|
||||
<defs
|
||||
id="defs6464">
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient6364"
|
||||
id="linearGradient6370"
|
||||
x1="101.42937"
|
||||
y1="400.5535"
|
||||
x2="99.124153"
|
||||
y2="244.95164"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.340328,0,0,1.340328,-155.22114,-66.380723)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient6364">
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop6366" />
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop6368" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient6364-8">
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop6366-5" />
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop6368-9" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
y2="244.95164"
|
||||
x2="99.124153"
|
||||
y1="400.5535"
|
||||
x1="101.42937"
|
||||
gradientTransform="matrix(1.340328,0,0,1.340328,-66.590934,-328.62237)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient6531"
|
||||
xlink:href="#linearGradient6364-8"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
y2="244.95164"
|
||||
x2="99.124153"
|
||||
y1="400.5535"
|
||||
x1="101.42937"
|
||||
gradientTransform="matrix(1.340328,0,0,1.340328,-31.467381,555.95415)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient6460"
|
||||
xlink:href="#linearGradient6364-2"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient6364-2">
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop6366-7" />
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop6368-8" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
y2="244.95164"
|
||||
x2="99.124153"
|
||||
y1="400.5535"
|
||||
x1="101.42937"
|
||||
gradientTransform="matrix(1.340328,0,0,-1.340328,133.5722,1341.1989)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient6421-9"
|
||||
xlink:href="#linearGradient6364-5-9"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient6364-5-9">
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop6366-4-1" />
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop6368-6-9" />
|
||||
</linearGradient>
|
||||
<filter
|
||||
id="filter3970"
|
||||
inkscape:label="Inner Shadow"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:menu-tooltip="Adds a colorizable drop shadow inside"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur3972"
|
||||
stdDeviation="4"
|
||||
result="result8" />
|
||||
<feOffset
|
||||
id="feOffset3974"
|
||||
dx="4"
|
||||
dy="4"
|
||||
result="result11" />
|
||||
<feComposite
|
||||
id="feComposite3976"
|
||||
in2="result11"
|
||||
result="result6"
|
||||
in="SourceGraphic"
|
||||
operator="in" />
|
||||
<feFlood
|
||||
id="feFlood3978"
|
||||
result="result10"
|
||||
in="result6"
|
||||
flood-opacity="1"
|
||||
flood-color="rgb(0,0,0)" />
|
||||
<feBlend
|
||||
id="feBlend3980"
|
||||
in2="result10"
|
||||
mode="normal"
|
||||
in="result6"
|
||||
result="result12" />
|
||||
<feComposite
|
||||
id="feComposite3982"
|
||||
in2="SourceGraphic"
|
||||
result="result2"
|
||||
operator="in" />
|
||||
</filter>
|
||||
<filter
|
||||
id="filter3984"
|
||||
inkscape:label="Inner Shadow"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:menu-tooltip="Adds a colorizable drop shadow inside"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur3986"
|
||||
stdDeviation="4"
|
||||
result="result8" />
|
||||
<feOffset
|
||||
id="feOffset3988"
|
||||
dx="4"
|
||||
dy="4"
|
||||
result="result11" />
|
||||
<feComposite
|
||||
id="feComposite3990"
|
||||
in2="result11"
|
||||
result="result6"
|
||||
in="SourceGraphic"
|
||||
operator="in" />
|
||||
<feFlood
|
||||
id="feFlood3992"
|
||||
result="result10"
|
||||
in="result6"
|
||||
flood-opacity="1"
|
||||
flood-color="rgb(0,0,0)" />
|
||||
<feBlend
|
||||
id="feBlend3994"
|
||||
in2="result10"
|
||||
mode="normal"
|
||||
in="result6"
|
||||
result="result12" />
|
||||
<feComposite
|
||||
id="feComposite3996"
|
||||
in2="SourceGraphic"
|
||||
result="result2"
|
||||
operator="in" />
|
||||
</filter>
|
||||
<filter
|
||||
color-interpolation-filters="sRGB"
|
||||
inkscape:menu-tooltip="Adds a colorizable drop shadow inside"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:label="Inner Shadow"
|
||||
id="filter3142">
|
||||
<feGaussianBlur
|
||||
result="result8"
|
||||
stdDeviation="4"
|
||||
id="feGaussianBlur3144" />
|
||||
<feOffset
|
||||
result="result11"
|
||||
dy="4"
|
||||
dx="4"
|
||||
id="feOffset3146" />
|
||||
<feComposite
|
||||
operator="in"
|
||||
in="SourceGraphic"
|
||||
result="result6"
|
||||
in2="result11"
|
||||
id="feComposite3148" />
|
||||
<feFlood
|
||||
flood-color="rgb(0,0,0)"
|
||||
flood-opacity="1"
|
||||
in="result6"
|
||||
result="result10"
|
||||
id="feFlood3150" />
|
||||
<feBlend
|
||||
result="result12"
|
||||
in="result6"
|
||||
mode="normal"
|
||||
in2="result10"
|
||||
id="feBlend3152" />
|
||||
<feComposite
|
||||
operator="in"
|
||||
result="result2"
|
||||
in2="SourceGraphic"
|
||||
id="feComposite3154" />
|
||||
</filter>
|
||||
<filter
|
||||
color-interpolation-filters="sRGB"
|
||||
inkscape:menu-tooltip="Adds a colorizable drop shadow inside"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:label="Inner Shadow"
|
||||
id="filter3938">
|
||||
<feGaussianBlur
|
||||
result="result8"
|
||||
stdDeviation="4"
|
||||
id="feGaussianBlur3940" />
|
||||
<feOffset
|
||||
result="result11"
|
||||
dy="4"
|
||||
dx="4"
|
||||
id="feOffset3942" />
|
||||
<feComposite
|
||||
operator="in"
|
||||
in="SourceGraphic"
|
||||
result="result6"
|
||||
in2="result11"
|
||||
id="feComposite3944" />
|
||||
<feFlood
|
||||
flood-color="rgb(0,0,0)"
|
||||
flood-opacity="1"
|
||||
in="result6"
|
||||
result="result10"
|
||||
id="feFlood3946" />
|
||||
<feBlend
|
||||
result="result12"
|
||||
in="result6"
|
||||
mode="normal"
|
||||
in2="result10"
|
||||
id="feBlend3948" />
|
||||
<feComposite
|
||||
operator="in"
|
||||
result="result2"
|
||||
in2="SourceGraphic"
|
||||
id="feComposite3950" />
|
||||
</filter>
|
||||
<filter
|
||||
color-interpolation-filters="sRGB"
|
||||
inkscape:menu-tooltip="Adds a colorizable drop shadow inside"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:label="Inner Shadow"
|
||||
id="filter3060">
|
||||
<feGaussianBlur
|
||||
result="result8"
|
||||
stdDeviation="4"
|
||||
id="feGaussianBlur3062" />
|
||||
<feOffset
|
||||
result="result11"
|
||||
dy="4"
|
||||
dx="4"
|
||||
id="feOffset3064" />
|
||||
<feComposite
|
||||
operator="in"
|
||||
in="SourceGraphic"
|
||||
result="result6"
|
||||
in2="result11"
|
||||
id="feComposite3066" />
|
||||
<feFlood
|
||||
flood-color="rgb(0,0,0)"
|
||||
flood-opacity="1"
|
||||
in="result6"
|
||||
result="result10"
|
||||
id="feFlood3068" />
|
||||
<feBlend
|
||||
result="result12"
|
||||
in="result6"
|
||||
mode="normal"
|
||||
in2="result10"
|
||||
id="feBlend3070" />
|
||||
<feComposite
|
||||
operator="in"
|
||||
result="result2"
|
||||
in2="SourceGraphic"
|
||||
id="feComposite3072" />
|
||||
</filter>
|
||||
<filter
|
||||
id="filter4056"
|
||||
inkscape:label="Inner Shadow"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:menu-tooltip="Adds a colorizable drop shadow inside"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur4058"
|
||||
stdDeviation="10"
|
||||
result="result8" />
|
||||
<feOffset
|
||||
id="feOffset4060"
|
||||
dx="4"
|
||||
dy="4"
|
||||
result="result11" />
|
||||
<feComposite
|
||||
id="feComposite4062"
|
||||
in2="result11"
|
||||
result="result6"
|
||||
in="SourceGraphic"
|
||||
operator="in" />
|
||||
<feFlood
|
||||
id="feFlood4064"
|
||||
result="result10"
|
||||
in="result6"
|
||||
flood-opacity="1"
|
||||
flood-color="rgb(0,0,0)" />
|
||||
<feBlend
|
||||
id="feBlend4066"
|
||||
in2="result10"
|
||||
mode="normal"
|
||||
in="result6"
|
||||
result="result12" />
|
||||
<feComposite
|
||||
id="feComposite4068"
|
||||
in2="SourceGraphic"
|
||||
result="result2"
|
||||
operator="in" />
|
||||
</filter>
|
||||
<filter
|
||||
id="filter4070"
|
||||
inkscape:label="Darken edges"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:menu-tooltip="Darken the edges with an inner blur"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur4072"
|
||||
stdDeviation="10"
|
||||
result="result8" />
|
||||
<feOffset
|
||||
id="feOffset4074"
|
||||
dx="4"
|
||||
dy="4"
|
||||
result="result11" />
|
||||
<feComposite
|
||||
id="feComposite4076"
|
||||
in2="result11"
|
||||
result="result6"
|
||||
in="SourceGraphic"
|
||||
operator="in" />
|
||||
<feFlood
|
||||
id="feFlood4078"
|
||||
result="result10"
|
||||
in="result6"
|
||||
flood-opacity="1"
|
||||
flood-color="rgb(0,0,0)" />
|
||||
<feBlend
|
||||
id="feBlend4080"
|
||||
in2="result10"
|
||||
mode="normal"
|
||||
in="result6"
|
||||
result="result12" />
|
||||
<feComposite
|
||||
id="feComposite4082"
|
||||
in2="SourceGraphic"
|
||||
result="fbSourceGraphic"
|
||||
operator="in" />
|
||||
<feColorMatrix
|
||||
result="fbSourceGraphicAlpha"
|
||||
in="fbSourceGraphic"
|
||||
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
|
||||
id="feColorMatrix3318" />
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur3320"
|
||||
result="result6"
|
||||
stdDeviation="1.5"
|
||||
in="fbSourceGraphic" />
|
||||
<feComposite
|
||||
in2="result6"
|
||||
id="feComposite3322"
|
||||
operator="atop"
|
||||
in="fbSourceGraphic"
|
||||
result="result8" />
|
||||
<feComposite
|
||||
in2="fbSourceGraphicAlpha"
|
||||
id="feComposite3324"
|
||||
in="result8"
|
||||
operator="atop"
|
||||
result="result9" />
|
||||
</filter>
|
||||
<filter
|
||||
id="filter4092"
|
||||
inkscape:label="Inner Shadow"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:menu-tooltip="Adds a colorizable drop shadow inside"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur4094"
|
||||
result="result6"
|
||||
stdDeviation="1.5" />
|
||||
<feComposite
|
||||
id="feComposite4096"
|
||||
in2="result6"
|
||||
operator="atop"
|
||||
in="SourceGraphic"
|
||||
result="result8" />
|
||||
<feComposite
|
||||
id="feComposite4098"
|
||||
in2="SourceAlpha"
|
||||
in="result8"
|
||||
operator="atop"
|
||||
result="fbSourceGraphic" />
|
||||
<feColorMatrix
|
||||
result="fbSourceGraphicAlpha"
|
||||
in="fbSourceGraphic"
|
||||
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
|
||||
id="feColorMatrix3076" />
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur3078"
|
||||
stdDeviation="4"
|
||||
result="result8"
|
||||
in="fbSourceGraphic" />
|
||||
<feOffset
|
||||
id="feOffset3080"
|
||||
dx="4"
|
||||
dy="4"
|
||||
result="result11" />
|
||||
<feComposite
|
||||
id="feComposite3082"
|
||||
in2="result11"
|
||||
result="result6"
|
||||
in="fbSourceGraphic"
|
||||
operator="in" />
|
||||
<feFlood
|
||||
id="feFlood3084"
|
||||
result="result10"
|
||||
in="result6"
|
||||
flood-opacity="1"
|
||||
flood-color="rgb(0,0,0)" />
|
||||
<feBlend
|
||||
id="feBlend3086"
|
||||
in2="result10"
|
||||
mode="normal"
|
||||
in="result6"
|
||||
result="result12" />
|
||||
<feComposite
|
||||
id="feComposite3088"
|
||||
in2="fbSourceGraphic"
|
||||
result="result2"
|
||||
operator="in" />
|
||||
</filter>
|
||||
<filter
|
||||
id="filter4100"
|
||||
inkscape:label="Darken edges"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:menu-tooltip="Darken the edges with an inner blur"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur4102"
|
||||
result="result6"
|
||||
stdDeviation="1.5" />
|
||||
<feComposite
|
||||
id="feComposite4104"
|
||||
in2="result6"
|
||||
operator="atop"
|
||||
in="SourceGraphic"
|
||||
result="result8" />
|
||||
<feComposite
|
||||
id="feComposite4106"
|
||||
in2="SourceAlpha"
|
||||
in="result8"
|
||||
operator="atop"
|
||||
result="result9" />
|
||||
</filter>
|
||||
<filter
|
||||
id="filter4108"
|
||||
inkscape:label="Inner Shadow"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:menu-tooltip="Adds a colorizable drop shadow inside"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur4110"
|
||||
stdDeviation="4"
|
||||
result="result8" />
|
||||
<feOffset
|
||||
id="feOffset4112"
|
||||
dx="4"
|
||||
dy="4"
|
||||
result="result11" />
|
||||
<feComposite
|
||||
id="feComposite4114"
|
||||
in2="result11"
|
||||
result="result6"
|
||||
in="SourceGraphic"
|
||||
operator="in" />
|
||||
<feFlood
|
||||
id="feFlood4116"
|
||||
result="result10"
|
||||
in="result6"
|
||||
flood-opacity="1"
|
||||
flood-color="rgb(0,0,0)" />
|
||||
<feBlend
|
||||
id="feBlend4118"
|
||||
in2="result10"
|
||||
mode="normal"
|
||||
in="result6"
|
||||
result="result12" />
|
||||
<feComposite
|
||||
id="feComposite4120"
|
||||
in2="SourceGraphic"
|
||||
result="result2"
|
||||
operator="in" />
|
||||
</filter>
|
||||
<filter
|
||||
id="filter4122"
|
||||
inkscape:label="Inner Shadow"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:menu-tooltip="Adds a colorizable drop shadow inside"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur4124"
|
||||
stdDeviation="4"
|
||||
result="result8" />
|
||||
<feOffset
|
||||
id="feOffset4126"
|
||||
dx="4"
|
||||
dy="4"
|
||||
result="result11" />
|
||||
<feComposite
|
||||
id="feComposite4128"
|
||||
in2="result11"
|
||||
result="result6"
|
||||
in="SourceGraphic"
|
||||
operator="in" />
|
||||
<feFlood
|
||||
id="feFlood4130"
|
||||
result="result10"
|
||||
in="result6"
|
||||
flood-opacity="1"
|
||||
flood-color="rgb(0,0,0)" />
|
||||
<feBlend
|
||||
id="feBlend4132"
|
||||
in2="result10"
|
||||
mode="normal"
|
||||
in="result6"
|
||||
result="result12" />
|
||||
<feComposite
|
||||
id="feComposite4134"
|
||||
in2="SourceGraphic"
|
||||
result="result2"
|
||||
operator="in" />
|
||||
</filter>
|
||||
<filter
|
||||
id="filter4056-2"
|
||||
inkscape:label="Inner Shadow"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:menu-tooltip="Adds a colorizable drop shadow inside"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur4058-5"
|
||||
stdDeviation="10"
|
||||
result="result8" />
|
||||
<feOffset
|
||||
id="feOffset4060-5"
|
||||
dx="4"
|
||||
dy="4"
|
||||
result="result11" />
|
||||
<feComposite
|
||||
id="feComposite4062-7"
|
||||
in2="result11"
|
||||
result="result6"
|
||||
in="SourceGraphic"
|
||||
operator="in" />
|
||||
<feFlood
|
||||
id="feFlood4064-4"
|
||||
result="result10"
|
||||
in="result6"
|
||||
flood-opacity="1"
|
||||
flood-color="rgb(0,0,0)" />
|
||||
<feBlend
|
||||
id="feBlend4066-6"
|
||||
in2="result10"
|
||||
mode="normal"
|
||||
in="result6"
|
||||
result="result12" />
|
||||
<feComposite
|
||||
id="feComposite4068-4"
|
||||
in2="SourceGraphic"
|
||||
result="result2"
|
||||
operator="in" />
|
||||
</filter>
|
||||
</defs>
|
||||
<metadata
|
||||
id="metadata6467">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Calque 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-852.36218)">
|
||||
<path
|
||||
style="fill:#4d4d4d;fill-opacity:1;stroke:none"
|
||||
d="m 109.97665,1013.0365 c 3.88181,-4.4411 3.54747,-4.0586 5.66627,-6.4826 1.76561,-2.02 3.67098,-4.1998 5.66612,-6.4824 1.82615,-2.08923 3.72752,-4.2645 5.66577,-6.48199 1.86579,-2.13456 3.76575,-4.30824 5.66571,-6.48192 1.89982,-2.1735 3.79963,-4.34701 5.66526,-6.4814 1.93849,-2.21775 3.84008,-4.39328 5.66643,-6.48274 1.99496,-2.28236 3.90016,-4.46202 5.66562,-6.48182 2.1187,-2.42392 1.19183,-1.53132 5.66599,-6.48224 4.47415,-4.95091 4.18341,-8.07257 0.18958,-12.35877 -3.99382,-4.28619 -1.35465,-1.21511 -5.47603,-5.87689 -4.12139,-4.66178 -7.03279,-4.31521 -10.59786,-0.73851 -3.56507,3.57671 -3.28885,3.29959 -5.12216,5.13888 -1.68683,1.69234 -3.43546,3.44668 -5.12226,5.13899 -1.83328,1.83927 -3.59351,3.60525 -5.12196,5.13868 -3.0098,3.01962 -5.12078,5.13749 -5.12078,5.13749 0,0 0,-3.10277 0,-7.8321 0,-2.2865 0,-4.9532 0,-7.83328 0,-2.48748 0,-5.13414 0,-7.83248 0,-2.59519 0,-5.23821 0,-7.83341 0,-2.69857 0,-5.34545 0,-7.83313 0,-2.87975 -0.17088,-1.88099 0,-7.83249 0.17088,-5.9515 -2.20963,-7.83295 -7.27343,-7.83295 -5.06382,0 -4.7469,0 -7.27268,0 -2.52601,0 -1.22935,0.18081 -7.27341,0 -6.044056,-0.18081 -7.281234,2.73055 -7.295156,7.8321 -0.01393,5.10156 -0.01354,4.9532 -0.02142,7.83329 -0.0068,2.48748 -0.01405,5.13413 -0.02142,7.83247 -0.0071,2.5952 -0.01433,5.23822 -0.02142,7.83342 -0.0074,2.69857 -0.01462,5.34544 -0.02142,7.83313 -0.0079,2.87974 -0.01517,5.54616 -0.02142,7.83248 -0.01293,4.72981 -0.02142,7.83295 -0.02142,7.83295 0,0 -2.109697,-2.13039 -5.117535,-5.16773 -1.527284,-1.54227 -3.286133,-3.31836 -5.117936,-5.16813 -1.685436,-1.70198 -3.432634,-3.46631 -5.118041,-5.16826 -1.83177,-1.84973 -0.988687,-0.74002 -5.117737,-5.16792 -4.129049,-4.42791 -6.926679,-3.21051 -10.599651,0.75894 -3.672973,3.96945 -0.81191,1.16868 -5.48307,5.92566 -4.671161,4.75698 -3.511079,8.18189 0.18277,12.40788 3.693848,4.22599 3.547459,4.05852 5.666264,6.48256 1.76561,2.01996 3.670974,4.19982 5.666115,6.48238 1.826153,2.08923 3.727519,4.26451 5.665773,6.48199 1.865785,2.13457 3.765749,4.30824 5.665712,6.48192 1.899816,2.1735 3.799628,4.34701 5.665262,6.4814 1.938488,2.21776 3.840076,4.39329 5.666426,6.48275 1.994967,2.2824 3.900162,4.462 5.665617,6.4818 2.118707,2.4239 1.17313,1.1139 5.665992,6.4823 4.492855,5.3683 7.449735,4.4407 11.331535,-3e-4 z"
|
||||
id="path6832-1-9-7-8"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="zccccccczzzzssscssssszzszzssssscssszzccssssssszz"
|
||||
inkscape:export-filename="/home/jrbastien/Ubuntu One/CoverArt/0.8 dark icons/arrow_down_dark.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<path
|
||||
style="fill:#4d4d4d;fill-opacity:1;stroke:none"
|
||||
d="m 240.24703,902.9148 c -3.8818,4.44108 -3.54746,4.0586 -5.66626,6.48262 -1.76561,2.01997 -3.67098,4.19982 -5.66612,6.48239 -1.82615,2.08923 -3.72752,4.26451 -5.66577,6.48199 -1.86579,2.13457 -3.76575,4.30824 -5.66571,6.48192 -1.89982,2.1735 -3.79963,4.34701 -5.66526,6.4814 -1.93849,2.21776 -3.84008,4.39328 -5.66643,6.48274 -1.99496,2.28237 -3.90016,4.46203 -5.66562,6.48182 -2.11871,2.42392 -1.19183,1.53132 -5.66599,6.48224 -4.47415,4.95091 -4.18341,8.07257 -0.18959,12.35877 3.99383,4.28619 1.35466,1.21511 5.47604,5.87689 4.12139,4.66179 7.03279,4.31521 10.59786,0.73851 3.56507,-3.5767 3.28885,-3.29958 5.12216,-5.13888 1.68683,-1.69234 3.43546,-3.44668 5.12226,-5.13899 1.83328,-1.83927 3.59351,-3.60524 5.12196,-5.13868 3.00979,-3.01962 5.12078,-5.13749 5.12078,-5.13749 0,0 0,3.10277 0,7.8321 0,2.2865 0,4.9532 0,7.83328 0,2.48748 0,5.13414 0,7.83248 0,2.59519 0,5.23821 0,7.83341 0,2.69857 0,5.34545 0,7.83313 0,2.87975 0.17088,1.88099 0,7.83245 -0.17088,5.9515 2.20963,7.833 7.27343,7.833 5.06382,0 4.74689,0 7.27267,0 2.52601,0 1.22936,-0.1808 7.27341,0 6.04406,0.1808 7.28124,-2.7306 7.29516,-7.8321 0.0139,-5.10157 0.0135,-4.95321 0.0214,-7.83329 0.007,-2.48749 0.014,-5.13414 0.0214,-7.83248 0.007,-2.5952 0.0143,-5.23821 0.0214,-7.83342 0.007,-2.69857 0.0146,-5.34544 0.0214,-7.83312 0.008,-2.87975 0.0152,-5.54617 0.0214,-7.83249 0.0129,-4.72981 0.0214,-7.83295 0.0214,-7.83295 0,0 2.1097,2.13039 5.11754,5.16773 1.52728,1.54227 3.28613,3.31836 5.11793,5.16813 1.68544,1.70198 3.43264,3.46631 5.11804,5.16826 1.83177,1.84973 0.98869,0.74002 5.11774,5.16792 4.12905,4.42792 6.92668,3.21051 10.59965,-0.75894 3.67297,-3.96945 0.81191,-1.16868 5.48307,-5.92566 4.67116,-4.75698 3.51108,-8.18189 -0.18277,-12.40788 -3.69385,-4.22599 -3.54746,-4.05851 -5.66626,-6.48255 -1.76561,-2.01997 -3.67098,-4.19982 -5.66612,-6.48239 -1.82615,-2.08923 -3.72752,-4.26451 -5.66577,-6.48199 -1.86579,-2.13457 -3.76575,-4.30824 -5.66571,-6.48192 -1.89982,-2.1735 -3.79963,-4.34701 -5.66527,-6.4814 -1.93848,-2.21775 -3.84007,-4.39328 -5.66642,-6.48274 -1.99497,-2.28236 -3.90016,-4.46203 -5.66562,-6.48182 -2.11871,-2.42394 -1.17313,-1.11392 -5.66599,-6.48227 -4.49286,-5.36834 -7.44974,-4.44071 -11.33154,2.7e-4 z"
|
||||
id="path6832-1-9-7-8-2"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="zccccccczzzzssscssssszzszzssssscssszzccssssssszz"
|
||||
inkscape:export-filename="/home/jrbastien/Ubuntu One/CoverArt/0.8 dark icons/arrow_up_dark.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
</g>
|
||||
</svg>
|
||||
|
Depois Largura: | Altura: | Tamanho: 23 KiB |
|
Depois Largura: | Altura: | Tamanho: 84 KiB |
|
Depois Largura: | Altura: | Tamanho: 32 KiB |
@@ -0,0 +1,932 @@
|
||||
<?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"
|
||||
id="svg2527"
|
||||
height="192"
|
||||
width="672"
|
||||
version="1.0"
|
||||
inkscape:version="0.48.4 r9939"
|
||||
sodipodi:docname="playlist_sprites_dark.svg"
|
||||
inkscape:export-filename="/home/jrbastien/Ubuntu One/CoverArt/0.8 dark icons/playlist_sprites_arrow.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">
|
||||
<metadata
|
||||
id="metadata3118">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1440"
|
||||
inkscape:window-height="838"
|
||||
id="namedview3116"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.49402629"
|
||||
inkscape:cx="260.00154"
|
||||
inkscape:cy="144.39242"
|
||||
inkscape:window-x="1272"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg2527"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true">
|
||||
<sodipodi:guide
|
||||
orientation="1,0"
|
||||
position="32,116.97128"
|
||||
id="guide3157" />
|
||||
<sodipodi:guide
|
||||
orientation="1,0"
|
||||
position="160,144.38642"
|
||||
id="guide3159" />
|
||||
<sodipodi:guide
|
||||
orientation="0,1"
|
||||
position="109.66058,32"
|
||||
id="guide3161" />
|
||||
<sodipodi:guide
|
||||
orientation="0,1"
|
||||
position="0,160"
|
||||
id="guide3163" />
|
||||
<sodipodi:guide
|
||||
orientation="1,0"
|
||||
position="192,126.10966"
|
||||
id="guide3165" />
|
||||
<sodipodi:guide
|
||||
orientation="1,0"
|
||||
position="320,63.054831"
|
||||
id="guide3167" />
|
||||
<sodipodi:guide
|
||||
orientation="1,0"
|
||||
position="352,116.05744"
|
||||
id="guide3169" />
|
||||
<sodipodi:guide
|
||||
orientation="1,0"
|
||||
position="473.65901,-160.58525"
|
||||
id="guide3171" />
|
||||
<sodipodi:guide
|
||||
orientation="1,0"
|
||||
position="512,204.69974"
|
||||
id="guide3173" />
|
||||
<sodipodi:guide
|
||||
orientation="1,0"
|
||||
position="640,229.37337"
|
||||
id="guide3175" />
|
||||
</sodipodi:namedview>
|
||||
<defs
|
||||
id="defs2529">
|
||||
<radialGradient
|
||||
id="radialGradient2436"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
cy="4.625"
|
||||
cx="62.625"
|
||||
gradientTransform="matrix(2.1647,0,0,0.75294,-111.56,36.518)"
|
||||
r="10.625">
|
||||
<stop
|
||||
id="stop8840"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop8842"
|
||||
style="stop-opacity:0"
|
||||
offset="1" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2517"
|
||||
y2="45"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x2="37.201"
|
||||
y1="1"
|
||||
x1="37.201">
|
||||
<stop
|
||||
id="stop3399"
|
||||
style="stop-color:#aaa"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop3401"
|
||||
style="stop-color:#8c8c8c"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2515"
|
||||
y2="45.016998"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x2="20.759001"
|
||||
y1="1"
|
||||
x1="20.759001">
|
||||
<stop
|
||||
id="stop3311"
|
||||
style="stop-color:#f6f6f6"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop3313"
|
||||
style="stop-color:#d2d2d2"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2512"
|
||||
y2="20.895"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x2="84.639"
|
||||
gradientTransform="matrix(0.32448,0,0,0.32448,3.2333,2.5577)"
|
||||
y1="105.1"
|
||||
x1="86.133003">
|
||||
<stop
|
||||
id="stop5130"
|
||||
style="stop-color:#e5e5e5"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop5132"
|
||||
style="stop-color:#ababab"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
r="10.625"
|
||||
gradientTransform="matrix(1.8824,0,0,0.47059,-95.882,39.824)"
|
||||
cx="62.625"
|
||||
cy="4.625"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient3094">
|
||||
<stop
|
||||
offset="0"
|
||||
id="stop8840-3" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-opacity:0"
|
||||
id="stop8842-6" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
x1="28.739"
|
||||
y1="144.12"
|
||||
gradientTransform="matrix(0.566,0,0,0.34475,22.846,-40.334)"
|
||||
x2="26.257"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
xlink:href="#linearGradient2372"
|
||||
y2="125.39"
|
||||
id="linearGradient2910" />
|
||||
<radialGradient
|
||||
r="5.7385001"
|
||||
gradientTransform="matrix(1.0711,-0.17393,0.023379,1.0027,12.439,-4.4377)"
|
||||
cx="17.059"
|
||||
cy="41.058998"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
fy="37.841"
|
||||
fx="14.758"
|
||||
id="radialGradient2907">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop3670" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:0"
|
||||
id="stop3672" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
x1="28.503"
|
||||
y1="137.53999"
|
||||
gradientTransform="matrix(0.33924,0,0,0.33977,9.2602,-34.856)"
|
||||
x2="26.257"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
xlink:href="#linearGradient2372"
|
||||
y2="125.39"
|
||||
id="linearGradient2904" />
|
||||
<radialGradient
|
||||
r="5.7385001"
|
||||
gradientTransform="matrix(1.0173,-0.18234,0.035717,0.96941,-5.8008,1.5991)"
|
||||
cx="17.059"
|
||||
cy="41.058998"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
fy="37.456001"
|
||||
fx="14.688"
|
||||
id="radialGradient2901">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop7069" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:0"
|
||||
id="stop7071" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2372">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop2374" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:.34483"
|
||||
id="stop2376" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2372-7">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop2374-9" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:.34483"
|
||||
id="stop2376-4" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
r="5.7385001"
|
||||
gradientTransform="matrix(1.0711,-0.17393,0.023379,1.0027,12.439,-4.4377)"
|
||||
cx="17.059"
|
||||
cy="41.058998"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
fy="37.841"
|
||||
fx="14.758"
|
||||
id="radialGradient2907-7">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop3670-0" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:0"
|
||||
id="stop3672-8" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4366">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop4368" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:.34483"
|
||||
id="stop4370" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#radialGradient2901-6"
|
||||
id="radialGradient4313-7"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.65701931,-0.11776359,0.02306769,0.62608974,-32.804054,1.418643)"
|
||||
cx="17.059"
|
||||
cy="41.058998"
|
||||
fx="14.688"
|
||||
fy="37.456001"
|
||||
r="5.7385001" />
|
||||
<radialGradient
|
||||
r="5.7385001"
|
||||
gradientTransform="matrix(1.0173,-0.18234,0.035717,0.96941,-5.8008,1.5991)"
|
||||
cx="17.059"
|
||||
cy="41.058998"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
fy="37.456001"
|
||||
fx="14.688"
|
||||
id="radialGradient2901-6">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop7069-7" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:0"
|
||||
id="stop7071-2" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2372-7-0">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop2374-9-9" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:.34483"
|
||||
id="stop2376-4-7" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
r="5.7385001"
|
||||
gradientTransform="matrix(1.0711,-0.17393,0.023379,1.0027,12.439,-4.4377)"
|
||||
cx="17.059"
|
||||
cy="41.058998"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
fy="37.841"
|
||||
fx="14.758"
|
||||
id="radialGradient2907-7-1">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop3670-0-1" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:0"
|
||||
id="stop3672-8-8" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4534">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop4536" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:.34483"
|
||||
id="stop4538" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#radialGradient2901-6-3"
|
||||
id="radialGradient4477-5"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.65701931,-0.11776359,0.02306769,0.62608974,-32.804054,1.418643)"
|
||||
cx="17.059"
|
||||
cy="41.058998"
|
||||
fx="14.688"
|
||||
fy="37.456001"
|
||||
r="5.7385001" />
|
||||
<radialGradient
|
||||
r="5.7385001"
|
||||
gradientTransform="matrix(1.0173,-0.18234,0.035717,0.96941,-5.8008,1.5991)"
|
||||
cx="17.059"
|
||||
cy="41.058998"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
fy="37.456001"
|
||||
fx="14.688"
|
||||
id="radialGradient2901-6-3">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop7069-7-0" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:0"
|
||||
id="stop7071-2-2" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2372-7-0-0">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop2374-9-9-6" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:.34483"
|
||||
id="stop2376-4-7-1" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
r="5.7385001"
|
||||
gradientTransform="matrix(1.0711,-0.17393,0.023379,1.0027,12.439,-4.4377)"
|
||||
cx="17.059"
|
||||
cy="41.058998"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
fy="37.841"
|
||||
fx="14.758"
|
||||
id="radialGradient2907-7-1-7">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop3670-0-1-0" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:0"
|
||||
id="stop3672-8-8-4" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4622">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop4624" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:.34483"
|
||||
id="stop4626" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
r="5.7385001"
|
||||
fy="37.456001"
|
||||
fx="14.688"
|
||||
cy="41.058998"
|
||||
cx="17.059"
|
||||
gradientTransform="matrix(0.65701931,-0.11776359,0.02306769,0.62608974,-32.804054,1.418643)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient4550-1"
|
||||
xlink:href="#radialGradient2901-6-3-8"
|
||||
inkscape:collect="always" />
|
||||
<radialGradient
|
||||
r="5.7385001"
|
||||
gradientTransform="matrix(1.0173,-0.18234,0.035717,0.96941,-5.8008,1.5991)"
|
||||
cx="17.059"
|
||||
cy="41.058998"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
fy="37.456001"
|
||||
fx="14.688"
|
||||
id="radialGradient2901-6-3-8">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop7069-7-0-9" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:0"
|
||||
id="stop7071-2-2-1" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2372-7-0-2">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop2374-9-9-1" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:.34483"
|
||||
id="stop2376-4-7-15" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
r="5.7385001"
|
||||
gradientTransform="matrix(1.0711,-0.17393,0.023379,1.0027,12.439,-4.4377)"
|
||||
cx="17.059"
|
||||
cy="41.058998"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
fy="37.841"
|
||||
fx="14.758"
|
||||
id="radialGradient2907-7-1-9">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop3670-0-1-9" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:0"
|
||||
id="stop3672-8-8-6" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4622-0">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop4624-5" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:.34483"
|
||||
id="stop4626-1" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
r="5.7385001"
|
||||
fy="37.456001"
|
||||
fx="14.688"
|
||||
cy="41.058998"
|
||||
cx="17.059"
|
||||
gradientTransform="matrix(0.65701931,-0.11776359,0.02306769,0.62608974,-32.804054,1.418643)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient4550-7"
|
||||
xlink:href="#radialGradient2901-6-3-1"
|
||||
inkscape:collect="always" />
|
||||
<radialGradient
|
||||
r="5.7385001"
|
||||
gradientTransform="matrix(1.0173,-0.18234,0.035717,0.96941,-5.8008,1.5991)"
|
||||
cx="17.059"
|
||||
cy="41.058998"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
fy="37.456001"
|
||||
fx="14.688"
|
||||
id="radialGradient2901-6-3-1">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop7069-7-0-3" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:0"
|
||||
id="stop7071-2-2-16" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2515"
|
||||
id="linearGradient4895"
|
||||
x1="199.89294"
|
||||
y1="100.19387"
|
||||
x2="322.9762"
|
||||
y2="100.19387"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2515"
|
||||
id="linearGradient4897"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="199.89294"
|
||||
y1="100.19387"
|
||||
x2="322.9762"
|
||||
y2="100.19387" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2515"
|
||||
id="linearGradient4899"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="199.89294"
|
||||
y1="100.19387"
|
||||
x2="322.9762"
|
||||
y2="100.19387" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2515"
|
||||
id="linearGradient4901"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="199.89294"
|
||||
y1="100.19387"
|
||||
x2="322.9762"
|
||||
y2="100.19387" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2515"
|
||||
id="linearGradient4903"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="199.89294"
|
||||
y1="100.19387"
|
||||
x2="322.9762"
|
||||
y2="100.19387" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2515"
|
||||
id="linearGradient4907"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="199.89294"
|
||||
y1="100.19387"
|
||||
x2="322.9762"
|
||||
y2="100.19387" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2515"
|
||||
id="linearGradient4909"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="199.89294"
|
||||
y1="100.19387"
|
||||
x2="322.9762"
|
||||
y2="100.19387" />
|
||||
<linearGradient
|
||||
id="linearGradient2372-7-0-5">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop2374-9-9-5" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:.34483"
|
||||
id="stop2376-4-7-4" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
r="5.7385001"
|
||||
gradientTransform="matrix(1.0711,-0.17393,0.023379,1.0027,12.439,-4.4377)"
|
||||
cx="17.059"
|
||||
cy="41.058998"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
fy="37.841"
|
||||
fx="14.758"
|
||||
id="radialGradient2907-7-1-1">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop3670-0-1-90" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:0"
|
||||
id="stop3672-8-8-3" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4930">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop4932" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:.34483"
|
||||
id="stop4934" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#radialGradient2901-6-3-4"
|
||||
id="radialGradient4857-5"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.65701931,-0.11776359,0.02306769,0.62608974,-32.804054,1.418643)"
|
||||
cx="17.059"
|
||||
cy="41.058998"
|
||||
fx="14.688"
|
||||
fy="37.456001"
|
||||
r="5.7385001" />
|
||||
<radialGradient
|
||||
r="5.7385001"
|
||||
gradientTransform="matrix(1.0173,-0.18234,0.035717,0.96941,-5.8008,1.5991)"
|
||||
cx="17.059"
|
||||
cy="41.058998"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
fy="37.456001"
|
||||
fx="14.688"
|
||||
id="radialGradient2901-6-3-4">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop7069-7-0-38" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:0"
|
||||
id="stop7071-2-2-7" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2515"
|
||||
id="linearGradient5008"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="199.89294"
|
||||
y1="100.19387"
|
||||
x2="322.9762"
|
||||
y2="100.19387" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2515"
|
||||
id="linearGradient5010"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="199.89294"
|
||||
y1="100.19387"
|
||||
x2="322.9762"
|
||||
y2="100.19387" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2372-7-0-0"
|
||||
id="linearGradient5203"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.36554893,0,0,0.22265547,-14.302628,-25.663689)"
|
||||
x1="28.739"
|
||||
y1="144.12"
|
||||
x2="26.257"
|
||||
y2="125.39" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#radialGradient2907-7-1-7"
|
||||
id="radialGradient5205"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.69176583,-0.11233202,0.01509924,0.64758995,-21.023949,-2.4802012)"
|
||||
cx="17.059"
|
||||
cy="41.058998"
|
||||
fx="14.758"
|
||||
fy="37.841"
|
||||
r="5.7385001" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2372-7-0-0"
|
||||
id="linearGradient5207"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.21909685,0,0,0.21943915,-23.076965,-22.125744)"
|
||||
x1="28.503"
|
||||
y1="137.53999"
|
||||
x2="26.257"
|
||||
y2="125.39" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#radialGradient2901-6-3-8"
|
||||
id="radialGradient5209"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.65701931,-0.11776359,0.02306769,0.62608974,-32.804054,1.418643)"
|
||||
cx="17.059"
|
||||
cy="41.058998"
|
||||
fx="14.688"
|
||||
fy="37.456001"
|
||||
r="5.7385001" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2515"
|
||||
id="linearGradient5218"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.98766169,0,0,1.0864702,-35.859333,-13.634417)"
|
||||
x1="257.69382"
|
||||
y1="97.573967"
|
||||
x2="360.56195"
|
||||
y2="97.573967" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2515"
|
||||
id="linearGradient5223"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.98766169,0,0,1.0864702,-35.859333,-13.634417)"
|
||||
x1="257.69382"
|
||||
y1="97.573967"
|
||||
x2="360.56195"
|
||||
y2="97.573967" />
|
||||
</defs>
|
||||
<g
|
||||
id="g3879"
|
||||
transform="matrix(1.0065385,0,0,0.99324553,342.07202,-7.5608658)"
|
||||
style="fill:url(#linearGradient4899);fill-opacity:1;stroke:#666666;stroke-width:2.90937853;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">
|
||||
<g
|
||||
id="g3851"
|
||||
style="fill:url(#linearGradient4897);fill-opacity:1;stroke:#666666;stroke-width:2.90937853;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(1.0065385,0,0,0.99324553,389.97009,-7.5608658)"
|
||||
id="g3879-9"
|
||||
style="fill:url(#linearGradient4903);fill-opacity:1;stroke:#666666;stroke-width:2.90937853;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">
|
||||
<g
|
||||
id="g3851-8"
|
||||
style="fill:url(#linearGradient4901);fill-opacity:1;stroke:#666666;stroke-width:2.90937853;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
</g>
|
||||
<g
|
||||
id="g5086"
|
||||
transform="matrix(1.0227382,0,0,1.0239163,-508.65243,94.907326)"
|
||||
style="fill:#4d4d4d;fill-opacity:1;stroke:none">
|
||||
<g
|
||||
transform="translate(2.2931143,-0.91383812)"
|
||||
id="g5041"
|
||||
style="fill:#4d4d4d;fill-opacity:1;stroke:none">
|
||||
<rect
|
||||
style="fill:#4d4d4d;fill-opacity:1;stroke:none"
|
||||
id="rect5014"
|
||||
width="33.970463"
|
||||
height="33.970463"
|
||||
x="526.33917"
|
||||
y="-60.113762"
|
||||
rx="2.252898" />
|
||||
<rect
|
||||
style="fill:#4d4d4d;fill-opacity:1;stroke:none"
|
||||
id="rect5014-4"
|
||||
width="33.970463"
|
||||
height="33.970463"
|
||||
x="617.52295"
|
||||
y="-60.113762"
|
||||
rx="2.252898"
|
||||
inkscape:transform-center-x="-6.2577015"
|
||||
inkscape:transform-center-y="13.409394" />
|
||||
<rect
|
||||
style="fill:#4d4d4d;fill-opacity:1;stroke:none"
|
||||
id="rect5014-5"
|
||||
width="33.970463"
|
||||
height="33.970463"
|
||||
x="571.93103"
|
||||
y="-60.113762"
|
||||
rx="2.252898" />
|
||||
</g>
|
||||
<g
|
||||
id="g5041-9"
|
||||
transform="translate(2.2931144,44.606043)"
|
||||
style="fill:#4d4d4d;fill-opacity:1;stroke:none">
|
||||
<rect
|
||||
style="fill:#4d4d4d;fill-opacity:1;stroke:none"
|
||||
id="rect5014-7"
|
||||
width="33.970463"
|
||||
height="33.970463"
|
||||
x="526.33917"
|
||||
y="-60.113762"
|
||||
rx="2.252898" />
|
||||
<rect
|
||||
style="fill:#4d4d4d;fill-opacity:1;stroke:none"
|
||||
id="rect5014-4-0"
|
||||
width="33.970463"
|
||||
height="33.970463"
|
||||
x="617.52295"
|
||||
y="-60.113762"
|
||||
rx="2.252898"
|
||||
inkscape:transform-center-x="-6.2577015"
|
||||
inkscape:transform-center-y="13.409394" />
|
||||
<rect
|
||||
style="fill:#4d4d4d;fill-opacity:1;stroke:none"
|
||||
id="rect5014-5-5"
|
||||
width="33.970463"
|
||||
height="33.970463"
|
||||
x="571.93103"
|
||||
y="-60.113762"
|
||||
rx="2.252898" />
|
||||
</g>
|
||||
<g
|
||||
id="g5041-0"
|
||||
transform="translate(2.2931144,90.125919)"
|
||||
style="fill:#4d4d4d;fill-opacity:1;stroke:none">
|
||||
<rect
|
||||
style="fill:#4d4d4d;fill-opacity:1;stroke:none"
|
||||
id="rect5014-6"
|
||||
width="33.970463"
|
||||
height="33.970463"
|
||||
x="526.33917"
|
||||
y="-60.113762"
|
||||
rx="2.252898" />
|
||||
<rect
|
||||
style="fill:#4d4d4d;fill-opacity:1;stroke:none"
|
||||
id="rect5014-4-1"
|
||||
width="33.970463"
|
||||
height="33.970463"
|
||||
x="617.52295"
|
||||
y="-60.113762"
|
||||
rx="2.252898"
|
||||
inkscape:transform-center-x="-6.2577015"
|
||||
inkscape:transform-center-y="13.409394" />
|
||||
<rect
|
||||
style="fill:#4d4d4d;fill-opacity:1;stroke:none"
|
||||
id="rect5014-5-8"
|
||||
width="33.970463"
|
||||
height="33.970463"
|
||||
x="571.93103"
|
||||
y="-60.113762"
|
||||
rx="2.252898" />
|
||||
</g>
|
||||
</g>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#4d4d4d;fill-opacity:1;stroke:none;font-family:Sans"
|
||||
x="46.825909"
|
||||
y="180.1373"
|
||||
id="text6872"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan6874"
|
||||
x="46.825909"
|
||||
y="180.1373"
|
||||
style="font-size:16px;fill:#4d4d4d">Music Library</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#4d4d4d;fill-opacity:1;stroke:none;font-family:Sans"
|
||||
x="193.38106"
|
||||
y="180.1373"
|
||||
id="text6872-9"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
x="193.38106"
|
||||
y="180.1373"
|
||||
style="font-size:16px;fill:#4d4d4d"
|
||||
id="tspan6901">Regular Playlist</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#4d4d4d;fill-opacity:1;stroke:none;font-family:Sans"
|
||||
x="522.20959"
|
||||
y="180.1373"
|
||||
id="text6872-9-7"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
x="522.20959"
|
||||
y="180.1373"
|
||||
style="font-size:16px;fill:#4d4d4d"
|
||||
id="tspan6901-9">Smart Playlist</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#4d4d4d;fill-opacity:1;stroke:none;font-family:Sans"
|
||||
x="376.3222"
|
||||
y="180.1373"
|
||||
id="text6872-9-73"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
x="376.3222"
|
||||
y="180.1373"
|
||||
style="font-size:16px;fill:#4d4d4d"
|
||||
id="tspan6935">Play Queue</tspan></text>
|
||||
<path
|
||||
id="path4297"
|
||||
style="fill:#4d4d4d;stroke:none"
|
||||
d="m 414.82281,91.399615 35.88562,22.428515 -35.8856,22.42851 z M 379.90625,67.65625 c -1.30309,0 -2.375,1.040658 -2.375,2.34375 l 0,87.65625 c 0,1.30309 1.07191,2.34375 2.375,2.34375 l 97.75,0 C 478.95934,160 480,158.95934 480,157.65625 L 480,70 c 0,-1.303092 -1.04066,-2.34375 -2.34375,-2.34375 l -97.75,0 z m -25.5625,-35.656252 c -1.30309,0 -2.34375,1.099725 -2.34375,2.47678 l 0,80.115582 c 0,1.37705 1.04066,2.47678 2.34375,2.47678 l 4.65625,0 0,-71.133126 c 0,-1.377055 1.04066,-2.509804 2.34375,-2.509804 l 93.125,0 0,-8.949432 c 0,-1.377055 -1.07191,-2.47678 -2.375,-2.47678 l -97.75,0 z m 12.125,18.650943 c -1.27351,0 -2.28125,1.064944 -2.28125,2.410733 l 0,85.399386 c 0,1.34579 1.00774,2.44375 2.28125,2.44375 l 6.625,0 0,-76.119711 c 0,-1.345788 1.03899,-2.410732 2.3125,-2.410732 l 88.90625,0 0,-9.312693 c 0,-1.345789 -1.00774,-2.410733 -2.28125,-2.410733 l -95.5625,0 z" />
|
||||
<path
|
||||
id="path4297-9"
|
||||
style="fill:#4d4d4d;stroke:none"
|
||||
d="m 565.26031,73.571509 35.88562,22.42852 -35.88558,22.428511 z M 568.1875,32 c -2.56538,0 -4.625,2.094515 -4.625,4.65625 l 0,9.03125 c -4.58796,1.2002 -8.99122,2.991286 -13,5.28125 l -6.53125,-6.40625 c -0.92182,-0.905806 -2.024,-1.396427 -3.21875,-1.40625 -1.19475,-0.0098 -2.40582,0.421876 -3.3125,1.3125 l -12.8125,12.5625 c -1.81426,1.782439 -1.75173,4.596425 0.0937,6.40625 l 6.5625,6.4375 c -2.33279,3.935177 -4.1839,8.215027 -5.40625,12.71875 l -9.1875,0 c -2.60995,0 -4.75,2.044225 -4.75,4.5625 l 0,17.6875 c 0,2.52125 2.14036,4.5625 4.75,4.5625 l 9.1875,0 c 1.22238,4.50343 3.07377,8.81303 5.40625,12.75 l -6.5625,6.40625 c -1.84549,1.80982 -1.90802,4.62321 -0.0937,6.40625 l 12.8125,12.5625 c 1.81426,1.78095 4.68607,1.71764 6.53125,-0.0937 l 6.53125,-6.40625 c 4.01091,2.28984 8.41234,4.08135 13,5.28125 l 0,9.03125 c 0,2.56171 2.05939,4.65625 4.625,4.65625 l 18,0 c 2.56841,0 4.65625,-2.0963 4.65625,-4.65625 l 0,-9.03125 c 4.58766,-1.19994 8.95815,-2.99158 12.96875,-5.28125 l 6.5625,6.40625 c 1.84529,1.81141 4.71699,1.87476 6.53125,0.0937 l 12.78125,-12.5625 c 1.81426,-1.78095 1.75158,-4.59494 -0.0937,-6.40625 l -6.53125,-6.4375 c 2.33188,-3.93518 4.18421,-8.21502 5.40625,-12.71875 l 9.1875,0 c 2.60961,0 4.75,-2.04398 4.75,-4.5625 l 0,-17.6875 c 0,-2.521252 -2.14217,-4.5625 -4.75,-4.5625 l -9.1875,0 c -1.22511,-4.503724 -3.07441,-8.783573 -5.4063,-12.71875 l 6.53125,-6.4375 c 1.84527,-1.811402 1.90809,-4.625299 0.0937,-6.40625 L 616.9062,44.46875 c -1.81638,-1.780951 -4.68757,-1.71786 -6.53125,0.09375 l -6.5625,6.40625 c -4.00877,-2.289964 -8.38079,-4.081348 -12.96875,-5.28125 l 0,-9.03125 C 590.8437,34.094219 588.78408,32 586.2187,32 l -18.03125,0 z" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="color:#000000;fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.73549545;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
d="m 278.52756,109.88905 35.88562,22.42851 -35.8856,22.42851 z"
|
||||
id="path4447-2" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="color:#000000;fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.73549545;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
d="m 197.07157,146.50326 67.28641,0 c 2.80964,0 5.07157,3.10892 5.07157,6.97069 0,3.86175 -2.26193,6.97067 -5.07157,6.97067 l -67.28641,0 c -2.80965,0 -5.07157,-3.10892 -5.07157,-6.97067 0,-3.86177 2.26192,-6.97069 5.07157,-6.97069 z"
|
||||
id="path4451-1-9-84" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="color:#000000;fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.73549545;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
d="m 200.38389,89.251627 111.23222,0 c 4.64466,0 8.38389,3.10892 8.38389,6.97069 0,3.861753 -3.73923,6.970673 -8.38389,6.970673 l -111.23222,0 c -4.64467,0 -8.38389,-3.10892 -8.38389,-6.970673 0,-3.86177 3.73922,-6.97069 8.38389,-6.97069 z"
|
||||
id="path4451-1-9-84-1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="color:#000000;fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.73549545;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
d="m 197.07157,117.87745 67.28641,0 c 2.80964,0 5.07157,3.10892 5.07157,6.97069 0,3.86175 -2.26193,6.97067 -5.07157,6.97067 l -67.28641,0 c -2.80965,0 -5.07157,-3.10892 -5.07157,-6.97067 0,-3.86177 2.26192,-6.97069 5.07157,-6.97069 z"
|
||||
id="path4451-1-9-84-8" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="color:#000000;fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.73549545;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
d="m 200.38389,60.625819 111.23222,0 c 4.64466,0 8.38389,3.10892 8.38389,6.97069 0,3.86175 -3.73923,6.97067 -8.38389,6.97067 l -111.23222,0 c -4.64467,0 -8.38389,-3.10892 -8.38389,-6.97067 0,-3.86177 3.73922,-6.97069 8.38389,-6.97069 z"
|
||||
id="path4451-1-9-84-9" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="color:#000000;fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.73549545;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
d="m 199.48329,32 112.0697,0 C 316.23262,32 320,35.10892 320,38.97069 c 0,3.86175 -3.76738,6.97067 -8.44701,6.97067 l -112.0697,0 c -4.67964,0 -8.44701,-3.10892 -8.44701,-6.97067 0,-3.86177 3.76737,-6.97069 8.44701,-6.97069 z"
|
||||
id="path4451-1-9-84-0" />
|
||||
</svg>
|
||||
|
Depois Largura: | Altura: | Tamanho: 31 KiB |
|
Depois Largura: | Altura: | Tamanho: 37 KiB |
|
Depois Largura: | Altura: | Tamanho: 45 KiB |
|
Depois Largura: | Altura: | Tamanho: 42 KiB |
@@ -0,0 +1,829 @@
|
||||
<?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="350"
|
||||
height="200"
|
||||
id="svg6462"
|
||||
version="1.1"
|
||||
inkscape:version="0.48.4 r9939"
|
||||
sodipodi:docname="arrow_up_down_darker.svg"
|
||||
inkscape:export-filename="/home/jrbastien/Ubuntu One/CoverArt/1.1 dark/arrow_down.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.6038404"
|
||||
inkscape:cx="111.48148"
|
||||
inkscape:cy="56.488469"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1440"
|
||||
inkscape:window-height="838"
|
||||
inkscape:window-x="1272"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:snap-global="true" />
|
||||
<defs
|
||||
id="defs6464">
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient6364"
|
||||
id="linearGradient6370"
|
||||
x1="101.42937"
|
||||
y1="400.5535"
|
||||
x2="99.124153"
|
||||
y2="244.95164"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.340328,0,0,1.340328,-155.22114,-66.380723)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient6364">
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop6366" />
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop6368" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient6364-8">
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop6366-5" />
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop6368-9" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
y2="244.95164"
|
||||
x2="99.124153"
|
||||
y1="400.5535"
|
||||
x1="101.42937"
|
||||
gradientTransform="matrix(1.340328,0,0,1.340328,-66.590934,-328.62237)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient6531"
|
||||
xlink:href="#linearGradient6364-8"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
y2="244.95164"
|
||||
x2="99.124153"
|
||||
y1="400.5535"
|
||||
x1="101.42937"
|
||||
gradientTransform="matrix(1.340328,0,0,1.340328,-31.467381,555.95415)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient6460"
|
||||
xlink:href="#linearGradient6364-2"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient6364-2">
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop6366-7" />
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop6368-8" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
y2="244.95164"
|
||||
x2="99.124153"
|
||||
y1="400.5535"
|
||||
x1="101.42937"
|
||||
gradientTransform="matrix(1.340328,0,0,-1.340328,133.5722,1341.1989)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient6421-9"
|
||||
xlink:href="#linearGradient6364-5-9"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient6364-5-9">
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop6366-4-1" />
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop6368-6-9" />
|
||||
</linearGradient>
|
||||
<filter
|
||||
id="filter3970"
|
||||
inkscape:label="Inner Shadow"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:menu-tooltip="Adds a colorizable drop shadow inside"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur3972"
|
||||
stdDeviation="4"
|
||||
result="result8" />
|
||||
<feOffset
|
||||
id="feOffset3974"
|
||||
dx="4"
|
||||
dy="4"
|
||||
result="result11" />
|
||||
<feComposite
|
||||
id="feComposite3976"
|
||||
in2="result11"
|
||||
result="result6"
|
||||
in="SourceGraphic"
|
||||
operator="in" />
|
||||
<feFlood
|
||||
id="feFlood3978"
|
||||
result="result10"
|
||||
in="result6"
|
||||
flood-opacity="1"
|
||||
flood-color="rgb(0,0,0)" />
|
||||
<feBlend
|
||||
id="feBlend3980"
|
||||
in2="result10"
|
||||
mode="normal"
|
||||
in="result6"
|
||||
result="result12" />
|
||||
<feComposite
|
||||
id="feComposite3982"
|
||||
in2="SourceGraphic"
|
||||
result="result2"
|
||||
operator="in" />
|
||||
</filter>
|
||||
<filter
|
||||
id="filter3984"
|
||||
inkscape:label="Inner Shadow"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:menu-tooltip="Adds a colorizable drop shadow inside"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur3986"
|
||||
stdDeviation="4"
|
||||
result="result8" />
|
||||
<feOffset
|
||||
id="feOffset3988"
|
||||
dx="4"
|
||||
dy="4"
|
||||
result="result11" />
|
||||
<feComposite
|
||||
id="feComposite3990"
|
||||
in2="result11"
|
||||
result="result6"
|
||||
in="SourceGraphic"
|
||||
operator="in" />
|
||||
<feFlood
|
||||
id="feFlood3992"
|
||||
result="result10"
|
||||
in="result6"
|
||||
flood-opacity="1"
|
||||
flood-color="rgb(0,0,0)" />
|
||||
<feBlend
|
||||
id="feBlend3994"
|
||||
in2="result10"
|
||||
mode="normal"
|
||||
in="result6"
|
||||
result="result12" />
|
||||
<feComposite
|
||||
id="feComposite3996"
|
||||
in2="SourceGraphic"
|
||||
result="result2"
|
||||
operator="in" />
|
||||
</filter>
|
||||
<filter
|
||||
color-interpolation-filters="sRGB"
|
||||
inkscape:menu-tooltip="Adds a colorizable drop shadow inside"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:label="Inner Shadow"
|
||||
id="filter3142">
|
||||
<feGaussianBlur
|
||||
result="result8"
|
||||
stdDeviation="4"
|
||||
id="feGaussianBlur3144" />
|
||||
<feOffset
|
||||
result="result11"
|
||||
dy="4"
|
||||
dx="4"
|
||||
id="feOffset3146" />
|
||||
<feComposite
|
||||
operator="in"
|
||||
in="SourceGraphic"
|
||||
result="result6"
|
||||
in2="result11"
|
||||
id="feComposite3148" />
|
||||
<feFlood
|
||||
flood-color="rgb(0,0,0)"
|
||||
flood-opacity="1"
|
||||
in="result6"
|
||||
result="result10"
|
||||
id="feFlood3150" />
|
||||
<feBlend
|
||||
result="result12"
|
||||
in="result6"
|
||||
mode="normal"
|
||||
in2="result10"
|
||||
id="feBlend3152" />
|
||||
<feComposite
|
||||
operator="in"
|
||||
result="result2"
|
||||
in2="SourceGraphic"
|
||||
id="feComposite3154" />
|
||||
</filter>
|
||||
<filter
|
||||
color-interpolation-filters="sRGB"
|
||||
inkscape:menu-tooltip="Adds a colorizable drop shadow inside"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:label="Inner Shadow"
|
||||
id="filter3938">
|
||||
<feGaussianBlur
|
||||
result="result8"
|
||||
stdDeviation="4"
|
||||
id="feGaussianBlur3940" />
|
||||
<feOffset
|
||||
result="result11"
|
||||
dy="4"
|
||||
dx="4"
|
||||
id="feOffset3942" />
|
||||
<feComposite
|
||||
operator="in"
|
||||
in="SourceGraphic"
|
||||
result="result6"
|
||||
in2="result11"
|
||||
id="feComposite3944" />
|
||||
<feFlood
|
||||
flood-color="rgb(0,0,0)"
|
||||
flood-opacity="1"
|
||||
in="result6"
|
||||
result="result10"
|
||||
id="feFlood3946" />
|
||||
<feBlend
|
||||
result="result12"
|
||||
in="result6"
|
||||
mode="normal"
|
||||
in2="result10"
|
||||
id="feBlend3948" />
|
||||
<feComposite
|
||||
operator="in"
|
||||
result="result2"
|
||||
in2="SourceGraphic"
|
||||
id="feComposite3950" />
|
||||
</filter>
|
||||
<filter
|
||||
color-interpolation-filters="sRGB"
|
||||
inkscape:menu-tooltip="Adds a colorizable drop shadow inside"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:label="Inner Shadow"
|
||||
id="filter3060">
|
||||
<feGaussianBlur
|
||||
result="result8"
|
||||
stdDeviation="4"
|
||||
id="feGaussianBlur3062" />
|
||||
<feOffset
|
||||
result="result11"
|
||||
dy="4"
|
||||
dx="4"
|
||||
id="feOffset3064" />
|
||||
<feComposite
|
||||
operator="in"
|
||||
in="SourceGraphic"
|
||||
result="result6"
|
||||
in2="result11"
|
||||
id="feComposite3066" />
|
||||
<feFlood
|
||||
flood-color="rgb(0,0,0)"
|
||||
flood-opacity="1"
|
||||
in="result6"
|
||||
result="result10"
|
||||
id="feFlood3068" />
|
||||
<feBlend
|
||||
result="result12"
|
||||
in="result6"
|
||||
mode="normal"
|
||||
in2="result10"
|
||||
id="feBlend3070" />
|
||||
<feComposite
|
||||
operator="in"
|
||||
result="result2"
|
||||
in2="SourceGraphic"
|
||||
id="feComposite3072" />
|
||||
</filter>
|
||||
<filter
|
||||
id="filter4056"
|
||||
inkscape:label="Inner Shadow"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:menu-tooltip="Adds a colorizable drop shadow inside"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur4058"
|
||||
stdDeviation="10"
|
||||
result="result8" />
|
||||
<feOffset
|
||||
id="feOffset4060"
|
||||
dx="4"
|
||||
dy="4"
|
||||
result="result11" />
|
||||
<feComposite
|
||||
id="feComposite4062"
|
||||
in2="result11"
|
||||
result="result6"
|
||||
in="SourceGraphic"
|
||||
operator="in" />
|
||||
<feFlood
|
||||
id="feFlood4064"
|
||||
result="result10"
|
||||
in="result6"
|
||||
flood-opacity="1"
|
||||
flood-color="rgb(0,0,0)" />
|
||||
<feBlend
|
||||
id="feBlend4066"
|
||||
in2="result10"
|
||||
mode="normal"
|
||||
in="result6"
|
||||
result="result12" />
|
||||
<feComposite
|
||||
id="feComposite4068"
|
||||
in2="SourceGraphic"
|
||||
result="result2"
|
||||
operator="in" />
|
||||
</filter>
|
||||
<filter
|
||||
id="filter4070"
|
||||
inkscape:label="Darken edges"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:menu-tooltip="Darken the edges with an inner blur"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur4072"
|
||||
stdDeviation="10"
|
||||
result="result8" />
|
||||
<feOffset
|
||||
id="feOffset4074"
|
||||
dx="4"
|
||||
dy="4"
|
||||
result="result11" />
|
||||
<feComposite
|
||||
id="feComposite4076"
|
||||
in2="result11"
|
||||
result="result6"
|
||||
in="SourceGraphic"
|
||||
operator="in" />
|
||||
<feFlood
|
||||
id="feFlood4078"
|
||||
result="result10"
|
||||
in="result6"
|
||||
flood-opacity="1"
|
||||
flood-color="rgb(0,0,0)" />
|
||||
<feBlend
|
||||
id="feBlend4080"
|
||||
in2="result10"
|
||||
mode="normal"
|
||||
in="result6"
|
||||
result="result12" />
|
||||
<feComposite
|
||||
id="feComposite4082"
|
||||
in2="SourceGraphic"
|
||||
result="fbSourceGraphic"
|
||||
operator="in" />
|
||||
<feColorMatrix
|
||||
result="fbSourceGraphicAlpha"
|
||||
in="fbSourceGraphic"
|
||||
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
|
||||
id="feColorMatrix3318" />
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur3320"
|
||||
result="result6"
|
||||
stdDeviation="1.5"
|
||||
in="fbSourceGraphic" />
|
||||
<feComposite
|
||||
in2="result6"
|
||||
id="feComposite3322"
|
||||
operator="atop"
|
||||
in="fbSourceGraphic"
|
||||
result="result8" />
|
||||
<feComposite
|
||||
in2="fbSourceGraphicAlpha"
|
||||
id="feComposite3324"
|
||||
in="result8"
|
||||
operator="atop"
|
||||
result="result9" />
|
||||
</filter>
|
||||
<filter
|
||||
id="filter4092"
|
||||
inkscape:label="Inner Shadow"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:menu-tooltip="Adds a colorizable drop shadow inside"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur4094"
|
||||
result="result6"
|
||||
stdDeviation="1.5" />
|
||||
<feComposite
|
||||
id="feComposite4096"
|
||||
in2="result6"
|
||||
operator="atop"
|
||||
in="SourceGraphic"
|
||||
result="result8" />
|
||||
<feComposite
|
||||
id="feComposite4098"
|
||||
in2="SourceAlpha"
|
||||
in="result8"
|
||||
operator="atop"
|
||||
result="fbSourceGraphic" />
|
||||
<feColorMatrix
|
||||
result="fbSourceGraphicAlpha"
|
||||
in="fbSourceGraphic"
|
||||
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
|
||||
id="feColorMatrix3076" />
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur3078"
|
||||
stdDeviation="4"
|
||||
result="result8"
|
||||
in="fbSourceGraphic" />
|
||||
<feOffset
|
||||
id="feOffset3080"
|
||||
dx="4"
|
||||
dy="4"
|
||||
result="result11" />
|
||||
<feComposite
|
||||
id="feComposite3082"
|
||||
in2="result11"
|
||||
result="result6"
|
||||
in="fbSourceGraphic"
|
||||
operator="in" />
|
||||
<feFlood
|
||||
id="feFlood3084"
|
||||
result="result10"
|
||||
in="result6"
|
||||
flood-opacity="1"
|
||||
flood-color="rgb(0,0,0)" />
|
||||
<feBlend
|
||||
id="feBlend3086"
|
||||
in2="result10"
|
||||
mode="normal"
|
||||
in="result6"
|
||||
result="result12" />
|
||||
<feComposite
|
||||
id="feComposite3088"
|
||||
in2="fbSourceGraphic"
|
||||
result="result2"
|
||||
operator="in" />
|
||||
</filter>
|
||||
<filter
|
||||
id="filter4100"
|
||||
inkscape:label="Darken edges"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:menu-tooltip="Darken the edges with an inner blur"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur4102"
|
||||
result="result6"
|
||||
stdDeviation="1.5" />
|
||||
<feComposite
|
||||
id="feComposite4104"
|
||||
in2="result6"
|
||||
operator="atop"
|
||||
in="SourceGraphic"
|
||||
result="result8" />
|
||||
<feComposite
|
||||
id="feComposite4106"
|
||||
in2="SourceAlpha"
|
||||
in="result8"
|
||||
operator="atop"
|
||||
result="result9" />
|
||||
</filter>
|
||||
<filter
|
||||
id="filter4108"
|
||||
inkscape:label="Inner Shadow"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:menu-tooltip="Adds a colorizable drop shadow inside"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur4110"
|
||||
stdDeviation="4"
|
||||
result="result8" />
|
||||
<feOffset
|
||||
id="feOffset4112"
|
||||
dx="4"
|
||||
dy="4"
|
||||
result="result11" />
|
||||
<feComposite
|
||||
id="feComposite4114"
|
||||
in2="result11"
|
||||
result="result6"
|
||||
in="SourceGraphic"
|
||||
operator="in" />
|
||||
<feFlood
|
||||
id="feFlood4116"
|
||||
result="result10"
|
||||
in="result6"
|
||||
flood-opacity="1"
|
||||
flood-color="rgb(0,0,0)" />
|
||||
<feBlend
|
||||
id="feBlend4118"
|
||||
in2="result10"
|
||||
mode="normal"
|
||||
in="result6"
|
||||
result="result12" />
|
||||
<feComposite
|
||||
id="feComposite4120"
|
||||
in2="SourceGraphic"
|
||||
result="result2"
|
||||
operator="in" />
|
||||
</filter>
|
||||
<filter
|
||||
id="filter4122"
|
||||
inkscape:label="Inner Shadow"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:menu-tooltip="Adds a colorizable drop shadow inside"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur4124"
|
||||
stdDeviation="4"
|
||||
result="result8" />
|
||||
<feOffset
|
||||
id="feOffset4126"
|
||||
dx="4"
|
||||
dy="4"
|
||||
result="result11" />
|
||||
<feComposite
|
||||
id="feComposite4128"
|
||||
in2="result11"
|
||||
result="result6"
|
||||
in="SourceGraphic"
|
||||
operator="in" />
|
||||
<feFlood
|
||||
id="feFlood4130"
|
||||
result="result10"
|
||||
in="result6"
|
||||
flood-opacity="1"
|
||||
flood-color="rgb(0,0,0)" />
|
||||
<feBlend
|
||||
id="feBlend4132"
|
||||
in2="result10"
|
||||
mode="normal"
|
||||
in="result6"
|
||||
result="result12" />
|
||||
<feComposite
|
||||
id="feComposite4134"
|
||||
in2="SourceGraphic"
|
||||
result="result2"
|
||||
operator="in" />
|
||||
</filter>
|
||||
<filter
|
||||
id="filter4056-2"
|
||||
inkscape:label="Inner Shadow"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:menu-tooltip="Adds a colorizable drop shadow inside"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur4058-5"
|
||||
stdDeviation="10"
|
||||
result="result8" />
|
||||
<feOffset
|
||||
id="feOffset4060-5"
|
||||
dx="4"
|
||||
dy="4"
|
||||
result="result11" />
|
||||
<feComposite
|
||||
id="feComposite4062-7"
|
||||
in2="result11"
|
||||
result="result6"
|
||||
in="SourceGraphic"
|
||||
operator="in" />
|
||||
<feFlood
|
||||
id="feFlood4064-4"
|
||||
result="result10"
|
||||
in="result6"
|
||||
flood-opacity="1"
|
||||
flood-color="rgb(0,0,0)" />
|
||||
<feBlend
|
||||
id="feBlend4066-6"
|
||||
in2="result10"
|
||||
mode="normal"
|
||||
in="result6"
|
||||
result="result12" />
|
||||
<feComposite
|
||||
id="feComposite4068-4"
|
||||
in2="SourceGraphic"
|
||||
result="result2"
|
||||
operator="in" />
|
||||
</filter>
|
||||
<filter
|
||||
id="filter4070-0"
|
||||
inkscape:label="Darken edges"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:menu-tooltip="Darken the edges with an inner blur"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur4072-1"
|
||||
stdDeviation="7"
|
||||
result="result8" />
|
||||
<feOffset
|
||||
id="feOffset4074-2"
|
||||
dx="4"
|
||||
dy="4"
|
||||
result="result11" />
|
||||
<feComposite
|
||||
id="feComposite4076-8"
|
||||
in2="result11"
|
||||
result="result6"
|
||||
in="SourceGraphic"
|
||||
operator="in" />
|
||||
<feFlood
|
||||
id="feFlood4078-2"
|
||||
result="result10"
|
||||
in="result6"
|
||||
flood-opacity="1"
|
||||
flood-color="rgb(0,0,0)" />
|
||||
<feBlend
|
||||
id="feBlend4080-9"
|
||||
in2="result10"
|
||||
mode="normal"
|
||||
in="result6"
|
||||
result="result12" />
|
||||
<feComposite
|
||||
id="feComposite4082-1"
|
||||
in2="SourceGraphic"
|
||||
result="fbSourceGraphic"
|
||||
operator="in" />
|
||||
<feColorMatrix
|
||||
result="fbSourceGraphicAlpha"
|
||||
in="fbSourceGraphic"
|
||||
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
|
||||
id="feColorMatrix3318-4" />
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur3320-2"
|
||||
result="result6"
|
||||
stdDeviation="1.5"
|
||||
in="fbSourceGraphic" />
|
||||
<feComposite
|
||||
in2="result6"
|
||||
id="feComposite3322-1"
|
||||
operator="atop"
|
||||
in="fbSourceGraphic"
|
||||
result="result8" />
|
||||
<feComposite
|
||||
in2="fbSourceGraphicAlpha"
|
||||
id="feComposite3324-7"
|
||||
in="result8"
|
||||
operator="atop"
|
||||
result="result9" />
|
||||
</filter>
|
||||
<filter
|
||||
id="filter4056-0"
|
||||
inkscape:label="Inner Shadow"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:menu-tooltip="Adds a colorizable drop shadow inside"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur4058-2"
|
||||
stdDeviation="7"
|
||||
result="result8" />
|
||||
<feOffset
|
||||
id="feOffset4060-8"
|
||||
dx="4"
|
||||
dy="4"
|
||||
result="result11" />
|
||||
<feComposite
|
||||
id="feComposite4062-72"
|
||||
in2="result11"
|
||||
result="result6"
|
||||
in="SourceGraphic"
|
||||
operator="in" />
|
||||
<feFlood
|
||||
id="feFlood4064-7"
|
||||
result="result10"
|
||||
in="result6"
|
||||
flood-opacity="1"
|
||||
flood-color="rgb(0,0,0)" />
|
||||
<feBlend
|
||||
id="feBlend4066-4"
|
||||
in2="result10"
|
||||
mode="normal"
|
||||
in="result6"
|
||||
result="result12" />
|
||||
<feComposite
|
||||
id="feComposite4068-6"
|
||||
in2="SourceGraphic"
|
||||
result="result2"
|
||||
operator="in" />
|
||||
</filter>
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
id="filter3894">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="1.6297979"
|
||||
id="feGaussianBlur3896" />
|
||||
</filter>
|
||||
<filter
|
||||
color-interpolation-filters="sRGB"
|
||||
inkscape:collect="always"
|
||||
id="filter3894-7">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="1.6297979"
|
||||
id="feGaussianBlur3896-1" />
|
||||
</filter>
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
id="filter3954">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="1.6259235"
|
||||
id="feGaussianBlur3956" />
|
||||
</filter>
|
||||
<filter
|
||||
color-interpolation-filters="sRGB"
|
||||
inkscape:collect="always"
|
||||
id="filter3954-0">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="1.6259235"
|
||||
id="feGaussianBlur3956-0" />
|
||||
</filter>
|
||||
</defs>
|
||||
<metadata
|
||||
id="metadata6467">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Calque 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-852.36218)">
|
||||
<g
|
||||
id="g3167"
|
||||
inkscape:export-filename="/home/jrbastien/Ubuntu One/CoverArt/1.1 dark/arrow_down.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">
|
||||
<rect
|
||||
inkscape:export-ydpi="90"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-filename="/home/jrbastien/Ubuntu One/CoverArt/1.0 New light/arrow_down.png"
|
||||
y="891.19916"
|
||||
x="14.282172"
|
||||
height="128"
|
||||
width="128"
|
||||
id="rect3927"
|
||||
style="opacity:0.54878049;color:#000000;fill:none;stroke:none;stroke-width:0.99577111;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
|
||||
<path
|
||||
inkscape:export-ydpi="90"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-filename="/home/jrbastien/Ubuntu One/CoverArt/1.0 New light/arrow_down.png"
|
||||
sodipodi:nodetypes="cccccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="rect5581"
|
||||
d="m 43.063434,943.80829 c 0,0 21.264134,21.26406 31.896202,31.89608 2.676746,2.5683 3.929655,2.61211 6.612848,0.0322 10.64281,-10.64277 21.285616,-21.28554 31.928426,-31.92831 l -11.06099,-11.06109 -24.157746,24.1577 -24.157752,-24.1577 z"
|
||||
style="color:#000000;fill:#2c2c2c;fill-opacity:1;fill-rule:nonzero;stroke:#333333;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
|
||||
</g>
|
||||
<g
|
||||
id="g3171"
|
||||
inkscape:export-filename="/home/jrbastien/Ubuntu One/CoverArt/1.1 dark/arrow_up.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">
|
||||
<rect
|
||||
y="884.42499"
|
||||
x="191.87073"
|
||||
height="128"
|
||||
width="128"
|
||||
id="rect3987"
|
||||
style="opacity:0.54878049;color:#000000;fill:none;stroke:none;stroke-width:1.32088256;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
|
||||
<path
|
||||
inkscape:export-ydpi="90"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-filename="/home/jrbastien/Ubuntu One/CoverArt/1.0 New light/arrow_down.png"
|
||||
sodipodi:nodetypes="cccccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="rect5581-78"
|
||||
d="m 291.08947,959.81577 c 0,0 -21.26414,-21.2641 -31.89621,-31.8961 -2.67674,-2.5683 -3.92965,-2.6121 -6.61284,-0.032 -10.64281,10.6428 -21.28562,21.2856 -31.92843,31.9284 l 11.06099,11.061 24.15775,-24.1577 24.15775,24.1577 z"
|
||||
style="color:#000000;fill:#2c2c2c;fill-opacity:1;fill-rule:nonzero;stroke:#333333;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Depois Largura: | Altura: | Tamanho: 24 KiB |
|
Depois Largura: | Altura: | Tamanho: 109 KiB |
|
Depois Largura: | Altura: | Tamanho: 43 KiB |
|
Depois Largura: | Altura: | Tamanho: 119 KiB |
|
Depois Largura: | Altura: | Tamanho: 138 KiB |
|
Depois Largura: | Altura: | Tamanho: 39 KiB |
|
Depois Largura: | Altura: | Tamanho: 62 KiB |
|
Depois Largura: | Altura: | Tamanho: 64 KiB |
@@ -0,0 +1,767 @@
|
||||
<?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="350"
|
||||
height="200"
|
||||
id="svg6462"
|
||||
version="1.1"
|
||||
inkscape:version="0.48.4 r9939"
|
||||
sodipodi:docname="arrow_up_down_light.svg"
|
||||
inkscape:export-filename="/home/jrbastien/Ubuntu One/CoverArt/UpDownArrows.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.8051997"
|
||||
inkscape:cx="78.729549"
|
||||
inkscape:cy="221.99002"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1440"
|
||||
inkscape:window-height="838"
|
||||
inkscape:window-x="1272"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true" />
|
||||
<defs
|
||||
id="defs6464">
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient6364"
|
||||
id="linearGradient6370"
|
||||
x1="101.42937"
|
||||
y1="400.5535"
|
||||
x2="99.124153"
|
||||
y2="244.95164"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.340328,0,0,1.340328,-155.22114,-66.380723)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient6364">
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop6366" />
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop6368" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient6364-8">
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop6366-5" />
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop6368-9" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
y2="244.95164"
|
||||
x2="99.124153"
|
||||
y1="400.5535"
|
||||
x1="101.42937"
|
||||
gradientTransform="matrix(1.340328,0,0,1.340328,-66.590934,-328.62237)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient6531"
|
||||
xlink:href="#linearGradient6364-8"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
y2="244.95164"
|
||||
x2="99.124153"
|
||||
y1="400.5535"
|
||||
x1="101.42937"
|
||||
gradientTransform="matrix(1.340328,0,0,1.340328,-31.467381,555.95415)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient6460"
|
||||
xlink:href="#linearGradient6364-2"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient6364-2">
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop6366-7" />
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop6368-8" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
y2="244.95164"
|
||||
x2="99.124153"
|
||||
y1="400.5535"
|
||||
x1="101.42937"
|
||||
gradientTransform="matrix(1.340328,0,0,-1.340328,133.5722,1341.1989)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient6421-9"
|
||||
xlink:href="#linearGradient6364-5-9"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient6364-5-9">
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop6366-4-1" />
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop6368-6-9" />
|
||||
</linearGradient>
|
||||
<filter
|
||||
id="filter3970"
|
||||
inkscape:label="Inner Shadow"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:menu-tooltip="Adds a colorizable drop shadow inside"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur3972"
|
||||
stdDeviation="4"
|
||||
result="result8" />
|
||||
<feOffset
|
||||
id="feOffset3974"
|
||||
dx="4"
|
||||
dy="4"
|
||||
result="result11" />
|
||||
<feComposite
|
||||
id="feComposite3976"
|
||||
in2="result11"
|
||||
result="result6"
|
||||
in="SourceGraphic"
|
||||
operator="in" />
|
||||
<feFlood
|
||||
id="feFlood3978"
|
||||
result="result10"
|
||||
in="result6"
|
||||
flood-opacity="1"
|
||||
flood-color="rgb(0,0,0)" />
|
||||
<feBlend
|
||||
id="feBlend3980"
|
||||
in2="result10"
|
||||
mode="normal"
|
||||
in="result6"
|
||||
result="result12" />
|
||||
<feComposite
|
||||
id="feComposite3982"
|
||||
in2="SourceGraphic"
|
||||
result="result2"
|
||||
operator="in" />
|
||||
</filter>
|
||||
<filter
|
||||
id="filter3984"
|
||||
inkscape:label="Inner Shadow"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:menu-tooltip="Adds a colorizable drop shadow inside"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur3986"
|
||||
stdDeviation="4"
|
||||
result="result8" />
|
||||
<feOffset
|
||||
id="feOffset3988"
|
||||
dx="4"
|
||||
dy="4"
|
||||
result="result11" />
|
||||
<feComposite
|
||||
id="feComposite3990"
|
||||
in2="result11"
|
||||
result="result6"
|
||||
in="SourceGraphic"
|
||||
operator="in" />
|
||||
<feFlood
|
||||
id="feFlood3992"
|
||||
result="result10"
|
||||
in="result6"
|
||||
flood-opacity="1"
|
||||
flood-color="rgb(0,0,0)" />
|
||||
<feBlend
|
||||
id="feBlend3994"
|
||||
in2="result10"
|
||||
mode="normal"
|
||||
in="result6"
|
||||
result="result12" />
|
||||
<feComposite
|
||||
id="feComposite3996"
|
||||
in2="SourceGraphic"
|
||||
result="result2"
|
||||
operator="in" />
|
||||
</filter>
|
||||
<filter
|
||||
color-interpolation-filters="sRGB"
|
||||
inkscape:menu-tooltip="Adds a colorizable drop shadow inside"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:label="Inner Shadow"
|
||||
id="filter3142">
|
||||
<feGaussianBlur
|
||||
result="result8"
|
||||
stdDeviation="4"
|
||||
id="feGaussianBlur3144" />
|
||||
<feOffset
|
||||
result="result11"
|
||||
dy="4"
|
||||
dx="4"
|
||||
id="feOffset3146" />
|
||||
<feComposite
|
||||
operator="in"
|
||||
in="SourceGraphic"
|
||||
result="result6"
|
||||
in2="result11"
|
||||
id="feComposite3148" />
|
||||
<feFlood
|
||||
flood-color="rgb(0,0,0)"
|
||||
flood-opacity="1"
|
||||
in="result6"
|
||||
result="result10"
|
||||
id="feFlood3150" />
|
||||
<feBlend
|
||||
result="result12"
|
||||
in="result6"
|
||||
mode="normal"
|
||||
in2="result10"
|
||||
id="feBlend3152" />
|
||||
<feComposite
|
||||
operator="in"
|
||||
result="result2"
|
||||
in2="SourceGraphic"
|
||||
id="feComposite3154" />
|
||||
</filter>
|
||||
<filter
|
||||
color-interpolation-filters="sRGB"
|
||||
inkscape:menu-tooltip="Adds a colorizable drop shadow inside"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:label="Inner Shadow"
|
||||
id="filter3938">
|
||||
<feGaussianBlur
|
||||
result="result8"
|
||||
stdDeviation="4"
|
||||
id="feGaussianBlur3940" />
|
||||
<feOffset
|
||||
result="result11"
|
||||
dy="4"
|
||||
dx="4"
|
||||
id="feOffset3942" />
|
||||
<feComposite
|
||||
operator="in"
|
||||
in="SourceGraphic"
|
||||
result="result6"
|
||||
in2="result11"
|
||||
id="feComposite3944" />
|
||||
<feFlood
|
||||
flood-color="rgb(0,0,0)"
|
||||
flood-opacity="1"
|
||||
in="result6"
|
||||
result="result10"
|
||||
id="feFlood3946" />
|
||||
<feBlend
|
||||
result="result12"
|
||||
in="result6"
|
||||
mode="normal"
|
||||
in2="result10"
|
||||
id="feBlend3948" />
|
||||
<feComposite
|
||||
operator="in"
|
||||
result="result2"
|
||||
in2="SourceGraphic"
|
||||
id="feComposite3950" />
|
||||
</filter>
|
||||
<filter
|
||||
color-interpolation-filters="sRGB"
|
||||
inkscape:menu-tooltip="Adds a colorizable drop shadow inside"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:label="Inner Shadow"
|
||||
id="filter3060">
|
||||
<feGaussianBlur
|
||||
result="result8"
|
||||
stdDeviation="4"
|
||||
id="feGaussianBlur3062" />
|
||||
<feOffset
|
||||
result="result11"
|
||||
dy="4"
|
||||
dx="4"
|
||||
id="feOffset3064" />
|
||||
<feComposite
|
||||
operator="in"
|
||||
in="SourceGraphic"
|
||||
result="result6"
|
||||
in2="result11"
|
||||
id="feComposite3066" />
|
||||
<feFlood
|
||||
flood-color="rgb(0,0,0)"
|
||||
flood-opacity="1"
|
||||
in="result6"
|
||||
result="result10"
|
||||
id="feFlood3068" />
|
||||
<feBlend
|
||||
result="result12"
|
||||
in="result6"
|
||||
mode="normal"
|
||||
in2="result10"
|
||||
id="feBlend3070" />
|
||||
<feComposite
|
||||
operator="in"
|
||||
result="result2"
|
||||
in2="SourceGraphic"
|
||||
id="feComposite3072" />
|
||||
</filter>
|
||||
<filter
|
||||
id="filter4056"
|
||||
inkscape:label="Inner Shadow"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:menu-tooltip="Adds a colorizable drop shadow inside"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur4058"
|
||||
stdDeviation="10"
|
||||
result="result8" />
|
||||
<feOffset
|
||||
id="feOffset4060"
|
||||
dx="4"
|
||||
dy="4"
|
||||
result="result11" />
|
||||
<feComposite
|
||||
id="feComposite4062"
|
||||
in2="result11"
|
||||
result="result6"
|
||||
in="SourceGraphic"
|
||||
operator="in" />
|
||||
<feFlood
|
||||
id="feFlood4064"
|
||||
result="result10"
|
||||
in="result6"
|
||||
flood-opacity="1"
|
||||
flood-color="rgb(0,0,0)" />
|
||||
<feBlend
|
||||
id="feBlend4066"
|
||||
in2="result10"
|
||||
mode="normal"
|
||||
in="result6"
|
||||
result="result12" />
|
||||
<feComposite
|
||||
id="feComposite4068"
|
||||
in2="SourceGraphic"
|
||||
result="result2"
|
||||
operator="in" />
|
||||
</filter>
|
||||
<filter
|
||||
id="filter4070"
|
||||
inkscape:label="Darken edges"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:menu-tooltip="Darken the edges with an inner blur"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur4072"
|
||||
stdDeviation="10"
|
||||
result="result8" />
|
||||
<feOffset
|
||||
id="feOffset4074"
|
||||
dx="4"
|
||||
dy="4"
|
||||
result="result11" />
|
||||
<feComposite
|
||||
id="feComposite4076"
|
||||
in2="result11"
|
||||
result="result6"
|
||||
in="SourceGraphic"
|
||||
operator="in" />
|
||||
<feFlood
|
||||
id="feFlood4078"
|
||||
result="result10"
|
||||
in="result6"
|
||||
flood-opacity="1"
|
||||
flood-color="rgb(0,0,0)" />
|
||||
<feBlend
|
||||
id="feBlend4080"
|
||||
in2="result10"
|
||||
mode="normal"
|
||||
in="result6"
|
||||
result="result12" />
|
||||
<feComposite
|
||||
id="feComposite4082"
|
||||
in2="SourceGraphic"
|
||||
result="fbSourceGraphic"
|
||||
operator="in" />
|
||||
<feColorMatrix
|
||||
result="fbSourceGraphicAlpha"
|
||||
in="fbSourceGraphic"
|
||||
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
|
||||
id="feColorMatrix3318" />
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur3320"
|
||||
result="result6"
|
||||
stdDeviation="1.5"
|
||||
in="fbSourceGraphic" />
|
||||
<feComposite
|
||||
in2="result6"
|
||||
id="feComposite3322"
|
||||
operator="atop"
|
||||
in="fbSourceGraphic"
|
||||
result="result8" />
|
||||
<feComposite
|
||||
in2="fbSourceGraphicAlpha"
|
||||
id="feComposite3324"
|
||||
in="result8"
|
||||
operator="atop"
|
||||
result="result9" />
|
||||
</filter>
|
||||
<filter
|
||||
id="filter4092"
|
||||
inkscape:label="Inner Shadow"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:menu-tooltip="Adds a colorizable drop shadow inside"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur4094"
|
||||
result="result6"
|
||||
stdDeviation="1.5" />
|
||||
<feComposite
|
||||
id="feComposite4096"
|
||||
in2="result6"
|
||||
operator="atop"
|
||||
in="SourceGraphic"
|
||||
result="result8" />
|
||||
<feComposite
|
||||
id="feComposite4098"
|
||||
in2="SourceAlpha"
|
||||
in="result8"
|
||||
operator="atop"
|
||||
result="fbSourceGraphic" />
|
||||
<feColorMatrix
|
||||
result="fbSourceGraphicAlpha"
|
||||
in="fbSourceGraphic"
|
||||
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
|
||||
id="feColorMatrix3076" />
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur3078"
|
||||
stdDeviation="4"
|
||||
result="result8"
|
||||
in="fbSourceGraphic" />
|
||||
<feOffset
|
||||
id="feOffset3080"
|
||||
dx="4"
|
||||
dy="4"
|
||||
result="result11" />
|
||||
<feComposite
|
||||
id="feComposite3082"
|
||||
in2="result11"
|
||||
result="result6"
|
||||
in="fbSourceGraphic"
|
||||
operator="in" />
|
||||
<feFlood
|
||||
id="feFlood3084"
|
||||
result="result10"
|
||||
in="result6"
|
||||
flood-opacity="1"
|
||||
flood-color="rgb(0,0,0)" />
|
||||
<feBlend
|
||||
id="feBlend3086"
|
||||
in2="result10"
|
||||
mode="normal"
|
||||
in="result6"
|
||||
result="result12" />
|
||||
<feComposite
|
||||
id="feComposite3088"
|
||||
in2="fbSourceGraphic"
|
||||
result="result2"
|
||||
operator="in" />
|
||||
</filter>
|
||||
<filter
|
||||
id="filter4100"
|
||||
inkscape:label="Darken edges"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:menu-tooltip="Darken the edges with an inner blur"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur4102"
|
||||
result="result6"
|
||||
stdDeviation="1.5" />
|
||||
<feComposite
|
||||
id="feComposite4104"
|
||||
in2="result6"
|
||||
operator="atop"
|
||||
in="SourceGraphic"
|
||||
result="result8" />
|
||||
<feComposite
|
||||
id="feComposite4106"
|
||||
in2="SourceAlpha"
|
||||
in="result8"
|
||||
operator="atop"
|
||||
result="result9" />
|
||||
</filter>
|
||||
<filter
|
||||
id="filter4108"
|
||||
inkscape:label="Inner Shadow"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:menu-tooltip="Adds a colorizable drop shadow inside"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur4110"
|
||||
stdDeviation="4"
|
||||
result="result8" />
|
||||
<feOffset
|
||||
id="feOffset4112"
|
||||
dx="4"
|
||||
dy="4"
|
||||
result="result11" />
|
||||
<feComposite
|
||||
id="feComposite4114"
|
||||
in2="result11"
|
||||
result="result6"
|
||||
in="SourceGraphic"
|
||||
operator="in" />
|
||||
<feFlood
|
||||
id="feFlood4116"
|
||||
result="result10"
|
||||
in="result6"
|
||||
flood-opacity="1"
|
||||
flood-color="rgb(0,0,0)" />
|
||||
<feBlend
|
||||
id="feBlend4118"
|
||||
in2="result10"
|
||||
mode="normal"
|
||||
in="result6"
|
||||
result="result12" />
|
||||
<feComposite
|
||||
id="feComposite4120"
|
||||
in2="SourceGraphic"
|
||||
result="result2"
|
||||
operator="in" />
|
||||
</filter>
|
||||
<filter
|
||||
id="filter4122"
|
||||
inkscape:label="Inner Shadow"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:menu-tooltip="Adds a colorizable drop shadow inside"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur4124"
|
||||
stdDeviation="4"
|
||||
result="result8" />
|
||||
<feOffset
|
||||
id="feOffset4126"
|
||||
dx="4"
|
||||
dy="4"
|
||||
result="result11" />
|
||||
<feComposite
|
||||
id="feComposite4128"
|
||||
in2="result11"
|
||||
result="result6"
|
||||
in="SourceGraphic"
|
||||
operator="in" />
|
||||
<feFlood
|
||||
id="feFlood4130"
|
||||
result="result10"
|
||||
in="result6"
|
||||
flood-opacity="1"
|
||||
flood-color="rgb(0,0,0)" />
|
||||
<feBlend
|
||||
id="feBlend4132"
|
||||
in2="result10"
|
||||
mode="normal"
|
||||
in="result6"
|
||||
result="result12" />
|
||||
<feComposite
|
||||
id="feComposite4134"
|
||||
in2="SourceGraphic"
|
||||
result="result2"
|
||||
operator="in" />
|
||||
</filter>
|
||||
<filter
|
||||
id="filter4056-2"
|
||||
inkscape:label="Inner Shadow"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:menu-tooltip="Adds a colorizable drop shadow inside"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur4058-5"
|
||||
stdDeviation="10"
|
||||
result="result8" />
|
||||
<feOffset
|
||||
id="feOffset4060-5"
|
||||
dx="4"
|
||||
dy="4"
|
||||
result="result11" />
|
||||
<feComposite
|
||||
id="feComposite4062-7"
|
||||
in2="result11"
|
||||
result="result6"
|
||||
in="SourceGraphic"
|
||||
operator="in" />
|
||||
<feFlood
|
||||
id="feFlood4064-4"
|
||||
result="result10"
|
||||
in="result6"
|
||||
flood-opacity="1"
|
||||
flood-color="rgb(0,0,0)" />
|
||||
<feBlend
|
||||
id="feBlend4066-6"
|
||||
in2="result10"
|
||||
mode="normal"
|
||||
in="result6"
|
||||
result="result12" />
|
||||
<feComposite
|
||||
id="feComposite4068-4"
|
||||
in2="SourceGraphic"
|
||||
result="result2"
|
||||
operator="in" />
|
||||
</filter>
|
||||
<filter
|
||||
id="filter4070-0"
|
||||
inkscape:label="Darken edges"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:menu-tooltip="Darken the edges with an inner blur"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur4072-1"
|
||||
stdDeviation="7"
|
||||
result="result8" />
|
||||
<feOffset
|
||||
id="feOffset4074-2"
|
||||
dx="4"
|
||||
dy="4"
|
||||
result="result11" />
|
||||
<feComposite
|
||||
id="feComposite4076-8"
|
||||
in2="result11"
|
||||
result="result6"
|
||||
in="SourceGraphic"
|
||||
operator="in" />
|
||||
<feFlood
|
||||
id="feFlood4078-2"
|
||||
result="result10"
|
||||
in="result6"
|
||||
flood-opacity="1"
|
||||
flood-color="rgb(0,0,0)" />
|
||||
<feBlend
|
||||
id="feBlend4080-9"
|
||||
in2="result10"
|
||||
mode="normal"
|
||||
in="result6"
|
||||
result="result12" />
|
||||
<feComposite
|
||||
id="feComposite4082-1"
|
||||
in2="SourceGraphic"
|
||||
result="fbSourceGraphic"
|
||||
operator="in" />
|
||||
<feColorMatrix
|
||||
result="fbSourceGraphicAlpha"
|
||||
in="fbSourceGraphic"
|
||||
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
|
||||
id="feColorMatrix3318-4" />
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur3320-2"
|
||||
result="result6"
|
||||
stdDeviation="1.5"
|
||||
in="fbSourceGraphic" />
|
||||
<feComposite
|
||||
in2="result6"
|
||||
id="feComposite3322-1"
|
||||
operator="atop"
|
||||
in="fbSourceGraphic"
|
||||
result="result8" />
|
||||
<feComposite
|
||||
in2="fbSourceGraphicAlpha"
|
||||
id="feComposite3324-7"
|
||||
in="result8"
|
||||
operator="atop"
|
||||
result="result9" />
|
||||
</filter>
|
||||
<filter
|
||||
id="filter4056-0"
|
||||
inkscape:label="Inner Shadow"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:menu-tooltip="Adds a colorizable drop shadow inside"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur4058-2"
|
||||
stdDeviation="7"
|
||||
result="result8" />
|
||||
<feOffset
|
||||
id="feOffset4060-8"
|
||||
dx="4"
|
||||
dy="4"
|
||||
result="result11" />
|
||||
<feComposite
|
||||
id="feComposite4062-72"
|
||||
in2="result11"
|
||||
result="result6"
|
||||
in="SourceGraphic"
|
||||
operator="in" />
|
||||
<feFlood
|
||||
id="feFlood4064-7"
|
||||
result="result10"
|
||||
in="result6"
|
||||
flood-opacity="1"
|
||||
flood-color="rgb(0,0,0)" />
|
||||
<feBlend
|
||||
id="feBlend4066-4"
|
||||
in2="result10"
|
||||
mode="normal"
|
||||
in="result6"
|
||||
result="result12" />
|
||||
<feComposite
|
||||
id="feComposite4068-6"
|
||||
in2="SourceGraphic"
|
||||
result="result2"
|
||||
operator="in" />
|
||||
</filter>
|
||||
</defs>
|
||||
<metadata
|
||||
id="metadata6467">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Calque 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-852.36218)">
|
||||
<path
|
||||
style="fill:#b3b3b3;fill-opacity:1;stroke:none;filter:url(#filter4056-0)"
|
||||
d="m 101.94019,806.0726 c 4.24775,-4.93502 3.88189,-4.51 6.20043,-7.20362 1.93206,-2.24462 4.01705,-4.66692 6.20027,-7.20335 1.99831,-2.32159 4.07892,-4.7388 6.19989,-7.20291 2.04168,-2.37197 4.12075,-4.7874 6.19983,-7.20283 2.07891,-2.41524 4.15782,-4.83048 6.19933,-7.20226 2.12123,-2.46441 4.20209,-4.8819 6.20061,-7.20374 2.18303,-2.53621 4.26783,-4.95829 6.19972,-7.20272 2.31844,-2.69351 1.30419,-1.70164 6.20013,-7.20319 4.89594,-5.50155 4.57779,-8.9704 0.20746,-13.7333 -4.37033,-4.7629 -1.48236,-1.35026 -5.99227,-6.53052 -4.50991,-5.18026 -7.69578,-4.79514 -11.59693,-0.82064 -3.90115,3.9745 -3.59889,3.66656 -5.60503,5.71042 -1.84585,1.88056 -3.75933,3.83002 -5.60514,5.71054 -2.00611,2.04383 -3.93228,4.00622 -5.60482,5.7102 -3.29353,3.35546 -5.60352,5.70888 -5.60352,5.70888 0,0 0,-3.44786 0,-8.70318 0,-2.5408 0,-5.50409 0,-8.70449 0,-2.76414 0,-5.70515 0,-8.7036 0,-2.88383 0,-5.8208 0,-8.70464 0,-2.9987 0,-5.93996 0,-8.70432 0,-3.20003 -0.18699,-2.09019 0,-8.70361 0.18699,-6.61342 -2.41793,-8.70412 -7.95911,-8.70412 -5.541184,0 -5.194384,0 -7.958274,0 -2.764138,0 -1.34525,0.20092 -7.959087,0 -6.613837,-0.20092 -7.967645,3.03423 -7.98288,8.70318 -0.01524,5.66895 -0.01482,5.50409 -0.02344,8.70449 -0.0074,2.76414 -0.01537,5.70515 -0.02344,8.7036 -0.0078,2.88383 -0.01568,5.8208 -0.02344,8.70464 -0.0081,2.9987 -0.016,5.93996 -0.02344,8.70432 -0.0086,3.20003 -0.0166,6.163 -0.02344,8.70361 -0.01415,5.25585 -0.02344,8.70412 -0.02344,8.70412 0,0 -2.308581,-2.36733 -5.599971,-5.74248 -1.671263,-1.7138 -3.595921,-3.68743 -5.60041,-5.74293 -1.844325,-1.89127 -3.756233,-3.85183 -5.600526,-5.74306 -2.004453,-2.05546 -1.081892,-0.82233 -5.600192,-5.7427 -4.5183,-4.92038 -7.579666,-3.56758 -11.598894,0.84335 -4.019229,4.41093 -0.888449,1.29866 -5.999966,6.58471 -5.111517,5.28605 -3.842073,9.09187 0.2,13.78787 4.042072,4.696 3.881883,4.5099 6.20043,7.20354 1.932056,2.24462 4.017042,4.66692 6.200267,7.20335 1.998307,2.32159 4.078917,4.7388 6.199893,7.20291 2.041674,2.37197 4.120751,4.7874 6.199825,7.20283 2.078914,2.41524 4.157824,4.83048 6.199334,7.20226 2.121232,2.46441 4.202085,4.8819 6.200607,7.20374 2.183035,2.53621 4.267835,4.95829 6.199722,7.20272 2.31844,2.69353 1.283722,1.23781 6.200132,7.20323 4.916406,5.9654 8.152036,4.9346 12.39978,-3e-4 z"
|
||||
id="path6832-1-9-7-6"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="zccccccczzzzssscssssszzszzssssscssszzccssssssszz"
|
||||
inkscape:export-filename="/home/jrbastien/Ubuntu One/CoverArt/0.8 light/arrow_down_light.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90"
|
||||
transform="matrix(0.91385019,0,0,0.89991259,14.566265,272.7385)" />
|
||||
<path
|
||||
style="fill:#b3b3b3;fill-opacity:1;stroke:none;filter:url(#filter4070-0)"
|
||||
d="m 249.6163,693.36364 c -4.24775,4.935 -3.88189,4.51 -6.20043,7.2036 -1.93206,2.2446 -4.01705,4.6669 -6.20027,7.2033 -1.99831,2.3216 -4.07892,4.7388 -6.19989,7.203 -2.04168,2.3719 -4.12075,4.7874 -6.19983,7.2028 -2.07891,2.4152 -4.15782,4.8305 -6.19933,7.2022 -2.12123,2.4645 -4.20209,4.8819 -6.20061,7.2038 -2.18303,2.5362 -4.26783,4.9583 -6.19972,7.20274 -2.31844,2.6935 -1.30419,1.7016 -6.20013,7.2032 -4.89594,5.5015 -4.57779,8.9703 -0.20746,13.7332 4.37033,4.7629 1.48236,1.3503 5.99227,6.5306 4.50991,5.1802 7.69578,4.7951 11.59693,0.8206 3.90115,-3.9745 3.59889,-3.6666 5.60503,-5.7104 1.84585,-1.8806 3.75933,-3.83 5.60514,-5.7106 2.00611,-2.0438 3.93228,-4.0062 5.60482,-5.7101 3.29353,-3.3555 5.60352,-5.7089 5.60352,-5.7089 0,0 0,3.4479 0,8.7031 0,2.5408 0,5.5041 0,8.7045 0,2.7642 0,5.7052 0,8.7036 0,2.8839 0,5.8208 0,8.7047 0,2.9987 0,5.9399 0,8.7043 0,3.2 0.18699,2.0902 0,8.70362 -0.18699,6.6134 2.41793,8.7041 7.95911,8.7041 5.54118,0 5.19438,0 7.95827,0 2.76413,0 1.34525,-0.2009 7.95908,0 6.61384,0.2009 7.96765,-3.0342 7.98288,-8.7032 0.0152,-5.66892 0.0148,-5.50402 0.0234,-8.70442 0.007,-2.7642 0.0154,-5.7052 0.0234,-8.7036 0.008,-2.8839 0.0157,-5.8208 0.0234,-8.7047 0.008,-2.9987 0.016,-5.9399 0.0234,-8.7043 0.009,-3.2 0.0166,-6.163 0.0234,-8.7036 0.0142,-5.2558 0.0234,-8.7041 0.0234,-8.7041 0,0 2.30858,2.3673 5.59997,5.7425 1.67127,1.7137 3.59592,3.6874 5.60041,5.7429 1.84433,1.8912 3.75624,3.8518 5.60053,5.743 2.00445,2.0555 1.08189,0.8224 5.60019,5.7427 4.5183,4.9204 7.57967,3.5676 11.5989,-0.8433 4.01923,-4.4109 0.88845,-1.2987 5.99996,-6.5847 5.11152,-5.2861 3.84208,-9.0918 -0.2,-13.7878 -4.04207,-4.696 -3.88188,-4.5099 -6.20043,-7.2036 -1.93205,-2.24464 -4.01704,-4.66694 -6.20027,-7.20334 -1.9983,-2.3216 -4.07891,-4.7388 -6.19989,-7.2029 -2.04167,-2.372 -4.12075,-4.7874 -6.19982,-7.2029 -2.07892,-2.4152 -4.15783,-4.8305 -6.19934,-7.2022 -2.12123,-2.4644 -4.20208,-4.8819 -6.2006,-7.2038 -2.18304,-2.5362 -4.26784,-4.9583 -6.19973,-7.2027 -2.31844,-2.6935 -1.28372,-1.2378 -6.20013,-7.2032 -4.9164,-5.9654 -8.15203,-4.9346 -12.39977,3e-4 z"
|
||||
id="path6832-1-9-1-4-1"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="zccccccczzzzssscssssszzszzssssscssszzccssssssszz"
|
||||
inkscape:export-filename="/home/jrbastien/Ubuntu One/CoverArt/0.8 light/arrow_up_light.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90"
|
||||
transform="matrix(0.91182871,0,0,0.89762895,28.729834,274.61353)" />
|
||||
</g>
|
||||
</svg>
|
||||
|
Depois Largura: | Altura: | Tamanho: 25 KiB |
|
Depois Largura: | Altura: | Tamanho: 110 KiB |
|
Depois Largura: | Altura: | Tamanho: 37 KiB |
|
Depois Largura: | Altura: | Tamanho: 195 KiB |
|
Depois Largura: | Altura: | Tamanho: 34 KiB |
|
Depois Largura: | Altura: | Tamanho: 36 KiB |
|
Depois Largura: | Altura: | Tamanho: 44 KiB |
|
Depois Largura: | Altura: | Tamanho: 46 KiB |
@@ -0,0 +1,897 @@
|
||||
<?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="350"
|
||||
height="200"
|
||||
id="svg6462"
|
||||
version="1.1"
|
||||
inkscape:version="0.48.4 r9939"
|
||||
sodipodi:docname="arrow_up_down_lighter.svg"
|
||||
inkscape:export-filename="/home/jrbastien/Ubuntu One/CoverArt/UpDownArrows.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.6038404"
|
||||
inkscape:cx="255.36076"
|
||||
inkscape:cy="58.144536"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1440"
|
||||
inkscape:window-height="838"
|
||||
inkscape:window-x="1272"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:snap-global="true" />
|
||||
<defs
|
||||
id="defs6464">
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient6364"
|
||||
id="linearGradient6370"
|
||||
x1="101.42937"
|
||||
y1="400.5535"
|
||||
x2="99.124153"
|
||||
y2="244.95164"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.340328,0,0,1.340328,-155.22114,-66.380723)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient6364">
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop6366" />
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop6368" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient6364-8">
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop6366-5" />
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop6368-9" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
y2="244.95164"
|
||||
x2="99.124153"
|
||||
y1="400.5535"
|
||||
x1="101.42937"
|
||||
gradientTransform="matrix(1.340328,0,0,1.340328,-66.590934,-328.62237)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient6531"
|
||||
xlink:href="#linearGradient6364-8"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
y2="244.95164"
|
||||
x2="99.124153"
|
||||
y1="400.5535"
|
||||
x1="101.42937"
|
||||
gradientTransform="matrix(1.340328,0,0,1.340328,-31.467381,555.95415)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient6460"
|
||||
xlink:href="#linearGradient6364-2"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient6364-2">
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop6366-7" />
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop6368-8" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
y2="244.95164"
|
||||
x2="99.124153"
|
||||
y1="400.5535"
|
||||
x1="101.42937"
|
||||
gradientTransform="matrix(1.340328,0,0,-1.340328,133.5722,1341.1989)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient6421-9"
|
||||
xlink:href="#linearGradient6364-5-9"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient6364-5-9">
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop6366-4-1" />
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop6368-6-9" />
|
||||
</linearGradient>
|
||||
<filter
|
||||
id="filter3970"
|
||||
inkscape:label="Inner Shadow"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:menu-tooltip="Adds a colorizable drop shadow inside"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur3972"
|
||||
stdDeviation="4"
|
||||
result="result8" />
|
||||
<feOffset
|
||||
id="feOffset3974"
|
||||
dx="4"
|
||||
dy="4"
|
||||
result="result11" />
|
||||
<feComposite
|
||||
id="feComposite3976"
|
||||
in2="result11"
|
||||
result="result6"
|
||||
in="SourceGraphic"
|
||||
operator="in" />
|
||||
<feFlood
|
||||
id="feFlood3978"
|
||||
result="result10"
|
||||
in="result6"
|
||||
flood-opacity="1"
|
||||
flood-color="rgb(0,0,0)" />
|
||||
<feBlend
|
||||
id="feBlend3980"
|
||||
in2="result10"
|
||||
mode="normal"
|
||||
in="result6"
|
||||
result="result12" />
|
||||
<feComposite
|
||||
id="feComposite3982"
|
||||
in2="SourceGraphic"
|
||||
result="result2"
|
||||
operator="in" />
|
||||
</filter>
|
||||
<filter
|
||||
id="filter3984"
|
||||
inkscape:label="Inner Shadow"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:menu-tooltip="Adds a colorizable drop shadow inside"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur3986"
|
||||
stdDeviation="4"
|
||||
result="result8" />
|
||||
<feOffset
|
||||
id="feOffset3988"
|
||||
dx="4"
|
||||
dy="4"
|
||||
result="result11" />
|
||||
<feComposite
|
||||
id="feComposite3990"
|
||||
in2="result11"
|
||||
result="result6"
|
||||
in="SourceGraphic"
|
||||
operator="in" />
|
||||
<feFlood
|
||||
id="feFlood3992"
|
||||
result="result10"
|
||||
in="result6"
|
||||
flood-opacity="1"
|
||||
flood-color="rgb(0,0,0)" />
|
||||
<feBlend
|
||||
id="feBlend3994"
|
||||
in2="result10"
|
||||
mode="normal"
|
||||
in="result6"
|
||||
result="result12" />
|
||||
<feComposite
|
||||
id="feComposite3996"
|
||||
in2="SourceGraphic"
|
||||
result="result2"
|
||||
operator="in" />
|
||||
</filter>
|
||||
<filter
|
||||
color-interpolation-filters="sRGB"
|
||||
inkscape:menu-tooltip="Adds a colorizable drop shadow inside"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:label="Inner Shadow"
|
||||
id="filter3142">
|
||||
<feGaussianBlur
|
||||
result="result8"
|
||||
stdDeviation="4"
|
||||
id="feGaussianBlur3144" />
|
||||
<feOffset
|
||||
result="result11"
|
||||
dy="4"
|
||||
dx="4"
|
||||
id="feOffset3146" />
|
||||
<feComposite
|
||||
operator="in"
|
||||
in="SourceGraphic"
|
||||
result="result6"
|
||||
in2="result11"
|
||||
id="feComposite3148" />
|
||||
<feFlood
|
||||
flood-color="rgb(0,0,0)"
|
||||
flood-opacity="1"
|
||||
in="result6"
|
||||
result="result10"
|
||||
id="feFlood3150" />
|
||||
<feBlend
|
||||
result="result12"
|
||||
in="result6"
|
||||
mode="normal"
|
||||
in2="result10"
|
||||
id="feBlend3152" />
|
||||
<feComposite
|
||||
operator="in"
|
||||
result="result2"
|
||||
in2="SourceGraphic"
|
||||
id="feComposite3154" />
|
||||
</filter>
|
||||
<filter
|
||||
color-interpolation-filters="sRGB"
|
||||
inkscape:menu-tooltip="Adds a colorizable drop shadow inside"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:label="Inner Shadow"
|
||||
id="filter3938">
|
||||
<feGaussianBlur
|
||||
result="result8"
|
||||
stdDeviation="4"
|
||||
id="feGaussianBlur3940" />
|
||||
<feOffset
|
||||
result="result11"
|
||||
dy="4"
|
||||
dx="4"
|
||||
id="feOffset3942" />
|
||||
<feComposite
|
||||
operator="in"
|
||||
in="SourceGraphic"
|
||||
result="result6"
|
||||
in2="result11"
|
||||
id="feComposite3944" />
|
||||
<feFlood
|
||||
flood-color="rgb(0,0,0)"
|
||||
flood-opacity="1"
|
||||
in="result6"
|
||||
result="result10"
|
||||
id="feFlood3946" />
|
||||
<feBlend
|
||||
result="result12"
|
||||
in="result6"
|
||||
mode="normal"
|
||||
in2="result10"
|
||||
id="feBlend3948" />
|
||||
<feComposite
|
||||
operator="in"
|
||||
result="result2"
|
||||
in2="SourceGraphic"
|
||||
id="feComposite3950" />
|
||||
</filter>
|
||||
<filter
|
||||
color-interpolation-filters="sRGB"
|
||||
inkscape:menu-tooltip="Adds a colorizable drop shadow inside"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:label="Inner Shadow"
|
||||
id="filter3060">
|
||||
<feGaussianBlur
|
||||
result="result8"
|
||||
stdDeviation="4"
|
||||
id="feGaussianBlur3062" />
|
||||
<feOffset
|
||||
result="result11"
|
||||
dy="4"
|
||||
dx="4"
|
||||
id="feOffset3064" />
|
||||
<feComposite
|
||||
operator="in"
|
||||
in="SourceGraphic"
|
||||
result="result6"
|
||||
in2="result11"
|
||||
id="feComposite3066" />
|
||||
<feFlood
|
||||
flood-color="rgb(0,0,0)"
|
||||
flood-opacity="1"
|
||||
in="result6"
|
||||
result="result10"
|
||||
id="feFlood3068" />
|
||||
<feBlend
|
||||
result="result12"
|
||||
in="result6"
|
||||
mode="normal"
|
||||
in2="result10"
|
||||
id="feBlend3070" />
|
||||
<feComposite
|
||||
operator="in"
|
||||
result="result2"
|
||||
in2="SourceGraphic"
|
||||
id="feComposite3072" />
|
||||
</filter>
|
||||
<filter
|
||||
id="filter4056"
|
||||
inkscape:label="Inner Shadow"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:menu-tooltip="Adds a colorizable drop shadow inside"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur4058"
|
||||
stdDeviation="10"
|
||||
result="result8" />
|
||||
<feOffset
|
||||
id="feOffset4060"
|
||||
dx="4"
|
||||
dy="4"
|
||||
result="result11" />
|
||||
<feComposite
|
||||
id="feComposite4062"
|
||||
in2="result11"
|
||||
result="result6"
|
||||
in="SourceGraphic"
|
||||
operator="in" />
|
||||
<feFlood
|
||||
id="feFlood4064"
|
||||
result="result10"
|
||||
in="result6"
|
||||
flood-opacity="1"
|
||||
flood-color="rgb(0,0,0)" />
|
||||
<feBlend
|
||||
id="feBlend4066"
|
||||
in2="result10"
|
||||
mode="normal"
|
||||
in="result6"
|
||||
result="result12" />
|
||||
<feComposite
|
||||
id="feComposite4068"
|
||||
in2="SourceGraphic"
|
||||
result="result2"
|
||||
operator="in" />
|
||||
</filter>
|
||||
<filter
|
||||
id="filter4070"
|
||||
inkscape:label="Darken edges"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:menu-tooltip="Darken the edges with an inner blur"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur4072"
|
||||
stdDeviation="10"
|
||||
result="result8" />
|
||||
<feOffset
|
||||
id="feOffset4074"
|
||||
dx="4"
|
||||
dy="4"
|
||||
result="result11" />
|
||||
<feComposite
|
||||
id="feComposite4076"
|
||||
in2="result11"
|
||||
result="result6"
|
||||
in="SourceGraphic"
|
||||
operator="in" />
|
||||
<feFlood
|
||||
id="feFlood4078"
|
||||
result="result10"
|
||||
in="result6"
|
||||
flood-opacity="1"
|
||||
flood-color="rgb(0,0,0)" />
|
||||
<feBlend
|
||||
id="feBlend4080"
|
||||
in2="result10"
|
||||
mode="normal"
|
||||
in="result6"
|
||||
result="result12" />
|
||||
<feComposite
|
||||
id="feComposite4082"
|
||||
in2="SourceGraphic"
|
||||
result="fbSourceGraphic"
|
||||
operator="in" />
|
||||
<feColorMatrix
|
||||
result="fbSourceGraphicAlpha"
|
||||
in="fbSourceGraphic"
|
||||
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
|
||||
id="feColorMatrix3318" />
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur3320"
|
||||
result="result6"
|
||||
stdDeviation="1.5"
|
||||
in="fbSourceGraphic" />
|
||||
<feComposite
|
||||
in2="result6"
|
||||
id="feComposite3322"
|
||||
operator="atop"
|
||||
in="fbSourceGraphic"
|
||||
result="result8" />
|
||||
<feComposite
|
||||
in2="fbSourceGraphicAlpha"
|
||||
id="feComposite3324"
|
||||
in="result8"
|
||||
operator="atop"
|
||||
result="result9" />
|
||||
</filter>
|
||||
<filter
|
||||
id="filter4092"
|
||||
inkscape:label="Inner Shadow"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:menu-tooltip="Adds a colorizable drop shadow inside"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur4094"
|
||||
result="result6"
|
||||
stdDeviation="1.5" />
|
||||
<feComposite
|
||||
id="feComposite4096"
|
||||
in2="result6"
|
||||
operator="atop"
|
||||
in="SourceGraphic"
|
||||
result="result8" />
|
||||
<feComposite
|
||||
id="feComposite4098"
|
||||
in2="SourceAlpha"
|
||||
in="result8"
|
||||
operator="atop"
|
||||
result="fbSourceGraphic" />
|
||||
<feColorMatrix
|
||||
result="fbSourceGraphicAlpha"
|
||||
in="fbSourceGraphic"
|
||||
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
|
||||
id="feColorMatrix3076" />
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur3078"
|
||||
stdDeviation="4"
|
||||
result="result8"
|
||||
in="fbSourceGraphic" />
|
||||
<feOffset
|
||||
id="feOffset3080"
|
||||
dx="4"
|
||||
dy="4"
|
||||
result="result11" />
|
||||
<feComposite
|
||||
id="feComposite3082"
|
||||
in2="result11"
|
||||
result="result6"
|
||||
in="fbSourceGraphic"
|
||||
operator="in" />
|
||||
<feFlood
|
||||
id="feFlood3084"
|
||||
result="result10"
|
||||
in="result6"
|
||||
flood-opacity="1"
|
||||
flood-color="rgb(0,0,0)" />
|
||||
<feBlend
|
||||
id="feBlend3086"
|
||||
in2="result10"
|
||||
mode="normal"
|
||||
in="result6"
|
||||
result="result12" />
|
||||
<feComposite
|
||||
id="feComposite3088"
|
||||
in2="fbSourceGraphic"
|
||||
result="result2"
|
||||
operator="in" />
|
||||
</filter>
|
||||
<filter
|
||||
id="filter4100"
|
||||
inkscape:label="Darken edges"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:menu-tooltip="Darken the edges with an inner blur"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur4102"
|
||||
result="result6"
|
||||
stdDeviation="1.5" />
|
||||
<feComposite
|
||||
id="feComposite4104"
|
||||
in2="result6"
|
||||
operator="atop"
|
||||
in="SourceGraphic"
|
||||
result="result8" />
|
||||
<feComposite
|
||||
id="feComposite4106"
|
||||
in2="SourceAlpha"
|
||||
in="result8"
|
||||
operator="atop"
|
||||
result="result9" />
|
||||
</filter>
|
||||
<filter
|
||||
id="filter4108"
|
||||
inkscape:label="Inner Shadow"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:menu-tooltip="Adds a colorizable drop shadow inside"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur4110"
|
||||
stdDeviation="4"
|
||||
result="result8" />
|
||||
<feOffset
|
||||
id="feOffset4112"
|
||||
dx="4"
|
||||
dy="4"
|
||||
result="result11" />
|
||||
<feComposite
|
||||
id="feComposite4114"
|
||||
in2="result11"
|
||||
result="result6"
|
||||
in="SourceGraphic"
|
||||
operator="in" />
|
||||
<feFlood
|
||||
id="feFlood4116"
|
||||
result="result10"
|
||||
in="result6"
|
||||
flood-opacity="1"
|
||||
flood-color="rgb(0,0,0)" />
|
||||
<feBlend
|
||||
id="feBlend4118"
|
||||
in2="result10"
|
||||
mode="normal"
|
||||
in="result6"
|
||||
result="result12" />
|
||||
<feComposite
|
||||
id="feComposite4120"
|
||||
in2="SourceGraphic"
|
||||
result="result2"
|
||||
operator="in" />
|
||||
</filter>
|
||||
<filter
|
||||
id="filter4122"
|
||||
inkscape:label="Inner Shadow"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:menu-tooltip="Adds a colorizable drop shadow inside"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur4124"
|
||||
stdDeviation="4"
|
||||
result="result8" />
|
||||
<feOffset
|
||||
id="feOffset4126"
|
||||
dx="4"
|
||||
dy="4"
|
||||
result="result11" />
|
||||
<feComposite
|
||||
id="feComposite4128"
|
||||
in2="result11"
|
||||
result="result6"
|
||||
in="SourceGraphic"
|
||||
operator="in" />
|
||||
<feFlood
|
||||
id="feFlood4130"
|
||||
result="result10"
|
||||
in="result6"
|
||||
flood-opacity="1"
|
||||
flood-color="rgb(0,0,0)" />
|
||||
<feBlend
|
||||
id="feBlend4132"
|
||||
in2="result10"
|
||||
mode="normal"
|
||||
in="result6"
|
||||
result="result12" />
|
||||
<feComposite
|
||||
id="feComposite4134"
|
||||
in2="SourceGraphic"
|
||||
result="result2"
|
||||
operator="in" />
|
||||
</filter>
|
||||
<filter
|
||||
id="filter4056-2"
|
||||
inkscape:label="Inner Shadow"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:menu-tooltip="Adds a colorizable drop shadow inside"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur4058-5"
|
||||
stdDeviation="10"
|
||||
result="result8" />
|
||||
<feOffset
|
||||
id="feOffset4060-5"
|
||||
dx="4"
|
||||
dy="4"
|
||||
result="result11" />
|
||||
<feComposite
|
||||
id="feComposite4062-7"
|
||||
in2="result11"
|
||||
result="result6"
|
||||
in="SourceGraphic"
|
||||
operator="in" />
|
||||
<feFlood
|
||||
id="feFlood4064-4"
|
||||
result="result10"
|
||||
in="result6"
|
||||
flood-opacity="1"
|
||||
flood-color="rgb(0,0,0)" />
|
||||
<feBlend
|
||||
id="feBlend4066-6"
|
||||
in2="result10"
|
||||
mode="normal"
|
||||
in="result6"
|
||||
result="result12" />
|
||||
<feComposite
|
||||
id="feComposite4068-4"
|
||||
in2="SourceGraphic"
|
||||
result="result2"
|
||||
operator="in" />
|
||||
</filter>
|
||||
<filter
|
||||
id="filter4070-0"
|
||||
inkscape:label="Darken edges"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:menu-tooltip="Darken the edges with an inner blur"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur4072-1"
|
||||
stdDeviation="7"
|
||||
result="result8" />
|
||||
<feOffset
|
||||
id="feOffset4074-2"
|
||||
dx="4"
|
||||
dy="4"
|
||||
result="result11" />
|
||||
<feComposite
|
||||
id="feComposite4076-8"
|
||||
in2="result11"
|
||||
result="result6"
|
||||
in="SourceGraphic"
|
||||
operator="in" />
|
||||
<feFlood
|
||||
id="feFlood4078-2"
|
||||
result="result10"
|
||||
in="result6"
|
||||
flood-opacity="1"
|
||||
flood-color="rgb(0,0,0)" />
|
||||
<feBlend
|
||||
id="feBlend4080-9"
|
||||
in2="result10"
|
||||
mode="normal"
|
||||
in="result6"
|
||||
result="result12" />
|
||||
<feComposite
|
||||
id="feComposite4082-1"
|
||||
in2="SourceGraphic"
|
||||
result="fbSourceGraphic"
|
||||
operator="in" />
|
||||
<feColorMatrix
|
||||
result="fbSourceGraphicAlpha"
|
||||
in="fbSourceGraphic"
|
||||
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
|
||||
id="feColorMatrix3318-4" />
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur3320-2"
|
||||
result="result6"
|
||||
stdDeviation="1.5"
|
||||
in="fbSourceGraphic" />
|
||||
<feComposite
|
||||
in2="result6"
|
||||
id="feComposite3322-1"
|
||||
operator="atop"
|
||||
in="fbSourceGraphic"
|
||||
result="result8" />
|
||||
<feComposite
|
||||
in2="fbSourceGraphicAlpha"
|
||||
id="feComposite3324-7"
|
||||
in="result8"
|
||||
operator="atop"
|
||||
result="result9" />
|
||||
</filter>
|
||||
<filter
|
||||
id="filter4056-0"
|
||||
inkscape:label="Inner Shadow"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:menu-tooltip="Adds a colorizable drop shadow inside"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur4058-2"
|
||||
stdDeviation="7"
|
||||
result="result8" />
|
||||
<feOffset
|
||||
id="feOffset4060-8"
|
||||
dx="4"
|
||||
dy="4"
|
||||
result="result11" />
|
||||
<feComposite
|
||||
id="feComposite4062-72"
|
||||
in2="result11"
|
||||
result="result6"
|
||||
in="SourceGraphic"
|
||||
operator="in" />
|
||||
<feFlood
|
||||
id="feFlood4064-7"
|
||||
result="result10"
|
||||
in="result6"
|
||||
flood-opacity="1"
|
||||
flood-color="rgb(0,0,0)" />
|
||||
<feBlend
|
||||
id="feBlend4066-4"
|
||||
in2="result10"
|
||||
mode="normal"
|
||||
in="result6"
|
||||
result="result12" />
|
||||
<feComposite
|
||||
id="feComposite4068-6"
|
||||
in2="SourceGraphic"
|
||||
result="result2"
|
||||
operator="in" />
|
||||
</filter>
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
id="filter3894">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="1.6297979"
|
||||
id="feGaussianBlur3896" />
|
||||
</filter>
|
||||
<filter
|
||||
color-interpolation-filters="sRGB"
|
||||
inkscape:collect="always"
|
||||
id="filter3894-7">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="1.6297979"
|
||||
id="feGaussianBlur3896-1" />
|
||||
</filter>
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
id="filter3954">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="1.6259235"
|
||||
id="feGaussianBlur3956" />
|
||||
</filter>
|
||||
<filter
|
||||
color-interpolation-filters="sRGB"
|
||||
inkscape:collect="always"
|
||||
id="filter3954-0">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="1.6259235"
|
||||
id="feGaussianBlur3956-0" />
|
||||
</filter>
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
id="filter6413">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="0.56993895"
|
||||
id="feGaussianBlur6415" />
|
||||
</filter>
|
||||
<filter
|
||||
color-interpolation-filters="sRGB"
|
||||
inkscape:collect="always"
|
||||
id="filter6413-5">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="0.56993895"
|
||||
id="feGaussianBlur6415-6" />
|
||||
</filter>
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
id="filter6515">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="0.86506226"
|
||||
id="feGaussianBlur6517" />
|
||||
</filter>
|
||||
<filter
|
||||
color-interpolation-filters="sRGB"
|
||||
inkscape:collect="always"
|
||||
id="filter6515-3">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="0.86506226"
|
||||
id="feGaussianBlur6517-3" />
|
||||
</filter>
|
||||
</defs>
|
||||
<metadata
|
||||
id="metadata6467">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Calque 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-852.36218)">
|
||||
<rect
|
||||
style="opacity:0.54878049;color:#000000;fill:none;stroke:none;stroke-width:0.99577111;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
id="rect3927"
|
||||
width="128"
|
||||
height="128"
|
||||
x="14.282172"
|
||||
y="891.19916"
|
||||
inkscape:export-filename="/home/jrbastien/Ubuntu One/CoverArt/1.0 New light/arrow_down.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<path
|
||||
style="color:#000000;fill:#333333;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.51845378;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter6413);enable-background:accumulate"
|
||||
d="m -238.73517,1023.4176 22.91468,22.9146 0.0221,-0.022 0.0221,0.022 22.91468,-22.9146 -7.20365,-7.2037 -15.73313,15.7331 -15.73313,-15.7331 -7.20365,7.2037 z"
|
||||
id="rect5581-7"
|
||||
inkscape:connector-curvature="0"
|
||||
transform="matrix(1.5354701,0,0,1.5354701,409.63415,-631.80069)"
|
||||
inkscape:export-filename="/home/jrbastien/Ubuntu One/CoverArt/1.0 New light/arrow_down.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<path
|
||||
style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.51845378;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter6413-5);enable-background:accumulate"
|
||||
d="m -238.73517,1027.9512 22.91468,22.9146 0.0221,-0.022 0.0221,0.022 22.91468,-22.9146 -7.20365,-7.2037 -15.73313,15.7331 -15.73313,-15.7331 -7.20365,7.2037 z"
|
||||
id="rect5581-7-4"
|
||||
inkscape:connector-curvature="0"
|
||||
transform="matrix(1.5354701,0,0,1.5354701,409.63415,-631.80069)"
|
||||
inkscape:export-filename="/home/jrbastien/Ubuntu One/CoverArt/1.0 New light/arrow_down.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<path
|
||||
style="color:#000000;fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:#333333;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
d="m 43.063433,942.90606 c 0,0 21.264134,21.26406 31.896202,31.89608 2.676746,2.5683 3.929655,2.61211 6.612848,0.0322 10.64281,-10.64277 21.285617,-21.28554 31.928427,-31.92831 l -11.06099,-11.06109 -24.157747,24.1577 -24.157752,-24.1577 z"
|
||||
id="rect5581"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccc"
|
||||
inkscape:export-filename="/home/jrbastien/Ubuntu One/CoverArt/1.0 New light/arrow_down.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<g
|
||||
id="g6548"
|
||||
inkscape:export-filename="/home/jrbastien/Ubuntu One/CoverArt/1.0 New light/arrow_up.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">
|
||||
<rect
|
||||
y="884.42499"
|
||||
x="191.87073"
|
||||
height="128"
|
||||
width="128"
|
||||
id="rect3987"
|
||||
style="opacity:0.54878049;color:#000000;fill:none;stroke:none;stroke-width:1.32088256;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
|
||||
<g
|
||||
transform="translate(229.10691,-171.88173)"
|
||||
id="g6543">
|
||||
<path
|
||||
style="color:#000000;fill:#333333;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter6515);enable-background:accumulate"
|
||||
d="m 61.982558,1127.1891 c 0,0 -21.26414,-21.2641 -31.89621,-31.8961 -2.67674,-2.5683 -3.92965,-2.6121 -6.61284,-0.032 -10.64281,10.6428 -21.2856198,21.2856 -31.9284298,31.9284 l 11.06099,11.061 24.1577498,-24.1577 24.15775,24.1577 z"
|
||||
id="rect5581-78-0"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccc"
|
||||
inkscape:export-filename="/home/jrbastien/Ubuntu One/CoverArt/1.0 New light/arrow_down.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<path
|
||||
style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter6515-3);enable-background:accumulate"
|
||||
d="m 61.982559,1136.2059 c 0,0 -21.26414,-21.2641 -31.89621,-31.8961 -2.67674,-2.5683 -3.929653,-2.6121 -6.612843,-0.032 -10.64281,10.6428 -21.2856203,21.2856 -31.928429,31.9284 l 11.0609887,11.061 24.1577503,-24.1577 24.157753,24.1577 z"
|
||||
id="rect5581-78-0-4"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccc"
|
||||
inkscape:export-filename="/home/jrbastien/Ubuntu One/CoverArt/1.0 New light/arrow_down.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<path
|
||||
style="color:#000000;fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:#333333;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
d="m 61.982558,1131.2376 c 0,0 -21.26414,-21.2641 -31.89621,-31.8961 -2.67674,-2.5683 -3.92965,-2.6121 -6.61284,-0.032 -10.64281,10.6428 -21.2856201,21.2856 -31.9284301,31.9284 l 11.06099,11.061 24.1577501,-24.1577 24.15775,24.1577 z"
|
||||
id="rect5581-78"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccc"
|
||||
inkscape:export-filename="/home/jrbastien/Ubuntu One/CoverArt/1.0 New light/arrow_down.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Depois Largura: | Altura: | Tamanho: 27 KiB |
|
Depois Largura: | Altura: | Tamanho: 132 KiB |
|
Depois Largura: | Altura: | Tamanho: 52 KiB |
|
Depois Largura: | Altura: | Tamanho: 285 KiB |
|
Depois Largura: | Altura: | Tamanho: 156 KiB |
|
Depois Largura: | Altura: | Tamanho: 44 KiB |
|
Depois Largura: | Altura: | Tamanho: 69 KiB |
|
Depois Largura: | Altura: | Tamanho: 79 KiB |
@@ -0,0 +1,205 @@
|
||||
<?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="350"
|
||||
height="200"
|
||||
id="svg6462"
|
||||
version="1.1"
|
||||
inkscape:version="0.48.3.1 r9886"
|
||||
sodipodi:docname="UpDownArrows.svg"
|
||||
inkscape:export-filename="/home/jrbastien/Ubuntu One/CoverArt/UpDownArrows.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">
|
||||
<defs
|
||||
id="defs6464">
|
||||
<linearGradient
|
||||
y2="244.95164"
|
||||
x2="99.124153"
|
||||
y1="400.5535"
|
||||
x1="101.42937"
|
||||
gradientTransform="matrix(1.340328,0,0,-1.340328,133.5722,1341.1989)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient6421"
|
||||
xlink:href="#linearGradient6364-5"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient6364-5">
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop6366-4" />
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop6368-6" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient6364"
|
||||
id="linearGradient6370"
|
||||
x1="101.42937"
|
||||
y1="400.5535"
|
||||
x2="99.124153"
|
||||
y2="244.95164"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.340328,0,0,1.340328,-155.22114,-66.380723)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient6364">
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop6366" />
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop6368" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
y2="244.95164"
|
||||
x2="99.124153"
|
||||
y1="400.5535"
|
||||
x1="101.42937"
|
||||
gradientTransform="matrix(1.340328,0,0,1.340328,-31.467381,555.95415)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient6460-1"
|
||||
xlink:href="#linearGradient6364-8"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient6364-8">
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop6366-5" />
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop6368-9" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
y2="244.95164"
|
||||
x2="99.124153"
|
||||
y1="400.5535"
|
||||
x1="101.42937"
|
||||
gradientTransform="matrix(1.340328,0,0,1.340328,-66.590934,-328.62237)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient6531"
|
||||
xlink:href="#linearGradient6364-8"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
y2="244.95164"
|
||||
x2="99.124153"
|
||||
y1="400.5535"
|
||||
x1="101.42937"
|
||||
gradientTransform="matrix(1.340328,0,0,1.340328,-31.467381,555.95415)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient6460"
|
||||
xlink:href="#linearGradient6364-2"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient6364-2">
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop6366-7" />
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop6368-8" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
y2="244.95164"
|
||||
x2="99.124153"
|
||||
y1="400.5535"
|
||||
x1="101.42937"
|
||||
gradientTransform="matrix(1.340328,0,0,-1.340328,133.5722,1341.1989)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient6421-9"
|
||||
xlink:href="#linearGradient6364-5-9"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient6364-5-9">
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop6366-4-1" />
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop6368-6-9" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="3.1942857"
|
||||
inkscape:cx="175"
|
||||
inkscape:cy="100"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1280"
|
||||
inkscape:window-height="1000"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="24"
|
||||
inkscape:window-maximized="1" />
|
||||
<metadata
|
||||
id="metadata6467">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Calque 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-852.36218)">
|
||||
<path
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#666666;stroke-width:4.02098417000000019;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 72.811389,886.58701 -0.19311,44.41504 -26.06969,-8.30368 c -5.85764,-0.77243 -11.13594,0.77243 -8.88301,10.42787 l 55.61535,73.57446 c 5.34268,5.9864 9.333591,4.2484 12.552081,0 l 54.26357,-72.4158 c 1.54487,-2.76789 3.28285,-11.52217 -8.11057,-11.20031 l -26.64902,7.72435 0,-44.22193 z"
|
||||
id="path6362-7"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccccccc" />
|
||||
<path
|
||||
style="fill:url(#linearGradient6460-1);fill-opacity:1;stroke:#666666;stroke-width:4.02098417000000019;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;color:#000000;fill-rule:nonzero;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
d="m 72.811389,886.58701 -0.19311,44.41504 -26.06969,-8.30368 c -5.85764,-0.77243 -11.13594,0.77243 -8.88301,10.42787 l 55.61535,73.57446 c 5.34268,5.9864 9.333591,4.2484 12.552081,0 l 54.26357,-72.4158 c 1.54487,-2.76789 3.28285,-11.52217 -8.11057,-11.20031 l -26.64902,7.72435 0,-44.22193 z"
|
||||
id="path6362"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccccccc" />
|
||||
<path
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#666666;stroke-width:4.02098417000000019;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 237.85098,1010.566 -0.19311,-44.41501 -26.06969,8.30368 c -5.85763,0.77243 -11.13595,-0.77243 -8.88302,-10.42787 l 55.61535,-73.57447 c 5.34268,-5.98637 9.33359,-4.2484 12.55208,0 l 54.26358,72.41581 c 1.54487,2.76789 3.28285,11.52217 -8.11057,11.20031 l -26.64903,-7.72435 0,44.2219 z"
|
||||
id="path6362-9-8"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccccccc" />
|
||||
<path
|
||||
style="fill:url(#linearGradient6421);fill-opacity:1;stroke:#666666;stroke-width:4.02098417;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 237.85098,1010.566 -0.19311,-44.41501 -26.06969,8.30368 c -5.85763,0.77243 -11.13595,-0.77243 -8.88302,-10.42787 l 55.61535,-73.57447 c 5.34268,-5.98637 9.33359,-4.2484 12.55208,0 l 54.26358,72.41581 c 1.54487,2.76789 3.28285,11.52217 -8.11057,11.20031 l -26.64903,-7.72435 0,44.2219 z"
|
||||
id="path6362-9"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccccccc" />
|
||||
</g>
|
||||
</svg>
|
||||
|
Depois Largura: | Altura: | Tamanho: 7.9 KiB |
|
Depois Largura: | Altura: | Tamanho: 106 KiB |
@@ -0,0 +1,900 @@
|
||||
<?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"
|
||||
height="200"
|
||||
id="svg1"
|
||||
inkscape:version="0.48.3.1 r9886"
|
||||
sodipodi:docname="Default_Genre.svg"
|
||||
sodipodi:version="0.32"
|
||||
version="1.0"
|
||||
width="350"
|
||||
x="0"
|
||||
y="0"
|
||||
inkscape:export-filename="/home/jrbastien/Ubuntu One/CoverArt/Default_Genre.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">
|
||||
<metadata
|
||||
id="metadata3">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:title></dc:title>
|
||||
<dc:description />
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>hash</rdf:li>
|
||||
<rdf:li />
|
||||
<rdf:li>computer</rdf:li>
|
||||
<rdf:li>icons</rdf:li>
|
||||
<rdf:li>device</rdf:li>
|
||||
<rdf:li>theme</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
<dc:publisher>
|
||||
<cc:Agent
|
||||
rdf:about="http://www.openclipart.org">
|
||||
<dc:title>Danny Allen</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:publisher>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Danny Allen</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:rights>
|
||||
<cc:Agent>
|
||||
<dc:title>Danny Allen</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:rights>
|
||||
<dc:date />
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<cc:license
|
||||
rdf:resource="http://web.resource.org/cc/PublicDomain" />
|
||||
<dc:language>en</dc:language>
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://web.resource.org/cc/PublicDomain">
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Distribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<sodipodi:namedview
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
id="base"
|
||||
inkscape:cx="175"
|
||||
inkscape:cy="100"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-height="1000"
|
||||
inkscape:window-width="1280"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="24"
|
||||
inkscape:zoom="3.1942857"
|
||||
pagecolor="#ffffff"
|
||||
showgrid="false"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg1"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true">
|
||||
<sodipodi:guide
|
||||
orientation="0,1"
|
||||
position="168.28054,360.76582"
|
||||
id="guide4134" />
|
||||
</sodipodi:namedview>
|
||||
<defs
|
||||
id="defs3">
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient5877">
|
||||
<stop
|
||||
style="stop-color:#d1d1d1;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop5879" />
|
||||
<stop
|
||||
style="stop-color:#d1d1d1;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop5881" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5877"
|
||||
id="linearGradient5883"
|
||||
x1="5.4754806"
|
||||
y1="31.816132"
|
||||
x2="57.763268"
|
||||
y2="31.816132"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient5877-8">
|
||||
<stop
|
||||
style="stop-color:#d1d1d1;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop5879-3" />
|
||||
<stop
|
||||
style="stop-color:#d1d1d1;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop5881-0" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient5877-8-1">
|
||||
<stop
|
||||
style="stop-color:#d1d1d1;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop5879-3-0" />
|
||||
<stop
|
||||
style="stop-color:#d1d1d1;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop5881-0-8" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient5877-8-1-7">
|
||||
<stop
|
||||
style="stop-color:#d1d1d1;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop5879-3-0-4" />
|
||||
<stop
|
||||
style="stop-color:#d1d1d1;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop5881-0-8-1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5877-8-1-7"
|
||||
id="linearGradient6132"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="5.4754806"
|
||||
y1="31.816132"
|
||||
x2="57.763268"
|
||||
y2="31.816132" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5877-8"
|
||||
id="linearGradient6246"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="5.4754806"
|
||||
y1="31.816132"
|
||||
x2="57.763268"
|
||||
y2="31.816132" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5877-8-1"
|
||||
id="linearGradient6253"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="5.4754806"
|
||||
y1="31.816132"
|
||||
x2="57.763268"
|
||||
y2="31.816132" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient6364-7"
|
||||
id="linearGradient6370-2"
|
||||
x1="101.42937"
|
||||
y1="400.5535"
|
||||
x2="99.124153"
|
||||
y2="244.95164"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient6364-7">
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop6366-8" />
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop6368-9" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient6364-5"
|
||||
id="linearGradient6370-0"
|
||||
x1="101.42937"
|
||||
y1="400.5535"
|
||||
x2="99.124153"
|
||||
y2="244.95164"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.340328,0,0,1.340328,-155.22114,-66.380723)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient6364-5">
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop6366-4" />
|
||||
<stop
|
||||
style="stop-color:#4d4d4d;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop6368-6" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5877-7"
|
||||
id="linearGradient6630-8"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="5.4754806"
|
||||
y1="31.816132"
|
||||
x2="57.763268"
|
||||
y2="31.816132" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient5877-7">
|
||||
<stop
|
||||
style="stop-color:#d1d1d1;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop5879-4" />
|
||||
<stop
|
||||
style="stop-color:#d1d1d1;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop5881-8" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5877-8-6"
|
||||
id="linearGradient6669-2"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="5.4754806"
|
||||
y1="31.816132"
|
||||
x2="57.763268"
|
||||
y2="31.816132" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient5877-8-6">
|
||||
<stop
|
||||
style="stop-color:#d1d1d1;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop5879-3-4" />
|
||||
<stop
|
||||
style="stop-color:#d1d1d1;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop5881-0-7" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5877-8-1-3"
|
||||
id="linearGradient6708-4"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="5.4754806"
|
||||
y1="31.816132"
|
||||
x2="57.763268"
|
||||
y2="31.816132" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient5877-8-1-3">
|
||||
<stop
|
||||
style="stop-color:#d1d1d1;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop5879-3-0-0" />
|
||||
<stop
|
||||
style="stop-color:#d1d1d1;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop5881-0-8-5" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5877-8-1-7-1"
|
||||
id="linearGradient6747-1"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="5.4754806"
|
||||
y1="31.816132"
|
||||
x2="57.763268"
|
||||
y2="31.816132" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient5877-8-1-7-1">
|
||||
<stop
|
||||
style="stop-color:#d1d1d1;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop5879-3-0-4-7" />
|
||||
<stop
|
||||
style="stop-color:#d1d1d1;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop5881-0-8-1-5" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
y2="31.816132"
|
||||
x2="57.763268"
|
||||
y1="31.816132"
|
||||
x1="5.4754806"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient6767"
|
||||
xlink:href="#linearGradient5877-8-1-7-1"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
id="linearGradient2786-306"
|
||||
y2="16.190001"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x2="62.988998"
|
||||
gradientTransform="translate(-50.941,0)"
|
||||
y1="13.183"
|
||||
x1="62.988998">
|
||||
<stop
|
||||
id="stop2483"
|
||||
style="stop-color:#f9f9f9"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop2485"
|
||||
style="stop-color:#c9c9c9"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
id="radialGradient2788-375"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
cy="5.0172"
|
||||
cx="3"
|
||||
gradientTransform="matrix(-1.2749e-8,1.7143,-2.1593,-1.46e-8,12.809,2.857)"
|
||||
r="21">
|
||||
<stop
|
||||
id="stop2489"
|
||||
style="stop-color:#bdbdbd"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop2491"
|
||||
style="stop-color:#d0d0d0"
|
||||
offset="1" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
id="linearGradient7596-975-255"
|
||||
y2="609.51001"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x2="302.85999"
|
||||
gradientTransform="matrix(0.08284,0,0,0.037059,-5.9408,25.412)"
|
||||
y1="366.64999"
|
||||
x1="302.85999">
|
||||
<stop
|
||||
id="stop2495"
|
||||
style="stop-opacity:0"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop2497"
|
||||
offset=".5" />
|
||||
<stop
|
||||
id="stop2499"
|
||||
style="stop-opacity:0"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
id="radialGradient7598-526-522"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
cy="486.64999"
|
||||
cx="605.71002"
|
||||
gradientTransform="matrix(0.03213,0,0,0.037059,24.637,25.412)"
|
||||
r="117.14">
|
||||
<stop
|
||||
id="stop2503"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop2505"
|
||||
style="stop-opacity:0"
|
||||
offset="1" />
|
||||
</radialGradient>
|
||||
<radialGradient
|
||||
id="radialGradient7600-312-677"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
cy="486.64999"
|
||||
cx="605.71002"
|
||||
gradientTransform="matrix(-0.03213,0,0,0.037059,23.363,25.412)"
|
||||
r="117.14">
|
||||
<stop
|
||||
id="stop2509"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop2511"
|
||||
style="stop-opacity:0"
|
||||
offset="1" />
|
||||
</radialGradient>
|
||||
<radialGradient
|
||||
id="radialGradient2777-429"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
cy="14.113"
|
||||
cx="63.969002"
|
||||
gradientTransform="matrix(1.5647,-9.5143e-8,6.1772e-8,1.0159,-86.213,8.1461)"
|
||||
r="23.097">
|
||||
<stop
|
||||
id="stop2515"
|
||||
style="stop-color:#a8a8a8"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop2517"
|
||||
style="stop-color:#818181"
|
||||
offset="1" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2779-731"
|
||||
y2="15.944"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x2="65.339996"
|
||||
gradientTransform="translate(-53.765,-0.11419)"
|
||||
y1="45.113998"
|
||||
x1="82.453003">
|
||||
<stop
|
||||
id="stop2521"
|
||||
style="stop-color:#666"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop2523"
|
||||
style="stop-color:gray"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2774-916"
|
||||
y2="36.658001"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x2="22.809"
|
||||
gradientTransform="matrix(1.1447,0,0,0.99775,-3.4661,1.0988)"
|
||||
y1="49.629002"
|
||||
x1="22.934999">
|
||||
<stop
|
||||
id="stop2527"
|
||||
style="stop-color:#0a0a0a;stop-opacity:.498"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop2529"
|
||||
style="stop-color:#0a0a0a;stop-opacity:0"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
id="radialGradient2771-545"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
cy="8.3021002"
|
||||
cx="7.2646999"
|
||||
gradientTransform="matrix(0,1.208,-1.6272,0,26.372,8.2665)"
|
||||
r="20.98">
|
||||
<stop
|
||||
id="stop2533"
|
||||
style="stop-color:#fff;stop-opacity:0.4"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop2535"
|
||||
style="stop-color:#fff;stop-opacity:0"
|
||||
offset="1" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2768-174"
|
||||
y2="33.955002"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x2="15.215"
|
||||
y1="22.292"
|
||||
x1="11.566">
|
||||
<stop
|
||||
id="stop2539"
|
||||
style="stop-color:#fff;stop-opacity:.27451"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop2541"
|
||||
style="stop-color:#fff;stop-opacity:.078431"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2515"
|
||||
y2="45.016998"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x2="20.759001"
|
||||
y1="1"
|
||||
x1="20.759001">
|
||||
<stop
|
||||
id="stop3311"
|
||||
style="stop-color:#f6f6f6"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop3313"
|
||||
style="stop-color:#d2d2d2"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2372-7-0">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop2374-9-9" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:.34483"
|
||||
id="stop2376-4-7" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
r="5.7385001"
|
||||
gradientTransform="matrix(1.0711,-0.17393,0.023379,1.0027,12.439,-4.4377)"
|
||||
cx="17.059"
|
||||
cy="41.058998"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
fy="37.841"
|
||||
fx="14.758"
|
||||
id="radialGradient2907-7-1">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop3670-0-1" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:0"
|
||||
id="stop3672-8-8" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3941">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop3943" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:.34483"
|
||||
id="stop3945" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
r="5.7385001"
|
||||
gradientTransform="matrix(1.0173,-0.18234,0.035717,0.96941,-5.8008,1.5991)"
|
||||
cx="17.059"
|
||||
cy="41.058998"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
fy="37.456001"
|
||||
fx="14.688"
|
||||
id="radialGradient2901-6-3">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop7069-7-0" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:0"
|
||||
id="stop7071-2-2" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2372-7-0-9">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop2374-9-9-3" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:.34483"
|
||||
id="stop2376-4-7-2" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
r="5.7385001"
|
||||
gradientTransform="matrix(1.0711,-0.17393,0.023379,1.0027,12.439,-4.4377)"
|
||||
cx="17.059"
|
||||
cy="41.058998"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
fy="37.841"
|
||||
fx="14.758"
|
||||
id="radialGradient2907-7-1-0">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop3670-0-1-1" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:0"
|
||||
id="stop3672-8-8-8" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4852">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop4854" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:.34483"
|
||||
id="stop4856" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#radialGradient2901-6-3-8"
|
||||
id="radialGradient5190-7"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.65701931,-0.11776359,0.02306769,0.62608974,-32.804054,1.418643)"
|
||||
cx="17.059"
|
||||
cy="41.058998"
|
||||
fx="14.688"
|
||||
fy="37.456001"
|
||||
r="5.7385001" />
|
||||
<radialGradient
|
||||
r="5.7385001"
|
||||
gradientTransform="matrix(1.0173,-0.18234,0.035717,0.96941,-5.8008,1.5991)"
|
||||
cx="17.059"
|
||||
cy="41.058998"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
fy="37.456001"
|
||||
fx="14.688"
|
||||
id="radialGradient2901-6-3-8">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop7069-7-0-9" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:0"
|
||||
id="stop7071-2-2-5" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2372-7-0-9-3">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop2374-9-9-3-3" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:.34483"
|
||||
id="stop2376-4-7-2-9" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
r="5.7385001"
|
||||
gradientTransform="matrix(1.0711,-0.17393,0.023379,1.0027,12.439,-4.4377)"
|
||||
cx="17.059"
|
||||
cy="41.058998"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
fy="37.841"
|
||||
fx="14.758"
|
||||
id="radialGradient2907-7-1-0-5">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop3670-0-1-1-4" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:0"
|
||||
id="stop3672-8-8-8-9" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5007">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop5009" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:.34483"
|
||||
id="stop5011" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
r="5.7385001"
|
||||
gradientTransform="matrix(1.0173,-0.18234,0.035717,0.96941,-5.8008,1.5991)"
|
||||
cx="17.059"
|
||||
cy="41.058998"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
fy="37.456001"
|
||||
fx="14.688"
|
||||
id="radialGradient2901-6-3-8-0">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop7069-7-0-9-3" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:0"
|
||||
id="stop7071-2-2-5-6" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2515-8"
|
||||
y2="45.016998"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x2="20.759001"
|
||||
y1="1"
|
||||
x1="20.759001">
|
||||
<stop
|
||||
id="stop3311-8"
|
||||
style="stop-color:#f6f6f6"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop3313-2"
|
||||
style="stop-color:#d2d2d2"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2786-306-2"
|
||||
id="linearGradient4046-6"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.7698059,0,0,2.7698059,-117.72599,203.29046)"
|
||||
x1="62.988998"
|
||||
y1="13.183"
|
||||
x2="62.988998"
|
||||
y2="16.190001" />
|
||||
<linearGradient
|
||||
id="linearGradient2786-306-2"
|
||||
y2="16.190001"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x2="62.988998"
|
||||
gradientTransform="translate(-50.941,0)"
|
||||
y1="13.183"
|
||||
x1="62.988998">
|
||||
<stop
|
||||
id="stop2483-1"
|
||||
style="stop-color:#f9f9f9"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop2485-5"
|
||||
style="stop-color:#c9c9c9"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2786-306"
|
||||
id="linearGradient5120"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.7698059,0,0,2.7698059,-117.72599,203.29046)"
|
||||
x1="62.988998"
|
||||
y1="13.183"
|
||||
x2="62.988998"
|
||||
y2="16.190001" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2515"
|
||||
id="linearGradient5122"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="26.140627"
|
||||
y1="287.77002"
|
||||
x2="154.09003"
|
||||
y2="287.77002" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2372-7-0-9"
|
||||
id="linearGradient5124"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.36554893,0,0,0.22265547,-14.302628,-25.663689)"
|
||||
x1="28.739"
|
||||
y1="144.12"
|
||||
x2="26.257"
|
||||
y2="125.39" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#radialGradient2907-7-1-0"
|
||||
id="radialGradient5126"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.69176583,-0.11233202,0.01509924,0.64758995,-21.023949,-2.4802012)"
|
||||
cx="17.059"
|
||||
cy="41.058998"
|
||||
fx="14.758"
|
||||
fy="37.841"
|
||||
r="5.7385001" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2372-7-0-9"
|
||||
id="linearGradient5128"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.21909685,0,0,0.21943915,-23.076965,-22.125744)"
|
||||
x1="28.503"
|
||||
y1="137.53999"
|
||||
x2="26.257"
|
||||
y2="125.39" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#radialGradient2901-6-3-8"
|
||||
id="radialGradient5130"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.65701931,-0.11776359,0.02306769,0.62608974,-32.804054,1.418643)"
|
||||
cx="17.059"
|
||||
cy="41.058998"
|
||||
fx="14.688"
|
||||
fy="37.456001"
|
||||
r="5.7385001" />
|
||||
</defs>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
|
||||
x="57.987976"
|
||||
y="181.1022"
|
||||
id="text6872"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
x="57.987976"
|
||||
y="181.1022"
|
||||
style="font-size:16px"
|
||||
id="tspan4976">All Genre </tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
|
||||
x="213.49313"
|
||||
y="181.1022"
|
||||
id="text6872-3"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
x="213.49313"
|
||||
y="181.1022"
|
||||
style="font-size:16px"
|
||||
id="tspan6203">Unrecognized</tspan></text>
|
||||
<g
|
||||
id="g5109"
|
||||
transform="translate(4.6382744,-181.7013)">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3468"
|
||||
style="fill:url(#linearGradient5120);stroke:#666666;stroke-width:2.76980591;stroke-linecap:round;stroke-linejoin:round"
|
||||
d="m 33.082185,226.83381 c -1.911913,0.0212 -2.770913,0.94769 -2.770913,2.76981 0,15.27409 0.07278,26.9768 -0.01609,40.85463 3.976056,0 119.101648,-10.24745 119.101648,-14.65864 v -17.8694 c 0,-1.82212 -1.53502,-2.79114 -3.44702,-2.76981 H 89.844621 c -5.671178,0 -9.691274,-8.3277 -13.84903,-8.3277 H 33.080219 z" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3388"
|
||||
style="fill:url(#linearGradient5122);fill-opacity:1;stroke:#666666;stroke-width:2.76980591;stroke-linecap:round;stroke-linejoin:round"
|
||||
d="m 29.361505,249.0615 c -2.971171,0.3426 -1.384266,3.88355 -1.621167,5.87476 1.087232,23.46053 2.185183,46.44688 3.265601,69.9099 0.94683,2.67478 4.416178,1.30502 6.614573,1.64457 H 147.2522 c 3.01743,-0.2954 1.76287,-3.89905 2.18732,-5.96145 1.08726,-23.46053 2.18521,-46.44687 3.2656,-69.9099 -0.6957,-2.6432 -4.20872,-1.17443 -6.26835,-1.55802 H 29.362613 z" />
|
||||
<rect
|
||||
id="rect3562"
|
||||
style="fill:#b0b0b0;stroke:none;display:block"
|
||||
rx="2.7698059"
|
||||
ry="2.7698059"
|
||||
height="5.5396118"
|
||||
width="36.007477"
|
||||
y="230.98853"
|
||||
x="37.219723" />
|
||||
<g
|
||||
transform="matrix(2.4335812,0,0,2.4336321,121.00832,249.85839)"
|
||||
id="g4272-2-7-5">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3406-7-3-9"
|
||||
style="fill:#4d4d4d;stroke:#333333;stroke-width:0.64584619;stroke-linecap:round;stroke-linejoin:round"
|
||||
d="m -5.2872617,2.0004858 c -4.118561,0.6595381 -8.2474553,2.0265361 -12.3621413,2.7028662 -1.119898,0.5628549 -0.67943,2.2507739 -0.751765,3.2595856 -1e-6,4.3628204 0,8.7253814 0,13.0887184 -2.875437,-0.641816 -6.433855,1.604928 -6.458462,4.656874 -0.129466,1.959949 1.958787,3.583929 3.85835,3.404384 2.574924,-0.13225 4.813362,-2.630273 4.53765,-5.297618 V 9.8521022 c 3.395989,-0.4903974 6.9376799,-1.8686267 10.333539,-2.3599219 -1.3e-6,3.3635667 0,7.4072097 0,10.7707767 -2.7553735,-0.794972 -6.001848,1.027412 -6.458462,3.940695 -0.322923,2.078979 0.713015,3.654843 2.349589,4.145686 3.0626022,1.005583 6.4074396,-2.173272 6.0464115,-5.344377 -0.0084,-5.948889 0.025834,-11.8977777 0,-17.8460209 -0.071689,-0.5915306 -0.4520923,-1.1879049 -1.0947092,-1.1580022 z" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3996-5-7-8"
|
||||
style="opacity:0.4;fill:url(#linearGradient5124);fill-rule:evenodd"
|
||||
d="m -5.8071679,18.33781 0.048723,-11.3423499 c 0.5134347,-0.055853 -0.099441,-0.00901 0.5929061,-0.092653 0.00949,2.1186337 0,3.5456309 0,11.5470839 0,0.05954 -0.107753,-0.02988 -0.6416288,-0.112139 h 2.6e-6 z" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path2716-9-3-4"
|
||||
style="opacity:0.6;fill:url(#radialGradient5126)"
|
||||
d="m -4.6336654,21.515374 c 0,2.021627 -1.7773041,3.963493 -3.9697581,4.337244 -2.1924535,0.373745 -3.9697585,-0.962117 -3.9697585,-2.983745 0,-2.021627 1.777305,-3.963493 3.9697585,-4.337244 2.192454,-0.373745 3.9697581,0.962117 3.9697581,2.983745 z" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path2720-4-3-0"
|
||||
style="opacity:0.4;fill:url(#linearGradient5128);fill-rule:evenodd"
|
||||
d="m -18.078245,21.238951 6e-6,-15.1018205 c 0,0 0.07938,-1.1016844 0.79762,-1.1045907 0.06265,0.1079209 12.1173662,-2.7091309 12.1173662,-2.7091309 0,0 0.254444,0.507719 -4.7935348,1.7659371 -6.1232674,1.5261345 -7.5957964,1.8495097 -7.5957964,2.6131582 V 21.699052 c -0.159537,-0.135737 -0.205541,-0.276887 -0.525525,-0.357953 v -0.102044 z" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path2712-4-0-8"
|
||||
style="opacity:0.6;fill:url(#radialGradient5130)"
|
||||
d="m -16.878909,24.461724 c 0,1.955364 -1.687983,3.833549 -3.770191,4.195029 -2.082208,0.361493 -3.770192,-0.9306 -3.770192,-2.885964 0,-1.955363 1.687984,-3.833549 3.770192,-4.195029 2.082208,-0.361493 3.770191,0.9306 3.770191,2.885964 z" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="g5216"
|
||||
transform="matrix(2.0522261,0,0,2.0522261,-462.79153,-268.63317)">
|
||||
<path
|
||||
sodipodi:nodetypes="ccccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path5194"
|
||||
d="m 339.89854,200.72473 -7.97203,-18.2632 c -6.81247,-48.84683 58.99305,-45.65801 48.70188,0 l -8.55182,18.2632 c 13.40751,0.36237 15.0744,-5.65289 14.42214,-15.43675 10.51886,-57.09482 -70.88947,-55.85605 -60.51499,-2.24667 -2.41577,17.49016 6.6192,17.2969 13.91482,17.68342 z"
|
||||
style="fill:#333333;stroke:none" />
|
||||
<rect
|
||||
transform="matrix(0.91656658,-0.39988211,0.39988211,0.91656658,0,0)"
|
||||
ry="3.9562924"
|
||||
rx="3.2714932"
|
||||
y="294.7569"
|
||||
x="234.57674"
|
||||
height="29.10396"
|
||||
width="10.100785"
|
||||
id="rect5196"
|
||||
style="color:#000000;fill:#333333;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.02098417;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
|
||||
<rect
|
||||
transform="matrix(-0.93188236,-0.36276063,-0.41582136,0.90944631,0,0)"
|
||||
ry="4.014185"
|
||||
rx="3.4791322"
|
||||
y="26.410641"
|
||||
x="-419.9075"
|
||||
height="29.529839"
|
||||
width="10.741874"
|
||||
id="rect5196-8"
|
||||
style="color:#000000;fill:#333333;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.02098417;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
|
||||
</g>
|
||||
</svg>
|
||||
|
Depois Largura: | Altura: | Tamanho: 28 KiB |
|
Depois Largura: | Altura: | Tamanho: 48 KiB |
@@ -0,0 +1,932 @@
|
||||
<?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"
|
||||
id="svg2527"
|
||||
height="200"
|
||||
width="200"
|
||||
version="1.0"
|
||||
inkscape:version="0.48.4 r9939"
|
||||
sodipodi:docname="properties.svg"
|
||||
inkscape:export-filename="/home/jrbastien/Ubuntu One/CoverArt/SmartPlaylistIcon.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">
|
||||
<metadata
|
||||
id="metadata3118">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1440"
|
||||
inkscape:window-height="838"
|
||||
id="namedview3116"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.58971854"
|
||||
inkscape:cx="110.50757"
|
||||
inkscape:cy="64.192342"
|
||||
inkscape:window-x="1272"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg2527" />
|
||||
<defs
|
||||
id="defs2529">
|
||||
<radialGradient
|
||||
id="radialGradient2436"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
cy="4.625"
|
||||
cx="62.625"
|
||||
gradientTransform="matrix(2.1647,0,0,0.75294,-111.56,36.518)"
|
||||
r="10.625">
|
||||
<stop
|
||||
id="stop8840"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop8842"
|
||||
style="stop-opacity:0"
|
||||
offset="1" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2517"
|
||||
y2="45"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x2="37.201"
|
||||
y1="1"
|
||||
x1="37.201">
|
||||
<stop
|
||||
id="stop3399"
|
||||
style="stop-color:#aaa"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop3401"
|
||||
style="stop-color:#8c8c8c"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2515"
|
||||
y2="45.016998"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x2="20.759001"
|
||||
y1="1"
|
||||
x1="20.759001">
|
||||
<stop
|
||||
id="stop3311"
|
||||
style="stop-color:#f6f6f6"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop3313"
|
||||
style="stop-color:#d2d2d2"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2512"
|
||||
y2="20.895"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x2="84.639"
|
||||
gradientTransform="matrix(0.32448,0,0,0.32448,3.2333,2.5577)"
|
||||
y1="105.1"
|
||||
x1="86.133003">
|
||||
<stop
|
||||
id="stop5130"
|
||||
style="stop-color:#e5e5e5"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop5132"
|
||||
style="stop-color:#ababab"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
r="10.625"
|
||||
gradientTransform="matrix(1.8824,0,0,0.47059,-95.882,39.824)"
|
||||
cx="62.625"
|
||||
cy="4.625"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient3094">
|
||||
<stop
|
||||
offset="0"
|
||||
id="stop8840-3" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-opacity:0"
|
||||
id="stop8842-6" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
x1="28.739"
|
||||
y1="144.12"
|
||||
gradientTransform="matrix(0.566,0,0,0.34475,22.846,-40.334)"
|
||||
x2="26.257"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
xlink:href="#linearGradient2372"
|
||||
y2="125.39"
|
||||
id="linearGradient2910" />
|
||||
<radialGradient
|
||||
r="5.7385001"
|
||||
gradientTransform="matrix(1.0711,-0.17393,0.023379,1.0027,12.439,-4.4377)"
|
||||
cx="17.059"
|
||||
cy="41.058998"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
fy="37.841"
|
||||
fx="14.758"
|
||||
id="radialGradient2907">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop3670" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:0"
|
||||
id="stop3672" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
x1="28.503"
|
||||
y1="137.53999"
|
||||
gradientTransform="matrix(0.33924,0,0,0.33977,9.2602,-34.856)"
|
||||
x2="26.257"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
xlink:href="#linearGradient2372"
|
||||
y2="125.39"
|
||||
id="linearGradient2904" />
|
||||
<radialGradient
|
||||
r="5.7385001"
|
||||
gradientTransform="matrix(1.0173,-0.18234,0.035717,0.96941,-5.8008,1.5991)"
|
||||
cx="17.059"
|
||||
cy="41.058998"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
fy="37.456001"
|
||||
fx="14.688"
|
||||
id="radialGradient2901">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop7069" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:0"
|
||||
id="stop7071" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2372">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop2374" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:.34483"
|
||||
id="stop2376" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2372-7">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop2374-9" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:.34483"
|
||||
id="stop2376-4" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
r="5.7385001"
|
||||
gradientTransform="matrix(1.0711,-0.17393,0.023379,1.0027,12.439,-4.4377)"
|
||||
cx="17.059"
|
||||
cy="41.058998"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
fy="37.841"
|
||||
fx="14.758"
|
||||
id="radialGradient2907-7">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop3670-0" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:0"
|
||||
id="stop3672-8" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4366">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop4368" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:.34483"
|
||||
id="stop4370" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#radialGradient2901-6"
|
||||
id="radialGradient4313-7"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.65701931,-0.11776359,0.02306769,0.62608974,-32.804054,1.418643)"
|
||||
cx="17.059"
|
||||
cy="41.058998"
|
||||
fx="14.688"
|
||||
fy="37.456001"
|
||||
r="5.7385001" />
|
||||
<radialGradient
|
||||
r="5.7385001"
|
||||
gradientTransform="matrix(1.0173,-0.18234,0.035717,0.96941,-5.8008,1.5991)"
|
||||
cx="17.059"
|
||||
cy="41.058998"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
fy="37.456001"
|
||||
fx="14.688"
|
||||
id="radialGradient2901-6">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop7069-7" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:0"
|
||||
id="stop7071-2" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2372-7-0">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop2374-9-9" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:.34483"
|
||||
id="stop2376-4-7" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
r="5.7385001"
|
||||
gradientTransform="matrix(1.0711,-0.17393,0.023379,1.0027,12.439,-4.4377)"
|
||||
cx="17.059"
|
||||
cy="41.058998"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
fy="37.841"
|
||||
fx="14.758"
|
||||
id="radialGradient2907-7-1">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop3670-0-1" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:0"
|
||||
id="stop3672-8-8" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4534">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop4536" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:.34483"
|
||||
id="stop4538" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#radialGradient2901-6-3"
|
||||
id="radialGradient4477-5"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.65701931,-0.11776359,0.02306769,0.62608974,-32.804054,1.418643)"
|
||||
cx="17.059"
|
||||
cy="41.058998"
|
||||
fx="14.688"
|
||||
fy="37.456001"
|
||||
r="5.7385001" />
|
||||
<radialGradient
|
||||
r="5.7385001"
|
||||
gradientTransform="matrix(1.0173,-0.18234,0.035717,0.96941,-5.8008,1.5991)"
|
||||
cx="17.059"
|
||||
cy="41.058998"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
fy="37.456001"
|
||||
fx="14.688"
|
||||
id="radialGradient2901-6-3">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop7069-7-0" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:0"
|
||||
id="stop7071-2-2" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2372-7-0-0">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop2374-9-9-6" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:.34483"
|
||||
id="stop2376-4-7-1" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
r="5.7385001"
|
||||
gradientTransform="matrix(1.0711,-0.17393,0.023379,1.0027,12.439,-4.4377)"
|
||||
cx="17.059"
|
||||
cy="41.058998"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
fy="37.841"
|
||||
fx="14.758"
|
||||
id="radialGradient2907-7-1-7">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop3670-0-1-0" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:0"
|
||||
id="stop3672-8-8-4" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4622">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop4624" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:.34483"
|
||||
id="stop4626" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
r="5.7385001"
|
||||
fy="37.456001"
|
||||
fx="14.688"
|
||||
cy="41.058998"
|
||||
cx="17.059"
|
||||
gradientTransform="matrix(0.65701931,-0.11776359,0.02306769,0.62608974,-32.804054,1.418643)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient4550-1"
|
||||
xlink:href="#radialGradient2901-6-3-8"
|
||||
inkscape:collect="always" />
|
||||
<radialGradient
|
||||
r="5.7385001"
|
||||
gradientTransform="matrix(1.0173,-0.18234,0.035717,0.96941,-5.8008,1.5991)"
|
||||
cx="17.059"
|
||||
cy="41.058998"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
fy="37.456001"
|
||||
fx="14.688"
|
||||
id="radialGradient2901-6-3-8">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop7069-7-0-9" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:0"
|
||||
id="stop7071-2-2-1" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2372-7-0-2">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop2374-9-9-1" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:.34483"
|
||||
id="stop2376-4-7-15" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
r="5.7385001"
|
||||
gradientTransform="matrix(1.0711,-0.17393,0.023379,1.0027,12.439,-4.4377)"
|
||||
cx="17.059"
|
||||
cy="41.058998"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
fy="37.841"
|
||||
fx="14.758"
|
||||
id="radialGradient2907-7-1-9">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop3670-0-1-9" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:0"
|
||||
id="stop3672-8-8-6" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4622-0">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop4624-5" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:.34483"
|
||||
id="stop4626-1" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
r="5.7385001"
|
||||
fy="37.456001"
|
||||
fx="14.688"
|
||||
cy="41.058998"
|
||||
cx="17.059"
|
||||
gradientTransform="matrix(0.65701931,-0.11776359,0.02306769,0.62608974,-32.804054,1.418643)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient4550-7"
|
||||
xlink:href="#radialGradient2901-6-3-1"
|
||||
inkscape:collect="always" />
|
||||
<radialGradient
|
||||
r="5.7385001"
|
||||
gradientTransform="matrix(1.0173,-0.18234,0.035717,0.96941,-5.8008,1.5991)"
|
||||
cx="17.059"
|
||||
cy="41.058998"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
fy="37.456001"
|
||||
fx="14.688"
|
||||
id="radialGradient2901-6-3-1">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop7069-7-0-3" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:0"
|
||||
id="stop7071-2-2-16" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2515"
|
||||
id="linearGradient4895"
|
||||
x1="199.89294"
|
||||
y1="100.19387"
|
||||
x2="322.9762"
|
||||
y2="100.19387"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2515"
|
||||
id="linearGradient4897"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="199.89294"
|
||||
y1="100.19387"
|
||||
x2="322.9762"
|
||||
y2="100.19387" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2515"
|
||||
id="linearGradient4899"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="199.89294"
|
||||
y1="100.19387"
|
||||
x2="322.9762"
|
||||
y2="100.19387" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2515"
|
||||
id="linearGradient4901"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="199.89294"
|
||||
y1="100.19387"
|
||||
x2="322.9762"
|
||||
y2="100.19387" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2515"
|
||||
id="linearGradient4903"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="199.89294"
|
||||
y1="100.19387"
|
||||
x2="322.9762"
|
||||
y2="100.19387" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2515"
|
||||
id="linearGradient4907"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="199.89294"
|
||||
y1="100.19387"
|
||||
x2="322.9762"
|
||||
y2="100.19387" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2515"
|
||||
id="linearGradient4909"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="199.89294"
|
||||
y1="100.19387"
|
||||
x2="322.9762"
|
||||
y2="100.19387" />
|
||||
<linearGradient
|
||||
id="linearGradient2372-7-0-5">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop2374-9-9-5" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:.34483"
|
||||
id="stop2376-4-7-4" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
r="5.7385001"
|
||||
gradientTransform="matrix(1.0711,-0.17393,0.023379,1.0027,12.439,-4.4377)"
|
||||
cx="17.059"
|
||||
cy="41.058998"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
fy="37.841"
|
||||
fx="14.758"
|
||||
id="radialGradient2907-7-1-1">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop3670-0-1-90" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:0"
|
||||
id="stop3672-8-8-3" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4930">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop4932" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:.34483"
|
||||
id="stop4934" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#radialGradient2901-6-3-4"
|
||||
id="radialGradient4857-5"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.65701931,-0.11776359,0.02306769,0.62608974,-32.804054,1.418643)"
|
||||
cx="17.059"
|
||||
cy="41.058998"
|
||||
fx="14.688"
|
||||
fy="37.456001"
|
||||
r="5.7385001" />
|
||||
<radialGradient
|
||||
r="5.7385001"
|
||||
gradientTransform="matrix(1.0173,-0.18234,0.035717,0.96941,-5.8008,1.5991)"
|
||||
cx="17.059"
|
||||
cy="41.058998"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
fy="37.456001"
|
||||
fx="14.688"
|
||||
id="radialGradient2901-6-3-4">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#fff"
|
||||
id="stop7069-7-0-38" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#fff;stop-opacity:0"
|
||||
id="stop7071-2-2-7" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2515"
|
||||
id="linearGradient5008"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="199.89294"
|
||||
y1="100.19387"
|
||||
x2="322.9762"
|
||||
y2="100.19387" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2515"
|
||||
id="linearGradient5010"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="199.89294"
|
||||
y1="100.19387"
|
||||
x2="322.9762"
|
||||
y2="100.19387" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2515"
|
||||
id="linearGradient5106"
|
||||
x1="527.20941"
|
||||
y1="1.4775099"
|
||||
x2="655.20941"
|
||||
y2="1.4775099"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2515"
|
||||
id="linearGradient5114"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="527.20941"
|
||||
y1="1.4775099"
|
||||
x2="655.20941"
|
||||
y2="1.4775099" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2515"
|
||||
id="linearGradient5122"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="527.20941"
|
||||
y1="1.4775099"
|
||||
x2="655.20941"
|
||||
y2="1.4775099" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2515"
|
||||
id="linearGradient5130"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="527.20941"
|
||||
y1="1.4775099"
|
||||
x2="655.20941"
|
||||
y2="1.4775099" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2372-7-0-0"
|
||||
id="linearGradient5203"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.36554893,0,0,0.22265547,-14.302628,-25.663689)"
|
||||
x1="28.739"
|
||||
y1="144.12"
|
||||
x2="26.257"
|
||||
y2="125.39" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#radialGradient2907-7-1-7"
|
||||
id="radialGradient5205"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.69176583,-0.11233202,0.01509924,0.64758995,-21.023949,-2.4802012)"
|
||||
cx="17.059"
|
||||
cy="41.058998"
|
||||
fx="14.758"
|
||||
fy="37.841"
|
||||
r="5.7385001" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2372-7-0-0"
|
||||
id="linearGradient5207"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.21909685,0,0,0.21943915,-23.076965,-22.125744)"
|
||||
x1="28.503"
|
||||
y1="137.53999"
|
||||
x2="26.257"
|
||||
y2="125.39" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#radialGradient2901-6-3-8"
|
||||
id="radialGradient5209"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.65701931,-0.11776359,0.02306769,0.62608974,-32.804054,1.418643)"
|
||||
cx="17.059"
|
||||
cy="41.058998"
|
||||
fx="14.688"
|
||||
fy="37.456001"
|
||||
r="5.7385001" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2515"
|
||||
id="linearGradient5218"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.98766169,0,0,1.0864702,-35.859333,-13.634417)"
|
||||
x1="257.69382"
|
||||
y1="97.573967"
|
||||
x2="360.56195"
|
||||
y2="97.573967" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2515"
|
||||
id="linearGradient5223"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.98766169,0,0,1.0864702,-35.859333,-13.634417)"
|
||||
x1="257.69382"
|
||||
y1="97.573967"
|
||||
x2="360.56195"
|
||||
y2="97.573967" />
|
||||
<filter
|
||||
id="filter4030"
|
||||
inkscape:label="Inner Shadow"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:menu-tooltip="Adds a colorizable drop shadow inside"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur4032"
|
||||
stdDeviation="4"
|
||||
result="result8" />
|
||||
<feOffset
|
||||
id="feOffset4034"
|
||||
dx="4"
|
||||
dy="4"
|
||||
result="result11" />
|
||||
<feComposite
|
||||
id="feComposite4036"
|
||||
in2="result11"
|
||||
result="result6"
|
||||
in="SourceGraphic"
|
||||
operator="in" />
|
||||
<feFlood
|
||||
id="feFlood4038"
|
||||
result="result10"
|
||||
in="result6"
|
||||
flood-opacity="1"
|
||||
flood-color="rgb(0,0,0)" />
|
||||
<feBlend
|
||||
id="feBlend4040"
|
||||
in2="result10"
|
||||
mode="normal"
|
||||
in="result6"
|
||||
result="result12" />
|
||||
<feComposite
|
||||
id="feComposite4042"
|
||||
in2="SourceGraphic"
|
||||
result="result2"
|
||||
operator="in" />
|
||||
</filter>
|
||||
<filter
|
||||
id="filter3600"
|
||||
inkscape:label="Inner Shadow"
|
||||
inkscape:menu="Shadows and Glows"
|
||||
inkscape:menu-tooltip="Adds a colorizable drop shadow inside"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur3602"
|
||||
stdDeviation="4"
|
||||
result="result8" />
|
||||
<feOffset
|
||||
id="feOffset3604"
|
||||
dx="4"
|
||||
dy="4"
|
||||
result="result11" />
|
||||
<feComposite
|
||||
id="feComposite3606"
|
||||
in2="result11"
|
||||
result="result6"
|
||||
in="SourceGraphic"
|
||||
operator="in" />
|
||||
<feFlood
|
||||
id="feFlood3608"
|
||||
result="result10"
|
||||
in="result6"
|
||||
flood-opacity="1"
|
||||
flood-color="rgb(0,0,0)" />
|
||||
<feBlend
|
||||
id="feBlend3610"
|
||||
in2="result10"
|
||||
mode="normal"
|
||||
in="result6"
|
||||
result="result12" />
|
||||
<feComposite
|
||||
id="feComposite3612"
|
||||
in2="SourceGraphic"
|
||||
result="result2"
|
||||
operator="in" />
|
||||
</filter>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2515"
|
||||
id="linearGradient4002"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="527.20941"
|
||||
y1="1.4775099"
|
||||
x2="655.20941"
|
||||
y2="1.4775099" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2515-7"
|
||||
id="linearGradient3982-0"
|
||||
x1="-28.520731"
|
||||
y1="-103.63812"
|
||||
x2="97.479271"
|
||||
y2="-103.63812"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.99224806,0,0,0.99224806,-162.89591,197.08564)" />
|
||||
<linearGradient
|
||||
id="linearGradient2515-7"
|
||||
y2="45.016998"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x2="20.759001"
|
||||
y1="1"
|
||||
x1="20.759001">
|
||||
<stop
|
||||
id="stop3311-2"
|
||||
style="stop-color:#f6f6f6"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop3313-2"
|
||||
style="stop-color:#d2d2d2"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2515-7"
|
||||
id="linearGradient4059"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.99224806,0,0,0.99224806,421.99842,409.32146)"
|
||||
x1="-28.520731"
|
||||
y1="-103.63812"
|
||||
x2="97.479271"
|
||||
y2="-103.63812" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2515-7"
|
||||
id="linearGradient4114"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.99224806,0,0,0.99224806,421.99842,409.32146)"
|
||||
x1="-28.520731"
|
||||
y1="-103.63812"
|
||||
x2="97.479271"
|
||||
y2="-103.63812" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2515-7"
|
||||
id="linearGradient4118"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.99224806,0,0,0.99224806,421.99842,409.32146)"
|
||||
x1="-28.520731"
|
||||
y1="-103.63812"
|
||||
x2="97.479271"
|
||||
y2="-103.63812" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2515-7"
|
||||
id="linearGradient4124"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.99224806,0,0,0.99224806,421.99842,409.32146)"
|
||||
x1="-28.520731"
|
||||
y1="-103.63812"
|
||||
x2="97.479271"
|
||||
y2="-103.63812" />
|
||||
</defs>
|
||||
<g
|
||||
id="g3879"
|
||||
transform="matrix(1.0065385,0,0,0.99324553,342.07202,0.4391342)"
|
||||
style="fill:url(#linearGradient4899);fill-opacity:1;stroke:#666666;stroke-width:2.90937853;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">
|
||||
<g
|
||||
id="g3851"
|
||||
style="fill:url(#linearGradient4897);fill-opacity:1;stroke:#666666;stroke-width:2.90937853;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(1.0065385,0,0,0.99324553,389.97009,0.4391342)"
|
||||
id="g3879-9"
|
||||
style="fill:url(#linearGradient4903);fill-opacity:1;stroke:#666666;stroke-width:2.90937853;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">
|
||||
<g
|
||||
id="g3851-8"
|
||||
style="fill:url(#linearGradient4901);fill-opacity:1;stroke:#666666;stroke-width:2.90937853;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
</g>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
|
||||
x="63.191406"
|
||||
y="186.1373"
|
||||
id="text6872"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
x="63.191406"
|
||||
y="186.1373"
|
||||
style="font-size:16px"
|
||||
id="tspan3200">Properties</tspan></text>
|
||||
<g
|
||||
id="g3195"
|
||||
transform="translate(-168.87359,-212.01045)">
|
||||
<g
|
||||
transform="translate(-187.33682,-3.6553525)"
|
||||
inkscape:transform-center-y="17.362925"
|
||||
inkscape:transform-center-x="-188.25066"
|
||||
id="g4120">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="color:#000000;fill:url(#linearGradient4124);fill-opacity:1;fill-rule:nonzero;stroke:#808080;stroke-width:2.97674417;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
d="m 518.72204,306.48673 c 0,34.52422 -27.98741,62.51163 -62.51163,62.51163 -34.52421,0 -62.51163,-27.98741 -62.51163,-62.51163 0,-34.52423 27.98742,-62.51163 62.51163,-62.51163 34.52422,0 62.51163,27.9874 62.51163,62.51163 z"
|
||||
id="rect4000-3-2"
|
||||
inkscape:export-filename="/home/jrbastien/Ubuntu One/CoverArt/0.9 standard/properties3.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="color:#000000;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:#333333;stroke-width:1.57173562;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
d="m 441.55113,270.25162 c -2.95789,0 -5.72321,0.70308 -8.24144,1.94749 l 12.14008,12.79031 c -1.69739,5.71236 -4.17064,10.05915 -10.51152,11.36917 l -11.84398,-12.42187 c -0.797,2.28419 -1.23374,4.73597 -1.23374,7.31626 0,11.61777 8.79794,21.05402 19.6906,21.05402 2.92083,0 5.69831,-0.73231 8.19208,-1.9475 0,0 14.54132,19.27808 24.42139,30.8369 2.80797,3.28505 10.10354,0.74464 13.19063,-2.71514 2.71783,-3.04598 4.73033,-9.70787 1.66369,-12.48916 -12.33352,-11.18585 -29.10964,-27.0544 -29.10964,-27.0544 0.87307,-2.37669 1.38179,-4.97792 1.38179,-7.68472 0,-11.61776 -8.84728,-21.00136 -19.73994,-21.00136 z"
|
||||
id="path4049"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90"
|
||||
inkscape:export-filename="/home/jrbastien/Ubuntu One/CoverArt/0.9 standard/properties3.png" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Depois Largura: | Altura: | Tamanho: 28 KiB |
|
Depois Largura: | Altura: | Tamanho: 53 KiB |
|
Depois Largura: | Altura: | Tamanho: 57 KiB |
@@ -0,0 +1,93 @@
|
||||
<?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:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
inkscape:export-ydpi="90"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-filename="/home/jrbastien/Dropbox/CoverArt/Issue_225/coverart_monochrome_icon5.png"
|
||||
sodipodi:docname="coverart_icon_monochrome.svg"
|
||||
inkscape:version="0.48.4 r9939"
|
||||
version="1.1"
|
||||
width="16"
|
||||
height="16"
|
||||
id="svg7384">
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1313"
|
||||
inkscape:window-height="744"
|
||||
id="base"
|
||||
showgrid="false"
|
||||
inkscape:zoom="22.627417"
|
||||
inkscape:cx="7.8121502"
|
||||
inkscape:cy="8.1026068"
|
||||
inkscape:window-x="53"
|
||||
inkscape:window-y="24"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg7384">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid2984" />
|
||||
</sodipodi:namedview>
|
||||
<defs
|
||||
id="defs13" />
|
||||
<metadata
|
||||
id="metadata90">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title>Gnome Symbolic Icon Theme</dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<title
|
||||
id="title9167">Gnome Symbolic Icon Theme</title>
|
||||
<path
|
||||
style="color:#000000;fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
d="M 0 1 L 0 15 L 16 15 L 16 1 L 0 1 z M 3 2 L 15 2 L 15 14 L 3 14 L 3 2 z "
|
||||
id="path3049" />
|
||||
<path
|
||||
id="path3145"
|
||||
style="color:#000000;fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
d="m 8.49454,6.9999998 c -0.1963888,0 -0.2708736,0.00458 -0.421926,0.075312 C 7.8492631,7.1799014 7.6954236,7.3410447 7.5904128,7.5573095 7.5112238,7.7203905 7.5,7.8010382 7.5,7.9941194 c 0,0.1930808 0.011222,0.2737261 0.090413,0.4368099 0.1405533,0.2894579 0.401828,0.4949454 0.7233017,0.557309 0.1058087,0.020535 0.330263,0.013347 0.4369949,-0.015065 C 8.9273383,8.9261648 9.1300999,8.8031091 9.2479793,8.6719249 9.3497026,8.558718 9.4316453,8.391306 9.4740114,8.235115 c 0.034652,-0.1277581 0.034652,-0.3693021 0,-0.4970598 C 9.393561,7.4414403 9.2029191,7.2229953 8.9315348,7.0903743 8.7670195,7.0099746 8.6978322,6.9999998 8.49454,6.9999998 z m 0.00546,-3.2619392 c 0.3435847,0 0.6929605,0.032658 1.0213496,0.1135478 1.5301191,0.3769006 2.7439931,1.5920313 3.1207921,3.1225655 0.161741,0.6569562 0.161741,1.3868971 0,2.0438611 -0.413142,1.678183 -1.83062,2.926869 -3.5463542,3.179339 -0.2588467,0.03813 -0.7345973,0.05226 -0.9646085,0.02839 C 7.0640041,12.114865 6.1115479,11.676536 5.4075798,10.919964 4.646015,10.101478 4.2443755,9.103245 4.2443755,7.9961045 4.2443755,7.312468 4.3736153,6.7297403 4.6699382,6.1225653 5.2189083,4.9976584 6.2624431,4.1511883 7.4786511,3.8516084 7.8070437,3.7707188 8.1564165,3.7380606 8.5000013,3.7380606 z m 0,-0.738061 c -0.2467741,0 -0.4911568,0.00498 -0.6525293,0.028388 C 6.7061092,3.193961 5.780077,3.6778426 4.9820172,4.4761218 4.1839582,5.2743991 3.700631,6.2015307 3.5351045,7.3432048 c -0.046806,0.3228327 -0.046806,0.9829673 0,1.3058001 0.1655265,1.1416745 0.6488537,2.0688051 1.4469127,2.8670811 0.855663,0.855896 1.9055518,1.365449 3.1207923,1.476123 0.2703983,0.02463 0.8115804,-0.0132 1.1064627,-0.05677 1.0961058,-0.161943 2.0226018,-0.633028 2.8087138,-1.419348 0.798063,-0.798276 1.28138,-1.7254067 1.446912,-2.8670813 0.0468,-0.3228328 0.0468,-0.9829675 0,-1.3058001 C 13.299366,6.2015304 12.816049,5.2743988 12.017986,4.4761215 11.219926,3.6778423 10.293899,3.1939607 9.1525306,3.0283866 8.991163,3.0049817 8.7467754,2.9999996 8.5000013,2.9999996 z" />
|
||||
<rect
|
||||
style="color:#000000;fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
id="rect3809"
|
||||
width="1.4146408"
|
||||
height="13.103647"
|
||||
x="-2.9486878"
|
||||
y="2.1104977"
|
||||
transform="matrix(0,-1,0.99999431,0.00337266,0,0)" />
|
||||
<rect
|
||||
style="color:#000000;fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
id="rect3809-0"
|
||||
width="1.1411272"
|
||||
height="13.103621"
|
||||
x="-14.135278"
|
||||
y="2.1503386"
|
||||
transform="matrix(0,-1,0.9999963,0.00272058,0,0)" />
|
||||
<rect
|
||||
style="color:#000000;fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
id="rect3809-0-7"
|
||||
width="1.1411272"
|
||||
height="13.103621"
|
||||
x="-15.180982"
|
||||
y="-14.649317"
|
||||
transform="matrix(-1,0,0.00272058,-0.9999963,0,0)" />
|
||||
</svg>
|
||||
|
Depois Largura: | Altura: | Tamanho: 5.6 KiB |