mirror of
https://github.com/ghostty-org/ghostty.git
synced 2026-07-03 12:28:13 +08:00
GHOSTTY_ENUM_TYPED: expands to `: int` on C23 (where explicit enum underlying types are supported), empty on older standards.
90 lines
1.7 KiB
C
90 lines
1.7 KiB
C
/**
|
|
* @file point.h
|
|
*
|
|
* Terminal point types for referencing locations in the terminal grid.
|
|
*/
|
|
|
|
#ifndef GHOSTTY_VT_POINT_H
|
|
#define GHOSTTY_VT_POINT_H
|
|
|
|
#include <stdint.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/** @defgroup point Point
|
|
*
|
|
* Types for referencing x/y positions in the terminal grid under
|
|
* different coordinate systems (active area, viewport, full screen,
|
|
* scrollback history).
|
|
*
|
|
* @{
|
|
*/
|
|
|
|
/**
|
|
* A coordinate in the terminal grid.
|
|
*
|
|
* @ingroup point
|
|
*/
|
|
typedef struct {
|
|
/** Column (0-indexed). */
|
|
uint16_t x;
|
|
|
|
/** Row (0-indexed). May exceed page size for screen/history tags. */
|
|
uint32_t y;
|
|
} GhosttyPointCoordinate;
|
|
|
|
/**
|
|
* Point reference tag.
|
|
*
|
|
* Determines which coordinate system a point uses.
|
|
*
|
|
* @ingroup point
|
|
*/
|
|
typedef enum GHOSTTY_ENUM_TYPED {
|
|
/** Active area where the cursor can move. */
|
|
GHOSTTY_POINT_TAG_ACTIVE = 0,
|
|
|
|
/** Visible viewport (changes when scrolled). */
|
|
GHOSTTY_POINT_TAG_VIEWPORT = 1,
|
|
|
|
/** Full screen including scrollback. */
|
|
GHOSTTY_POINT_TAG_SCREEN = 2,
|
|
|
|
/** Scrollback history only (before active area). */
|
|
GHOSTTY_POINT_TAG_HISTORY = 3,
|
|
GHOSTTY_POINT_TAG_MAX_VALUE = GHOSTTY_ENUM_MAX_VALUE,
|
|
} GhosttyPointTag;
|
|
|
|
/**
|
|
* Point value union.
|
|
*
|
|
* @ingroup point
|
|
*/
|
|
typedef union {
|
|
/** Coordinate (used for all tag variants). */
|
|
GhosttyPointCoordinate coordinate;
|
|
|
|
/** Padding for ABI compatibility. Do not use. */
|
|
uint64_t _padding[2];
|
|
} GhosttyPointValue;
|
|
|
|
/**
|
|
* Tagged union for a point in the terminal grid.
|
|
*
|
|
* @ingroup point
|
|
*/
|
|
typedef struct {
|
|
GhosttyPointTag tag;
|
|
GhosttyPointValue value;
|
|
} GhosttyPoint;
|
|
|
|
/** @} */
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* GHOSTTY_VT_POINT_H */
|