Current section
Files
Jump to
Current section
Files
src/plushie@widget@pointer_area.erl
-module(plushie@widget@pointer_area).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/plushie/widget/pointer_area.gleam").
-export([new/1, cursor/2, on_press/2, on_release/2, on_right_press/2, on_right_release/2, on_middle_press/2, on_middle_release/2, on_double_click/2, on_enter/2, on_exit/2, on_move/2, on_scroll/2, event_rate/2, push/2, extend/2, a11y/2, with_opts/2, build/1]).
-export_type([cursor/0, pointer_area/0, opt/0]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
?MODULEDOC(
" Pointer area widget builder (pointer interaction wrapper).\n"
"\n"
" Captures all pointer input (mouse, touch, pen) within a region.\n"
).
-type cursor() :: pointer |
grab |
grabbing |
crosshair |
cursor_text |
cursor_move |
not_allowed |
progress |
wait |
help |
cell |
copy |
cursor_alias |
no_drop |
all_scroll |
zoom_in |
zoom_out |
context_menu |
resizing_horizontally |
resizing_vertically |
resizing_diagonally_up |
resizing_diagonally_down |
resizing_column |
resizing_row.
-opaque pointer_area() :: {pointer_area,
binary(),
list(plushie@node:node_()),
gleam@option:option(cursor()),
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(boolean()),
gleam@option:option(boolean()),
gleam@option:option(boolean()),
gleam@option:option(boolean()),
gleam@option:option(boolean()),
gleam@option:option(boolean()),
gleam@option:option(boolean()),
gleam@option:option(boolean()),
gleam@option:option(boolean()),
gleam@option:option(integer()),
gleam@option:option(plushie@prop@a11y:a11y())}.
-type opt() :: {cursor, cursor()} |
{on_press, binary()} |
{on_release, binary()} |
{on_right_press, boolean()} |
{on_right_release, boolean()} |
{on_middle_press, boolean()} |
{on_middle_release, boolean()} |
{on_double_click, boolean()} |
{on_enter, boolean()} |
{on_exit, boolean()} |
{on_move, boolean()} |
{on_scroll, boolean()} |
{event_rate, integer()} |
{a11y, plushie@prop@a11y:a11y()}.
-file("src/plushie/widget/pointer_area.gleam", 61).
?DOC(" Create a new mouse area builder.\n").
-spec new(binary()) -> pointer_area().
new(Id) ->
{pointer_area,
Id,
[],
none,
none,
none,
none,
none,
none,
none,
none,
none,
none,
none,
none,
none,
none}.
-file("src/plushie/widget/pointer_area.gleam", 83).
?DOC(" Set the mouse cursor.\n").
-spec cursor(pointer_area(), cursor()) -> pointer_area().
cursor(Pa, C) ->
{pointer_area,
erlang:element(2, Pa),
erlang:element(3, Pa),
{some, C},
erlang:element(5, Pa),
erlang:element(6, Pa),
erlang:element(7, Pa),
erlang:element(8, Pa),
erlang:element(9, Pa),
erlang:element(10, Pa),
erlang:element(11, Pa),
erlang:element(12, Pa),
erlang:element(13, Pa),
erlang:element(14, Pa),
erlang:element(15, Pa),
erlang:element(16, Pa),
erlang:element(17, Pa)}.
-file("src/plushie/widget/pointer_area.gleam", 88).
?DOC(" Set the press event tag.\n").
-spec on_press(pointer_area(), binary()) -> pointer_area().
on_press(Pa, Tag) ->
{pointer_area,
erlang:element(2, Pa),
erlang:element(3, Pa),
erlang:element(4, Pa),
{some, Tag},
erlang:element(6, Pa),
erlang:element(7, Pa),
erlang:element(8, Pa),
erlang:element(9, Pa),
erlang:element(10, Pa),
erlang:element(11, Pa),
erlang:element(12, Pa),
erlang:element(13, Pa),
erlang:element(14, Pa),
erlang:element(15, Pa),
erlang:element(16, Pa),
erlang:element(17, Pa)}.
-file("src/plushie/widget/pointer_area.gleam", 93).
?DOC(" Set the release event tag.\n").
-spec on_release(pointer_area(), binary()) -> pointer_area().
on_release(Pa, Tag) ->
{pointer_area,
erlang:element(2, Pa),
erlang:element(3, Pa),
erlang:element(4, Pa),
erlang:element(5, Pa),
{some, Tag},
erlang:element(7, Pa),
erlang:element(8, Pa),
erlang:element(9, Pa),
erlang:element(10, Pa),
erlang:element(11, Pa),
erlang:element(12, Pa),
erlang:element(13, Pa),
erlang:element(14, Pa),
erlang:element(15, Pa),
erlang:element(16, Pa),
erlang:element(17, Pa)}.
-file("src/plushie/widget/pointer_area.gleam", 98).
?DOC(" Enable the right-click press event.\n").
-spec on_right_press(pointer_area(), boolean()) -> pointer_area().
on_right_press(Pa, Enabled) ->
{pointer_area,
erlang:element(2, Pa),
erlang:element(3, Pa),
erlang:element(4, Pa),
erlang:element(5, Pa),
erlang:element(6, Pa),
{some, Enabled},
erlang:element(8, Pa),
erlang:element(9, Pa),
erlang:element(10, Pa),
erlang:element(11, Pa),
erlang:element(12, Pa),
erlang:element(13, Pa),
erlang:element(14, Pa),
erlang:element(15, Pa),
erlang:element(16, Pa),
erlang:element(17, Pa)}.
-file("src/plushie/widget/pointer_area.gleam", 103).
?DOC(" Enable the right-click release event.\n").
-spec on_right_release(pointer_area(), boolean()) -> pointer_area().
on_right_release(Pa, Enabled) ->
{pointer_area,
erlang:element(2, Pa),
erlang:element(3, Pa),
erlang:element(4, Pa),
erlang:element(5, Pa),
erlang:element(6, Pa),
erlang:element(7, Pa),
{some, Enabled},
erlang:element(9, Pa),
erlang:element(10, Pa),
erlang:element(11, Pa),
erlang:element(12, Pa),
erlang:element(13, Pa),
erlang:element(14, Pa),
erlang:element(15, Pa),
erlang:element(16, Pa),
erlang:element(17, Pa)}.
-file("src/plushie/widget/pointer_area.gleam", 108).
?DOC(" Enable the middle-click press event.\n").
-spec on_middle_press(pointer_area(), boolean()) -> pointer_area().
on_middle_press(Pa, Enabled) ->
{pointer_area,
erlang:element(2, Pa),
erlang:element(3, Pa),
erlang:element(4, Pa),
erlang:element(5, Pa),
erlang:element(6, Pa),
erlang:element(7, Pa),
erlang:element(8, Pa),
{some, Enabled},
erlang:element(10, Pa),
erlang:element(11, Pa),
erlang:element(12, Pa),
erlang:element(13, Pa),
erlang:element(14, Pa),
erlang:element(15, Pa),
erlang:element(16, Pa),
erlang:element(17, Pa)}.
-file("src/plushie/widget/pointer_area.gleam", 113).
?DOC(" Enable the middle-click release event.\n").
-spec on_middle_release(pointer_area(), boolean()) -> pointer_area().
on_middle_release(Pa, Enabled) ->
{pointer_area,
erlang:element(2, Pa),
erlang:element(3, Pa),
erlang:element(4, Pa),
erlang:element(5, Pa),
erlang:element(6, Pa),
erlang:element(7, Pa),
erlang:element(8, Pa),
erlang:element(9, Pa),
{some, Enabled},
erlang:element(11, Pa),
erlang:element(12, Pa),
erlang:element(13, Pa),
erlang:element(14, Pa),
erlang:element(15, Pa),
erlang:element(16, Pa),
erlang:element(17, Pa)}.
-file("src/plushie/widget/pointer_area.gleam", 118).
?DOC(" Enable the double-click event.\n").
-spec on_double_click(pointer_area(), boolean()) -> pointer_area().
on_double_click(Pa, Enabled) ->
{pointer_area,
erlang:element(2, Pa),
erlang:element(3, Pa),
erlang:element(4, Pa),
erlang:element(5, Pa),
erlang:element(6, Pa),
erlang:element(7, Pa),
erlang:element(8, Pa),
erlang:element(9, Pa),
erlang:element(10, Pa),
{some, Enabled},
erlang:element(12, Pa),
erlang:element(13, Pa),
erlang:element(14, Pa),
erlang:element(15, Pa),
erlang:element(16, Pa),
erlang:element(17, Pa)}.
-file("src/plushie/widget/pointer_area.gleam", 123).
?DOC(" Enable the mouse-enter event.\n").
-spec on_enter(pointer_area(), boolean()) -> pointer_area().
on_enter(Pa, Enabled) ->
{pointer_area,
erlang:element(2, Pa),
erlang:element(3, Pa),
erlang:element(4, Pa),
erlang:element(5, Pa),
erlang:element(6, Pa),
erlang:element(7, Pa),
erlang:element(8, Pa),
erlang:element(9, Pa),
erlang:element(10, Pa),
erlang:element(11, Pa),
{some, Enabled},
erlang:element(13, Pa),
erlang:element(14, Pa),
erlang:element(15, Pa),
erlang:element(16, Pa),
erlang:element(17, Pa)}.
-file("src/plushie/widget/pointer_area.gleam", 128).
?DOC(" Enable the mouse-exit event.\n").
-spec on_exit(pointer_area(), boolean()) -> pointer_area().
on_exit(Pa, Enabled) ->
{pointer_area,
erlang:element(2, Pa),
erlang:element(3, Pa),
erlang:element(4, Pa),
erlang:element(5, Pa),
erlang:element(6, Pa),
erlang:element(7, Pa),
erlang:element(8, Pa),
erlang:element(9, Pa),
erlang:element(10, Pa),
erlang:element(11, Pa),
erlang:element(12, Pa),
{some, Enabled},
erlang:element(14, Pa),
erlang:element(15, Pa),
erlang:element(16, Pa),
erlang:element(17, Pa)}.
-file("src/plushie/widget/pointer_area.gleam", 133).
?DOC(" Enable the move event.\n").
-spec on_move(pointer_area(), boolean()) -> pointer_area().
on_move(Pa, Enabled) ->
{pointer_area,
erlang:element(2, Pa),
erlang:element(3, Pa),
erlang:element(4, Pa),
erlang:element(5, Pa),
erlang:element(6, Pa),
erlang:element(7, Pa),
erlang:element(8, Pa),
erlang:element(9, Pa),
erlang:element(10, Pa),
erlang:element(11, Pa),
erlang:element(12, Pa),
erlang:element(13, Pa),
{some, Enabled},
erlang:element(15, Pa),
erlang:element(16, Pa),
erlang:element(17, Pa)}.
-file("src/plushie/widget/pointer_area.gleam", 138).
?DOC(" Enable the scroll event.\n").
-spec on_scroll(pointer_area(), boolean()) -> pointer_area().
on_scroll(Pa, Enabled) ->
{pointer_area,
erlang:element(2, Pa),
erlang:element(3, Pa),
erlang:element(4, Pa),
erlang:element(5, Pa),
erlang:element(6, Pa),
erlang:element(7, Pa),
erlang:element(8, Pa),
erlang:element(9, Pa),
erlang:element(10, Pa),
erlang:element(11, Pa),
erlang:element(12, Pa),
erlang:element(13, Pa),
erlang:element(14, Pa),
{some, Enabled},
erlang:element(16, Pa),
erlang:element(17, Pa)}.
-file("src/plushie/widget/pointer_area.gleam", 143).
?DOC(" Set the event throttle rate in milliseconds.\n").
-spec event_rate(pointer_area(), integer()) -> pointer_area().
event_rate(Pa, Rate) ->
{pointer_area,
erlang:element(2, Pa),
erlang:element(3, Pa),
erlang:element(4, Pa),
erlang:element(5, Pa),
erlang:element(6, Pa),
erlang:element(7, Pa),
erlang:element(8, Pa),
erlang:element(9, Pa),
erlang:element(10, Pa),
erlang:element(11, Pa),
erlang:element(12, Pa),
erlang:element(13, Pa),
erlang:element(14, Pa),
erlang:element(15, Pa),
{some, Rate},
erlang:element(17, Pa)}.
-file("src/plushie/widget/pointer_area.gleam", 148).
?DOC(" Add a child node.\n").
-spec push(pointer_area(), plushie@node:node_()) -> pointer_area().
push(Pa, Child) ->
{pointer_area,
erlang:element(2, Pa),
lists:append(erlang:element(3, Pa), [Child]),
erlang:element(4, Pa),
erlang:element(5, Pa),
erlang:element(6, Pa),
erlang:element(7, Pa),
erlang:element(8, Pa),
erlang:element(9, Pa),
erlang:element(10, Pa),
erlang:element(11, Pa),
erlang:element(12, Pa),
erlang:element(13, Pa),
erlang:element(14, Pa),
erlang:element(15, Pa),
erlang:element(16, Pa),
erlang:element(17, Pa)}.
-file("src/plushie/widget/pointer_area.gleam", 153).
?DOC(" Add multiple child nodes.\n").
-spec extend(pointer_area(), list(plushie@node:node_())) -> pointer_area().
extend(Pa, Children) ->
{pointer_area,
erlang:element(2, Pa),
lists:append(erlang:element(3, Pa), Children),
erlang:element(4, Pa),
erlang:element(5, Pa),
erlang:element(6, Pa),
erlang:element(7, Pa),
erlang:element(8, Pa),
erlang:element(9, Pa),
erlang:element(10, Pa),
erlang:element(11, Pa),
erlang:element(12, Pa),
erlang:element(13, Pa),
erlang:element(14, Pa),
erlang:element(15, Pa),
erlang:element(16, Pa),
erlang:element(17, Pa)}.
-file("src/plushie/widget/pointer_area.gleam", 158).
?DOC(" Set accessibility properties for this widget.\n").
-spec a11y(pointer_area(), plushie@prop@a11y:a11y()) -> pointer_area().
a11y(Pa, A) ->
{pointer_area,
erlang:element(2, Pa),
erlang:element(3, Pa),
erlang:element(4, Pa),
erlang:element(5, Pa),
erlang:element(6, Pa),
erlang:element(7, Pa),
erlang:element(8, Pa),
erlang:element(9, Pa),
erlang:element(10, Pa),
erlang:element(11, Pa),
erlang:element(12, Pa),
erlang:element(13, Pa),
erlang:element(14, Pa),
erlang:element(15, Pa),
erlang:element(16, Pa),
{some, A}}.
-file("src/plushie/widget/pointer_area.gleam", 181).
?DOC(" Apply a list of options to a pointer area builder.\n").
-spec with_opts(pointer_area(), list(opt())) -> pointer_area().
with_opts(Pa, Opts) ->
gleam@list:fold(Opts, Pa, fun(P, Opt) -> case Opt of
{cursor, C} ->
cursor(P, C);
{on_press, Tag} ->
on_press(P, Tag);
{on_release, Tag@1} ->
on_release(P, Tag@1);
{on_right_press, V} ->
on_right_press(P, V);
{on_right_release, V@1} ->
on_right_release(P, V@1);
{on_middle_press, V@2} ->
on_middle_press(P, V@2);
{on_middle_release, V@3} ->
on_middle_release(P, V@3);
{on_double_click, V@4} ->
on_double_click(P, V@4);
{on_enter, V@5} ->
on_enter(P, V@5);
{on_exit, V@6} ->
on_exit(P, V@6);
{on_move, V@7} ->
on_move(P, V@7);
{on_scroll, V@8} ->
on_scroll(P, V@8);
{event_rate, R} ->
event_rate(P, R);
{a11y, A} ->
a11y(P, A)
end end).
-file("src/plushie/widget/pointer_area.gleam", 202).
-spec cursor_to_string(cursor()) -> binary().
cursor_to_string(C) ->
case C of
pointer ->
<<"pointer"/utf8>>;
grab ->
<<"grab"/utf8>>;
grabbing ->
<<"grabbing"/utf8>>;
crosshair ->
<<"crosshair"/utf8>>;
cursor_text ->
<<"text"/utf8>>;
cursor_move ->
<<"move"/utf8>>;
not_allowed ->
<<"not_allowed"/utf8>>;
progress ->
<<"progress"/utf8>>;
wait ->
<<"wait"/utf8>>;
help ->
<<"help"/utf8>>;
cell ->
<<"cell"/utf8>>;
copy ->
<<"copy"/utf8>>;
cursor_alias ->
<<"alias"/utf8>>;
no_drop ->
<<"no_drop"/utf8>>;
all_scroll ->
<<"all_scroll"/utf8>>;
zoom_in ->
<<"zoom_in"/utf8>>;
zoom_out ->
<<"zoom_out"/utf8>>;
context_menu ->
<<"context_menu"/utf8>>;
resizing_horizontally ->
<<"resizing_horizontally"/utf8>>;
resizing_vertically ->
<<"resizing_vertically"/utf8>>;
resizing_diagonally_up ->
<<"resizing_diagonally_up"/utf8>>;
resizing_diagonally_down ->
<<"resizing_diagonally_down"/utf8>>;
resizing_column ->
<<"resizing_column"/utf8>>;
resizing_row ->
<<"resizing_row"/utf8>>
end.
-file("src/plushie/widget/pointer_area.gleam", 232).
?DOC(" Build the pointer area into a renderable Node.\n").
-spec build(pointer_area()) -> plushie@node:node_().
build(Pa) ->
plushie@widget@build:validate_single_child(
erlang:element(2, Pa),
<<"pointer_area"/utf8>>,
erlang:element(3, Pa)
),
Props = begin
_pipe = maps:new(),
_pipe@1 = plushie@widget@build:put_optional(
_pipe,
<<"cursor"/utf8>>,
erlang:element(4, Pa),
fun(C) -> {string_val, cursor_to_string(C)} end
),
_pipe@2 = plushie@widget@build:put_optional_string(
_pipe@1,
<<"on_press"/utf8>>,
erlang:element(5, Pa)
),
_pipe@3 = plushie@widget@build:put_optional_string(
_pipe@2,
<<"on_release"/utf8>>,
erlang:element(6, Pa)
),
_pipe@4 = plushie@widget@build:put_optional_bool(
_pipe@3,
<<"on_right_press"/utf8>>,
erlang:element(7, Pa)
),
_pipe@5 = plushie@widget@build:put_optional_bool(
_pipe@4,
<<"on_right_release"/utf8>>,
erlang:element(8, Pa)
),
_pipe@6 = plushie@widget@build:put_optional_bool(
_pipe@5,
<<"on_middle_press"/utf8>>,
erlang:element(9, Pa)
),
_pipe@7 = plushie@widget@build:put_optional_bool(
_pipe@6,
<<"on_middle_release"/utf8>>,
erlang:element(10, Pa)
),
_pipe@8 = plushie@widget@build:put_optional_bool(
_pipe@7,
<<"on_double_click"/utf8>>,
erlang:element(11, Pa)
),
_pipe@9 = plushie@widget@build:put_optional_bool(
_pipe@8,
<<"on_enter"/utf8>>,
erlang:element(12, Pa)
),
_pipe@10 = plushie@widget@build:put_optional_bool(
_pipe@9,
<<"on_exit"/utf8>>,
erlang:element(13, Pa)
),
_pipe@11 = plushie@widget@build:put_optional_bool(
_pipe@10,
<<"on_move"/utf8>>,
erlang:element(14, Pa)
),
_pipe@12 = plushie@widget@build:put_optional_bool(
_pipe@11,
<<"on_scroll"/utf8>>,
erlang:element(15, Pa)
),
_pipe@13 = plushie@widget@build:put_optional_int(
_pipe@12,
<<"event_rate"/utf8>>,
erlang:element(16, Pa)
),
plushie@widget@build:put_optional(
_pipe@13,
<<"a11y"/utf8>>,
erlang:element(17, Pa),
fun plushie@prop@a11y:to_prop_value/1
)
end,
{node,
erlang:element(2, Pa),
<<"pointer_area"/utf8>>,
Props,
erlang:element(3, Pa),
maps:new()}.