diff options
author | flavio <fdanesse@gmail.com> | 2012-10-08 22:13:16 (GMT) |
---|---|---|
committer | flavio <fdanesse@gmail.com> | 2012-10-08 22:13:16 (GMT) |
commit | af2c16abba9af8f849dcaae33e63cdc97f353715 (patch) | |
tree | db6f0f1f1b1736ca5ab2b2b23239611b78f5b5aa | |
parent | 0e4aaf0ad7bf1fe2173349c6618be9b0f2a2e6d9 (diff) |
Port to Gtk3
-rw-r--r-- | RulerActivity.py | 89 | ||||
-rw-r--r-- | activity/activity.info | 2 | ||||
-rwxr-xr-x | setup.py | 2 | ||||
-rw-r--r-- | show_grids.py | 1 | ||||
-rw-r--r-- | util.py | 47 |
5 files changed, 74 insertions, 67 deletions
diff --git a/RulerActivity.py b/RulerActivity.py index 5396726..b97b98f 100644 --- a/RulerActivity.py +++ b/RulerActivity.py @@ -16,36 +16,37 @@ # You should have received a copy of the GNU General Public License # along with Ruler. If not, see <http://www.gnu.org/licenses/> -import pygtk -pygtk.require('2.0') -import gtk -import gobject +import gi +from gi.repository import Gtk +from gi.repository import GObject +from gi.repository import GdkX11 import cairo import os.path -import sugar -from sugar.activity import activity +import sugar3 +from sugar3.activity import activity + try: # 0.86+ toolbar widgets - from sugar.graphics.toolbarbox import ToolbarBox + from sugar3.graphics.toolbarbox import ToolbarBox HAS_TOOLARBOX = True except ImportError: HAS_TOOLARBOX = False if HAS_TOOLARBOX: - from sugar.bundle.activitybundle import ActivityBundle - from sugar.activity.widgets import ActivityToolbarButton - from sugar.activity.widgets import StopButton - from sugar.graphics.toolbarbox import ToolbarButton - -from sugar.graphics.radiotoolbutton import RadioToolButton -from sugar.graphics.toolbutton import ToolButton -from sugar.graphics.menuitem import MenuItem -from sugar.graphics.icon import Icon -from sugar.datastore import datastore + from sugar3.bundle.activitybundle import ActivityBundle + from sugar3.activity.widgets import ActivityToolbarButton + from sugar3.activity.widgets import StopButton + from sugar3.graphics.toolbarbox import ToolbarButton + +from sugar3.graphics.radiotoolbutton import RadioToolButton +from sugar3.graphics.toolbutton import ToolButton +from sugar3.graphics.menuitem import MenuItem +from sugar3.graphics.icon import Icon +from sugar3.datastore import datastore try: - from sugar.graphics import style + from sugar3.graphics import style GRID_CELL_SIZE = style.GRID_CELL_SIZE except ImportError: GRID_CELL_SIZE = 0 @@ -61,26 +62,26 @@ import show_grids import show_checkers import show_angles +from sugar3.graphics import style -class MyCanvas(gtk.DrawingArea): +class MyCanvas(Gtk.DrawingArea): ''' Create a GTK+ widget on which we will draw using Cairo ''' def __init__(self): - gtk.DrawingArea.__init__(self) + + Gtk.DrawingArea.__init__(self) + self._draw_ruler = False self._object = None - self.connect('expose-event', self.__expose_event_cb) + self.connect('draw', self.__expose_event_cb) self._dpi = 96 def __expose_event_cb(self, drawing_area, event): - cr = self.window.cairo_create() + cr = self.get_property('window').cairo_create() if self._draw_ruler: self._object.draw(cr, self._dpi) - - # Restrict Cairo to the exposed area; avoid extra work - cr.rectangle(event.area.x, event.area.y, - event.area.width, event.area.height) + cr.clip() def add_a_ruler(self, r): @@ -117,8 +118,9 @@ class RulerActivity(activity.Activity): self.set_canvas(self._canvas) self._canvas.show() - width = gtk.gdk.screen_width() - height = gtk.gdk.screen_height() - GRID_CELL_SIZE + screen = GdkX11.X11Screen() + width = screen.width() + height = screen.height() - GRID_CELL_SIZE dpi, self.known_dpi = calc_dpi() self._canvas.set_dpi(dpi) @@ -182,22 +184,22 @@ class RulerActivity(activity.Activity): if not self.known_dpi: print self.known_dpi - separator = gtk.SeparatorToolItem() + separator = Gtk.SeparatorToolItem() separator.show() toolbar_box.toolbar.insert(separator, -1) dpi = self._canvas.get_dpi() - self._dpi_spin_adj = gtk.Adjustment(dpi, 72, 200, 2, 32, 0) - self._dpi_spin = gtk.SpinButton(self._dpi_spin_adj, 0, 0) + self._dpi_spin_adj = Gtk.Adjustment(dpi, 72, 200, 2, 32, 0) + self._dpi_spin = Gtk.SpinButton(self._dpi_spin_adj, 0, 0) self._dpi_spin_id = self._dpi_spin.connect('value-changed', self._dpi_spin_cb) self._dpi_spin.set_numeric(True) self._dpi_spin.show() - self.tool_item_dpi = gtk.ToolItem() + self.tool_item_dpi = Gtk.ToolItem() self.tool_item_dpi.add(self._dpi_spin) toolbar_box.toolbar.insert(self.tool_item_dpi, -1) self.tool_item_dpi.show() - separator = gtk.SeparatorToolItem() + separator = Gtk.SeparatorToolItem() separator.props.draw = False separator.set_expand(True) separator.show() @@ -303,11 +305,13 @@ class RulerActivity(activity.Activity): self.metadata['dpi'] = str(dpi) -class ProjectToolbar(gtk.Toolbar): +class ProjectToolbar(Gtk.Toolbar): ''' Project toolbar for pre-0.86 toolbars ''' def __init__(self, pc): - gtk.Toolbar.__init__(self) + + Gtk.Toolbar.__init__(self) + self.activity = pc # Ruler @@ -343,21 +347,21 @@ class ProjectToolbar(gtk.Toolbar): self.activity.checker.show() if not self.activity.known_dpi: - separator = gtk.SeparatorToolItem() + separator = Gtk.SeparatorToolItem() separator.set_draw(True) self.insert(separator, -1) separator.show() dpi = self.activity._canvas.get_dpi() - self.activity._dpi_spin_adj = gtk.Adjustment( + self.activity._dpi_spin_adj = Gtk.Adjustment( dpi, 72, 200, 2, 32, 0) self.activity._dpi_spin = \ - gtk.SpinButton(self.activity._dpi_spin_adj, 0, 0) + Gtk.SpinButton(self.activity._dpi_spin_adj, 0, 0) self.activity._dpi_spin_id = self.activity._dpi_spin.connect( 'value-changed', self.activity._dpi_spin_cb) self.activity._dpi_spin.set_numeric(True) self.activity._dpi_spin.show() - self.activity.tool_item_dpi = gtk.ToolItem() + self.activity.tool_item_dpi = Gtk.ToolItem() self.activity.tool_item_dpi.add(self.activity._dpi_spin) self.insert(self.activity.tool_item_dpi, -1) self.activity.tool_item_dpi.show() @@ -372,14 +376,15 @@ class MyButton(RadioToolButton): if icon_name == '': icon_name = 'computer-xo' icon = Icon(icon_name=icon_name, - icon_size=gtk.ICON_SIZE_LARGE_TOOLBAR) + icon_size=style.GRID_CELL_SIZE) self.set_icon_widget(icon) icon.show() if tooltip is not None: self.set_tooltip(tooltip) self.props.sensitive = True self.connect('clicked', callback) - self.set_group(group) + # FIXME: Argument 1 does not allow None as a value + #self.set_group(group) self.show() parent.button_dict[name] = self @@ -387,6 +392,6 @@ class MyButton(RadioToolButton): def set_icon(self, name): icon = Icon(icon_name=name, - icon_size=gtk.ICON_SIZE_LARGE_TOOLBAR) + icon_size=style.GRID_CELL_SIZE) self.set_icon_widget(icon) icon.show() diff --git a/activity/activity.info b/activity/activity.info index cfa2cde..09a7012 100644 --- a/activity/activity.info +++ b/activity/activity.info @@ -3,6 +3,6 @@ name = Ruler bundle_id = com.laptop.Ruler exec = sugar-activity RulerActivity.RulerActivity icon = activity-ruler -activity_version = 19 +activity_version = 20 show_launcher = yes license = GPLv3+ @@ -1,5 +1,5 @@ #!/usr/bin/env python -from sugar.activity import bundlebuilder +from sugar3.activity import bundlebuilder if __name__ == "__main__": bundlebuilder.start() diff --git a/show_grids.py b/show_grids.py index 0795be7..f050e50 100644 --- a/show_grids.py +++ b/show_grids.py @@ -15,7 +15,6 @@ # You should have received a copy of the GNU General Public License # along with Ruler. If not, see <http://www.gnu.org/licenses/> -import gtk import cairo from util import mm, dimensions_mm, set_background_color, write @@ -16,10 +16,10 @@ # You should have received a copy of the GNU General Public License # along with Ruler. If not, see <http://www.gnu.org/licenses/> -import pygtk -pygtk.require('2.0') -import gtk -import gobject +import gi +from gi.repository import Gtk +from gi.repository import Gdk +from gi.repository import GObject import dbus @@ -27,8 +27,8 @@ import os import commands from string import find -import pango -import pangocairo +from gi.repository import Pango +from gi.repository import PangoCairo XO1 = 'xo1' XO15 = 'xo1.5' @@ -98,38 +98,41 @@ def calc_dpi(): def set_background_color(c, w, h): c.save() c.rectangle(0, 0, w, h) - c.set_source_color(gtk.gdk.color_parse('white')) + Gdk.cairo_set_source_color(c, Gdk.color_parse('white')) c.fill() c.restore() def set_color(c, name): - c.set_source_color(gtk.gdk.color_parse(name)) + Gdk.cairo_set_source_color(c, Gdk.color_parse(name)) def write(c, text, name, size, centered=False, at_top=False): - pc = pangocairo.CairoContext(c) + pc = PangoCairo.create_context(c) - font = pango.FontDescription(name) - font.set_size(int(round(size * pango.SCALE))) - lo = pc.create_layout() + font = Pango.FontDescription(name) + font.set_size(int(round(size * Pango.SCALE))) + lo = PangoCairo.create_layout(pc) lo.set_font_description(font) - lo.set_text('X') - extent = [x / pango.SCALE for x in lo.get_extents()[1]] - ex, ey = extent[2], extent[3] - baseline_offset = -ey + lo.set_text('X', -1) + baseline_offset = lo.get_baseline() / Pango.SCALE if not at_top: - c.rel_move_to(0, baseline_offset) + c.rel_move_to(0, -baseline_offset) - lo = pc.create_layout() lo.set_font_description(font) - lo.set_text(text) - extent = [x / pango.SCALE for x in lo.get_extents()[1]] - ex, ey = extent[2], extent[3] + lo.set_text(text, -1) + if hasattr(lo, 'get_logical_extents'): + extents = lo.get_logical_extents() + ex = extents.get_width() / Pango.SCALE + else: + ex = size + if centered: c.rel_move_to(-ex / 2, 0) - pc.show_layout(lo) + PangoCairo.update_layout(c, lo) + PangoCairo.show_layout(c, lo) c.rel_move_to(ex, 0) if not at_top: c.rel_move_to(0, -baseline_offset) +
\ No newline at end of file |