@@ -30,7 +30,8 @@ internal class OnyxsdkPenArea(context: Context, messenger: BinaryMessenger, id:
3030 Pen (1 ),
3131 Brush (2 ),
3232 Pencil (3 ),
33- Marker (4 )
33+ Marker (4 ),
34+ Disabled (5 )
3435 }
3536
3637 private val channel: MethodChannel = MethodChannel (messenger, " onyxsdk_pen_area" )
@@ -101,11 +102,28 @@ internal class OnyxsdkPenArea(context: Context, messenger: BinaryMessenger, id:
101102 2 -> StrokeStyle .Brush
102103 3 -> StrokeStyle .Pencil
103104 4 -> StrokeStyle .Marker
105+ 5 -> StrokeStyle .Disabled
104106 else -> StrokeStyle .Pen
105107 }
106- touchHelper.setStrokeStyle(strokeStyleToOnyx(strokeStyle))
107- touchHelper.setStrokeWidth(strokeWidth)
108- touchHelper.setStrokeColor(strokeColor)
108+
109+ if (strokeStyle != StrokeStyle .Disabled ) {
110+ touchHelper.setStrokeStyle(strokeStyleToOnyx(strokeStyle))
111+ touchHelper.setStrokeWidth(strokeWidth)
112+ touchHelper.setStrokeColor(strokeColor)
113+ }
114+
115+ // I've done at least 10 test builds with different variations of banging
116+ // rocks together to make this abhorrent eldritch horror to actually start
117+ // behaving and it still sometimes draws if style is disabled and stuff is done
118+ // fast enough. Let this be a note for future endeavoring perfectionists.
119+ // This specific combination seems to work best and still sometimes fails.
120+ // My wild guess is ONYX Note app is dismantling the whole overlay if eraser
121+ // is selected or using some hidden APIs. Or I was banging the wrong types of rocks...
122+ // TLDR I gave up here. Works good enough, certainly better than just drawing lines.
123+ // BTW, doing forceRefresh() and/or setDraw(...) here breaks the overlay altogether ;(
124+
125+ touchHelper.setRawDrawingEnabled(strokeStyle != StrokeStyle .Disabled )
126+ EpdController .invalidate(view, UpdateMode .GC )
109127 }
110128
111129
@@ -145,9 +163,7 @@ internal class OnyxsdkPenArea(context: Context, messenger: BinaryMessenger, id:
145163 refreshTimerTask?.cancel()
146164 refreshTimerTask = object : TimerTask () {
147165 override fun run () {
148- touchHelper.setRawDrawingEnabled(false )
149- EpdController .invalidate(view, UpdateMode .GC );
150- touchHelper.setRawDrawingEnabled(true )
166+ forceRefresh()
151167 }
152168 }
153169 Timer ().schedule(refreshTimerTask, refreshDelayMs)
@@ -197,13 +213,30 @@ internal class OnyxsdkPenArea(context: Context, messenger: BinaryMessenger, id:
197213 StrokeStyle .Brush -> TouchHelper .STROKE_STYLE_NEO_BRUSH
198214 StrokeStyle .Pencil -> TouchHelper .STROKE_STYLE_CHARCOAL
199215 StrokeStyle .Marker -> TouchHelper .STROKE_STYLE_MARKER
216+ StrokeStyle .Disabled -> TouchHelper .STROKE_STYLE_PENCIL
217+ }
218+ }
219+
220+ fun setDraw (enabled : Boolean ) {
221+ if (enabled) {
222+ touchHelper.openRawDrawing()
223+ touchHelper.setRawDrawingEnabled(true )
224+ touchHelper.setRawDrawingRenderEnabled(true )
225+ } else {
226+ touchHelper.closeRawDrawing()
200227 }
201228 }
202229
203230 fun drawPreview () {
204231 currentStroke.clear()
205232 }
206233
234+ fun forceRefresh () {
235+ touchHelper.setRawDrawingEnabled(false )
236+ EpdController .invalidate(view, UpdateMode .GC )
237+ touchHelper.setRawDrawingEnabled(true )
238+ }
239+
207240 init {
208241 channel.setMethodCallHandler(this )
209242 view.addOnLayoutChangeListener { _, _, _, _, _, _, _, _, _ ->
@@ -232,14 +265,7 @@ internal class OnyxsdkPenArea(context: Context, messenger: BinaryMessenger, id:
232265 updateStroke(params)
233266 result.success(null )
234267 } else if (call.method == " setDraw" ) {
235- if (call.arguments<Boolean >()!! ) {
236- touchHelper.openRawDrawing()
237- touchHelper.setRawDrawingEnabled(true )
238- touchHelper.setRawDrawingRenderEnabled(true )
239- } else {
240- touchHelper.closeRawDrawing()
241- }
242-
268+ setDraw(call.arguments<Boolean >()!! )
243269 result.success(null )
244270 } else {
245271 result.notImplemented()
0 commit comments