コード例 #1
0
ファイル: Whiteboard.py プロジェクト: sparkslabs/kamaelia_
 def getDisplay(self):
     displayservice = PygameDisplay.getDisplayService()
     self.link((self, "display_signal"), displayservice)
     self.send(self.disprequest, "display_signal")
     while not self.dataReady("callback"):
         self.pause()
         yield 1
     self.display = self.recv("callback")
コード例 #2
0
 def getDisplay(self):
     displayservice = PygameDisplay.getDisplayService()
     self.link((self, "display_signal"), displayservice)
     self.send(self.disprequest, "display_signal")
     while not self.dataReady("callback"):
         self.pause()
         yield 1
     self.display = self.recv("callback")
コード例 #3
0
ファイル: textbox2.py プロジェクト: thangduong/kamaelia
 def __init__(self):
     super(dummy, self).__init__()
     width = 400
     height = 200
     displayservice = PygameDisplay.getDisplayService()
     disprequest = {"DISPLAYREQUEST" : True,
                    "size" : (width,height),               # pixels size for the new surface
                    "callback" : (self, "inbox"),  # to send the new surface object to
                    "events" : (self, "events")
     }
     self.link((self, 'outbox'), displayservice)
     self.send(disprequest, 'outbox')
コード例 #4
0
ファイル: ToolBox.py プロジェクト: thangduong/kamaelia
    def main(self):
        """Main loop."""
        displayservice = PygameDisplay.getDisplayService()
        self.link((self,"display_signal"), displayservice)
        self.send( self.dispRequest,
                    "display_signal")
        for _ in self.waitBox("callback"): yield 1
        self.display = self.recv("callback")
        
        # tool buttons
        circleb = ImageButton(caption=(os.path.join('icons', 'EllipseToolIcon.png')),position=(10,10), bgcolour = (235,235,235), msg = (("Tool", "Circle"),)).activate()
        eraseb = ImageButton(caption=(os.path.join('icons', 'EraserToolIcon.png')),position=(100,10), bgcolour = (235,235,235), msg = (("Tool", "Eraser"),)).activate()
        lineb = ImageButton(caption=(os.path.join('icons', 'PaintBrushToolIcon.png')),position=(10,50), bgcolour = (235,235,235), msg = (("Tool", "Line"),)).activate()
        bucketb = ImageButton(caption=(os.path.join('icons', 'PaintBucketIcon.png')),position=(10,90), bgcolour = (235,235,235), msg = (("Tool", "Bucket"),)).activate()
        eyeb = ImageButton(caption=(os.path.join('icons', 'ColorPickerToolIcon.png')),position=(10,130), bgcolour = (235,235,235), msg = (("Tool", "Eyedropper"),)).activate()
        addlayerb = ImageButton(caption=(os.path.join('icons', 'PlusButtonIcon.png')),position=(10,540), bgcolour = (235,235,235), msg = (("Layer", "Add"),)).activate()
        prevlayerb = ImageButton(caption=(os.path.join('icons', 'MenuLayersMoveLayerDownIcon.png')),position=(80,540), bgcolour = (235,235,235), msg = (("Layer", "Prev"),)).activate()
        nextlayerb = ImageButton(caption=(os.path.join('icons', 'MenuLayersMoveLayerUpIcon.png')),position=(110,540), bgcolour = (235,235,235), msg = (("Layer", "Next"),)).activate()
        dellayerb = ImageButton(caption=(os.path.join('icons', 'MinusButtonIcon.png')),position=(35,540), bgcolour = (235,235,235), msg = (("Layer", "Delete"),)).activate()
        saveb = ImageButton(caption=(os.path.join('icons', 'MenuFileSaveIcon.png')),position=(100,130), bgcolour = (235,235,235), msg = (("Save", "Test"),)).activate()
        self.link( (circleb,"outbox"), (self,"outbox"), passthrough = 2 )
        self.link( (eraseb,"outbox"), (self,"outbox"), passthrough = 2 )
        self.link( (lineb,"outbox"), (self,"outbox"), passthrough = 2 )
        self.link( (bucketb,"outbox"), (self,"outbox"), passthrough = 2 )
        self.link( (eyeb,"outbox"), (self,"outbox"), passthrough = 2 )
        self.link( (addlayerb,"outbox"), (self,"outbox"), passthrough = 2 )
        self.link( (prevlayerb,"outbox"), (self,"outbox"), passthrough = 2 )
        self.link( (nextlayerb,"outbox"), (self,"outbox"), passthrough = 2 )
        self.link( (dellayerb,"outbox"), (self,"outbox"), passthrough = 2 )
        self.link( (saveb,"outbox"), (self,"outbox"), passthrough = 2 )
        colSel = ColourSelector(position = (10,170), size = (255,255)).activate()
        self.link( (colSel,"outbox"), (self,"outbox"), passthrough = 2 )
        SizeSlider = Slider(size=(255, 50), messagePrefix = "Size", position = (10, 460), default = 9).activate()
        self.link( (SizeSlider,"outbox"), (self,"outbox"), passthrough = 2 )
        AlphaSlider = Slider(size=(255, 10), messagePrefix = "Alpha", position = (10, 515), default = 255).activate()
        self.link( (AlphaSlider,"outbox"), (self,"outbox"), passthrough = 2 )

        
        
        self.drawBG()
        done = False
        while not done:
            if not self.anyReady():
                self.pause()
            yield 1
コード例 #5
0
ファイル: TextDisplayer.py プロジェクト: thangduong/kamaelia
    def initPygame(self, **argd):
        displayservice = PygameDisplay.getDisplayService()
        self.link((self, "_pygame"), displayservice)
        self.send(argd, "_pygame")
        while not self.dataReady("_surface"):
            yield 1
        self.screen = self.recv("_surface")
        self.screen.fill(self.background_color)
        self.scratch = self.screen.copy()
        self.send({"REDRAW": True, "surface": self.screen}, "_pygame")
        yield 1

        h = self.screen_height
        w = self.screen_width
        th = self.text_height
        self.font = pygame.font.Font(None, th)
        self.linelen = w / self.font.size('a')[0]
        self.keepRect = pygame.Rect((0, th), (w, h - th))
        self.scrollingRect = pygame.Rect((0, 0), (w, h - th))
        self.writeRect = pygame.Rect((0, h - th), (w, th))
コード例 #6
0
ファイル: Text.py プロジェクト: sparkslabs/kamaelia_
    def initPygame(self, **argd):
        """requests a display surface from the PygameDisplay service, fills
        the color in, and copies it"""
        displayservice = PygameDisplay.getDisplayService()
        self.link((self, "_pygame"), displayservice)
        if self.transparent:
            argd["transparency"] = self.bgcolour
        self.send(argd, "_pygame")
        while not self.dataReady("_surface"):
            yield 1
        self.screen = self.recv("_surface")
        self.clear()

        self.scratch = self.screen.copy()
        self.send({"REDRAW": True, "surface": self.screen}, "_pygame")
        yield 1

        h = self.screen_height
        w = self.screen_width
        th = self.text_height  # Text height

        self.font = pygame.font.Font(self.font_file, th)
        th = (
            self.text_height
        ) = self.font.get_linesize()  # Adjust the rendering of text inside, such that it renders nicer

        self.linelen = w / self.font.size("a")[0]

        # First pass approach at adding basic padding into the model
        pad = self.padding

        padtop = self.padding
        padbottom = self.padding
        padleft = self.padding
        padright = self.padding

        self.keepRect = pygame.Rect((0 + padleft, th + padtop), (w - padleft - padright, h - th - padtop - padbottom))
        self.scrollingRect = pygame.Rect(
            (0 + padleft, 0 + padtop), (w - padleft - padright, h - th - padtop - padbottom)
        )
        self.writeRect = pygame.Rect((0 + padleft, h - th - padbottom), (w - pad - pad, th))
コード例 #7
0
ファイル: TextDisplayer.py プロジェクト: casibbald/kamaelia
    def initPygame(self, **argd):
        displayservice = PygameDisplay.getDisplayService()
        self.link((self, "_pygame"), displayservice)
        self.send(argd, "_pygame")
        while not self.dataReady("_surface"):
            yield 1
        self.screen = self.recv("_surface")
        self.screen.fill(self.background_color)
        self.scratch = self.screen.copy()
        self.send({"REDRAW" : True,
                   "surface" : self.screen}, "_pygame")
        yield 1

        h = self.screen_height
        w = self.screen_width
        th = self.text_height
        self.font = pygame.font.Font(None, th)
        self.linelen = w/self.font.size('a')[0]
        self.keepRect = pygame.Rect((0, th),(w, h - th))
        self.scrollingRect = pygame.Rect((0, 0), (w, h - th))
        self.writeRect = pygame.Rect((0, h - th), (w, th))
コード例 #8
0
ファイル: ToolBox.py プロジェクト: sparkslabs/kamaelia_
    def main(self):
        """Main loop."""
        displayservice = PygameDisplay.getDisplayService()
        self.link((self, "display_signal"), displayservice)
        self.send(self.dispRequest, "display_signal")
        for _ in self.waitBox("callback"):
            yield 1
        self.display = self.recv("callback")

        # tool buttons
        circleb = Button(caption="Circle", position=(10, 10), msg=(("Tool", "Circle"),)).activate()
        eraseb = Button(caption="Eraser", position=(100, 10), msg=(("Tool", "Eraser"),)).activate()
        lineb = Button(caption="Line", position=(10, 50), msg=(("Tool", "Line"),)).activate()
        bucketb = Button(caption="Bucket", position=(10, 90), msg=(("Tool", "Bucket"),)).activate()
        eyeb = Button(caption="Eyedropper", position=(10, 130), msg=(("Tool", "Eyedropper"),)).activate()
        addlayerb = Button(caption="Add Layer", position=(10, 540), msg=(("Layer", "Add"),)).activate()
        prevlayerb = Button(caption="<-", position=(80, 540), msg=(("Layer", "Prev"),)).activate()
        nextlayerb = Button(caption="->", position=(110, 540), msg=(("Layer", "Next"),)).activate()
        dellayerb = Button(caption="Delete", position=(140, 540), msg=(("Layer", "Delete"),)).activate()
        self.link((circleb, "outbox"), (self, "outbox"), passthrough=2)
        self.link((eraseb, "outbox"), (self, "outbox"), passthrough=2)
        self.link((lineb, "outbox"), (self, "outbox"), passthrough=2)
        self.link((bucketb, "outbox"), (self, "outbox"), passthrough=2)
        self.link((eyeb, "outbox"), (self, "outbox"), passthrough=2)
        self.link((addlayerb, "outbox"), (self, "outbox"), passthrough=2)
        self.link((prevlayerb, "outbox"), (self, "outbox"), passthrough=2)
        self.link((nextlayerb, "outbox"), (self, "outbox"), passthrough=2)
        self.link((dellayerb, "outbox"), (self, "outbox"), passthrough=2)
        colSel = ColourSelector(position=(10, 170), size=(255, 255)).activate()
        self.link((colSel, "outbox"), (self, "outbox"), passthrough=2)
        SizeSlider = Slider(size=(255, 50), messagePrefix="Size", position=(10, 460), default=9).activate()
        self.link((SizeSlider, "outbox"), (self, "outbox"), passthrough=2)
        AlphaSlider = Slider(size=(255, 10), messagePrefix="Alpha", position=(10, 515), default=255).activate()
        self.link((AlphaSlider, "outbox"), (self, "outbox"), passthrough=2)
        self.drawBG()
        done = False
        while not done:
            if not self.anyReady():
                self.pause()
            yield 1
