2024-09-01 15:54:41 -04:00
|
|
|
//
|
|
|
|
// Created by william on 17/05/24.
|
|
|
|
//
|
|
|
|
|
|
|
|
#ifndef NES_EMULATOR_WINDOW_H
|
|
|
|
#define NES_EMULATOR_WINDOW_H
|
|
|
|
|
|
|
|
#include <SDL.h>
|
|
|
|
#include "linked_list.h"
|
|
|
|
#include "component.h"
|
|
|
|
|
|
|
|
typedef struct window_sdl_context {
|
|
|
|
SDL_Renderer *renderer;
|
|
|
|
SDL_Window *window;
|
|
|
|
} WindowSdlContext;
|
|
|
|
|
|
|
|
typedef struct window {
|
2024-10-03 19:24:03 -04:00
|
|
|
int id;
|
2024-09-01 15:54:41 -04:00
|
|
|
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
|