diff options
author | Walter Bender <walter@walter-laptop.(none)> | 2009-06-13 15:05:01 (GMT) |
---|---|---|
committer | Walter Bender <walter@walter-laptop.(none)> | 2009-06-13 15:05:01 (GMT) |
commit | 2eebb84377952aaf2788241383f8f67e094914a9 (patch) | |
tree | 16ab39259528d100c175d2f8cdaa0a85df698c91 | |
parent | 7bd54fbd659e2c653a3600a227498f8d2a81484c (diff) |
added dpi checkingv4
-rw-r--r-- | NEWS | 5 | ||||
-rw-r--r-- | activity/activity.info | 2 | ||||
-rw-r--r-- | show_rulers.py | 24 | ||||
-rw-r--r-- | subactivity.py | 8 | ||||
-rw-r--r-- | util.py | 33 |
5 files changed, 59 insertions, 13 deletions
@@ -0,0 +1,5 @@ +4 + +* look up dpi from xdpyinfo +* eliminate offset on non-OLPC-XO computers + diff --git a/activity/activity.info b/activity/activity.info index 79a3532..6c70e5c 100644 --- a/activity/activity.info +++ b/activity/activity.info @@ -3,6 +3,6 @@ name = Ruler service_name = com.laptop.Ruler class = RulerActivity.RulerActivity icon = activity-ruler -activity_version = 3 +activity_version = 4 show_launcher = yes license = GPLv3+ diff --git a/show_rulers.py b/show_rulers.py index 7c2ef59..126ad78 100644 --- a/show_rulers.py +++ b/show_rulers.py @@ -1,4 +1,5 @@ # Copyright 2007 Mitchell N. Charity +# Copyright 2009 Walter Bender # # This file is part of Ruler. # @@ -19,6 +20,7 @@ from __future__ import division import paper import cairo from util import mm +import os.path def subactivity_init(api): api.declare_subactivity('ruler', ScreenOfRulers()) @@ -31,13 +33,23 @@ class ScreenOfRulers(paper.Drawing): self.draw_ruler_pair(c,mm(20)) - offset_of_xo_side_from_screen = mm(-38.5) #XXX needs checking - c.move_to(offset_of_xo_side_from_screen, mm(65)) - self.draw_cm_ruler(c,180) + # only calculate offsets if on an OLPC XO-1 + if os.path.exists('/sys/power/olpc-pm'): + offset_of_xo_side_from_screen = mm(-38.5) #XXX needs checking + c.move_to(offset_of_xo_side_from_screen, mm(65)) + self.draw_cm_ruler(c,180) - offset_of_molding_from_screen = mm(-0.4) #XXX +- 0.2 ?? - c.move_to(offset_of_molding_from_screen, mm(100)) - self.draw_cm_ruler(c,150) + offset_of_molding_from_screen = mm(-0.4) #XXX +- 0.2 ?? + c.move_to(offset_of_molding_from_screen, mm(100)) + self.draw_cm_ruler(c,150) + else: + offset_of_xo_side_from_screen = mm(0) + c.move_to(offset_of_xo_side_from_screen, mm(65)) + self.draw_cm_ruler(c,180) + + offset_of_molding_from_screen = mm(0) + c.move_to(offset_of_molding_from_screen, mm(100)) + self.draw_cm_ruler(c,150) def draw_ruler_pair(self,c,y): diff --git a/subactivity.py b/subactivity.py index 8657500..e53b958 100644 --- a/subactivity.py +++ b/subactivity.py @@ -1,4 +1,5 @@ # Copyright 2007 Mitchell N. Charity +# Copyright 2009 Walter Bender # # This file is part of Ruler. # @@ -17,10 +18,12 @@ import gtk import sugar -import util +from util import calc_dpi from sugar.activity import activity from gettext import gettext as _ +dpi = 96 # reasonable default + class Activity(activity.Activity): def __init__(self, handle, browser=None): @@ -40,10 +43,10 @@ class Activity(activity.Activity): self.set_canvas(self._page_box) self.page = None + dpi = calc_dpi() self._init_api = SubActivityInitApi(self) self.configure_subactivities() - def set_page(self,widget): for w in self._page_box.get_children(): @@ -54,7 +57,6 @@ class Activity(activity.Activity): self.page = widget - def add_subactivity(self,module_name): d = {'api': self._init_api} @@ -1,4 +1,5 @@ # Copyright 2007 Mitchell N. Charity +# Copyright 2009 Walter Bender # # This file is part of Ruler. # @@ -17,7 +18,9 @@ import gtk import os -#import sugar +import subprocess +import re +import subactivity def full_path(*args): return os.path.join(sugar.activity.activity.get_bundle_path(),*args) @@ -28,7 +31,6 @@ def image_from_file(filename): img.set_from_file(fn) return img - def toolbutton_from_image(img): button = sugar.graphics.toolbutton.ToolButton('go-next') #X button.set_icon_widget(img) @@ -37,4 +39,29 @@ def toolbutton_from_image(img): return button def mm(n): - return n / 25.40 * 200 + return n / 25.40 * subactivity.dpi + +def calc_dpi(): +# will use xrdb query to get dpi +# $ xdpyinfo +# looking for something similar to " resolution: 96x96 dots per inch" + + cmd = "/usr/bin/xdpyinfo" + try: + proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE) + xrdb_output = re.split("\n",proc.communicate()[0]) + for i in xrdb_output: + if i != "": + a = re.split(":",i) + if a[0] == ' resolution': + for b in re.split("\s",a[1]): + if b != "": + c = re.split("x",b) + if len(c) > 1: + print "looking up dpi: " + c[0] + return(int(c[0])) + except: + # just in case the above fails + print "defaulting to 96 dpi" + return(96) + |