コード例 #9
0
    def initPygame(self, **argd):
        """requests a display surface from the PygameDisplay service, fills
        the color in, and copies it"""
        displayservice = PygameDisplay.getDisplayService()
        self.link((self, "_pygame"), displayservice)
        if self.transparent:
            argd["transparency"] = self.bgcolour
        self.send(argd, "_pygame")
        while not self.dataReady("_surface"):
            yield 1
        self.screen = self.recv("_surface")
        self.clear()

        self.scratch = self.screen.copy()
        self.send({"REDRAW" : True,
                   "surface" : self.screen}, "_pygame")
        yield 1

        h = self.screen_height
        w = self.screen_width
        th = self.text_height                                     # Text height

        self.font = pygame.font.Font(self.font_file, th)
        th = self.text_height = self.font.get_linesize() # Adjust the rendering of text inside, such that it renders nicer

        self.linelen = w/self.font.size('a')[0]

        # First pass approach at adding basic padding into the model
        pad = self.padding

        padtop = self.padding
        padbottom = self.padding
        padleft = self.padding
        padright = self.padding
        
        self.keepRect      = pygame.Rect((0+padleft, th+padtop),(w - padleft - padright, h - th - padtop - padbottom))
        self.scrollingRect = pygame.Rect((0+padleft, 0+padtop), (w - padleft - padright, h - th - padtop - padbottom))
        self.writeRect     = pygame.Rect((0+padleft, h - th - padbottom), (w - pad - pad, th))
コード例 #10
0
ファイル: Core.py プロジェクト: casibbald/kamaelia
   def main(self):
      """Main event loop, also handles input from other components"""
      displayservice = PygameDisplay.getDisplayService()
      self.link((self,"display_signal"), displayservice)

      self.send( self.disprequest,"display_signal")

      for _ in self.waitBox("callback"): yield 1
      self.display = self.recv("callback")
      self.layers.append(self.display)

  #    f = os.path.join('', "pennyarcade.gif")
  #    x = pygame.image.load(f)
  #    colorkey = x.get_at((0, 0))
  #    if colorkey is True:
  #        x.set_colorkey(colorkey, pygame.RLEACCEL)
  #    self.layers.append(x)
  #    self.display = x
  #    self.activeLayIn = len(self.layers)-1
  #    self.activeLayer = self.layers[self.activeLayIn]
  #    self.display.blit( x, (0,0) )
      

      layerDisp = TextDisplayer(size = (20, 20),position = (520,10)).activate()
      self.link( (self,"laynum"), (layerDisp,"inbox") )
      self.send({ "ADDLISTENEVENT" : pygame.MOUSEBUTTONDOWN,
                  "surface" : self.display},
                  "display_signal")

      self.send({ "ADDLISTENEVENT" : pygame.MOUSEBUTTONUP,
                  "surface" : self.display},
                  "display_signal")

      self.send({ "ADDLISTENEVENT" : pygame.MOUSEMOTION,
                  "surface" : self.display},
                  "display_signal")

      self.send({ "ADDLISTENEVENT" : pygame.KEYDOWN,
		  "surface" : self.display},
		  "display_signal")
      self.activeLayer = self.layers[self.activeLayIn]
      self.send( self.activeLayIn, "laynum" )
      image = pygame.Surface((20, 20))
      pygame.draw.circle(image, (1, 1, 1), (10, 10), self.toolSize, 0)
     # pygame.draw.circle(image, self.selectedColour, (10, 10), 8, 2)
      image.set_at((9, 9), (255,255,255))
      image.set_colorkey(0, pygame.RLEACCEL)
      cursor = GfxCursor(self.display, image, (10, 10))

      self.drawBG(True)
      self.blitToSurface()
      FPS = 1
      clock = Clock(float(1)/FPS).activate()
      clock.link((clock, "outbox"), (self, "newframe"))


      done = False
      while not done:
         dirtyrects = []
         dirtyrects.extend([cursor.hide()])
         if not self.anyReady():
             self.pause()
         yield 1
         while self.dataReady("control"):
            cmsg = self.recv("control")
            if isinstance(cmsg, producerFinished) or isinstance(cmsg, shutdownMicroprocess):
               self.send(cmsg, "signal")
               done = True
         while self.dataReady("newframe") and self.playing:
             self.recv("newframe")
             if self.currentFrame != 0:
                self.layers[self.currentFrame].set_alpha(0)
             self.currentFrame = self.currentFrame + 1
             if self.currentFrame == len(self.layers)-1:
                 self.playing = False
             self.layers[self.currentFrame].set_alpha(255)
             self.blitToSurface()

         while self.dataReady("inbox"):
            for event in self.recv("inbox"):
                if isinstance(event, tuple):
                    self.send((event,),"outbox")
                    if event[0] == "Layer":
                        if event[1] == "Add":
                            yield WaitComplete( self.addLayer() )
                            self.activeLayIn = len(self.layers)-1
                            self.activeLayer = self.layers[self.activeLayIn]
                            self.drawBG()
                            if self.animator and len(self.layers)-2 >= 1:
                                for x in self.layers:
                                    s.set_alpha = 0
                                self.activeLayer.blit(self.layers[len(self.layers)-2],(0,0))
                            self.blitToSurface()
                        elif event[1] == "Delete":
                            self.send( producerFinished(message=self.activeLayer),"display_signal")
                            self.layers.remove(self.activeLayer)
                            self.activeLayIn = 0
                            self.activeLayer = self.layers[self.activeLayIn]
                          #  print (self.layers)
                        if event[1] == "Next":
                            if self.animator and self.activeLayIn != 0:
                            	self.activeLayer.set_alpha(0)
                            if self.activeLayIn == len(self.layers)-1:
                                self.activeLayIn = 0
                                self.activeLayer = self.layers[self.activeLayIn]
                            else:
                                self.activeLayIn += 1
                                self.activeLayer = self.layers[self.activeLayIn]
                            if self.animator:
                            	self.activeLayer.set_alpha(255)
                        elif event[1] == "Prev":
                            if self.animator and self.activeLayIn != 0:
                            	self.activeLayer.set_alpha(0)
                            if self.activeLayIn == 0:
                                self.activeLayIn = len(self.layers)-1
                                self.activeLayer = self.layers[self.activeLayIn]
                            else:
                                self.activeLayIn -= 1
                                self.activeLayer = self.layers[self.activeLayIn]
                            if self.animator:
                            	self.activeLayer.set_alpha(255)
                        self.send( self.activeLayIn, "laynum" )
                    elif event[0] == "Tool":
                        self.tool = event[1]
                    elif event[0] == "Size":
                        self.toolSize = event[1]/3
                        pygame.draw.circle(image, self.selectedColour, (10, 10), self.toolSize/3, 0)
                        image.set_at((9, 9), (255,255,255))
                        image.set_colorkey(0, pygame.RLEACCEL)
                        cursor = GfxCursor(self.display, image, (10, 10))
                    elif event[0] == "Alpha":
                        self.layers[self.activeLayIn].set_alpha(event[1])
                        self.blitToSurface()
                      #  print (self.activeLayer.get_alpha())
                    elif event[0] == 'Colour':
                        self.selectedColour = event[1]
                        pygame.draw.circle(image, self.selectedColour, (10, 10), self.toolSize/3, 0)
                        image.set_at((9, 9), (255,255,255))
                        image.set_colorkey(0, pygame.RLEACCEL)
                        cursor = GfxCursor(self.display, image, (10, 10))
                    elif event[0] == 'Save':
                        self.save(event[1])
                    break
                if event.type == pygame.MOUSEBUTTONDOWN:
                    cursor.disable()
                    if self.tool == "Circle":
                        if event.button == 1:
                            self.oldpos = event.pos
                            self.drawing = True
                    if self.tool == "Eraser":
                        self.selectedColour = self.backgroundColour
                        self.tool = "Line"
                    if self.tool == "Line":
                        if event.button == 1:
                            self.drawing = True
                    if self.tool == "Bucket":
                        self.floodFill(event.pos[0],event.pos[1],self.selectedColour,self.activeLayer.get_at(event.pos))
                    if self.tool == "Eyedropper":
                        self.selectedColour = self.activeLayer.get_at(event.pos)
                    if event.button == 3:
                        self.addLayer()
                        #self.oldpos = None
                        #self.drawBG()
                        #self.blitToSurface()
                        #self.send(("clear",), "outbox")
                elif event.type == (pygame.KEYDOWN):
                    if event.key == pygame.K_c:
                        image = pygame.image.load(os.path.join('', 'pennyarcade.gif'))
                        yield WaitComplete( self.addLayer() )
                        self.activeLayIn = len(self.layers)-1
                        self.activeLayer = self.layers[self.activeLayIn]
                        self.drawBG()
                        self.activeLayer.blit( image, (10,10) )
                        self.blitToSurface()
                        self.send( self.activeLayIn, "laynum" )
                    elif event.key == pygame.K_s:
                        """Testing a different brushing technique, bliting a brush"""
                        print (self.size, self.toolSize)
                        yield WaitComplete( self.addBrush() )
                        self.activeBrush = self.brushes[len(self.brushes)-1]
                        self.activeBrush.fill( self.backgroundColour )
                        pygame.draw.circle(self.activeBrush, self.selectedColour, (self.toolSize/2,self.toolSize/2), self.toolSize, 0)
                    elif event.key == pygame.K_a:
                        self.animator = True
                    elif event.key == pygame.K_l:
                        self.layers[1].blit( self.layers[1], (100,100) )
               #         temp = self.layers[1]
               #         self.layers[1].fill(self.backgroundColour)
               #         self.layers[1].blit( temp, (100,100) )
                    elif event.key == pygame.K_o:
                        for x in self.layers:
                            x.set_alpha(0)
                        self.layers[0].set_alpha(255)
                        self.currentFrame = 0
                        while self.dataReady("newframe"): # empty if there's anything there
                            self.recv("newframe")
                        self.playing = True
                        self.blitToSurface()



                elif event.type == pygame.MOUSEBUTTONUP and event.button == 1:
                    cursor.enable()
                    if self.tool == "Circle":
                        rad = int(math.sqrt(((event.pos[0]-self.oldpos[0])**2)+((event.pos[1]-self.oldpos[1])**2)))
                        pygame.draw.circle(self.activeLayer, self.selectedColour, self.oldpos, rad, 0)
                        circle = ("circle", self.oldpos, rad)
                     #   self.send((circle,), "outbox")
                        self.blitToSurface()
                    self.drawing = False
                    self.oldpos = None
                elif event.type == pygame.MOUSEMOTION:
                    cursor.update(event)
                    if self.tool == "Line":
                        if self.drawing and self.innerRect.collidepoint(*event.pos):
                              if self.oldpos == None:
                                 self.oldpos = event.pos
                              else:
                                # pygame.draw.circle(self.activeLayer, self.selectedColour, self.oldpos, self.toolSize, 0)
                                 r = pygame.draw.line(self.activeLayer, self.selectedColour, self.oldpos, event.pos, self.toolSize)
                                 dirtyrects.append(r)
                               #  self.activeLayer.blit(self.activeBrush, event.pos) FAILED TECHNIQUE
                                 line = ("line", self.oldpos, event.pos)
                                 self.send((line,), "outbox")
                                 self.oldpos = event.pos
                    self.blitToSurface()
         self.pause()
         pygame.time.delay(5)
         dirtyrects.extend([cursor.show()])
         pygame.display.update(dirtyrects)
         yield 1
