// // Created by william on 1/12/24. // #ifndef NESEMULATOR_CURSOR_H #define NESEMULATOR_CURSOR_H #include #define CURSOR_OFFSET_UP (-1) #define CURSOR_OFFSET_DOWN 1 #define CURSOR_OFFSET_LEFT (-1) #define CURSOR_OFFSET_RIGHT 1 #define CURSOR_AT_ENABLED A_REVERSE #define CURSOR_AT_DISABLED A_NORMAL typedef struct cursor { WINDOW *window; int min_x; int min_y; int max_x; int max_y; int multiplier_x; int multiplier_y; int width; int pos_x; int pos_y; bool enabled; } Cursor; /** * Initializes a cursor with default values. * * @param cursor A reference to the cursor to initialize * @param window The window the cursor is in */ void cursor_init(Cursor *cursor, WINDOW *window, int max_x, int max_y); /** * Enables a cursor, making it visible in its window. * * @param cursor The cursor */ void cursor_enable(Cursor *cursor); /** * Disables a cursor, removing it from the display. * * @param cursor The cursor */ void cursor_disable(Cursor *cursor); /** * Sets the position of the cursor. * The positions are from left to right (horizontal) and top to bottom (vertical). * * @param cursor The cursor * @param x The new horizontal position * @param y The new vertical position */ void cursor_set_pos(Cursor *cursor, int x, int y); /** * Moves the position of the cursor by an offset. This function ensures that the cursor is kept in the window bounds. * A negative offset moves the cursor position towards the 0 direction (left or top). * A position offset moves it in the opposite direction (right or bottom). * * @param cursor The cursor * @param offset_x The horizontal offset * @param offset_y The vertical offset */ void cursor_move(Cursor *cursor, int offset_x, int offset_y); #endif //NESEMULATOR_CURSOR_H