[pitivi] titleeditor: Added color pickers



commit c2f058e8208b05d5ff8a8c35724a94bcacfb01de
Author: Millan Castro <m castrovilarino gmail com>
Date:   Sun Mar 24 12:17:26 2019 +0100

    titleeditor: Added color pickers
    
    Fixes #1645

 data/ui/titleeditor.ui | 346 +++++++++++++++++++++++++------------------------
 pitivi/titleeditor.py  |  29 ++++-
 2 files changed, 202 insertions(+), 173 deletions(-)
---
diff --git a/data/ui/titleeditor.ui b/data/ui/titleeditor.ui
index ccf4f7e9..e732ee24 100644
--- a/data/ui/titleeditor.ui
+++ b/data/ui/titleeditor.ui
@@ -1,17 +1,17 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.19.0 -->
+<!-- Generated with glade 3.22.1 -->
 <interface>
   <requires lib="gtk+" version="3.10"/>
   <object class="GtkAdjustment" id="position_x_adj">
-    <property name="upper">100</property>
     <property name="lower">-100</property>
+    <property name="upper">100</property>
     <property name="value">0.5</property>
     <property name="step_increment">0.050000000000000003</property>
     <property name="page_increment">0.10000000000000001</property>
   </object>
   <object class="GtkAdjustment" id="position_y_adj">
-    <property name="upper">100</property>
     <property name="lower">-100</property>
+    <property name="upper">100</property>
     <property name="value">0.5</property>
     <property name="step_increment">0.050000000000000003</property>
     <property name="page_increment">0.10000000000000001</property>
@@ -53,9 +53,6 @@
             <property name="position">1</property>
           </packing>
         </child>
-        <action-widgets>
-          <action-widget response="0">create</action-widget>
-        </action-widgets>
         <child internal-child="content_area">
           <object class="GtkBox" id="infobar-content_area1">
             <property name="can_focus">False</property>
@@ -97,235 +94,244 @@
         <property name="can_focus">False</property>
         <property name="shadow_type">etched-in</property>
         <child>
-          <object class="GtkBox" id="editing_box">
+          <object class="GtkBox" id="base_table">
             <property name="visible">True</property>
             <property name="can_focus">False</property>
+            <property name="margin_left">12</property>
+            <property name="margin_right">12</property>
+            <property name="margin_top">12</property>
+            <property name="margin_bottom">12</property>
             <property name="orientation">vertical</property>
             <child>
-              <object class="GtkToolbar" id="toolbar">
+              <object class="GtkTextView" id="textview">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="margin_start">12</property>
+                <property name="margin_end">12</property>
+                <property name="hexpand">True</property>
+                <property name="vexpand">True</property>
+                <property name="wrap_mode">word</property>
+                <property name="indent">-1</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkBox">
+                <property name="name">base_table</property>
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
-                <property name="show_arrow">False</property>
-                <property name="icon_size">1</property>
+                <property name="halign">start</property>
+                <property name="valign">start</property>
+                <property name="margin_top">10</property>
                 <child>
-                  <object class="GtkToolItem" id="font">
+                  <object class="GtkFontButton" id="fontbutton1">
                     <property name="use_action_appearance">False</property>
                     <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <child>
-                      <object class="GtkFontButton" id="fontbutton1">
-                        <property name="use_action_appearance">False</property>
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="receives_default">True</property>
-                        <property name="font">Sans 12</property>
-                        <property name="preview_text"/>
-                        <property name="show_preview_entry">False</property>
-                        <property name="title" translatable="yes">Choose a font</property>
-                        <signal name="font-set" handler="_fontButtonCb" swapped="no"/>
-                      </object>
-                    </child>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">True</property>
+                    <property name="font">Sans 12</property>
+                    <property name="preview_text"/>
+                    <property name="show_preview_entry">False</property>
+                    <property name="title" translatable="yes">Choose a font</property>
+                    <signal name="font-set" handler="_fontButtonCb" swapped="no"/>
                   </object>
                   <packing>
                     <property name="expand">False</property>
-                    <property name="homogeneous">True</property>
+                    <property name="fill">True</property>
+                    <property name="position">0</property>
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkToolItem" id="font_fore_color">
+                  <object class="GtkColorButton" id="fore_text_color">
                     <property name="use_action_appearance">False</property>
                     <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">True</property>
