Core geometric types for Celina CLI library
This module defines the fundamental geometric types used throughout the library for positioning, sizing, and area calculations.
Area = Rect
-
Alias for Rect, commonly used for widget areas
Position = object
x*, y*: int
-
Represents a 2D position with x and y coordinates
Rect = object
x*, y*: int
width*, height*: int
-
Represents a rectangular area with position and dimensions
Size = object
width*, height*: int
-
Represents dimensions with width and height
proc `$`(pos: Position): string {.inline, ...raises: [], tags: [], forbids: [].}
-
String representation of Position
proc `$`(r: Rect): string {.inline, ...raises: [], tags: [], forbids: [].}
-
String representation of Rect
proc `$`(size: Size): string {.inline, ...raises: [], tags: [], forbids: [].}
-
String representation of Size
proc `+`(a, b: Position): Position {.inline, ...raises: [], tags: [], forbids: [].}
-
Add two positions
proc `-`(a, b: Position): Position {.inline, ...raises: [], tags: [], forbids: [].}
-
Subtract two positions
proc area(r: Rect): int {.inline, ...raises: [], tags: [], forbids: [].}
-
Calculate the area of a Rect
proc area(size: Size): int {.inline, ...raises: [], tags: [], forbids: [].}
-
Calculate the total area (width * height)
proc bottom(r: Rect): int {.inline, ...raises: [], tags: [], forbids: [].}
-
Get the bottom edge y-coordinate
proc center(r: Rect): Position {.inline, ...raises: [], tags: [], forbids: [].}
-
Get the center position of a Rect
proc contains(r: Rect; pos: Position): bool {.inline, ...raises: [], tags: [],
forbids: [].}
-
Check if a Rect contains a Position
proc contains(r: Rect; x, y: int): bool {.inline, ...raises: [], tags: [],
forbids: [].}
-
Check if a Rect contains coordinates
proc expand(r: Rect; margin: int): Rect {.inline, ...raises: [], tags: [],
forbids: [].}
-
Expand a Rect by a margin on all sides
proc intersection(a, b: Rect): Rect {....raises: [], tags: [], forbids: [].}
-
Calculate the intersection of two Rects
proc intersects(a, b: Rect): bool {.inline, ...raises: [], tags: [], forbids: [].}
-
Check if two Rects intersect
proc isEmpty(r: Rect): bool {.inline, ...raises: [], tags: [], forbids: [].}
-
Check if Rect is empty (zero area)
proc isValid(r: Rect): bool {.inline, ...raises: [], tags: [], forbids: [].}
-
Check if Rect has positive dimensions
proc isValid(size: Size): bool {.inline, ...raises: [], tags: [], forbids: [].}
-
Check if Size has positive dimensions
proc pos(x, y: int): Position {.inline, ...raises: [], tags: [], forbids: [].}
-
Create a new Position
proc position(r: Rect): Position {.inline, ...raises: [], tags: [], forbids: [].}
-
Get the position of a Rect
proc rect(pos: Position; size: Size): Rect {.inline, ...raises: [], tags: [],
forbids: [].}
-
Create a Rect from Position and Size
proc rect(x, y, width, height: int): Rect {.inline, ...raises: [], tags: [],
forbids: [].}
-
Create a new Rect
proc right(r: Rect): int {.inline, ...raises: [], tags: [], forbids: [].}
-
Get the right edge x-coordinate
proc shrink(r: Rect; horizontal, vertical: int): Rect {.inline, ...raises: [],
tags: [], forbids: [].}
-
Shrink a Rect by different margins horizontally and vertically
proc shrink(r: Rect; margin: int): Rect {.inline, ...raises: [], tags: [],
forbids: [].}
-
Shrink a Rect by a margin on all sides
proc size(r: Rect): Size {.inline, ...raises: [], tags: [], forbids: [].}
-
Get the size of a Rect
proc size(width, height: int): Size {.inline, ...raises: [], tags: [], forbids: [].}
-
Create a new Size
proc union(a, b: Rect): Rect {....raises: [], tags: [], forbids: [].}
-
Calculate the union of two Rects