View Single Post
12-14-14, 02:28 PM   #16
Xrystal
nUI Maintainer
 
Xrystal's Avatar
Premium Member
AddOn Author - Click to view addons
Join Date: Feb 2006
Posts: 5,934
Well, rigged up a mini addon, to create a scrolling frame to hold the tracker frame in and all seems fine except ...

Lua Code:
  1. local addonName,addonData = ...
  2.  
  3. local myScrollFrame
  4.  
  5. addonData.Options = {
  6.     FrameWidth = 500,
  7.     FrameHeight = 150,
  8.     IsMovable = true,
  9.     HasBorder = true,
  10. }
  11.  
  12. addonData.SetMovable = function(self,frame)
  13.     if not frame then return end
  14.     frame:EnableMouse(true)
  15.     frame:SetMovable(true)
  16.     frame:RegisterForDrag("LeftButton")
  17.     frame:SetScript("OnDragStart",function(self)
  18.         self:StartMoving()
  19.     end)
  20.  
  21.     frame:SetScript("OnDragStop",function(self)
  22.         self:StopMovingOrSizing()
  23.         self:SetUserPlaced(true)
  24.         self:SetClampedToScreen(true)
  25.     end)
  26.  
  27.     frame:SetScript("OnHide",function(self)
  28.         self:StopMovingOrSizing()
  29.         self:SetUserPlaced(true)
  30.         self:SetClampedToScreen(true)
  31.     end)
  32. end
  33.  
  34. addonData.AddBorder = function(self,frame)
  35.     local border = CreateFrame("Frame",_G[frame:GetName().."Border"],frame)
  36.     border:SetFrameLevel(frame:GetFrameLevel()-1)
  37.     border:SetFrameStrata(frame:GetFrameStrata())
  38.     border:ClearAllPoints()
  39.     border:SetPoint("TOPLEFT",-10,10)
  40.     border:SetPoint("BOTTOMRIGHT",35,-10)
  41.  
  42.     local backDrop = {      
  43.         bgFile = "Interface/Tooltips/UI-Tooltip-Background",
  44.         edgeFile = "Interface/Tooltips/UI-Tooltip-Border",
  45.         tile = true,
  46.         tileSize = 16,
  47.         edgeSize = 16,
  48.         insets =
  49.         {
  50.             left = 4,
  51.             right = 4,
  52.             top = 4,
  53.             bottom = 4
  54.         },
  55.     }                      
  56.     border:SetBackdrop(backDrop)
  57.     border:SetBackdropBorderColor( 1, 1, 0, 1 )
  58.     border:SetBackdropColor( 0, 0, 0, 1 )
  59.  
  60.     frame.border = border
  61. end
  62.  
  63. addonData.BuildScrollFrame = function(self,name,parent,options)
  64.     parent = parent or UIParent
  65.     local frame = CreateFrame("ScrollFrame",name,parent,"UIPanelScrollFrameTemplate")
  66.     frame.ScrollBar = _G[frame:GetName() .. "ScrollBar"];
  67.     frame.ScrollBar:SetPoint("LEFT",frame,"RIGHT",5,0)
  68.     frame:SetWidth(options.FrameWidth - 55)
  69.     frame:SetHeight(options.FrameHeight - 20)
  70.     if options.HasBorder then
  71.         self:AddBorder(frame)
  72.     end
  73.     if options.IsMovable then
  74.         self:SetMovable(frame)
  75.         if not frame:SetUserPlaced() then
  76.             frame:SetPoint("CENTER",parent,"CENTER",10,-10)
  77.         end
  78.     else
  79.         frame:SetPoint("CENTER",parent,"CENTER",10,-10)
  80.     end
  81.     ScrollFrame_OnLoad(frame)
  82.     frame:UpdateScrollChildRect()
  83.  
  84.     frame:SetScript("OnScrollRangeChanged",function(self,xrange,yrange)
  85.         ScrollFrame_OnScrollRangeChanged(self, xrange, yrange)
  86.         self:UpdateScrollChildRect()
  87.     end)
  88.  
  89.     frame:SetScript("OnVerticalScroll",function(self,offset)
  90.         addonData:OnVerticalScroll(frame,offset)
  91.         self:UpdateScrollChildRect()
  92.     end)
  93.  
  94.     frame:SetScript("OnMouseWheel",function(self,delta)
  95.         ScrollFrameTemplate_OnMouseWheel(self, delta)
  96.         self:UpdateScrollChildRect()
  97.     end)
  98.  
  99.     return frame
  100. end
  101.  
  102. addonData.OnVerticalScroll = function(self,frame,offset)
  103.     if offset == 0 then return end
  104.     local scrollbar = _G[frame:GetName().."ScrollBar"];
  105.     scrollbar:SetValue(offset);
  106.     local min;
  107.     local max;
  108.     min, max = scrollbar:GetMinMaxValues();
  109.     if ( offset == 0 ) then
  110.         _G[scrollbar:GetName().."ScrollUpButton"]:Disable();
  111.     else
  112.         _G[scrollbar:GetName().."ScrollUpButton"]:Enable();
  113.     end
  114.     if ((scrollbar:GetValue() - max) == 0) then
  115.         _G[scrollbar:GetName().."ScrollDownButton"]:Disable();
  116.     else
  117.         _G[scrollbar:GetName().."ScrollDownButton"]:Enable();
  118.     end
  119. end
  120.  
  121. local function CreateScrollFrame()
  122.     myScrollFrame = addonData:BuildScrollFrame("XrystalScrollFrame_ObjectivesTracker",UIParent,addonData.Options)
  123. end
  124.  
  125. local OTFMoving
  126. hooksecurefunc(ObjectiveTrackerFrame, "SetPoint", function(self)
  127.     if not myScrollFrame then return end
  128.     if OTFMoving then return end
  129.     OTFMoving = true
  130.     self:SetMovable(true)
  131.     self:SetUserPlaced(true)
  132.     self:ClearAllPoints()
  133.     self:SetPoint("TOPLEFT", myScrollFrame, "TOPLEFT", 30, 0)
  134.     self:SetScale(1.1)
  135.     self:SetWidth(addonData.Options.FrameWidth - 30)
  136.     self:SetHeight(1000)
  137.     myScrollFrame:SetScrollChild(self)
  138.     self:SetMovable(false)
  139.     OTFMoving = nil
  140. end)
  141.  
  142. --DEFAULT_OBJECTIVE_TRACKER_MODULE.blockOffsetX = 30
  143. CreateScrollFrame()

I need that line that is commented out to keep the offset correct for my frame as otherwise the POI Icons and half of the check marks are too far left and are invisible. However, the moment I use that line it causes the taint message. This is a very basic version to my addon but visually it is useless without that offset being able to be used.
__________________


Characters:
Gwynedda - 70 - Demon Warlock
Galaviel - 65 - Resto Druid
Gamaliel - 61 - Disc Priest
Gwynytha - 60 - Survival Hunter
Lienae - 60 - Resto Shaman
Plus several others below level 60

Info Panel IDs : http://www.wowinterface.com/forums/s...818#post136818
  Reply With Quote