Mercurial > wow > hansgar_and_franzok_assist
diff Libs/DF/picture.lua @ 11:2f09fe4be15c
Added an Options Panel.
| author | Tercio |
|---|---|
| date | Mon, 20 Apr 2015 16:34:18 -0300 |
| parents | |
| children | dc1c77254f80 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Libs/DF/picture.lua Mon Apr 20 16:34:18 2015 -0300 @@ -0,0 +1,284 @@ + + + +local DF = _G ["DetailsFramework"] +local _ + +local _rawset = rawset --> lua local +local _rawget = rawget --> lua local +local _setmetatable = setmetatable --> lua local +local _unpack = unpack --> lua local +local _type = type --> lua local +local _math_floor = math.floor --> lua local +local loadstring = loadstring --> lua local + +local cleanfunction = function() end +local APIImageFunctions = false +local ImageMetaFunctions = {} + +------------------------------------------------------------------------------------------------------------ +--> metatables + + ImageMetaFunctions.__call = function (_table, value) + return self.image:SetTexture (value) + end + +------------------------------------------------------------------------------------------------------------ +--> members + + --> shown + local gmember_shown = function (_object) + return _object:IsShown() + end + --> frame width + local gmember_width = function (_object) + return _object.image:GetWidth() + end + --> frame height + local gmember_height = function (_object) + return _object.image:GetHeight() + end + --> texture + local gmember_texture = function (_object) + return _object.image:GetTexture() + end + --> alpha + local gmember_alpha = function (_object) + return _object.image:GetAlpha() + end + + local get_members_function_index = { + ["shown"] = gmember_shown, + ["alpha"] = gmember_alpha, + ["width"] = gmember_width, + ["height"] = gmember_height, + ["texture"] = gmember_texture, + } + + ImageMetaFunctions.__index = function (_table, _member_requested) + + local func = get_members_function_index [_member_requested] + if (func) then + return func (_table, _member_requested) + end + + local fromMe = _rawget (_table, _member_requested) + if (fromMe) then + return fromMe + end + + return ImageMetaFunctions [_member_requested] + end + +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + + --> show + local smember_show = function (_object, _value) + if (_value) then + return _object:Show() + else + return _object:Hide() + end + end + --> hide + local smember_hide = function (_object, _value) + if (not _value) then + return _object:Show() + else + return _object:Hide() + end + end + --> texture + local smember_texture = function (_object, _value) + if (type (_value) == "table") then + local r, g, b, a = DF:ParseColors (_value) + _object.image:SetTexture (r, g, b, a or 1) + else + if (DF:IsHtmlColor (_value)) then + local r, g, b, a = DF:ParseColors (_value) + _object.image:SetTexture (r, g, b, a or 1) + else + _object.image:SetTexture (_value) + end + end + end + --> width + local smember_width = function (_object, _value) + return _object.image:SetWidth (_value) + end + --> height + local smember_height = function (_object, _value) + return _object.image:SetHeight (_value) + end + --> alpha + local smember_alpha = function (_object, _value) + return _object.image:SetAlpha (_value) + end + --> color + local smember_color = function (_object, _value) + if (type (_value) == "table") then + local r, g, b, a = DF:ParseColors (_value) + _object.image:SetTexture (r,g,b, a or 1) + else + if (DF:IsHtmlColor (_value)) then + local r, g, b, a = DF:ParseColors (_value) + _object.image:SetTexture (r, g, b, a or 1) + else + _object.image:SetTexture (_value) + end + end + end + --> desaturated + local smember_desaturated = function (_object, _value) + if (_value) then + _object:SetDesaturated (true) + else + _object:SetDesaturated (false) + end + end + --> texcoords + local smember_texcoord = function (_object, _value) + if (_value) then + _object:SetTexCoord (unpack (_value)) + else + _object:SetTexCoord (0, 1, 0, 1) + end + end + + local set_members_function_index = { + ["show"] = smember_show, + ["hide"] = smember_hide, + ["alpha"] = smember_alpha, + ["width"] = smember_width, + ["height"] = smember_height, + ["texture"] = smember_texture, + ["texcoord"] = smember_texcoord, + ["color"] = smember_color, + ["blackwhite"] = smember_desaturated, + } + + ImageMetaFunctions.__newindex = function (_table, _key, _value) + local func = set_members_function_index [_key] + if (func) then + return func (_table, _value) + else + return _rawset (_table, _key, _value) + end + end + +------------------------------------------------------------------------------------------------------------ +--> methods +--> show & hide + function ImageMetaFunctions:IsShown() + return self.image:IsShown() + end + function ImageMetaFunctions:Show() + return self.image:Show() + end + function ImageMetaFunctions:Hide() + return self.image:Hide() + end + +-- setpoint + function ImageMetaFunctions:SetPoint (v1, v2, v3, v4, v5) + v1, v2, v3, v4, v5 = DF:CheckPoints (v1, v2, v3, v4, v5, self) + if (not v1) then + print ("Invalid parameter for SetPoint") + return + end + return self.widget:SetPoint (v1, v2, v3, v4, v5) + end + +-- sizes + function ImageMetaFunctions:SetSize (w, h) + if (w) then + self.image:SetWidth (w) + end + if (h) then + return self.image:SetHeight (h) + end + end + +------------------------------------------------------------------------------------------------------------ +--> scripts + +------------------------------------------------------------------------------------------------------------ +--> object constructor + +function DF:CreateImage (parent, texture, w, h, layer, coords, member, name) + return DF:NewImage (parent, texture, w, h, layer, coords, member, name) +end + +function DF:NewImage (parent, texture, w, h, layer, coords, member, name) + + if (not parent) then + return nil + end + + if (not name) then + name = "DetailsFrameworkPictureNumber" .. DF.PictureNameCounter + DF.PictureNameCounter = DF.PictureNameCounter + 1 + end + + if (name:find ("$parent")) then + name = name:gsub ("$parent", parent:GetName()) + end + + local ImageObject = {type = "image", dframework = true} + + if (member) then + parent [member] = ImageObject + end + + if (parent.dframework) then + parent = parent.widget + end + + texture = texture or "" + + ImageObject.image = parent:CreateTexture (name, layer or "OVERLAY") + ImageObject.widget = ImageObject.image + + if (not APIImageFunctions) then + APIImageFunctions = true + local idx = getmetatable (ImageObject.image).__index + for funcName, funcAddress in pairs (idx) do + if (not ImageMetaFunctions [funcName]) then + ImageMetaFunctions [funcName] = function (object, ...) + local x = loadstring ( "return _G."..object.image:GetName()..":"..funcName.."(...)") + return x (...) + end + end + end + end + + ImageObject.image.MyObject = ImageObject + + if (w) then + ImageObject.image:SetWidth (w) + end + if (h) then + ImageObject.image:SetHeight (h) + end + if (texture) then + if (type (texture) == "table") then + local r, g, b = DF:ParseColors (texture) + ImageObject.image:SetTexture (r,g,b) + else + if (DF:IsHtmlColor (texture)) then + local r, g, b = DF:ParseColors (texture) + ImageObject.image:SetTexture (r, g, b) + else + ImageObject.image:SetTexture (texture) + end + end + end + + if (coords and type (coords) == "table" and coords [4]) then + ImageObject.image:SetTexCoord (unpack (coords)) + end + + setmetatable (ImageObject, ImageMetaFunctions) + + return ImageObject +end \ No newline at end of file
