mlx3ds/source/mlx_window.c
2024-10-13 19:38:36 +02:00

54 lines
1.2 KiB
C

/**
* mlx_window.c
* for the project "MinilibX for 3DS"
* by Zy
* at https://github.com/frzysk/mlx3ds
*/
#include "mlx_window.h"
#include "3ds.h"
#include "mlx_internal.h"
#include <stdlib.h>
#include <strings.h>
t_win mlx_new_window(t_mlx mlx_ptr, int size_x, int size_y, const char *title)
{
t_internal_win *r;
(void)title;
if (size_x > GSP_SCREEN_HEIGHT_TOP || size_y > GSP_SCREEN_WIDTH)
mlx3ds_internal_fatalerror("Window too big for the screen");
r = malloc(sizeof(t_internal_win));
if (!r)
return (NULL);
bzero(r, sizeof(t_internal_win));
r->mlx = mlx_ptr;
r->mlx->top_window = r;
r->width = size_x;
r->height = size_y;
return (r);
}
int mlx_clear_window(t_mlx mlx_ptr, t_win win_ptr)
{
u8 *frame_i;
u8 *frame;
mlx3ds_internal_drawstart(mlx_ptr, win_ptr);
frame = ((t_internal_win *)win_ptr)->framebuffer;
frame_i = frame
+ 3 * ((t_internal_win *)win_ptr)->framebuffer_width
* ((t_internal_win *)win_ptr)->framebuffer_height;
while (--frame_i >= frame)
*frame_i = 0x00;
mlx3ds_internal_drawend(mlx_ptr, win_ptr);
return (0);
}
int mlx_destroy_window(t_mlx mlx_ptr, t_win win_ptr)
{
((t_internal_mlx *)mlx_ptr)->top_window = NULL;
free(win_ptr);
return (0);
}