summaryrefslogtreecommitdiff
path: root/src/interface.c
diff options
context:
space:
mode:
authororoborus <oroborus@0ee4d065-81f0-4d1e-b06c-ff20ad07cc3e>2008-02-01 22:59:06 +0000
committeroroborus <oroborus@0ee4d065-81f0-4d1e-b06c-ff20ad07cc3e>2008-02-01 22:59:06 +0000
commit6d4e1eae16b84918009625a866104ec26a234277 (patch)
treea340a8a547a60c9f63c8dfafe8909242f9c9bbd8 /src/interface.c
nahranie tarballu tuxanci-ng na SVN server
Dusan Durech ( Oroborus ) git-svn-id: http://opensvn.csie.org/tuxanci_ng@1 0ee4d065-81f0-4d1e-b06c-ff20ad07cc3e
Diffstat (limited to 'src/interface.c')
-rwxr-xr-xsrc/interface.c200
1 files changed, 200 insertions, 0 deletions
diff --git a/src/interface.c b/src/interface.c
new file mode 100755
index 0000000..f47c2dd
--- /dev/null
+++ b/src/interface.c
@@ -0,0 +1,200 @@
+
+#include "main.h"
+#include "interface.h"
+#include "screen.h"
+
+//povrch okna
+static SDL_Surface *screen;
+
+//casovac
+static SDL_TimerID timer;
+
+//priznaky okna
+static Uint32 g_win_flags = SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_ANYFORMAT;
+
+static bool_t isInterfaceInit = FALSE;
+
+bool_t isInterfaceInicialized()
+{
+ return isInterfaceInit;
+}
+
+static Uint32 TimerCallback(Uint32 interval, void *param)
+{
+ SDL_Event event;
+ event.type = SDL_USEREVENT;
+ event.user.code = USR_EVT_TIMER;
+ event.user.data1 = NULL;
+ event.user.data2 = NULL;
+
+ SDL_PushEvent(&event);
+
+ return interval;
+}
+
+int initSDL()
+{
+ printf("init SDL..\n");
+
+ //inicializujem SDL
+ if( SDL_Init(SDL_SUBSYSTEMS) == -1 )
+ {
+ fprintf(stderr, "%s\n", SDL_GetError());
+ SDL_Quit();
+ return -1;
+ }
+
+ //inicializujem okno
+ //screen = SDL_SetVideoMode(WINDOW_SIZE_X, WINDOW_SIZE_Y, 0, g_win_flags);
+ screen = SDL_SetVideoMode(WINDOW_SIZE_X, WINDOW_SIZE_Y, 0, g_win_flags);
+
+ if (screen == NULL )
+ {
+ fprintf(stderr, "%s\n", SDL_GetError());
+ SDL_Quit();
+ return -1;
+ }
+
+ SDL_WM_SetCaption(WINDOW_TITLE, NULL);
+ //SDL_ShowCursor(0);
+ //SDL_EnableKeyRepeat(1,1);
+ timer = SDL_AddTimer(INTERVAL, TimerCallback, NULL);
+
+ srand((unsigned)time(NULL));
+ isInterfaceInit = TRUE;
+
+ return 0;
+}
+
+SDL_Surface* getSDL_Screen()
+{
+ return screen;
+}
+
+int toggleFullscreen()
+{
+ if(g_win_flags & SDL_FULLSCREEN)
+ g_win_flags &= ~SDL_FULLSCREEN;
+ else
+ g_win_flags |= SDL_FULLSCREEN;
+
+ if(SDL_WM_ToggleFullScreen(screen) == 0)
+ {
+ fprintf(stderr, "Nemozem prepnut do fullscreenu!\n");
+
+ SDL_FreeSurface(screen);
+ screen = SDL_SetVideoMode(WINDOW_SIZE_X, WINDOW_SIZE_Y, WIN_BPP, g_win_flags);
+
+ if(screen == NULL)
+ {
+ fprintf(stderr, "Nemozem premnut do okna:%s\n", SDL_GetError());
+ return 0;
+ }
+ }
+
+ return 1;
+}
+
+void getMousePosition(int *x, int *y)
+{
+ SDL_GetMouseState(x, y);
+}
+
+int isMouseClicked()
+{
+ return SDL_GetMouseState(NULL,NULL) & SDL_BUTTON(SDL_BUTTON_LEFT);
+}
+
+/*
+static void action_esc()
+{
+ if( strcmp(getScreen(), "world") == 0 )
+ {
+ setScreen("analyze");
+ }
+
+ if( strcmp(getScreen(), "mainMenu") == 0 )
+ {
+ quit();
+ }
+
+}
+*/
+
+int eventAction()
+{
+ SDL_Event event;
+
+ while(SDL_WaitEvent(&event))
+ {
+ switch(event.type)
+ {
+ case SDL_KEYDOWN:
+ switch(event.key.keysym.sym)
+ {
+/*
+ case SDLK_ESCAPE:
+ action_esc();
+ return 0;
+ break;
+*/
+ case SDLK_F1:
+ if(!toggleFullscreen())return 0;
+ break;
+
+ default:
+ break;
+ }
+ break;
+
+ case SDL_USEREVENT:
+ switch(event.user.code)
+ {
+ case USR_EVT_TIMER:
+ drawScreen();
+ eventScreen();
+ break;
+
+ default:
+ break;
+ }
+ break;
+
+ // Zmena velikosti okna
+ case SDL_VIDEORESIZE:
+ screen = SDL_SetVideoMode(event.resize.w,event.resize.h, WIN_BPP, g_win_flags);
+
+ if(screen == NULL)
+ {
+ fprintf(stderr, "Nemozem zmenit rozlisene okna: %s\n",SDL_GetError());
+ return 0;
+ }
+ break;
+
+ // Pozadavek na ukonceni
+ case SDL_QUIT:
+ return -1;
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ return 0;
+}
+
+void eventSDL()
+{
+ while(1)
+ {
+ if ( eventAction() == -1 )return;
+ }
+}
+
+void quitSDL()
+{
+ printf("quit SDL..\n");
+ SDL_Quit();
+ isInterfaceInit = FALSE;
+}