WoWInterface

WoWInterface (https://www.wowinterface.com/forums/index.php)
-   WoD Beta archived threads (https://www.wowinterface.com/forums/forumdisplay.php?f=151)
-   -   Quest Frame move issue (https://www.wowinterface.com/forums/showthread.php?t=50308)

weasoug 10-28-14 09:24 AM

Quest Frame move issue
 
Quote:

I am able to move the quest frame, however the semi-transparent background box's upper right corner is locked in position and moving the quest frame simply stretches the background box across my screen.
Code:

local questHeight                = 1
local questScale                = 0.8

ObjectiveTrackerFrame:ClearAllPoints()
ObjectiveTrackerFrame:SetPoint('TOPRIGHT', Minimap, 'BOTTOMRIGHT', 0, -16)
ObjectiveTrackerFrame:SetHeight((ObjectiveTrackerFrame:GetTop() - CONTAINER_OFFSET_Y) * GetPercent(questHeight))
ObjectiveTrackerFrame:SetScale(GetPercent(questScale))
ObjectiveTrackerFrame:SetClampedToScreen(false)

MY move code
Code:

local silhouette, movers = UIParent:CreateTexture(nil, 'BACKGROUND')
silhouette:SetTexture([[Interface\BUTTONS\WHITE8X8]])
silhouette:SetAlpha(0.45)
silhouette:Hide()

local function GetRelativePoint(frame)
        local L1, B1, W1, H1 = UIParent:GetRect()
        local L2, B2, W2, H2 = frame:GetRect()
        local x, y, h, w, anchor = L2 - L1, B2 - B1, H1 - H2, W1 - W2
        if x < w * 0.5 then
                anchor = 'LEFT'
        else
                anchor, x = 'RIGHT', x - w
        end
        if y < h * 0.5 then
                anchor = 'BOTTOM' .. anchor
        else
                anchor, y = 'TOP' .. anchor, y - h
        end
        return anchor, x, y
end

local function OnMouseDown(self, button)
        if button ~= 'LeftButton' then return end
        self.moving = true
        if not self[4]:IsVisible() or self[5] then
                silhouette:SetParent(self)
                silhouette:ClearAllPoints()
                silhouette:SetAllPoints(self[4])
                silhouette:Show()
        end
        self:StartMoving()
end

local function OnMouseUp(self, button)
        if button ~= 'LeftButton' or not self.moving then return end
        self.moving = nil
        silhouette:Hide()
        self:StopMovingOrSizing()
end

local function CreateMoverFrame(name, moveFrame, silhouette)
        local frame = CreateFrame('Frame', addonName .. name .. "Mover", UIParent)
        frame:EnableMouse(true)
        frame:SetMovable(true)
        frame:SetClampedToScreen(true)
        frame:SetScript('OnMouseDown', OnMouseDown)
        frame:SetScript('OnMouseUp', OnMouseUp)
        frame:Hide()

        local texture = frame:CreateTexture(nil, 'BORDER')
        texture:SetTexture([[Interface\Buttons\UI-Panel-Button-Up]])
        texture:SetAllPoints()
        texture:SetTexCoord(0, 0.625, 0, 0.6875)

        local string = frame:CreateFontString(nil, 'ARTWORK', 'GameFontNormal')
        string:SetPoint('CENTER', 1, 0)
        string:SetText(name)
        frame:SetHeight(string:GetStringHeight() + 8)
        frame:SetWidth(string:GetStringWidth() + 16)

        frame:SetPoint('TOP', moveFrame)
        local anchor, x, y = GetRelativePoint(frame)
        frame:ClearAllPoints()
        frame:SetPoint(anchor, x, y)

        moveFrame:ClearAllPoints()
        moveFrame:SetPoint('TOP', frame)
        moveFrame.ClearAllPoints = DoNothing
        moveFrame.SetAllPoints = DoNothing
        moveFrame.SetPoint = DoNothing

        frame[1], frame[2], frame[3], frame[4], frame[5], frame[6] = anchor, x, y, silhouette or moveFrame, silhouette == false or nil
        return frame
end

movers = {
        CreateMoverFrame("Minimap", Minimap, MinimapBorder),
        CreateMoverFrame("Quest", ObjectiveTrackerFrame, false),
        CreateMoverFrame("Ticket", TicketStatusFrame),
        CreateMoverFrame("Vehicle", VehicleSeatIndicator),
        CreateMoverFrame("WorldState", WorldStateAlwaysUpFrame),
}

My commands
Code:

_G['SLASH_' .. addonName .. 1] = strlower("/wmp")
SlashCmdList[addonName] = function(msg)
        msg = msg:lower()
        if msg == "lock" then
                for index = 1, #movers do
                        movers[index]:Hide()
                end
        elseif msg == "mouse" then
                print("|cff3399ffw|rMmap mouse button assignments:")
                print("|cff1eff1eleft|r - Ping the minimap")
                print("|cff1eff1emiddle|r - Toggle the calendar")
                print("|cff1eff1eright|r - Toggle the tracking menu")
                print("|cff1eff1ewheel|r - Zoom the minimap in/out")
        elseif msg == "reset" then
                local frame
                for index = 1, #movers do
                        frame = movers[index]
                        frame:ClearAllPoints()
                        frame:SetPoint(frame[1], frame[2], frame[3])
                end
        elseif msg == "rl" then
                ReloadUI()
        elseif msg == "cl" then
                ToggleCalendar()
        elseif msg == "unlock" then
                for index = 1, #movers do
                        movers[index]:Show()
                end
        else
                print("|cff3399ffw|rMmap commands:")
                print("|cff1eff1elock|r - Hide frame movers to prevent dragging.")
                print("|cff1eff1emouse|r - Display mouse button assignments.")
                print("|cff1eff1ereset|r - Reset frames to their default positions.")
                print("|cff1eff1erl|r - Reload the UI.")
                print("|cff1eff1ecl|r - Toggle Calendar.")
                print("|cff1eff1eunlock|r - Show frame movers to enable dragging.")
        end
end

my map moves fine and everything else i can see, but when i move the quest frame i get that issue, i looked into added these few lines but still nothing.

Code:

ObjectiveTrackerFrame:SetMovable(true)
 ObjectiveTrackerFrame:SetUserPlaced(true)
 ObjectiveTrackerFrame.ignoreFramePositionManager = true


zork 10-28-14 10:01 AM

Yeah the objective tracker can be wonky.

Seerah's solution is currently the best imo.
http://www.wowinterface.com/download...herWabbit.html

Basically you create a new frame and position/scale/size it to whatever you want. You reparent the ObjectiveTracker to that frame attach a point (like TOPRIGHT) and set the size to equal the size of your new frame.

You have to track every event that moves the objective tracker and keep it in place.

weasoug 10-28-14 10:06 AM

Thank you for your reply.

I guess something like this.

Quote:

local ObjectiveTrackerFrame = ObjectiveTrackerFrame
local OTFContainer = CreateFrame("Frame", "OTFContainer", UIParent)

ObjectiveTrackerFrame:SetParent(OTFContainer)
ObjectiveTrackerFrame:ClearAllPoints()
ObjectiveTrackerFrame:SetPoint('TOPRIGHT', Minimap, 'BOTTOMRIGHT', 0, -16)
ObjectiveTrackerFrame:SetHeight((ObjectiveTrackerFrame:GetTop() - CONTAINER_OFFSET_Y) * GetPercent(questHeight))
ObjectiveTrackerFrame:SetScale(GetPercent(questScale))
ObjectiveTrackerFrame:SetClampedToScreen(false)


All times are GMT -6. The time now is 09:02 AM.

vBulletin © 2024, Jelsoft Enterprises Ltd
© 2004 - 2022 MMOUI