コード例 #11
0
ファイル: Paint.py プロジェクト: casibbald/kamaelia
   def main(self):
      """Main loop."""
      displayservice = PygameDisplay.getDisplayService()
      self.link((self,"display_signal"), displayservice)

      self.send( self.disprequest,"display_signal")

      for _ in self.waitBox("callback"): yield 1
      self.display = self.recv("callback")
      self.layers.append(self.display)
      
  #    f = os.path.join('', "pennyarcade.gif")
  #    x = pygame.image.load(f)
  #    colorkey = x.get_at((0, 0))
  #    if colorkey is True:
  #        x.set_colorkey(colorkey, pygame.RLEACCEL)
  #    self.layers.append(x)
  #    self.display = x
  #    self.activeLayIn = len(self.layers)-1
  #    self.activeLayer = self.layers[self.activeLayIn]
  #    self.display.blit( x, (0,0) )

      
      layerDisp = TextDisplayer(size = (20, 20),position = (520,10)).activate()
      self.link( (self,"laynum"), (layerDisp,"inbox") )
      self.send({ "ADDLISTENEVENT" : pygame.MOUSEBUTTONDOWN,
                  "surface" : self.display},
                  "display_signal")

      self.send({ "ADDLISTENEVENT" : pygame.MOUSEBUTTONUP,
                  "surface" : self.display},
                  "display_signal")

      self.send({ "ADDLISTENEVENT" : pygame.MOUSEMOTION,
                  "surface" : self.display},
                  "display_signal")

      self.send({ "ADDLISTENEVENT" : pygame.KEYDOWN,
		  "surface" : self.display},
		  "display_signal")
      self.activeLayer = self.layers[self.activeLayIn]
      self.send( self.activeLayIn, "laynum" )


      self.drawBG(True)
      self.blitToSurface()
      

      done = False
      while not done:
         if not self.anyReady():
             self.pause()
         yield 1
         while self.dataReady("control"):
            cmsg = self.recv("control")
            if isinstance(cmsg, producerFinished) or isinstance(cmsg, shutdownMicroprocess):
               self.send(cmsg, "signal")
               done = True

         while self.dataReady("inbox"):
            for event in self.recv("inbox"):
                if isinstance(event, tuple):
                    if event[0] == "Layer":
                        if event[1] == "Add":
                            yield WaitComplete( self.addLayer() )
                            self.activeLayIn = len(self.layers)-1
                            self.activeLayer = self.layers[self.activeLayIn]
                         #   self.send( self.activeLayIn, "laynum" )
                            self.drawBG()
                            self.blitToSurface()
                        elif event[1] == "Delete":
                            self.send( producerFinished(message=self.activeLayer),"display_signal")
                            self.layers.remove(self.activeLayer)
                            self.activeLayIn = 0
                            self.activeLayer = self.layers[self.activeLayIn]
                          #  print self.layers
                        if event[1] == "Next":
                            if self.activeLayIn == len(self.layers)-1:
                                self.activeLayIn = 0
                                self.activeLayer = self.layers[self.activeLayIn]
                            else:
                                self.activeLayIn += 1
                                self.activeLayer = self.layers[self.activeLayIn]
                        elif event[1] == "Prev":
                            if self.activeLayIn == 0:
                                self.activeLayIn = len(self.layers)-1
                                self.activeLayer = self.layers[self.activeLayIn]
                            else:
                                self.activeLayIn -= 1
                                self.activeLayer = self.layers[self.activeLayIn]
                        self.send( self.activeLayIn, "laynum" )
                    elif event[0] == "Tool":
                        self.tool = event[1]
                    elif event[0] == "Size":
                        self.toolSize = event[1]/3
                    elif event[0] == "Alpha":
                        self.layers[self.activeLayIn].set_alpha(event[1])
                        self.blitToSurface()
                      #  print self.activeLayer.get_alpha()
                    elif event[0] == 'Colour':
                        self.selectedColour = event[1]
                    break
                if event.type == pygame.MOUSEBUTTONDOWN:
                    if self.tool == "Circle":
                        if event.button == 1:
                            self.oldpos = event.pos
                            self.drawing = True
                    if self.tool == "Eraser":
                        self.selectedColour = self.backgroundColour
                        self.tool = "Line"
                    if self.tool == "Line":
                        if event.button == 1:
                            self.drawing = True
                    if self.tool == "Bucket":
                        self.floodFill(event.pos[0],event.pos[1],self.selectedColour,self.activeLayer.get_at(event.pos))
                    if self.tool == "Eyedropper":
                        self.selectedColour = self.activeLayer.get_at(event.pos)
                    if event.button == 3:
                        self.addLayer()
                        #self.oldpos = None
                        #self.drawBG()
                        #self.blitToSurface()
                        #self.send(("clear",), "outbox")
                elif event.type == (pygame.KEYDOWN):
                    if event.key == pygame.K_c:
                        image = pygame.image.load(os.path.join('', 'pennyarcade.gif'))
                        yield WaitComplete( self.addLayer() )
                        self.activeLayIn = len(self.layers)-1
                        self.activeLayer = self.layers[self.activeLayIn]
                        self.drawBG()
                        self.activeLayer.blit( image, (10,10) )
                        self.blitToSurface()
                        self.send( self.activeLayIn, "laynum" )
                    elif event.key == pygame.K_s:
                      #  temp = self.layers[0]
                        self.save("tgfdg")
                      #  self.layers.insert(0,temp)
                      #  self.drawBG()
                    elif event.key == pygame.K_l:
                        self.layers[1].blit( self.layers[1], (100,100) )
               #         temp = self.layers[1]
               #         self.layers[1].fill(self.backgroundColour)
               #         self.layers[1].blit( temp, (100,100) )
                    elif event.key == pygame.K_o:
                        move = {
                                    "CHANGEDISPLAYGEO" : True,
                                    "surface" : self.layers[1],
                                    "position" : (100,100)
                               }
                        self.send(move, "display_signal")
                                  
                       

                elif event.type == pygame.MOUSEBUTTONUP and event.button == 1:
                    if self.tool == "Circle":
                        rad = math.sqrt(((event.pos[0]-self.oldpos[0])**2)+((event.pos[1]-self.oldpos[1])**2))
                        pygame.draw.circle(self.activeLayer, self.selectedColour, self.oldpos, rad, 0)
                        circle = ("circle", self.oldpos, rad)
                        self.send((circle,), "outbox")
                        self.blitToSurface()
                    self.drawing = False
                    self.oldpos = None
                elif event.type == pygame.MOUSEMOTION:
                    if self.tool == "Line":
                        if self.drawing and self.innerRect.collidepoint(*event.pos):
                              if self.oldpos == None:
                                 self.oldpos = event.pos
                              else:
                                # pygame.draw.circle(self.activeLayer, self.selectedColour, self.oldpos, self.toolSize, 0)
                                 pygame.draw.line(self.activeLayer, self.selectedColour, self.oldpos, event.pos, self.toolSize)
                                 line = ("line", self.oldpos, event.pos)
                                 self.send((line,), "outbox")
                                 self.oldpos = event.pos
                              self.blitToSurface()
         self.pause()
         yield 1
コード例 #12
0
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import pygame
from Kamaelia.UI.Pygame.Display import PygameDisplay
from Kamaelia.Chassis.Graphline import Graphline
from Kamaelia.Util.Console import ConsoleEchoer
from Kamaelia.UI.Pygame.KeyEvent import KeyEvent
from pygame.locals import *

width = 400
height = 200

displayservice = PygameDisplay.getDisplayService()
g = Graphline(displayservice=displayservice,
              linkages={
                  ("self", "outbox"): displayservice,
              })

disprequest = {
    "DISPLAYREQUEST": True,
    "size": (width, height),  # pixels size for the new surface
    "callback": (g, "inbox"),  # to send the new surface object to
    "events": (g, "events")
}
コード例 #13
0
ファイル: Paint.py プロジェクト: thangduong/kamaelia
    def main(self):
        """Main loop."""
        displayservice = PygameDisplay.getDisplayService()
        self.link((self, "display_signal"), displayservice)

        self.send(self.disprequest, "display_signal")

        for _ in self.waitBox("callback"):
            yield 1
        self.display = self.recv("callback")
        self.layers.append(self.display)

        #    f = os.path.join('', "pennyarcade.gif")
        #    x = pygame.image.load(f)
        #    colorkey = x.get_at((0, 0))
        #    if colorkey is True:
        #        x.set_colorkey(colorkey, pygame.RLEACCEL)
        #    self.layers.append(x)
        #    self.display = x
        #    self.activeLayIn = len(self.layers)-1
        #    self.activeLayer = self.layers[self.activeLayIn]
        #    self.display.blit( x, (0,0) )

        layerDisp = TextDisplayer(size=(20, 20), position=(520, 10)).activate()
        self.link((self, "laynum"), (layerDisp, "inbox"))
        self.send(
            {
                "ADDLISTENEVENT": pygame.MOUSEBUTTONDOWN,
                "surface": self.display
            }, "display_signal")

        self.send(
            {
                "ADDLISTENEVENT": pygame.MOUSEBUTTONUP,
                "surface": self.display
            }, "display_signal")

        self.send(
            {
                "ADDLISTENEVENT": pygame.MOUSEMOTION,
                "surface": self.display
            }, "display_signal")

        self.send({
            "ADDLISTENEVENT": pygame.KEYDOWN,
            "surface": self.display
        }, "display_signal")
        self.activeLayer = self.layers[self.activeLayIn]
        self.send(self.activeLayIn, "laynum")

        self.drawBG(True)
        self.blitToSurface()

        done = False
        while not done:
            if not self.anyReady():
                self.pause()
            yield 1
            while self.dataReady("control"):
                cmsg = self.recv("control")
                if isinstance(cmsg, producerFinished) or isinstance(
                        cmsg, shutdownMicroprocess):
                    self.send(cmsg, "signal")
                    done = True

            while self.dataReady("inbox"):
                for event in self.recv("inbox"):
                    if isinstance(event, tuple):
                        if event[0] == "Layer":
                            if event[1] == "Add":
                                yield WaitComplete(self.addLayer())
                                self.activeLayIn = len(self.layers) - 1
                                self.activeLayer = self.layers[
                                    self.activeLayIn]
                                #   self.send( self.activeLayIn, "laynum" )
                                self.drawBG()
                                self.blitToSurface()
                            elif event[1] == "Delete":
                                self.send(
                                    producerFinished(message=self.activeLayer),
                                    "display_signal")
                                self.layers.remove(self.activeLayer)
                                self.activeLayIn = 0
                                self.activeLayer = self.layers[
                                    self.activeLayIn]
                            #  print self.layers
                            if event[1] == "Next":
                                if self.activeLayIn == len(self.layers) - 1:
                                    self.activeLayIn = 0
                                    self.activeLayer = self.layers[
                                        self.activeLayIn]
                                else:
                                    self.activeLayIn += 1
                                    self.activeLayer = self.layers[
                                        self.activeLayIn]
                            elif event[1] == "Prev":
                                if self.activeLayIn == 0:
                                    self.activeLayIn = len(self.layers) - 1
                                    self.activeLayer = self.layers[
                                        self.activeLayIn]
                                else:
                                    self.activeLayIn -= 1
                                    self.activeLayer = self.layers[
                                        self.activeLayIn]
                            self.send(self.activeLayIn, "laynum")
                        elif event[0] == "Tool":
                            self.tool = event[1]
                        elif event[0] == "Size":
                            self.toolSize = event[1] / 3
                        elif event[0] == "Alpha":
                            self.layers[self.activeLayIn].set_alpha(event[1])
                            self.blitToSurface()
                        #  print self.activeLayer.get_alpha()
                        elif event[0] == 'Colour':
                            self.selectedColour = event[1]
                        break
                    if event.type == pygame.MOUSEBUTTONDOWN:
                        if self.tool == "Circle":
                            if event.button == 1:
                                self.oldpos = event.pos
                                self.drawing = True
                        if self.tool == "Eraser":
                            self.selectedColour = self.backgroundColour
                            self.tool = "Line"
                        if self.tool == "Line":
                            if event.button == 1:
                                self.drawing = True
                        if self.tool == "Bucket":
                            self.floodFill(event.pos[0], event.pos[1],
                                           self.selectedColour,
                                           self.activeLayer.get_at(event.pos))
                        if self.tool == "Eyedropper":
                            self.selectedColour = self.activeLayer.get_at(
                                event.pos)
                        if event.button == 3:
                            self.addLayer()
                            #self.oldpos = None
                            #self.drawBG()
                            #self.blitToSurface()
                            #self.send(("clear",), "outbox")
                    elif event.type == (pygame.KEYDOWN):
                        if event.key == pygame.K_c:
                            image = pygame.image.load(
                                os.path.join('', 'pennyarcade.gif'))
                            yield WaitComplete(self.addLayer())
                            self.activeLayIn = len(self.layers) - 1
                            self.activeLayer = self.layers[self.activeLayIn]
                            self.drawBG()
                            self.activeLayer.blit(image, (10, 10))
                            self.blitToSurface()
                            self.send(self.activeLayIn, "laynum")
                        elif event.key == pygame.K_s:
                            #  temp = self.layers[0]
                            self.save("tgfdg")
                        #  self.layers.insert(0,temp)
                        #  self.drawBG()
                        elif event.key == pygame.K_l:
                            self.layers[1].blit(self.layers[1], (100, 100))
                #         temp = self.layers[1]
                #         self.layers[1].fill(self.backgroundColour)
                #         self.layers[1].blit( temp, (100,100) )
                        elif event.key == pygame.K_o:
                            move = {
                                "CHANGEDISPLAYGEO": True,
                                "surface": self.layers[1],
                                "position": (100, 100)
                            }
                            self.send(move, "display_signal")

                    elif event.type == pygame.MOUSEBUTTONUP and event.button == 1:
                        if self.tool == "Circle":
                            rad = math.sqrt((
                                (event.pos[0] - self.oldpos[0])**2) + (
                                    (event.pos[1] - self.oldpos[1])**2))
                            pygame.draw.circle(self.activeLayer,
                                               self.selectedColour,
                                               self.oldpos, rad, 0)
                            circle = ("circle", self.oldpos, rad)
                            self.send((circle, ), "outbox")
                            self.blitToSurface()
                        self.drawing = False
                        self.oldpos = None
                    elif event.type == pygame.MOUSEMOTION:
                        if self.tool == "Line":
                            if self.drawing and self.innerRect.collidepoint(
                                    *event.pos):
                                if self.oldpos == None:
                                    self.oldpos = event.pos
                                else:
                                    # pygame.draw.circle(self.activeLayer, self.selectedColour, self.oldpos, self.toolSize, 0)
                                    pygame.draw.line(self.activeLayer,
                                                     self.selectedColour,
                                                     self.oldpos, event.pos,
                                                     self.toolSize)
                                    line = ("line", self.oldpos, event.pos)
                                    self.send((line, ), "outbox")
                                    self.oldpos = event.pos
                                self.blitToSurface()
            self.pause()
            yield 1
