// // Created by william on 17/05/24. // #ifndef NES_EMULATOR_WINDOW_H #define NES_EMULATOR_WINDOW_H #include #include "linked_list.h" #include "component.h" typedef struct window_sdl_context { SDL_Renderer *renderer; SDL_Window *window; } WindowSdlContext; typedef struct window { int id; int width; int height; int scale; WindowSdlContext sdl_context; LinkedList components; } Window; /** * Creates a window. * @param title The title of the window * @param width The width in pixels * @param height The height in pixels * @param scale The scale of pixels of this window (number of real pixels per drawn pixel) * @return The created window */ Window window_create(char *title, int width, int height, int scale); /** * Creates a background_texture for a window. (same width/height) * @param window A reference to the window * @param access The SDL background_texture access type * @return An SDL background_texture for the window */ SDL_Texture *window_create_texture(Window *window, int access); /** * Adds a component to a window. * @param window A reference to the window * @param component A reference to the component to add */ void window_add_component(Window *window, Component *component); /** * Renders the components of a window (but not the window itself) * @param window The window to render components */ void window_render_components(Window *window); /** * Renders a background_texture in the window. * @param window A reference to the window * @param texture The background_texture to render */ void window_render_texture(Window *window, SDL_Texture *texture); /** * Presents a window. * @param window A reference to the window */ void window_present(Window *window); /** * Destroys a window. * Free the ressources of the window and its components. * @param window The window to destroy */ void window_destroy(Window *window); /** * Handles mouse motion events in the window. * @param window A reference to the window * @param x The x position of the mouse * @param y The y position of the mouse */ void window_mouse_motion(Window *window, int x, int y); /** * Handles mouse click events in the window. * @param window A reference to the window */ void window_mouse_click(Window *window); #endif //NES_EMULATOR_WINDOW_H