---------------------------------------------------- -- SamUI v0.3.3 -- Eine vollständige UI-Alternative -- WoW Classic Anniversary TBC -- Interface 20506 -- Build 69110 ---------------------------------------------------- local _, ns = ... local module = ns:new_module("designelemente") local textures = { border = "Interface\\AddOns\\SamUI\\media\\texturen\\samui_border.tga", logo = "Interface\\AddOns\\SamUI\\media\\grafiken\\samui.tga", sammelbutton = "Interface\\AddOns\\SamUI\\media\\grafiken\\samui_icon_full_128.tga", minimap_engineering = "Interface\\Icons\\Trade_Engineering", minimap_bag = "Interface\\Icons\\INV_Misc_Bag_10", minimap_help = "Interface\\Icons\\Mail_GMIcon", statusbar = "Interface\\AddOns\\SamUI\\media\\texturen\\SamUI_statusbar.tga", statusbar_background = "Interface\\AddOns\\SamUI\\media\\texturen\\SamUI_statusbar_bg.tga", action_button_normal = "Interface\\Buttons\\UI-Quickslot2", action_button_pushed = "Interface\\Buttons\\UI-Quickslot-Depress", action_button_highlight = "Interface\\Buttons\\ButtonHilight-Square", action_button_checked = "Interface\\Buttons\\CheckButtonHilight", } local fonts = { samui = { label = "samui.ttf", path = "Interface\\AddOns\\SamUI\\media\\schriftarten\\samui.ttf", }, samui_smooth = { label = "samui-smooth.ttf", path = "Interface\\AddOns\\SamUI\\media\\schriftarten\\samui-smooth.ttf", }, } local font_order = { "samui", "samui_smooth", } local default_font_key = "samui" local active_font_key = default_font_key local active_default_font local border_profiles = { frame = { edge_size = 11, offset = 5, }, tooltip = { edge_size = 11, offset = 2, }, tab = { edge_size = 3, offset = 1, }, casticon = { edge_size = 11, offset = 5, }, buffs_player = { edge_size = 9, offset = 3, }, content = { edge_size = 3, offset = 1, }, itemslot = { edge_size = 3, offset = 1, }, minimap_top_button = { edge_size = 10, offset = 3, }, minimap_bag_slot = { edge_size = 10, offset = 2, }, } local samui_font_sizes = { 9, 10, 11, 12, 14, 18, 20, 22, 24, } local samui_outline_font_sizes = { 12, 14, 18, } local blizzard_font_object_names = { "GameFontNormal", "GameFontHighlight", "GameFontDisable", "GameFontNormalSmall", "GameFontHighlightSmall", "GameFontNormalLarge", "GameFontHighlightLarge", "GameFontNormalHuge", "GameFontDisableSmall", "ChatFontNormal", "NumberFontNormal", "NumberFontNormalSmall", "NumberFontNormalLarge", "GameTooltipText", "GameTooltipTextSmall", "GameTooltipHeaderText", "QuestFont", "SystemFont_Shadow_Med1", "SystemFont_Shadow_Large", "SystemFont_Outline_Small", "Fonts_Slate_ExtraLarge", } function module:get_texture(key) return textures[key] end function module:get_font(key) local definition = fonts[key] return definition and definition.path or nil end function module:get_font_selection_options() local options = {} for index = 1, #font_order do local key = font_order[index] local definition = fonts[key] if definition then options[#options + 1] = { value = key, label = definition.label, } end end return options end function module:get_default_font_key() return default_font_key end function module:get_active_font_key() return active_font_key end function module:get_border_size(key) local border_profile = border_profiles[key] return border_profile and border_profile.edge_size or nil end function module:get_border_offset(key) local border_profile = border_profiles[key] return border_profile and border_profile.offset or nil end function module:create_border_overlay(target, parent, profile_key, color_token) local palette = ns.module_registry and ns.module_registry["palette"] or nil if not target or not parent or not palette then return nil end local border_offset = self:get_border_offset(profile_key) local border_size = self:get_border_size(profile_key) local border_texture = self:get_texture("border") if not border_offset or not border_size or not border_texture then return nil end local border = CreateFrame("Frame", nil, parent, "BackdropTemplate") border:SetPoint("TOPLEFT", target, "TOPLEFT", -border_offset, border_offset) border:SetPoint("BOTTOMRIGHT", target, "BOTTOMRIGHT", border_offset, -border_offset) border:EnableMouse(false) border:SetFrameLevel(target:GetFrameLevel() + 10) border:SetBackdrop({ edgeFile = border_texture, edgeSize = border_size, tileEdge = true, }) border:SetBackdropBorderColor( palette:get_rgba(color_token or "border", palette:get_alpha("opaque")) ) return border end local function get_or_create_font_object(font_name) local font_object = _G[font_name] if font_object then return font_object end return CreateFont(font_name) end local function apply_samui_font_objects(default_font) if not default_font then return false end for index = 1, #samui_font_sizes do local font_size = samui_font_sizes[index] local font_name = "samui_font_" .. font_size local font_object = get_or_create_font_object(font_name) font_object:SetFont(default_font, font_size, "") end for index = 1, #samui_outline_font_sizes do local font_size = samui_outline_font_sizes[index] local font_name = "samui_font_" .. font_size .. "_outline" local font_object = get_or_create_font_object(font_name) font_object:SetFont(default_font, font_size, "OUTLINE") end return true end local function override_blizzard_font_objects(default_font) if not default_font then return end for index = 1, #blizzard_font_object_names do local font_name = blizzard_font_object_names[index] local font_object = _G[font_name] if font_object and type(font_object.GetFont) == "function" and type(font_object.SetFont) == "function" then local _, font_size, font_flags = font_object:GetFont() if font_size then font_object:SetFont(default_font, font_size, font_flags or "") end end end end local function refresh_blizzard_font_objects() override_blizzard_font_objects(active_default_font) end function module:set_active_font(font_key) if not fonts[font_key] then return false end active_font_key = font_key active_default_font = self:get_font(active_font_key) if not active_default_font then return false end apply_samui_font_objects(active_default_font) refresh_blizzard_font_objects() return true end local function collect_profile_settings() return { font = active_font_key, } end local function apply_profile_settings(data) if type(data) ~= "table" then return false end local font_key = data.font if type(font_key) ~= "string" or not fonts[font_key] then font_key = default_font_key ns:chat_message("Ungültige Schriftart im Profil; samui.ttf wird verwendet", true) end return module:set_active_font(font_key) end local function addon_loaded() refresh_blizzard_font_objects() end function module:initialize() self:set_active_font(default_font_key) if type(ns.register_profile_provider) == "function" then ns:register_profile_provider( "designelemente", collect_profile_settings, apply_profile_settings ) end ns:register_event("ADDON_LOADED", module, addon_loaded) end ns.designelemente = module ns:register_initial_module("designelemente")