コード例 #14
0
    def main(self):
        """Main loop."""
        displayservice = PygameDisplay.getDisplayService()
        self.link((self, "display_signal"), displayservice)

        self.send(self.dispRequest, "display_signal")

        for _ in self.waitBox("callback"):
            yield 1
        self.display = self.recv("callback")

        # Initial render so we don't see a blank screen
        self.sliderPos = self.default
        self.drawBG()
        self.render()

        self.send(
            {
                "ADDLISTENEVENT": pygame.MOUSEBUTTONDOWN,
                "surface": self.display
            }, "display_signal")

        self.send(
            {
                "ADDLISTENEVENT": pygame.MOUSEBUTTONUP,
                "surface": self.display
            }, "display_signal")

        self.send(
            {
                "ADDLISTENEVENT": pygame.MOUSEMOTION,
                "surface": self.display
            }, "display_signal")
        done = False
        while not done:
            if not self.anyReady():
                self.pause()
            yield 1
            while self.dataReady("control"):
                cmsg = self.recv("control")
                if (isinstance(cmsg, producerFinished)):
                    self.send(cmsg, "signal")
                    done = True
            while self.dataReady("colours"):
                msg = self.recv("colours")
                if msg[0] == "ColourCombi":
                    self.colourCombi = msg[1]
                else:
                    if self.colourCombi == 'RG':
                        self.selectedColour = (msg[1][0], msg[1][1],
                                               self.sliderPos)
                    elif self.colourCombi == 'RB':
                        self.selectedColour = (msg[1][0], self.sliderPos,
                                               msg[1][2])
                    elif self.colourCombi == 'GB':
                        self.selectedColour = (self.sliderPos, msg[1][1],
                                               msg[1][2])
                    self.bgcolour = self.selectedColour
            #        self.display.fill( self.selectedColour)
                self.drawBG()
                self.render()
            while self.dataReady("inbox"):
                for event in self.recv("inbox"):
                    if event.type == pygame.MOUSEBUTTONDOWN:
                        if self.display.get_rect().collidepoint(*event.pos):
                            if self.vertical:
                                self.sliderPos = event.pos[1]
                            else:
                                self.sliderPos = event.pos[0]
                            self.drawBG()
                            self.render()
                            self.mouseDown = True

                    if event.type == pygame.MOUSEBUTTONUP:
                        if self.mouseDown:
                            if self.vertical:
                                self.sliderPos = event.pos[1]
                            else:
                                self.sliderPos = event.pos[0]
                            self.drawBG()
                            self.render()
                        self.mouseDown = False

                    if event.type == pygame.MOUSEMOTION and self.mouseDown:
                        if self.display.get_rect().collidepoint(*event.pos):
                            if self.vertical:
                                self.sliderPos = event.pos[1]
                            else:
                                self.sliderPos = event.pos[0]
                            self.drawBG()
                            self.render()
                        else:
                            self.mouseDown = False
コード例 #15
0
ファイル: Slider.py プロジェクト: casibbald/kamaelia
    def main(self):
        """Main loop."""
        displayservice = PygameDisplay.getDisplayService()
        self.link((self,"display_signal"), displayservice)

        self.send( self.dispRequest,
                    "display_signal")

        for _ in self.waitBox("callback"): yield 1
        self.display = self.recv("callback")
        
        


        # Initial render so we don't see a blank screen
        self.sliderPos = self.default
        self.drawBG()
        self.render()

        self.send({"ADDLISTENEVENT" : pygame.MOUSEBUTTONDOWN,
                    "surface" : self.display},
                    "display_signal")

        self.send({"ADDLISTENEVENT" : pygame.MOUSEBUTTONUP,
                    "surface" : self.display},
                    "display_signal")

        self.send({"ADDLISTENEVENT" : pygame.MOUSEMOTION,
                    "surface" : self.display},
                    "display_signal")
        done = False
        while not done:
            if not self.anyReady():
                self.pause()
            yield 1
            while self.dataReady("control"):
                cmsg = self.recv("control")
                if (isinstance(cmsg, producerFinished)):
                    self.send(cmsg, "signal")
                    done = True
            while self.dataReady("colours"):
                msg = self.recv("colours")
                if msg[0] == "ColourCombi":
                    self.colourCombi = msg[1]
                else: 
                    if self.colourCombi == 'RG':
                        self.selectedColour = (msg[1][0],msg[1][1],self.sliderPos)
                    elif self.colourCombi == 'RB':
                        self.selectedColour = (msg[1][0],self.sliderPos,msg[1][2])
                    elif self.colourCombi == 'GB':
                        self.selectedColour = (self.sliderPos,msg[1][1],msg[1][2])
                    self.bgcolour = self.selectedColour
            #        self.display.fill( self.selectedColour)
                self.drawBG()
                self.render()
            while self.dataReady("inbox"):
                for event in self.recv("inbox"):
                    if event.type == pygame.MOUSEBUTTONDOWN:
                        if self.display.get_rect().collidepoint(*event.pos):
                            if self.vertical:
                                self.sliderPos = event.pos[1]
                            else:
                                self.sliderPos = event.pos[0]
                            self.drawBG()
                            self.render()
                            self.mouseDown = True

                    if event.type == pygame.MOUSEBUTTONUP:
                        if self.mouseDown:
                            if self.vertical:
                                self.sliderPos = event.pos[1]
                            else:
                                self.sliderPos = event.pos[0]
                            self.drawBG()
                            self.render()
                        self.mouseDown = False
                    
                    if event.type == pygame.MOUSEMOTION and self.mouseDown:
                        if self.display.get_rect().collidepoint(*event.pos):
                            if self.vertical:
                                self.sliderPos = event.pos[1]
                            else:
                                self.sliderPos = event.pos[0]
                            self.drawBG()
                            self.render()
                        else: self.mouseDown = False
