I mean why is the callback not triggered?
Code: Select all
ImportC ""
class_addMethod(Class.I, Selector.I, *Callback, Types.P-ASCII)
objc_allocateClassPair(ModelClass.I, NewClassName.P-ASCII, ExtraBytes.I)
objc_registerClassPair(NewClass.I)
object_setClass(ObjectToModify.I, NewClass.I)
sel_registerName(MethodName.P-ASCII)
EndImport
Global Window_0, Slider
;sliderType
#NSLinearSlider =0
#NSCircularSlider =1
ProcedureC drawKnob(obj, sel, x.f, y.f, w.f, h.f, View.i, d1.d,d2.d,d3.d,d4.d, x_.d, y_.d, w_.d, h_.d)
Protected rect.NSRect, radius.CGFloat = 8.0
; CocoaMessage(0,0,"lockFocus")
CompilerIf #PB_Compiler_Processor = #PB_Processor_x64
rect\origin\x = x_
rect\origin\y = y_
rect\size\width = w_
rect\size\height = h_
CompilerElse
rect\origin\x = x
rect\origin\y = y
rect\size\width = 100
rect\size\height = 100
CompilerEndIf
Debug "Knob"
; CocoaMessage(0, CocoaMessage(0, 0, "NSColor brownColor"), "setFill")
; CocoaMessage(0, CocoaMessage(0, 0, "NSBezierPath bezierPathWithOvalInRect:@", @rect), "fill")
EndProcedure
Procedure OpenWindow_0(x = 0, y = 0, width = 74, height = 140)
Window_0 = OpenWindow(#PB_Any, x, y, width, height, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
Slider = TrackBarGadget(#PB_Any, 20, 45, 32, 34, 1, 127, #PB_TrackBar_Vertical)
SliderCell = CocoaMessage(0, GadgetID(Slider), "cell")
CocoaMessage(0, SliderCell, "setSliderType:", #NSCircularSlider)
CocoaMessage(0, SliderCell, "setNumberOfTickMarks:", 10)
CustomSliderCell = objc_allocateClassPair_(CocoaMessage(0, SliderCell, "class"), "CustomSliderCell", 0)
;I think here is my problem
; ----- Set callback for drawing the knob
class_addMethod_(CustomSliderCell, sel_registerName_("drawInteriorWithFrame:inView:"),
@drawKnob(), "v@:{CGRect={CGPoint=dd}{CGSize=dd}}v")
objc_registerClassPair_(CustomSliderCell)
object_setClass_(SliderCell, CustomSliderCell)
EndProcedure
Procedure Window_0_Events(event)
Select event
Case #PB_Event_CloseWindow
ProcedureReturn #False
Case #PB_Event_Menu
Select EventMenu()
Case #PB_Menu_Quit
ProcedureReturn #False
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
Case Slider
; drawBarInside()
EndSelect
EndSelect
ProcedureReturn #True
EndProcedure
OpenWindow_0()
Repeat
event = WaitWindowEvent()
Until Window_0_Events(event) = #False
End