Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWalter 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)
commit2eebb84377952aaf2788241383f8f67e094914a9 (patch)
tree16ab39259528d100c175d2f8cdaa0a85df698c91
parent7bd54fbd659e2c653a3600a227498f8d2a81484c (diff)
added dpi checkingv4
-rw-r--r--NEWS5
-rw-r--r--activity/activity.info2
-rw-r--r--show_rulers.py24
-rw-r--r--subactivity.py8
-rw-r--r--util.py33
5 files changed, 59 insertions, 13 deletions
diff --git a/NEWS b/NEWS
new file mode 100644
index 0000000..49d7bea
--- /dev/null
+++ b/NEWS
@@ -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}
diff --git a/util.py b/util.py
index ceebbe0..73bccda 100644
--- a/util.py
+++ b/util.py
@@ -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)
+