Skip to content

Commit 0d64719

Browse files
committed
Added wheelmoved() event method (which can do horizontal scrolling).
Added get/setWheelScrollSpeed*(). Second argument for setMouseScrollSpeed() is now optional.
1 parent 45dec91 commit 0d64719

3 files changed

Lines changed: 64 additions & 13 deletions

File tree

InputField.lua

Lines changed: 56 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,16 @@
2424
getDoubleClickMaxDelay, setDoubleClickMaxDelay
2525
getFilter, setFilter
2626
getFont, setFont
27+
getMaxHistory, setMaxHistory
2728
getMouseScrollSpeed, getMouseScrollSpeedX, getMouseScrollSpeedY, setMouseScrollSpeed, setMouseScrollSpeedX, setMouseScrollSpeedY
2829
getType, setType, isPassword, isMultiline
30+
getWheelScrollSpeed, getWheelScrollSpeedX, getWheelScrollSpeedY, setWheelScrollSpeed, setWheelScrollSpeedX, setWheelScrollSpeedY
2931
isEditable, setEditable
3032
isFontFilteringActive, setFontFilteringActive
3133
3234
-- Events:
3335
update
34-
mousepressed, mousemoved, mousereleased
36+
mousepressed, mousemoved, mousereleased, wheelmoved
3537
keypressed, textinput
3638
3739
-- Other:
@@ -42,7 +44,6 @@
4244
getCursor, setCursor, moveCursor, getCursorSelectionSide, getAnchorSelectionSide
4345
getCursorLayout
4446
getInfoAtCoords
45-
getMaxHistory, setMaxHistory
4647
getScroll, getScrollX, getScrollY, setScroll, setScrollX, setScrollY, scroll, scrollToCursor
4748
getScrollHandles, getScrollHandleHorizontal, getScrollHandleVertical
4849
getScrollLimits
@@ -108,6 +109,9 @@
108109
function love.mousereleased(mx, my, mbutton)
109110
field:mousereleased(mx-fieldX, my-fieldY, mbutton)
110111
end
112+
function love.wheelmoved(dx, dy)
113+
field:wheelmoved(dx, dy)
114+
end
111115
112116
function love.draw()
113117
love.graphics.setColor(0, 0, 1)
@@ -747,6 +751,9 @@ local function newInputField(text, fieldType)
747751
mouseScrollSpeedX = 6.0, -- Per pixel per second.
748752
mouseScrollSpeedY = 8.0,
749753

754+
wheelScrollSpeedX = 1.0, -- Per second. Relative to the font size.
755+
wheelScrollSpeedY = 1.0,
756+
750757
dragMode = "", -- "" | "character" | "word" | "line"
751758
dragStartPosition1 = 0,
752759
dragStartPosition2 = 0,
@@ -954,10 +961,11 @@ function InputField.getMouseScrollSpeedY(field)
954961
return field.mouseScrollSpeedY
955962
end
956963

957-
-- field:setMouseScrollSpeed( speedX, speedY )
964+
-- field:setMouseScrollSpeed( speedX [, speedY=speedX ] )
958965
-- field:setMouseScrollSpeedX( speedX )
959966
-- field:setMouseScrollSpeedY( speedY )
960967
function InputField.setMouseScrollSpeed(field, speedX, speedY)
968+
speedY = speedY or speedX
961969
field.mouseScrollSpeedX = math.max(speedX, 0)
962970
field.mouseScrollSpeedY = math.max(speedY, 0)
963971
end
@@ -970,6 +978,36 @@ end
970978

971979

972980

