5 #include <hildon/hildon.h>
9 HildonAnimationActor *actor;
10 GtkWidget *window, *drawing;
19 void *pl_fbdev_buf=NULL;
22 unsigned long keys = 0;
25 window_key_proxy (GtkWidget *widget,
29 unsigned long key = 0;
30 switch(keymap[event->hardware_keycode]){
34 key = GP2X_LEFT;break;
36 key = GP2X_RIGHT;break;
40 key = GP2X_DOWN;break;
50 key = GP2X_SELECT;break;
52 key = GP2X_START;break;
54 key = GP2X_VOL_DOWN;break;
56 key = GP2X_VOL_UP;break;
64 if (event->type == GDK_KEY_PRESS){
67 }else if (event->type == GDK_KEY_RELEASE){
71 key = -1; return ; break;
73 if (event->type == GDK_KEY_PRESS){
76 }else if (event->type == GDK_KEY_RELEASE){
80 key = -1; return ; break;
82 if (event->type == GDK_KEY_PRESS){
85 }else if (event->type == GDK_KEY_RELEASE){
89 key = -1; return ; break;
91 if (event->type == GDK_KEY_PRESS){
94 }else if (event->type == GDK_KEY_RELEASE){
98 key = -1; return ; break;
101 key = -1; return ; break;
105 key = -1; return ; break;*/
109 if (event->type == GDK_KEY_PRESS) {
112 else if (event->type == GDK_KEY_RELEASE) {
116 unsigned long int gp2x_joystick_read();
117 unsigned int ReadZodKeys()
119 unsigned int pad_status = 0xffff;
120 unsigned long int keys = gp2x_joystick_read();
123 if( keys & GP2X_VOL_DOWN ) // L2
125 pad_status &= ~(1<<8);
129 pad_status &= ~(1<<10); // L ?
134 if( keys & GP2X_VOL_UP ) // R2
136 pad_status &= ~(1<<9);
140 pad_status &= ~(1<<11); // R ?
145 pad_status &= ~(1<<4);
147 if (keys & GP2X_DOWN)
149 pad_status &= ~(1<<6);
151 if (keys & GP2X_LEFT)
153 pad_status &= ~(1<<7);
155 if (keys & GP2X_RIGHT)
157 pad_status &= ~(1<<5);
159 if (keys & GP2X_START)
161 pad_status &= ~(1<<3);
163 if (keys & GP2X_SELECT)
170 pad_status &= ~(1<<14);
174 pad_status &= ~(1<<13);
178 pad_status &= ~(1<<15);
182 pad_status &= ~(1<<12);
193 void plat_finish(){hildon_quit();}
195 void maemo_init(int *argc, char ***argv)
198 pFile = fopen("/opt/psx4m/keys", "r"); // assume the file exists and has data
201 for (i=0;i<65536;i++)
205 fscanf(pFile, "%i",&ch);
212 gtk_init (argc, argv);
214 window = hildon_stackable_window_new ();
215 gtk_widget_realize (window);
216 gtk_window_fullscreen (GTK_WINDOW(window));
217 g_signal_connect (G_OBJECT (window), "key-press-event",
218 G_CALLBACK (window_key_proxy), NULL);
219 g_signal_connect (G_OBJECT (window), "key-release-event",
220 G_CALLBACK (window_key_proxy), NULL);
221 g_signal_connect (G_OBJECT (window), "delete_event",
222 G_CALLBACK (hildon_quit), NULL);
223 gtk_widget_add_events (window,
224 GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK);
226 actor = HILDON_ANIMATION_ACTOR (hildon_animation_actor_new());
227 hildon_animation_actor_set_position (actor, (X_RES - D_WIDTH)/2, (Y_RES - D_HEIGHT)/2 );
228 hildon_animation_actor_set_parent (actor, GTK_WINDOW (window));
230 drawing = gtk_image_new ();
232 gtk_container_add (GTK_CONTAINER (actor), drawing);
234 gtk_widget_show_all (GTK_WIDGET (actor));
235 gtk_widget_show_all (GTK_WIDGET (window));
239 void pl_fbdev_set_mode(int w, int h,int bpp)
241 //if (bpp==24){w=800;h=480;}
242 if (w <= 0 || h <= 0)
245 if (image) gdk_image_destroy(image);
246 image = gdk_image_new( GDK_IMAGE_FASTEST, gdk_visual_get_system(), w, h );
248 pl_fbdev_buf = (void*) image->mem;
249 screen_size = image->bpl * h * image->bpp;
251 gtk_image_set_from_image (GTK_IMAGE(drawing), image, NULL);
253 gtk_window_resize (GTK_WINDOW (actor), w, h);
254 hildon_animation_actor_set_scale (actor,
255 (gdouble)D_WIDTH / (gdouble)w,
256 (gdouble)D_HEIGHT / (gdouble)h
260 unsigned long gp2x_joystick_read(void)
262 //printf("gp2x_joystick_read\n");
263 /* process GTK+ events */
264 while (gtk_events_pending())
265 gtk_main_iteration();
270 void gp2x_video_RGB_clearscreen16(void)
272 //if (screenbuffer && screen_size)
273 // memset(pl_fbdev_buf, 0, screen_size);
278 gtk_widget_queue_draw (drawing);
281 void gp2x_printfchar15(gp2x_font *f, unsigned char c)
283 unsigned short *dst=&((unsigned short*)pl_fbdev_buf)[f->x+f->y*(image->bpl>>1)],w,h=f->h;
284 //unsigned char *src=f->data[ (c%16)*f->w + (c/16)*f->h ];
285 unsigned char *src=&f->data[c*10];
293 if( *src & w ) *dst++=f->fg; else *dst++=f->bg;
298 dst+=(image->bpl>>1)-(f->w);
306 if( *src & w ) *dst=f->fg;
312 dst+=(image->bpl>>1)-(f->w);
316 void pl_frame_limit(void){
319 void pl_fbdev_close(void){
322 void pl_fbdev_open(void){