/* invoked by main tree code to update bitmap into screen */ void ph_window_update_display (struct mame_bitmap *bitmap) { PhRegion_t region_info; // fprintf(stderr,"Calling update display\n"); // TODO: Not sure just yet what this is for...if it's only x related we can probably // toss it. (*ph_window_update_display_func) (bitmap); if (use_mouse && keyboard_pressed (KEYCODE_LALT) && keyboard_pressed_memory (KEYCODE_PGDN)) { if (ph_grab_mouse) { region_info.cursor_type = 0; region_info.rid = PtWidgetRid(P_mainWindow); ph_grab_mouse = FALSE; } else { region_info.cursor_type = Ph_CURSOR_NONE; region_info.rid = PtWidgetRid(P_mainWindow); ph_grab_mouse = TRUE; } PhRegionChange (Ph_REGION_CURSOR, 0, ®ion_info, NULL, NULL); } PgFlush(); /* flush buffer to server */ }
static void set_motion_sensitivity(_THIS, unsigned int flags) { int rid; int fields = Ph_EV_PTR_MOTION_BUTTON | Ph_EV_PTR_MOTION_NOBUTTON; PhRegion_t region; if( window ) { rid = PtWidgetRid(window); if( rid != 0 && PhRegionQuery(rid, ®ion, NULL, NULL, 0) == 0 ) { region.events_sense=(region.events_sense & ~fields)|(flags & fields); PhRegionChange(Ph_REGION_EV_SENSE, 0, ®ion, NULL, NULL); } } }
NS_METHOD nsWidget::Show( PRBool bState ) { if( !mWidget ) return NS_OK; // Will be null durring printing PtArg_t arg; if( bState ) { if( mWindowType != eWindowType_child ) { if (PtWidgetIsRealized(mWidget)) { mShown = PR_TRUE; return NS_OK; } //EnableDamage( mWidget, PR_FALSE ); PtRealizeWidget(mWidget); if( mWidget->rid == -1 ) { //EnableDamage( mWidget, PR_TRUE ); NS_ASSERTION(0,"nsWidget::Show mWidget's rid == -1\n"); mShown = PR_FALSE; return NS_ERROR_FAILURE; } PtSetArg(&arg, Pt_ARG_FLAGS, 0, Pt_DELAY_REALIZE); PtSetResources(mWidget, 1, &arg); //EnableDamage( mWidget, PR_TRUE ); PtDamageWidget(mWidget); #ifdef Ph_REGION_NOTIFY PhRegion_t region; PtWidget_t *mWgt; mWgt = (PtWidget_t*) GetNativeData( NS_NATIVE_WIDGET ); region.flags = Ph_REGION_NOTIFY | Ph_FORCE_BOUNDARY; region.rid = PtWidgetRid(mWgt); PhRegionChange(Ph_REGION_FLAGS, 0, ®ion, NULL, NULL); #endif } else { PtWidgetToFront( mWidget ); if( !mShown || !( mWidget->flags & Pt_REALIZED ) ) PtRealizeWidget( mWidget ); } } else { if( mWindowType != eWindowType_child ) { //EnableDamage( mWidget, PR_FALSE ); PtUnrealizeWidget(mWidget); //EnableDamage( mWidget, PR_TRUE ); PtSetArg(&arg, Pt_ARG_FLAGS, Pt_DELAY_REALIZE, Pt_DELAY_REALIZE); PtSetResources(mWidget, 1, &arg); } else { //EnableDamage( mWidget, PR_FALSE ); PtWidgetToBack( mWidget ); if( mShown ) PtUnrealizeWidget( mWidget ); //EnableDamage( mWidget, PR_TRUE ); } } mShown = bState; return NS_OK; }
int ph_window_create_display (int bitmap_depth) { PtArg_t arg[9]; PhRect_t rect; PhRegion_t region_info; // Only image_height??!! int image_height; int window_width, window_height; // Create the Photon Window view_size.w = widthscale * visual_width; view_size.h = heightscale * visual_height; image_width = widthscale * visual_width; image_height = heightscale * visual_height; // TODO: Finish always ontop (Make phearbear happy) PtSetArg( &arg[0], Pt_ARG_FILL_COLOR, Pg_TRANSPARENT, 0 ); PtSetArg( &arg[1], Pt_ARG_WINDOW_MANAGED_FLAGS, 0, Ph_WM_MAX | Ph_WM_RESIZE | Ph_WM_MENU | Ph_WM_CLOSE | Ph_WM_HIDE ); PtSetArg( &arg[2], Pt_ARG_DIM, &view_size, 0 ); PtSetArg( &arg[3], Pt_ARG_WINDOW_NOTIFY_FLAGS, Ph_WM_FOCUS, Ph_WM_FOCUS | Ph_WM_RESIZE | Ph_WM_CLOSE ); PtSetArg( &arg[4], Pt_ARG_WINDOW_RENDER_FLAGS, Pt_FALSE, Ph_WM_RENDER_MENU | Ph_WM_RENDER_CLOSE | Ph_WM_RENDER_MAX | Ph_WM_RENDER_MIN | Ph_WM_RENDER_COLLAPSE | Ph_WM_RENDER_RESIZE ); PtSetArg( &arg[5], Pt_ARG_WINDOW_TITLE, title, 0); //PtSetArg( &arg[6], Pt_ARG_WINDOW_STATE, 0, Ph_WM_STATE_ISFRONT ); PtSetParentWidget(NULL); if((P_mainWindow = PtCreateWidget(PtWindow, NULL, 6, arg)) == NULL) fprintf(stderr,"error: could not create main photon window.\n"); /* add raw callback handler */ PtAddEventHandler( P_mainWindow, Ph_EV_BUT_PRESS | Ph_EV_BUT_RELEASE | Ph_EV_BOUNDARY | Ph_EV_EXPOSE | Ph_EV_PTR_MOTION | Ph_EV_KEY | Ph_EV_INFO, I_GetEvent, NULL ); /* set draw buffer size */ PgSetDrawBufferSize( 0xFF00 ); PtRealizeWidget( P_mainWindow ); if (show_cursor == FALSE) { region_info.cursor_type = Ph_CURSOR_NONE; region_info.rid = PtWidgetRid(P_mainWindow); PhRegionChange (Ph_REGION_CURSOR, 0, ®ion_info, NULL, NULL); // turn off cursor } /* create and setup the image */ switch (ph_window_update_method) { case PH_NORMAL: // image = PdCreateOffscreenContext(0, ((view_size.w+7) & ~7), view_size.h, Pg_OSC_MEM_PAGE_ALIGN); image = PdCreateOffscreenContext(0, view_size.w, view_size.h, Pg_OSC_MEM_PAGE_ALIGN); if (image == NULL) { fprintf(stderr_file, "error: failed to create offscreen context\n"); return OSD_NOT_OK; } scaled_buffer_ptr = PdGetOffscreenContextPtr (image); if (!scaled_buffer_ptr) { fprintf (stderr_file, "error: failed get a pointer to offscreen context.\n"); PhDCRelease (image); return OSD_NOT_OK; } depth = 0; switch (image->format) { case Pg_IMAGE_PALETTE_BYTE : // TODO : break; case Pg_IMAGE_DIRECT_565 : depth = 16; pixels_per_line = image->pitch >> 1; break; case Pg_IMAGE_DIRECT_555 : // TODO: break; case Pg_IMAGE_DIRECT_888 : depth = 24; pixels_per_line = image->pitch / 3; break; case Pg_IMAGE_DIRECT_8888 : depth = 32; pixels_per_line = image->pitch >> 2; break; } break; default: fprintf (stderr_file, "error: unknown photon update method, this shouldn't happen\n"); return OSD_NOT_OK; } /* setup the palette_info struct now we have the depth */ if (ph_init_palette_info() != OSD_OK) return OSD_NOT_OK; fprintf(stderr_file, "Actual bits per pixel = %d...\n", depth); if (bitmap_depth == 32) { if (depth == 32) ph_window_update_display_func = ph_window_update_32_to_32bpp_direct; } else if (bitmap_depth == 16) { switch(depth) { case 16: ph_window_update_display_func = ph_window_update_16_to_16bpp; break; case 24: ph_window_update_display_func = ph_window_update_16_to_24bpp; break; case 32: ph_window_update_display_func = ph_window_update_16_to_32bpp; break; } } if (ph_window_update_display_func == NULL) { fprintf(stderr_file, "error: unsupported\n"); return OSD_NOT_OK; } fprintf(stderr_file, "Ok\n"); return OSD_OK; }