コード例 #16
0
    def main(self):
        """Main loop."""
        #    pgd = PygameDisplay( width=300, height=550 ).activate()
        #   PygameDisplay.setDisplayService(pgd)

        displayservice = PygameDisplay.getDisplayService()
        self.link((self, "display_signal"), displayservice)

        self.send(self.dispRequest, "display_signal")

        for _ in self.waitBox("callback"):
            yield 1
        self.display = self.recv("callback")

        # colour buttons
        if self.colourSelector:
            rgbutton = Button(caption="Red/Green",
                              position=(10, 170),
                              msg=("Colour", "RG")).activate()
            rbbutton = Button(caption="Red/Blue",
                              position=(80, 170),
                              msg=("Colour", "RB")).activate()
            gbbutton = Button(caption="Green/Blue",
                              position=(145, 170),
                              msg=("Colour", "GB")).activate()
            self.link((rgbutton, "outbox"), (self, "buttons"))
            self.link((rbbutton, "outbox"), (self, "buttons"))
            self.link((gbbutton, "outbox"), (self, "buttons"))
            # tool buttons
            circleb = Button(caption="Circle",
                             position=(10, 10),
                             msg=(("Tool", "Circle"), )).activate()
            eraseb = Button(caption="Eraser",
                            position=(100, 10),
                            msg=(("Tool", "Eraser"), )).activate()
            lineb = Button(caption="Line",
                           position=(10, 50),
                           msg=(("Tool", "Line"), )).activate()
            bucketb = Button(caption="Bucket",
                             position=(10, 90),
                             msg=(("Tool", "Bucket"), )).activate()
            eyeb = Button(caption="Eyedropper",
                          position=(10, 130),
                          msg=(("Tool", "Eyedropper"), )).activate()
            addlayerb = Button(caption="Add Layer",
                               position=(10, 540),
                               msg=(("Layer", "Add"), )).activate()
            prevlayerb = Button(caption="<-",
                                position=(80, 540),
                                msg=(("Layer", "Prev"), )).activate()
            nextlayerb = Button(caption="->",
                                position=(110, 540),
                                msg=(("Layer", "Next"), )).activate()
            dellayerb = Button(caption="Delete",
                               position=(140, 540),
                               msg=(("Layer", "Delete"), )).activate()
            self.link((circleb, "outbox"), (self, "outbox"), passthrough=2)
            self.link((eraseb, "outbox"), (self, "outbox"), passthrough=2)
            self.link((lineb, "outbox"), (self, "outbox"), passthrough=2)
            self.link((bucketb, "outbox"), (self, "outbox"), passthrough=2)
            self.link((eyeb, "outbox"), (self, "outbox"), passthrough=2)
            self.link((addlayerb, "outbox"), (self, "outbox"), passthrough=2)
            self.link((prevlayerb, "outbox"), (self, "outbox"), passthrough=2)
            self.link((nextlayerb, "outbox"), (self, "outbox"), passthrough=2)
            self.link((dellayerb, "outbox"), (self, "outbox"), passthrough=2)
            SizePicker = XYPad(size=(255, 50),
                               bouncingPuck=False,
                               position=(10, 480),
                               bgcolour=(0, 0, 0),
                               fgcolour=(255, 255, 255),
                               slider=True).activate()
            self.link((SizePicker, "outbox"), (self, "outbox"), passthrough=2)
            AlphaPicker = XYPad(size=(255, 20),
                                bouncingPuck=False,
                                position=(10, 575),
                                bgcolour=(0, 0, 0),
                                fgcolour=(255, 255, 255),
                                slider=True,
                                alpha=True).activate()
            self.link((AlphaPicker, "outbox"), (self, "outbox"), passthrough=2)

        #clock - don't really need this
        FPS = 60
        clock = Clock(float(1) / FPS).activate()
        self.link((clock, "outbox"), (self, "newframe"))

        # Initial render so we don't see a blank screen
        self.drawBG()
        #  self.render()
        if self.editable:
            self.send(
                {
                    "ADDLISTENEVENT": pygame.MOUSEBUTTONDOWN,
                    "surface": self.display
                }, "display_signal")

            self.send(
                {
                    "ADDLISTENEVENT": pygame.MOUSEBUTTONUP,
                    "surface": self.display
                }, "display_signal")

            self.send(
                {
                    "ADDLISTENEVENT": pygame.MOUSEMOTION,
                    "surface": self.display
                }, "display_signal")

        done = False
        while not done:
            if not self.anyReady():
                self.pause()
            yield 1
            while self.dataReady("buttons"):
                bmsg = self.recv("buttons")
                if bmsg[0] == "Colour":
                    self.colours = bmsg[1]
                    self.drawBG()

            while self.dataReady("control"):
                cmsg = self.recv("control")
                if (isinstance(cmsg, producerFinished)):
                    self.send(cmsg, "signal")
                    done = True

            while self.dataReady("inbox"):
                for event in self.recv("inbox"):

                    if event.type == pygame.MOUSEBUTTONDOWN:
                        self.clickTime = time.time()
                        if self.slider:
                            self.sliderPos = event.pos[0]
                            self.drawBG()
                        if self.display.get_rect().collidepoint(*event.pos):
                            self.mouseDown = True
                            self.isBouncing = False
                            self.mousePositions = []
                            self.puckVel = [0, 0]
                            self.puckPos = list(event.pos)
                            self.lastMousePos = event.pos
                            self.send(
                                (self.messagePrefix + self.positionMsg,
                                 (float(self.puckPos[0]) / self.size[0],
                                  float(self.puckPos[1]) / self.size[1])),
                                "localChanges")

                            self.send((self.messagePrefix + "Velocity",
                                       self.puckVel), "localChanges")

                    if event.type == pygame.MOUSEBUTTONUP:
                        if self.mouseDown:
                            if self.slider:
                                self.sliderPos = event.pos[0]
                                self.drawBG()
                            if (self.bouncingPuck
                                    and time.time() - self.clickTime > 0.1):
                                # Click and drag
                                self.isBouncing = True
                                if len(self.mousePositions):
                                    for i in xrange(2):
                                        # Use the average of the last 50
                                        # relative mouse positions
                                        positions = [
                                            x[i] for x in self.mousePositions
                                        ]
                                        self.puckVel[i] = sum(positions)
                                        self.puckVel[i] /= float(
                                            len(positions))
                            else:
                                # Just a click
                                self.puckVel = [0, 0]
                                self.render()
                            self.send((self.messagePrefix + "Velocity",
                                       self.puckVel), "localChanges")
                        self.mouseDown = False

                    if event.type == pygame.MOUSEMOTION and self.mouseDown:
                        if self.slider:
                            self.sliderPos = event.pos[0]
                            self.drawBG()
                        if self.display.get_rect().collidepoint(*event.pos):
                            # We are dragging inside the display
                            # Keep a buffer of 50 mouse positions
                            if len(self.mousePositions) > 50:
                                del self.mousePositions[0]
                            relPos = []
                            for i in xrange(2):
                                relPos.append(event.pos[i] -
                                              self.lastMousePos[i])
                            self.mousePositions.append(relPos)
                            # Move the puck to where the mouse is and remember
                            # where it is
                            self.puckPos = list(event.pos)
                            self.lastMousePos = event.pos
                            self.send(
                                (self.messagePrefix + self.positionMsg,
                                 (float(self.puckPos[0]) / self.size[0],
                                  float(self.puckPos[1]) / self.size[1])),
                                "localChanges")
                            self.render()

            if self.dataReady("remoteChanges"):
                bundle = self.recv("remoteChanges")
                # The action to take is given by the last section of the
                # OSC address - this should maybe be done by a component and
                # we just listen for ("Velocity", (xVel, yVel)) tuples
                action = bundle[0].split("/")[-1]
                if action == "Velocity":
                    if self.bouncingPuck:
                        self.puckVel = bundle[1]
                        self.isBouncing = 1
                elif action == "Position":
                    for i in xrange(2):
                        self.puckPos[i] = self.size[i] * bundle[1][i]
                self.render()

            if self.dataReady("newframe"):
                # Time to render a new frame
                # Clear any backlog of render messages
                while self.dataReady("newframe"):
                    self.recv("newframe")

                # Change the direction of the puck if it hits a wall
                if self.isBouncing:
                    self.processCollisions()

                if self.isBouncing:
                    # Update the position
                    for i in xrange(2):
                        self.puckPos[i] += self.puckVel[i]
                    self.render()
コード例 #17
0
ファイル: ColourSelector.py プロジェクト: casibbald/kamaelia
    def main(self):
        """Main loop."""
    #    pgd = PygameDisplay( width=300, height=550 ).activate()
     #   PygameDisplay.setDisplayService(pgd)

        displayservice = PygameDisplay.getDisplayService()
        self.link((self,"display_signal"), displayservice)

        self.send( self.dispRequest,
                    "display_signal")

        for _ in self.waitBox("callback"): yield 1
        self.display = self.recv("callback")

        # colour buttons
        rgbutton = Button(caption="Red/Green",position=(self.position[0],self.position[1]+self.size[1]+5), msg = ("Colour", "RG")).activate()
        rbbutton = Button(caption="Red/Blue",position=(self.position[0]+70,self.position[1]+self.size[1]+5), msg = ("Colour", "RB")).activate()
        gbbutton = Button(caption="Green/Blue",position=(self.position[0]+140,self.position[1]+self.size[1]+5), msg = ("Colour", "GB")).activate()
        self.link( (rgbutton,"outbox"), (self,"buttons") )
        self.link( (rbbutton,"outbox"), (self,"buttons") )
        self.link( (gbbutton,"outbox"), (self,"buttons") )

        


      


        # Initial render so we don't see a blank screen
        self.drawBG()
      #  self.render()
        if self.editable:
            self.send({"ADDLISTENEVENT" : pygame.MOUSEBUTTONDOWN,
                       "surface" : self.display},
                      "display_signal")

            self.send({"ADDLISTENEVENT" : pygame.MOUSEBUTTONUP,
                       "surface" : self.display},
                      "display_signal")

            self.send({"ADDLISTENEVENT" : pygame.MOUSEMOTION,
                       "surface" : self.display},
                      "display_signal")

        done = False
        while not done:
            if not self.anyReady():
                self.pause()
            yield 1
            while self.dataReady("buttons"):
                bmsg = self.recv("buttons")
                if bmsg[0]=="Colour":
                    self.colours = bmsg[1]
                    self.drawBG()
                    
            while self.dataReady("control"):
                cmsg = self.recv("control")
                if (isinstance(cmsg, producerFinished)):
                    self.send(cmsg, "signal")
                    done = True

            while self.dataReady("inbox"):
                for event in self.recv("inbox"):

                    if event.type == pygame.MOUSEBUTTONDOWN:
                        if self.display.get_rect().collidepoint(*event.pos):
                            self.mouseDown = True
                            self.puckPos = event.pos
                            self.render()
                                    

                    if event.type == pygame.MOUSEBUTTONUP:
                        if self.mouseDown:
                            self.puckPos = event.pos
                            self.render()
                        self.mouseDown = False
                    
                    if event.type == pygame.MOUSEMOTION and self.mouseDown:
                        if self.display.get_rect().collidepoint(*event.pos):
                            self.puckPos = event.pos
                            self.render()
コード例 #18
0
ファイル: textbox.py プロジェクト: casibbald/kamaelia
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import pygame
from Kamaelia.UI.Pygame.Display import PygameDisplay
from Kamaelia.Chassis.Graphline import Graphline
from Kamaelia.Util.Console import ConsoleEchoer
from Kamaelia.UI.Pygame.KeyEvent import KeyEvent
from pygame.locals import *

width = 400
height = 200

displayservice = PygameDisplay.getDisplayService()
g = Graphline(displayservice = displayservice,
              linkages = {("self", "outbox") : displayservice,
                          }
              )

disprequest = {"DISPLAYREQUEST" : True,
               "size" : (width,height),               # pixels size for the new surface
               "callback" : (g, "inbox"),  # to send the new surface object to
               "events" : (g, "events")
}

