Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/sprites.py
diff options
context:
space:
mode:
authorWalter Bender <walter.bender@gmail.com>2011-10-30 09:17:39 (GMT)
committer Walter Bender <walter.bender@gmail.com>2011-10-30 09:17:39 (GMT)
commit6f619d419053f6a1cdcd30d3b6aeeef9627e3903 (patch)
tree05672d8aeaae334cfe758811e8dca9dc5a1fe0f0 /sprites.py
parent0a8a6f8c2b6a08fd227da247accae926a4741ad8 (diff)
added pangocairo support for labels with a tip of the hat to ben berg
Diffstat (limited to 'sprites.py')
-rw-r--r--sprites.py43
1 files changed, 30 insertions, 13 deletions
diff --git a/sprites.py b/sprites.py
index 2632cbb..0f22891 100644
--- a/sprites.py
+++ b/sprites.py
@@ -80,6 +80,7 @@ import pygtk
pygtk.require('2.0')
import gtk
import pango
+import pangocairo
class Sprites:
@@ -260,8 +261,8 @@ class Sprite:
''' Append to the labels attribute list '''
if self._fd is None:
self.set_font('Sans')
- # if self._color is None:
- # self._color = self._sprites.cm.alloc_color('black')
+ if self._color is None:
+ self._color = (0.5, 0.5, 0.5)
while len(self.labels) < i + 1:
self.labels.append(" ")
self._scale.append(self._scale[0])
@@ -275,7 +276,17 @@ class Sprite:
def set_label_color(self, rgb):
''' Set the font color for a label '''
- # self._color = self._sprites.cm.alloc_color(rgb)
+ COLORTABLE = {'black': '#000000', 'white': '#FFFFFF',
+ 'red': '#FF0000', 'yellow': '#FFFF00',
+ 'green': '#00FF00', 'cyan': '#00FFFF',
+ 'blue': '#0000FF', 'purple': '#FF00FF',
+ 'gray': '#808080'}
+ if rgb.lower() in COLORTABLE:
+ rgb = COLORTABLE[rgb.lower()]
+ # Convert from '#RRGGBB' to floats
+ self._color = (int('0x' + rgb[1:3], 16) / 256.,
+ int('0x' + rgb[3:5], 16) / 256.,
+ int('0x' + rgb[5:7], 16) / 256.)
return
def set_label_attributes(self, scale, rescale=True, horiz_align="center",
@@ -319,8 +330,8 @@ class Sprite:
cr.fill()
else:
print 'sprite.draw: source not a pixbuf (%s)' % (type(img))
- # if len(self.labels) > 0:
- # self.draw_label()
+ if len(self.labels) > 0:
+ self.draw_label(cr)
def hit(self, pos):
''' Is (x, y) on top of the sprite? '''
@@ -335,14 +346,18 @@ class Sprite:
return False
return True
- def draw_label(self):
+ def draw_label(self, cr):
''' Draw the label based on its attributes '''
+ # Create a pangocairo context
+ cr = pangocairo.CairoContext(cr)
my_width = self.rect.width - self._margins[0] - self._margins[2]
if my_width < 0:
my_width = 0
my_height = self.rect.height - self._margins[1] - self._margins[3]
for i in range(len(self.labels)):
- pl = self._sprites.canvas.create_pango_layout(str(self.labels[i]))
+ pl = cr.create_layout()
+ pl.set_text(str(self.labels[i]))
+ # pl = self._sprites.canvas.create_pango_layout(str(self.labels[i]))
self._fd.set_size(int(self._scale[i] * pango.SCALE))
pl.set_font_description(self._fd)
w = pl.get_size()[0] / pango.SCALE
@@ -355,8 +370,8 @@ class Sprite:
else:
j = len(self.labels[i]) - 1
while(w > my_width and j > 0):
- pl = self._sprites.canvas.create_pango_layout(
- "…" + self.labels[i][len(self.labels[i]) - j:])
+ pl.set_text(
+ "…" + self.labels[i][len(self.labels[i]) - j:])
self._fd.set_size(int(self._scale[i] * pango.SCALE))
pl.set_font_description(self._fd)
w = pl.get_size()[0] / pango.SCALE
@@ -374,10 +389,12 @@ class Sprite:
y = int(self.rect.y + self._margins[1])
else: # bottom
y = int(self.rect.y + self.rect.height - h - self._margins[3])
-
- # Need to figure out the cairo-pango way of doing this
- # self._sprites.gc.set_foreground(self._color)
- # self._sprites.area.draw_layout(self._sprites.gc, x, y, pl)
+ cr.save()
+ cr.translate(x, y)
+ cr.set_source_rgb(self._color[0], self._color[1], self._color[2])
+ cr.update_layout(pl)
+ cr.show_layout(pl)
+ cr.restore()
def label_width(self):
''' Calculate the width of a label '''