diff options
author | Walter Bender <walter.bender@gmail.com> | 2012-10-26 14:18:52 (GMT) |
---|---|---|
committer | Walter Bender <walter.bender@gmail.com> | 2012-10-26 14:18:52 (GMT) |
commit | 6f4de22c7bc66753eaa5b67d8b002a4f6b9b1791 (patch) | |
tree | f3d448129dc143087041d422b185a498d361cd8d | |
parent | 00a82a911a615edd39cbab2d934f7e72414e60cd (diff) |
set dpi for proper font scaling
-rw-r--r-- | PortfolioActivity.py | 51 |
1 files changed, 49 insertions, 2 deletions
diff --git a/PortfolioActivity.py b/PortfolioActivity.py index ca36c01..72ff9aa 100644 --- a/PortfolioActivity.py +++ b/PortfolioActivity.py @@ -14,10 +14,13 @@ import gtk import gobject import pango +import pangocairo + import subprocess import os import time import string +from string import find from shutil import copyfile from math import sqrt, ceil @@ -115,6 +118,19 @@ BOTTOM = 1 HIDE = 0 +def _get_screen_dpi(): + '''Looking for 'dimensions' line in xdpyinfo + dimensions: 1280x800 pixels (339x212 millimeters)''' + output = check_output('/usr/bin/xdpyinfo', 'xdpyinfo failed') + if output is not None: + strings = output[find(output, 'dimensions:'):].split() + w = int(strings[1].split('x')[0]) # e.g., 1280x800 + mm = int(strings[3][1:].split('x')[0]) # e.g., (339x212) + return int((w * 25.4 / mm) + 0.5) + else: + return 96 + + class Slide(): ''' A container for a slide ''' @@ -152,6 +168,8 @@ class PortfolioActivity(activity.Activity): self._colors = profile.get_color().to_string().split(',') self.initiating = None # sharing (True) or joining (False) + self._set_screen_dpi() + self._playing = False self._first_time = True @@ -199,6 +217,11 @@ class PortfolioActivity(activity.Activity): self._setup_presence_service() + def _set_screen_dpi(self): + dpi = _get_screen_dpi() + font_map_default = pangocairo.cairo_font_map_get_default() + font_map_default.set_resolution(dpi) + def _tablet_mode(self): return False # FIXME: Sugar scrolls the window for me??? @@ -929,7 +952,8 @@ class PortfolioActivity(activity.Activity): self.desc_entry.set_justification(gtk.JUSTIFY_CENTER) self.desc_entry.set_pixels_above_lines(4) font_desc = pango.FontDescription('Sans') - font_desc.set_size(16 * pango.SCALE) + font_desc.set_size(int( + self._descriptionf * pango.SCALE * self._scale)) self.desc_entry.modify_font(font_desc) self.desc_buffer = self.desc_entry.get_buffer() self.fixed.put(self.desc_entry, 0, 0) @@ -947,7 +971,8 @@ class PortfolioActivity(activity.Activity): self.title_entry.set_justification(gtk.JUSTIFY_CENTER) self.title_entry.set_pixels_above_lines(4) font_desc = pango.FontDescription('Sans') - font_desc.set_size(24 * pango.SCALE) + font_desc.set_size(int( + self._titlef * pango.SCALE * self._scale)) self.title_entry.modify_font(font_desc) self.title_buffer = self.title_entry.get_buffer() self.fixed.put(self.title_entry, 0, 0) @@ -1600,3 +1625,25 @@ class ChatTube(ExportedGObject): @signal(dbus_interface=IFACE, signature='s') def SendText(self, text): self.stack = text + + +def check_output(command, warning): + ''' Workaround for old systems without subprocess.check_output''' + if hasattr(subprocess, 'check_output'): + try: + output = subprocess.check_output(command) + except subprocess.CalledProcessError: + log.warning(warning) + return None + else: + import commands + + cmd = '' + for c in command: + cmd += c + cmd += ' ' + (status, output) = commands.getstatusoutput(cmd) + if status != 0: + log.warning(warning) + return None + return output |