sugar-toolkit-gtk3/src/sugar3/graphics/style.py

155 lines
4.3 KiB
Python
Raw Normal View History

# Copyright (C) 2007, Red Hat, Inc.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the
# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.
"""
All the constants are expressed in pixels. They are defined for the XO screen
and are usually adapted to different resolution by applying a zoom factor.
STABLE.
"""
import os
import logging
from gi.repository import Gdk
from gi.repository import Pango
2013-12-26 16:53:36 +01:00
from gi.repository import Gio
2009-08-25 21:12:40 +02:00
2009-08-01 13:27:56 +02:00
FOCUS_LINE_WIDTH = 2
_TAB_CURVATURE = 1
ELLIPSIZE_MODE_DEFAULT = Pango.EllipsizeMode.END
2009-08-25 21:12:40 +02:00
def _compute_zoom_factor():
try:
scaling = int(os.environ.get('SUGAR_SCALING', '100'))
return scaling / 100.0
except ValueError:
logging.error('Invalid SUGAR_SCALING.')
return 1.0
2009-08-25 21:12:40 +02:00
class Font(object):
2009-08-25 21:12:40 +02:00
def __init__(self, desc):
self._desc = desc
def __str__(self):
return self._desc
def get_pango_desc(self):
return Pango.FontDescription(self._desc)
2009-08-25 21:12:40 +02:00
class Color(object):
2009-08-25 21:12:40 +02:00
2007-07-11 12:35:13 +02:00
def __init__(self, color, alpha=1.0):
self._r, self._g, self._b = self._html_to_rgb(color)
self._a = alpha
def get_rgba(self):
return (self._r, self._g, self._b, self._a)
def get_int(self):
return int(self._a * 255) + (int(self._b * 255) << 8) + \
2013-05-18 04:27:04 +02:00
(int(self._g * 255) << 16) + (int(self._r * 255) << 24)
def get_gdk_color(self):
return Gdk.Color(int(self._r * 65535), int(self._g * 65535),
2013-05-18 04:27:04 +02:00
int(self._b * 65535))
def get_html(self):
return '#%02x%02x%02x' % (self._r * 255, self._g * 255, self._b * 255)
def _html_to_rgb(self, html_color):
""" #RRGGBB -> (r, g, b) tuple (in float format) """
html_color = html_color.strip()
if html_color[0] == '#':
html_color = html_color[1:]
if len(html_color) != 6:
raise ValueError('input #%s is not in #RRGGBB format' % html_color)
r, g, b = html_color[:2], html_color[2:4], html_color[4:]
r, g, b = [int(n, 16) for n in (r, g, b)]
r, g, b = (r / 255.0, g / 255.0, b / 255.0)
return (r, g, b)
def get_svg(self):
if self._a == 0.0:
return 'none'
else:
return self.get_html()
2009-08-25 21:12:40 +02:00
def zoom(units):
return int(ZOOM_FACTOR * units)
2009-08-25 21:12:40 +02:00
ZOOM_FACTOR = _compute_zoom_factor()
DEFAULT_SPACING = zoom(15)
2007-07-31 15:02:50 +02:00
DEFAULT_PADDING = zoom(6)
2007-07-31 15:21:09 +02:00
GRID_CELL_SIZE = zoom(75)
2007-07-18 14:55:26 +02:00
LINE_WIDTH = zoom(2)
STANDARD_ICON_SIZE = zoom(55)
SMALL_ICON_SIZE = zoom(33)
MEDIUM_ICON_SIZE = zoom(55 * 1.5)
LARGE_ICON_SIZE = zoom(55 * 2.0)
XLARGE_ICON_SIZE = zoom(55 * 2.75)
Allow to run activities without Sugar shell. - Handle lack of GSettings gracefully. - Still requires sugar-datastore. - Supports avoiding X11 docks/panels. - Provides icons for Activity windows. Try it outside Sugar. Go to an Activity directory and run 'sugar-activity'. Tested it with Terminal, Finance, Write, Browse, Memorize under XFCE4. Tested in Gnome under OLPC-OS. Also works from Sugar Terminal Activity. Does not affect regular Sugar operation. This is patch v.2 - Addresses most concerns: - Removed commented code, sorry. - Changed code to use profile.get_nickname and get_color where possible. Couldn't the launcher just pass this info? Maybe the launcher could set the activity root as well? - It is intended to be usable from the command line also. Should put sugar version in the environment - It is intended to work even without Sugar Shell installed. Why don't we always set the icon? - On XO it might use some memory. I was concerned to degrade performance. Also, imports should be at the top of the file? - Also a concern about performance on XO. This way it is only loaded in this use case. Maybe it is insignificant -moved as requested. It would be nice if the changes to the POT for sugar-toolkit-gtk3 could be incorporated in this pull request, please. - There were no changes to POT files as part of this patch. Maybe it is worth translating low level command line tools, not sure. Suggest packaged activities might also provide .desktop files. - Intriguing but not sure within scope of this patch. You mean generate a .desktop file automatically as an option? Sounds nice! Suggest sugar-activity might also accept path to unpacked bundle. - Implemented!
2016-04-17 07:57:07 +02:00
if 'org.sugarlabs.font' in Gio.Settings.list_schemas():
settings = Gio.Settings('org.sugarlabs.font')
FONT_SIZE = settings.get_double('default-size')
FONT_FACE = settings.get_string('default-face')
else:
FONT_SIZE = 10
FONT_FACE = 'Sans Serif'
FONT_NORMAL = Font('%s %f' % (FONT_FACE, FONT_SIZE))
FONT_BOLD = Font('%s bold %f' % (FONT_FACE, FONT_SIZE))
FONT_NORMAL_H = zoom(24)
FONT_BOLD_H = zoom(24)
TOOLBOX_SEPARATOR_HEIGHT = zoom(9)
TOOLBOX_HORIZONTAL_PADDING = zoom(75)
2009-08-01 13:27:56 +02:00
TOOLBOX_TAB_VBORDER = int((zoom(36) - FONT_NORMAL_H - FOCUS_LINE_WIDTH) / 2)
TOOLBOX_TAB_HBORDER = zoom(15) - FOCUS_LINE_WIDTH - _TAB_CURVATURE
TOOLBOX_TAB_LABEL_WIDTH = zoom(150 - 15 * 2)
COLOR_BLACK = Color('#000000')
2007-07-11 12:35:13 +02:00
COLOR_WHITE = Color('#FFFFFF')
COLOR_TRANSPARENT = Color('#FFFFFF', alpha=0.0)
COLOR_PANEL_GREY = Color('#C0C0C0')
2007-07-18 14:55:26 +02:00
COLOR_SELECTION_GREY = Color('#A6A6A6')
COLOR_TOOLBAR_GREY = Color('#282828')
2007-08-16 16:46:21 +02:00
COLOR_BUTTON_GREY = Color('#808080')
2007-07-31 14:05:14 +02:00
COLOR_INACTIVE_FILL = Color('#9D9FA1')
COLOR_INACTIVE_STROKE = Color('#757575')
2007-08-24 11:44:44 +02:00
COLOR_TEXT_FIELD_GREY = Color('#E5E5E5')
COLOR_HIGHLIGHT = Color('#E7E7E7')
PALETTE_CURSOR_DISTANCE = zoom(10)
2009-07-30 13:29:52 +02:00
TOOLBAR_ARROW_SIZE = zoom(24)
2014-01-08 14:35:16 +01:00
2014-01-08 14:51:10 +01:00
MENU_WIDTH_CHARS = 60