diff --git a/pysollib/images.py b/pysollib/images.py index 4274e58a..b1585bbd 100644 --- a/pysollib/images.py +++ b/pysollib/images.py @@ -25,10 +25,12 @@ import os from pysollib.mfxutil import Image, ImageTk, USE_PIL +from pysollib.pysoltk import PIL_Image from pysollib.pysoltk import copyImage, createBottom, createImage, loadImage from pysollib.pysoltk import shadowImage from pysollib.resource import CSI from pysollib.settings import TOOLKIT +from pysollib.ui.tktile.svg import SVGManager # ************************************************************************ # * Images @@ -76,16 +78,22 @@ class Images: def destruct(self): pass - def __loadCard(self, filename, check_w=1, check_h=1): + def __loadCard(self, filename, check_w=1, check_h=1, rec=None): # print '__loadCard:', filename f = os.path.join(self.cs.dir, filename) - if not os.path.exists(f): - print('card image path %s does not exist' % (f)) - return None - try: - img = loadImage(file=f) - except Exception: - return None + if rec and 'suit' in rec: + # img = PIL_Image(image=self.svg.render_fragment("6_heart")) + img = self.svg.render_fragment( + id_="6_heart", width=self.CARDW, height=self.CARDH) + img = PIL_Image(image=img) + else: + if not os.path.exists(f): + print('card image path %s does not exist' % (f)) + return None + try: + img = loadImage(file=f) + except Exception: + return None if TOOLKIT == 'kivy': w = img.texture.size[0] @@ -170,8 +178,12 @@ class Images: pstep += self.cs.nshadows + 1 # shadows & shade pstep = max(0, (80.0 - progress.percent) / pstep) # load face cards - for n in self.cs.getFaceCardNames(): - self._card.append(self.__loadCard(n + self.cs.ext)) + self.svg = SVGManager( + '/usr/share/carddecks/' + + 'svg-ancient-egyptians/Ancient_Egyptians.svgz') + for n, rec in self.cs.getFaceCardNames(): + print(n) + self._card.append(self.__loadCard(n + self.cs.ext, rec=rec)) self._card[-1].filename = n if progress: progress.update(step=pstep) diff --git a/pysollib/resource.py b/pysollib/resource.py index 6f3add63..53ea87ae 100644 --- a/pysollib/resource.py +++ b/pysollib/resource.py @@ -355,14 +355,15 @@ class Cardset(Resource): names = [] for suit in self.suits: for rank in self.ranks: - names.append("%02d%s" % (rank + 1, suit)) + names.append(("%02d%s" % (rank + 1, suit), + {'rank': rank, 'suit': suit})) for trump in self.trumps: - names.append("%02d%s" % (trump + 1, "z")) + names.append(("%02d%s" % (trump + 1, "z"), {'trump': trump})) assert len(names) == self.ncards return names def getPreviewCardNames(self): - names = self.getFaceCardNames() + names = [x for x, _ in self.getFaceCardNames()] pnames = [] ranks, suits = self.ranks, self.suits lr, ls = len(ranks), len(suits) diff --git a/pysollib/ui/tktile/svg.py b/pysollib/ui/tktile/svg.py index b3764aa3..9d4f0297 100644 --- a/pysollib/ui/tktile/svg.py +++ b/pysollib/ui/tktile/svg.py @@ -5,30 +5,32 @@ # https://stackoverflow.com/questions/22583035 # Thanks! -import Image - -import ImageTk - import cairo -import rsvg +from gi.repository import Rsvg + +from pysollib.mfxutil import Image, ImageTk class SVGManager: """docstring for SVGManager""" def __init__(self, filename): self.filename = filename - self.svg = rsvg.Handle(filename) + self.svg = Rsvg.Handle().new_from_file(filename) - def render_fragment(self, id_): + def render_fragment(self, id_, width, height): + id__ = '#' + id_ """docstring for render_""" - width, height = self.svg.get_sub_dimension_data(id_)[:2] + dims = self.svg.get_dimensions_sub(id__)[1] + width_, height_ = dims.width, dims.height surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, - int(width), int(height)) + int(width_), int(height_)) context = cairo.Context(surface) - self.svg.render_cairo_sub(context, id_) + self.svg.render_cairo_sub(context, id__) tk_image = ImageTk.PhotoImage('RGBA') - image = Image.frombuffer('RGBA', (width, height), surface.get_data(), + image = Image.frombuffer('RGBA', (width_, height_), + bytes(surface.get_data()), 'raw', 'BGRA', 0, 1) - tk_image.paste(image) + return image.crop((0, 0, width, height)) + tk_image = ImageTk.PhotoImage(image.crop((0, 0, width, height))) return tk_image