86 return {
x + amount,
y + amount,
87 std::max(0.0f,
width - 2 * amount),
88 std::max(0.0f,
height - 2 * amount)};
93 std::max(0.0f,
width - 2 *
h),
94 std::max(0.0f,
height - 2 *
v)};
137 if (amount <= 0)
return {
x,
y,
width, 0};
138 const float take = std::min(amount,
height);
146 const float take = std::min(amount,
height);
151 if (amount <= 0)
return {
x,
y, 0,
height};
152 const float take = std::min(amount,
width);
160 const float take = std::min(amount,
width);
167 if (
is_empty() ||
o.is_empty())
return false;
173 const float ix = std::max(
x,
o.x);
174 const float iy = std::max(
y,
o.y);
175 const float ir = std::min(
right(),
o.right());
176 const float ib = std::min(
bottom(),
o.bottom());
177 if (ir <= ix || ib <= iy)
return {};
178 return {ix, iy, ir - ix, ib - iy};
186 if (
o.is_empty())
return *
this;
187 const float ux = std::min(
x,
o.x);
188 const float uy = std::min(
y,
o.y);
189 const float ur = std::max(
right(),
o.right());
190 const float ub = std::max(
bottom(),
o.bottom());
191 return {ux, uy, ur - ux, ub - uy};
237 return {
x + dx,
y + dy, std::max(0,
width - 2 * dx), std::max(0,
height - 2 * dy)};
265 if (amount <= 0)
return {
x,
y,
width, 0};
266 const int take = std::min(amount,
height);
274 const int take = std::min(amount,
height);
279 if (amount <= 0)
return {
x,
y, 0,
height};
280 const int take = std::min(amount,
width);
288 const int take = std::min(amount,
width);
294 if (
is_empty() ||
o.is_empty())
return false;
299 const int ix = std::max(
x,
o.x);
300 const int iy = std::max(
y,
o.y);
301 const int ir = std::min(
right(),
o.right());
302 const int ib = std::min(
bottom(),
o.bottom());
303 if (ir <= ix || ib <= iy)
return {};
304 return {ix, iy, ir - ix, ib - iy};
309 if (
o.is_empty())
return *
this;
310 const int ux = std::min(
x,
o.x);
311 const int uy = std::min(
y,
o.y);
312 const int ur = std::max(
right(),
o.right());
313 const int ub = std::max(
bottom(),
o.bottom());
314 return {ux, uy, ur - ux, ub - uy};
319 return {
static_cast<float>(
x),
static_cast<float>(
y),
320 static_cast<float>(
width),
static_cast<float>(
height)};
332 const int l =
static_cast<int>(std::lround(
x));
333 const int t =
static_cast<int>(std::lround(
y));
334 const int r =
static_cast<int>(std::lround(
right()));
335 const int b =
static_cast<int>(std::lround(
bottom()));
336 return {
l,
t,
r -
l,
b -
t};
340 const int l =
static_cast<int>(std::floor(
x));
341 const int t =
static_cast<int>(std::floor(
y));
342 const int r =
static_cast<int>(std::ceil(
right()));
343 const int b =
static_cast<int>(std::ceil(
bottom()));
344 return {
l,
t,
r -
l,
b -
t};
406 float resolve(
float parent_size,
float viewport_w,
float viewport_h,
407 float dpi_scale = 1.0f)
const {
421 auto trim = [](std::string
s) {
422 while (!
s.empty() && std::isspace(
static_cast<unsigned char>(
s.front())))
s.erase(0, 1);
423 while (!
s.empty() && std::isspace(
static_cast<unsigned char>(
s.back())))
s.pop_back();
427 const auto input = trim(str);
431 try {
d.value = std::stof(input, &pos); }
catch (...) {
return d; }
432 auto suffix = trim(input.substr(pos));
565 float viewport_w,
float viewport_h,
float dpi = 1.0f) {
691 static std::vector<GridTrack>
parse_template(
const std::string& tmpl,
int depth = 0);
Hover-cursor tracking for platform window hosts.
Definition fwd.hpp:27
FlexJustify
Justify content modes (main axis space distribution).
Definition geometry.hpp:373
@ space_evenly
Equal space between items AND at edges.
Definition geometry.hpp:379
@ end_
Pack items to end.
Definition geometry.hpp:376
@ start
Pack items to start (default).
Definition geometry.hpp:374
FlexDirection
Definition geometry.hpp:353
@ column
Definition geometry.hpp:353
@ column_reverse
Definition geometry.hpp:353
@ row_reverse
Definition geometry.hpp:353
@ row
Definition geometry.hpp:353
LayoutMode
Definition geometry.hpp:348
@ flex
Definition geometry.hpp:348
@ grid
Definition geometry.hpp:348
FlexWrap
Flex-wrap tri-state.
Definition geometry.hpp:358
@ no_wrap
Definition geometry.hpp:358
@ wrap_reverse
Definition geometry.hpp:358
@ wrap
Definition geometry.hpp:358
pulp::canvas::AffineTransform AffineTransform
The 2D affine transform value type.
Definition geometry.hpp:18
DimensionUnit
Definition geometry.hpp:392
@ vh
Percentage of viewport height.
Definition geometry.hpp:396
@ px
Absolute pixels.
Definition geometry.hpp:393
@ percent
Percentage of parent dimension.
Definition geometry.hpp:394
@ vw
Percentage of viewport width.
Definition geometry.hpp:395
@ vmin
Percentage of min(viewport width, height).
Definition geometry.hpp:397
@ vmax
Percentage of max(viewport width, height).
Definition geometry.hpp:398
@ auto_
Auto-sized (let layout decide).
Definition geometry.hpp:399
FlexOverflow
Overflow behavior.
Definition geometry.hpp:383
@ scroll
Content clipped, scrollbar shown when needed.
Definition geometry.hpp:386
@ visible
Content renders beyond bounds (default for views).
Definition geometry.hpp:384
@ hidden
Content clipped to bounds.
Definition geometry.hpp:385
@ s
Definition input_events.hpp:41
@ h
Definition input_events.hpp:39
@ l
Definition input_events.hpp:40
@ r
Definition input_events.hpp:41
@ d
Definition input_events.hpp:39
@ p
Definition input_events.hpp:40
@ b
Definition input_events.hpp:39
@ v
Definition input_events.hpp:41
@ o
Definition input_events.hpp:40
@ t
Definition input_events.hpp:41
@ w
Definition input_events.hpp:41
@ column
Definition design_ir.hpp:53
@ row
Definition design_ir.hpp:53
FlexAlign
Definition geometry.hpp:370
@ stretch
Definition geometry.hpp:370
@ end
Definition geometry.hpp:370
@ auto_
Definition geometry.hpp:370
@ baseline
Definition geometry.hpp:370
@ start
Definition geometry.hpp:370
BoxSizing
CSS box-sizing.
Definition geometry.hpp:366
@ border_box
Definition geometry.hpp:366
@ content_box
Definition geometry.hpp:366
@ stretch
Definition design_ir.hpp:57
@ space_around
Definition design_ir.hpp:57
@ center
Definition design_ir.hpp:57
@ space_between
Definition design_ir.hpp:57
Definition geometry.hpp:402
float resolve(float parent_size, float viewport_w, float viewport_h, float dpi_scale=1.0f) const
Definition geometry.hpp:406
DimensionUnit unit
Definition geometry.hpp:404
static Dimension parse(const std::string &str)
Definition geometry.hpp:420
float value
Definition geometry.hpp:403
Definition geometry.hpp:445
float flex_grow
0 = fixed size, >0 = share remaining space
Definition geometry.hpp:487
float preferred_width
Definition geometry.hpp:493
Dimension dim_padding_right
Definition geometry.hpp:526
Dimension dim_padding_start
Definition geometry.hpp:546
Dimension dim_margin_right
Definition geometry.hpp:522
float padding_top
Per-side padding (-1 = use uniform padding).
Definition geometry.hpp:476
Dimension dim_width
Viewport-relative dimension overrides.
Definition geometry.hpp:507
WritingDirection
Node writing direction.
Definition geometry.hpp:559
@ rtl
Definition geometry.hpp:559
@ inherit
Definition geometry.hpp:559
@ ltr
Definition geometry.hpp:559
Dimension dim_height
Definition geometry.hpp:508
FlexAlign align_content
align-content is the CSS / Yoga multi-line flex cross-axis distribution control.
Definition geometry.hpp:459
float row_gap
Gap between rows (-1 = use gap).
Definition geometry.hpp:472
float margin
Uniform margin around this view.
Definition geometry.hpp:481
Dimension dim_margin_top
Per-edge margin / padding accept percent strings (and auto for margin only).
Definition geometry.hpp:521
FlexJustify justify_content
Definition geometry.hpp:469
AlignContentSpace
True when align_content was set to one of the space-* values (space-between / space-around / space-ev...
Definition geometry.hpp:466
@ none
Definition geometry.hpp:466
@ space_evenly
Definition geometry.hpp:466
@ space_around
Definition geometry.hpp:466
@ space_between
Definition geometry.hpp:466
float preferred_height
Definition geometry.hpp:494
FlexAlign align_items
Definition geometry.hpp:447
Dimension dim_padding_top
Definition geometry.hpp:525
Dimension dim_end
Definition geometry.hpp:549
float margin_r() const
Definition geometry.hpp:603
float min_width
Definition geometry.hpp:491
Dimension dim_margin_bottom
Definition geometry.hpp:523
FlexDirection direction
Definition geometry.hpp:446
float basis_or_preferred(bool is_row) const
Definition geometry.hpp:617
Dimension dim_min_width
Definition geometry.hpp:509
FlexAlign align_self
Override parent's align_items for this child.
Definition geometry.hpp:448
float margin_b() const
Definition geometry.hpp:604
float padding
Definition geometry.hpp:475
BoxSizing box_sizing
CSS box-sizing.
Definition geometry.hpp:587
std::optional< float > aspect_ratio
Aspect ratio (width / height).
Definition geometry.hpp:599
float gap
Shorthand for both row_gap and column_gap.
Definition geometry.hpp:471
Dimension dim_max_width
Definition geometry.hpp:511
AlignContentSpace align_content_space
Definition geometry.hpp:467
float margin_left
Definition geometry.hpp:485
float padding_left
Definition geometry.hpp:479
float column_gap
Gap between columns (-1 = use gap).
Definition geometry.hpp:473
float margin_l() const
Definition geometry.hpp:605
Dimension dim_padding_bottom
Definition geometry.hpp:527
Dimension dim_max_height
Definition geometry.hpp:512
float padding_bottom
Definition geometry.hpp:478
float flex_basis
Initial main size before grow/shrink (-1 = use preferred).
Definition geometry.hpp:489
Dimension dim_margin_start
Yoga logical-edge fan-out.
Definition geometry.hpp:544
FlexWrap flex_wrap
Tri-state wrap.
Definition geometry.hpp:581
Dimension dim_start
Definition geometry.hpp:548
Dimension dim_margin_left
Definition geometry.hpp:524
float margin_bottom
Definition geometry.hpp:484
int order
Layout order (lower values first, default 0).
Definition geometry.hpp:588
float flex_shrink
1 = shrink proportionally if overflow
Definition geometry.hpp:488
float min_height
Definition geometry.hpp:492
void resolve_dimensions(float parent_w, float parent_h, float viewport_w, float viewport_h, float dpi=1.0f)
Resolve viewport-relative dimensions and apply to float fields.
Definition geometry.hpp:564
WritingDirection writing_direction
Definition geometry.hpp:560
float margin_top
Per-side margin (-1 = use uniform margin).
Definition geometry.hpp:482
Dimension dim_padding_left
Definition geometry.hpp:528
float effective_gap(FlexDirection dir) const
Definition geometry.hpp:610
float max_height
0 = no maximum
Definition geometry.hpp:496
float max_width
0 = no maximum
Definition geometry.hpp:495
Dimension dim_flex_basis
Definition geometry.hpp:513
Dimension dim_margin_end
Definition geometry.hpp:545
float padding_right
Definition geometry.hpp:477
float margin_t() const
Definition geometry.hpp:602
Dimension dim_padding_end
Definition geometry.hpp:547
Dimension dim_min_height
Definition geometry.hpp:510
float margin_right
Definition geometry.hpp:483
Named-area grid.
Definition geometry.hpp:670
std::string name
Definition geometry.hpp:671
int col_end
Definition geometry.hpp:673
int row_end
Definition geometry.hpp:675
int row_start
Definition geometry.hpp:674
int col_start
Definition geometry.hpp:672
Grid layout properties (CSS Grid Level 1 subset).
Definition geometry.hpp:642
std::vector< NamedArea > template_areas
Definition geometry.hpp:677
std::string grid_area_name
grid-area: header references the parent's NamedArea by name.
Definition geometry.hpp:687
std::vector< GridTrack > template_rows
grid-template-rows
Definition geometry.hpp:644
AutoFlow auto_flow
Definition geometry.hpp:659
int grid_row_start
Definition geometry.hpp:682
static std::vector< GridTrack > parse_template(const std::string &tmpl, int depth=0)
Parse "1fr 2fr auto 100px" into track list.
std::vector< GridTrack > template_columns
grid-template-columns
Definition geometry.hpp:643
static AutoFlow parse_auto_flow(const std::string &s)
Parse the auto-flow keyword string. Unrecognized → row.
Definition geometry.hpp:702
float column_gap
grid-column-gap
Definition geometry.hpp:661
GridTrack auto_columns
Implicit-track sizing for auto-placed items that overflow the explicit grid.
Definition geometry.hpp:649
int grid_column_end
0 = span 1
Definition geometry.hpp:681
int grid_column_start
0 = auto placement
Definition geometry.hpp:680
int grid_row_end
Definition geometry.hpp:683
AutoFlow
Auto-flow direction.
Definition geometry.hpp:653
@ column
fill columns top-to-bottom then wrap
Definition geometry.hpp:655
@ column_dense
column + dense-packing
Definition geometry.hpp:657
@ row_dense
row + dense-packing (fill earlier holes)
Definition geometry.hpp:656
@ row
default; fill rows left-to-right then wrap
Definition geometry.hpp:654
GridTrack auto_rows
Definition geometry.hpp:650
static std::vector< NamedArea > parse_template_areas(const std::string &css)
Parse the CSS named-area grid string (e.g.
float row_gap
grid-row-gap
Definition geometry.hpp:662
Grid track size: fixed px, fractional (fr), or auto.
Definition geometry.hpp:624
static GridTrack auto_size()
Definition geometry.hpp:631
Type type
Definition geometry.hpp:626
static GridTrack fixed_px(float px)
Definition geometry.hpp:629
Type
Definition geometry.hpp:625
@ fr
Definition geometry.hpp:625
@ fixed
Definition geometry.hpp:625
@ auto_
Definition geometry.hpp:625
float value
px for fixed, fraction for fr, ignored for auto
Definition geometry.hpp:627
static GridTrack fractional(float fr)
Definition geometry.hpp:630
Axis-aligned rectangle in DISCRETE (integer) coordinates.
Definition geometry.hpp:213
constexpr IntRect with_size(int w, int h) const
Definition geometry.hpp:250
constexpr bool operator!=(const IntRect &r) const
Definition geometry.hpp:326
constexpr IntRect with_y(int v) const
Definition geometry.hpp:247
int height
Definition geometry.hpp:214
IntRect remove_from_top(int amount)
Definition geometry.hpp:264
int y
Definition geometry.hpp:214
IntRect remove_from_bottom(int amount)
Definition geometry.hpp:272
IntRect expanded(int dx, int dy) const
Definition geometry.hpp:240
int x
Definition geometry.hpp:214
constexpr IntRect translated(int dx, int dy) const
Definition geometry.hpp:242
constexpr bool contains(int px, int py) const
Definition geometry.hpp:226
constexpr int center_y() const
Definition geometry.hpp:222
constexpr bool intersects(const IntRect &o) const
Definition geometry.hpp:293
int width
Definition geometry.hpp:214
IntRect reduced(int d) const
Definition geometry.hpp:233
constexpr IntRect with_height(int v) const
Definition geometry.hpp:249
IntRect expanded(int d) const
Definition geometry.hpp:239
constexpr Rect to_float() const
Widening conversion — always exact.
Definition geometry.hpp:318
IntRect remove_from_right(int amount)
Definition geometry.hpp:286
constexpr int bottom() const
Definition geometry.hpp:217
IntRect intersection(const IntRect &o) const
Definition geometry.hpp:298
constexpr int center_x() const
Integer center.
Definition geometry.hpp:221
constexpr int right() const
Definition geometry.hpp:216
constexpr IntRect with_size_keeping_center(int w, int h) const
Resize about the center, in integer arithmetic.
Definition geometry.hpp:258
IntRect reduced(int dx, int dy) const
Definition geometry.hpp:236
constexpr bool is_empty() const
Definition geometry.hpp:224
constexpr bool operator==(const IntRect &r) const
Definition geometry.hpp:323
constexpr IntRect with_width(int v) const
Definition geometry.hpp:248
constexpr IntRect with_x(int v) const
Definition geometry.hpp:246
IntRect remove_from_left(int amount)
Definition geometry.hpp:278
constexpr bool contains(const IntRect &r) const
Definition geometry.hpp:229
constexpr IntRect with_position(int nx, int ny) const
Definition geometry.hpp:251
IntRect union_with(const IntRect &o) const
Definition geometry.hpp:307
Definition geometry.hpp:20
Point operator+(const Point &p) const
Definition geometry.hpp:23
float x
Definition geometry.hpp:21
bool operator==(const Point &p) const
Definition geometry.hpp:25
Point operator-(const Point &p) const
Definition geometry.hpp:24
float y
Definition geometry.hpp:21
Axis-aligned rectangle in continuous (float) coordinates.
Definition geometry.hpp:52
constexpr Rect with_height(float v) const
Definition geometry.hpp:112
Point origin() const
Definition geometry.hpp:57
Rect expanded(float d) const
Grow by d on every side.
Definition geometry.hpp:102
constexpr bool is_empty() const
Definition geometry.hpp:83
IntRect to_nearest_int() const
Round each edge to the nearest integer.
Definition geometry.hpp:329
Rect reduced(float dx, float dy) const
Definition geometry.hpp:100
constexpr Rect with_position(float nx, float ny) const
Definition geometry.hpp:114
Rect inset(float h, float v) const
Definition geometry.hpp:91
Size size() const
Definition geometry.hpp:58
float x
Definition geometry.hpp:53
constexpr Rect with_size(float w, float h) const
Definition geometry.hpp:113
Rect remove_from_left(float amount)
Definition geometry.hpp:150
constexpr bool intersects(const Rect &o) const
Definition geometry.hpp:166
Rect remove_from_right(float amount)
Definition geometry.hpp:158
constexpr Rect with_size_keeping_center(float w, float h) const
Resize about the center — the center stays put and the edges move.
Definition geometry.hpp:119
constexpr bool encloses(const Rect &r) const
Whole-rect containment: does this rect fully enclose r?
Definition geometry.hpp:79
constexpr float right() const
Definition geometry.hpp:55
bool operator==(const Rect &r) const
Definition geometry.hpp:203
Rect remove_from_top(float amount)
Definition geometry.hpp:136
constexpr Rect with_y(float v) const
Definition geometry.hpp:110
bool contains(Point p) const
Definition geometry.hpp:65
constexpr Rect with_width(float v) const
Definition geometry.hpp:111
constexpr float center_y() const
Definition geometry.hpp:63
Rect reduced(float d) const
Shrink by d on every side (the common "padding" idiom).
Definition geometry.hpp:99
Point center() const
Definition geometry.hpp:59
float height
Definition geometry.hpp:53
constexpr Rect translated(float dx, float dy) const
Definition geometry.hpp:105
IntRect to_enclosing_int() const
Smallest integer rect that fully CONTAINS this one.
Definition geometry.hpp:339
constexpr bool contains(float px, float py) const
Definition geometry.hpp:68
float width
Definition geometry.hpp:53
constexpr Rect with_x(float v) const
Definition geometry.hpp:109
bool operator!=(const Rect &r) const
Definition geometry.hpp:206
Rect union_with(const Rect &o) const
Smallest rect enclosing both.
Definition geometry.hpp:184
Rect expanded(float dx, float dy) const
Definition geometry.hpp:103
constexpr float center_x() const
True center in continuous coordinates — exact halves, no truncation.
Definition geometry.hpp:62
float y
Definition geometry.hpp:53
constexpr float bottom() const
Definition geometry.hpp:56
Rect remove_from_bottom(float amount)
Definition geometry.hpp:144
Rect intersection(const Rect &o) const
The overlap, or an empty rect when they do not overlap.
Definition geometry.hpp:172
Rect inset(float amount) const
Definition geometry.hpp:85
Definition geometry.hpp:28
bool operator==(const Size &s) const
Definition geometry.hpp:31
float height
Definition geometry.hpp:29
float width
Definition geometry.hpp:29
bool is_empty() const
Definition geometry.hpp:32