コード例 #19
0
ファイル: Core.py プロジェクト: thangduong/kamaelia
    def main(self):
        """Main event loop, also handles input from other components"""
        displayservice = PygameDisplay.getDisplayService()
        self.link((self, "display_signal"), displayservice)

        self.send(self.disprequest, "display_signal")

        for _ in self.waitBox("callback"):
            yield 1
        self.display = self.recv("callback")
        self.layers.append(self.display)

        #    f = os.path.join('', "pennyarcade.gif")
        #    x = pygame.image.load(f)
        #    colorkey = x.get_at((0, 0))
        #    if colorkey is True:
        #        x.set_colorkey(colorkey, pygame.RLEACCEL)
        #    self.layers.append(x)
        #    self.display = x
        #    self.activeLayIn = len(self.layers)-1
        #    self.activeLayer = self.layers[self.activeLayIn]
        #    self.display.blit( x, (0,0) )

        layerDisp = TextDisplayer(size=(20, 20), position=(520, 10)).activate()
        self.link((self, "laynum"), (layerDisp, "inbox"))
        self.send(
            {
                "ADDLISTENEVENT": pygame.MOUSEBUTTONDOWN,
                "surface": self.display
            }, "display_signal")

        self.send(
            {
                "ADDLISTENEVENT": pygame.MOUSEBUTTONUP,
                "surface": self.display
            }, "display_signal")

        self.send(
            {
                "ADDLISTENEVENT": pygame.MOUSEMOTION,
                "surface": self.display
            }, "display_signal")

        self.send({
            "ADDLISTENEVENT": pygame.KEYDOWN,
            "surface": self.display
        }, "display_signal")
        self.activeLayer = self.layers[self.activeLayIn]
        self.send(self.activeLayIn, "laynum")
        image = pygame.Surface((20, 20))
        pygame.draw.circle(image, (1, 1, 1), (10, 10), self.toolSize, 0)
        # pygame.draw.circle(image, self.selectedColour, (10, 10), 8, 2)
        image.set_at((9, 9), (255, 255, 255))
        image.set_colorkey(0, pygame.RLEACCEL)
        cursor = GfxCursor(self.display, image, (10, 10))

        self.drawBG(True)
        self.blitToSurface()
        FPS = 1
        clock = Clock(float(1) / FPS).activate()
        clock.link((clock, "outbox"), (self, "newframe"))

        done = False
        while not done:
            dirtyrects = []
            dirtyrects.extend([cursor.hide()])
            if not self.anyReady():
                self.pause()
            yield 1
            while self.dataReady("control"):
                cmsg = self.recv("control")
                if isinstance(cmsg, producerFinished) or isinstance(
                        cmsg, shutdownMicroprocess):
                    self.send(cmsg, "signal")
                    done = True
            while self.dataReady("newframe") and self.playing:
                self.recv("newframe")
                if self.currentFrame != 0:
                    self.layers[self.currentFrame].set_alpha(0)
                self.currentFrame = self.currentFrame + 1
                if self.currentFrame == len(self.layers) - 1:
                    self.playing = False
                self.layers[self.currentFrame].set_alpha(255)
                self.blitToSurface()

            while self.dataReady("inbox"):
                for event in self.recv("inbox"):
                    if isinstance(event, tuple):
                        self.send((event, ), "outbox")
                        if event[0] == "Layer":
                            if event[1] == "Add":
                                yield WaitComplete(self.addLayer())
                                self.activeLayIn = len(self.layers) - 1
                                self.activeLayer = self.layers[
                                    self.activeLayIn]
                                self.drawBG()
                                if self.animator and len(self.layers) - 2 >= 1:
                                    for x in self.layers:
                                        s.set_alpha = 0
                                    self.activeLayer.blit(
                                        self.layers[len(self.layers) - 2],
                                        (0, 0))
                                self.blitToSurface()
                            elif event[1] == "Delete":
                                self.send(
                                    producerFinished(message=self.activeLayer),
                                    "display_signal")
                                self.layers.remove(self.activeLayer)
                                self.activeLayIn = 0
                                self.activeLayer = self.layers[
                                    self.activeLayIn]
                            #  print (self.layers)
                            if event[1] == "Next":
                                if self.animator and self.activeLayIn != 0:
                                    self.activeLayer.set_alpha(0)
                                if self.activeLayIn == len(self.layers) - 1:
                                    self.activeLayIn = 0
                                    self.activeLayer = self.layers[
                                        self.activeLayIn]
                                else:
                                    self.activeLayIn += 1
                                    self.activeLayer = self.layers[
                                        self.activeLayIn]
                                if self.animator:
                                    self.activeLayer.set_alpha(255)
                            elif event[1] == "Prev":
                                if self.animator and self.activeLayIn != 0:
                                    self.activeLayer.set_alpha(0)
                                if self.activeLayIn == 0:
                                    self.activeLayIn = len(self.layers) - 1
                                    self.activeLayer = self.layers[
                                        self.activeLayIn]
                                else:
                                    self.activeLayIn -= 1
                                    self.activeLayer = self.layers[
                                        self.activeLayIn]
                                if self.animator:
                                    self.activeLayer.set_alpha(255)
                            self.send(self.activeLayIn, "laynum")
                        elif event[0] == "Tool":
                            self.tool = event[1]
                        elif event[0] == "Size":
                            self.toolSize = event[1] / 3
                            pygame.draw.circle(image, self.selectedColour,
                                               (10, 10), self.toolSize / 3, 0)
                            image.set_at((9, 9), (255, 255, 255))
                            image.set_colorkey(0, pygame.RLEACCEL)
                            cursor = GfxCursor(self.display, image, (10, 10))
                        elif event[0] == "Alpha":
                            self.layers[self.activeLayIn].set_alpha(event[1])
                            self.blitToSurface()
                        #  print (self.activeLayer.get_alpha())
                        elif event[0] == 'Colour':
                            self.selectedColour = event[1]
                            pygame.draw.circle(image, self.selectedColour,
                                               (10, 10), self.toolSize / 3, 0)
                            image.set_at((9, 9), (255, 255, 255))
                            image.set_colorkey(0, pygame.RLEACCEL)
                            cursor = GfxCursor(self.display, image, (10, 10))
                        elif event[0] == 'Save':
                            self.save(event[1])
                        break
                    if event.type == pygame.MOUSEBUTTONDOWN:
                        cursor.disable()
                        if self.tool == "Circle":
                            if event.button == 1:
                                self.oldpos = event.pos
                                self.drawing = True
                        if self.tool == "Eraser":
                            self.selectedColour = self.backgroundColour
                            self.tool = "Line"
                        if self.tool == "Line":
                            if event.button == 1:
                                self.drawing = True
                        if self.tool == "Bucket":
                            self.floodFill(event.pos[0], event.pos[1],
                                           self.selectedColour,
                                           self.activeLayer.get_at(event.pos))
                        if self.tool == "Eyedropper":
                            self.selectedColour = self.activeLayer.get_at(
                                event.pos)
                        if event.button == 3:
                            self.addLayer()
                            #self.oldpos = None
                            #self.drawBG()
                            #self.blitToSurface()
                            #self.send(("clear",), "outbox")
                    elif event.type == (pygame.KEYDOWN):
                        if event.key == pygame.K_c:
                            image = pygame.image.load(
                                os.path.join('', 'pennyarcade.gif'))
                            yield WaitComplete(self.addLayer())
                            self.activeLayIn = len(self.layers) - 1
                            self.activeLayer = self.layers[self.activeLayIn]
                            self.drawBG()
                            self.activeLayer.blit(image, (10, 10))
                            self.blitToSurface()
                            self.send(self.activeLayIn, "laynum")
                        elif event.key == pygame.K_s:
                            """Testing a different brushing technique, bliting a brush"""
                            print(self.size, self.toolSize)
                            yield WaitComplete(self.addBrush())
                            self.activeBrush = self.brushes[len(self.brushes) -
                                                            1]
                            self.activeBrush.fill(self.backgroundColour)
                            pygame.draw.circle(
                                self.activeBrush, self.selectedColour,
                                (self.toolSize / 2, self.toolSize / 2),
                                self.toolSize, 0)
                        elif event.key == pygame.K_a:
                            self.animator = True
                        elif event.key == pygame.K_l:
                            self.layers[1].blit(self.layers[1], (100, 100))
                #         temp = self.layers[1]
                #         self.layers[1].fill(self.backgroundColour)
                #         self.layers[1].blit( temp, (100,100) )
                        elif event.key == pygame.K_o:
                            for x in self.layers:
                                x.set_alpha(0)
                            self.layers[0].set_alpha(255)
                            self.currentFrame = 0
                            while self.dataReady(
                                    "newframe"
                            ):  # empty if there's anything there
                                self.recv("newframe")
                            self.playing = True
                            self.blitToSurface()

                    elif event.type == pygame.MOUSEBUTTONUP and event.button == 1:
                        cursor.enable()
                        if self.tool == "Circle":
                            rad = int(
                                math.sqrt((
                                    (event.pos[0] - self.oldpos[0])**2) + (
                                        (event.pos[1] - self.oldpos[1])**2)))
                            pygame.draw.circle(self.activeLayer,
                                               self.selectedColour,
                                               self.oldpos, rad, 0)
                            circle = ("circle", self.oldpos, rad)
                            #   self.send((circle,), "outbox")
                            self.blitToSurface()
                        self.drawing = False
                        self.oldpos = None
                    elif event.type == pygame.MOUSEMOTION:
                        cursor.update(event)
                        if self.tool == "Line":
                            if self.drawing and self.innerRect.collidepoint(
                                    *event.pos):
                                if self.oldpos == None:
                                    self.oldpos = event.pos
                                else:
                                    # pygame.draw.circle(self.activeLayer, self.selectedColour, self.oldpos, self.toolSize, 0)
                                    r = pygame.draw.line(
                                        self.activeLayer, self.selectedColour,
                                        self.oldpos, event.pos, self.toolSize)
                                    dirtyrects.append(r)
                                    #  self.activeLayer.blit(self.activeBrush, event.pos) FAILED TECHNIQUE
                                    line = ("line", self.oldpos, event.pos)
                                    self.send((line, ), "outbox")
                                    self.oldpos = event.pos
                        self.blitToSurface()
            self.pause()
            pygame.time.delay(5)
            dirtyrects.extend([cursor.show()])
            pygame.display.update(dirtyrects)
            yield 1
コード例 #20
0
ファイル: ToolBox.py プロジェクト: thangduong/kamaelia
    def main(self):
        """Main loop."""
        displayservice = PygameDisplay.getDisplayService()
        self.link((self, "display_signal"), displayservice)
        self.send(self.dispRequest, "display_signal")
        for _ in self.waitBox("callback"):
            yield 1
        self.display = self.recv("callback")

        # tool buttons
        circleb = Button(caption="Circle",
                         position=(10, 10),
                         msg=(("Tool", "Circle"), )).activate()
        eraseb = Button(caption="Eraser",
                        position=(100, 10),
                        msg=(("Tool", "Eraser"), )).activate()
        lineb = Button(caption="Line",
                       position=(10, 50),
                       msg=(("Tool", "Line"), )).activate()
        bucketb = Button(caption="Bucket",
                         position=(10, 90),
                         msg=(("Tool", "Bucket"), )).activate()
        eyeb = Button(caption="Eyedropper",
                      position=(10, 130),
                      msg=(("Tool", "Eyedropper"), )).activate()
        addlayerb = Button(caption="Add Layer",
                           position=(10, 540),
                           msg=(("Layer", "Add"), )).activate()
        prevlayerb = Button(caption="<-",
                            position=(80, 540),
                            msg=(("Layer", "Prev"), )).activate()
        nextlayerb = Button(caption="->",
                            position=(110, 540),
                            msg=(("Layer", "Next"), )).activate()
        dellayerb = Button(caption="Delete",
                           position=(140, 540),
                           msg=(("Layer", "Delete"), )).activate()
        self.link((circleb, "outbox"), (self, "outbox"), passthrough=2)
        self.link((eraseb, "outbox"), (self, "outbox"), passthrough=2)
        self.link((lineb, "outbox"), (self, "outbox"), passthrough=2)
        self.link((bucketb, "outbox"), (self, "outbox"), passthrough=2)
        self.link((eyeb, "outbox"), (self, "outbox"), passthrough=2)
        self.link((addlayerb, "outbox"), (self, "outbox"), passthrough=2)
        self.link((prevlayerb, "outbox"), (self, "outbox"), passthrough=2)
        self.link((nextlayerb, "outbox"), (self, "outbox"), passthrough=2)
        self.link((dellayerb, "outbox"), (self, "outbox"), passthrough=2)
        colSel = ColourSelector(position=(10, 170), size=(255, 255)).activate()
        self.link((colSel, "outbox"), (self, "outbox"), passthrough=2)
        SizeSlider = Slider(size=(255, 50),
                            messagePrefix="Size",
                            position=(10, 460),
                            default=9).activate()
        self.link((SizeSlider, "outbox"), (self, "outbox"), passthrough=2)
        AlphaSlider = Slider(size=(255, 10),
                             messagePrefix="Alpha",
                             position=(10, 515),
                             default=255).activate()
        self.link((AlphaSlider, "outbox"), (self, "outbox"), passthrough=2)
        self.drawBG()
        done = False
        while not done:
            if not self.anyReady():
                self.pause()
            yield 1
コード例 #21
0
ファイル: Slider.py プロジェクト: thangduong/kamaelia
    def main(self):
        """Main loop."""
        displayservice = PygameDisplay.getDisplayService()
        self.link((self,"display_signal"), displayservice)

        self.send( self.dispRequest,
                    "display_signal")

        for _ in self.waitBox("callback"): yield 1
        self.display = self.recv("callback")

        # colour buttons

        


        # Initial render so we don't see a blank screen
        self.sliderPos = self.default
        self.drawBG()
        self.render()

        self.send({"ADDLISTENEVENT" : pygame.MOUSEBUTTONDOWN,
                    "surface" : self.display},
                    "display_signal")

        self.send({"ADDLISTENEVENT" : pygame.MOUSEBUTTONUP,
                    "surface" : self.display},
                    "display_signal")

        self.send({"ADDLISTENEVENT" : pygame.MOUSEMOTION,
                    "surface" : self.display},
                    "display_signal")
        done = False
        while not done:
            if not self.anyReady():
                self.pause()
            yield 1
            while self.dataReady("control"):
                cmsg = self.recv("control")
                if (isinstance(cmsg, producerFinished)):
                    self.send(cmsg, "signal")
                    done = True

            while self.dataReady("inbox"):
                for event in self.recv("inbox"):
                    if event.type == pygame.MOUSEBUTTONDOWN:
                        if self.display.get_rect().collidepoint(*event.pos):
                            self.sliderPos = event.pos[0]
                            self.drawBG()
                            self.render()
                            self.mouseDown = True

                    if event.type == pygame.MOUSEBUTTONUP:
                        if self.mouseDown:
                            self.sliderPos = event.pos[0]
                            self.drawBG()
                            self.render()
                        self.mouseDown = False
                    
                    if event.type == pygame.MOUSEMOTION and self.mouseDown:
                        if self.display.get_rect().collidepoint(*event.pos):
                            if event.pos[0] > self.size[0] or event.pos[0] < 0:
                                self.mouseDown = False
                                break
                            self.sliderPos = event.pos[0]
                            self.drawBG()
                            self.render()
