You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
spOSMroute/sdlgl/sdl_main.c

206 lines
4.8 KiB

#include <SDL.h>
#include "osmroute.h"
#include "system.h"
#include "memoryleak.h"
#include "sdl_port.h"
#include "gui.h"
#define RESOLUTION_X 640
#define RESOLUTION_Y 480
int msdl_eventloop ();
Uint32 msdl_timercallback (Uint32 interval, void *param);
int videoflags = SDL_OPENGL | SDL_GL_DOUBLEBUFFER | SDL_RESIZABLE | SDL_HWPALETTE;
SDL_TimerID cycletimer;
SDL_Surface *screen = NULL;
/*************************************************************************
*
* only needed for testing
*
*************************************************************************/
struct image *img, *img1;
void test_img () {
struct line_style style;
d_printf ("*** test_img () ***");
style.width = 1;
style.c = color[COLOR_green][3];
img = gfx_img_alloc (400, 300);
gfx_clear (img, &color[COLOR_blue][2]);
img1 = gfx_img_load ("sample_01.png");
gfx_draw_img (img, 10, 10, 150, 150, img1, 150, 150);
gfx_draw_text (img, 20, 10, "sample_01.png nur ein toller test bla bla", &color[COLOR_yellow][3]);
gfx_draw_text (img, 20, 30, "sample_01.png nur ein toller test bla bla", &color[COLOR_yellow][3]);
gfx_draw_text (NULL, 20, 10, "sample_01.png nur ein toller test bla bla", &color[COLOR_yellow][3]);
gfx_draw_text (NULL, 20, 30, "sample_01.png nur ein toller test bla bla", &color[COLOR_yellow][3]);
gfx_draw_line (img, 20, 100, 200, 100, style);
};
#define TEST_WIDTH 200
void test_draw () {
static int once = 1;
static int _delay = 0;
static int _tmpx, _tmpy = 0;
static int _tmpdx = 1, _tmpdy = 1;
struct line_style style;
GLfloat vp[] = {500, 210, 540, 210};
_delay ++;
gfx_clear (NULL, &color[COLOR_white][0]);
if (once) {
once = 0;
test_img ();
}
if (_tmpx > img->width-TEST_WIDTH) _tmpdx = -1;
if (_tmpx < 0) _tmpdx = 1;
if (_delay % 20 == 0) _tmpx += _tmpdx;
if (_tmpy > img->height-TEST_WIDTH) _tmpdy = -1;
if (_tmpy < 0) _tmpdy = 1;
if (_delay % 20 == 0) _tmpy += _tmpdy;
style.width = 1;
style.c = color[COLOR_white][3];
gfx_draw_line (NULL, 0, gfx_screensize.y, gfx_screensize.x, 0, style);
gfx_draw_line (NULL, gfx_screensize.x, gfx_screensize.y, 0, 0, style);
glColor4f (color[COLOR_green][3].c.r, color[COLOR_green][3].c.g, color[COLOR_green][3].c.b, 1.0f);
glLineWidth (style.width);
glColor4f (style.c.c.r, style.c.c.g, style.c.c.b, 1.0f);
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(2, GL_FLOAT, 0, vp);
glDrawArrays(GL_LINES,0,2);
glDisableClientState(GL_VERTEX_ARRAY);
gfx_draw_img (NULL, 10, 10, TEST_WIDTH, TEST_WIDTH, img, _tmpx, _tmpy);
style.c = color[COLOR_yellow][3];
gfx_draw_line (NULL, gfx_screensize.x, 0, 0, 10, style);
gfx_draw_text (NULL, 10, 300, "sollte gehen", &color[COLOR_red][3]);
gfx_draw_img (NULL, 20, 320, 150, 150, img1, 200, 200);
gfx_flip();
};
Uint32 msdl_timercallback (Uint32 interval, void *param) {
struct gps_data *gpspos;
if (gps_isrunning () > 0) {
if ((gpspos = gps_loop ())) {
drawgps_set_pos (gpspos);
}
}
d_printf ("timer %d", interval);
return (interval);
};
int msdl_eventloop () {
SDL_Event event;
int eventstate;
GUIEvent gevent;
if ((eventstate = SDL_PollEvent (&event)) != 0) {
switch (event.type) {
case (SDL_QUIT):
app.status = APPSTATUS_quit;
break;
case SDL_VIDEORESIZE:
{
SDL_Surface *scr;
scr = SDL_SetVideoMode( event.resize.w, event.resize.h, 0, videoflags);
if ( !scr ) {
fprintf( stderr, "Could not get a surface after resize: %s\n", SDL_GetError( ) );
SDL_Quit();
exit (2);
}
gfx_resize (event.resize.w, event.resize.h);
// draw ();
test_draw ();
}
break;
case SDL_MOUSEMOTION:
gevent.mousepos.x = event.motion.x;
gevent.mousepos.y = event.motion.y;
gevent.mousebtn = 0;
gevent.event = EGUI_MOUSEMOVE;
// gui_event (gevent);
// draw_mousemove (event.motion.x, event.motion.y, -1);
test_draw();
break;
case SDL_MOUSEBUTTONDOWN:
case SDL_MOUSEBUTTONUP:
break;
case SDL_KEYDOWN:
case SDL_KEYUP:
break;
default:
break;
}
return 1;
}
else return 0;
};
int main (int argc, char **argv) {
SDL_Surface *scr;
/* Initialize SDL for video output */
if (SDL_Init (SDL_INIT_VIDEO | SDL_INIT_TIMER) < 0) {
fprintf (stderr, "Unable to initialize SDL: %s\n",
SDL_GetError ());
exit (1);
}
scr = SDL_SetVideoMode(RESOLUTION_X, RESOLUTION_Y, 0, videoflags);
if ( !scr ) {
fprintf( stderr, "Could not get a surface after resize: %s\n", SDL_GetError( ) );
SDL_Quit();
exit (2);
}
app_init (argc, argv);
gfx_init (RESOLUTION_X, RESOLUTION_Y);
test_draw ();
// draw ();
while (app.status != APPSTATUS_quit) {
msdl_eventloop ();
test_draw ();
// draw ();
}
SDL_Quit ();
app_shutdown ();
return 0;
}
void main_wnd_loop (long long int cur, long long int max) {
}
void main_wnd_update () {
}