root / core / app / canvas / canvas_new.py @ 40

View | Annotate | Download (2.1 KB)

1
from __future__ import with_statement
2
from pymt import *
3
from pyglet.gl import *
4
from layermanager import *
5
6
class Canvas(MTScatterWidget):
7
    def __init__(self, **kwargs):
8
        super(Canvas, self).__init__(**kwargs)
9
        self.canvas_area = MTStencilContainer(pos=(20,20),size=(500,400))
10
        self.add_widget(self.canvas_area)
11
        self.layer_manager = LayerManager(pos=(20,20),canvas=self)
12
        self.canvas_area.add_widget(self.layer_manager)
13
        self.fbo = Fbo(size=(self.width, self.height), with_depthbuffer=False)
14
		
15
    def draw(self):
16
        with gx_matrix:
17
            glColor4f(0,0,0,1)
18
            drawRectangle((0,0),(self.width,self.height))
19
            
20
    def set_mode(self,mode):
21
        self.layer_manager.set_mode(mode)
22
23
    def create_layer(self,pos=(0,0),size=(200,200),color=(0,0,0,0.5)):
24
        self.layer_manager.create_layer(pos=pos,size=size,color=color)
25
        
26
    def save_image(self):
27
        with self.fbo:
28
            self.layer_manager.background.dispatch_event('on_draw')
29
            for layer in self.layer_manager.layer_list :
30
                layer.dispatch_event('on_draw')
31
		data = (self.fbo.texture).get_image_data()
32
        data.save(file='test.png')
33
		
34
if __name__ == '__main__':
35
    w = MTWindow()
36
    canvas = Canvas(size=(540,440),pos=(w.width/2-260,w.height/2-120))
37
    w.add_widget(canvas)
38
    draw_but = MTButton(label="Painting")
39
    w.add_widget(draw_but)
40
    @draw_but.event    
41
    def on_press(touchID, x, y):
42
        canvas.set_mode(mode='draw')
43
    zoom_but = MTButton(label="Layering",pos=(draw_but.width+5,0))
44
    w.add_widget(zoom_but)
45
    @zoom_but.event    
46
    def on_press(touchID, x, y):
47
        canvas.set_mode(mode='zoom')
48
    
49
    add_but = MTButton(label="Save",pos=(draw_but.width+zoom_but.width+10,0))
50
    @add_but.event    
51
    def on_press(touchID, x, y):
52
        canvas.save_image()
53
    w.add_widget(add_but)
54
    
55
    canvas.create_layer(pos=(100,100),size=(200,200),color=(1,0,0,0.8))
56
    canvas.create_layer(size=(300,200),color=(0,1,0,0.8))
57
    canvas.create_layer(size=(250,150),color=(0,0,1,0.8))
58
    runTouchApp()
59
    		
60
		
61