コード例 #22
0
ファイル: XYPad.py プロジェクト: sparkslabs/kamaelia_
    def main(self):
        """Main loop."""
        #    pgd = PygameDisplay( width=300, height=550 ).activate()
        #   PygameDisplay.setDisplayService(pgd)

        displayservice = PygameDisplay.getDisplayService()
        self.link((self, "display_signal"), displayservice)

        self.send(self.dispRequest, "display_signal")

        for _ in self.waitBox("callback"):
            yield 1
        self.display = self.recv("callback")

        # colour buttons
        if self.colourSelector:
            rgbutton = Button(caption="Red/Green", position=(10, 170), msg=("Colour", "RG")).activate()
            rbbutton = Button(caption="Red/Blue", position=(80, 170), msg=("Colour", "RB")).activate()
            gbbutton = Button(caption="Green/Blue", position=(145, 170), msg=("Colour", "GB")).activate()
            self.link((rgbutton, "outbox"), (self, "buttons"))
            self.link((rbbutton, "outbox"), (self, "buttons"))
            self.link((gbbutton, "outbox"), (self, "buttons"))
            # tool buttons
            circleb = Button(caption="Circle", position=(10, 10), msg=(("Tool", "Circle"),)).activate()
            eraseb = Button(caption="Eraser", position=(100, 10), msg=(("Tool", "Eraser"),)).activate()
            lineb = Button(caption="Line", position=(10, 50), msg=(("Tool", "Line"),)).activate()
            bucketb = Button(caption="Bucket", position=(10, 90), msg=(("Tool", "Bucket"),)).activate()
            eyeb = Button(caption="Eyedropper", position=(10, 130), msg=(("Tool", "Eyedropper"),)).activate()
            addlayerb = Button(caption="Add Layer", position=(10, 540), msg=(("Layer", "Add"),)).activate()
            prevlayerb = Button(caption="<-", position=(80, 540), msg=(("Layer", "Prev"),)).activate()
            nextlayerb = Button(caption="->", position=(110, 540), msg=(("Layer", "Next"),)).activate()
            dellayerb = Button(caption="Delete", position=(140, 540), msg=(("Layer", "Delete"),)).activate()
            self.link((circleb, "outbox"), (self, "outbox"), passthrough=2)
            self.link((eraseb, "outbox"), (self, "outbox"), passthrough=2)
            self.link((lineb, "outbox"), (self, "outbox"), passthrough=2)
            self.link((bucketb, "outbox"), (self, "outbox"), passthrough=2)
            self.link((eyeb, "outbox"), (self, "outbox"), passthrough=2)
            self.link((addlayerb, "outbox"), (self, "outbox"), passthrough=2)
            self.link((prevlayerb, "outbox"), (self, "outbox"), passthrough=2)
            self.link((nextlayerb, "outbox"), (self, "outbox"), passthrough=2)
            self.link((dellayerb, "outbox"), (self, "outbox"), passthrough=2)
            SizePicker = XYPad(
                size=(255, 50),
                bouncingPuck=False,
                position=(10, 480),
                bgcolour=(0, 0, 0),
                fgcolour=(255, 255, 255),
                slider=True,
            ).activate()
            self.link((SizePicker, "outbox"), (self, "outbox"), passthrough=2)
            AlphaPicker = XYPad(
                size=(255, 20),
                bouncingPuck=False,
                position=(10, 575),
                bgcolour=(0, 0, 0),
                fgcolour=(255, 255, 255),
                slider=True,
                alpha=True,
            ).activate()
            self.link((AlphaPicker, "outbox"), (self, "outbox"), passthrough=2)

        # clock - don't really need this
        FPS = 60
        clock = Clock(float(1) / FPS).activate()
        self.link((clock, "outbox"), (self, "newframe"))

        # Initial render so we don't see a blank screen
        self.drawBG()
        #  self.render()
        if self.editable:
            self.send({"ADDLISTENEVENT": pygame.MOUSEBUTTONDOWN, "surface": self.display}, "display_signal")

            self.send({"ADDLISTENEVENT": pygame.MOUSEBUTTONUP, "surface": self.display}, "display_signal")

            self.send({"ADDLISTENEVENT": pygame.MOUSEMOTION, "surface": self.display}, "display_signal")

        done = False
        while not done:
            if not self.anyReady():
                self.pause()
            yield 1
            while self.dataReady("buttons"):
                bmsg = self.recv("buttons")
                if bmsg[0] == "Colour":
                    self.colours = bmsg[1]
                    self.drawBG()

            while self.dataReady("control"):
                cmsg = self.recv("control")
                if isinstance(cmsg, producerFinished):
                    self.send(cmsg, "signal")
                    done = True

            while self.dataReady("inbox"):
                for event in self.recv("inbox"):

                    if event.type == pygame.MOUSEBUTTONDOWN:
                        self.clickTime = time.time()
                        if self.slider:
                            self.sliderPos = event.pos[0]
                            self.drawBG()
                        if self.display.get_rect().collidepoint(*event.pos):
                            self.mouseDown = True
                            self.isBouncing = False
                            self.mousePositions = []
                            self.puckVel = [0, 0]
                            self.puckPos = list(event.pos)
                            self.lastMousePos = event.pos
                            self.send(
                                (
                                    self.messagePrefix + self.positionMsg,
                                    (float(self.puckPos[0]) / self.size[0], float(self.puckPos[1]) / self.size[1]),
                                ),
                                "localChanges",
                            )

                            self.send((self.messagePrefix + "Velocity", self.puckVel), "localChanges")

                    if event.type == pygame.MOUSEBUTTONUP:
                        if self.mouseDown:
                            if self.slider:
                                self.sliderPos = event.pos[0]
                                self.drawBG()
                            if self.bouncingPuck and time.time() - self.clickTime > 0.1:
                                # Click and drag
                                self.isBouncing = True
                                if len(self.mousePositions):
                                    for i in xrange(2):
                                        # Use the average of the last 50
                                        # relative mouse positions
                                        positions = [x[i] for x in self.mousePositions]
                                        self.puckVel[i] = sum(positions)
                                        self.puckVel[i] /= float(len(positions))
                            else:
                                # Just a click
                                self.puckVel = [0, 0]
                                self.render()
                            self.send((self.messagePrefix + "Velocity", self.puckVel), "localChanges")
                        self.mouseDown = False

                    if event.type == pygame.MOUSEMOTION and self.mouseDown:
                        if self.slider:
                            self.sliderPos = event.pos[0]
                            self.drawBG()
                        if self.display.get_rect().collidepoint(*event.pos):
                            # We are dragging inside the display
                            # Keep a buffer of 50 mouse positions
                            if len(self.mousePositions) > 50:
                                del self.mousePositions[0]
                            relPos = []
                            for i in xrange(2):
                                relPos.append(event.pos[i] - self.lastMousePos[i])
                            self.mousePositions.append(relPos)
                            # Move the puck to where the mouse is and remember
                            # where it is
                            self.puckPos = list(event.pos)
                            self.lastMousePos = event.pos
                            self.send(
                                (
                                    self.messagePrefix + self.positionMsg,
                                    (float(self.puckPos[0]) / self.size[0], float(self.puckPos[1]) / self.size[1]),
                                ),
                                "localChanges",
                            )
                            self.render()

            if self.dataReady("remoteChanges"):
                bundle = self.recv("remoteChanges")
                # The action to take is given by the last section of the
                # OSC address - this should maybe be done by a component and
                # we just listen for ("Velocity", (xVel, yVel)) tuples
                action = bundle[0].split("/")[-1]
                if action == "Velocity":
                    if self.bouncingPuck:
                        self.puckVel = bundle[1]
                        self.isBouncing = 1
                elif action == "Position":
                    for i in xrange(2):
                        self.puckPos[i] = self.size[i] * bundle[1][i]
                self.render()

            if self.dataReady("newframe"):
                # Time to render a new frame
                # Clear any backlog of render messages
                while self.dataReady("newframe"):
                    self.recv("newframe")

                # Change the direction of the puck if it hits a wall
                if self.isBouncing:
                    self.processCollisions()

                if self.isBouncing:
                    # Update the position
                    for i in xrange(2):
                        self.puckPos[i] += self.puckVel[i]
                    self.render()
コード例 #23
0
ファイル: ToolBox.py プロジェクト: sparkslabs/kamaelia_
    def main(self):
        """Main loop."""
        displayservice = PygameDisplay.getDisplayService()
        self.link((self, "display_signal"), displayservice)
        self.send(self.dispRequest, "display_signal")
        for _ in self.waitBox("callback"):
            yield 1
        self.display = self.recv("callback")

        # tool buttons
        circleb = ImageButton(
            caption=(os.path.join("icons", "EllipseToolIcon.png")),
            position=(10, 10),
            bgcolour=(235, 235, 235),
            msg=(("Tool", "Circle"),),
        ).activate()
        eraseb = ImageButton(
            caption=(os.path.join("icons", "EraserToolIcon.png")),
            position=(100, 10),
            bgcolour=(235, 235, 235),
            msg=(("Tool", "Eraser"),),
        ).activate()
        lineb = ImageButton(
            caption=(os.path.join("icons", "PaintBrushToolIcon.png")),
            position=(10, 50),
            bgcolour=(235, 235, 235),
            msg=(("Tool", "Line"),),
        ).activate()
        bucketb = ImageButton(
            caption=(os.path.join("icons", "PaintBucketIcon.png")),
            position=(10, 90),
            bgcolour=(235, 235, 235),
            msg=(("Tool", "Bucket"),),
        ).activate()
        eyeb = ImageButton(
            caption=(os.path.join("icons", "ColorPickerToolIcon.png")),
            position=(10, 130),
            bgcolour=(235, 235, 235),
            msg=(("Tool", "Eyedropper"),),
        ).activate()
        addlayerb = ImageButton(
            caption=(os.path.join("icons", "PlusButtonIcon.png")),
            position=(10, 540),
            bgcolour=(235, 235, 235),
            msg=(("Layer", "Add"),),
        ).activate()
        prevlayerb = ImageButton(
            caption=(os.path.join("icons", "MenuLayersMoveLayerDownIcon.png")),
            position=(80, 540),
            bgcolour=(235, 235, 235),
            msg=(("Layer", "Prev"),),
        ).activate()
        nextlayerb = ImageButton(
            caption=(os.path.join("icons", "MenuLayersMoveLayerUpIcon.png")),
            position=(110, 540),
            bgcolour=(235, 235, 235),
            msg=(("Layer", "Next"),),
        ).activate()
        dellayerb = ImageButton(
            caption=(os.path.join("icons", "MinusButtonIcon.png")),
            position=(35, 540),
            bgcolour=(235, 235, 235),
            msg=(("Layer", "Delete"),),
        ).activate()
        saveb = ImageButton(
            caption=(os.path.join("icons", "MenuFileSaveIcon.png")),
            position=(100, 130),
            bgcolour=(235, 235, 235),
            msg=(("Save", "Test"),),
        ).activate()
        self.link((circleb, "outbox"), (self, "outbox"), passthrough=2)
        self.link((eraseb, "outbox"), (self, "outbox"), passthrough=2)
        self.link((lineb, "outbox"), (self, "outbox"), passthrough=2)
        self.link((bucketb, "outbox"), (self, "outbox"), passthrough=2)
        self.link((eyeb, "outbox"), (self, "outbox"), passthrough=2)
        self.link((addlayerb, "outbox"), (self, "outbox"), passthrough=2)
        self.link((prevlayerb, "outbox"), (self, "outbox"), passthrough=2)
        self.link((nextlayerb, "outbox"), (self, "outbox"), passthrough=2)
        self.link((dellayerb, "outbox"), (self, "outbox"), passthrough=2)
        self.link((saveb, "outbox"), (self, "outbox"), passthrough=2)
        colSel = ColourSelector(position=(10, 170), size=(255, 255)).activate()
        self.link((colSel, "outbox"), (self, "outbox"), passthrough=2)
        SizeSlider = Slider(size=(255, 50), messagePrefix="Size", position=(10, 460), default=9).activate()
        self.link((SizeSlider, "outbox"), (self, "outbox"), passthrough=2)
        AlphaSlider = Slider(size=(255, 10), messagePrefix="Alpha", position=(10, 515), default=255).activate()
        self.link((AlphaSlider, "outbox"), (self, "outbox"), passthrough=2)

        self.drawBG()
        done = False
        while not done:
            if not self.anyReady():
                self.pause()
            yield 1
