[Sugar-devel] [PATCH sugar-toolkit] Clipboard menu off screen #2201
Aleksey Lim
alsroot at member.fsf.org
Sat Dec 18 00:25:44 EST 2010
New font.char_width property to return approximate char width. Set Palette's
text_maxlen to a half of the screen by defualt.
---
src/sugar/graphics/palette.py | 21 +++++++++++++++++----
src/sugar/graphics/style.py | 40 ++++++++++++++++++++++++++++++++++++----
2 files changed, 53 insertions(+), 8 deletions(-)
diff --git a/src/sugar/graphics/palette.py b/src/sugar/graphics/palette.py
index 46f167b..b542407 100644
--- a/src/sugar/graphics/palette.py
+++ b/src/sugar/graphics/palette.py
@@ -45,10 +45,23 @@ class Palette(PaletteWindow):
__gtype_name__ = 'SugarPalette'
def __init__(self, label=None, accel_path=None, menu_after_content=False,
- text_maxlen=60, **kwargs):
- # DEPRECATED: label is passed with the primary-text property,
- # accel_path is set via the invoker property, and menu_after_content
- # is not used
+ text_maxlen=None, **kwargs):
+ """Constructor.
+
+ Keyword arguments:
+ label -- DEPRECATED, is passed with the primary-text property
+ accel_path -- DEPRECATED, is set via the invoker property
+ menu_after_content -- DEPRECATED, is not used
+ text_maxlen -- max length of palette titles after that it becomes
+ ellipsized, possible values:
+ None -- autodetect most appropriate value, by default
+ <= 0 -- do not ellipsize titles
+ > 0 -- valid width value
+
+ """
+ if text_maxlen is None:
+ text_maxlen = (gtk.gdk.screen_width() / 2) / \
+ style.FONT_DEFAULT.char_width
self._primary_text = None
self._secondary_text = None
diff --git a/src/sugar/graphics/style.py b/src/sugar/graphics/style.py
index 7f48d9a..e8dc768 100644
--- a/src/sugar/graphics/style.py
+++ b/src/sugar/graphics/style.py
@@ -45,15 +45,46 @@ def _compute_zoom_factor():
class Font(object):
+ """High level font information."""
- def __init__(self, desc):
- self._desc = desc
+ def __init__(self, desc=None):
+ """Constructor.
+
+ Keyword arguments:
+ desc -- string with font description
+
+ """
+ default_context = gtk.Label().get_pango_context()
+
+ if desc is None:
+ self._desc = default_context.get_font_description()
+ else:
+ self._desc = pango.FontDescription(desc)
+
+ metrics = default_context.get_metrics(self._desc)
+ self._char_width = max(metrics.get_approximate_char_width(),
+ metrics.get_approximate_digit_width()) / pango.SCALE
def __str__(self):
- return self._desc
+ return self._desc.to_string()
def get_pango_desc(self):
- return pango.FontDescription(self._desc)
+ """Returns pango font description object."""
+ return self._desc
+
+ pango_desc = property(get_pango_desc)
+
+ def get_char_width(self):
+ """Approximate char width.
+
+ This is merely a representative value that is useful, for example, for
+ determining the initial size for a window. Actual characters in text
+ will be wider and narrower than this.
+
+ """
+ return self._char_width
+
+ char_width = property(get_char_width)
class Color(object):
@@ -119,6 +150,7 @@ client = gconf.client_get_default()
FONT_SIZE = client.get_float('/desktop/sugar/font/default_size')
FONT_FACE = client.get_string('/desktop/sugar/font/default_face')
+FONT_DEFAULT = Font()
FONT_NORMAL = Font('%s %f' % (FONT_FACE, FONT_SIZE))
FONT_BOLD = Font('%s bold %f' % (FONT_FACE, FONT_SIZE))
FONT_NORMAL_H = zoom(24)
--
1.7.3.3
More information about the Sugar-devel
mailing list