If you only want to draw boxes, you can use the Cocoa drawing methods.
This gives you a list of named colors
Code: Select all
If OpenWindow(0, 0, 0, 322, 150, "Color list", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
EditorGadget(0, 8, 8, 306, 133)
Lists = CocoaMessage(0, 0, "NSColorList availableColorLists")
NumLists = CocoaMessage(0, Lists, "count")
For l = 1 To NumLists
ColorList = CocoaMessage(0, Lists, "objectAtIndex:", l - 1)
ColorListName.s = PeekS(CocoaMessage(0, CocoaMessage(0, ColorList, "name"), "UTF8String"), -1, #PB_UTF8)
Keys = CocoaMessage(0, ColorList, "allKeys")
NumKeys = CocoaMessage(0, Keys, "count")
For k = 1 To NumKeys
Key = CocoaMessage(0, Keys, "objectAtIndex:", k - 1)
KeyName.s = PeekS(CocoaMessage(0, Key, "UTF8String"), -1, #PB_UTF8)
AddGadgetItem(0, -1, ColorListName + " -> " + KeyName)
Next
Next
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
An example to use them
Code: Select all
Procedure ColorBox(x, y, Width, Height, ColorName.s, ListName.s = "System")
Protected Rect.NSRect, Color.i, ColorList.i = CocoaMessage(0, 0, "NSColorList colorListNamed:$", @ListName)
If ColorList
Color = CocoaMessage(0, ColorList, "colorWithKey:$", @ColorName)
If Color
Rect\origin\x = x
Rect\origin\y = OutputHeight() - Height - y
Rect\size\width = Width
Rect\size\height = Height
CocoaMessage(0, Color, "setFill")
CocoaMessage(0, 0, "NSBezierPath fillRect:@", @Rect)
EndIf
EndIf
EndProcedure
If OpenWindow(0, 0, 0, 200, 200, "CanvasGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CanvasGadget(0, 0, 0, 200, 200)
If StartDrawing(CanvasOutput(0))
ColorBox(0, 0, 200, 200, "controlColor")
ColorBox(10, 10, 180, 180, "controlHighlightColor")
ColorBox(20, 20, 20, 20, "Green", "Apple")
ColorBox(20, 60, 20, 20, "Aqua", "Crayons")
StopDrawing()
EndIf
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
EndIf