コード例 #24
0
    def main(self):
        """Main loop."""
        #    pgd = PygameDisplay( width=300, height=550 ).activate()
        #   PygameDisplay.setDisplayService(pgd)

        displayservice = PygameDisplay.getDisplayService()
        self.link((self, "display_signal"), displayservice)

        self.send(self.dispRequest, "display_signal")

        for _ in self.waitBox("callback"):
            yield 1
        self.display = self.recv("callback")

        # colour buttons
        rgbutton = Button(caption="Red/Green",
                          position=(self.position[0],
                                    self.position[1] + self.size[1] + 5),
                          msg=("Colour", "RG")).activate()
        rbbutton = Button(caption="Red/Blue",
                          position=(self.position[0] + 70,
                                    self.position[1] + self.size[1] + 5),
                          msg=("Colour", "RB")).activate()
        gbbutton = Button(caption="Green/Blue",
                          position=(self.position[0] + 140,
                                    self.position[1] + self.size[1] + 5),
                          msg=("Colour", "GB")).activate()
        self.link((rgbutton, "outbox"), (self, "buttons"))
        self.link((rbbutton, "outbox"), (self, "buttons"))
        self.link((gbbutton, "outbox"), (self, "buttons"))

        # Initial render so we don't see a blank screen
        self.drawBG()
        #  self.render()
        if self.editable:
            self.send(
                {
                    "ADDLISTENEVENT": pygame.MOUSEBUTTONDOWN,
                    "surface": self.display
                }, "display_signal")

            self.send(
                {
                    "ADDLISTENEVENT": pygame.MOUSEBUTTONUP,
                    "surface": self.display
                }, "display_signal")

            self.send(
                {
                    "ADDLISTENEVENT": pygame.MOUSEMOTION,
                    "surface": self.display
                }, "display_signal")

        done = False
        while not done:
            if not self.anyReady():
                self.pause()
            yield 1
            while self.dataReady("buttons"):
                bmsg = self.recv("buttons")
                if bmsg[0] == "Colour":
                    self.colours = bmsg[1]
                    self.drawBG()

            while self.dataReady("control"):
                cmsg = self.recv("control")
                if (isinstance(cmsg, producerFinished)):
                    self.send(cmsg, "signal")
                    done = True

            while self.dataReady("inbox"):
                for event in self.recv("inbox"):

                    if event.type == pygame.MOUSEBUTTONDOWN:
                        if self.display.get_rect().collidepoint(*event.pos):
                            self.mouseDown = True
                            self.puckPos = event.pos
                            self.render()

                    if event.type == pygame.MOUSEBUTTONUP:
                        if self.mouseDown:
                            self.puckPos = event.pos
                            self.render()
                        self.mouseDown = False

                    if event.type == pygame.MOUSEMOTION and self.mouseDown:
                        if self.display.get_rect().collidepoint(*event.pos):
                            self.puckPos = event.pos
                            self.render()
コード例 #25
0
ファイル: ColourSelector.py プロジェクト: casibbald/kamaelia
    def main(self):
        """Main loop."""
    #    pgd = PygameDisplay( width=300, height=550 ).activate()
     #   PygameDisplay.setDisplayService(pgd)

        displayservice = PygameDisplay.getDisplayService()
        self.link((self,"display_signal"), displayservice)

        self.send( self.dispRequest,
                    "display_signal")

        for _ in self.waitBox("callback"): yield 1
        self.display = self.recv("callback")

        # colour buttons
        rgbutton = ImageButton(caption=(os.path.join('icons', 'RedGreenIcon.png')),position=(self.position[0],self.position[1]+self.size[1]+5), msg = ("ColourCombi", "RG"), size = (20,20)).activate()
        rbbutton = ImageButton(caption=(os.path.join('icons', 'RedBlueIcon.png')),position=(self.position[0]+35,self.position[1]+self.size[1]+5), msg = ("ColourCombi", "RB"), size = (20,20)).activate()
        gbbutton = ImageButton(caption=(os.path.join('icons', 'GreenBlueIcon.png')),position=(self.position[0]+70,self.position[1]+self.size[1]+5), msg = ("ColourCombi", "GB"), size = (20,20)).activate()
        self.link( (rgbutton,"outbox"), (self,"buttons") )
        self.link( (rbbutton,"outbox"), (self,"buttons") )
        self.link( (gbbutton,"outbox"), (self,"buttons") )
        # saturator
        saturator = Slider(vertical = True, saturator = True, messagePrefix= "Colour", size=(10,255), position=(self.position[0]+self.size[0]+5,self.position[1] )).activate()
        self.link( (self,"saturator"), (saturator,"colours") )
        self.link( (saturator,"outbox"), (self,"outbox"), passthrough = 2 )


      


        # Initial render so we don't see a blank screen
        self.drawBG()
      #  self.render()
        if self.editable:
            self.send({"ADDLISTENEVENT" : pygame.MOUSEBUTTONDOWN,
                       "surface" : self.display},
                      "display_signal")

            self.send({"ADDLISTENEVENT" : pygame.MOUSEBUTTONUP,
                       "surface" : self.display},
                      "display_signal")

            self.send({"ADDLISTENEVENT" : pygame.MOUSEMOTION,
                       "surface" : self.display},
                      "display_signal")

        done = False
        while not done:
            if not self.anyReady():
                self.pause()
            yield 1
            while self.dataReady("buttons"):
                bmsg = self.recv("buttons")
                if bmsg[0]=="ColourCombi":
                    self.colours = bmsg[1]
                    self.send(bmsg, "saturator")
                    self.drawBG()
                    
            while self.dataReady("control"):
                cmsg = self.recv("control")
                if (isinstance(cmsg, producerFinished)):
                    self.send(cmsg, "signal")
                    done = True

            while self.dataReady("inbox"):
                for event in self.recv("inbox"):

                    if event.type == pygame.MOUSEBUTTONDOWN:
                        if self.display.get_rect().collidepoint(*event.pos):
                            self.mouseDown = True
                            self.puckPos = event.pos
                            self.render()
                                    

                    if event.type == pygame.MOUSEBUTTONUP and self.mouseDown:
                        if self.mouseDown:
                            self.puckPos = event.pos
                            self.render()
                        self.mouseDown = False
                    
                    if event.type == pygame.MOUSEMOTION and self.mouseDown:
                        if self.display.get_rect().collidepoint(*event.pos):
                            self.puckPos = event.pos
                            self.render()
                        else: self.mouseDown = False
コード例 #26
0
ファイル: ColourSelector.py プロジェクト: thangduong/kamaelia
    def main(self):
        """Main loop."""
        #    pgd = PygameDisplay( width=300, height=550 ).activate()
        #   PygameDisplay.setDisplayService(pgd)

        displayservice = PygameDisplay.getDisplayService()
        self.link((self, "display_signal"), displayservice)

        self.send(self.dispRequest, "display_signal")

        for _ in self.waitBox("callback"):
            yield 1
        self.display = self.recv("callback")

        # colour buttons
        rgbutton = ImageButton(caption=(os.path.join('icons',
                                                     'RedGreenIcon.png')),
                               position=(self.position[0],
                                         self.position[1] + self.size[1] + 5),
                               msg=("ColourCombi", "RG"),
                               size=(20, 20)).activate()
        rbbutton = ImageButton(caption=(os.path.join('icons',
                                                     'RedBlueIcon.png')),
                               position=(self.position[0] + 35,
                                         self.position[1] + self.size[1] + 5),
                               msg=("ColourCombi", "RB"),
                               size=(20, 20)).activate()
        gbbutton = ImageButton(caption=(os.path.join('icons',
                                                     'GreenBlueIcon.png')),
                               position=(self.position[0] + 70,
                                         self.position[1] + self.size[1] + 5),
                               msg=("ColourCombi", "GB"),
                               size=(20, 20)).activate()
        self.link((rgbutton, "outbox"), (self, "buttons"))
        self.link((rbbutton, "outbox"), (self, "buttons"))
        self.link((gbbutton, "outbox"), (self, "buttons"))
        # saturator
        saturator = Slider(vertical=True,
                           saturator=True,
                           messagePrefix="Colour",
                           size=(10, 255),
                           position=(self.position[0] + self.size[0] + 5,
                                     self.position[1])).activate()
        self.link((self, "saturator"), (saturator, "colours"))
        self.link((saturator, "outbox"), (self, "outbox"), passthrough=2)

        # Initial render so we don't see a blank screen
        self.drawBG()
        #  self.render()
        if self.editable:
            self.send(
                {
                    "ADDLISTENEVENT": pygame.MOUSEBUTTONDOWN,
                    "surface": self.display
                }, "display_signal")

            self.send(
                {
                    "ADDLISTENEVENT": pygame.MOUSEBUTTONUP,
                    "surface": self.display
                }, "display_signal")

            self.send(
                {
                    "ADDLISTENEVENT": pygame.MOUSEMOTION,
                    "surface": self.display
                }, "display_signal")

        done = False
        while not done:
            if not self.anyReady():
                self.pause()
            yield 1
            while self.dataReady("buttons"):
                bmsg = self.recv("buttons")
                if bmsg[0] == "ColourCombi":
                    self.colours = bmsg[1]
                    self.send(bmsg, "saturator")
                    self.drawBG()

            while self.dataReady("control"):
                cmsg = self.recv("control")
                if (isinstance(cmsg, producerFinished)):
                    self.send(cmsg, "signal")
                    done = True

            while self.dataReady("inbox"):
                for event in self.recv("inbox"):

                    if event.type == pygame.MOUSEBUTTONDOWN:
                        if self.display.get_rect().collidepoint(*event.pos):
                            self.mouseDown = True
                            self.puckPos = event.pos
                            self.render()

                    if event.type == pygame.MOUSEBUTTONUP and self.mouseDown:
                        if self.mouseDown:
                            self.puckPos = event.pos
                            self.render()
                        self.mouseDown = False

                    if event.type == pygame.MOUSEMOTION and self.mouseDown:
                        if self.display.get_rect().collidepoint(*event.pos):
                            self.puckPos = event.pos
                            self.render()
                        else:
                            self.mouseDown = False