--[[ colorSelector.lua A bagnon color selector --]] local Bagnon = LibStub('AceAddon-3.0'):GetAddon('Bagnon') local ColorSelector = Bagnon.Classy:New('Button') Bagnon.OptionsColorSelector = ColorSelector --[[ Constructor ]]-- function ColorSelector:New(name, parent, hasOpacity) local f = self:Bind(CreateFrame('Button', parent:GetName() .. name, parent)) f.hasOpacity = hasOpacity f:SetWidth(18) f:SetHeight(18) if hasOpacity then f.swatchFunc = function() local r, g, b = ColorPickerFrame:GetColorRGB() local a = 1 - OpacitySliderFrame:GetValue() f:SetColor(r, g, b, a) end f.opacityFunc = f.swatchFunc f.cancelFunc = function() local prev = ColorPickerFrame.previousValues f:SetColor(prev.r, prev.g, prev.b, 1 - prev.opacity) end else f.swatchFunc = function() f:SetColor(ColorPickerFrame:GetColorRGB()) end f.cancelFunc = function() f:SetColor(ColorPicker_GetPreviousValues()) end end local nt = f:CreateTexture(nil, 'OVERLAY') nt:SetTexture([[Interface\ChatFrame\ChatFrameColorSwatch]]) nt:SetAllPoints(f) f:SetNormalTexture(nt) local bg = f:CreateTexture(nil, 'BACKGROUND') bg:SetWidth(16) bg:SetHeight(16) bg:SetTexture(1, 1, 1) bg:SetPoint('CENTER') f.bg = bg local text = f:CreateFontString(nil, 'ARTWORK', 'GameFontHighlight') text:SetPoint('LEFT', f, 'RIGHT', 4, 0) text:SetText(name) f.text = text f:SetScript('OnClick', f.OnClick) f:SetScript('OnEnter', f.OnEnter) f:SetScript('OnLeave', f.OnLeave) f:SetScript('OnShow', f.OnShow) return f end --[[ Frame Events ]]-- function ColorSelector:OnClick() if ColorPickerFrame:IsShown() then ColorPickerFrame:Hide() else self.r, self.g, self.b, self.opacity = self:GetColor() self.opacity = 1 - (self.opacity or 1) --correction, since the color menu is crazy OpenColorPicker(self) ColorPickerFrame:SetFrameStrata('TOOLTIP') ColorPickerFrame:Raise() end end function ColorSelector:OnShow() local r, g, b = self:GetColor() self:GetNormalTexture():SetVertexColor(r, g, b) end function ColorSelector:OnEnter() local color = _G['NORMAL_FONT_COLOR'] self.bg:SetVertexColor(color.r, color.g, color.b) end function ColorSelector:OnLeave() local color = _G['HIGHLIGHT_FONT_COLOR'] self.bg:SetVertexColor(color.r, color.g, color.b) end --[[ Update Methods ]]-- function ColorSelector:SetColor(r, g, b, a) self:GetNormalTexture():SetVertexColor(r, g, b) self:OnSetColor(r, g, b, a) end function ColorSelector:OnSetColor(r, g, b, a) assert(false, 'Hey, you forgot to implement OnSetColor for ' .. self:GetName()) end function ColorSelector:GetColor(r, g, b, a) assert(false, 'Hey, you forgot to implement GetColor for ' .. self:GetName()) end function ColorSelector:UpdateColor() self:SetColor(self:GetColor()) end