diff options
author | Robert Schuster <thebohemian@gmx.net> | 2008-02-12 00:30:46 +0000 |
---|---|---|
committer | Robert Schuster <thebohemian@gmx.net> | 2008-02-12 00:30:46 +0000 |
commit | 4a0a8f2bbfcec5145178091c5703be7f5dfc034c (patch) | |
tree | fe94109b28c038c46ce5d0320b8cbc7ed31e1785 | |
parent | 9a5744657866150cbaf433bd3b32253fe26421ea (diff) |
kobodeluxe: Fixed and patches.
- provide default configuration file
- added patch that makes use of a default config file
- wire device screen size into default config file
- added a patch that allows complete game control with touchscreen
- added a patch that automatically swaps display dimensions at startup
-rw-r--r-- | packages/kobodeluxe/files/buildfix.patch | 21 | ||||
-rw-r--r-- | packages/kobodeluxe/files/default-config | 70 | ||||
-rw-r--r-- | packages/kobodeluxe/files/kobodeluxe-dimension-autoswap.patch | 236 | ||||
-rw-r--r-- | packages/kobodeluxe/files/kobodeluxe-menu-pointer.patch | 266 | ||||
-rw-r--r-- | packages/kobodeluxe/files/kobodeluxe-putenv.patch | 69 | ||||
-rw-r--r-- | packages/kobodeluxe/files/kobodeluxe-sysconf-support.patch | 84 | ||||
-rw-r--r-- | packages/kobodeluxe/kobodeluxe_0.5.1.bb | 26 |
7 files changed, 748 insertions, 24 deletions
diff --git a/packages/kobodeluxe/files/buildfix.patch b/packages/kobodeluxe/files/buildfix.patch deleted file mode 100644 index 01a97e14f2..0000000000 --- a/packages/kobodeluxe/files/buildfix.patch +++ /dev/null @@ -1,21 +0,0 @@ -Index: kobodeluxe-0.5.1/graphics/gfxengine.cpp -=================================================================== ---- kobodeluxe-0.5.1.orig/graphics/gfxengine.cpp 2008-02-10 03:02:29.000000000 +0100 -+++ kobodeluxe-0.5.1/graphics/gfxengine.cpp 2008-02-10 03:03:45.000000000 +0100 -@@ -25,6 +25,7 @@ - - #include <string.h> - #include <math.h> -+#include <stdlib.h> - - #include "gfxengine.h" - #include "filters.h" -@@ -765,7 +766,7 @@ - return 0; - - if(_centered && !_fullscreen) -- SDL_putenv((char *)"SDL_VIDEO_CENTERED=1"); -+ putenv((char *)"SDL_VIDEO_CENTERED=1"); - - log_printf(DLOG, "Opening screen...\n"); - if(!SDL_WasInit(SDL_INIT_VIDEO)) diff --git a/packages/kobodeluxe/files/default-config b/packages/kobodeluxe/files/default-config new file mode 100644 index 0000000000..4a8f5f7a96 --- /dev/null +++ b/packages/kobodeluxe/files/default-config @@ -0,0 +1,70 @@ +#-------------------------------------------- +# Kobo Deluxe 0.5.1 Configuration File +#-------------------------------------------- +# Switches - [no]<switch> +# Values - <key> [<value>|"<string>"] +#-------------------------------------------- +#--- System options -------------------------- +nologfile +logformat 0 +logverbosity 2 +#--- Input options -------------------------- +nojoystick +joystick_no 0 +mouse +mousemode 1 +nobroken_numdia +dia_emphasis 0 +noalways_fire +mousecapture +#--- Game options --------------------------- +scrollradar 2 +filter +timefilter 50 +countdown 5 +starfield 2 +stars 250 +overheatloud 100 +cannonloud 100 +#--- Sound settings ------------------------- +nosound +music +nocached_sounds +samplerate 8000 +latency 50 +mixquality 1 +vol 100 +intro_vol 100 +sfx_vol 100 +music_vol 30 +reverb 100 +vol_boost 0 +#--- Video settings ------------------------- +fullscreen +videodriver 0 +width WIDTH_HERE +height HEIGHT_HERE +autoswap +aspect 1 +depth 0 +maxfps 100 +maxfpsstrict 0 +buffer 0 +shadow +videomode -1 +vsync +videopages -1 +#--- Graphics settings ---------------------- +scalemode 0 +nodither +dither_type 2 +nobroken_rgba8 +alpha +brightness 100 +contrast 100 +#--- File paths ----------------------------- +files "" +gfx "" +sfx "" +scores "" +wait 30 diff --git a/packages/kobodeluxe/files/kobodeluxe-dimension-autoswap.patch b/packages/kobodeluxe/files/kobodeluxe-dimension-autoswap.patch new file mode 100644 index 0000000000..273e523103 --- /dev/null +++ b/packages/kobodeluxe/files/kobodeluxe-dimension-autoswap.patch @@ -0,0 +1,236 @@ +Index: KoboDeluxe-0.5.1/graphics/gfxengine.cpp +=================================================================== +--- KoboDeluxe-0.5.1.orig/graphics/gfxengine.cpp 2008-02-11 13:17:27.000000000 +0100 ++++ KoboDeluxe-0.5.1/graphics/gfxengine.cpp 2008-02-11 15:27:57.000000000 +0100 +@@ -135,11 +135,13 @@ + + _width = w; + _height = h; ++ + if(csengine) + cs_engine_set_size(csengine, w, h); + + if(was_showing) + show(); ++ + } + + void gfxengine_t::centered(int c) +@@ -759,33 +761,13 @@ + Display show/hide + ----------------------------------------------------------*/ + +-int gfxengine_t::show() ++/** Helper method that returns the flags value needed for ++ * SDL_SetVideoMode() and SDL_VideoModeOK(). ++ */ ++int gfxengine_t::video_flags() + { + int flags = 0; + +- if(!is_open) +- return -1; +- +- if(is_showing) +- return 0; +- +- if(_centered && !_fullscreen) +-#if HAVE_DECL_SDL_PUTENV +- SDL_putenv("SDL_VIDEO_CENTERED=1"); +-#elif defined(HAVE_PUTENV) +- putenv("SDL_VIDEO_CENTERED=1"); +-#else +- #error Neither SDL_putenv() nor putenv() are available. Fix it! +-#endif +- +- log_printf(DLOG, "Opening screen...\n"); +- if(!SDL_WasInit(SDL_INIT_VIDEO)) +- if(SDL_InitSubSystem(SDL_INIT_VIDEO) == -1) +- { +- log_printf(ELOG, "Failed to initialize SDL!\n"); +- return -2; +- } +- + switch(_driver) + { + case GFX_DRIVER_SDL2D: +@@ -830,11 +812,72 @@ + glSDL_VSync(_vsync); + flags |= xflags; + ++ return flags; ++} ++ ++bool gfxengine_t::check_mode_autoswap(int *w, int *h) ++{ ++ log_printf(VLOG, "Trying display modes %dx%d and %dx%d if the first fails.\n", *w, *h, *h, *w); ++ ++ int flags = video_flags(); ++ ++ SDL_Surface *test_surface = NULL; ++ ++ // On some platforms SDL_VideoModeOK() cannot be trusted unfortunately. ++ if(!(test_surface = SDL_SetVideoMode(*w, *h, _depth, flags))) ++ { ++ if(!(test_surface = SDL_SetVideoMode(*h, *w, _depth, flags))) ++ { ++ log_printf(ELOG, "Failed with both display mode. Giving up!\n"); ++ return false; ++ } ++ ++ int temp = *w; ++ *w = *h; ++ *h = temp; ++ ++ log_printf(VLOG, "Display dimensions swapped. Using %dx%d!\n", *w, *h); ++ } ++ else ++ log_printf(VLOG, "Stored display dimension worked. Using %dx%d!\n", *w, *h); ++ ++ SDL_FreeSurface(test_surface); ++ ++ return true; ++} ++ ++int gfxengine_t::show() ++{ ++ if(!is_open) ++ return -1; ++ ++ if(is_showing) ++ return 0; ++ ++ if(_centered && !_fullscreen) ++#if HAVE_DECL_SDL_PUTENV ++ SDL_putenv("SDL_VIDEO_CENTERED=1"); ++#elif defined(HAVE_PUTENV) ++ putenv("SDL_VIDEO_CENTERED=1"); ++#else ++ #error Neither SDL_putenv() nor putenv() are available. Fix it! ++#endif ++ ++ log_printf(DLOG, "Opening screen...\n"); ++ if(!SDL_WasInit(SDL_INIT_VIDEO)) ++ if(SDL_InitSubSystem(SDL_INIT_VIDEO) == -1) ++ { ++ log_printf(ELOG, "Failed to initialize SDL!\n"); ++ return -2; ++ } ++ ++ int flags = video_flags(); ++ + screen_surface = SDL_SetVideoMode(_width, _height, _depth, flags); + if(!screen_surface) + { +- log_printf(ELOG, "Failed to open display!\n"); +- return -3; ++ log_printf(ELOG, "Failed to open display with %dx%d! Giving up.\n", _width, _height); ++ return -3; + } + + if(_driver != GFX_DRIVER_GLSDL) +Index: KoboDeluxe-0.5.1/graphics/gfxengine.h +=================================================================== +--- KoboDeluxe-0.5.1.orig/graphics/gfxengine.h 2008-02-11 13:24:51.000000000 +0100 ++++ KoboDeluxe-0.5.1/graphics/gfxengine.h 2008-02-11 15:15:50.000000000 +0100 +@@ -54,6 +54,9 @@ + class gfxengine_t + { + friend class window_t; ++ ++ int video_flags(); ++ + public: + gfxengine_t(); + virtual ~gfxengine_t(); +@@ -135,6 +138,7 @@ + void title(const char *win, const char *icon); + + /* Display show/hide */ ++ bool check_mode_autoswap(int *, int *); + int show(); + void hide(); + +Index: KoboDeluxe-0.5.1/kobo.cpp +=================================================================== +--- KoboDeluxe-0.5.1.orig/kobo.cpp 2008-02-11 13:16:24.000000000 +0100 ++++ KoboDeluxe-0.5.1/kobo.cpp 2008-02-11 14:57:29.000000000 +0100 +@@ -641,8 +641,27 @@ + gengine->title("Kobo Deluxe " VERSION, "kobodl"); + gengine->driver((gfx_drivers_t)p->videodriver); + ++ // Initializes gfxengine with all kinds of display properties. ++ // We need this at this point to make the autoswap check work ++ // properly. Since these properties are independent of other ++ // values that is no problem. ++ gengine->mode(0, p->fullscreen); ++ gengine->doublebuffer(p->doublebuf); ++ gengine->pages(p->pages); ++ gengine->vsync(p->vsync); ++ gengine->shadow(p->shadow); ++ gengine->cursor(0); ++ ++ // Do the auto swap dance only if configured so. ++ if (prefs->autoswap) ++ { ++ if (!gengine->check_mode_autoswap(&p->width, &p->height)) ++ return -1; ++ } ++ + dw = p->width; + dh = p->height; ++ + if(p->fullscreen) + { + // This game assumes 1:1 pixel aspect ratio, or 4:3 +@@ -696,13 +715,6 @@ + yoffs = (int)((dh - gh) / 2 / gengine->yscale()); + gengine->size(dw, dh); + +- gengine->mode(0, p->fullscreen); +- gengine->doublebuffer(p->doublebuf); +- gengine->pages(p->pages); +- gengine->vsync(p->vsync); +- gengine->shadow(p->shadow); +- gengine->cursor(0); +- + gengine->period(game.speed); + sound.period(game.speed); + gengine->timefilter(p->timefilter * 0.01f); +Index: KoboDeluxe-0.5.1/prefs.cpp +=================================================================== +--- KoboDeluxe-0.5.1.orig/prefs.cpp 2008-02-11 14:28:01.000000000 +0100 ++++ KoboDeluxe-0.5.1/prefs.cpp 2008-02-11 14:30:15.000000000 +0100 +@@ -86,6 +86,7 @@ + desc("Display Driver"); + key("width", width, 640); desc("Horizontal Resolution"); + key("height", height, 480); desc("Vertical Resolution"); ++ yesno("autoswap", autoswap, 0); desc("Automatically swap display dimension"); + key("aspect", aspect, 1000); desc("Pixel Aspect Ratio"); + key("depth", depth, 0); desc("Display Depth"); + key("maxfps", max_fps, 100); desc("Maximum fps"); +Index: KoboDeluxe-0.5.1/prefs.h +=================================================================== +--- KoboDeluxe-0.5.1.orig/prefs.h 2008-02-11 14:28:01.000000000 +0100 ++++ KoboDeluxe-0.5.1/prefs.h 2008-02-11 14:31:24.000000000 +0100 +@@ -76,6 +76,7 @@ + int videodriver; //Internal video driver + int width; //Screen/window width + int height; //Screen/window height ++ int autoswap; // Automatically swap dimensions if initialization fails + int aspect; //Pixel aspect ratio * 1000 + int depth; //Bits per pixel + int max_fps; //Maximum fps +Index: KoboDeluxe-0.5.1/states.cpp +=================================================================== +--- KoboDeluxe-0.5.1.orig/states.cpp 2008-02-11 14:32:13.000000000 +0100 ++++ KoboDeluxe-0.5.1/states.cpp 2008-02-11 15:00:13.000000000 +0100 +@@ -117,6 +117,8 @@ + switch (button) + { + case BTN_EXIT: ++ gsm.push(&st_ask_exit); ++ break; + case BTN_CLOSE: + gsm.push(&st_main_menu); + break; diff --git a/packages/kobodeluxe/files/kobodeluxe-menu-pointer.patch b/packages/kobodeluxe/files/kobodeluxe-menu-pointer.patch new file mode 100644 index 0000000000..160d3ce896 --- /dev/null +++ b/packages/kobodeluxe/files/kobodeluxe-menu-pointer.patch @@ -0,0 +1,266 @@ +Index: KoboDeluxe-0.5.1/README +=================================================================== +--- KoboDeluxe-0.5.1.orig/README 2008-02-11 01:10:23.000000000 +0100 ++++ KoboDeluxe-0.5.1/README 2008-02-11 01:17:30.000000000 +0100 +@@ -39,6 +39,12 @@ + key diagonals. Escape enters the meny system, from where it is possi- + ble to change settings, start a new game or exit the game. + ++ In case the touchscreen support has been compiled in the menu can be ++ controlled by clicking the frame borders. Touching the inner part of ++ the screen is like a button press. In the game mode a click in the ++ upper right corner activates pause mode and the lower right corner es- ++ capes to the menu. ++ + OPTIONS + Note that all relevant options can be also configured in the config + file, which can be edited directly, or using the options menus in the +Index: KoboDeluxe-0.5.1/config.h +=================================================================== +--- KoboDeluxe-0.5.1.orig/config.h 2008-02-11 00:23:20.000000000 +0100 ++++ KoboDeluxe-0.5.1/config.h 2008-02-11 02:01:17.000000000 +0100 +@@ -95,6 +95,15 @@ + #define MARGIN 8 + + /* ++ * Fraction of the screen size in which clicks are not considered ++ * clicks but movements in that direction (as regarded from the ++ * center of the screen) or other special things (pause & exit). ++ * ++ * Used only in touchscreen mode. ++ */ ++#define POINTER_MARGIN_PERCENT 10 ++ ++/* + * (In XKobo, WSIZE was used where this is + * used now; in the game logic code.) + * +Index: KoboDeluxe-0.5.1/configure.in +=================================================================== +--- KoboDeluxe-0.5.1.orig/configure.in 2008-02-11 00:37:18.000000000 +0100 ++++ KoboDeluxe-0.5.1/configure.in 2008-02-11 00:48:59.000000000 +0100 +@@ -195,6 +195,16 @@ + CXXFLAGS="$CXXFLAGS -DHAVE_OPENGL" + fi + ++AC_ARG_ENABLE( ++ touchscreen, ++ [AS_HELP_STRING( ++ [--enable-touchscreen], ++ [Compile menu control support suitable for touchscreens (default is no)])], ++ AC_DEFINE( ++ [ENABLE_TOUCHSCREEN], ++ [1], ++ [Set to 1 if the menusystem should support touchscreen input]), ++ []) + + dnl------------------------------------------------------- + dnl Checks for header files. +Index: KoboDeluxe-0.5.1/kobo.cpp +=================================================================== +--- KoboDeluxe-0.5.1.orig/kobo.cpp 2008-02-11 00:24:57.000000000 +0100 ++++ KoboDeluxe-0.5.1/kobo.cpp 2008-02-11 16:02:23.000000000 +0100 +@@ -28,6 +28,8 @@ + // Use this to benchmark and create a new percentage table! + #undef TIME_PROGRESS + ++#include <aconfig.h> ++ + #include <stdio.h> + #include <stdlib.h> + #include <unistd.h> +@@ -671,6 +673,10 @@ + gh = dh; + } + ++#if ENABLE_TOUCHSCREEN ++ gengine->setup_pointer_margin(dw, dh); ++#endif ++ + // Scaling has 16ths granularity, so tiles scale properly! + gengine->scale((int)((gw * 16 + 8) / SCREEN_WIDTH) / 16.f, + (int)((gh * 16 + 8) / SCREEN_HEIGHT) / 16.f); +@@ -1599,6 +1605,23 @@ + { + } + ++#ifdef ENABLE_TOUCHSCREEN ++void kobo_gfxengine_t::setup_pointer_margin(int dw, int dh) ++{ ++ // Precalculates the border ranges. Mouse clicks outside these are handled ++ // specially. ++ pointer_margin_width_min = dw * POINTER_MARGIN_PERCENT / 100; ++ pointer_margin_width_max = dw - dw * POINTER_MARGIN_PERCENT / 100; ++ pointer_margin_height_min = dh * POINTER_MARGIN_PERCENT / 100; ++ pointer_margin_height_max = dh - dh * POINTER_MARGIN_PERCENT / 100; ++ ++ log_printf(VLOG, "Pointer margin range [%d, %d, %d, %d]\n", ++ pointer_margin_width_min, ++ pointer_margin_width_max, ++ pointer_margin_height_min, ++ pointer_margin_height_max); ++} ++#endif + + void kobo_gfxengine_t::frame() + { +@@ -1800,11 +1823,57 @@ + mouse_y - MARGIN - WSIZE/2); + break; + case SDL_MOUSEBUTTONDOWN: +- mouse_x = (int)(ev.motion.x / gengine->xscale()) - km.xoffs; +- mouse_y = (int)(ev.motion.y / gengine->yscale()) - km.yoffs; +- gsm.press(BTN_FIRE); ++ mouse_x = (int)(ev.button.x / gengine->xscale()) - km.xoffs; ++ mouse_y = (int)(ev.button.y / gengine->yscale()) - km.yoffs; + if(prefs->use_mouse) + { ++#if ENABLE_TOUCHSCREEN ++ if (ev.motion.x <= pointer_margin_width_min) ++ { ++ gsm.press(BTN_LEFT); ++ pointer_margin_used = true; ++ } else if (ev.motion.x >= pointer_margin_width_max) ++ { ++ // Upper right corner invokes pause. ++ // Lower right corner invokes exit. ++ // Otherwise it is just 'right'. :) ++ if (ev.motion.y <= pointer_margin_height_min) ++ { ++ gsm.press(BTN_PAUSE); ++ gamecontrol.press(BTN_PAUSE); ++ } ++ else ++ gsm.press((ev.motion.y >= pointer_margin_height_max ++ ? BTN_EXIT ++ : BTN_RIGHT)); ++ ++ pointer_margin_used = true; ++ ++ } ++ ++ if (ev.motion.y <= pointer_margin_height_min) ++ { ++ // Handle as 'up' only if it was not in the 'pause' area. ++ // Still handle as clicked, so 'fire' will not kick in. ++ if (ev.motion.x < pointer_margin_width_max) ++ gsm.press(BTN_UP); ++ pointer_margin_used = true; ++ } else if (ev.motion.y >= pointer_margin_height_max) ++ { ++ // Handle as 'down' only if it was not in the 'exit' area. ++ // Still handle as clicked, so 'fire' will not kick in. ++ if (ev.motion.x < pointer_margin_width_max) ++ gsm.press(BTN_DOWN); ++ ++ pointer_margin_used = true; ++ } ++ ++ if (!pointer_margin_used) ++ gsm.press(BTN_FIRE); ++#else ++ gsm.press(BTN_FIRE); ++#endif ++ + gamecontrol.mouse_position( + mouse_x - 8 - MARGIN - WSIZE/2, + mouse_y - MARGIN - WSIZE/2); +@@ -1824,10 +1893,24 @@ + } + break; + case SDL_MOUSEBUTTONUP: +- mouse_x = (int)(ev.motion.x / gengine->xscale()) - km.xoffs; +- mouse_y = (int)(ev.motion.y / gengine->yscale()) - km.yoffs; ++ mouse_x = (int)(ev.button.x / gengine->xscale()) - km.xoffs; ++ mouse_y = (int)(ev.button.y / gengine->yscale()) - km.yoffs; + if(prefs->use_mouse) + { ++#if ENABLE_TOUCHSCREEN ++ // Resets all kinds of buttons that might have been activated by ++ // clicking in the pointer margin. ++ if (pointer_margin_used) ++ { ++ gsm.release(BTN_EXIT); ++ gsm.release(BTN_LEFT); ++ gsm.release(BTN_RIGHT); ++ gsm.release(BTN_UP); ++ gsm.release(BTN_DOWN); ++ pointer_margin_used = false; ++ } ++#endif ++ + gamecontrol.mouse_position( + mouse_x - 8 - MARGIN - WSIZE/2, + mouse_y - MARGIN - WSIZE/2); +@@ -2078,6 +2161,19 @@ + int main(int argc, char *argv[]) + { + int cmd_exit = 0; ++ ++ printf(PACKAGE " - " VERSION " (touchscreen support: %s)\n", ++ (ENABLE_TOUCHSCREEN ? "yes" : "no")); ++ puts("Copyright (c) 1995, 1996 Akira Higuchi\n" ++ "Copyright (C) 1997 Masanao Izumo\n" ++ "Copyright (C) 1999-2001 Simon Peter\n" ++ "Copyright (C) 2002 Florian Schulze\n" ++ "Copyright (C) 2002 Jeremy Sheeley\n" ++ "Copyright (C) 2005 Erik Auerswald\n" ++ "Copyright (c) 1999-2007 David Olofson\n" ++ "This is free software; see the source for copying conditions. There is NO\n" ++ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"); ++ + atexit(emergency_close); + signal(SIGTERM, breakhandler); + signal(SIGINT, breakhandler); +Index: KoboDeluxe-0.5.1/kobo.h +=================================================================== +--- KoboDeluxe-0.5.1.orig/kobo.h 2008-02-11 00:31:23.000000000 +0100 ++++ KoboDeluxe-0.5.1/kobo.h 2008-02-11 02:19:29.000000000 +0100 +@@ -23,6 +23,8 @@ + #ifndef _KOBO_H_ + #define _KOBO_H_ + ++#include <aconfig.h> ++ + #include "gfxengine.h" + #include "window.h" + #include "display.h" +@@ -45,11 +47,25 @@ + + class kobo_gfxengine_t : public gfxengine_t + { ++#if ENABLE_TOUCHSCREEN ++ bool pointer_margin_used; ++ ++ int pointer_margin_width_min; ++ int pointer_margin_width_max; ++ int pointer_margin_height_min; ++ int pointer_margin_height_max; ++#endif ++ + void frame(); + void pre_render(); + void post_render(); + public: + kobo_gfxengine_t(); ++ ++#if ENABLE_TOUCHSCREEN ++ void setup_pointer_margin(int, int); ++#endif ++ + }; + + extern kobo_gfxengine_t *gengine; +Index: KoboDeluxe-0.5.1/states.cpp +=================================================================== +--- KoboDeluxe-0.5.1.orig/states.cpp 2008-02-11 03:06:41.000000000 +0100 ++++ KoboDeluxe-0.5.1/states.cpp 2008-02-11 15:42:55.000000000 +0100 +@@ -963,8 +963,6 @@ + break; + + case BTN_FIRE: +- if(!prefs->use_joystick) +- break; + case BTN_START: + case BTN_SELECT: + sound.ui_ok(); diff --git a/packages/kobodeluxe/files/kobodeluxe-putenv.patch b/packages/kobodeluxe/files/kobodeluxe-putenv.patch new file mode 100644 index 0000000000..05f7c72f81 --- /dev/null +++ b/packages/kobodeluxe/files/kobodeluxe-putenv.patch @@ -0,0 +1,69 @@ +Index: KoboDeluxe-0.5.1/configure.in +=================================================================== +--- KoboDeluxe-0.5.1.orig/configure.in 2008-02-10 12:27:11.000000000 +0100 ++++ KoboDeluxe-0.5.1/configure.in 2008-02-10 15:50:11.000000000 +0100 +@@ -159,7 +159,6 @@ + ) + LIBS="$LIBS -lSDL_image" + +- + dnl------------------------------------------------------- + dnl Checks for OpenGL + dnl------------------------------------------------------- +@@ -214,13 +213,18 @@ + dnl------------------------------------------------------- + dnl Checks for library functions. + dnl------------------------------------------------------- ++dnl SDL_putenv may not be available in all SDL ports ++AC_CHECK_DECLS(SDL_putenv,,,[#include <SDL.h>]) ++ + AC_CHECK_FUNCS(strdup strstr strchr strrchr) + AC_CHECK_FUNCS(snprintf _snprintf vsnprintf _vsnprintf) + AC_CHECK_FUNCS(pow sqrt) + AC_CHECK_FUNCS(munmap mkdir select stat) + AC_CHECK_FUNCS(atexit floor memmove memset memcmp) +-AC_CHECK_FUNCS(gettimeofday) ++AC_CHECK_FUNCS(gettimeofday putenv) + AC_CHECK_FUNCS(getegid setgid) ++ ++ + AC_FUNC_MEMCMP + AC_FUNC_STRTOD + AC_FUNC_VPRINTF +Index: KoboDeluxe-0.5.1/graphics/gfxengine.cpp +=================================================================== +--- KoboDeluxe-0.5.1.orig/graphics/gfxengine.cpp 2008-02-10 12:41:31.000000000 +0100 ++++ KoboDeluxe-0.5.1/graphics/gfxengine.cpp 2008-02-10 15:58:06.000000000 +0100 +@@ -21,10 +21,15 @@ + + #define DBG(x) x + ++#include <aconfig.h> ++ + #include "logger.h" + + #include <string.h> + #include <math.h> ++#if not (HAVE_DECL_SDL_PUTENV) and defined (HAVE_PUTENV) ++#include <stdlib.h> ++#endif + + #include "gfxengine.h" + #include "filters.h" +@@ -764,8 +769,14 @@ + if(is_showing) + return 0; + +- if(_centered && !_fullscreen) +- SDL_putenv((char *)"SDL_VIDEO_CENTERED=1"); ++ if(_centered && !_fullscreen) ++#if HAVE_DECL_SDL_PUTENV ++ SDL_putenv("SDL_VIDEO_CENTERED=1"); ++#elif defined(HAVE_PUTENV) ++ putenv("SDL_VIDEO_CENTERED=1"); ++#else ++ #error Neither SDL_putenv() nor putenv() are available. Fix it! ++#endif + + log_printf(DLOG, "Opening screen...\n"); + if(!SDL_WasInit(SDL_INIT_VIDEO)) diff --git a/packages/kobodeluxe/files/kobodeluxe-sysconf-support.patch b/packages/kobodeluxe/files/kobodeluxe-sysconf-support.patch new file mode 100644 index 0000000000..1f62b31d71 --- /dev/null +++ b/packages/kobodeluxe/files/kobodeluxe-sysconf-support.patch @@ -0,0 +1,84 @@ +Index: KoboDeluxe-0.5.1/configure.in +=================================================================== +--- KoboDeluxe-0.5.1.orig/configure.in 2008-02-10 20:51:37.000000000 +0100 ++++ KoboDeluxe-0.5.1/configure.in 2008-02-10 21:40:09.000000000 +0100 +@@ -36,6 +36,7 @@ + SCOREDIR='$(sharedstatedir)/kobo-deluxe/scores' + CONFIGDIR='HOME>>' + CONFIGFILE='.kobodlrc' ++USE_SYSCONF=1 + EXEFILE=kobodl + case "$target_os" in + linux*) +@@ -57,6 +58,7 @@ + SCOREDIR='EXE>>scores' + CONFIGDIR='EXE>>' + CONFIGFILE='kobodl.cfg' ++ USE_SYSCONF=0 + EXEFILE=kobodl.exe + MATHLIB="" + ;; +@@ -68,6 +70,7 @@ + SCOREDIR='EXE>>scores' + CONFIGDIR='EXE>>' + CONFIGFILE='kobodl.cfg' ++ USE_SYSCONF=0 + EXEFILE=kobodl.exe + MATHLIB="" + ;; +@@ -105,10 +108,12 @@ + AM_CONDITIONAL(BUILD_MACOSX_BUNDLE, test x$build_macosx_bundle = xyes) + AM_CONDITIONAL(BUILD_SIMPLE_BUNDLE, test x$build_simple_bundle = xyes) + AM_CONDITIONAL(UNIX_SCOREDIR, test x$unix_scoredir = xyes) ++AC_DEFINE_UNQUOTED([USE_SYSCONF], [$USE_SYSCONF], [Define to 1 to use Unix-style sysconf dir for default configuration.]) + AC_SUBST(DATADIR) + AC_SUBST(SCOREDIR) + AC_SUBST(CONFIGDIR) + AC_SUBST(CONFIGFILE) ++AC_SUBST(KOBO_SYSCONF) + AC_SUBST(EXEFILE) + AC_SUBST(MATHLIB) + +Index: KoboDeluxe-0.5.1/kobo.cpp +=================================================================== +--- KoboDeluxe-0.5.1.orig/kobo.cpp 2008-02-10 20:57:32.000000000 +0100 ++++ KoboDeluxe-0.5.1/kobo.cpp 2008-02-10 21:27:22.000000000 +0100 +@@ -1293,9 +1293,38 @@ + FILE *f = fmap->fopen(KOBO_CONFIG_DIR "/" KOBO_CONFIG_FILE, "r"); + if(f) + { ++ log_puts(VLOG, "Loading personal configuration from: "\ ++ KOBO_CONFIG_DIR "/" KOBO_CONFIG_FILE "\n"); + p->read(f); + fclose(f); + } ++#if USE_SYSCONF ++ /* On Unixen, where they have SYSCONF_DIR (usually /etc) try to get ++ * the default configuration from a file stored there before ++ * giving up. ++ * ++ * This gives packagers a chance to provide a proper default ++ * (playable) configuration for all those little Linux-based ++ * gadgets that are flying around. ++ */ ++ else ++ { ++ f = fmap->fopen(SYSCONF_DIR "/kobo-deluxe/default-config", "r"); ++ if(f) ++ { ++ log_puts(VLOG, "Loading configuration defaults from: "\ ++ SYSCONF_DIR "/kobo-deluxe/default-config\n"); ++ ++ p->read(f); ++ fclose(f); ++ } ++ else ++ log_puts(VLOG, "Using built-in configuration defaults.\n"); ++ ++ } ++#else ++ log_puts(VLOG, "Using built-in configuration defaults.\n"); ++#endif + } + + diff --git a/packages/kobodeluxe/kobodeluxe_0.5.1.bb b/packages/kobodeluxe/kobodeluxe_0.5.1.bb index 25f2f3ceb6..cc3f85bd19 100644 --- a/packages/kobodeluxe/kobodeluxe_0.5.1.bb +++ b/packages/kobodeluxe/kobodeluxe_0.5.1.bb @@ -5,7 +5,7 @@ LICENSE = "GPL" AUTHOR = "David Olofson <david@olofson.net>" HOMEPAGE = "http://olofson.net/kobodl" -PR = "r1" +PR = "r3" DEPENDS = "libsdl-image virtual/libsdl" @@ -13,7 +13,11 @@ RDEPENDS_${PN} = "${PN}-data" SRC_URI = "http://olofson.net/kobodl/download/KoboDeluxe-${PV}.tar.bz2 \ file://debian-kobo.patch;patch=1 \ - file://buildfix.patch;patch=1 \ + file://kobodeluxe-putenv.patch;patch=1 \ + file://kobodeluxe-sysconf-support.patch;patch=1 \ + file://kobodeluxe-menu-pointer.patch;patch=1 \ + file://kobodeluxe-dimension-autoswap.patch;patch=1 \ + file://default-config \ " S = "${WORKDIR}/KoboDeluxe-${PV}" @@ -22,10 +26,26 @@ inherit autotools export SDL_CONFIG = "${STAGING_BINDIR_CROSS}/sdl-config" -EXTRA_OECONF = "--disable-opengl --disable-sdltest" +EXTRA_OECONF = "--disable-opengl --disable-sdltest --enable-touchscreen" + +do_configure_prepend() { + sed -i \ + -e "s|width WIDTH_HERE|width ${MACHINE_DISPLAY_WIDTH_PIXELS}|" \ + -e "s|height HEIGHT_HERE|height ${MACHINE_DISPLAY_HEIGHT_PIXELS}|" \ + ${WORKDIR}/default-config +} + +do_install_append() { + # Provide a default (working) configuration file + install -d ${D}${sysconfdir}/kobo-deluxe + install -m 755 ${WORKDIR}/default-config ${D}${sysconfdir}/kobo-deluxe +} PACKAGES += "${PN}-data" +FILES_${PN} += "${sysconfdir}" +CONFFILES_${PN} = "${sysconfdir}/kobo-deluxe/default-config" + FILES_${PN}-data = "${datadir}" PACKAGE_ARCH_${PN}-data = "all" |