@@ -212,12 +212,20 @@ def updateImageSurfaceIfNeeded(self):
212212 self .surface = cairo .ImageSurface (cairo .FORMAT_RGB24 , width , height )
213213 self .width , self .height = width , height
214214
215- def onButtonPressed (self , button ):
215+ def getViewParameterWidgets (self ):
216+ center_x = builder .get_object ("center_x" )
217+ center_y = builder .get_object ("center_y" )
218+ radius = builder .get_object ("radius" )
219+ return [center_x , center_y , radius ]
220+
221+ def getViewParameters (self ):
222+ getValue = lambda w : float (w .get_text ())
223+ return map (getValue , self .getViewParameterWidgets ())
224+
225+ def onUpdateButtonPress (self , button ):
216226 self .updateImageSurfaceIfNeeded ()
217227
218- center_x = float (builder .get_object ("center_x" ).get_text ())
219- center_y = float (builder .get_object ("center_y" ).get_text ())
220- radius = float (builder .get_object ("radius" ).get_text ())
228+ center_x , center_y , radius = self .getViewParameters ()
221229 iterations = int (builder .get_object ("iterations" ).get_text ())
222230
223231 self .view .update (center_x = center_x , center_y = center_y , radius = radius , width = self .width , height = self .height , max_iterations = iterations )
@@ -238,7 +246,16 @@ def onButtonPressed(self, button):
238246 painter_thread = threading .Thread (target = lambda : self .painter (), daemon = True )
239247 painter_thread .start ()
240248
249+ def onCanvasButtonPress (self , canvas , event ):
250+ step = fix2float (self .view .step )
251+ x = fix2float (self .view .corner_x ) + (event .x * step )
252+ y = fix2float (self .view .corner_y ) + ((self .view .height - event .y ) * step )
253+ center_x , center_y , _ = self .getViewParameterWidgets ()
254+ center_x .set_text (str (x ))
255+ center_y .set_text (str (y ))
256+
241257 def onDraw (self , canvas : DrawingArea , cr : cairo .Context ):
258+ #code.interact(local=locals())
242259 cr .set_source_surface (self .surface , 0 , 0 )
243260 cr .paint ()
244261
0 commit comments