Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/svgcard.py
diff options
context:
space:
mode:
authorMuriel de Souza Godoi <muriel@laptop.org>2007-09-20 18:40:22 (GMT)
committer Muriel de Souza Godoi <muriel@laptop.org>2007-09-20 18:40:22 (GMT)
commite3af6ee47390ac2bde75a6c31f85c091fdc3bce2 (patch)
treed1a5862820ac0548d35220c412d6faf46a267bcd /svgcard.py
parent5aed505296e2a7ab3d3ec8515f42c357c646f32b (diff)
add create game icons, create game guidevelop
New svgcard system using a cache to minimize memory usage.
Diffstat (limited to 'svgcard.py')
-rwxr-xr-xsvgcard.py166
1 files changed, 75 insertions, 91 deletions
diff --git a/svgcard.py b/svgcard.py
index d122d3e..cd88743 100755
--- a/svgcard.py
+++ b/svgcard.py
@@ -35,74 +35,69 @@ class SvgCard(gtk.DrawingArea):
# Default properties
default_props = {}
- default_props['back_border'] = {'fill_color':'#b2b3b7', 'stroke_color':'#b2b3b7', 'opacity':'1'}
- default_props['back_h_border'] = {'fill_color':'#b2b3b7', 'stroke_color':'#ffffff', 'opacity':'1'}
+ default_props['back'] = {'fill_color':'#b2b3b7', 'stroke_color':'#b2b3b7', 'opacity':'1'}
+ default_props['back_h'] = {'fill_color':'#b2b3b7', 'stroke_color':'#ffffff', 'opacity':'1'}
default_props['back_text'] = {'text_color':'#c7c8cc'}
- default_props['front_border'] = {'fill_color':'#4c4d4f', 'stroke_color':'#ffffff', 'opacity':'0'}
- default_props['front_h_border'] = {'fill_color':'#555555', 'stroke_color':'#888888', 'opacity':'0.5'}
+ default_props['front'] = {'fill_color':'#4c4d4f', 'stroke_color':'#ffffff', 'opacity':'1'}
+ default_props['front_h'] = {'fill_color':'#555555', 'stroke_color':'#888888', 'opacity':'1'}
default_props['front_text'] = {'text_color':'#ffffff'}
- def __init__(self, id, pprops, pcache, jpeg, size, align, bg_color='#000000'):
+ cache = {}
+
+ def __init__(self, id, pprops, jpeg, size, align, bg_color='#000000'):
gtk.DrawingArea.__init__(self)
self.set_size_request(size, size)
self.bg_color = bg_color
- self.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse(self.bg_color))
- self.connect('expose-event', self._expose_cb)
+ self.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse(self.bg_color))
self.flipped = False
self.flipped_once = False
self.id = id
self.jpeg = jpeg
+ self.show_jpeg = False
+ self.show_text = False
self.size = size
self.align = align
- self.set_flags(gtk.CAN_FOCUS)
# Views properties
- views = ['back_border', 'back_h_border', 'back_text', 'front_border', 'front_h_border', 'front_text']
+ views = ['back', 'back_h', 'back_text', 'front', 'front_h', 'front_text']
self.pprops = pprops
self.props = {}
for view in views:
self.props[view] = {}
self.props[view].update(self.default_props[view])
self.props[view].update(pprops.get(view, {}))
-
- # Cache
- self.cache = {}
- self.cache.update(pcache)
-
- build_all = (len(self.cache) == 0)
-
- self.build_all = build_all
-
- if build_all or pprops.has_key('back_border'):
- self.cache['back_border']= self._read_icon_data(self.props['back_border'])
- if build_all or pprops.has_key('back_h_border'):
- self.cache['back_h_border']= self._read_icon_data(self.props['back_h_border'])
-
- self.back_layout = self.get_text_layout(self.props['back_text'].get('card_text', ''), self.size-12)
- self.back_layout_position = (self.size -(self.back_layout.get_size()[1]/1000))/2
-
- if build_all or self.pprops.has_key('back_border') or self.pprops.has_key('back_text'):
- self.cache['back'] = self.build_face('back')
- if build_all or self.pprops.has_key('back_h_border') or self.pprops.has_key('back_text'):
- self.cache['back_h'] = self.build_face('back_h')
-
- self.current_pixbuf = self.cache['back']
- self.current_layout = self.back_layout
- self.current_layout_position = self.back_layout_position
- self.current_text_color = self.props['back_text'].get('text_color', '#c7c8cc')
+
+ if len(self.props['back_text'].get('card_text','')) > 0:
+ self.back_layout = self.get_text_layout(self.props['back_text']['card_text'], self.size-12)
+ self.back_layout_position = (self.size -(self.back_layout.get_size()[1]/1000))/2
+ self.current_layout = self.back_layout
+ self.current_layout_position = self.back_layout_position
+ self.current_text_color = self.props['back_text']['text_color']
+ self.show_text = True
+ self.current_face = 'back'
# Set events and listeners
+ self.connect('expose-event', self._expose_cb)
self.set_events(gtk.gdk.ALL_EVENTS_MASK)
gc.collect()
self.show()
def _expose_cb(self, widget, event):
- self.window.draw_pixbuf(None, self.current_pixbuf, 0, 0, 0, 0)
gc = self.window.new_gc()
- widget.window.draw_layout(gc, x=6, y=self.current_layout_position, layout=self.current_layout, foreground=gtk.gdk.color_parse(self.current_text_color))
+ pixbuf = self._read_icon_data(self.current_face)
+ self.window.draw_pixbuf(None, pixbuf, 0, 0, 0, 0)
+ if self.show_jpeg:
+ self.window.draw_pixbuf(None, self.jpeg, 0, 0, 11, 11)
+ if self.show_text:
+ widget.window.draw_layout(gc, x=6, y=self.current_layout_position, layout=self.current_layout, foreground=gtk.gdk.color_parse(self.current_text_color))
return False
- def _read_icon_data(self, dict):
+ def _read_icon_data(self, view):
+ dict = self.props[view]
+ set = str(self.size)+dict.get('fill_color')+dict.get('stroke_color')
+ if self.cache.has_key(set):
+ return self.cache[set]
+
icon_file = open(self.border_svg, 'r')
data = icon_file.read()
icon_file.close()
@@ -120,83 +115,73 @@ class SvgCard(gtk.DrawingArea):
data = re.sub('size_card1', str(self.size), data)
data = re.sub('size_card2', str(self.size-6), data)
data = re.sub('size_card3', str(self.size-17), data)
- return rsvg.Handle(data=data).get_pixbuf()
-
- def build_face(self, face):
- if face.endswith('_h'):
- text = face[:-2]
- else:
- text = face
- pixbuf = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, True, 8, self.size, self.size)
- pixbuf.fill(0x00000000)
- self.cache[face + '_border'].composite(pixbuf, 0, 0, self.size, self.size, 0, 0, 1, 1, gtk.gdk.INTERP_NEAREST, 255)
- if face.startswith('front') and self.jpeg <> None:
- self.cache['jpeg'].composite(pixbuf, 11, 11, self.size-22, self.size-22, 11, 11, 1, 1, gtk.gdk.INTERP_NEAREST, 255)
+ pixbuf = rsvg.Handle(data=data).get_pixbuf()
+ self.cache[set] = pixbuf
return pixbuf
def set_border(self, stroke_color, fill_color):
- self.props['front_border'].update({'fill_color':fill_color, 'stroke_color':stroke_color})
- self.cache['front_border'] = self._read_icon_data(self.props['front_border'])
- self.cache['front'] = self.build_face('front')
- self.current_pixbuf = self.cache['front']
- self.queue_draw()
+ self.props['front'].update({'fill_color':fill_color, 'stroke_color':stroke_color})
+ self.queue_draw()
+ while gtk.events_pending():
+ gtk.main_iteration()
def set_highlight(self, status, mouse = False):
if self.flipped:
if mouse:
return
if status:
- self.current_pixbuf = self.cache['front_h']
+ self.current_face = 'front_h'
else:
- self.current_pixbuf = self.cache['front']
+ self.current_face = 'front'
else:
if status:
- self.current_pixbuf = self.cache['back_h']
+ self.current_face = 'back_h'
else:
- self.current_pixbuf = self.cache['back']
+ self.current_face = 'back'
self.queue_draw()
def flip(self):
if not self.flipped:
if not self.flipped_once:
- if self.build_all or self.pprops.has_key('front_border'):
- self.cache['front_border']= self._read_icon_data(self.props['front_border'])
- if self.build_all or self.pprops.has_key('front_h_border'):
- self.cache['front_h_border']= self._read_icon_data(self.props['front_h_border'])
- self.front_layout = self.get_text_layout(self.props['front_text'].get('card_text', ''), self.size-11)
- if self.align == '2': # top
- self.front_layout_position = 6
- elif self.align == '3': # bottom
- self.front_layout_position = self.size -(self.front_layout.get_size()[1]/1000)
- else: # center and none
- self.front_layout_position = (self.size -(self.front_layout.get_size()[1]/1000))/2
if self.jpeg <> None:
pixbuf_t = gtk.gdk.pixbuf_new_from_file(self.jpeg)
- self.cache['jpeg']= pixbuf_t.scale_simple(self.size-22, self.size-22, gtk.gdk.INTERP_BILINEAR)
- del pixbuf_t
-
- if self.cache.has_key('front_border') or self.cache.has_key('front_text'):
- self.cache['front'] = self.build_face('front')
- if self.cache.has_key('front_h_border') or self.cache.has_key('front_text'):
- self.cache['front_h'] = self.build_face('front_h')
+ self.jpeg = pixbuf_t.scale_simple(self.size-22, self.size-22, gtk.gdk.INTERP_BILINEAR)
+ del pixbuf_t
+ if len(self.props.get('front_text',[]).get('card_text','')) > 0:
+ self.front_layout = self.get_text_layout(self.props['front_text']['card_text'], self.size-12)
+ self.front_layout_position = (self.size -(self.front_layout.get_size()[1]/1000))/2
self.flipped_once = True
- self.current_layout = self.front_layout
- self.current_layout_position = self.front_layout_position
- self.current_text_color = self.props['front_text'].get('text_color', '#c7c8cc')
- self.current_pixbuf = self.build_face('front')
+ if self.jpeg <> None:
+ self.show_jpeg = True
+ if len(self.props['front_text'].get('card_text','')) > 0:
+ self.current_layout = self.front_layout
+ self.current_layout_position = self.front_layout_position
+ self.current_text_color = self.props['front_text']['text_color']
+ self.show_text = True
+ else:
+ self.show_text = False
+
+ self.current_face = 'front'
+
self.flipped = True
self.queue_draw()
+
while gtk.events_pending():
gtk.main_iteration()
gc.collect()
def flop(self):
- self.current_pixbuf = self.build_face('back')
- self.current_layout = self.back_layout
- self.current_layout_position = self.back_layout_position
- self.current_text_color = self.props['back_text'].get('text_color', '#c7c8cc')
+ self.current_face = 'back'
+ if len(self.props['back_text'].get('card_text','')) > 0:
+ self.current_layout = self.back_layout
+ self.current_layout_position = self.back_layout_position
+ self.current_text_color = self.props['back_text']['text_color']
+ self.show_text = True
+ else:
+ self.show_text = False
self.flipped = False
+ self.show_jpeg = False
self.queue_draw()
def is_flipped(self):
@@ -205,13 +190,10 @@ class SvgCard(gtk.DrawingArea):
def get_id(self):
return self.id
- def get_cache(self):
- return self.cache
-
def reset(self):
if self.flipped:
fill_color = self.default_props.get('front_border').get('fill_color')
- stroke_color = self.default_props.get('front_border').get('stroke_color')
+ stroke_color = self.default_propsfront_text.get('front_border').get('stroke_color')
self.set_border(fill_color, stroke_color)
self.flop()
@@ -254,7 +236,9 @@ class SvgCard(gtk.DrawingArea):
self.current_layout = self.front_layout
self.current_layout_position = self.front_layout_position
- self.queue_draw()
-
+ self.current_text_color = self.props['front_text']['text_color']
+ if len(newtext) > 0:
+ self.show_text = True
+ self.queue_draw()
def get_text(self):
return self.props['front_text']['card_text'] \ No newline at end of file