Beispiel #1
0
class _TwoImageCard(_HideableCard):
    # Private instance variables:
    #   __face, __back -- the canvas items making up the card
    def __init__(self, id, deck, suit, rank, game, x=0, y=0):
        _HideableCard.__init__(self, id, deck, suit, rank, game, x=x, y=y)
        self.item = MfxCanvasGroup(game.canvas)
        self.__face = MfxCanvasImage(game.canvas, self.x, self.y, image=game.getCardFaceImage(deck, suit, rank), anchor="nw")
        self.__back = MfxCanvasImage(game.canvas, self.x, self.y, image=game.getCardBackImage(deck, suit, rank), anchor="nw")
        self.__face.addtag(self.item)
        self.__back.addtag(self.item)

    def showFace(self, unhide=1):
        if not self.face_up:
            self.__face.tkraise()
            self.tkraise(unhide)
            self.face_up = 1

    def showBack(self, unhide=1):
        if self.face_up:
            self.__back.tkraise()
            self.tkraise(unhide)
            self.face_up = 0

    def updateCardBackground(self, image):
        self.__back.config(image=image)
Beispiel #2
0
 def __init__(self, id, deck, suit, rank, game, x=0, y=0):
     _HideableCard.__init__(self, id, deck, suit, rank, game, x=x, y=y)
     self.item = MfxCanvasGroup(game.canvas)
     self.__face = MfxCanvasImage(game.canvas, self.x, self.y + 11000, image=game.getCardFaceImage(deck, suit, rank), anchor="nw")
     self.__back = MfxCanvasImage(game.canvas, self.x, self.y, image=game.getCardBackImage(deck, suit, rank), anchor="nw")
     self.__face.addtag(self.item)
     self.__back.addtag(self.item)
Beispiel #3
0
 def createCardLabel(self, suit, rank, x0, y0):
     dx, dy = self.label_width, self.label_height
     dir = self.images_dir
     canvas = self.canvas
     group = MfxCanvasGroup(canvas)
     #
     im = FindCardDialog.CARD_IMAGES.get((rank, suit))
     if im is None:
         r = '%02d' % (rank+1)
         s = 'cshd'[suit]
         fn = os.path.join(dir, r+s+'.gif')
         im = makeImage(file=fn)
         FindCardDialog.CARD_IMAGES[(rank, suit)] = im
     cim = MfxCanvasImage(canvas, x0, y0, image=im, anchor='nw')
     cim.addtag(group)
     cim.lower()
     #
     rect_width = 4
     x1, y1 = x0+dx, y0+dy
     rect = MfxCanvasRectangle(self.canvas, x0+1, y0+1, x1-1, y1-1,
                               width=rect_width,
                               fill=None,
                               outline='red',
                               state='hidden'
                               )
     rect.addtag(group)
     #
     bind(group, '<Enter>',
          lambda e, suit=suit, rank=rank, rect=rect:
              self.enterEvent(suit, rank, rect, group))
     bind(group, '<Leave>',
          lambda e, suit=suit, rank=rank, rect=rect:
              self.leaveEvent(suit, rank, rect, group))
     self.groups.append(group)
Beispiel #4
0
class _OneImageCard(_HideableCard):
    def __init__(self, id, deck, suit, rank, game, x=0, y=0):
        _HideableCard.__init__(self, id, deck, suit, rank, game, x=x, y=y)
        self._face_image = game.getCardFaceImage(deck, suit, rank)
        self._back_image = game.getCardBackImage(deck, suit, rank)
        self._shade_image = game.getCardShadeImage()
        self._active_image = self._back_image
        self.item = MfxCanvasImage(game.canvas,
                                   self.x,
                                   self.y,
                                   image=self._active_image,
                                   anchor="nw")
        self.shade_item = None
        # self._setImage = self.item.config

    def _setImage(self, image):
        if image is not self._active_image:
            self.item.config(image=image)
            self._active_image = image

    def showFace(self, unhide=1):
        if not self.face_up:
            self._setImage(image=self._face_image)
            self.tkraise(unhide)
            self.face_up = 1

    def showBack(self, unhide=1):
        if self.face_up:
            self._setImage(image=self._back_image)
            self.tkraise(unhide)
            self.face_up = 0

    def updateCardBackground(self, image):
        self._back_image = image
        if not self.face_up:
            self._setImage(image=image)

    #
    # optimized by inlining
    #

    def moveBy(self, dx, dy):
        dx, dy = int(dx), int(dy)
        self.x = self.x + dx
        self.y = self.y + dy
        item = self.item
        item.canvas.tk.call(item.canvas._w, "move", item.id, dx, dy)

    # for resize
    def update(self, id, deck, suit, rank, game):
        self._face_image = game.getCardFaceImage(deck, suit, rank)
        self._back_image = game.getCardBackImage(deck, suit, rank)
        self._shade_image = game.getCardShadeImage()
        if self.face_up:
            img = self._face_image
        else:
            img = self._back_image
        self.item.config(image=img)
        self._active_image = img
Beispiel #5
0
 def __init__(self, id, deck, suit, rank, game, x=0, y=0):
     _HideableCard.__init__(self, id, deck, suit, rank, game, x=x, y=y)
     self._face_image = game.getCardFaceImage(deck, suit, rank)
     self._back_image = game.getCardBackImage(deck, suit, rank)
     self._shade_image = game.getCardShadeImage()
     self._active_image = self._back_image
     self.item = MfxCanvasImage(game.canvas, self.x, self.y, image=self._active_image, anchor="nw")
     self.shade_item = None
