Skip to content

Commit 4d36acd

Browse files
committed
mandelbrot-app: allow to set coordinates per click
1 parent 7f0cc30 commit 4d36acd

File tree

2 files changed

+29
-6
lines changed

2 files changed

+29
-6
lines changed

software/mandelbrot-app.py

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

software/mandelbrot-client-gui.glade

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@
150150
<property name="visible">True</property>
151151
<property name="can_focus">True</property>
152152
<property name="receives_default">True</property>
153-
<signal name="pressed" handler="onButtonPressed" swapped="no"/>
153+
<signal name="pressed" handler="onUpdateButtonPress" swapped="no"/>
154154
</object>
155155
<packing>
156156
<property name="expand">False</property>
@@ -167,9 +167,15 @@
167167
</child>
168168
<child>
169169
<object class="GtkDrawingArea" id="canvas">
170+
<property name="name">canvas</property>
170171
<property name="visible">True</property>
171-
<property name="can_focus">False</property>
172+
<property name="can_focus">True</property>
173+
<property name="has_focus">True</property>
174+
<property name="has_default">True</property>
175+
<property name="events">GDK_POINTER_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_STRUCTURE_MASK</property>
176+
<signal name="button-press-event" handler="onCanvasButtonPress" swapped="no"/>
172177
<signal name="draw" handler="onDraw" swapped="no"/>
178+
<signal name="motion-notify-event" handler="onCanvasMotion" swapped="no"/>
173179
</object>
174180
<packing>
175181
<property name="expand">True</property>

0 commit comments

Comments
 (0)