diff --git a/include/vm_area.h b/include/vm_area.h new file mode 100644 index 0000000..1b40bbd --- /dev/null +++ b/include/vm_area.h @@ -0,0 +1,45 @@ +#ifndef _VM_AREA_H_ +#define _VM_AREA_H_ + +typedef struct { + /* + * These are the x and y coordinate offsets in the logical dimension + * established in a vm_screen. An offset of (0, 0) would be in the + * top-left; (5, 5) would be 5 pixels down, and 5 pixels to the + * right, of that top-left corner. + */ + int xoff; + int yoff; + + /* + * These are the width and height of the area we're defining. A + * single pixel in the logical area would have a width and height of + * (1, 1); use larger numbers to indicate a larger square (if the + * two are equal) or rectangle (if unequal). + */ + int width; + int height; +} vm_area; + +/* + * Set the contents of an SDL_Rect to the equivalent fields contained in + * a vm_area. + */ +#define SET_SDL_RECT(name, a) \ + (name).x = (a).xoff; \ + (name).y = (a).yoff; \ + (name).w = (a).width; \ + (name).h = (a).height + +/* + * Much like SET_SDL_RECT(), except this will (as a side-effect!) + * declare an SDL_Rect variable (`name`) and pass that into the SET + * macro. + */ +#define MAKE_SDL_RECT(name, a) \ + SDL_Rect name; \ + SET_SDL_RECT(name, a) + +extern void vm_area_set(vm_area *, int, int, int, int); + +#endif diff --git a/include/vm_screen.h b/include/vm_screen.h index 1151025..fb1379f 100644 --- a/include/vm_screen.h +++ b/include/vm_screen.h @@ -4,25 +4,7 @@ #include #include -typedef struct { - /* - * These are the x and y coordinate offsets in the logical dimension - * established in a vm_screen. An offset of (0, 0) would be in the - * top-left; (5, 5) would be 5 pixels down, and 5 pixels to the - * right, of that top-left corner. - */ - int xoff; - int yoff; - - /* - * These are the width and height of the area we're defining. A - * single pixel in the logical area would have a width and height of - * (1, 1); use larger numbers to indicate a larger square (if the - * two are equal) or rectangle (if unequal). - */ - int width; - int height; -} vm_area; +#include "vm_area.h" typedef struct { /* @@ -49,27 +31,7 @@ typedef struct { int ycoords; } vm_screen; -/* - * Set the contents of an SDL_Rect to the equivalent fields contained in - * a vm_area. - */ -#define SET_SDL_RECT(name, a) \ - (name).x = (a).xoff; \ - (name).y = (a).yoff; \ - (name).w = (a).width; \ - (name).h = (a).height - -/* - * Much like SET_SDL_RECT(), except this will (as a side-effect!) - * declare an SDL_Rect variable (`name`) and pass that into the SET - * macro. - */ -#define MAKE_SDL_RECT(name, a) \ - SDL_Rect name; \ - SET_SDL_RECT(name, a) - extern bool vm_screen_active(vm_screen *); -extern void vm_area_set(vm_area *, int, int, int, int); extern int vm_screen_add_window(vm_screen *, int, int); extern int vm_screen_init(); extern int vm_screen_xcoords(vm_screen *); diff --git a/sources.cmake b/sources.cmake index 9c604e0..647c42b 100644 --- a/sources.cmake +++ b/sources.cmake @@ -15,6 +15,7 @@ set(erc_sources mos6502.stat.c objstore.c option.c + vm_area.c vm_bitfont.c vm_screen.c vm_segment.c diff --git a/src/vm_area.c b/src/vm_area.c new file mode 100644 index 0000000..3990ee3 --- /dev/null +++ b/src/vm_area.c @@ -0,0 +1,18 @@ +/* + * vm_area.c + */ + +#include "vm_area.h" + +/* + * Assign the values of an area, which are an x and y offset plus a + * width and height. + */ +inline void +vm_area_set(vm_area *area, int xoff, int yoff, int width, int height) +{ + area->xoff = xoff; + area->yoff = yoff; + area->width = width; + area->height = height; +} diff --git a/src/vm_screen.c b/src/vm_screen.c index 9ca1002..738c004 100644 --- a/src/vm_screen.c +++ b/src/vm_screen.c @@ -210,16 +210,3 @@ vm_screen_draw_rect(vm_screen *screen, vm_area *area) SDL_RenderFillRect(screen->render, &rect); } - -/* - * Assign the values of an area, which are an x and y offset plus a - * width and height. - */ -inline void -vm_area_set(vm_area *area, int xoff, int yoff, int width, int height) -{ - area->xoff = xoff; - area->yoff = yoff; - area->width = width; - area->height = height; -} diff --git a/tests/vm_area.c b/tests/vm_area.c new file mode 100644 index 0000000..5571540 --- /dev/null +++ b/tests/vm_area.c @@ -0,0 +1,14 @@ +#include + +#include "vm_area.h" + +Test(vm_area, set) +{ + vm_area area; + + vm_area_set(&area, 1, 2, 3, 4); + cr_assert_eq(area.xoff, 1); + cr_assert_eq(area.yoff, 2); + cr_assert_eq(area.width, 3); + cr_assert_eq(area.height, 4); +}