Files
2026-09-12 17:59:32 +02:00

3.3 KiB

TurtleColorPicker

Standalone HSV color picker library for TurtleWoW (WoW 1.12) addon developers.

TurtleColorPicker

Features

  • HSV saturation/value square + vertical hue bar
  • Optional hex color input (#RRGGBB)
  • Old/New color preview swatches
  • Compact, draggable popup (ESC to close)
  • Lazy initialization (no overhead until first use)
  • Clean API with onChange, onOk, onCancel callbacks

Installation

Download and extract into your Interface/AddOns/ folder so the structure is:

Interface/AddOns/TurtleColorPicker/
  TurtleColorPicker.toc
  Core.lua
  UI.lua

Integration

Add the dependency to your addon's .toc file:

## RequiredDeps: TurtleColorPicker

Then call the API from your addon:

TurtleColorPicker:Open({
    color = { r = 0.5, g = 0.8, b = 1.0 },  -- initial color (0-1)
    hasHexInput = true,                        -- show hex input field
    onChange = function(r, g, b)               -- fires during drag
        myFrame:SetBackdropColor(r, g, b, 1)
    end,
    onOk = function(r, g, b)                   -- fires on OK
        SaveColor(r, g, b)
    end,
    onCancel = function()                      -- fires on Cancel/ESC
        RevertColor()
    end,
})

All options are optional. Default color is white (1, 1, 1).

API Reference

TurtleColorPicker:Open(opts)

Opens the color picker popup.

Option Type Description
color {r, g, b} Initial color, values 0-1. Default: white
hasHexInput boolean Show hex input field. Default: false
anchorFrame frame Position picker next to this frame. Default: screen center
onChange function(r, g, b) Called on every color change during interaction
onOk function(r, g, b) Called when OK is clicked
onCancel function() Called when Cancel is clicked or ESC pressed

TurtleColorPicker:Close()

Programmatically closes the picker.

Utility Functions

local r, g, b = TurtleColorPicker.HSVtoRGB(h, s, v)
local h, s, v = TurtleColorPicker.RGBtoHSV(r, g, b)
local hex     = TurtleColorPicker.RGBtoHex(r, g, b)   -- "FF8000"
local r, g, b = TurtleColorPicker.HexToRGB("FF8000")  -- returns 0-1
local clamped = TurtleColorPicker.Clamp(val, min, max)

Example: Color Swatch Button

local swatch = CreateFrame("Button", nil, MyOptionsFrame)
swatch:SetWidth(20)
swatch:SetHeight(20)
swatch:RegisterForClicks("LeftButtonUp")

local tex = swatch:CreateTexture(nil, "BACKGROUND")
tex:SetAllPoints(swatch)
tex:SetTexture(MySettings.r, MySettings.g, MySettings.b)

swatch:SetScript("OnClick", function()
    TurtleColorPicker:Open({
        color = MySettings,
        hasHexInput = true,
        anchorFrame = swatch,  -- picker appears next to the swatch
        onChange = function(r, g, b)
            tex:SetTexture(r, g, b, 1)
        end,
        onOk = function(r, g, b)
            MySettings.r = r
            MySettings.g = g
            MySettings.b = b
        end,
        onCancel = function()
            tex:SetTexture(MySettings.r, MySettings.g, MySettings.b, 1)
        end,
    })
end)

Test Commands

  • /tcp test - Opens picker with hex input
  • /tcp minimal - Opens picker without hex input
  • /tcp - Shows version info

License

MIT