class PenWidth(Command): def __init__(self, x=None, y=None, w=None, h=None, vec2_pos=None, size=None, imgpath=None): super(PenWidth, self).__init__(x, y, w, h, vec2_pos, size) self.keycode = fa.PLACEHOLDER self.pen_width = 0 self.mainRect.SetAccentColor(Color.HATTER_6) self.width_rect = Rect(self.x, self.y, self.w, self.h, color=Color.BLACK) def DrawObject(self, screen): self.mainRect.DrawObject(screen) self.width_rect.Extend(y=self.y + self.h / 2 - self.pen_width * 5, h=self.pen_width * 10) self.width_rect.DrawObject(screen) def Extend(self): self.pen_width = (self.pen_width + 1) % 4 def SetPosition(self, x, y): super(PenWidth, self).SetPosition(x, y) self.width_rect.SetPosition(x, y) def SetPenWidth(self, witdh): self.pen_width = witdh
class Command(AbstractDrawable): def __init__(self, x=None, y=None, w=None, h=None, vec2_pos=None, size=None): super(Command, self).__init__(x, y, w, h, vec2_pos, size) self.mainRect = Rect(self.x, self.y, self.w, self.h, width=1, transparent=False) self.sprite = None self.imagePath = None self.texticon = None self.keycode = None self.keycode_pad = 0 def execute_command(self): raise RuntimeError("Event didn't binded") def IsInside(self, position): return self.x <= position[0] and self.x + self.w >= position[ 0] and self.y <= position[1] and self.y + self.h >= position[1] def DrawObject(self, screen): if not (self.sprite or self.texticon): self.LoadSprite() self.mainRect.DrawObject(screen) if self.sprite: self.sprite.DrawObject(screen) if self.texticon: self.texticon.DrawObject(screen) def LoadSprite(self): if self.imagePath is None and self.keycode is not None: self.texticon = TextIcon(self.x, self.y, self.w, self.h, keycode=self.keycode) self.texticon.SetPaddning(self.keycode_pad) elif self.imagePath is not None and self.keycode is None: self.sprite = Spirte(self.x, self.y, self.w, self.h, imgpath=self.imagePath) else: self.sprite = Spirte(self.x, self.y, self.w, self.h) warnings.warn("Too many argument") def SetPosition(self, x, y): self.x = x self.y = y self.mainRect.SetPosition(x, y) if self.sprite: self.sprite.SetPosition(x, y) if self.texticon: self.texticon.SetPosition(x, y) def deltapos(self, position): return position[0] - self.x, position[1] - self.y def drag(self, mouseposition): x = mouseposition[0] - self.delta[0] y = mouseposition[1] - self.delta[1] self.SetPosition(x, y) def setDelta(self, mouseposition): self.delta = self.deltapos(mouseposition) def UnloadIcon(self): self.texticon = None self.sprite = None def Bind(self, function_pointer): self.execute_command = function_pointer def SetAccentColor(self, accent): self.mainRect.SetAccentColor(accent) def SetKeyCodePadding(self, x): self.keycode_pad = x