+                    <property name="margin_left">5</property>
+                    <property name="use_alpha">True</property>
+                    <property name="title" translatable="yes">Pick a text color</property>
+                    <property name="rgba">rgb(239,41,41)</property>
+                    <signal name="color-set" handler="_frontTextColorButtonCb" swapped="no"/>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkAspectFrame" id="color_picker_foreground">
+                    <property name="name">picker1</property>
+                    <property name="visible">True</property>
                     <property name="can_focus">False</property>
-                    <property name="has_tooltip">True</property>
-                    <property name="tooltip_markup" translatable="yes">Text color</property>
-                    <property name="tooltip_text" translatable="yes">Text color</property>
+                    <property name="label_xalign">0</property>
+                    <property name="shadow_type">none</property>
                     <child>
-                      <object class="GtkColorButton" id="fore_text_color">
-                        <property name="use_action_appearance">False</property>
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="receives_default">True</property>
-                        <property name="use_alpha">True</property>
-                        <property name="title" translatable="yes">Pick a text color</property>
-                        <signal name="color-set" handler="_frontTextColorButtonCb" swapped="no"/>
-                      </object>
+                      <placeholder/>
                     </child>
                   </object>
                   <packing>
                     <property name="expand">False</property>
-                    <property name="homogeneous">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">2</property>
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkToolItem" id="background_color">
+                  <object class="GtkColorButton" id="back_color">
                     <property name="use_action_appearance">False</property>
                     <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">True</property>
+                    <property name="margin_left">5</property>
+                    <property name="use_alpha">True</property>
+                    <property name="title" translatable="yes">Pick a background color</property>
+                    <property name="rgba">rgb(255,255,255)</property>
+                    <signal name="color-set" handler="_backgroundColorButtonCb" swapped="no"/>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">3</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkAspectFrame" id="color_picker_background">
+                    <property name="name">picker2</property>
+                    <property name="visible">True</property>
                     <property name="can_focus">False</property>
-                    <property name="has_tooltip">True</property>
-                    <property name="tooltip_markup" translatable="yes">Background color</property>
-                    <property name="tooltip_text" translatable="yes">Background color</property>
+                    <property name="label_xalign">0</property>
+                    <property name="shadow_type">none</property>
                     <child>
-                      <object class="GtkColorButton" id="back_color">
-                        <property name="use_action_appearance">False</property>
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="receives_default">True</property>
-                        <property name="use_alpha">True</property>
-                        <property name="title" translatable="yes">Pick a background color</property>
-                        <property name="rgba">rgb(255,255,255)</property>
-                        <signal name="color-set" handler="_backgroundColorButtonCb" swapped="no"/>
-                      </object>
+                      <placeholder/>
                     </child>
                   </object>
                   <packing>
                     <property name="expand">False</property>
-                    <property name="homogeneous">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">4</property>
                   </packing>
                 </child>
               </object>
               <packing>
                 <property name="expand">False</property>
                 <property name="fill">True</property>
-                <property name="position">0</property>
+                <property name="position">1</property>
               </packing>
             </child>
             <child>
-              <object class="GtkTextView" id="textview">
+              <object class="GtkLabel" id="label7">
                 <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="margin_start">12</property>
-                <property name="margin_end">12</property>
-                <property name="margin_top">12</property>
-                <property name="margin_bottom">12</property>
-                <property name="wrap_mode">word</property>
+                <property name="can_focus">False</property>
+                <property name="halign">start</property>
+                <property name="valign">start</property>
+                <property name="margin_top">10</property>
+                <property name="label" translatable="yes">Alignment</property>
+                <property name="width_chars">0</property>
+                <property name="max_width_chars">0</property>
+                <property name="xalign">0</property>
               </object>
               <packing>
-                <property name="expand">True</property>
+                <property name="expand">False</property>
                 <property name="fill">True</property>
-                <property name="position">1</property>
+                <property name="position">2</property>
               </packing>
             </child>
             <child>
-              <object class="GtkExpander" id="expander1">
+              <object class="GtkGrid">
                 <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="expanded">True</property>
+                <property name="can_focus">False</property>
+                <property name="halign">start</property>
+                <property name="valign">start</property>
+                <property name="margin_left">12</property>
+                <property name="margin_top">6</property>
+                <property name="row_spacing">8</property>
+                <property name="column_spacing">6</property>
                 <child>
