X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=maemo%2Fhildon.c;h=43e3e15e0154fbf4d6fd9a240d4cfed43a05a25b;hp=ba035d175b74aec940ec64b455fcb3b63ea7b194;hb=3601e36bd526c63c842f68b2ff6cac82954e5e7e;hpb=76f7048eff4f5357df048268e40b5bc6b9387fe5 diff --git a/maemo/hildon.c b/maemo/hildon.c index ba035d17..43e3e15e 100644 --- a/maemo/hildon.c +++ b/maemo/hildon.c @@ -4,23 +4,25 @@ #include #include #include + #include "plugin_lib.h" #include "main.h" +#include "plat.h" #include "../libpcsxcore/psemu_plugin_defs.h" +#include "libpicofe/readpng.h" +#include "maemo_common.h" #define X_RES 800 #define Y_RES 480 #define D_WIDTH 640 #define D_HEIGHT 480 -int g_layer_x = (X_RES - D_WIDTH) / 2; -int g_layer_y = (Y_RES - D_HEIGHT) / 2; -int g_layer_w = D_WIDTH, g_layer_h = D_HEIGHT; - static GdkImage *image; static HildonAnimationActor *actor; static GtkWidget *window, *drawing; +static int pl_buf_w, pl_buf_h; +static int sens, y_def; static int keymap[65536]; // map psx4m compatible keymap to PSX keys @@ -82,11 +84,24 @@ window_key_proxy(GtkWidget *widget, break; case 19: if (event->type == GDK_KEY_PRESS) - emu_set_action(SACTION_SAVE_STATE); + { + emu_save_state(state_slot); + char buf[MAXPATHLEN]; + sprintf (buf,"/opt/maemo/usr/games/screenshots%s.%3.3d",file_name,state_slot); + writepng(buf, image->mem, pl_buf_w,pl_buf_h); + } return; case 20: if (event->type == GDK_KEY_PRESS) - emu_set_action(SACTION_LOAD_STATE); + emu_load_state(state_slot); + return; + case 21: + if (event->type == GDK_KEY_PRESS) + state_slot=(state_slot<9)?state_slot+1:0; + return; + case 22: + if (event->type == GDK_KEY_PRESS) + state_slot=(state_slot>0)?state_slot-1:8; return; } @@ -127,6 +142,15 @@ void maemo_init(int *argc, char ***argv) fclose(pFile); } + pFile = fopen("/opt/psx4m/config", "r"); + if (NULL != pFile) { + fscanf(pFile, "%d %d",&sens,&y_def); + fclose(pFile); + } else { + sens=150; + y_def=500; //near 45 degrees =) + } + gtk_init (argc, argv); window = hildon_stackable_window_new (); @@ -142,7 +166,10 @@ void maemo_init(int *argc, char ***argv) GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK); actor = HILDON_ANIMATION_ACTOR (hildon_animation_actor_new()); - hildon_animation_actor_set_position (actor, (X_RES - D_WIDTH)/2, (Y_RES - D_HEIGHT)/2 ); + if (g_maemo_opts & 2) + hildon_animation_actor_set_position (actor, 0, 0 ); + else + hildon_animation_actor_set_position (actor, (X_RES - D_WIDTH)/2, (Y_RES - D_HEIGHT)/2 ); hildon_animation_actor_set_parent (actor, GTK_WINDOW (window)); drawing = gtk_image_new (); @@ -151,14 +178,18 @@ void maemo_init(int *argc, char ***argv) gtk_widget_show_all (GTK_WIDGET (actor)); gtk_widget_show_all (GTK_WIDGET (window)); -} -void menu_loop(void) -{ + g_layer_x = (X_RES - D_WIDTH) / 2; + g_layer_y = (Y_RES - D_HEIGHT) / 2; + g_layer_w = D_WIDTH, g_layer_h = D_HEIGHT; + + pl_rearmed_cbs.only_16bpp = 1; } -void *hildon_set_mode(int w, int h) +void *plat_gvideo_set_mode(int *w_, int *h_, int *bpp_) { + int w = *w_, h = *h_; + if (w <= 0 || h <= 0) return pl_vout_buf; @@ -170,18 +201,43 @@ void *hildon_set_mode(int w, int h) gtk_image_set_from_image (GTK_IMAGE(drawing), image, NULL); gtk_window_resize (GTK_WINDOW (actor), w, h); - hildon_animation_actor_set_scale (actor, + if (g_maemo_opts & 2) + hildon_animation_actor_set_scale (actor, + (gdouble)800 / (gdouble)w, + (gdouble)480 / (gdouble)h + ); + else + hildon_animation_actor_set_scale (actor, (gdouble)D_WIDTH / (gdouble)w, (gdouble)D_HEIGHT / (gdouble)h - ); - + ); + pl_buf_w=w;pl_buf_h=h; return pl_vout_buf; } -void *hildon_flip(void) +void *plat_gvideo_flip(void) { gtk_widget_queue_draw (drawing); + // process accelometer + if (g_maemo_opts & 4) { + int x, y, z; + FILE* f = fopen( "/sys/class/i2c-adapter/i2c-3/3-001d/coord", "r" ); + if( !f ) {printf ("err in accel"); exit(1);} + fscanf( f, "%d %d %d", &x, &y, &z ); + fclose( f ); + + if( x > sens ) in_keystate |= 1 << DKEY_LEFT; + else if( x < -sens ) in_keystate |= 1 << DKEY_RIGHT; + else {in_keystate &= ~(1 << DKEY_LEFT);in_keystate &= ~(1 << DKEY_RIGHT);} + + y+=y_def; + if( y > sens )in_keystate |= 1 << DKEY_UP; + else if( y < -sens ) in_keystate |= 1 << DKEY_DOWN; + else {in_keystate &= ~(1 << DKEY_DOWN);in_keystate &= ~(1 << DKEY_UP);} + + } + /* process GTK+ events */ while (gtk_events_pending()) gtk_main_iteration(); @@ -189,12 +245,23 @@ void *hildon_flip(void) return pl_vout_buf; } -int omap_enable_layer(int enabled) +void plat_gvideo_open(int is_pal) { - return 0; } -void menu_notify_mode_change(int w, int h, int bpp) +void plat_gvideo_close(void) { } +void *plat_prepare_screenshot(int *w, int *h, int *bpp) +{ + return NULL; +} + +void plat_trigger_vibrate(int is_strong) +{ +} + +void menu_notify_mode_change(int w, int h, int bpp) +{ +}