=== modified file 'common.mak' --- common.mak 2007-12-26 04:19:37 +0000 +++ common.mak 2007-12-27 19:00:37 +0000 @@ -57,6 +57,6 @@ .c.o: ; $(C) $(STDFLAGS) $(CFLAGS) -c $< DO_MAKE = @for i in $(SUBDIRS); do $(MAKE) -C $$i || break; done -DO_MAKECLEAN = @for i in `ls | grep -v '[^a-z0-9]'`; do $(MAKE) -C $$i clean; done +DO_MAKECLEAN = @find ./ -mindepth 2 -maxdepth 2 -name 'Makefile' -type f | sed 's/[mM]akefile$$//g' | xargs -I '{}' make -C '{}' clean LIBTOOL_OPTS = --tag=CXX === modified file 'plugins/feature/common-feature.cpp' --- plugins/feature/common-feature.cpp 2007-12-27 01:15:54 +0000 +++ plugins/feature/common-feature.cpp 2007-12-27 12:55:07 +0000 @@ -60,7 +60,7 @@ release_exclusive_access(); S_SSaverobj::get_instance()->ResetCounter(); - + Render * render = S_Render::get_instance(); render->prepare_new_image(); render->clear(); render->draw("clear"); === modified file 'plugins/input/keyboard/keyboard.cpp' --- plugins/input/keyboard/keyboard.cpp 2007-11-17 23:07:41 +0000 +++ plugins/input/keyboard/keyboard.cpp 2007-12-27 14:25:21 +0000 @@ -4,6 +4,7 @@ #ifdef use_sdl #include "common.hpp" +#include "renderer.hpp" #endif using std::list; @@ -75,9 +76,13 @@ string Keyboard::getSDLkey() { SDL_KeyboardEvent event; + Render * ren = S_Render::get_instance(); + if (SDL_WaitEvent(reinterpret_cast(&event))){ + if (event.type == SDL_VIDEOEXPOSE){ + ren->device->refresh_screen(); + } - if (SDL_WaitEvent(reinterpret_cast(&event))) { - if (event.type == SDL_KEYDOWN) { + else if (event.type == SDL_KEYDOWN) { return get_key_string(event.keysym.sym); } else if (event.type == SDL_KEYUP && event.keysym.sym == SDLK_UNKNOWN ) { char kbuf[10] = {0}; @@ -95,7 +100,7 @@ this_time = (unsigned long long) tv.tv_sec*1000+tv.tv_usec/1000; if (next_time <= this_time) { next_time = (unsigned long long) tv.tv_sec*1000+tv.tv_usec/1000 + 200; - S_Touch::get_instance()->got_input(x, y); + S_Touch::get_instance()->got_input(ren->device->convert_xmouse(x), ren->device->convert_ymouse(y)); return "touch_input"; } } === modified file 'plugins/output/opengl/SDL_GLout.cpp' --- plugins/output/opengl/SDL_GLout.cpp 2007-12-21 20:47:44 +0000 +++ plugins/output/opengl/SDL_GLout.cpp 2007-12-27 12:55:07 +0000 @@ -95,6 +95,42 @@ str = " " + str; return ( str.find(" " + name + " ", 0) != std::string::npos); } + +void SDL_GLout::PrintGLStuff(){ //Prints various OpenGL details + const char *vendor = reinterpret_cast(glGetString(GL_VENDOR)); + const char *renderer = reinterpret_cast(glGetString(GL_RENDERER)); + const char *version = reinterpret_cast( glGetString(GL_VERSION)); + const char *p = reinterpret_cast(glGetString(GL_EXTENSIONS)); + if (vendor == NULL || renderer == NULL || version == NULL || p == NULL){ + fprintf(stderr,OBJOUTPUT("Critical error: glGetString failed\n")); + ::exit(1); + } + //let's format the extension list a little better + std::string str(p); + std::string replacement1("\n "); + std::string replacement2(", "); + unsigned int z = 0, x = 0; + while ((z = str.find(" ", z))!= std::string::npos && z+1 < str.size()){ + if (x == 2){ + str.replace(z,1,replacement2 + replacement1); + x = 0; + z+=replacement1.size() + replacement2.size(); + } + else{ + str.replace(z,1,replacement2); + x++; + z+=replacement2.size(); + } + } + + fprintf(stderr,OBJOUTPUT("Opengl vendor: %s\n"), vendor); + fprintf(stderr,OBJOUTPUT("Opengl renderer: %s\n"), renderer); + fprintf(stderr,OBJOUTPUT("Opengl version: %s\n"), version); + fprintf(stderr,OBJOUTPUT("Opengl extensions:%s%s\n\n"), replacement1.c_str(),str.c_str()); + +} + + bool SDL_GLout::Init(int x, int y, bool fullscreen, const std::string& caption, bool handle_input, int _real_x, int _real_y){ //purpose of this is to protect with locks the //real init stuff pthread_mutex_lock(&initmutex); @@ -121,9 +157,11 @@ pthread_mutex_lock(&drawmutex); pthread_mutex_lock(&inputmutex); quit = true; - pthread_mutex_unlock(&drawmutex); pthread_mutex_unlock(&inputmutex); + SDL_Event event; + SDL_PushEvent(&event); pthread_join(input_thread, NULL); + pthread_mutex_unlock(&drawmutex); pthread_join(draw_thread, NULL); } @@ -138,15 +176,15 @@ x = real_x; y = real_y; } - printf("real_x is %d, real_y is %d\n", real_x, real_y); + bool fullscreen = requestedfullscreen; std::string caption = sdl_caption; - printf("Parameters x-> %d\ny-> %d\ncaption-> %s\n", x,y,caption.c_str()); + printf(OBJOUTPUT("Parameters x-> %d\ny-> %d\ncaption-> %s\n"), x,y,caption.c_str()); //we start by creating the SDL contest if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_EVENTTHREAD) < 0) { - fprintf(stderr, "Video initialization failed: %s\n", SDL_GetError()); + fprintf(stderr, OBJOUTPUT("Video initialization failed: %s\n"), SDL_GetError()); return false; } SDL_SysWMinfo info; @@ -163,11 +201,10 @@ info.info.x11.unlock_func(); if (x11_width < x || x11_height < y) { - fprintf(stderr, "Requested resolution is higher than X resolution!\n"); + fprintf(stderr, OBJOUTPUT("Requested resolution is higher than X resolution!\n")); SDL_Quit(); - ::exit(1); + return false; } - } screeninfo = SDL_GetVideoInfo(); @@ -213,7 +250,7 @@ glClearColor(0.0f, 0.0f, 0.0f, 0.0f); //Clear screen glDisable(GL_DEPTH); //We only do 2D rendering - + PrintGLStuff(); if (openglmode != 2 && !CheckGLExt("GL_ARB_pixel_buffer_object") && !CheckGLExt("GL_EXT_pixel_buffer_object")){ fprintf(stderr, OBJOUTPUT("SDL_GLout::This video card does not support the extension: GL_ARB_pixel_buffer_object\n")); @@ -395,7 +432,7 @@ glDeleteTextures(NUM_OF_LAYOUTS, texnums); thisobj->_glDeleteBuffersARB(NUM_OF_LAYOUTS, bufnums); - + SDL_Quit(); pthread_mutex_unlock(&thisobj->drawmutex); return 0; }; @@ -407,17 +444,21 @@ fprintf(stderr, OBJOUTPUT("SDL event handling is disabled\n")); return 0; } + else + fprintf(stderr, OBJOUTPUT("SDL event handling is enabled\n")); SDL_Event event[1]; SDL_EventState(SDL_SYSWMEVENT,SDL_ENABLE); - thisobj->WaitForInit(); + if(!thisobj->WaitForInit()) + return 0; pthread_mutex_lock(&thisobj->inputmutex); SDL_InitSubSystem( SDL_INIT_EVENTTHREAD); thisobj->KeyboardLoopRunning = true; while (!thisobj->quit) { pthread_mutex_unlock(&thisobj->inputmutex); if (SDL_WaitEvent(event)){ - pthread_mutex_lock(&thisobj->inputmutex); + if (thisobj->quit) + break; switch (event[0].type) { case SDL_QUIT: thisobj->HoldDrawing(); @@ -439,9 +480,9 @@ break; case SDLK_F1: - thisobj->HoldDrawing(); - thisobj->NeedsFullScreenToggling = true; - thisobj->ReleaseDrawing(); +// thisobj->HoldDrawing(); +// thisobj->NeedsFullScreenToggling = true; +// thisobj->ReleaseDrawing(); break; default: === modified file 'plugins/output/opengl/SDL_GLout.h' --- plugins/output/opengl/SDL_GLout.h 2007-12-21 20:47:44 +0000 +++ plugins/output/opengl/SDL_GLout.h 2007-12-27 12:55:07 +0000 @@ -167,6 +167,7 @@ SDL_GLout();//we hide the constructor, since this is going to be "singletoned" bool _Init();//for internal use only bool CheckGLExt(const std::string& name); + void PrintGLStuff(); bool IsPo2(int value); static void * OpenGLThreadLoop(void * ptr); @@ -244,6 +245,11 @@ void MakeActionsExpire(); void FullScreenToggle(); bool GetFullScreenStatus(); + void RefreshScreen(){ + HoldDrawing(); + NeedsDrawing = true; + ReleaseDrawing(); + } static SDL_GLout *get_instance(){ //Singleton pthread_mutex_lock(&sdl_glout_singletonmutex); === modified file 'plugins/output/opengl/opengl.cpp' --- plugins/output/opengl/opengl.cpp 2007-12-21 21:46:31 +0000 +++ plugins/output/opengl/opengl.cpp 2007-12-27 14:28:05 +0000 @@ -15,6 +15,8 @@ //printf("Homedir is %s\n", conf->p_homedir().c_str()); int rw = glconf->p_opengl_w(); int rh = glconf->p_opengl_h(); + x_ratio = double(width)/(rw!=0?rw:width); + y_ratio = double(height)/(rh!=0?rh:height); #ifdef use_x11 XInitThreads();//TODO: make sure it actually inits multithreading mode @@ -69,8 +71,10 @@ rgbsurface = SDL_CreateRGBSurface(SDL_SRCALPHA, width, height, 32, 0,0,0,0/*0xFF000000, 0x00FF0000, 0x0000FF00,0x000000FF*/ ); - SDLGL->Init(width,height, static_cast(conf->p_fullscreen()), "MMS", false, rw, rh); - SDLGL->WaitForInit(); + bool handleinput = conf->p_input() != "keyboard"; + SDLGL->Init(width,height, static_cast(conf->p_fullscreen()), "MMS", handleinput, rw, rh); + if(!SDLGL->WaitForInit()) + std::exit(1); render = S_Render::get_instance(); SDLGL->SetLayoutRGB(0,1,1,1); firstdraw = true; @@ -228,6 +232,18 @@ SDLGL->ReleaseDrawing(); //we don't block here } +void OpenGLdev::refresh_screen(){ + SDLGL->RefreshScreen(); +} + +unsigned int OpenGLdev::convert_xmouse(int x) { + return static_cast(double(x)*x_ratio); +} + +unsigned int OpenGLdev::convert_ymouse(int y) { + return static_cast(double(y)*y_ratio); +} + === modified file 'plugins/output/opengl/opengl.hpp' --- plugins/output/opengl/opengl.hpp 2007-12-21 21:46:31 +0000 +++ plugins/output/opengl/opengl.hpp 2007-12-27 13:44:30 +0000 @@ -21,6 +21,8 @@ int height; bool firstdraw; void run(){}; + double x_ratio; + double y_ratio; public: @@ -78,6 +80,10 @@ void reset_layout_attribs_nowait(int layoutnum ); void reset_layout_attribs(int layoutnum ); void make_actions_expire(int layoutnum); + void refresh_screen(); + unsigned int convert_xmouse(int x); + unsigned int convert_ymouse(int y); + protected: // Config *conf; === modified file 'plugins/output/render_device.hpp' --- plugins/output/render_device.hpp 2007-12-21 21:46:31 +0000 +++ plugins/output/render_device.hpp 2007-12-27 13:47:43 +0000 @@ -52,6 +52,8 @@ virtual ~RenderDevice() {}; RenderDevice(); + virtual unsigned int convert_xmouse(int x) {return x;} + virtual unsigned int convert_ymouse(int y) {return y;} //opengl specific @@ -84,6 +86,7 @@ virtual void reset_layout_attribs_nowait(int = -1) {}; virtual void reset_layout_attribs(int = -1) {}; virtual void make_actions_expire(int) {}; + virtual void refresh_screen(){}; protected: Config *conf; === modified file 'plugins/output/sdl/sdlout.cpp' --- plugins/output/sdl/sdlout.cpp 2007-12-27 01:15:54 +0000 +++ plugins/output/sdl/sdlout.cpp 2007-12-27 12:55:07 +0000 @@ -51,6 +51,9 @@ void SDLdev::init() { +#ifdef use_x11 + XInitThreads();// enable thead safe mode in X +#endif if(SDL_Init(SDL_INIT_VIDEO) < 0) { print_critical(dgettext("mms-sdl", "Could not initialize") + std::string(" ") + SDL_GetError(), "SDL"); std::exit(1); === modified file 'theme.cpp' --- theme.cpp 2007-12-21 20:47:44 +0000 +++ theme.cpp 2007-12-27 12:55:07 +0000 @@ -61,7 +61,7 @@ render->device->animation_section_begin(); int curlayer = render->device->get_current_layer(); - render->device->switch_to_layer(1); + render->device->switch_to_layer(curlayer+1); render->device->reset_layout_attribs_nowait(); render->device->animation_fade(0,1,40,1); render->device->animation_section_end(); @@ -127,10 +127,9 @@ } exit_loop = false; - + render->device->animation_section_begin(); + render->device->layer_active_no_wait(false); render->device->switch_to_layer(curlayer); - render->device->layer_active_no_wait(false); - render->device->animation_section_begin(); render->device->animation_fade(0,1,80,curlayer); render->device->animation_section_end();