diff --git a/Classes/CalcsTab.lua b/Classes/CalcsTab.lua index 4d6f2ee3..c2f4e205 100644 --- a/Classes/CalcsTab.lua +++ b/Classes/CalcsTab.lua @@ -26,8 +26,8 @@ local CalcsTabClass = common.NewClass("CalcsTab", "UndoHandler", "ControlHost", self.calcs = LoadModule("Modules/Calcs", self.grid) - self.controls.scrollBarH = common.New("ScrollBarControl", nil, 0, 0, 0, 18, 80, "HORIZONTAL") - self.controls.scrollBarV = common.New("ScrollBarControl", nil, 0, 0, 18, 0, 80, "VERTICAL") + self.controls.scrollBarH = common.New("ScrollBarControl", nil, 0, 0, 0, 18, 80, "HORIZONTAL", true) + self.controls.scrollBarV = common.New("ScrollBarControl", nil, 0, 0, 18, 0, 80, "VERTICAL", true) end) function CalcsTabClass:Load(xml, dbFileName) @@ -70,19 +70,24 @@ function CalcsTabClass:Save(xml) end function CalcsTabClass:Draw(viewPort, inputEvents) + local gridViewPort = { x = viewPort.x, y = viewPort.y } if self.grid.realWidth > viewPort.width then - viewPort.height = viewPort.height - 18 + gridViewPort.height = viewPort.height - 18 + else + gridViewPort.height = viewPort.height end if self.grid.realHeight > viewPort.height then - viewPort.width = viewPort.width - 18 + gridViewPort.width = viewPort.width - 18 + else + gridViewPort.width = viewPort.width end - self.controls.scrollBarH.x = viewPort.x - self.controls.scrollBarH.y = viewPort.y + viewPort.height - self.controls.scrollBarH.width = viewPort.width + self.controls.scrollBarH.x = gridViewPort.x + self.controls.scrollBarH.y = gridViewPort.y + gridViewPort.height + self.controls.scrollBarH.width = gridViewPort.width self.controls.scrollBarH:SetContentDimension(self.grid.realWidth, viewPort.width) - self.controls.scrollBarV.x = viewPort.x + viewPort.width - self.controls.scrollBarV.y = viewPort.y - self.controls.scrollBarV.height = viewPort.height + self.controls.scrollBarV.x = gridViewPort.x + gridViewPort.width + self.controls.scrollBarV.y = gridViewPort.y + self.controls.scrollBarV.height = gridViewPort.height self.controls.scrollBarV:SetContentDimension(self.grid.realHeight, viewPort.height) self.grid.offX = viewPort.x - self.controls.scrollBarH.offset @@ -99,8 +104,8 @@ function CalcsTabClass:Draw(viewPort, inputEvents) end end end - self.grid:ProcessInput(inputEvents, viewPort) - self:ProcessControlsInput(inputEvents) + self.grid:ProcessInput(inputEvents, gridViewPort) + self:ProcessControlsInput(inputEvents, viewPort) if self.grid.changeFlag then self.grid.changeFlag = false diff --git a/Classes/ControlHost.lua b/Classes/ControlHost.lua index ddaee9f7..0e3f0be3 100644 --- a/Classes/ControlHost.lua +++ b/Classes/ControlHost.lua @@ -29,7 +29,7 @@ function ControlHostClass:GetMouseOverControl() end end -function ControlHostClass:ProcessControlsInput(inputEvents) +function ControlHostClass:ProcessControlsInput(inputEvents, viewPort) for id, event in ipairs(inputEvents) do if event.type == "KeyDown" then if self.selControl then @@ -38,10 +38,12 @@ function ControlHostClass:ProcessControlsInput(inputEvents) end if not self.selControl and event.key:match("BUTTON") then self:SelectControl() - local mOverControl = self:GetMouseOverControl() - if mOverControl and mOverControl.OnKeyDown then - self:SelectControl(mOverControl:OnKeyDown(event.key, event.doubleClick)) - inputEvents[id] = nil + if isMouseInRegion(viewPort) then + local mOverControl = self:GetMouseOverControl() + if mOverControl and mOverControl.OnKeyDown then + self:SelectControl(mOverControl:OnKeyDown(event.key, event.doubleClick)) + inputEvents[id] = nil + end end end elseif event.type == "KeyUp" then @@ -50,8 +52,8 @@ function ControlHostClass:ProcessControlsInput(inputEvents) self:SelectControl(self.selControl:OnKeyUp(event.key)) end inputEvents[id] = nil - else - local mOverControl = self:GetMouseOverControl() + elseif isMouseInRegion(viewPort) then + local mOverControl = self:GetMouseOverControl(viewPort) if mOverControl and mOverControl.OnKeyUp then mOverControl:OnKeyUp(event.key) inputEvents[id] = nil @@ -68,10 +70,10 @@ function ControlHostClass:ProcessControlsInput(inputEvents) end end -function ControlHostClass:DrawControls(...) +function ControlHostClass:DrawControls(viewPort) for _, control in pairs(self.controls) do if control:IsShown() then - control:Draw(...) + control:Draw(viewPort) end end end diff --git a/Classes/DropDownControl.lua b/Classes/DropDownControl.lua index a63718f1..44f9e3c6 100644 --- a/Classes/DropDownControl.lua +++ b/Classes/DropDownControl.lua @@ -114,7 +114,7 @@ function DropDownClass:Draw() if type(selLabel) == "table" then selLabel = selLabel.label end - SetViewport(x + 2, y + 2, width - 16, height - 4) + SetViewport(x + 2, y + 2, width - height, height - 4) DrawString(0, 0, "LEFT", height - 4, "VAR", selLabel or "") SetViewport() if self.dropped then diff --git a/Classes/ImportTab.lua b/Classes/ImportTab.lua index 09867cdd..a5f31be1 100644 --- a/Classes/ImportTab.lua +++ b/Classes/ImportTab.lua @@ -166,7 +166,7 @@ function ImportTabClass:Draw(viewPort, inputEvents) self.width = viewPort.width self.height = viewPort.height - self:ProcessControlsInput(inputEvents) + self:ProcessControlsInput(inputEvents, viewPort) main:DrawBackground(viewPort) diff --git a/Classes/ItemSlotControl.lua b/Classes/ItemSlotControl.lua index 4da9296e..38adb2a6 100644 --- a/Classes/ItemSlotControl.lua +++ b/Classes/ItemSlotControl.lua @@ -10,7 +10,7 @@ local t_insert = table.insert local m_min = math.min local ItemSlotClass = common.NewClass("ItemSlot", "DropDownControl", function(self, anchor, x, y, itemsTab, slotName, slotLabel, nodeId) - self.DropDownControl(anchor, x, y, 320, 20, { }, function(sel) + self.DropDownControl(anchor, x, y, 310, 20, { }, function(sel) if self.items[sel] ~= self.selItemId then self.selItemId = self.items[sel] itemsTab:PopulateSlots() diff --git a/Classes/ItemsTab.lua b/Classes/ItemsTab.lua index 7c1ba2c2..9990affe 100644 --- a/Classes/ItemsTab.lua +++ b/Classes/ItemsTab.lua @@ -28,12 +28,12 @@ local ItemsTabClass = common.NewClass("ItemsTab", "UndoHandler", "ControlHost", -- Item slots self.slots = { } for index, slotName in pairs(baseSlots) do - t_insert(self.controls, common.New("ItemSlot", {"TOPLEFT",self,"TOPLEFT"}, 100, (index - 1) * 20 + 24, self, slotName)) + t_insert(self.controls, common.New("ItemSlot", {"TOPLEFT",self,"TOPLEFT"}, 96, (index - 1) * 20 + 24, self, slotName)) end self.sockets = { } for _, node in pairs(main.tree.nodes) do if node.type == "socket" then - local socketControl = common.New("ItemSlot", {"TOPLEFT",self,"TOPLEFT"}, 100, 0, self, "Jewel "..node.id, "Socket", node.id) + local socketControl = common.New("ItemSlot", {"TOPLEFT",self,"TOPLEFT"}, 96, 0, self, "Jewel "..node.id, "Socket", node.id) self.controls["socket"..node.id] = socketControl self.sockets[node.id] = socketControl end @@ -43,17 +43,17 @@ local ItemsTabClass = common.NewClass("ItemsTab", "UndoHandler", "ControlHost", -- Build item list self.controls.itemList = common.New("ItemList", {"TOPLEFT",self.slots[baseSlots[1]],"TOPRIGHT"}, 20, 0, 360, 308, self) - self.controls.selectDBLabel = common.New("LabelControl", {"TOPLEFT",self.controls.itemList,"BOTTOMLEFT"}, 0, 16, 0, 16, "^7Import from:") + self.controls.selectDBLabel = common.New("LabelControl", {"TOPLEFT",self.controls.itemList,"BOTTOMLEFT"}, 0, 14, 0, 16, "^7Import from:") self.controls.selectDB = common.New("DropDownControl", {"LEFT",self.controls.selectDBLabel,"RIGHT"}, 4, 0, 150, 18, { "Uniques", "Rare Templates" }) -- Unique database - self.controls.uniqueDB = common.New("ItemDB", {"TOPLEFT",self.controls.selectDBLabel,"BOTTOMLEFT"}, 0, 48, 360, 276, self, main.uniqueDB) + self.controls.uniqueDB = common.New("ItemDB", {"TOPLEFT",self.controls.selectDBLabel,"BOTTOMLEFT"}, 0, 46, 360, 260, self, main.uniqueDB) self.controls.uniqueDB.shown = function() return self.controls.selectDB.sel == 1 end -- Rare template database - self.controls.rareDB = common.New("ItemDB", {"TOPLEFT",self.controls.selectDBLabel,"BOTTOMLEFT"}, 0, 48, 360, 276, self, main.rareDB) + self.controls.rareDB = common.New("ItemDB", {"TOPLEFT",self.controls.selectDBLabel,"BOTTOMLEFT"}, 0, 46, 360, 260, self, main.rareDB) self.controls.rareDB.shown = function() return self.controls.selectDB.sel == 2 end @@ -84,7 +84,7 @@ local ItemsTabClass = common.NewClass("ItemsTab", "UndoHandler", "ControlHost", self.controls.displayItemVariant.shown = function() return self.displayItem.variantList and #self.displayItem.variantList > 1 end - self.controls.displayItemRangeLine = common.New("DropDownControl", {"TOPLEFT",self.controls.addDisplayItem,"BOTTOMLEFT"}, 0, 8, 400, 18, nil, function(sel) + self.controls.displayItemRangeLine = common.New("DropDownControl", {"TOPLEFT",self.controls.addDisplayItem,"BOTTOMLEFT"}, 0, 8, 350, 18, nil, function(sel) self.controls.displayItemRangeSlider.val = self.displayItem.rangeLineList[sel].range end) self.controls.displayItemRangeLine.shown = function() @@ -94,6 +94,9 @@ local ItemsTabClass = common.NewClass("ItemsTab", "UndoHandler", "ControlHost", self.displayItem.rangeLineList[self.controls.displayItemRangeLine.sel].range = val itemLib.buildItemModList(self.displayItem) end) + + -- Scroll bar + self.controls.scrollBarH = common.New("ScrollBarControl", nil, 0, 0, 0, 18, 80, "HORIZONTAL", true) end) function ItemsTabClass:Load(xml, dbFileName) @@ -154,6 +157,11 @@ function ItemsTabClass:Draw(viewPort, inputEvents) self.y = viewPort.y self.width = viewPort.width self.height = viewPort.height + self.controls.scrollBarH.width = viewPort.width + self.controls.scrollBarH.x = viewPort.x + self.controls.scrollBarH.y = viewPort.y + viewPort.height - 18 + self.controls.scrollBarH:SetContentDimension(self.controls.displayItemRangeSlider:GetPos() + self.controls.displayItemRangeSlider:GetSize() - self.x, viewPort.width) + self.x = self.x - self.controls.scrollBarH.offset for id, event in ipairs(inputEvents) do if event.type == "KeyDown" then @@ -171,7 +179,7 @@ function ItemsTabClass:Draw(viewPort, inputEvents) end end end - self:ProcessControlsInput(inputEvents) + self:ProcessControlsInput(inputEvents, viewPort) main:DrawBackground(viewPort) @@ -236,6 +244,9 @@ function ItemsTabClass:SetDisplayItem(item) self.controls.displayItemVariant.list = item.variantList self.controls.displayItemVariant.sel = item.variant self:UpdateDisplayItemRangeLines() + self.controls.scrollBarH:SetOffset(self.controls.scrollBarH.offsetMax) + else + self.controls.scrollBarH:SetOffset(0) end end diff --git a/Classes/PopupDialog.lua b/Classes/PopupDialog.lua index 25d03a05..2f835daf 100644 --- a/Classes/PopupDialog.lua +++ b/Classes/PopupDialog.lua @@ -29,7 +29,7 @@ local PopupDialogClass = common.NewClass("PopupDialog", "ControlHost", "Control" end end) -function PopupDialogClass:Draw() +function PopupDialogClass:Draw(viewPort) local x, y = self:GetPos() local width, height = self:GetSize() -- Draw dialog background @@ -48,10 +48,10 @@ function PopupDialogClass:Draw() SetDrawColor(1, 1, 1) DrawString(titleX + 4, y - 7, "LEFT", 16, "VAR", title) -- Draw controls - self:DrawControls() + self:DrawControls(viewPort) end -function PopupDialogClass:ProcessInput(inputEvents) +function PopupDialogClass:ProcessInput(inputEvents, viewPort) for id, event in ipairs(inputEvents) do if event.type == "KeyDown" then if event.key == "ESCAPE" then @@ -60,5 +60,5 @@ function PopupDialogClass:ProcessInput(inputEvents) end end end - self:ProcessControlsInput(inputEvents) + self:ProcessControlsInput(inputEvents, viewPort) end \ No newline at end of file diff --git a/Classes/ScrollBarControl.lua b/Classes/ScrollBarControl.lua index 44ac3f1c..f0bb16dc 100644 --- a/Classes/ScrollBarControl.lua +++ b/Classes/ScrollBarControl.lua @@ -10,12 +10,17 @@ local m_max = math.max local m_ceil = math.ceil local m_floor = math.floor -local ScrollBarClass = common.NewClass("ScrollBarControl", "Control", function(self, anchor, x, y, width, height, step, dir) +local ScrollBarClass = common.NewClass("ScrollBarControl", "Control", function(self, anchor, x, y, width, height, step, dir, autoHide) self.Control(anchor, x, y, width, height) self.step = step or width * 2 self.dir = dir or "VERTICAL" self.offset = 0 self.enabled = false + if autoHide then + self.shown = function() + return self.enabled + end + end end) function ScrollBarClass:SetContentDimension(conDim, viewDim) @@ -109,6 +114,9 @@ function ScrollBarClass:Draw() local enabled = self:IsEnabled() local mOver, mOverComp = self:IsMouseOver() local dir = self.dir + if not IsKeyDown("LEFTBUTTON") then + self.dragging = false + end if self.dragging then local cursorX, cursorY = GetCursorPos() if self.dir == "HORIZONTAL" then @@ -283,7 +291,7 @@ function ScrollBarClass:OnKeyDown(key) end function ScrollBarClass:OnKeyUp(key) - if not self:IsShown() or not self:IsEnabled() or self:GetProperty("locked") then + if not self:IsShown() or not self:IsEnabled() or self:GetProperty("locked") then return end if key == "LEFTBUTTON" then @@ -300,5 +308,9 @@ function ScrollBarClass:OnKeyUp(key) self.holdRepeating = nil self.holdPauseTime = nil end + elseif key == "WHEELDOWN" then + self:Scroll(1) + elseif key == "WHEELUP" then + self:Scroll(-1) end end diff --git a/Classes/SkillsTab.lua b/Classes/SkillsTab.lua index 22037719..d2e80e29 100644 --- a/Classes/SkillsTab.lua +++ b/Classes/SkillsTab.lua @@ -120,7 +120,7 @@ function SkillsTabClass:Draw(viewPort, inputEvents) end end end - self:ProcessControlsInput(inputEvents) + self:ProcessControlsInput(inputEvents, viewPort) main:DrawBackground(viewPort) @@ -135,7 +135,7 @@ function SkillsTabClass:CreateGemSlot(index) self.gemSlots[index] = slot -- Gem name specification - slot.nameSpec = common.New("EditControl", nil, 0, 0, 200, 20, nil, nil, "[ %a]", 30, function(buf) + slot.nameSpec = common.New("EditControl", nil, 0, 0, 200, 20, nil, nil, "[ %a']", 30, function(buf) if not self.displaySkill.gemList[index] then self.displaySkill.gemList[index] = { nameSpec = "", level = 1, quality = 0 } end diff --git a/Classes/TreeTab.lua b/Classes/TreeTab.lua index 2a34c43d..dc33fe8d 100644 --- a/Classes/TreeTab.lua +++ b/Classes/TreeTab.lua @@ -89,7 +89,7 @@ function TreeTabClass:Draw(viewPort, inputEvents) end end end - self:ProcessControlsInput(inputEvents) + self:ProcessControlsInput(inputEvents, viewPort) self.viewer:Draw(self.build, viewPort, inputEvents) diff --git a/Modules/Build.lua b/Modules/Build.lua index 86bdaa78..9a35002c 100644 --- a/Modules/Build.lua +++ b/Modules/Build.lua @@ -289,7 +289,6 @@ function buildMode:Save(xml) end function buildMode:OnFrame(inputEvents) - self:ProcessControlsInput(inputEvents) for id, event in ipairs(inputEvents) do if event.type == "KeyDown" then if event.key == "s" and IsKeyDown("CTRL") then @@ -298,6 +297,7 @@ function buildMode:OnFrame(inputEvents) end end end + self:ProcessControlsInput(inputEvents, main.viewPort) -- Update contents of ascendancy class dropdown wipeTable(self.controls.ascendDrop.list) @@ -343,25 +343,24 @@ function buildMode:OnFrame(inputEvents) end self.controls.mainSkillDrop.sel = self.mainSkillIndex - -- Draw contents of current tab local sideBarWidth = 312 - local viewPort = { + local tabViewPort = { x = sideBarWidth, y = 32, width = main.screenW - sideBarWidth, height = main.screenH - 32 } if self.viewMode == "IMPORT" then - self.importTab:Draw(viewPort, inputEvents) + self.importTab:Draw(tabViewPort, inputEvents) elseif self.viewMode == "TREE" then - self.treeTab:Draw(viewPort, inputEvents) + self.treeTab:Draw(tabViewPort, inputEvents) elseif self.viewMode == "SKILLS" then - self.skillsTab:Draw(viewPort, inputEvents) + self.skillsTab:Draw(tabViewPort, inputEvents) elseif self.viewMode == "ITEMS" then - self.itemsTab:Draw(viewPort, inputEvents) + self.itemsTab:Draw(tabViewPort, inputEvents) elseif self.viewMode == "CALCS" then - self.calcsTab:Draw(viewPort, inputEvents) + self.calcsTab:Draw(tabViewPort, inputEvents) end -- Draw top bar background diff --git a/Modules/BuildList.lua b/Modules/BuildList.lua index 4c26fc67..4e78ed94 100644 --- a/Modules/BuildList.lua +++ b/Modules/BuildList.lua @@ -64,12 +64,11 @@ function listMode:OnFrame(inputEvents) end end end - self:ProcessControlsInput(inputEvents) + self:ProcessControlsInput(inputEvents, main.viewPort) - SetDrawColor(0.5, 0.5, 0.5) - DrawImage(main.tree.assets.Background1.handle, 0, 0, main.screenW, main.screenH, 0, 0, main.screenW / 100, main.screenH / 100) + main:DrawBackground(main.viewPort) - self:DrawControls() + self:DrawControls(main.viewPort) end function listMode:BuildList() diff --git a/Modules/Common.lua b/Modules/Common.lua index 0b100dd8..ca2eaa7d 100644 --- a/Modules/Common.lua +++ b/Modules/Common.lua @@ -123,6 +123,12 @@ function jsonToLua(json) return json:gsub("%[","{"):gsub("%]","}"):gsub('"(%d[%d%.]*)":','[%1]='):gsub('"([^"]+)":','["%1"]='):gsub("\\/","/"):gsub("{(%w+)}","{[0]=%1}") end +-- Check if mouse is currently inside area defined by region.x, region.y, region.width, region.height +function isMouseInRegion(region) + local cursorX, cursorY = GetCursorPos() + return cursorX >= region.x and cursorX < region.x + region.width and cursorY >= region.y and cursorY < region.y + region.height +end + -- Make a copy of a table and all subtables function copyTable(tbl) local out = {} diff --git a/Modules/Main.lua b/Modules/Main.lua index 9dc1cb1a..5c9bfa68 100644 --- a/Modules/Main.lua +++ b/Modules/Main.lua @@ -153,16 +153,18 @@ function main:OnFrame() self:CallMode("Init", unpack(self.modeArgs)) end + self.viewPort = { x = 0, y = 0, width = self.screenW, height = self.screenH } + if self.popups[1] then - self.popups[1]:ProcessInput(self.inputEvents) + self.popups[1]:ProcessInput(self.inputEvents, self.viewPort) wipeTable(self.inputEvents) else - self:ProcessControlsInput(self.inputEvents) + self:ProcessControlsInput(self.inputEvents, self.viewPort) end - self:CallMode("OnFrame", self.inputEvents) + self:CallMode("OnFrame", self.inputEvents, self.viewPort) - self:DrawControls() + self:DrawControls(self.viewPort) if self.popups[1] then SetDrawLayer(10) diff --git a/PathOfBuilding.sln b/PathOfBuilding.sln index 5efd7eaf..8579abf6 100644 --- a/PathOfBuilding.sln +++ b/PathOfBuilding.sln @@ -7,6 +7,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution ProjectSection(SolutionItems) = preProject Launch.lua = Launch.lua LaunchInstall.lua = LaunchInstall.lua + README.md = README.md UpdateApply.lua = UpdateApply.lua UpdateCheck.lua = UpdateCheck.lua EndProjectSection diff --git a/README.md b/README.md index 189de809..759dd824 100644 --- a/README.md +++ b/README.md @@ -46,3 +46,13 @@ Head over to the [Releases](https://github.com/Openarl/PathOfBuilding/releases) ![ss1](https://cloud.githubusercontent.com/assets/19189971/18089779/f0fe23fa-6f04-11e6-8ed7-ff7d5b9f867a.png) ![ss2](https://cloud.githubusercontent.com/assets/19189971/18089778/f0f923f0-6f04-11e6-89c2-b2c1410d3583.png) ![ss3](https://cloud.githubusercontent.com/assets/19189971/18089780/f0ff234a-6f04-11e6-8c88-6193fe59a5c4.png) + +## Changelog +### 1.0.13 - 2016/09/01 + * Added a scroll bar to the Items tab to fix the issue with low screen resolutions + * The scroll bar will automatically jump to the right when you start editing an item, then jump back when you save it + * This might be a little disorienting; need feedback on this + * Also fixed some minor issues with scroll bars (mouse wheel should now work on all of them) +### 1.0.12 - 2016/09/01 + * Updated tree to 2.4.0 + * Added latest patch note changes \ No newline at end of file diff --git a/manifest.xml b/manifest.xml index d826d208..c024fce8 100644 --- a/manifest.xml +++ b/manifest.xml @@ -1,6 +1,6 @@ - + @@ -9,39 +9,39 @@ - + - - + + - + - - + + - - + + - + - + - - + + - + - +