diff options
author | Eitan Isaacson <eitan@monotonous.org> | 2010-08-16 09:50:59 -0700 |
---|---|---|
committer | Eitan Isaacson <eitan@monotonous.org> | 2010-08-16 10:00:58 -0700 |
commit | f55c465101446d1543be10e666f6de7a3647775f (patch) | |
tree | 6b04011eac370de7242777df03304b06cd150c94 /caribou | |
parent | 75ad6b94f583d55f30eac5cdab518dbec1c421ea (diff) | |
download | caribou-f55c465101446d1543be10e666f6de7a3647775f.tar.gz |
Allow user to change key font and size.
https://bugzilla.gnome.org/show_bug.cgi?id=622163
Diffstat (limited to 'caribou')
-rw-r--r-- | caribou/ui/keyboard.py | 120 | ||||
-rw-r--r-- | caribou/ui/window.py | 8 |
2 files changed, 107 insertions, 21 deletions
diff --git a/caribou/ui/keyboard.py b/caribou/ui/keyboard.py index 0590924..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 @@ -95,7 +96,27 @@ class KeyboardPreferences: 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) @@ -108,23 +129,16 @@ 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): @@ -160,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): @@ -187,8 +204,29 @@ 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): rcstyle = self.get_modifier_style() @@ -234,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) @@ -361,7 +400,36 @@ class CaribouKeyboard(gtk.Notebook): 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() @@ -387,19 +455,25 @@ 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_key_style() + def _key_font_changed(self, client, connection_id, entry, args): + self.reset_row_height() + self._update_key_style() + 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") 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) @@ -410,6 +484,10 @@ class CaribouKeyboard(gtk.Notebook): 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): |