From a51329e0dd645d8a187f0b4c744044677f863be7 Mon Sep 17 00:00:00 2001 From: fossfreedom Date: Sun, 23 Nov 2014 00:09:59 +0000 Subject: [PATCH] add text alignment options - issue #340 --- coverart_browser_prefs.py | 28 ++++++- coverart_covericonview.py | 30 +++++-- ...hmbox.plugins.coverart_browser.gschema.xml | 5 ++ ui/coverart_browser_prefs.ui | 79 ++++++++++++++++++- 4 files changed, 134 insertions(+), 8 deletions(-) diff --git a/coverart_browser_prefs.py b/coverart_browser_prefs.py index 1db9a75..fd8eee1 100644 --- a/coverart_browser_prefs.py +++ b/coverart_browser_prefs.py @@ -172,7 +172,8 @@ class GSetting: LAST_GENRE_FOLDER='last-genre-folder', ENTRY_VIEW_MODE='entry-view-mode', FOLLOWING='following', - ACTIVATIONS='activations') + ACTIVATIONS='activations', + TEXT_ALIGNMENT='text-alignment') self.setting = {} @@ -526,6 +527,18 @@ class Preferences(GObject.Object, PeasGtk.Configurable): 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") @@ -586,6 +599,19 @@ class Preferences(GObject.Object, PeasGtk.Configurable): 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() diff --git a/coverart_covericonview.py b/coverart_covericonview.py index 35316d2..ffc6522 100644 --- a/coverart_covericonview.py +++ b/coverart_covericonview.py @@ -88,7 +88,7 @@ class CellRendererThumb(Gtk.CellRendererPixbuf): 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_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_wrap(Pango.WrapMode.WORD_CHAR) @@ -129,6 +129,7 @@ class AlbumArtCellArea(Gtk.CellAreaBox): 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__() @@ -163,6 +164,10 @@ class AlbumArtCellArea(Gtk.CellAreaBox): 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 @@ -254,6 +259,7 @@ 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, ()) @@ -360,6 +366,9 @@ class CoverIconView(EnhancedIconView, AbstractView): 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) @@ -372,6 +381,8 @@ class CoverIconView(EnhancedIconView, AbstractView): self._activate_markup) self.connect('notify::display-text-pos', self._activate_markup) + self.connect('notify::text-alignment', + self._create_and_configure_renderer) self.connect("motion-notify-event", self.on_pointer_motion) def get_view_icon_name(self): @@ -655,13 +666,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 diff --git a/schema/org.gnome.rhythmbox.plugins.coverart_browser.gschema.xml b/schema/org.gnome.rhythmbox.plugins.coverart_browser.gschema.xml index 3ae3c69..38a0071 100644 --- a/schema/org.gnome.rhythmbox.plugins.coverart_browser.gschema.xml +++ b/schema/org.gnome.rhythmbox.plugins.coverart_browser.gschema.xml @@ -226,5 +226,10 @@ number of times the plugin has been activated number of times the plugin has been activated + + 1 + alignment of coverart info + Pango Alignment value + diff --git a/ui/coverart_browser_prefs.ui b/ui/coverart_browser_prefs.ui index b9eb0ba..13f72af 100644 --- a/ui/coverart_browser_prefs.ui +++ b/ui/coverart_browser_prefs.ui @@ -1,7 +1,7 @@ - + True False @@ -689,6 +689,78 @@ albums to play 4 + + + True + False + center + + + gtk-justify-left + True + True + False + True + 0 + top + True + False + + + + False + True + 0 + + + + + gtk-justify-center + True + True + False + True + 0 + top + True + True + False + left_alignment_radiobutton + + + + False + True + 1 + + + + + gtk-justify-right + True + True + False + True + 0 + top + True + False + left_alignment_radiobutton + + + + False + True + 2 + + + + + False + True + 5 + + False @@ -985,6 +1057,11 @@ albums to play + + False + True + 9 +