From 05dd8e0cddb332ff26c7549621dcdb6f0d3c6041 Mon Sep 17 00:00:00 2001 From: Christopher Tse Date: Thu, 23 Apr 2020 21:11:41 +1000 Subject: [PATCH] Modified mouse behaviour with the name edit box --- ChatBubblePool.lua | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/ChatBubblePool.lua b/ChatBubblePool.lua index b358d65..c1cc6c3 100644 --- a/ChatBubblePool.lua +++ b/ChatBubblePool.lua @@ -199,6 +199,11 @@ local function checkTailBounds(chatBubble) end end +local function clearFocusAndSelection(editBox) + editBox:ClearFocus() + editBox:HighlightText(0,0); +end + function ChatBubblePool.getChatBubble() for index, chatBubble in ipairs(pool) do if chatBubble.isAvailable then @@ -233,7 +238,7 @@ function ChatBubblePool.getChatBubble() editBox:SetFontObject("ChatBubbleFont"); editBox:SetJustifyH("CENTER"); editBox:SetScript("OnEnterPressed", function(self) if IsShiftKeyDown() then self:Insert("\n") else self:ClearFocus() end end); - editBox:SetScript("OnEscapePressed", function(self) self:ClearFocus() end); + editBox:SetScript("OnEscapePressed",clearFocusAndSelection); --Apparently, the below code stops the user from being able to change the cursor location --editBox:EnableMouse(true) --editBox:SetScript("OnMouseDown", function(self) newChatBubble:StartMoving() end ) @@ -295,30 +300,30 @@ function ChatBubblePool.getChatBubble() nameBox:SetAutoFocus(false); nameBox:SetMultiLine(true); --It's not actually multiline, but this stops the name from scrolling off if the user selects too much of the text. --The max letters should prevent the edit box from ever reaching more than one line - nameBox:SetScript("OnEnterPressed", function(self) self:ClearFocus() end); - nameBox:SetScript("OnTabPressed", function(self) editBox:SetFocus() end); + nameBox:SetScript("OnEnterPressed",clearFocusAndSelection); + nameBox:SetScript("OnTabPressed",function(self) editBox:SetFocus() end); + nameBox:SetScript("OnEscapePressed",clearFocusAndSelection); nameBox:SetAlpha(0); nameBox:SetScript("OnEditFocusGained", function(self) self:SetAlpha(1) end); nameBox:SetScript("OnEditFocusLost", function(self) if self:GetText() == "" then self:SetAlpha(0.01) end end); + --nameBox:SetScript("OnClick", function(self) nameBox:SetFocus() end); + nameBox:SetScript("OnEnter", function(self) if nameBox:GetText() == "" and not nameBox:HasFocus() then nameBox:SetAlpha(0.5) end end); + nameBox:SetScript("OnLeave", function(self) if nameBox:GetText() == "" and not nameBox:HasFocus() then nameBox:SetAlpha(0) end end); newChatBubble.nameBox = nameBox; - local nameBoxBackground = CreateFrame("Frame",frameName.."-NameBoxBackground",nameBox); + local nameBoxBackground = CreateFrame("Button",frameName.."-NameBoxBackground",nameBox); local paddingL = nameBox.padding.L; nameBoxBackground:SetPoint("BOTTOMLEFT",nameBox,"BOTTOMLEFT",-paddingL,-nameBox.margin.D) nameBoxBackground:SetPoint("TOPLEFT",nameBox,"TOPLEFT",-paddingL,nameBox.margin.T + 12); nameBoxBackground:SetWidth(32); nameBoxBackground:SetFrameStrata("BACKGROUND"); + nameBoxBackground:SetScript("OnClick", function(self) nameBox:SetFocus() end); + nameBoxBackground:SetScript("OnMouseDown", function(self) newChatBubble:StartMoving() end ) + nameBoxBackground:SetScript("OnMouseUp", function(self) newChatBubble:StopMovingOrSizing() end ) + nameBoxBackground:SetScript("OnEnter", function(self) if nameBox:GetText() == "" and not nameBox:HasFocus() then nameBox:SetAlpha(0.5) end end); + nameBoxBackground:SetScript("OnLeave", function(self) if nameBox:GetText() == "" and not nameBox:HasFocus() then nameBox:SetAlpha(0) end end); nameBox.background = nameBoxBackground - local nameBoxMouseCatcher = CreateFrame("Button",frameName.."-NameBoxMouseCatcher",nameBox); - nameBoxMouseCatcher:SetPoint("BOTTOMLEFT",nameBoxBackground); - nameBoxMouseCatcher:SetPoint("TOPRIGHT",nameBoxBackground); - nameBoxMouseCatcher:SetScript("OnEnter", function(self) if nameBox:GetText() == "" and not nameBox:HasFocus() then nameBox:SetAlpha(0.5) end end); - nameBoxMouseCatcher:SetScript("OnLeave", function(self) if nameBox:GetText() == "" and not nameBox:HasFocus() then nameBox:SetAlpha(0) end end); - nameBoxMouseCatcher:SetScript("OnClick", function(self) nameBox:SetFocus() end); - nameBoxMouseCatcher:SetScript("OnMouseDown", function(self) newChatBubble:StartMoving() end ) - nameBoxMouseCatcher:SetScript("OnMouseUp", function(self) newChatBubble:StopMovingOrSizing() end ) - nameBox.stringMeasure = nameBox:CreateFontString(nil,"OVERLAY","GameFontNormal"); --nameBox.stringMeasure:SetAlpha(0); nameBox.GetFullWidth = function(self) return nameBoxBackground:GetWidth() end; @@ -353,10 +358,10 @@ function ChatBubblePool.getChatBubble() cpBorderTex:SetColorTexture(0.1,0.1,0.1); nameBoxColorPicker:SetPoint("BOTTOMLEFT",nameBoxBackground,"BOTTOMRIGHT"); nameBoxColorPicker:SetAlpha(0.01); - nameBoxColorPicker:EnableMouse(true); + nameBoxColorPicker:EnableMouse(false); nameBoxColorPicker:SetScript("OnEnter", function(self) if nameBox:GetText() ~= "" then self:SetAlpha(1); end; end); nameBoxColorPicker:SetScript("OnLeave", function(self) self:SetAlpha(0.01) end); - nameBoxColorPicker:SetScript("OnClick", function(self) pickNameColor(newChatBubble) end); + nameBoxColorPicker:SetScript("OnClick", function(self) if nameBox:GetText() ~= "" then pickNameColor(newChatBubble) end; end); local chatBubbleTail = CreateFrame("Frame",frameName.."-tail",chatBubbleBackground) chatBubbleTail:SetSize(16,16) -- 1.7.9.5