Skip to content

Commit 2ac6ad5

Browse files
committed
Split class (#13)
1 parent 1d4b19a commit 2ac6ad5

File tree

2 files changed

+129
-75
lines changed

2 files changed

+129
-75
lines changed

RoboFont/Curve EQ.roboFontExt/info.plist

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,9 @@
3838
<key>requiresVersionMinor</key>
3939
<string>0</string>
4040
<key>timeStamp</key>
41-
<real>1665839337.0</real>
41+
<real>1665848873.0</real>
4242
<key>version</key>
43-
<string>2.1.3</string>
43+
<string>2.1.4</string>
4444
<key>com.robofontmechanic.Mechanic</key>
4545
<dict>
4646
<key>repository</key>

RoboFont/Curve EQ.roboFontExt/lib/EqualizeCurves.py

Lines changed: 127 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,12 @@
3636

3737
from math import atan2
3838
from mojo.extensions import getExtensionDefault, setExtensionDefault
39-
from mojo.subscriber import Subscriber, WindowController
39+
from mojo.subscriber import (
40+
Subscriber,
41+
WindowController,
42+
registerGlyphEditorSubscriber,
43+
unregisterGlyphEditorSubscriber,
44+
)
4045
from typing import TYPE_CHECKING, List
4146

4247
from baseCurveEqualizer import BaseCurveEqualizer
@@ -64,7 +69,113 @@
6469
print("DEBUG mode is on")
6570

6671

67-
class CurveEqualizer(BaseCurveEqualizer, Subscriber, WindowController):
72+
class CurveEqSubscriber(Subscriber):
73+
74+
debug = True
75+
76+
controller: CurveEqualizer | None = None
77+
78+
def build(self):
79+
if self.debug:
80+
print("build")
81+
if self.controller is None:
82+
return
83+
84+
# self.controller.build()
85+
86+
def started(self):
87+
if self.debug:
88+
print("subscription started")
89+
if self.controller is None:
90+
return
91+
92+
# self.controller.started()
93+
94+
def destroy(self):
95+
if self.debug:
96+
print("stop subscription")
97+
if self.controller is None:
98+
return
99+
100+
# self.controller.destroy()
101+
102+
def glyphEditorDidOpen(self, info) -> None:
103+
if DEBUG:
104+
print("**** glyphEditorDidOpen", info["glyph"])
105+
return
106+
107+
self.dglyph = info.get("glyph", None)
108+
glyphEditor = info.get("glyphEditor", None)
109+
if glyphEditor != self.glyphEditor:
110+
self.glyphEditor = glyphEditor
111+
if DEBUG:
112+
print("Update glyphEditor:", self.glyphEditor)
113+
self.buildContainer()
114+
self.checkSecondarySelectors()
115+
self.updateCurvePreview()
116+
117+
def glyphEditorDidSetGlyph(self, info) -> None:
118+
if DEBUG:
119+
print("glyphEditorDidSetGlyph", info["glyph"])
120+
if self.controller is None:
121+
return
122+
123+
self.controller.dglyph = info.get("glyph", None)
124+
glyphEditor = info.get("glyphEditor", None)
125+
if glyphEditor != self.controller.glyphEditor:
126+
self.controller.glyphEditor = glyphEditor
127+
if DEBUG:
128+
print("Update glyphEditor:", self.controller.glyphEditor)
129+
self.controller.buildContainer()
130+
self.controller.checkSecondarySelectors()
131+
self.controller.updateCurvePreview()
132+
133+
def glyphEditorWillClose(self, info) -> None:
134+
if DEBUG:
135+
print("glyphEditorWillClose")
136+
if self.controller is None:
137+
return
138+
139+
self.controller.dglyph = None
140+
self.controller.glyphEditor = None
141+
if self.controller.container is not None:
142+
if DEBUG:
143+
print(" Clear layers")
144+
self.controller.container.clearSublayers()
145+
self.controller.checkSecondarySelectors()
146+
147+
def currentGlyphDidChangeOutline(self, info) -> None:
148+
if DEBUG:
149+
print("currentGlyphDidChangeOutline")
150+
if self.controller is None:
151+
return
152+
153+
self.controller._dglyph = info.get("glyph", None)
154+
if self.controller._dglyph is None:
155+
self.controller.tmp_glyph = None
156+
return
157+
158+
self.controller.tmp_glyph = self.controller._dglyph.copy()
159+
self.controller.updateCurvePreview()
160+
161+
def glyphDidChangeSelection(self, info) -> None:
162+
if DEBUG:
163+
print("glyphDidChangeSelection")
164+
if self.controller is None:
165+
return
166+
167+
glyph = info["glyph"]
168+
self.controller.dglyph = glyph
169+
if DEBUG:
170+
print("Selection:", self.controller.dglyph_selection)
171+
self.controller.checkSecondarySelectors()
172+
self.controller.updateCurvePreview()
173+
174+
175+
class CurveEqualizer(BaseCurveEqualizer, WindowController):
176+
177+
glyphEditorSubscriberClass = CurveEqSubscriber
178+
68179
def restore_state(self) -> None:
69180
# Restore saved state
70181
if DEBUG:
@@ -122,12 +233,16 @@ def build(self) -> None:
122233
self.container = None
123234

124235
def started(self) -> None:
125-
self._checkSecondarySelectors()
236+
self.checkSecondarySelectors()
126237
self.paletteView.open()
238+
self.glyphEditorSubscriberClass.controller = self
239+
registerGlyphEditorSubscriber(self.glyphEditorSubscriberClass)
127240

128241
def destroy(self) -> None:
129242
if self.container is not None:
130243
self.container.clearSublayers()
244+
unregisterGlyphEditorSubscriber(self.glyphEditorSubscriberClass)
245+
self.glyphEditorSubscriberClass.controller = None
131246

132247
@property
133248
def dglyph(self) -> RGlyph | None:
@@ -157,67 +272,6 @@ def dglyph_selection(self) -> List:
157272
def dglyph_selection(self, value: List) -> None:
158273
self._dglyph_selection = value
159274

160-
# Events
161-
162-
def glyphEditorDidOpen(self, info) -> None:
163-
print("**** glyphEditorDidOpen", info["glyph"])
164-
return
165-
166-
self.dglyph = info.get("glyph", None)
167-
glyphEditor = info.get("glyphEditor", None)
168-
if glyphEditor != self.glyphEditor:
169-
self.glyphEditor = glyphEditor
170-
if DEBUG:
171-
print("Update glyphEditor:", self.glyphEditor)
172-
self.buildContainer()
173-
self._checkSecondarySelectors()
174-
self._curvePreview()
175-
176-
def glyphEditorDidSetGlyph(self, info) -> None:
177-
if DEBUG:
178-
print("glyphEditorDidSetGlyph", info["glyph"])
179-
self.dglyph = info.get("glyph", None)
180-
glyphEditor = info.get("glyphEditor", None)
181-
if glyphEditor != self.glyphEditor:
182-
self.glyphEditor = glyphEditor
183-
if DEBUG:
184-
print("Update glyphEditor:", self.glyphEditor)
185-
self.buildContainer()
186-
self._checkSecondarySelectors()
187-
self._curvePreview()
188-
189-
def glyphEditorWillClose(self, info) -> None:
190-
if DEBUG:
191-
print("glyphEditorWillClose")
192-
self.dglyph = None
193-
self.glyphEditor = None
194-
if self.container is not None:
195-
if DEBUG:
196-
print(" Clear layers")
197-
self.container.clearSublayers()
198-
self._checkSecondarySelectors()
199-
200-
def currentGlyphDidChangeOutline(self, info) -> None:
201-
if DEBUG:
202-
print("currentGlyphDidChangeOutline")
203-
self._dglyph = info.get("glyph", None)
204-
if self._dglyph is None:
205-
self.tmp_glyph = None
206-
return
207-
208-
self.tmp_glyph = self._dglyph.copy()
209-
self._curvePreview()
210-
211-
def glyphDidChangeSelection(self, info) -> None:
212-
if DEBUG:
213-
print("glyphDidChangeSelection")
214-
glyph = info["glyph"]
215-
self.dglyph = glyph
216-
if DEBUG:
217-
print("Selection:", self.dglyph_selection)
218-
self._checkSecondarySelectors()
219-
self._curvePreview()
220-
221275
def buildContainer(self) -> None:
222276
if DEBUG:
223277
print("Building container for glyph editor", self.glyphEditor)
@@ -258,27 +312,27 @@ def getCurveLayer(self) -> MerzCALayer | None:
258312
)
259313
return layer
260314

