refactor(api)!: one namespace per feature, screen split out
Namespaces were shared across features: `settings` was written by core, the
panel and touch, and `input` by touch and buttons. That made "does this
firmware implement the whole feature?" a question no pointer could answer.
Each namespace now belongs to exactly one feature or to core, so a feature is
a provider pointer and the compiler validates completeness:
gui, node -> screen, tree, under the screen feature
settings -> screen (rotation, theme), sys (timezone),
touch (calibration)
input -> touch, buttons
Runtime::open() no longer requires a GuiProvider; a firmware without one runs
with no screen/tree globals and reports sys.hasFeature("screen") false.
Rotation is one value again: GuiProvider::setRotation applies and persists, so
an app rotating the panel transiently puts the old value back itself.
This commit is contained in:
@@ -5,33 +5,33 @@
|
||||
---@alias Button "up"|"down"|"left"|"right"|"confirm"|"back"
|
||||
|
||||
-- Roles, not physical buttons: a device maps whatever hardware it has onto them, and
|
||||
-- up/down/left/right are the directions node.moveFocus already takes.
|
||||
-- up/down/left/right are the directions tree.moveFocus already takes.
|
||||
|
||||
---@class InputLib
|
||||
input = input or {}
|
||||
---@class ButtonsLib
|
||||
buttons = {}
|
||||
|
||||
---Returns the roles this device reports, so an app can label only the actions it has.
|
||||
---@return Button[]
|
||||
function input.getButtons() end
|
||||
function buttons.getAll() end
|
||||
|
||||
---Whether any button is held.
|
||||
---@return boolean
|
||||
function input.isAnyPressed() end
|
||||
function buttons.isAnyPressed() end
|
||||
|
||||
---Whether a button is held.
|
||||
---@param button Button
|
||||
---@return boolean
|
||||
function input.isPressed(button) end
|
||||
function buttons.isPressed(button) end
|
||||
|
||||
---Whether a button went down since the last poll.
|
||||
---@param button Button
|
||||
---@return boolean
|
||||
function input.wasPressed(button) end
|
||||
function buttons.wasPressed(button) end
|
||||
|
||||
---Whether a button came up since the last poll.
|
||||
---@param button Button
|
||||
---@return boolean
|
||||
function input.wasReleased(button) end
|
||||
function buttons.wasReleased(button) end
|
||||
|
||||
---Fired when a button goes down.
|
||||
---@param button Button
|
||||
|
||||
@@ -0,0 +1,164 @@
|
||||
---@meta
|
||||
|
||||
-- Generated from native/src/bindings/features/screen/screen.cpp. Do not edit.
|
||||
|
||||
-- The panel itself; the widget tree it paints is `tree`, and
|
||||
-- sys.hasFeature("screen") covers both.
|
||||
---@alias ScreenColor integer
|
||||
---@alias ScreenFont integer
|
||||
---@alias ScreenTextStyle integer
|
||||
|
||||
---@class ScreenLib
|
||||
---@field FONT_SMALL ScreenFont Small auxiliary text.
|
||||
---@field FONT_UI ScreenFont Normal controls and labels.
|
||||
---@field FONT_BODY ScreenFont Normal reading text.
|
||||
---@field FONT_LARGE ScreenFont Headings and prominent values.
|
||||
---@field STYLE_NORMAL ScreenTextStyle
|
||||
---@field STYLE_BOLD ScreenTextStyle
|
||||
screen = {}
|
||||
screen.FONT_SMALL = 0
|
||||
screen.FONT_UI = 0
|
||||
screen.FONT_BODY = 0
|
||||
screen.FONT_LARGE = 0
|
||||
screen.STYLE_NORMAL = 0
|
||||
screen.STYLE_BOLD = 0
|
||||
|
||||
---Returns the live frame width.
|
||||
---@return integer
|
||||
function screen.getWidth() end
|
||||
|
||||
---Returns the live frame height.
|
||||
---@return integer
|
||||
function screen.getHeight() end
|
||||
|
||||
---Rotates the panel and persists the choice, so there is one rotation
|
||||
---rather than a live one and a saved one to reconcile.
|
||||
---@param degrees integer 0, 90, 180, or 270 clockwise.
|
||||
---@return true? ok
|
||||
---@return string? error
|
||||
function screen.setRotation(degrees) end
|
||||
|
||||
---Returns the rotation in degrees clockwise.
|
||||
---@return integer
|
||||
function screen.getRotation() end
|
||||
|
||||
---Returns the saved palette name. Apps read ui.getTheme() instead; this
|
||||
---is the stored value, which only ui.setTheme() knows how to apply.
|
||||
---@return string
|
||||
function screen.getTheme() end
|
||||
|
||||
---Persists a palette name without applying it. Call ui.setTheme(), which
|
||||
---writes through here and then rebuilds the palette and repaints.
|
||||
---@param theme string
|
||||
---@return true? ok
|
||||
---@return string? error
|
||||
function screen.setTheme(theme) end
|
||||
|
||||
---Returns an opaque native color. E-ink implementations quantize RGB to available grayscale.
|
||||
---@param r integer 0 through 255.
|
||||
---@param g integer 0 through 255.
|
||||
---@param b integer 0 through 255.
|
||||
---@return ScreenColor
|
||||
function screen.color(r, g, b) end
|
||||
|
||||
---Clears the frame.
|
||||
---@param color? ScreenColor Defaults to white.
|
||||
function screen.clear(color) end
|
||||
|
||||
---Fills a rectangle.
|
||||
---@param x integer
|
||||
---@param y integer
|
||||
---@param w integer
|
||||
---@param h integer
|
||||
---@param color ScreenColor
|
||||
function screen.fillRect(x, y, w, h, color) end
|
||||
|
||||
---Outlines a rectangle.
|
||||
---@param x integer
|
||||
---@param y integer
|
||||
---@param w integer
|
||||
---@param h integer
|
||||
---@param color ScreenColor
|
||||
function screen.drawRect(x, y, w, h, color) end
|
||||
|
||||
---Draws a line.
|
||||
---@param x1 integer
|
||||
---@param y1 integer
|
||||
---@param x2 integer
|
||||
---@param y2 integer
|
||||
---@param color ScreenColor
|
||||
---@param width? integer Defaults to one pixel.
|
||||
function screen.drawLine(x1, y1, x2, y2, color, width) end
|
||||
|
||||
---Draws a single pixel.
|
||||
---@param x integer
|
||||
---@param y integer
|
||||
---@param color ScreenColor
|
||||
function screen.drawPixel(x, y, color) end
|
||||
|
||||
---Outlines a circle.
|
||||
---@param x integer Center.
|
||||
---@param y integer Center.
|
||||
---@param radius integer
|
||||
---@param color ScreenColor
|
||||
---@param width? integer Defaults to one pixel.
|
||||
function screen.drawCircle(x, y, radius, color, width) end
|
||||
|
||||
---Fills a circle.
|
||||
---@param x integer Center.
|
||||
---@param y integer Center.
|
||||
---@param radius integer
|
||||
---@param color ScreenColor
|
||||
---@param background? ScreenColor Surface behind an anti-aliased edge.
|
||||
function screen.fillCircle(x, y, radius, color, background) end
|
||||
|
||||
---Draws an anti-aliased rounded fill, optional gradient, and optional border in one pass.
|
||||
---@param x integer
|
||||
---@param y integer
|
||||
---@param w integer
|
||||
---@param h integer
|
||||
---@param radius integer
|
||||
---@param background ScreenColor Surface behind the anti-aliased edge.
|
||||
---@param top? ScreenColor Fill, or gradient top; omitted for no fill.
|
||||
---@param bottom? ScreenColor Gradient bottom; defaults to top. Panels without a gradient use top.
|
||||
---@param border? ScreenColor Omitted for no border.
|
||||
function screen.roundRect(x, y, w, h, radius, background, top, bottom, border) end
|
||||
|
||||
---Fills a polygon.
|
||||
---@param xs integer[]
|
||||
---@param ys integer[]
|
||||
---@param color ScreenColor
|
||||
function screen.fillPolygon(xs, ys, color) end
|
||||
|
||||
---Draws a bitmap.
|
||||
---@param path string Absolute BMP path.
|
||||
---@param x? integer Left edge; defaults to centered.
|
||||
---@param y? integer Top edge; defaults to centered.
|
||||
---@param maxWidth? integer Defaults to panel width.
|
||||
---@param maxHeight? integer Defaults to panel height.
|
||||
---@return true? ok
|
||||
---@return string? error
|
||||
function screen.drawBmp(path, x, y, maxWidth, maxHeight) end
|
||||
|
||||
---Measures a text run.
|
||||
---@param font ScreenFont Use a named screen.FONT_* role.
|
||||
---@param text string
|
||||
---@param style? ScreenTextStyle Defaults to screen.STYLE_NORMAL.
|
||||
---@return integer
|
||||
function screen.getTextWidth(font, text, style) end
|
||||
|
||||
---Returns the line height of a font role.
|
||||
---@param font ScreenFont Use a named screen.FONT_* role.
|
||||
---@param style? ScreenTextStyle Defaults to screen.STYLE_NORMAL.
|
||||
---@return integer
|
||||
function screen.getFontHeight(font, style) end
|
||||
|
||||
---Draws a text run with its top-left corner at x, y.
|
||||
---@param font ScreenFont Use a named screen.FONT_* role.
|
||||
---@param x integer Left edge.
|
||||
---@param y integer Top edge.
|
||||
---@param text string
|
||||
---@param color? ScreenColor Defaults to black.
|
||||
---@param style? ScreenTextStyle Defaults to screen.STYLE_NORMAL.
|
||||
---@param background? ScreenColor Omitted for transparent text.
|
||||
function screen.drawText(font, x, y, text, color, style, background) end
|
||||
@@ -0,0 +1,155 @@
|
||||
---@meta
|
||||
|
||||
-- Generated from native/src/bindings/features/screen/tree.cpp. Do not edit.
|
||||
|
||||
---@alias NodeId integer
|
||||
---@alias NodeType "box"|"text"|"button"|"custom"
|
||||
---@alias NodeDirection "up"|"down"|"left"|"right"
|
||||
|
||||
---@class NodeSpec
|
||||
---@field type NodeType
|
||||
---@field w? number|"fill"|"auto"
|
||||
---@field h? number|"fill"|"auto"
|
||||
---@field pad? number
|
||||
---@field gap? number
|
||||
---@field align? "start"|"center"|"end"|"stretch"
|
||||
---@field justify? "start"|"center"|"end"|"between"
|
||||
---@field row? boolean
|
||||
---@field at? table Absolute-position fields.
|
||||
---@field capture? boolean
|
||||
---@field interactive? boolean
|
||||
---@field label? string
|
||||
---@field font? ScreenFont
|
||||
|
||||
---@class NodeStyle
|
||||
---@field color? ScreenColor
|
||||
---@field background? ScreenColor Background offered to descendants.
|
||||
---@field fill? ScreenColor Surface painted by a box.
|
||||
---@field border? ScreenColor
|
||||
---@field face? ScreenColor Default button surface.
|
||||
---@field pressedFace? ScreenColor Pressed button surface.
|
||||
---@field pressedColor? ScreenColor Pressed button text.
|
||||
---@field focusColor? ScreenColor Distinct outline for directional focus.
|
||||
---@field radius? integer
|
||||
---@field font? ScreenFont
|
||||
---@field textStyle? ScreenTextStyle
|
||||
|
||||
---@class TreeLib
|
||||
tree = {}
|
||||
|
||||
---Drops the current tree; all existing IDs become invalid.
|
||||
function tree.reset() end
|
||||
|
||||
---Creates a node, optionally as a child of an existing one.
|
||||
---@param parent? NodeId Nil creates a root.
|
||||
---@param spec NodeSpec
|
||||
---@return NodeId
|
||||
function tree.create(parent, spec) end
|
||||
|
||||
---Adopts an existing root as a child.
|
||||
---@param parent NodeId
|
||||
---@param child NodeId Existing root without a parent.
|
||||
function tree.attach(parent, child) end
|
||||
|
||||
---Changes a node's requested size before layout.
|
||||
---@param id NodeId
|
||||
---@param w? number|"fill"|"auto"
|
||||
---@param h? number|"fill"|"auto"
|
||||
function tree.setSize(id, w, h) end
|
||||
|
||||
---Measures and places a subtree.
|
||||
---@param root NodeId
|
||||
---@param x integer
|
||||
---@param y integer
|
||||
---@param w integer
|
||||
---@param h integer
|
||||
---@return true? ok
|
||||
---@return string? error
|
||||
function tree.layout(root, x, y, w, h) end
|
||||
|
||||
---Releases temporary measurement and placement inputs after layout.
|
||||
function tree.dropScratch() end
|
||||
|
||||
---Returns the deepest interactive node under a point.
|
||||
---@param root NodeId
|
||||
---@param x integer
|
||||
---@param y integer
|
||||
---@return NodeId?
|
||||
function tree.hit(root, x, y) end
|
||||
|
||||
---Returns a node's placed rectangle.
|
||||
---@param id NodeId
|
||||
---@return integer x
|
||||
---@return integer y
|
||||
---@return integer w
|
||||
---@return integer h
|
||||
function tree.getRect(id) end
|
||||
|
||||
---Replaces a node's text and marks it for repaint.
|
||||
---@param id NodeId
|
||||
---@param text string
|
||||
function tree.setLabel(id, text) end
|
||||
|
||||
---Returns a node's text.
|
||||
---@param id NodeId
|
||||
---@return string?
|
||||
function tree.getLabel(id) end
|
||||
|
||||
---Returns a node's parent.
|
||||
---@param id NodeId
|
||||
---@return NodeId?
|
||||
function tree.getParent(id) end
|
||||
|
||||
---Sets the style roles a subtree inherits.
|
||||
---@param id NodeId
|
||||
---@param style NodeStyle
|
||||
function tree.setStyle(id, style) end
|
||||
|
||||
---Marks a node for repaint.
|
||||
---@param id NodeId
|
||||
function tree.invalidate(id) end
|
||||
|
||||
---Sets a node's pressed state.
|
||||
---@param id NodeId
|
||||
---@param pressed boolean
|
||||
function tree.setPressed(id, pressed) end
|
||||
|
||||
---Whether a node is pressed.
|
||||
---@param id NodeId
|
||||
---@return boolean
|
||||
function tree.isPressed(id) end
|
||||
|
||||
---Focuses the first interactive node in layout order.
|
||||
---@param root NodeId
|
||||
---@return NodeId? focused
|
||||
function tree.focusFirst(root) end
|
||||
|
||||
---Changes focus and invalidates the previously and newly focused nodes.
|
||||
---@param id? NodeId Nil clears focus.
|
||||
function tree.setFocus(id) end
|
||||
|
||||
---Returns the focused node.
|
||||
---@return NodeId?
|
||||
function tree.getFocus() end
|
||||
|
||||
---Moves to the nearest interactive node in the requested direction without wrapping.
|
||||
---@param root NodeId
|
||||
---@param direction NodeDirection
|
||||
---@return NodeId? focused Current focus when no candidate exists.
|
||||
function tree.moveFocus(root, direction) end
|
||||
|
||||
---Registers the painter every custom node calls.
|
||||
---@param painter fun(id: NodeId, x: integer, y: integer, w: integer, h: integer)
|
||||
function tree.setPainter(painter) end
|
||||
|
||||
---Paints dirty nodes; the firmware owns publication to the physical display.
|
||||
---@param root NodeId
|
||||
function tree.draw(root) end
|
||||
|
||||
---Returns the number of nodes in the tree.
|
||||
---@return integer
|
||||
function tree.getCount() end
|
||||
|
||||
---Returns the tree's memory use.
|
||||
---@return integer bytes
|
||||
function tree.getFootprint() end
|
||||
+17
-20
@@ -2,8 +2,22 @@
|
||||
|
||||
-- Generated from native/src/bindings/features/touch.cpp. Do not edit.
|
||||
|
||||
---@class SettingsLib
|
||||
settings = settings or {}
|
||||
---@class TouchLib
|
||||
touch = {}
|
||||
|
||||
---Returns the calibrated touch point, or nothing when the panel is not touched.
|
||||
---@return integer? x
|
||||
---@return integer? y
|
||||
function touch.getPoint() end
|
||||
|
||||
---Returns the uncalibrated touch reading, or nothing when the panel is not touched.
|
||||
---@return integer? x
|
||||
---@return integer? y
|
||||
function touch.getRawPoint() end
|
||||
|
||||
---Whether the panel is currently touched.
|
||||
---@return boolean
|
||||
function touch.isTouched() end
|
||||
|
||||
---Persists the panel's touch calibration.
|
||||
---@param x0 integer Raw reading at the left edge.
|
||||
@@ -12,24 +26,7 @@ settings = settings or {}
|
||||
---@param y1 integer Raw reading at the bottom edge.
|
||||
---@return true? ok
|
||||
---@return string? error
|
||||
function settings.setCalibration(x0, y0, x1, y1) end
|
||||
|
||||
---@class InputLib
|
||||
input = input or {}
|
||||
|
||||
---Returns the calibrated touch point, or nothing when the panel is not touched.
|
||||
---@return integer? x
|
||||
---@return integer? y
|
||||
function input.getTouch() end
|
||||
|
||||
---Returns the uncalibrated touch reading, or nothing when the panel is not touched.
|
||||
---@return integer? x
|
||||
---@return integer? y
|
||||
function input.getRawTouch() end
|
||||
|
||||
---Whether the panel is currently touched.
|
||||
---@return boolean
|
||||
function input.isTouched() end
|
||||
function touch.setCalibration(x0, y0, x1, y1) end
|
||||
|
||||
---Fired when the finger lands.
|
||||
---@param x integer
|
||||
|
||||
Reference in New Issue
Block a user