3636
3737from math import atan2
3838from 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+ )
4045from typing import TYPE_CHECKING , List
4146
4247from baseCurveEqualizer import BaseCurveEqualizer
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
479533if __name__ == "__main__" :
480- CurveEqualizer ( currentGlyph = True )
534+ OpenWindow ( CurveEqualizer )
0 commit comments