コード例 #1
0
ファイル: canvas.py プロジェクト: yantrabuddhi/blocos
    def set_adjustment(self):
        
        maxx = 0
        maxy = 0
        
        # max value of the scrolls should be the block more distant + 50 in x and y
        for block in self.get_children():
            
            if block.get_x()+block.get_width() > maxx:
                maxx = block.get_x()+block.get_width()
                
            if block.get_y()+block.get_height() > maxy:
                maxy = block.get_y()+block.get_height()
                
        self.get_hadjustment().set_all(self.get_hadjustment().value, 0, maxx+50, 1)
        self.get_vadjustment().set_all(self.get_vadjustment().value, 0, maxy+50, 1)

        # resize canvas
        self.set_size(maxx+10, maxy+10)
コード例 #2
0
ファイル: container.py プロジェクト: yantrabuddhi/blocos
 def paste(self):
     block = None
     cpblocks = []
     
     cpblocks = self.copy_group( self.buffer )
     
     for block in cpblocks:
         block.set_position( block.get_position() + Vector(20, 20) )
         block.put_aux( self, block.get_x(), block.get_y() )
         
     self.buffer = cpblocks
     self.unselect( self.get_children() )
     self.select( self.buffer )
     self.set_group( block )
     self.sort_blocks()
コード例 #3
0
ファイル: canvas.py プロジェクト: yantrabuddhi/blocos
    def on_expose(self, widget, event):
        
        if self.first_expose == False and event and widget:
            self.drawable     = event.window
            self.gc           = self.drawable.new_gc()
            self.cm           = self.gc.get_colormap()
            self.bg           = self.cm.alloc_color("#ffffff")
            
            if self.find_startblock() == None:
                self.startblock = start_block()
                self.startblock.put(self, 10, 10)
                self.set_clicked( self.startblock )
                self.change_done()
                
            self.first_expose = True
            
            self.set_adjustment()
            
        for block in self.get_children()[:]:
            if block.was_put == False:
                block.put(self, block.get_x(), block.get_y() )
            #blocos no fim da lista são desenhados na frente
            block.draw(self.drawable, self.gc)

        if self.clicked:
            #seta ao lado do bloco
            self.drawable.draw_pixbuf( self.gc, self.arrow, 0, 0, self.clicked.get_x()-self.arrow.get_width(), self.clicked.get_y()+self.clicked.get_height()/2-self.arrow.get_height()/2 )

        if not self.create_block is None:
            if self.mousex != -1 and self.mousey != -1:
                #uma imagem flutuando com uma previsão do novo bloco a ser criado
                self.drawable.draw_pixbuf( self.gc, self.create_block.get_image()[0], 0, 0, self.mousex, self.mousey )
        
        # retângulo de selecão
        if self.selectrect_on == True:
            self.gc.set_line_attributes(1, gtk.gdk.LINE_DOUBLE_DASH, gtk.gdk.CAP_ROUND, gtk.gdk.JOIN_ROUND)
            self.drawable.draw_rectangle( self.gc, False, self.selectrect.x, self.selectrect.y, self.selectrect.w-1, self.selectrect.h-1 )
        
        return True
コード例 #4
0
ファイル: canvas.py プロジェクト: yantrabuddhi/blocos
    def on_button_release(self, widget, event):
        
        if self.clicked:
            self.arrow_mark_dirty()
            self.clicked.brelease( Vector(event.x, event.y) )
            self.arrow_mark_dirty()

        if self.selectrect_on == True:
            
            if self.selectrect.w > 0 and self.selectrect.h > 0:
                self.selectrect_mark_dirty()
                
                collide_pix = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, False, 8, self.selectrect.w, self.selectrect.h )
                collide_pix.fill( 0x00000000 )
                collide_pix = collide_pix.add_alpha(False, chr(255), chr(255), chr(255) )
                
                group = set()
                for block in self.get_children():
                    if self.selectrect.pos_inside( block.get_position() ) or collide_pixbuf(block.get_x(), block.get_y(), block.get_image()[0], self.selectrect.x, self.selectrect.y, collide_pix):
                        group.add( block )
                
                self.unselect( self.get_children() )
                self.select( group )
                self.set_group( self.clicked )
                
            self.selectrect_on = False
            
        self.get_toplevel().window.set_cursor(None)
        self.set_adjustment()