diff options
author | Eitan Isaacson <eitan@monotonous.org> | 2010-09-01 11:01:31 -0700 |
---|---|---|
committer | Eitan Isaacson <eitan@monotonous.org> | 2010-09-01 11:01:31 -0700 |
commit | 7aff0f9d68029b8061fc9118e46f3ba854d97648 (patch) | |
tree | 85737bdf0fad9f1e04ca7983f9362fed46ace22e | |
parent | b708b456568426824f496443bdee90dd51050bd1 (diff) | |
parent | f55c465101446d1543be10e666f6de7a3647775f (diff) | |
download | caribou-7aff0f9d68029b8061fc9118e46f3ba854d97648.tar.gz |
Merge branch 'color-and-size'
-rw-r--r-- | caribou/ui/keyboard.py | 185 | ||||
-rw-r--r-- | caribou/ui/window.py | 8 | ||||
-rw-r--r-- | data/caribou-prefs.ui | 156 | ||||
-rw-r--r-- | data/caribou.schemas | 33 |
4 files changed, 271 insertions, 111 deletions
diff --git a/caribou/ui/keyboard.py b/caribou/ui/keyboard.py index 67d580d..0737a6f 100644 --- a/caribou/ui/keyboard.py +++ b/caribou/ui/keyboard.py @@ -26,6 +26,7 @@ import caribou.common.const as const import gconf import gobject import gtk +import pango import sys import virtkey import os @@ -71,13 +72,51 @@ class KeyboardPreferences: mouse_over_color_button = builder.get_object("mouse_over_color_button") mouse_over_color_string = client.get_string(const.CARIBOU_GCONF + - "/mouse_over") or "yellow" + "/mouse_over_color") or "yellow" mouse_over_color = gtk.gdk.Color(mouse_over_color_string) mouse_over_color_button.set_color(mouse_over_color) mouse_over_color_button.connect("color-set", - self._on_mouse_over_color_set, + self._on_mouse_over_color_set, client) + + default_colors_checkbox = builder.get_object("default_colors_checkbox") + use_defaults = client.get_bool(const.CARIBOU_GCONF + '/default_colors') + if use_defaults is None: + use_defaults = True + + default_colors_checkbox.set_active(use_defaults) + + self._on_default_colors_toggled(default_colors_checkbox, + client, normal_color_button, + mouse_over_color_button) + + default_colors_checkbox.connect('toggled', + self._on_default_colors_toggled, + client, normal_color_button, + mouse_over_color_button) + + + key_font_button = builder.get_object("key_font_button") + key_font_string = client.get_string( + const.CARIBOU_GCONF + "/key_font") or "Sans 12" + key_font_button.set_font_name(key_font_string) + key_font_button.connect('font-set', self._on_key_font_set, client) + + default_font_checkbox = builder.get_object("default_font_checkbox") + use_defaults = client.get_bool(const.CARIBOU_GCONF + '/default_font') + if use_defaults is None: + use_defaults = True + + default_font_checkbox.set_active(use_defaults) + + self._on_default_font_toggled(default_font_checkbox, + client, key_font_button) + + default_font_checkbox.connect('toggled', + self._on_default_font_toggled, + client, key_font_button) + kbds = self._fetch_keyboards() for kbddef in kbds: layout_combo.append_text(kbddef) @@ -90,23 +129,25 @@ class KeyboardPreferences: else: layout_combo.set_active(index) - # grey out the key size, key spacing and test area - # TODO: implement key size, key spacing and test area - keysize_label = builder.get_object("label_keysize") - keysize_label.set_sensitive(False) - keysize_combo = builder.get_object("combobox_keysize") - keysize_combo.set_sensitive(False) - keyspacing_label = builder.get_object("label_keyspacing") - keyspacing_label.set_sensitive(False) - keyspacing_combo = builder.get_object("combobox_keyspacing") - keyspacing_combo.set_sensitive(False) - test_label = builder.get_object("label_test") - test_label.set_sensitive(False) - entry_test = builder.get_object("entry_test") - entry_test.set_sensitive(False) - self.window.show_all() + def _on_default_font_toggled(self, default_colors_checkbox, gconf_client, + key_font_button): + + use_defaults = default_colors_checkbox.get_active() + gconf_client.set_bool(const.CARIBOU_GCONF + '/default_font', + use_defaults) + key_font_button.set_sensitive(not use_defaults) + + def _on_default_colors_toggled(self, default_colors_checkbox, gconf_client, + normal_color_button, + mouse_over_color_button): + use_defaults = default_colors_checkbox.get_active() + gconf_client.set_bool(const.CARIBOU_GCONF + '/default_colors', + use_defaults) + normal_color_button.set_sensitive(not use_defaults) + mouse_over_color_button.set_sensitive(not use_defaults) + def destroy(self, widget, data = None): self.window.destroy() @@ -133,6 +174,9 @@ class KeyboardPreferences: color = colorbutton.get_color().to_string() client.set_string(const.CARIBOU_GCONF + "/mouse_over_color", color) + def _on_key_font_set(self, fontbutton, client): + font = fontbutton.get_font_name() + client.set_string(const.CARIBOU_GCONF + "/key_font", font) class Key(gtk.Button): @@ -160,12 +204,43 @@ class Key(gtk.Button): else: self.set_label(self.label) - def set_relative_size(self, size): - self.set_size_request(int(size * self.width), int(size)) + self.connect('size-allocate', self._on_size_allocate) + + def _on_size_allocate(self, widget, allocation): + widget.set_property('width-request', allocation.height * self.width) + + def set_font(self, font): + label = self.get_child() + if not isinstance(label, gtk.Label): + return + rcstyle = label.get_modifier_style() + rcstyle.font_desc = pango.FontDescription(font) + + label.modify_style(rcstyle) + label.queue_resize() + + def reset_font(self): + label = self.get_child() + if not isinstance(label, gtk.Label): + return + rcstyle = label.get_modifier_style() + rcstyle.font_desc = None + label.modify_style(rcstyle) + label.queue_resize() def set_color(self, normal_color, mouse_over_color): - self.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(normal_color)) - self.modify_bg(gtk.STATE_PRELIGHT, gtk.gdk.Color(mouse_over_color)) + rcstyle = self.get_modifier_style() + + rcstyle.bg[gtk.STATE_NORMAL] = gtk.gdk.Color(normal_color) + rcstyle.bg[gtk.STATE_PRELIGHT] = gtk.gdk.Color(mouse_over_color) + + self.modify_style(rcstyle) + + def reset_color(self): + rcstyle = self.get_modifier_style() + rcstyle.bg[gtk.STATE_NORMAL] = None + rcstyle.bg[gtk.STATE_PRELIGHT] = None + self.modify_style(rcstyle) def _get_value(self): return self._value @@ -197,11 +272,12 @@ class KeyboardLayout(gtk.Alignment): self.layout_name = name self.rows = [] self.vbox = gtk.VBox() + self.vbox.set_homogeneous(True) self.add(self.vbox) def add_row(self, row): self.rows.append(row) - alignment = gtk.Alignment(0.5, 0.5, 0, 0) + alignment = gtk.Alignment(0.5, 0.5, 1, 1) hbox = gtk.HBox() for key in row: hbox.pack_start(key, expand = True, fill = key.fill) @@ -322,12 +398,44 @@ class CaribouKeyboard(gtk.Notebook): self._colors_changed) self.client.notify_add(const.CARIBOU_GCONF + "/mouse_over_color", self._colors_changed) + self.client.notify_add(const.CARIBOU_GCONF + "/default_colors", + self._colors_changed) + self.client.notify_add(const.CARIBOU_GCONF + "/default_font", + self._key_font_changed) + self.client.notify_add(const.CARIBOU_GCONF + "/key_font", + self._key_font_changed) + + self.connect('size-allocate', self._on_size_allocate) + + self.row_height = -1 + + def reset_row_height(self): + for i in xrange(self.get_n_pages()): + layout = self.get_nth_page(i) + for row in layout.vbox.get_children(): + row.set_property('height-request', -1) + self.row_height = -1 + + def _on_size_allocate(self, notebook, allocation): + if self.row_height > 0: + return + + for i in xrange(self.get_n_pages()): + layout = self.get_nth_page(i) + rows = layout.vbox.get_children() + height = rows[0].allocation.height + self.row_height = max(self.row_height, height) + for i in xrange(self.get_n_pages()): + layout = self.get_nth_page(i) + for row in layout.vbox.get_children(): + row.set_property('height-request', self.row_height) + def load_kb(self, kb_location): kb_deserializer = KbLayoutDeserializer() layouts = kb_deserializer.deserialize(kb_location) self._set_layouts(layouts) - self._update_colors() + self._update_key_style() def _set_layouts(self, layout_list): self._clear() @@ -347,24 +455,39 @@ class CaribouKeyboard(gtk.Notebook): else: key.connect('clicked', self._pressed_normal_key) - key.set_relative_size(self.key_size) def _colors_changed(self, client, connection_id, entry, args): - self._update_colors() + self._update_key_style() + + def _key_font_changed(self, client, connection_id, entry, args): + self.reset_row_height() + self._update_key_style() - def _update_colors(self): + def _update_key_style(self): + default_colors = self.client.get_bool(const.CARIBOU_GCONF + + '/default_colors') normal_color = self.client.get_string(const.CARIBOU_GCONF + - "/normal_color") or "grey80" + "/normal_color") mouse_over_color = self.client.get_string(const.CARIBOU_GCONF + - "/mouse_over_color") or \ - "yellow" + "/mouse_over_color") + default_font = self.client.get_bool(const.CARIBOU_GCONF + + "/default_font") + key_font = self.client.get_string(const.CARIBOU_GCONF + + "/key_font") n_pages = self.get_n_pages() for i in range(n_pages): layout = self.get_nth_page(i) for row in layout.rows: for button in row: - button.set_color(normal_color, - mouse_over_color) + if default_colors: + button.reset_color() + else: + button.set_color(normal_color, + mouse_over_color) + if default_font: + button.reset_font() + else: + button.set_font(key_font) def _clear(self): n_pages = self.get_n_pages() diff --git a/caribou/ui/window.py b/caribou/ui/window.py index 72647a2..08d3e2f 100644 --- a/caribou/ui/window.py +++ b/caribou/ui/window.py @@ -57,6 +57,8 @@ class CaribouWindow(gtk.Window): if conf_file_path: text_entry_mech.load_kb(conf_file_path) + self.connect('show', self._on_window_show) + def set_cursor_location(self, cursor_location): self._cursor_location = cursor_location self._update_position() @@ -163,6 +165,12 @@ class CaribouWindow(gtk.Window): self.keyboard.hide_all() gtk.Window.hide_all(self) + def _on_window_show(self, window): + child = self.get_child() + border = self.get_border_width() + w, h = child.size_request() + self.resize(w + border, h + border) + class CaribouWindowDocked(CaribouWindow, animation.AnimatedWindowBase, opacity.ProximityWindowBase): diff --git a/data/caribou-prefs.ui b/data/caribou-prefs.ui index 6c4a029..97fcec0 100644 --- a/data/caribou-prefs.ui +++ b/data/caribou-prefs.ui @@ -147,80 +147,57 @@ <property name="border_width">12</property> <property name="spacing">6</property> <child> - <object class="GtkVBox" id="vbox6"> + <object class="GtkTable" id="table2"> <property name="visible">True</property> - <property name="spacing">6</property> + <property name="n_rows">2</property> + <property name="n_columns">2</property> <child> <object class="GtkLabel" id="label_keysize"> <property name="visible">True</property> <property name="xalign">0</property> - <property name="label" translatable="yes">Key _size:</property> + <property name="label" translatable="yes">Key font:</property> <property name="use_underline">True</property> - <property name="mnemonic_widget">combobox_keysize</property> <accessibility> - <relation type="label-for" target="combobox_keysize"/> + <relation type="label-for" target="key_font_button"/> </accessibility> </object> <packing> - <property name="expand">False</property> - <property name="padding">6</property> - <property name="position">0</property> + <property name="y_options">GTK_EXPAND</property> </packing> </child> <child> - <object class="GtkLabel" id="label_keyspacing"> - <property name="visible">True</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">Key s_pacing:</property> - <property name="use_underline">True</property> - <property name="mnemonic_widget">combobox_keyspacing</property> - <accessibility> - <relation type="label-for" target="combobox_keyspacing"/> - </accessibility> - </object> - <packing> - <property name="expand">False</property> - <property name="padding">6</property> - <property name="position">1</property> - </packing> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkVBox" id="vbox7"> - <property name="visible">True</property> - <property name="spacing">6</property> - <child> - <object class="GtkComboBox" id="combobox_keysize"> + <object class="GtkFontButton" id="key_font_button"> <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> <accessibility> <relation type="labelled-by" target="label_keysize"/> </accessibility> </object> <packing> - <property name="expand">False</property> - <property name="position">0</property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="y_options">GTK_EXPAND</property> </packing> </child> <child> - <object class="GtkComboBox" id="combobox_keyspacing"> + <object class="GtkCheckButton" id="default_font_checkbox"> + <property name="label" translatable="yes">Use Defaults</property> <property name="visible">True</property> - <accessibility> - <relation type="labelled-by" target="label_keyspacing"/> - </accessibility> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="draw_indicator">True</property> </object> <packing> - <property name="expand">False</property> - <property name="position">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="y_options">GTK_EXPAND</property> </packing> </child> </object> <packing> - <property name="position">1</property> + <property name="position">0</property> </packing> </child> </object> @@ -244,70 +221,89 @@ <property name="border_width">12</property> <property name="spacing">6</property> <child> - <object class="GtkVBox" id="vbox8"> + <object class="GtkTable" id="table1"> <property name="visible">True</property> - <property name="spacing">6</property> - <property name="homogeneous">True</property> + <property name="n_rows">3</property> + <property name="n_columns">2</property> + <property name="column_spacing">6</property> + <property name="row_spacing">6</property> <child> - <object class="GtkLabel" id="label4"> + <object class="GtkColorButton" id="normal_state_color_button"> <property name="visible">True</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">Normal state:</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="color">#000000000000</property> + <accessibility> + <relation type="labelled-by" target="label4"/> + </accessibility> </object> <packing> - <property name="expand">False</property> - <property name="padding">6</property> - <property name="position">0</property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> </packing> </child> <child> - <object class="GtkLabel" id="label7"> + <object class="GtkColorButton" id="mouse_over_color_button"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="color">#000000000000</property> + <accessibility> + <relation type="labelled-by" target="label7"/> + </accessibility> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label4"> <property name="visible">True</property> <property name="xalign">0</property> - <property name="label" translatable="yes">Mouse over:</property> + <property name="label" translatable="yes">Normal state:</property> + <accessibility> + <relation type="label-for" target="normal_state_color_button"/> + </accessibility> </object> <packing> - <property name="expand">False</property> - <property name="padding">6</property> - <property name="position">1</property> + <property name="x_options">GTK_FILL</property> </packing> </child> - </object> - <packing> - <property name="expand">False</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkVBox" id="vbox9"> - <property name="visible">True</property> - <property name="spacing">6</property> - <property name="homogeneous">True</property> <child> - <object class="GtkColorButton" id="normal_state_color_button"> + <object class="GtkLabel" id="label7"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <property name="color">#000000000000</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Mouse over:</property> + <accessibility> + <relation type="label-for" target="mouse_over_color_button"/> + </accessibility> </object> <packing> - <property name="position">0</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">GTK_FILL</property> </packing> </child> <child> - <object class="GtkColorButton" id="mouse_over_color_button"> + <object class="GtkCheckButton" id="default_colors_checkbox"> + <property name="label" translatable="yes">Use Defaults</property> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="receives_default">True</property> - <property name="color">#000000000000</property> + <property name="receives_default">False</property> + <property name="draw_indicator">True</property> </object> <packing> - <property name="position">1</property> + <property name="right_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> </packing> </child> </object> <packing> - <property name="position">1</property> + <property name="position">0</property> </packing> </child> </object> diff --git a/data/caribou.schemas b/data/caribou.schemas index 9e0566d..70ab261 100644 --- a/data/caribou.schemas +++ b/data/caribou.schemas @@ -33,5 +33,38 @@ <long></long> </locale> </schema> + <schema> + <key>/schemas/apps/caribou/osk/default_colors</key> + <applyto>/apps/caribou/osk/default_colors</applyto> + <owner>caribou</owner> + <type>bool</type> + <default>true</default> + <locale name="C"> + <short>Use the default theme colors</short> + <long></long> + </locale> + </schema> + <schema> + <key>/schemas/apps/caribou/osk/key_font</key> + <applyto>/apps/caribou/osk/keyboard_font</applyto> + <owner>caribou</owner> + <type>string</type> + <default>Sans 12</default> + <locale name="C"> + <short>Custom font for keyboard/short> + <long></long> + </locale> + </schema> + <schema> + <key>/schemas/apps/caribou/osk/default_font</key> + <applyto>/apps/caribou/osk/default_font</applyto> + <owner>caribou</owner> + <type>bool</type> + <default>true</default> + <locale name="C"> + <short>Use the default system font for keyboard</short> + <long></long> + </locale> + </schema> </schemalist> </gconfschemafile> |