-                  <object class="GtkBox" id="box5">
+                  <object class="GtkComboBoxText" id="halignment">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
-                    <property name="orientation">vertical</property>
-                    <child>
-                      <object class="GtkGrid" id="box4">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="halign">start</property>
-                        <property name="margin_left">6</property>
-                        <property name="margin_right">6</property>
-                        <property name="margin_start">24</property>
-                        <property name="margin_top">6</property>
-                        <property name="margin_bottom">6</property>
-                        <property name="row_spacing">10</property>
-                        <property name="column_spacing">10</property>
-                        <child>
-                          <object class="GtkLabel" id="label6">
-                            <property name="visible">True</property>
-                            <property name="can_focus">False</property>
-                            <property name="label" translatable="yes">Horizontal:</property>
-                            <property name="xalign">0</property>
-                          </object>
-                          <packing>
-                            <property name="left_attach">0</property>
-                            <property name="top_attach">0</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkLabel" id="label2">
-                            <property name="visible">True</property>
-                            <property name="can_focus">False</property>
-                            <property name="label" translatable="yes">Vertical:</property>
-                            <property name="xalign">0</property>
-                          </object>
-                          <packing>
-                            <property name="left_attach">0</property>
-                            <property name="top_attach">1</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkComboBoxText" id="halignment">
-                            <property name="visible">True</property>
-                            <property name="can_focus">False</property>
-                            <signal name="changed" handler="_update_source_cb" swapped="no"/>
-                          </object>
-                          <packing>
-                            <property name="left_attach">1</property>
-                            <property name="top_attach">0</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkComboBoxText" id="valignment">
-                            <property name="visible">True</property>
-                            <property name="can_focus">False</property>
-                            <property name="active">1</property>
-                            <signal name="changed" handler="_update_source_cb" swapped="no"/>
-                          </object>
-                          <packing>
-                            <property name="left_attach">1</property>
-                            <property name="top_attach">1</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkSpinButton" id="x-absolute">
-                            <property name="visible">True</property>
-                            <property name="can_focus">True</property>
-                            <property name="invisible_char">•</property>
-                            <property name="adjustment">position_x_adj</property>
-                            <property name="digits">2</property>
-                            <property name="numeric">True</property>
-                            <signal name="value-changed" handler="_update_source_cb" swapped="no"/>
-                          </object>
-                          <packing>
-                            <property name="left_attach">2</property>
-                            <property name="top_attach">0</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkSpinButton" id="y-absolute">
-                            <property name="visible">True</property>
-                            <property name="can_focus">True</property>
-                            <property name="invisible_char">•</property>
-                            <property name="adjustment">position_y_adj</property>
-                            <property name="digits">2</property>
-                            <property name="numeric">True</property>
-                            <signal name="value-changed" handler="_update_source_cb" swapped="no"/>
-                          </object>
-                          <packing>
-                            <property name="left_attach">2</property>
-                            <property name="top_attach">1</property>
-                          </packing>
-                        </child>
-                      </object>
-                      <packing>
-                        <property name="expand">True</property>
-                        <property name="fill">True</property>
-                        <property name="position">0</property>
-                      </packing>
-                    </child>
+                    <signal name="changed" handler="_update_source_cb" swapped="no"/>
                   </object>
+                  <packing>
+                    <property name="left_attach">1</property>
+                    <property name="top_attach">0</property>
+                  </packing>
                 </child>
-                <child type="label">
-                  <object class="GtkLabel" id="label7">
+                <child>
+                  <object class="GtkLabel" id="label6">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
-                    <property name="label" translatable="yes">Alignment</property>
+                    <property name="label" translatable="yes">Horizontal:</property>
                     <property name="xalign">0</property>
                   </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkComboBoxText" id="valignment">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="active">1</property>
