forked from LeenkxTeam/LNXSDK
		
	
		
			
	
	
		
			216 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			216 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								#pragma once
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <kinc/global.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <stdbool.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*! \file window.h
							 | 
						||
| 
								 | 
							
								    \brief Provides functionality for creating and handling windows.
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef __cplusplus
							 | 
						||
| 
								 | 
							
								extern "C" {
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct kinc_framebuffer_options {
							 | 
						||
| 
								 | 
							
									int frequency;
							 | 
						||
| 
								 | 
							
									bool vertical_sync;
							 | 
						||
| 
								 | 
							
									int color_bits;
							 | 
						||
| 
								 | 
							
									int depth_bits;
							 | 
						||
| 
								 | 
							
									int stencil_bits;
							 | 
						||
| 
								 | 
							
									int samples_per_pixel;
							 | 
						||
| 
								 | 
							
								} kinc_framebuffer_options_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef enum {
							 | 
						||
| 
								 | 
							
									KINC_WINDOW_MODE_WINDOW,
							 | 
						||
| 
								 | 
							
									KINC_WINDOW_MODE_FULLSCREEN,
							 | 
						||
| 
								 | 
							
									KINC_WINDOW_MODE_EXCLUSIVE_FULLSCREEN // Only relevant for Windows
							 | 
						||
| 
								 | 
							
								} kinc_window_mode_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define KINC_WINDOW_FEATURE_RESIZEABLE 1
							 | 
						||
| 
								 | 
							
								#define KINC_WINDOW_FEATURE_MINIMIZABLE 2
							 | 
						||
| 
								 | 
							
								#define KINC_WINDOW_FEATURE_MAXIMIZABLE 4
							 | 
						||
| 
								 | 
							
								#define KINC_WINDOW_FEATURE_BORDERLESS 8
							 | 
						||
| 
								 | 
							
								#define KINC_WINDOW_FEATURE_ON_TOP 16
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct kinc_window_options {
							 | 
						||
| 
								 | 
							
									const char *title;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									int x;
							 | 
						||
| 
								 | 
							
									int y;
							 | 
						||
| 
								 | 
							
									int width;
							 | 
						||
| 
								 | 
							
									int height;
							 | 
						||
| 
								 | 
							
									int display_index;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									bool visible;
							 | 
						||
| 
								 | 
							
									int window_features;
							 | 
						||
| 
								 | 
							
									kinc_window_mode_t mode;
							 | 
						||
| 
								 | 
							
								} kinc_window_options_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/// <summary>
							 | 
						||
| 
								 | 
							
								/// Creates a window.
							 | 
						||
| 
								 | 
							
								/// </summary>
							 | 
						||
| 
								 | 
							
								/// <returns>The id of the created window</returns>
							 | 
						||
| 
								 | 
							
								KINC_FUNC int kinc_window_create(kinc_window_options_t *win, kinc_framebuffer_options_t *frame);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/// <summary>
							 | 
						||
| 
								 | 
							
								/// Closes and destroys a window.
							 | 
						||
| 
								 | 
							
								/// </summary>
							 | 
						||
| 
								 | 
							
								KINC_FUNC void kinc_window_destroy(int window);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								KINC_FUNC void kinc_window_options_set_defaults(kinc_window_options_t *win);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								KINC_FUNC void kinc_framebuffer_options_set_defaults(kinc_framebuffer_options_t *frame);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/// <summary>
							 | 
						||
| 
								 | 
							
								/// Counts all windows the program created, including the initial window created by kinc_init.
							 | 
						||
| 
								 | 
							
								/// </summary>
							 | 
						||
| 
								 | 
							
								/// <returns>The number of windows</returns>
							 | 
						||
| 
								 | 
							
								KINC_FUNC int kinc_count_windows(void);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/// <summary>
							 | 
						||
| 
								 | 
							
								/// Resizes a window.
							 | 
						||
| 
								 | 
							
								/// </summary>
							 | 
						||
| 
								 | 
							
								KINC_FUNC void kinc_window_resize(int window, int width, int height);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/// <summary>
							 | 
						||
| 
								 | 
							
								/// Moves a window.
							 | 
						||
| 
								 | 
							
								/// </summary>
							 | 
						||
| 
								 | 
							
								KINC_FUNC void kinc_window_move(int window, int x, int y);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/// <summary>
							 | 
						||
| 
								 | 
							
								/// Switches between window and fullscreen-modes.
							 | 
						||
| 
								 | 
							
								/// </summary>
							 | 
						||
| 
								 | 
							
								KINC_FUNC void kinc_window_change_mode(int window, kinc_window_mode_t mode);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/// <summary>
							 | 
						||
| 
								 | 
							
								/// Applies an or-ed combination of KINC_WINDOW_FEATURE values.
							 | 
						||
| 
								 | 
							
								/// </summary>
							 | 
						||
| 
								 | 
							
								KINC_FUNC void kinc_window_change_features(int window, int features);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/// <summary>
							 | 
						||
| 
								 | 
							
								/// Changes the framebuffer-options of a window.
							 | 
						||
| 
								 | 
							
								/// </summary>
							 | 
						||
| 
								 | 
							
								KINC_FUNC void kinc_window_change_framebuffer(int window, kinc_framebuffer_options_t *frame);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/// <summary>
							 | 
						||
| 
								 | 
							
								/// Returns the x position of a window.
							 | 
						||
| 
								 | 
							
								/// </summary>
							 | 
						||
| 
								 | 
							
								/// <returns>The x-position</returns>
							 | 
						||
| 
								 | 
							
								KINC_FUNC int kinc_window_x(int window);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/// <summary>
							 | 
						||
| 
								 | 
							
								/// Returns the y position of a window.
							 | 
						||
| 
								 | 
							
								/// </summary>
							 | 
						||
| 
								 | 
							
								/// <returns>The y-position</returns>
							 | 
						||
| 
								 | 
							
								KINC_FUNC int kinc_window_y(int window);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/// <summary>
							 | 
						||
| 
								 | 
							
								/// Returns the width of a window.
							 | 
						||
| 
								 | 
							
								/// </summary>
							 | 
						||
| 
								 | 
							
								/// <returns>The window-width</returns>
							 | 
						||
| 
								 | 
							
								KINC_FUNC int kinc_window_width(int window);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/// <summary>
							 | 
						||
| 
								 | 
							
								/// Returns the height of a window.
							 | 
						||
| 
								 | 
							
								/// </summary>
							 | 
						||
| 
								 | 
							
								/// <returns>The window-height</returns>
							 | 
						||
| 
								 | 
							
								KINC_FUNC int kinc_window_height(int window);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/// <summary>
							 | 
						||
| 
								 | 
							
								/// Returns the id of the display the window currently is on.
							 | 
						||
| 
								 | 
							
								/// </summary>
							 | 
						||
| 
								 | 
							
								/// <returns>The display-id</returns>
							 | 
						||
| 
								 | 
							
								KINC_FUNC int kinc_window_display(int window);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/// <summary>
							 | 
						||
| 
								 | 
							
								/// Returns the current window-mode.
							 | 
						||
| 
								 | 
							
								/// </summary>
							 | 
						||
| 
								 | 
							
								/// <returns>The window-mode</returns>
							 | 
						||
| 
								 | 
							
								KINC_FUNC kinc_window_mode_t kinc_window_get_mode(int window);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/// <summary>
							 | 
						||
| 
								 | 
							
								/// Makes the window visible.
							 | 
						||
| 
								 | 
							
								/// </summary>
							 | 
						||
| 
								 | 
							
								KINC_FUNC void kinc_window_show(int window);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/// <summary>
							 | 
						||
| 
								 | 
							
								/// Hides a window.
							 | 
						||
| 
								 | 
							
								/// </summary>
							 | 
						||
| 
								 | 
							
								KINC_FUNC void kinc_window_hide(int window);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/// <summary>
							 | 
						||
| 
								 | 
							
								/// Sets the title of a window.
							 | 
						||
| 
								 | 
							
								/// </summary>
							 | 
						||
| 
								 | 
							
								KINC_FUNC void kinc_window_set_title(int window, const char *title);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/// <summary>
							 | 
						||
| 
								 | 
							
								/// Sets a resize callback that's called whenever the window is resized.
							 | 
						||
| 
								 | 
							
								/// </summary>
							 | 
						||
| 
								 | 
							
								KINC_FUNC void kinc_window_set_resize_callback(int window, void (*callback)(int x, int y, void *data), void *data);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/// <summary>
							 | 
						||
| 
								 | 
							
								/// Sets a PPI callback that's called whenever the window moves to a display that uses a different PPI-setting.
							 | 
						||
| 
								 | 
							
								/// </summary>
							 | 
						||
| 
								 | 
							
								KINC_FUNC void kinc_window_set_ppi_changed_callback(int window, void (*callback)(int ppi, void *data), void *data);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/// <summary>
							 | 
						||
| 
								 | 
							
								/// Sets a close callback that's called when the window is about to close.
							 | 
						||
| 
								 | 
							
								/// Returning false from the callback tries to stop the window from closing.
							 | 
						||
| 
								 | 
							
								/// </summary>
							 | 
						||
| 
								 | 
							
								KINC_FUNC void kinc_window_set_close_callback(int window, bool (*callback)(void *data), void *data);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/// <summary>
							 | 
						||
| 
								 | 
							
								/// Returns whether the window is vsynced or not.
							 | 
						||
| 
								 | 
							
								/// </summary>
							 | 
						||
| 
								 | 
							
								/// <returns>Whether the window is vsynced or not</returns>
							 | 
						||
| 
								 | 
							
								KINC_FUNC bool kinc_window_vsynced(int window);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void kinc_internal_call_resize_callback(int window, int width, int height);
							 | 
						||
| 
								 | 
							
								void kinc_internal_call_ppi_changed_callback(int window, int ppi);
							 | 
						||
| 
								 | 
							
								bool kinc_internal_call_close_callback(int window);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef KINC_IMPLEMENTATION_ROOT
							 | 
						||
| 
								 | 
							
								#define KINC_IMPLEMENTATION
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef KINC_IMPLEMENTATION
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef KINC_IMPLEMENTATION_ROOT
							 | 
						||
| 
								 | 
							
								#undef KINC_IMPLEMENTATION
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								#include <kinc/display.h>
							 | 
						||
| 
								 | 
							
								#ifdef KINC_IMPLEMENTATION_ROOT
							 | 
						||
| 
								 | 
							
								#define KINC_IMPLEMENTATION
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <stdlib.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void kinc_window_options_set_defaults(kinc_window_options_t *win) {
							 | 
						||
| 
								 | 
							
									kinc_display_init();
							 | 
						||
| 
								 | 
							
									win->title = NULL;
							 | 
						||
| 
								 | 
							
									win->display_index = kinc_primary_display();
							 | 
						||
| 
								 | 
							
									win->mode = KINC_WINDOW_MODE_WINDOW;
							 | 
						||
| 
								 | 
							
									win->x = -1;
							 | 
						||
| 
								 | 
							
									win->y = -1;
							 | 
						||
| 
								 | 
							
									win->width = 800;
							 | 
						||
| 
								 | 
							
									win->height = 600;
							 | 
						||
| 
								 | 
							
									win->visible = true;
							 | 
						||
| 
								 | 
							
									win->window_features = KINC_WINDOW_FEATURE_RESIZEABLE | KINC_WINDOW_FEATURE_MINIMIZABLE | KINC_WINDOW_FEATURE_MAXIMIZABLE;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void kinc_framebuffer_options_set_defaults(kinc_framebuffer_options_t *frame) {
							 | 
						||
| 
								 | 
							
									frame->frequency = 60;
							 | 
						||
| 
								 | 
							
									frame->vertical_sync = true;
							 | 
						||
| 
								 | 
							
									frame->color_bits = 32;
							 | 
						||
| 
								 | 
							
									frame->depth_bits = 16;
							 | 
						||
| 
								 | 
							
									frame->stencil_bits = 8;
							 | 
						||
| 
								 | 
							
									frame->samples_per_pixel = 1;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef __cplusplus
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								#endif
							 |