aboutsummaryrefslogtreecommitdiff
path: root/maemo/hildon.c
diff options
context:
space:
mode:
Diffstat (limited to 'maemo/hildon.c')
-rw-r--r--maemo/hildon.c332
1 files changed, 108 insertions, 224 deletions
diff --git a/maemo/hildon.c b/maemo/hildon.c
index 41d8f63..2cea99a 100644
--- a/maemo/hildon.c
+++ b/maemo/hildon.c
@@ -3,194 +3,105 @@
#include <stdlib.h>
#include <unistd.h>
#include <hildon/hildon.h>
-#include "minimal.h"
-
-GdkImage *image;
-HildonAnimationActor *actor;
-GtkWidget *window, *drawing;
+#include "plugin_lib.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 keystate;
+
+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:
+ //SaveState(cfile);
+ return;
+ case 20:
+ //LoadState(cfile);
+ return;
+ }
+
if (event->type == GDK_KEY_PRESS) {
- keys |= key;
+ if (psxkey1 >= 0)
+ keystate |= 1 << psxkey1;
+ if (psxkey2 >= 0)
+ keystate |= 1 << psxkey2;
}
else if (event->type == GDK_KEY_RELEASE) {
- keys &= ~key;
+ if (psxkey1 >= 0)
+ keystate &= ~(1 << psxkey1);
+ if (psxkey2 >= 0)
+ keystate &= ~(1 << psxkey2);
}
}
-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);
- }
-
- return pad_status;
-}
-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 +118,6 @@ void maemo_init(int *argc, char ***argv)
}
fclose(pFile);
}
-
gtk_init (argc, argv);
@@ -235,18 +145,15 @@ void maemo_init(int *argc, char ***argv)
gtk_widget_show_all (GTK_WIDGET (window));
}
-
-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;
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 +162,49 @@ 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;
}
-unsigned long gp2x_joystick_read(void)
+void *pl_fbdev_flip(void)
{
- //printf("gp2x_joystick_read\n");
+ gtk_widget_queue_draw (drawing);
+}
+
+void pl_frame_limit(void)
+{
+ 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);
}
-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_fbdev_close(void){
-}
-
-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,
+};