local function group_example()
    local g = lvgl.group.create()
    g:set_default()

    -- for demo purpose, set all indev to use this group
    local indev = nil
    while true do
        indev = lvgl.indev.get_next(indev)
        if not indev then break end

        local t = indev:get_type()
        if t == 2 or t == 4 then
            indev:set_group(g)
        end
    end

    local style = lvgl.Style({
            border_width = 5,
            border_color = "#a00",
        })

    local root = lvgl.Object(nil, {
            w = lvgl.PCT(100),
            h = lvgl.PCT(100),
            align = lvgl.ALIGN.CENTER,
            bg_color = "#aaa",
            flex = {
                flex_direction = "row",
                flex_wrap = "wrap"
            }
        })

    root:add_style(style, lvgl.STATE.FOCUSED)

    for _ = 1, 5 do
        local obj = root:Object({
                w = lvgl.PCT(50),
                h = lvgl.PCT(50),
                bg_color = "#555",
            })

        obj:add_style(style, lvgl.STATE.FOCUSED)

        obj:onClicked(function(obj, code)
            print("clicked: ", obj)
        end)

        obj:onevent(lvgl.EVENT.FOCUSED, function(obj, code)
            print("focused: ", obj)
            obj:scroll_to_view(true)
        end)

        obj:onevent(lvgl.EVENT.DEFOCUSED, function(obj, code)
            print("defocused: ", obj)
        end)

        g:add_obj(obj)
    end
end

group_example()