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=6c59b6ffe3c485f41c701d07de80df091e32982f;hb=3601e36bd526c63c842f68b2ff6cac82954e5e7e;hpb=4c08b9e7dd350a48fc3e0515913d6ccc8b15e5ae diff --git a/maemo/hildon.c b/maemo/hildon.c index 6c59b6ff..43e3e15e 100644 --- a/maemo/hildon.c +++ b/maemo/hildon.c @@ -4,9 +4,13 @@ #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 @@ -17,10 +21,8 @@ static GdkImage *image; static HildonAnimationActor *actor; static GtkWidget *window, *drawing; -void *pl_fbdev_buf; -int in_type1 = PSE_PAD_TYPE_STANDARD, in_type2 = PSE_PAD_TYPE_STANDARD; -int in_keystate, in_a1[2], in_a2[2]; - +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,84 +178,90 @@ 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 *pl_fbdev_set_mode(int w, int h, int bpp) +void *plat_gvideo_set_mode(int *w_, int *h_, int *bpp_) { + int w = *w_, h = *h_; + if (w <= 0 || h <= 0) - return pl_fbdev_buf; + return pl_vout_buf; if (image) gdk_image_destroy(image); image = gdk_image_new( GDK_IMAGE_FASTEST, gdk_visual_get_system(), w, h ); - pl_fbdev_buf = (void *) image->mem; + pl_vout_buf = (void *) image->mem; 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 - ); - - return pl_fbdev_buf; + ); + pl_buf_w=w;pl_buf_h=h; + return pl_vout_buf; } -void *pl_fbdev_flip(void) +void *plat_gvideo_flip(void) { gtk_widget_queue_draw (drawing); - return pl_fbdev_buf; -} -void pl_frame_limit(void) -{ - extern void CheckFrameRate(void); - //CheckFrameRate(); + // 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(); -} -void pl_fbdev_close(void) -{ + return pl_vout_buf; } -int pl_fbdev_open(void) +void plat_gvideo_open(int is_pal) { - return 0; } -static void pl_get_layer_pos(int *x, int *y, int *w, int *h) +void plat_gvideo_close(void) { - *x = 0; - *y = 0; - *w = 800; - *h = 640; } -void *pl_prepare_screenshot(int *w, int *h, int *bpp) +void *plat_prepare_screenshot(int *w, int *h, int *bpp) { return NULL; } -int writepng() +void plat_trigger_vibrate(int is_strong) { - return -1; } -extern int UseFrameSkip; // hmh - -const struct rearmed_cbs pl_rearmed_cbs = { - pl_get_layer_pos, - pl_fbdev_open, - pl_fbdev_set_mode, - pl_fbdev_flip, - pl_fbdev_close, - &UseFrameSkip, -}; - +void menu_notify_mode_change(int w, int h, int bpp) +{ +}