Module ui.widget.container.inputcontainer

An InputContainer is a WidgetContainer that handles user input events including multi touches and key presses.

See InputContainer:registerTouchZones for examples of how to listen for multi touch input.

This example illustrates how to listen for a key press input event via the key_events hashmap:

key_events = {
    PanBy20 = {
        { "Shift", Input.group.Cursor }, -- Shift + (any member of) Cursor
        event = "Pan",
        args = 20,
        is_inactive = true,
    },
    PanNormal = {
        { Input.group.Cursor }, -- Any member of Cursor (itself an array)
        event = "Pan",
        args = 10,
    },
    Exit = {
        { "Alt", "F4" }, -- Alt + F4
        { "Ctrl", "Q" }, -- Ctrl + Q
    },
    Home = {
        { { "Home", "H" } }, -- Any of Home or H (note the extra nesting!)
    },
    End = {
        { "End" }, -- NOTE: For a *single* key, we can forgo the nesting (c.f., match @ device/key).
    },
},

It is recommended to reference configurable sequences from another table and to store that table as a configuration setting.

Functions

InputContainer:registerTouchZones (zones) Register touch zones into this InputContainer.
InputContainer:updateTouchZonesOnScreenResize (new_screen_dimen) Updates touch zones based on new screen dimensions.


Functions

InputContainer:registerTouchZones (zones)
Register touch zones into this InputContainer.

See gesturedetector for a list of supported gestures.

NOTE: You are responsible for calling self:updateTouchZonesOnScreenResize with the new screen dimensions whenever the screen is rotated or resized.

Parameters:

  • zones table list of touch zones to register

Usage:

    local InputContainer = require("ui/widget/container/inputcontainer")
    local test_widget = InputContainer:new{}
    test_widget:registerTouchZones({
        {
            id = "foo_tap",
            ges = "tap",
            -- This binds the handler to the full screen
            screen_zone = {
                ratio_x = 0, ratio_y = 0, ratio_w = 1, ratio_h = 1,
            },
            handler = function(ges)
                print('User tapped on screen!')
                return true
            end
        },
        {
            id = "foo_swipe",
            ges = "swipe",
            -- This binds the handler to bottom half of the screen
            screen_zone = {
                ratio_x = 0, ratio_y = 0.5, ratio_w = 1, ratio_h = 0.5,
            },
            handler = function(ges)
                print("User swiped at the bottom with direction:", ges.direction)
                return true
            end
        },
    })
    require("ui/uimanager"):show(test_widget)
InputContainer:updateTouchZonesOnScreenResize (new_screen_dimen)
Updates touch zones based on new screen dimensions.

Parameters:

generated by LDoc 1.5.0 Last updated 2024-03-18 16:45:36