+                    <signal name="changed" handler="_update_source_cb" swapped="no"/>
+                  </object>
+                  <packing>
+                    <property name="left_attach">1</property>
+                    <property name="top_attach">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="label2">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="label" translatable="yes">Vertical:</property>
+                    <property name="xalign">0</property>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkSpinButton" id="y-absolute">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="invisible_char">•</property>
+                    <property name="adjustment">position_y_adj</property>
+                    <property name="digits">2</property>
+                    <property name="numeric">True</property>
+                    <signal name="value-changed" handler="_update_source_cb" swapped="no"/>
+                  </object>
+                  <packing>
+                    <property name="left_attach">2</property>
+                    <property name="top_attach">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkSpinButton" id="x-absolute">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="invisible_char">•</property>
+                    <property name="adjustment">position_x_adj</property>
+                    <property name="digits">2</property>
+                    <property name="numeric">True</property>
+                    <signal name="value-changed" handler="_update_source_cb" swapped="no"/>
+                  </object>
+                  <packing>
+                    <property name="left_attach">2</property>
+                    <property name="top_attach">0</property>
+                  </packing>
                 </child>
               </object>
               <packing>
                 <property name="expand">False</property>
                 <property name="fill">True</property>
-                <property name="position">2</property>
+                <property name="position">3</property>
               </packing>
             </child>
           </object>
diff --git a/pitivi/titleeditor.py b/pitivi/titleeditor.py
index aaca7c4f..d9919133 100644
--- a/pitivi/titleeditor.py
+++ b/pitivi/titleeditor.py
@@ -32,6 +32,7 @@ from pitivi.utils.timeline import SELECT
 from pitivi.utils.ui import argb_to_gdk_rgba
 from pitivi.utils.ui import fix_infobar
 from pitivi.utils.ui import gdk_rgba_to_argb
+from pitivi.utils.widgets import ColorPickerButton
 
 GlobalSettings.addConfigOption('titleClipLength',
                                section="user-interface",
@@ -86,10 +87,9 @@ class TitleEditor(Loggable):
         self.widget = builder.get_object("box1")  # To be used by tabsmanager
         self.infobar = builder.get_object("infobar")
         fix_infobar(self.infobar)
-        self.editing_box = builder.get_object("editing_box")
+        self.editing_box = builder.get_object("base_table")
+
         self.textarea = builder.get_object("textview")
-        toolbar = builder.get_object("toolbar")
-        toolbar.get_style_context().add_class(Gtk.STYLE_CLASS_INLINE_TOOLBAR)
 
         self.textbuffer = self.textarea.props.buffer
         self.textbuffer.connect("changed", self._textChangedCb)
@@ -98,6 +98,18 @@ class TitleEditor(Loggable):
         self.foreground_color_button = builder.get_object("fore_text_color")
         self.background_color_button = builder.get_object("back_color")
 
+        self.color_picker_foreground_widget = ColorPickerButton()
+        self.color_picker_foreground_widget.show()
+        self.color_picker_foreground = builder.get_object("color_picker_foreground")
+        self.color_picker_foreground.add(self.color_picker_foreground_widget)
+        self.color_picker_foreground_widget.connect("value-changed", self._color_picker_value_changed_cb, 
self.foreground_color_button, "color")
+
+        self.color_picker_background_widget = ColorPickerButton()
+        self.color_picker_background_widget.show()
+        self.background_color_picker = builder.get_object("color_picker_background")
+        self.background_color_picker.add(self.color_picker_background_widget)
+        self.color_picker_background_widget.connect("value-changed", self._color_picker_value_changed_cb, 
self.background_color_button, "foreground-color")
+
         settings = ["valignment", "halignment", "x-absolute", "y-absolute"]
         for setting in settings:
             self.settings[setting] = builder.get_object(setting)
@@ -125,6 +137,17 @@ class TitleEditor(Loggable):
             finally:
                 self._setting_props = False
 
+    def _color_picker_value_changed_cb(self, widget, colorButton, colorLayer):
+        argb = 0
+        argb += (1 * 255) * 256 ** 3
+        argb += float(widget.color_r) * 256 ** 2
+        argb += float(widget.color_g) * 256 ** 1
+        argb += float(widget.color_b) * 256 ** 0
+        self.debug("Setting text %s to %x", colorLayer, argb)
+        self._setChildProperty(colorLayer, argb)
+        rgba = argb_to_gdk_rgba(argb)
+        colorButton.set_rgba(rgba)
+
     def _backgroundColorButtonCb(self, widget):
         color = gdk_rgba_to_argb(widget.get_rgba())
         self.debug("Setting title background color to %x", color)


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]