core.view
Base view.
local view = require "core.view"
__index
(field) __index: core.object
Base class providing OOP functionality for Lua. All classes in Pragtical inherit from Object.
current_scale
(field) current_scale: number
h_scrollbar
(field) h_scrollbar: core.scrollbar
Scrollable viewport indicator with draggable thumb. Supports both vertical and horizontal orientation with configurable alignment. Uses a "normal" coordinate system internally that treats all scrollbars as vertical-end-aligned, then transforms to the actual orientation/alignment.
hovered_scrollbar
(field) hovered_scrollbar: boolean
scrollable
(field) scrollable: boolean
size
(field) size: core.view.position
super
(field) super: core.object
Base class providing OOP functionality for Lua. All classes in Pragtical inherit from Object.
v_scrollbar
(field) v_scrollbar: core.scrollbar
Scrollable viewport indicator with draggable thumb. Supports both vertical and horizontal orientation with configurable alignment. Uses a "normal" coordinate system internally that treats all scrollbars as vertical-end-aligned, then transforms to the actual orientation/alignment.
core.view.context
core.view.context:
| 'application'
| 'session'
core.view.cursor
core.view.cursor:
| 'arrow'
| 'ibeam'
| 'sizeh'
| 'sizev'
| 'hand'
core.view.mousebutton
core.view.mousebutton:
| 'left'
| 'right'
core.view.position
x
(field) x: number
y
(field) y: number
core.view.scroll
to
(field) to: core.view.position
x
(field) x: number
y
(field) y: number
core.view.scrollbar
h
(field) h: core.view.thumbtrack
w
(field) w: core.view.thumbtrackwidth
x
(field) x: core.view.thumbtrack
y
(field) y: core.view.thumbtrack
core.view.thumbtrack
thumb
(field) thumb: number
track
(field) track: number
core.view.thumbtrackwidth
thumb
(field) thumb: number
to
(field) to: core.view.thumbtrack
track
(field) track: number
__call
(method) core.object:__call(...any)
-> obj: core.object
Metamethod allowing class to be called like a constructor.
Enables syntax: local obj = MyClass(args) instead of MyClass:new(args)
Automatically creates instance and calls new() with provided arguments.
@return obj — The new instance of the class
__tostring
(method) core.view:__tostring()
-> string
clamp_scroll_position
(method) core.view:clamp_scroll_position()
Clamp scroll position to valid range (0 to max scrollable size). Called automatically by update(). Override get_scrollable_size() to customize.
draw
(method) core.view:draw()
Called every frame to render the view. Override to draw custom content. Typical pattern:
- Call self:draw_background(color)
- Draw your content
- Call self:draw_scrollbar()
draw_background
(method) core.view:draw_background(color: renderer.color)
Draw a solid background color for the entire view. Commonly called at the start of draw() methods.
draw_scrollbar
(method) core.view:draw_scrollbar()
Draw the view's scrollbars. Commonly called at the end of draw() methods.
extend
(method) core.object:extend()
-> cls: core.object
Create a new class that inherits from this one.
Returns a new class with this class as its parent.
Example: local MyClass = Object:extend()
@return cls — The new class table
extends
(method) core.object:extends(T: any)
-> extends: boolean
Check if object inherits from the given type (inheritance-aware).
Use this to check class hierarchy.
Example: view:extends(View) returns true for View and all subclasses
@param T — Class to check inheritance from
@return extends — True if object is T or inherits from T
get_content_bounds
(method) core.view:get_content_bounds()
-> x1: number
2. y1: number
3. x2: number
4. y2: number
Get the content bounds in content coordinates (accounting for scroll).
@return x1 — Left edge
@return y1 — Top edge
@return x2 — Right edge
@return y2 — Bottom edge
get_content_offset
(method) core.view:get_content_offset()
-> x: number
2. y: number
Get the top-left corner of content area in screen coordinates. Accounts for scroll offset. Use for drawing content at correct position.
@return x — Screen x coordinate
@return y — Screen y coordinate
get_h_scrollable_size
(method) core.view:get_h_scrollable_size()
-> width: number
Get the total scrollable width of the view's content. Used by horizontal scrollbar.
@return width — Width in pixels (default: 0, no horizontal scroll)
get_name
(method) core.view:get_name()
-> name: string
Get the name displayed in the view's tab. Override to show document name, file path, etc.
get_scrollable_size
(method) core.view:get_scrollable_size()
-> height: number
Get the total scrollable height of the view's content. Used by scrollbar to calculate thumb size and position.
@return height — Height in pixels (default: infinite)
is
(method) core.object:is(T: any)
-> is_exact: boolean
Check if object is exactly of the given type (no inheritance check).
Use this for strict type matching.
Example: view:is(DocView) returns true only if view is a DocView, not a subclass
@param T — Class to check against
@return is_exact — True if object is exactly type T
is_class_of
(method) core.object:is_class_of(T: any)
-> is_instance: boolean
Check if the given object is exactly an instance of this class.
Inverse of is() - checks if T is an instance of self.
Example: DocView:is_class_of(obj) checks if obj is exactly a DocView
@param T — Object to check
@return is_instance — True if T is exactly an instance of this class
is_extended_by
(method) core.object:is_extended_by(T: any)
-> is_extended: boolean
Check if the given object/class inherits from this class.
Inverse of extends() - checks if T is a subclass of self.
Example: View:is_extended_by(DocView) checks if DocView inherits from View
@param T — Object or class to check
@return is_extended — True if T inherits from this class
move_towards
(method) core.view:move_towards(t: table, k: string|number, dest: number, rate?: number, name?: string)
Smoothly animate a value towards a destination. Use this for animations instead of direct assignment.
@param t — Table containing the value
@param k — Key in table
@param dest — Target value
@param rate — Animation speed (0-1, default 0.5, higher = faster)
@param name — Transition name (for config.disabled_transitions)
new
(method) core.view:new()
Constructor - initializes a new view instance.
Override this in subclasses and always call super constructor first:
MyView.super.new(self)
on_file_dropped
(method) core.view:on_file_dropped(filename: string, x: number, y: number)
-> consumed: boolean
Handle file drop events (drag and drop from OS). Override to handle dropped files. Return true to consume event.
@param filename — Absolute path to dropped file
@param x — Screen x where file was dropped
@param y — Screen y where file was dropped
@return consumed — True to consume event, false to propagate
on_ime_text_editing
(method) core.view:on_ime_text_editing(text: string, start: number, length: number)
Handle IME (Input Method Editor) text composition events. Override for IME support in text editors. Called during composition.
@param text — Composition text being edited
@param start — Start position of selection within composition
@param length — Length of selection within composition
on_mouse_left
(method) core.view:on_mouse_left()
Called when mouse leaves the view's area. Override to clear hover states. Base implementation notifies scrollbars.
on_mouse_moved
(method) core.view:on_mouse_moved(x: number, y: number, dx: number, dy: number)
-> boolean|nil
Handle mouse movement events. Override for hover effects, drag operations, etc. Base implementation handles scrollbar dragging.
@param x — Current screen x coordinate
@param y — Current screen y coordinate
@param dx — Delta x since last move
@param dy — Delta y since last move
on_mouse_pressed
(method) core.view:on_mouse_pressed(button: 'left'|'right', x: number, y: number, clicks: integer)
-> consumed: boolean?
Handle mouse button press events. Override to handle clicks. Return true to consume event and prevent propagation. Base implementation handles scrollbar clicks.
@param x — Screen x coordinate
@param y — Screen y coordinate
@param clicks — Number of consecutive clicks (configurable with config.max_clicks)
@return consumed — True to consume event, false/nil to propagate
button:
| 'left'
| 'right'
on_mouse_released
(method) core.view:on_mouse_released(button: 'left'|'right', x: number, y: number)
Handle mouse button release events. Override to handle click completion. Base implementation handles scrollbar.
@param x — Screen x coordinate
@param y — Screen y coordinate
button:
| 'left'
| 'right'
on_mouse_wheel
(method) core.view:on_mouse_wheel(y: number, x: number)
-> consumed: boolean?
Handle mouse wheel scroll events. Override for custom scroll behavior. Base implementation does nothing.
@param y — Vertical scroll delta; positive is "up"
@param x — Horizontal scroll delta; positive is "left"
@return consumed — True to consume event
on_scale_change
(method) core.view:on_scale_change(new_scale: number, prev_scale: number)
Called when DPI scale changes (display moved, zoom changed, etc.). Override to adjust sizes, padding, or other scale-dependent values.
@param new_scale — New scale factor (e.g., 1.0, 1.5, 2.0)
@param prev_scale — Previous scale factor
on_text_input
(method) core.view:on_text_input(text: string)
Handle text input events (typing, IME composition). Override for text editing. Called after IME composition completes.
@param text — Input text (may be multiple characters)
on_touch_moved
(method) core.view:on_touch_moved(x: number, y: number, dx: number, dy: number, i: number)
Handle touch move events (touchscreen/trackpad gestures). Override for touch-specific behavior. Base implementation handles scrolling.
@param x — Current touch x coordinate
@param y — Current touch y coordinate
@param dx — Delta x since last position
@param dy — Delta y since last position
@param i — Touch finger/pointer index
scrollbar_dragging
(method) core.view:scrollbar_dragging()
-> dragging: boolean
Check if user is currently dragging either scrollbar.
@return dragging — True if scrollbar drag is in progress
scrollbar_hovering
(method) core.view:scrollbar_hovering()
-> hovering: boolean
Check if mouse is hovering over either scrollbar track.
@return hovering — True if mouse is over scrollbar
scrollbar_overlaps_point
(method) core.view:scrollbar_overlaps_point(x: number, y: number)
-> overlaps: boolean
Check if a screen point overlaps either scrollbar. Useful for determining cursor style or handling clicks.
@param x — Screen x coordinate
@param y — Screen y coordinate
@return overlaps — True if point is over vertical or horizontal scrollbar
supports_text_input
(method) core.view:supports_text_input()
-> boolean
Whether this view accepts text input (enables IME). Override and return true for text editors and input fields.
try_close
(method) core.view:try_close(do_close: function)
Called when view is requested to close (e.g., tab close button).
Override to show confirmation dialogs for unsaved changes.
Example: core.command_view:enter("Save?", \{submit = do_close\})
@param do_close — Call this function to actually close the view
update
(method) core.view:update()
Called every frame to update view state. Override to add custom update logic. Always call super.update(self) first. Handles: scale changes, scroll animation, scrollbar updates.
update_scrollbar
(method) core.view:update_scrollbar()
Update scrollbar positions and sizes. Called automatically by update(). Rarely needs to be called manually.