Beispiel #6
0
class _OneImageCard(_HideableCard):
    def __init__(self, id, deck, suit, rank, game, x=0, y=0):
        _HideableCard.__init__(self, id, deck, suit, rank, game, x=x, y=y)
        self._face_image = game.getCardFaceImage(deck, suit, rank)
        self._back_image = game.getCardBackImage(deck, suit, rank)
        self._shade_image = game.getCardShadeImage()
        self._active_image = self._back_image
        self.item = MfxCanvasImage(
            game.canvas, self.x, self.y, image=self._active_image, anchor="nw")
        self.shade_item = None
        # self._setImage = self.item.config

    def _setImage(self, image):
        if image is not self._active_image:
            self.item.config(image=image)
            self._active_image = image

    def showFace(self, unhide=1):
        if not self.face_up:
            self._setImage(image=self._face_image)
            self.tkraise(unhide)
            self.face_up = 1

    def showBack(self, unhide=1):
        if self.face_up:
            self._setImage(image=self._back_image)
            self.tkraise(unhide)
            self.face_up = 0

    def updateCardBackground(self, image):
        self._back_image = image
        if not self.face_up:
            self._setImage(image=image)

    #
    # optimized by inlining
    #

    def moveBy(self, dx, dy):
        dx, dy = int(dx), int(dy)
        self.x = self.x + dx
        self.y = self.y + dy
        item = self.item
        item.canvas.tk.call(item.canvas._w, "move", item.id, dx, dy)

    # for resize
    def update(self, id, deck, suit, rank, game):
        self._face_image = game.getCardFaceImage(deck, suit, rank)
        self._back_image = game.getCardBackImage(deck, suit, rank)
        self._shade_image = game.getCardShadeImage()
        if self.face_up:
            img = self._face_image
        else:
            img = self._back_image
        self.item.config(image=img)
        self._active_image = img
Beispiel #7
0
    def updatePreview(self, key=None):
        if key == self.preview_key:
            return
        if key is None:
            key = self.key
        canvas = self.preview.canvas
        canvas.deleteAllItems()
        self.preview_images = []
        cs = self.manager.get(key)
        if not cs:
            self.preview_key = -1
            return
        names, columns = cs.getPreviewCardNames()

        # if cardset has changed, set default values
        if key != self.preview_key and USE_PIL:
            self.x_offset.config(value=cs.CARD_XOFFSET)
            self.x_offset.set(cs.CARD_XOFFSET)

            self.y_offset.config(value=cs.CARD_YOFFSET)
            self.y_offset.set(cs.CARD_YOFFSET)

        try:
            # ???names, columns = cs.getPreviewCardNames()
            for n in names:
                f = os.path.join(cs.dir, n + cs.ext)
                self.preview_images.append(loadImage(file=f))
        except Exception:
            self.preview_key = -1
            self.preview_images = []
            return
        i, x, y, sx, sy, dx, dy = 0, 10, 10, 0, 0, cs.CARDW + 10, cs.CARDH + 10
        if USE_PIL:
            xf = self.scale_x.get()
            yf = self.scale_y.get()
            dx = int(dx * xf)
            dy = int(dy * yf)
            self.scale_images = []
        for image in self.preview_images:
            if USE_PIL:
                image = image.resize(xf, yf)
                self.scale_images.append(image)
            MfxCanvasImage(canvas, x, y, anchor="nw", image=image)
            sx, sy = max(x, sx), max(y, sy)
            i = i + 1
            if i % columns == 0:
                x, y = 10, y + dy
            else:
                x = x + dx
        canvas.config(scrollregion=(0, 0, sx + dx, sy + dy),
                      width=sx + dx,
                      height=sy + dy)
        # canvas.config(xscrollincrement=dx, yscrollincrement=dy)
        canvas.event_generate('<Configure>')  # update bg image
        self.preview_key = key
        self.key = key
 def createCardLabel(self, suit, rank, x0, y0):
     dx, dy = self.label_width, self.label_height
     dir = self.images_dir
     canvas = self.canvas
     group = MfxCanvasGroup(canvas)
     #
     im = FindCardDialog.CARD_IMAGES.get((rank, suit))
     if im is None:
         r = '%02d' % (rank+1)
         s = 'cshd'[suit]
         fn = os.path.join(dir, r+s+'.gif')
         im = makeImage(file=fn)
         FindCardDialog.CARD_IMAGES[(rank, suit)] = im
     cim = MfxCanvasImage(canvas, x0, y0, image=im, anchor='nw')
     cim.addtag(group)
     cim.lower()
     #
     rect_width = 4
     x1, y1 = x0+dx, y0+dy
     rect = MfxCanvasRectangle(self.canvas, x0+1, y0+1, x1-1, y1-1,
                               width=rect_width,
                               fill=None,
                               outline='red',
                               state='hidden'
                               )
     rect.addtag(group)
     #
     bind(group, '<Enter>',
          lambda e, suit=suit, rank=rank, rect=rect:
              self.enterEvent(suit, rank, rect, group))
     bind(group, '<Leave>',
          lambda e, suit=suit, rank=rank, rect=rect:
              self.leaveEvent(suit, rank, rect, group))
     self.groups.append(group)