diff --git a/changelog.txt b/changelog.txt index 15461e2..738928c 100644 --- a/changelog.txt +++ b/changelog.txt @@ -18,6 +18,7 @@ Version 0.9.6.4 - Alpha (Release Date TBD) [ADDED] basic clipboard support for the textinput object (0.9.0 only) [ADDED] custom cursor support for the textinput object [ADDED] support for love.filesystem changes to loveframes.util.GetDirectoryContents (0.9.0 only) +[ADDED] loveframes.downobject [FIXED] error when pressing a function key while a textinput was focused [FIXED] the tooltip object not setting the state of its text object @@ -27,6 +28,7 @@ Version 0.9.6.4 - Alpha (Release Date TBD) [CHANGED] cleaned up the tooltip object [CHANGED] upgraded to middleclass 3.0 +[CHANGED] loveframes.hoverobject is now used to store the currently hovered object ================================================ Version 0.9.6.3 - Alpha (August 15 - 2013) diff --git a/init.lua b/init.lua index ac2bf8d..815f0ea 100644 --- a/init.lua +++ b/init.lua @@ -28,7 +28,10 @@ loveframes.collisioncount = 0 loveframes.hoverobject = false loveframes.modalobject = false loveframes.inputobject = false +loveframes.downobject = false loveframes.hover = false +loveframes.input_cursor_set = false +loveframes.prevcursor = nil loveframes.basicfont = love.graphics.newFont(12) loveframes.basicfontsmall = love.graphics.newFont(10) loveframes.objects = {} @@ -98,10 +101,40 @@ end function loveframes.update(dt) local base = loveframes.base + local input_cursor_set = loveframes.input_cursor_set + local version = love._version loveframes.collisioncount = 0 loveframes.hover = false + loveframes.hoverobject = false base:update(dt) + + if version == "0.9.0" then + local hoverobject = loveframes.hoverobject + if hoverobject then + if not input_cursor_set then + if hoverobject.type == "textinput" then + local curcursor = love.mouse.getCursor() + local newcursor = love.mouse.getSystemCursor("ibeam") + love.mouse.setCursor(newcursor) + loveframes.prevcursor = curcursor + loveframes.input_cursor_set = true + end + else + if hoverobject.type ~= "textinput" then + local prevcursor = loveframes.prevcursor + love.mouse.setCursor(prevcursor) + loveframes.input_cursor_set = false + end + end + else + if input_cursor_set then + local prevcursor = loveframes.prevcursor + love.mouse.setCursor(prevcursor) + loveframes.input_cursor_set = false + end + end + end end @@ -150,7 +183,7 @@ function loveframes.mousereleased(x, y, button) -- reset the hover object if button == "l" then - loveframes.hoverobject = false + loveframes.downobject = false loveframes.selectedobject = false end diff --git a/objects/base.lua b/objects/base.lua index f49eb8f..b3f5fbb 100644 --- a/objects/base.lua +++ b/objects/base.lua @@ -764,7 +764,7 @@ function newobject:CheckHover() local x, y = love.mouse.getPosition() local selfcol = loveframes.util.BoundingBox(x, self.x, y, self.y, 1, self.width, 1, self.height) - local hoverobject = loveframes.hoverobject + local downobject = loveframes.downobject local modalobject = loveframes.modalobject local collisioncount = loveframes.collisioncount local clickbounds = self.clickbounds @@ -774,10 +774,10 @@ function newobject:CheckHover() loveframes.collisioncount = collisioncount + 1 local top = self:IsTopCollision() if top then - if not hoverobject then + if not downobject then self.hover = true else - if hoverobject == self then + if downobject == self then self.hover = true else self.hover = false @@ -829,6 +829,10 @@ function newobject:CheckHover() end end + if self.hover and self.type ~= "base" then + loveframes.hoverobject = self + end + end --[[--------------------------------------------------------- diff --git a/objects/button.lua b/objects/button.lua index 07ed422..9b3b57d 100644 --- a/objects/button.lua +++ b/objects/button.lua @@ -50,18 +50,18 @@ function newobject:update(dt) local hover = self.hover local down = self.down - local hoverobject = loveframes.hoverobject + local downobject = loveframes.downobject local parent = self.parent local base = loveframes.base local update = self.Update if not hover then self.down = false - if hoverobject == self then + if downobject == self then self.hover = true end else - if hoverobject == self then + if downobject == self then self.down = true end end @@ -144,7 +144,7 @@ function newobject:mousepressed(x, y, button) baseparent:MakeTop() end self.down = true - loveframes.hoverobject = self + loveframes.downobject = self end end diff --git a/objects/checkbox.lua b/objects/checkbox.lua index 3195b35..d4af3a9 100644 --- a/objects/checkbox.lua +++ b/objects/checkbox.lua @@ -63,12 +63,12 @@ function newobject:update(dt) if not hover then self.down = false else - if loveframes.hoverobject == self then + if loveframes.downobject == self then self.down = true end end - if not self.down and loveframes.hoverobject == self then + if not self.down and loveframes.downobject == self then self.hover = true end @@ -175,7 +175,7 @@ function newobject:mousepressed(x, y, button) baseparent:MakeTop() end self.down = true - loveframes.hoverobject = self + loveframes.downobject = self end end diff --git a/objects/collapsiblecategory.lua b/objects/collapsiblecategory.lua index b314f43..4b5ce0a 100644 --- a/objects/collapsiblecategory.lua +++ b/objects/collapsiblecategory.lua @@ -156,7 +156,7 @@ function newobject:mousepressed(x, y, button) baseparent:MakeTop() end self.down = true - loveframes.hoverobject = self + loveframes.downobject = self end end diff --git a/objects/imagebutton.lua b/objects/imagebutton.lua index a42cde4..b42bf10 100644 --- a/objects/imagebutton.lua +++ b/objects/imagebutton.lua @@ -50,7 +50,7 @@ function newobject:update(dt) self:CheckHover() local hover = self.hover - local hoverobject = loveframes.hoverobject + local downobject = loveframes.downobject local down = self.down local parent = self.parent local base = loveframes.base @@ -59,12 +59,12 @@ function newobject:update(dt) if not hover then self.down = false else - if hoverobject == self then + if downobject == self then self.down = true end end - if not down and hoverobject == self then + if not down and downobject == self then self.hover = true end @@ -146,7 +146,7 @@ function newobject:mousepressed(x, y, button) baseparent:MakeTop() end self.down = true - loveframes.hoverobject = self + loveframes.downobject = self end end diff --git a/objects/internal/closebutton.lua b/objects/internal/closebutton.lua index 0da89e3..a33e103 100644 --- a/objects/internal/closebutton.lua +++ b/objects/internal/closebutton.lua @@ -44,7 +44,7 @@ function newobject:update(dt) local hover = self.hover local down = self.down - local hoverobject = loveframes.hoverobject + local downobject = loveframes.downobject local parent = self.parent local base = loveframes.base local update = self.Update @@ -52,12 +52,12 @@ function newobject:update(dt) if not hover then self.down = false else - if loveframes.hoverobject == self then + if loveframes.downobject == self then self.down = true end end - if not down and hoverobject == self then + if not down and downobject == self then self.hover = true end @@ -124,7 +124,7 @@ function newobject:mousepressed(x, y, button) baseparent:MakeTop() end self.down = true - loveframes.hoverobject = self + loveframes.downobject = self end end diff --git a/objects/internal/columnlist/columnlistheader.lua b/objects/internal/columnlist/columnlistheader.lua index 8e77834..ee0cf05 100644 --- a/objects/internal/columnlist/columnlistheader.lua +++ b/objects/internal/columnlist/columnlistheader.lua @@ -77,12 +77,12 @@ function newobject:update(dt) if not self.hover then self.down = false else - if loveframes.hoverobject == self then + if loveframes.downobject == self then self.down = true end end - if self.down and loveframes.hoverobject == self then + if self.down and loveframes.downobject == self then self.hover = true end @@ -142,7 +142,7 @@ function newobject:mousepressed(x, y, button) baseparent:MakeTop() end self.down = true - loveframes.hoverobject = self + loveframes.downobject = self end end diff --git a/objects/internal/multichoice/multichoicerow.lua b/objects/internal/multichoice/multichoicerow.lua index 151b604..f96278c 100644 --- a/objects/internal/multichoice/multichoicerow.lua +++ b/objects/internal/multichoice/multichoicerow.lua @@ -50,12 +50,12 @@ function newobject:update(dt) if not self.hover then self.down = false else - if loveframes.hoverobject == self then + if loveframes.downobject == self then self.down = true end end - if not self.down and loveframes.hoverobject == self then + if not self.down and loveframes.downobject == self then self.hover = true end @@ -118,7 +118,7 @@ function newobject:mousepressed(x, y, button) if hover and button == "l" then self.down = true - loveframes.hoverobject = self + loveframes.downobject = self end end diff --git a/objects/internal/scrollable/scrollarea.lua b/objects/internal/scrollable/scrollarea.lua index 3720b9e..5b5cfb5 100644 --- a/objects/internal/scrollable/scrollarea.lua +++ b/objects/internal/scrollable/scrollarea.lua @@ -193,7 +193,7 @@ function newobject:mousepressed(x, y, button) bar:Scroll(-bar.width) end end - loveframes.hoverobject = self + loveframes.downobject = self end for k, v in ipairs(internals) do diff --git a/objects/internal/scrollable/scrollbar.lua b/objects/internal/scrollable/scrollbar.lua index 88534ce..e14e1fa 100644 --- a/objects/internal/scrollable/scrollbar.lua +++ b/objects/internal/scrollable/scrollbar.lua @@ -249,7 +249,7 @@ function newobject:mousepressed(x, y, button) self.clickx = x self.clicky = y self.dragging = true - loveframes.hoverobject = self + loveframes.downobject = self end end diff --git a/objects/internal/scrollable/scrollbutton.lua b/objects/internal/scrollable/scrollbutton.lua index 1dc6ae8..57eeab3 100644 --- a/objects/internal/scrollable/scrollbutton.lua +++ b/objects/internal/scrollable/scrollbutton.lua @@ -50,12 +50,12 @@ function newobject:update(dt) if not hover then self.down = false else - if loveframes.hoverobject == self then + if loveframes.downobject == self then self.down = true end end - if not self.down and loveframes.hoverobject == self then + if not self.down and loveframes.downobject == self then self.hover = true end @@ -123,7 +123,7 @@ function newobject:mousepressed(x, y, button) baseparent:MakeTop() end self.down = true - loveframes.hoverobject = self + loveframes.downobject = self end end diff --git a/objects/internal/sliderbutton.lua b/objects/internal/sliderbutton.lua index 049f1e0..342b65f 100644 --- a/objects/internal/sliderbutton.lua +++ b/objects/internal/sliderbutton.lua @@ -56,7 +56,7 @@ function newobject:update(dt) local pvalue = self.parent.value local hover = self.hover local down = self.down - local hoverobject = loveframes.hoverobject + local downobject = loveframes.downobject local parent = self.parent local slidetype = parent.slidetype local dragging = self.dragging @@ -65,16 +65,16 @@ function newobject:update(dt) if not hover then self.down = false - if hoverobject == self then + if downobject == self then self.hover = true end else - if hoverobject == self then + if downobject == self then self.down = true end end - if not down and hoverobject == self then + if not down and downobject == self then self.hover = true end @@ -116,7 +116,7 @@ function newobject:update(dt) self.parent.OnValueChanged(self.parent, self.parent.value) end end - loveframes.hoverobject = self + loveframes.downobject = self end if slidetype == "horizontal" then @@ -200,7 +200,7 @@ function newobject:mousepressed(x, y, button) self.clickx = x self.starty = self.staticy self.clicky = y - loveframes.hoverobject = self + loveframes.downobject = self end end diff --git a/objects/internal/tabbutton.lua b/objects/internal/tabbutton.lua index 8d59976..f852636 100644 --- a/objects/internal/tabbutton.lua +++ b/objects/internal/tabbutton.lua @@ -133,7 +133,7 @@ function newobject:mousepressed(x, y, button) baseparent:MakeTop() end self.down = true - loveframes.hoverobject = self + loveframes.downobject = self end end diff --git a/objects/multichoice.lua b/objects/multichoice.lua index 0dd7917..e06c4cb 100644 --- a/objects/multichoice.lua +++ b/objects/multichoice.lua @@ -141,7 +141,7 @@ function newobject:mousepressed(x, y, button) self.haslist = true self.list = loveframes.objects["multichoicelist"]:new(self) self.list:SetState(self.state) - loveframes.hoverobject = self + loveframes.downobject = self end end diff --git a/objects/textinput.lua b/objects/textinput.lua index ad2d815..f5245cc 100644 --- a/objects/textinput.lua +++ b/objects/textinput.lua @@ -60,9 +60,7 @@ function newobject:initialize() self.editable = true self.internal = false self.autoscroll = false - self.cursorset = false self.masked = false - self.prevcursor = nil self.OnEnter = nil self.OnTextChanged = nil self.OnFocusGained = nil @@ -134,25 +132,6 @@ function newobject:update(dt) self.alltextselected = false end - if version == "0.9.0" then - local cursorset = self.cursorset - if hover then - if not cursorset then - local curcursor = love.mouse.getCursor() - local newcursor = love.mouse.newCursor("ibeam") - love.mouse.setCursor(newcursor) - self.prevcursor = curcursor - self.cursorset = true - end - else - if cursorset then - local prevcursor = self.prevcursor - love.mouse.setCursor(prevcursor) - self.cursorset = false - end - end - end - -- keydown check if keydown ~= "none" then local lctrl = love.keyboard.isDown("lctrl") diff --git a/util.lua b/util.lua index dc9302c..fedd1e1 100644 --- a/util.lua +++ b/util.lua @@ -247,6 +247,7 @@ function loveframes.util.RemoveAll() loveframes.base.internals = {} loveframes.hoverobject = false + loveframes.downobject = false loveframes.modalobject = false loveframes.inputobject = false loveframes.hover = false