X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=maemo%2Fhildon.c;h=342ac1950cd7ed9e6b19a80b881c9477b33783bf;hp=41d8f63f915b52311d0c08545fd0720986128e36;hb=2f24625423d65f64e835905223b61352233bd111;hpb=b7b2fb4165eee505bc05cbf23309bb5ed4289494 diff --git a/maemo/hildon.c b/maemo/hildon.c index 41d8f63f..342ac195 100644 --- a/maemo/hildon.c +++ b/maemo/hildon.c @@ -1,196 +1,115 @@ #include #include #include +#include #include #include -#include "minimal.h" - -GdkImage *image; -HildonAnimationActor *actor; -GtkWidget *window, *drawing; +#include "plugin_lib.h" +#include "main.h" +#include "../libpcsxcore/psemu_plugin_defs.h" #define X_RES 800 #define Y_RES 480 #define D_WIDTH 640 #define D_HEIGHT 480 -int screen_size; +static GdkImage *image; +static HildonAnimationActor *actor; +static GtkWidget *window, *drawing; + +void *pl_fbdev_buf; +int in_type = PSE_PAD_TYPE_STANDARD; +int in_keystate, in_a1[2], in_a2[2]; + +static int keymap[65536]; + +// map psx4m compatible keymap to PSX keys +static const unsigned char keymap2[14] = { + DKEY_LEFT, // 0 + DKEY_RIGHT, + DKEY_UP, + DKEY_DOWN, + DKEY_CIRCLE, + DKEY_CROSS, // 5 + DKEY_TRIANGLE, + DKEY_SQUARE, + DKEY_SELECT, + DKEY_START, + DKEY_L2, // 10 + DKEY_R2, + DKEY_L1, + DKEY_R1, +}; -void *pl_fbdev_buf=NULL; -int keymap[65536]; -void hildon_quit(); -unsigned long keys = 0; +void hildon_quit() +{ + gtk_main_quit(); + exit(0); +} static void -window_key_proxy (GtkWidget *widget, +window_key_proxy(GtkWidget *widget, GdkEventKey *event, gpointer user_data) { - unsigned long key = 0; -switch(keymap[event->hardware_keycode]){ - case -1: - return; break; - case 0: - key = GP2X_LEFT;break; - case 1: - key = GP2X_RIGHT;break; - case 2: - key = GP2X_UP;break; - case 3: - key = GP2X_DOWN;break; - case 4: - key = GP2X_B;break; - case 5: - key = GP2X_X;break; - case 6: - key = GP2X_Y;break; - case 7: - key = GP2X_A;break; - case 8: - key = GP2X_SELECT;break; - case 9: - key = GP2X_START;break; - case 10: - key = GP2X_VOL_DOWN;break; - case 11: - key = GP2X_VOL_UP;break; - case 12: - key = GP2X_L;break; - case 13: - key = GP2X_R;break; - case 14: - hildon_quit();break; - case 15: - if (event->type == GDK_KEY_PRESS){ - keys |= GP2X_LEFT; - keys |= GP2X_UP; - }else if (event->type == GDK_KEY_RELEASE){ - keys &= ~GP2X_LEFT; - keys &= ~GP2X_UP; - } - key = -1; return ; break; - case 16: - if (event->type == GDK_KEY_PRESS){ - keys |= GP2X_RIGHT; - keys |= GP2X_UP; - }else if (event->type == GDK_KEY_RELEASE){ - keys &= ~GP2X_RIGHT; - keys &= ~GP2X_UP; - } - key = -1; return ; break; - case 17: - if (event->type == GDK_KEY_PRESS){ - keys |= GP2X_LEFT; - keys |= GP2X_DOWN; - }else if (event->type == GDK_KEY_RELEASE){ - keys &= ~GP2X_LEFT; - keys &= ~GP2X_DOWN; - } - key = -1; return ; break; - case 18: - if (event->type == GDK_KEY_PRESS){ - keys |= GP2X_RIGHT; - keys |= GP2X_DOWN; - }else if (event->type == GDK_KEY_RELEASE){ - keys &= ~GP2X_RIGHT; - keys &= ~GP2X_DOWN; - } - key = -1; return ; break; -/* case 19: - SaveState(cfile); - key = -1; return ; break; - break; - case 20: - LoadState(cfile); - key = -1; return ; break;*/ - break; -} - + int key, psxkey1 = -1, psxkey2 = -1; + + key = keymap[event->hardware_keycode]; + if (key < 0) + return; + + if (key < ARRAY_SIZE(keymap2)) + psxkey1 = keymap2[key]; + else switch (key) { + case 14: + hildon_quit(); + break; + case 15: + psxkey1 = DKEY_UP; + psxkey2 = DKEY_LEFT; + break; + case 16: + psxkey1 = DKEY_UP; + psxkey2 = DKEY_RIGHT; + break; + case 17: + psxkey1 = DKEY_DOWN; + psxkey2 = DKEY_LEFT; + break; + case 18: + psxkey1 = DKEY_DOWN; + psxkey2 = DKEY_RIGHT; + break; + case 19: + if (event->type == GDK_KEY_PRESS) + emu_set_action(SACTION_SAVE_STATE); + return; + case 20: + if (event->type == GDK_KEY_PRESS) + emu_set_action(SACTION_LOAD_STATE); + return; + } + if (event->type == GDK_KEY_PRESS) { - keys |= key; + if (psxkey1 >= 0) + in_keystate |= 1 << psxkey1; + if (psxkey2 >= 0) + in_keystate |= 1 << psxkey2; } else if (event->type == GDK_KEY_RELEASE) { - keys &= ~key; - } -} -unsigned long int gp2x_joystick_read(); -unsigned int ReadZodKeys() -{ - unsigned int pad_status = 0xffff; - unsigned long int keys = gp2x_joystick_read(); - - - if( keys & GP2X_VOL_DOWN ) // L2 - { - pad_status &= ~(1<<8); - } - if (keys & GP2X_L) - { - pad_status &= ~(1<<10); // L ? - } - - - - if( keys & GP2X_VOL_UP ) // R2 - { - pad_status &= ~(1<<9); - } - if (keys & GP2X_R) - { - pad_status &= ~(1<<11); // R ? - } - - if (keys & GP2X_UP) - { - pad_status &= ~(1<<4); - } - if (keys & GP2X_DOWN) - { - pad_status &= ~(1<<6); - } - if (keys & GP2X_LEFT) - { - pad_status &= ~(1<<7); - } - if (keys & GP2X_RIGHT) - { - pad_status &= ~(1<<5); - } - if (keys & GP2X_START) - { - pad_status &= ~(1<<3); - } - if (keys & GP2X_SELECT) - { - pad_status &= ~(1); - } - - if (keys & GP2X_X) - { - pad_status &= ~(1<<14); - } - if (keys & GP2X_B) - { - pad_status &= ~(1<<13); - } - if (keys & GP2X_A) - { - pad_status &= ~(1<<15); - } - if (keys & GP2X_Y) - { - pad_status &= ~(1<<12); - } + if (psxkey1 >= 0) + in_keystate &= ~(1 << psxkey1); + if (psxkey2 >= 0) + in_keystate &= ~(1 << psxkey2); - return pad_status; + emu_set_action(SACTION_NONE); + } } -void hildon_quit() +void plat_finish() { - gtk_main_quit(); - exit(0); + hildon_quit(); } -void plat_finish(){hildon_quit();} void maemo_init(int *argc, char ***argv) { @@ -207,7 +126,6 @@ void maemo_init(int *argc, char ***argv) } fclose(pFile); } - gtk_init (argc, argv); @@ -235,18 +153,19 @@ void maemo_init(int *argc, char ***argv) gtk_widget_show_all (GTK_WIDGET (window)); } +void menu_loop(void) +{ +} -void pl_fbdev_set_mode(int w, int h,int bpp) +void *pl_fbdev_set_mode(int w, int h, int bpp) { -//if (bpp==24){w=800;h=480;} if (w <= 0 || h <= 0) - return; + return pl_fbdev_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; - screen_size = image->bpl * h * image->bpp; + pl_fbdev_buf = (void *) image->mem; gtk_image_set_from_image (GTK_IMAGE(drawing), image, NULL); @@ -255,72 +174,61 @@ void pl_fbdev_set_mode(int w, int h,int bpp) (gdouble)D_WIDTH / (gdouble)w, (gdouble)D_HEIGHT / (gdouble)h ); + + return pl_fbdev_buf; +} + +void *pl_fbdev_flip(void) +{ + gtk_widget_queue_draw (drawing); + return pl_fbdev_buf; } -unsigned long gp2x_joystick_read(void) +void pl_frame_limit(void) { - //printf("gp2x_joystick_read\n"); + extern void CheckFrameRate(void); + //CheckFrameRate(); + /* process GTK+ events */ while (gtk_events_pending()) gtk_main_iteration(); - - return keys; } -void gp2x_video_RGB_clearscreen16(void) +void pl_fbdev_close(void) { - //if (screenbuffer && screen_size) - // memset(pl_fbdev_buf, 0, screen_size); } -void pl_fbdev_flip() +int pl_fbdev_open(void) { - gtk_widget_queue_draw (drawing); + return 0; } -void gp2x_printfchar15(gp2x_font *f, unsigned char c) +static void pl_get_layer_pos(int *x, int *y, int *w, int *h) { - unsigned short *dst=&((unsigned short*)pl_fbdev_buf)[f->x+f->y*(image->bpl>>1)],w,h=f->h; -//unsigned char *src=f->data[ (c%16)*f->w + (c/16)*f->h ]; - unsigned char *src=&f->data[c*10]; - - if(f->solid) - while(h--) - { - w=f->wmask; - while(w) - { - if( *src & w ) *dst++=f->fg; else *dst++=f->bg; - w>>=1; - } - src++; - - dst+=(image->bpl>>1)-(f->w); - } - else - while(h--) - { - w=f->wmask; - while(w) - { - if( *src & w ) *dst=f->fg; - dst++; - w>>=1; - } - src++; - - dst+=(image->bpl>>1)-(f->w); - } + *x = 0; + *y = 0; + *w = 800; + *h = 640; } -void pl_frame_limit(void){ +void *pl_prepare_screenshot(int *w, int *h, int *bpp) +{ + return NULL; } -void pl_fbdev_close(void){ +int writepng() +{ + return -1; } -void pl_fbdev_open(void){ - -} +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, +};