celina/core/geometry

Core geometric types for Celina CLI library

This module defines the fundamental geometric types used throughout the library for positioning, sizing, and area calculations.

Types

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

Procs

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