local mod = StarTip:NewModule("Images") mod.name = "IMages" mod.toggled = true mod.defaultOff = true local LibBuffer = LibStub("LibScriptableBuffer-1.0") local LibCore = LibStub("LibScriptableLCDCore-1.0") local LibTimer = LibStub("LibScriptableUtilsTimer-1.0") local PluginUtils = LibStub("LibScriptablePluginUtils-1.0"):New({}) local WidgetImage = LibStub("LibScriptableWidgetImage-1.0") local PluginColor = LibStub("LibScriptablePluginColor-1.0"):New({}) local _G = _G local GameTooltip = _G.GameTooltip local StarTip = _G.StarTip local UIParent = _G.UIParent local textures = {[0] = "Interface\\Addons\\StarTip\\Media\\black.blp", [1] = "Interface\\Addons\\StarTip\\Media\\white.blp"} local environment = {} local draw --[[ local frame = CreateFrame("Frame") frame:SetParent(UIParent) frame:SetBackdrop({bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", tile = true, tileSize = 4, edgeSize=4, insets = { left = 0, right = 0, top = 0, bottom = 0}}) frame:ClearAllPoints() frame:SetAlpha(1) frame:SetWidth(500) frame:SetHeight(500) frame:SetPoint("CENTER", UIParent, "CENTER") frame:Show() ]] local options = { } local foo = 200 local defaults = { profile = { cols = 2, rows = 1, yres = 8, xres = 7, size = 15, update = 500, images = { [1] = { name = "Analyzer", prescript = [[ ]], script = [[ self:Clear() y_old = floor(self.height / 2); for i = 0, self.width - 1 do y = (self.height / 2) + (noise[bit.rshift(i, 1) % #noise] * (self.height / 4)); y = floor(y) if (y > y_old) then for j = y_old, y do self.image[self.index].buffer[j * self.width + i] = 0xffffffff; end else for j = y, y_old - 1 do self.image[self.index].buffer[j * self.width + i] = 0xffffffff; end end end ]], update = 100, width = 64, height = 64, pixel = 4, --drawLayer = "UIParent", enabled = true, points = {{"CENTER", "UIParent", "CENTER"}}, } } } } function mod:OnInitialize() self.db = StarTip.db:RegisterNamespace(self:GetName(), defaults) StarTip:SetOptionsDisabled(options, true) self.core = LibCore:New(mod, StarTip.core.environment, "StarTip.Images", {["StarTip.Images"] = {}}, nil, StarTip.db.profile.errorLevel) self.core.lcd = {LCOLS=self.db.profile.cols, LROWS=self.db.profile.rows, LAYERS=self.db.profile.layers} self.buffer = LibBuffer:New("StarTip.Images", self.core.lcd.LCOLS * self.core.lcd.LROWS, 0, StarTip.db.profile.errorLevel) if self.db.profile.update > 0 then self.timer = LibTimer:New("Images", 100, true, update) end end local function copy(tbl) local newTbl = {} for k, v in pairs(tbl) do if type(v) == "table" then v = copy(v) end newTbl[k] = v end return newTbl end local function createImages() if type(mod.images) ~= "table" then mod.images = {} end for k, image in pairs(mod.db.profile.images) do if image.enabled then local image = WidgetImage:New(mod.core, "image", copy(image), image.row or 0, image.col or 0, image.layer or 0, StarTip.db.profile.errorLevel, draw) local frame = CreateFrame("Frame") frame:SetParent(UIParent) frame:SetBackdrop({bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", tile = true, tileSize = 4, edgeSize=4, insets = { left = 0, right = 0, top = 0, bottom = 0}}) frame:ClearAllPoints() frame:SetAlpha(1) frame:SetWidth(image.width * image.pixel) frame:SetHeight(image.height * image.pixel) frame:SetPoint("CENTER", UIParent, "CENTER") image.frame = frame image.textures = {} for row = 0, image.height - 1 do for col = 0, image.width - 1 do --for n = 0, image.height * image.width - 1 do --local row, col = PluginUtils.GetCoords(n, image.width) local n = row * image.width + col image.textures[n] = frame:CreateTexture() image.textures[n]:SetHeight(image.pixel) image.textures[n]:SetWidth(image.pixel) image.textures[n]:SetPoint("TOPLEFT", frame, "BOTTOMLEFT", col * image.pixel, (row + 1) * image.pixel) image.textures[n]:SetTexture("Interface\\Tooltips\\UI-Tooltip-Background") image.textures[n]:Show() end end frame:ClearAllPoints() frame:SetPoint("CENTER") tinsert(mod.images, image) end end end function mod:OnEnable() StarTip:SetOptionsDisabled(options, false) createImages() for i, v in pairs(mod.images) do v:Start() end if self.timer then self.timer:Start() end for k, image in pairs(self.images or {}) do image:Start() image.frame:Show() end end function mod:OnDisable() StarTip:SetOptionsDisabled(options, true) if self.timer then self.timer:Stop() end for k, image in pairs(self.images or {}) do image:Stop() image.frame:Hide() end end function mod:GetOptionsbleh() for i, image in ipairs(self.db.profile.images) do options.images.args["Icon"..i] = { enabled = { name = "Enabled", type = "toggle", get = function() return image.enabled end, set = function(info, val) image.enabled = val end, order = 1 }, speed = { name = "Speed", type = "input", pattern = "%d", get = function() return image.speed end, set = function(info, val) image.speed = val end, order = 2 }, bitmap = { name = "Bitmap", type = "input", multiline = true, width = "full", get = function() return image.bitmap end, set = function(info, val) image.bitmap = val end, order = 3 } } end return options end function mod:ClearImages() do return end for k, widget in pairs(mod.images) do widget:Del() end wipe(mod.images) end function draw(widget) for n = 0, widget.height * widget.width - 1 do local color = widget.image[widget.index].buffer[n] if random(2) == 1 or true then widget.textures[n]:SetVertexColor(PluginColor.Color2RGBA(color, true)) else widget.textures[n]:SetVertexColor(1, 1, 1, 1) end end end