981+
-- speedX, speedY = field:getWheelScrollSpeed( )
982+
-- speedX = field:getWheelScrollSpeedX( )
983+
-- speedY = field:getWheelScrollSpeedY( )
984+
function InputField.getWheelScrollSpeed(field)
985+
return field.wheelScrollSpeedX, field.wheelScrollSpeedY
986+
end
987+
function InputField.getWheelScrollSpeedX(field)
988+
return field.wheelScrollSpeedX
989+
end
990+
function InputField.getWheelScrollSpeedY(field)
991+
return field.wheelScrollSpeedY
992+
end
993+
994+
-- field:setWheelScrollSpeed( speedX [, speedY=speedX ] )
995+
-- field:setWheelScrollSpeedX( speedX )
996+
-- field:setWheelScrollSpeedY( speedY )
997+
function InputField.setWheelScrollSpeed(field, speedX, speedY)
998+
speedY = speedY or speedX
999+
field.wheelScrollSpeedX = math.max(speedX, 0)
1000+
field.wheelScrollSpeedY = math.max(speedY, 0)
1001+
end
1002+
function InputField.setWheelScrollSpeedX(field, speedX)
1003+
field.wheelScrollSpeedX = math.max(speedX, 0)
1004+
end
1005+
function InputField.setWheelScrollSpeedY(field, speedY)
1006+
field.wheelScrollSpeedY = math.max(speedY, 0)
1007+
end
1008+
1009+
1010+
9731011
-- delay = field:getDoubleClickMaxDelay( )
9741012
function InputField.getDoubleClickMaxDelay(field)
9751013
return field.multiClickMaxDelay
@@ -1620,6 +1658,21 @@ function InputField.mousereleased(field, mx, my, mbutton)
16201658
return true
16211659
end
16221660

1661+
-- eventWasHandled = field:wheelmoved( deltaX, deltaY )
1662+
function InputField.wheelmoved(field, dx, dy)
1663+
if LK.isDown("lshift","rshift") then
1664+
dx, dy = dy, dx
1665+
end
1666+
1667+
local fontH = field.font:getHeight()
1668+
field:scroll(
1669+
-dx * field.wheelScrollSpeedX*fontH,
1670+
-dy * field.wheelScrollSpeedY*fontH
1671+
)
1672+
1673+
return true -- Always handle event (for now).
1674+
end
1675+
16231676

16241677

16251678
-- field:releaseMouse( )

examples/multipleFields/main.lua

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,10 @@ local LK = love.keyboard
2020
-- Values.
2121
--
2222

23-
local FIELD_PADDING = 6
24-
local FONT_LINE_HEIGHT = 1.3
25-
local SCROLLBAR_WIDTH = 5
26-
local BLINK_INTERVAL = 0.90
27-
local MOUSE_WHEEL_SCROLL_SPEED = 15
23+
local FIELD_PADDING = 6
24+
local FONT_LINE_HEIGHT = 1.3
25+
local SCROLLBAR_WIDTH = 5
26+
local BLINK_INTERVAL = 0.90
2827

2928
local ENABLE_CJK = false
3029
local COMPOSITION_BOX_PADDING = 3
@@ -211,7 +210,7 @@ function love.wheelmoved(dx, dy)
211210
local hoveredTextInput = getTextInputAtCoords(love.mouse.getPosition())
212211

213212
if hoveredTextInput then
214-
hoveredTextInput.field:scroll(-dx*MOUSE_WHEEL_SCROLL_SPEED, -dy*MOUSE_WHEEL_SCROLL_SPEED)
213+
hoveredTextInput.field:wheelmoved(dx, dy)
215214
end
216215
end
217216

examples/simple/main.lua

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,8 @@ local FIELD_INNER_Y = FIELD_OUTER_Y + FIELD_PADDING
2424
local FIELD_INNER_WIDTH = FIELD_OUTER_WIDTH - 2*FIELD_PADDING
2525
local FIELD_INNER_HEIGHT = FIELD_OUTER_HEIGHT - 2*FIELD_PADDING
2626

27-
local SCROLLBAR_WIDTH = 5
28-
local BLINK_INTERVAL = 0.90
29-
local MOUSE_WHEEL_SCROLL_SPEED = 10
27+
local SCROLLBAR_WIDTH = 5
28+
local BLINK_INTERVAL = 0.90
3029

3130

3231

@@ -68,7 +67,7 @@ function love.mousereleased(mx, my, mbutton, pressCount)
6867
end
6968

7069
function love.wheelmoved(dx, dy)
71-
field:scroll(-dx*MOUSE_WHEEL_SCROLL_SPEED, -dy*MOUSE_WHEEL_SCROLL_SPEED)
70+
field:wheelmoved(dx, dy)
7271
end
7372

7473

0 commit comments

Comments
 (0)