SDL  2.0
testhittesting.c File Reference
#include <stdio.h>
#include "SDL.h"
+ Include dependency graph for testhittesting.c:

Go to the source code of this file.

Macros

#define RESIZE_BORDER   20
#define REPORT_RESIZE_HIT(name)

Functions

static SDL_HitTestResult hitTest (SDL_Window *window, const SDL_Point *pt, void *data)
int main (int argc, char **argv)

Variables

const SDL_Rect drag_areas []
static const SDL_Rectareas = drag_areas
static int numareas = SDL_arraysize(drag_areas)

Macro Definition Documentation

#define REPORT_RESIZE_HIT (   name)
Value:
{ \
SDL_Log("HIT-TEST: RESIZE_" #name "\n"); \
return SDL_HITTEST_RESIZE_##name; \
}

Referenced by hitTest().

#define RESIZE_BORDER   20

Definition at line 6 of file testhittesting.c.

Referenced by hitTest(), and SDLTest_ExampleHitTestCallback().

Function Documentation

static SDL_HitTestResult hitTest ( SDL_Window window,
const SDL_Point pt,
void data 
)
static

Definition at line 18 of file testhittesting.c.

References i, numareas, REPORT_RESIZE_HIT, RESIZE_BORDER, SDL_GetWindowSize, SDL_HITTEST_DRAGGABLE, SDL_HITTEST_NORMAL, SDL_Log, SDL_PointInRect(), SDL_Point::x, and SDL_Point::y.

Referenced by main().

{
int i;
int w, h;
for (i = 0; i < numareas; i++) {
if (SDL_PointInRect(pt, &areas[i])) {
SDL_Log("HIT-TEST: DRAGGABLE\n");
}
}
SDL_GetWindowSize(window, &w, &h);
#define REPORT_RESIZE_HIT(name) { \
SDL_Log("HIT-TEST: RESIZE_" #name "\n"); \
return SDL_HITTEST_RESIZE_##name; \
}
if (pt->x < RESIZE_BORDER && pt->y < RESIZE_BORDER) {
} else if (pt->x > RESIZE_BORDER && pt->x < w - RESIZE_BORDER && pt->y < RESIZE_BORDER) {
} else if (pt->x > w - RESIZE_BORDER && pt->y < RESIZE_BORDER) {
REPORT_RESIZE_HIT(TOPRIGHT);
} else if (pt->x > w - RESIZE_BORDER && pt->y > RESIZE_BORDER && pt->y < h - RESIZE_BORDER) {
} else if (pt->x > w - RESIZE_BORDER && pt->y > h - RESIZE_BORDER) {
REPORT_RESIZE_HIT(BOTTOMRIGHT);
} else if (pt->x < w - RESIZE_BORDER && pt->x > RESIZE_BORDER && pt->y > h - RESIZE_BORDER) {
} else if (pt->x < RESIZE_BORDER && pt->y > h - RESIZE_BORDER) {
REPORT_RESIZE_HIT(BOTTOMLEFT);
} else if (pt->x < RESIZE_BORDER && pt->y < h - RESIZE_BORDER && pt->y > RESIZE_BORDER) {
}
SDL_Log("HIT-TEST: NORMAL\n");
}
int main ( int  argc,
char **  argv 
)

Definition at line 60 of file testhittesting.c.

References SDL_WindowEvent::data1, SDL_WindowEvent::data2, done, drag_areas, e, SDL_WindowEvent::event, hitTest(), SDL_Event::key, SDL_KeyboardEvent::keysym, NULL, numareas, renderer, SDL_arraysize, SDL_CreateRenderer, SDL_CreateWindow, SDL_Delay, SDL_Init, SDL_INIT_VIDEO, SDL_KEYDOWN, SDL_Log, SDL_MOUSEBUTTONDOWN, SDL_MOUSEBUTTONUP, SDL_PollEvent, SDL_Quit, SDL_QUIT, SDL_RenderClear, SDL_RenderFillRects, SDL_RenderPresent, SDL_SetRenderDrawColor, SDL_SetWindowHitTest, SDL_WINDOW_BORDERLESS, SDL_WINDOW_RESIZABLE, SDL_WINDOWEVENT, SDL_WINDOWEVENT_MOVED, SDL_WINDOWPOS_CENTERED, SDLK_ESCAPE, SDLK_x, SDL_Keysym::sym, SDL_Event::type, and SDL_Event::window.

{
int done = 0;
/* !!! FIXME: check for errors. */
renderer = SDL_CreateRenderer(window, -1, 0);
if (SDL_SetWindowHitTest(window, hitTest, NULL) == -1) {
SDL_Log("Enabling hit-testing failed!\n");
return 1;
}
while (!done)
{
int nothing_to_do = 1;
SDL_SetRenderDrawColor(renderer, 0, 0, 127, 255);
SDL_RenderClear(renderer);
SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255);
SDL_RenderPresent(renderer);
while (SDL_PollEvent(&e)) {
nothing_to_do = 0;
switch (e.type)
{
SDL_Log("button down!\n");
break;
SDL_Log("button up!\n");
break;
SDL_Log("Window event moved to (%d, %d)!\n", (int) e.window.data1, (int) e.window.data2);
}
break;
if (e.key.keysym.sym == SDLK_ESCAPE) {
done = 1;
} else if (e.key.keysym.sym == SDLK_x) {
if (!areas) {
} else {
numareas = 0;
}
}
break;
case SDL_QUIT:
done = 1;
break;
}
}
if (nothing_to_do) {
SDL_Delay(50);
}
}
return 0;
}

Variable Documentation

const SDL_Rect* areas = drag_areas
static

Definition at line 14 of file testhittesting.c.

const SDL_Rect drag_areas[]
Initial value:
{
{ 20, 20, 100, 100 },
{ 200, 70, 100, 100 },
{ 400, 90, 100, 100 }
}

Definition at line 8 of file testhittesting.c.

Referenced by main().

int numareas = SDL_arraysize(drag_areas)
static

Definition at line 15 of file testhittesting.c.

Referenced by hitTest(), and main().