1
1
from ec_classes import FatalError , RuntimeError
2
2
from ec_handler import Handler
3
- from graphson import createScreen , renderSpec , renderScreen , getElement , closeScreen , setOnClick
3
+ from graphson import createScreen , render , showScreen , getElement , closeScreen , setOnClick
4
+ import json
4
5
5
6
class Graphics (Handler ):
6
7
@@ -45,24 +46,44 @@ def k_close(self, command):
45
46
return True
46
47
47
48
def r_close (self , command ):
48
- closeScreen (self .screen )
49
- self .screen = None
49
+ closeScreen ()
50
50
return self .nextPC ()
51
51
52
52
def k_create (self , command ):
53
53
if self .nextToken () == 'screen' :
54
+ while True :
55
+ token = self .peek ()
56
+ if token == 'at' :
57
+ self .nextToken ()
58
+ command ['left' ] = self .nextValue ()
59
+ command ['top' ] = self .nextValue ()
60
+ elif token == 'size' :
61
+ self .nextToken ()
62
+ command ['width' ] = self .nextValue ()
63
+ command ['height' ] = self .nextValue ()
64
+ elif token == 'fill' :
65
+ self .nextToken ()
66
+ command ['fill' ] = self .nextValue ()
67
+ else :
68
+ break
54
69
self .add (command )
55
70
return True
56
71
return False
57
72
58
73
def r_create (self , command ):
59
- self . screen = createScreen ()
74
+ createScreen (command )
60
75
return self .nextPC ()
61
76
62
- def k_label (self , command ):
63
- return self .compileVariable (command , 'label ' , False )
77
+ def k_ellipse (self , command ):
78
+ return self .compileVariable (command , 'ellipse ' , False )
64
79
65
- def r_label (self , command ):
80
+ def r_ellipse (self , command ):
81
+ return self .nextPC ()
82
+
83
+ def k_image (self , command ):
84
+ return self .compileVariable (command , 'image' , False )
85
+
86
+ def r_image (self , command ):
66
87
return self .nextPC ()
67
88
68
89
def k_on (self , command ):
@@ -91,6 +112,12 @@ def k_on(self, command):
91
112
cmd ['debug' ] = False
92
113
self .addCommand (cmd )
93
114
self .compileOne ()
115
+ cmd = {}
116
+ cmd ['domain' ] = 'core'
117
+ cmd ['lino' ] = command ['lino' ]
118
+ cmd ['keyword' ] = 'stop'
119
+ cmd ['debug' ] = False
120
+ self .addCommand (cmd )
94
121
# Fixup the link
95
122
self .getCommandAt (pcNext )['goto' ] = self .getPC ()
96
123
return True
@@ -109,36 +136,27 @@ def r_on(self, command):
109
136
setOnClick (value ['content' ], lambda : self .run (pc ))
110
137
return self .nextPC ()
111
138
112
- def k_oval (self , command ):
113
- return self .compileVariable (command , 'oval' , False )
114
-
115
- def r_oval (self , command ):
116
- return self .nextPC ()
117
-
118
139
def k_rectangle (self , command ):
119
140
return self .compileVariable (command , 'rectangle' , False )
120
141
121
142
def r_rectangle (self , command ):
122
143
return self .nextPC ()
123
144
124
145
def k_render (self , command ):
125
- if self .nextIs ('screen' ):
126
- command ['name' ] = None
127
- self .add (command )
128
- return True
129
- elif self .isSymbol ():
146
+ if self .nextIsSymbol ():
130
147
record = self .getSymbolRecord ()
131
148
name = record ['name' ]
132
149
type = record ['type' ]
133
150
command ['type' ] = type
134
151
if type == 'variable' :
135
152
command ['name' ] = name
136
153
if self .peek () == 'in' :
154
+ self .nextToken ()
137
155
if self .nextIsSymbol ():
138
156
record = self .getSymbolRecord ()
139
157
type = record ['type' ]
140
158
name = record ['name' ]
141
- if type in ['rect ' , 'oval ' ]:
159
+ if type in ['rectangle ' , 'ellipse ' ]:
142
160
command ['parent' ] = record ['name' ]
143
161
self .add (command )
144
162
return True
@@ -154,15 +172,29 @@ def k_render(self, command):
154
172
return False
155
173
156
174
def r_render (self , command ):
157
- if command ['name' ] == None :
158
- renderScreen (self .screen )
159
- else :
160
- variable = self .getVariable (command ['name' ])
161
- spec = self .getRuntimeValue (variable )
162
- offset = {'dx' : 0 , 'dy' : 0 }
163
- result = renderSpec (self .screen , spec , offset )
164
- if result != None :
165
- RuntimeError (f'Rendering error: { result } ' )
175
+ variable = self .getVariable (command ['name' ])
176
+ parent = command ['parent' ]
177
+ value = self .getRuntimeValue (variable )
178
+ result = render (value , parent )
179
+ if result != None :
180
+ RuntimeError (f'Rendering error: { result } ' )
181
+ return self .nextPC ()
182
+
183
+ def k_show (self , command ):
184
+ if self .nextIs ('screen' ):
185
+ command ['name' ] = None
186
+ self .add (command )
187
+ return True
188
+ return False
189
+
190
+ def r_show (self , command ):
191
+ showScreen ()
192
+ return self .nextPC ()
193
+
194
+ def k_text (self , command ):
195
+ return self .compileVariable (command , 'text' , False )
196
+
197
+ def r_text (self , command ):
166
198
return self .nextPC ()
167
199
168
200
#############################################################################
0 commit comments