261-
# Callbacks
315+
# UI Callbacks
262316

263317
def _changeMethod(self, sender) -> None:
264318
choice = sender.get()
265319
self.method = self.methods[choice]
266320
self._setPreviewOptions()
267-
self._checkSecondarySelectors()
268-
self._curvePreview()
321+
self.checkSecondarySelectors()
322+
self.updateCurvePreview()
269323

270324
def _changeCurvature(self, sender) -> None:
271325
choice = sender.get()
272326
self.curvature = self.curvatures[choice]
273-
self._curvePreview()
327+
self.updateCurvePreview()
274328

275329
def _changeCurvatureFree(self, sender) -> None:
276330
self.curvatureFree = sender.get() / 100
277-
self._curvePreview()
331+
self.updateCurvePreview()
278332

279333
def _changeTension(self, sender) -> None:
280334
self.tension = sender.get() / 100
281-
self._curvePreview()
335+
self.updateCurvePreview()
282336

283337
def windowWillClose(self, sender) -> None:
284338
setExtensionDefault(
@@ -299,7 +353,7 @@ def windowWillClose(self, sender) -> None:
299353
)
300354
setExtensionDefault(f"{extensionID}.debug", DEBUG)
301355

302-
def _checkSecondarySelectors(self) -> None:
356+
def checkSecondarySelectors(self) -> None:
303357
# Enable or disable slider/radio buttons
304358
if self.dglyph is None or not self.dglyph_selection:
305359
self.paletteView.group.eqMethodSelector.enable(False)
@@ -371,7 +425,7 @@ def _drawGeometry(self) -> None:
371425
)
372426
appendTriangleSide(self.container, p3, beta, a)
373427

374-
def _curvePreview(self) -> None:
428+
def updateCurvePreview(self) -> None:
375429
if DEBUG:
376430
print("Building curve preview ...")
377431
if (
@@ -477,4 +531,4 @@ def _eqSelected(self, sender=None) -> None:
477531

478532

479533
if __name__ == "__main__":
480-
CurveEqualizer(currentGlyph=True)
534+
OpenWindow(CurveEqualizer)

0 commit comments

Comments
 (0)