void amiga_init (char *dir) { if ((DefaultPubScreen = LockPubScreen (0)) == 0) exit (1); screen_ratio (DefaultPubScreen); char prog_name[256]; static char font_name[MAXFONTPATH]; char *font_desc, *name_ptr; static WORD pens[] = {-1}; static struct TextAttr font = {NULL, 0, FS_NORMAL, 0}; int window = 0; if (Icon == NULL) { if (GetProgramName (prog_name, 256)) Icon = GetDiskObject (prog_name); } if (Icon) { if (FindToolType (Icon->do_ToolTypes, "WINDOW")) window = 1; if (font_desc = FindToolType (Icon->do_ToolTypes, "FONT")) { strcpy (font_name, font_desc); if (name_ptr = strrchr (font_name, '/')) { font.ta_Name = font_name; font.ta_YSize = atoi (name_ptr + 1); strcpy (name_ptr, ".font"); } } if (font.ta_Name) Font = OpenDiskFont (&font); } if (Font == NULL) { font.ta_Name = "topaz.font"; font.ta_YSize = 8; Font = OpenFont (&font); } if (window == 0) { if ((Screen = OpenScreenTags (0, SA_Pens, pens, SA_DisplayID, GetVPModeID (&DefaultPubScreen->ViewPort), SA_Overscan, OSCAN_TEXT, SA_Depth, 2, SA_Type, CUSTOMSCREEN | AUTOSCROLL, SA_Font, &font, SA_Title, TitleBar, TAG_DONE)) == 0) exit (1); } if ((Window = OpenWindowTags (0, WA_Left, 0, WA_Top, Screen ? 2 : DefaultPubScreen->BarHeight + 1, WA_Width, Screen ? Screen->Width : ScreenWidth, WA_Height, Screen ? Screen->Height - 2 : ScreenHeight - DefaultPubScreen->BarHeight - 1, WA_SmartRefresh, 1, WA_NewLookMenus, 1, WA_AutoAdjust, 1, WA_Borderless, Screen ? 1 : 0, WA_Backdrop, Screen ? 1 : 0, WA_Activate, 1, WA_CloseGadget, Screen ? 0 : 1, WA_DragBar, Screen ? 0 : 1, WA_DepthGadget, Screen ? 0 : 1, WA_SizeGadget, Screen ? 0 : 1, WA_SizeBBottom, Screen ? 0 : 1, WA_Title, TitleBar, WA_ScreenTitle, TitleBar, WA_IDCMP, IDCMP_RAWKEY | IDCMP_VANILLAKEY | IDCMP_MENUPICK | IDCMP_CLOSEWINDOW | IDCMP_CHANGEWINDOW, Screen ? WA_CustomScreen : WA_PubScreen, Screen ? Screen : DefaultPubScreen, TAG_DONE)) == 0) exit (1); ThisProcess = (struct Process *)FindTask(0); OldWindowPtr = ThisProcess->pr_WindowPtr; ThisProcess->pr_WindowPtr = Window; if ((Visual = GetVisualInfo (Window->WScreen, TAG_DONE)) == 0) exit (1); if ((Menus = CreateMenus (NewMenus, GTMN_NewLookMenus, TRUE, TAG_DONE)) == 0) exit (1); LayoutMenus (Menus, Visual, GTMN_NewLookMenus, TRUE, TAG_DONE); SetMenuStrip (Window, Menus); if ((GameReq = alloc_freq (dir)) == 0) exit (1); if ((SaveReq = alloc_freq (dir)) == 0) exit (1); if ((ScriptReq = alloc_freq (dir)) == 0) exit (1); RastPort = Window->RPort; SetDrMd (RastPort, JAM2); SetAPen (RastPort, 1); SetBPen (RastPort, 0); SetFont (RastPort, Font); DisplayHeight = ((Window->Height - Window->BorderTop - Window->BorderBottom) / RastPort->TxHeight) - 1; PreviousHeight = DisplayHeight; reset_cursor (); }
int lib_graphics_f_GetVPModeID_2(emumsg_syscall_t *msg) { /* Make real syscall */ msg->arg[0]._ulong = GetVPModeID((struct ViewPort *)msg->arg[0]._aptr); return HOOK_DONE; }
/*** Extract some information from a Screen structure ***/ void info_screen(PREFS *prefs, struct Screen *Scr) { prefs->parent = Scr; prefs->scrw = Scr->Width; prefs->scrh = Scr->Height; prefs->vmd = GetVPModeID( &Scr->ViewPort ); prefs->scrd = Scr->RastPort.BitMap->Depth; }
// Get information about a screen ULONG __asm __saveds L_ScreenInfo(register __a0 struct Screen *screen) { ULONG info=0,mode; struct DisplayInfo disp; // Valid screen? if (!screen) return 0; // Get display mode if ((mode=GetVPModeID(&screen->ViewPort))==INVALID_ID) return 0; // Get DisplayInfo if (!(GetDisplayInfoData(0,(char *)&disp,sizeof(struct DisplayInfo),DTAG_DISP,mode))) return 0; // See if screen is lo-res if (disp.Resolution.y>=disp.Resolution.x*2) info=SCRI_LORES; return info; }
void _glfwPlatformGetDesktopMode( GLFWvidmode *mode ) { struct Screen *pubscreen; ULONG modeID; // Get default public screen screen handle pubscreen = LockPubScreen( NULL ); // Get screen width and height (use actual screen size rather than // ModeID nominal size) mode->Width = (int) pubscreen->Width; mode->Height = (int) pubscreen->Height; // Get ModeID for public screen modeID = GetVPModeID( &pubscreen->ViewPort ); // Release workbench screen UnlockPubScreen( NULL, pubscreen ); // Get color bits information _glfwGetModeIDInfo( modeID, NULL, NULL, &mode->RedBits, &mode->GreenBits, &mode->BlueBits, NULL ); }
int _glfwPlatformOpenWindow( int width, int height, int redbits, int greenbits, int bluebits, int alphabits, int depthbits, int stencilbits, int mode, int accumredbits, int accumgreenbits, int accumbluebits, int accumalphabits, int auxbuffers, int stereo, int refreshrate ) { struct TagItem tagList[ 25 ]; int tagNR, accumbits; // Calculate sum of accumulator bits accumbits = accumredbits + accumgreenbits + accumbluebits + accumalphabits; // Clear window state _glfwWin.Screen = NULL; _glfwWin.Window = NULL; _glfwWin.Context = NULL; _glfwWin.PointerHidden = 0; _glfwWin.PointerSprite = NULL; _glfwWin.InputMP = NULL; _glfwWin.InputIO = NULL; // Create input.device message port if( !(_glfwWin.InputMP = CreatePort( NULL, 0 )) ) { _glfwPlatformCloseWindow(); return GL_FALSE; } // Create input.device I/O request if( !(_glfwWin.InputIO = (struct IOStdReq *) CreateExtIO( _glfwWin.InputMP, sizeof(struct IOStdReq) )) ) { _glfwPlatformCloseWindow(); return GL_FALSE; } // Open input.device (for pointer position manipulation) if( OpenDevice( "input.device", 0, (struct IORequest *)_glfwWin.InputIO, 0 ) ) { DeleteExtIO( (struct IORequest *) _glfwWin.InputIO ); _glfwWin.InputIO = NULL; _glfwPlatformCloseWindow(); return GL_FALSE; } // Do we want fullscreen? if( _glfwWin.Fullscreen ) { // Open a new Amiga screen if( !_glfwOpenScreen( &width, &height, &redbits, &greenbits, &bluebits, refreshrate ) ) { _glfwWin.Fullscreen = GL_FALSE; } } // Select window properties tagNR = 0; tagList[ tagNR ].ti_Tag = WA_Left; tagList[ tagNR++ ].ti_Data = 0; tagList[ tagNR ].ti_Tag = WA_Top; tagList[ tagNR++ ].ti_Data = 0; tagList[ tagNR ].ti_Tag = WA_IDCMP; tagList[ tagNR++ ].ti_Data = IDCMP_REFRESHWINDOW | IDCMP_CLOSEWINDOW | IDCMP_NEWSIZE | IDCMP_ACTIVEWINDOW | IDCMP_INACTIVEWINDOW | IDCMP_RAWKEY | IDCMP_MOUSEMOVE | IDCMP_MOUSEBUTTONS; tagList[ tagNR ].ti_Tag = WA_ReportMouse; tagList[ tagNR++ ].ti_Data = TRUE; tagList[ tagNR ].ti_Tag = WA_RMBTrap; tagList[ tagNR++ ].ti_Data = TRUE; tagList[ tagNR ].ti_Tag = WA_NoCareRefresh; tagList[ tagNR++ ].ti_Data = FALSE; tagList[ tagNR ].ti_Tag = WA_SimpleRefresh; tagList[ tagNR++ ].ti_Data = TRUE; tagList[ tagNR ].ti_Tag = WA_Activate; tagList[ tagNR++ ].ti_Data = TRUE; tagList[ tagNR ].ti_Tag = WA_CloseGadget; tagList[ tagNR++ ].ti_Data = _glfwWin.Fullscreen ? FALSE : TRUE; tagList[ tagNR ].ti_Tag = WA_SizeGadget; tagList[ tagNR++ ].ti_Data = _glfwWin.Fullscreen ? FALSE : ( _glfwWinHints.WindowNoResize ? FALSE : TRUE ); tagList[ tagNR ].ti_Tag = WA_DepthGadget; tagList[ tagNR++ ].ti_Data = _glfwWin.Fullscreen ? FALSE : TRUE; tagList[ tagNR ].ti_Tag = WA_DragBar; tagList[ tagNR++ ].ti_Data = _glfwWin.Fullscreen ? FALSE : TRUE; tagList[ tagNR ].ti_Tag = WA_Borderless; tagList[ tagNR++ ].ti_Data = _glfwWin.Fullscreen ? TRUE : FALSE; tagList[ tagNR ].ti_Tag = WA_Backdrop; tagList[ tagNR++ ].ti_Data = _glfwWin.Fullscreen ? TRUE : FALSE; if( _glfwWin.Fullscreen ) { tagList[ tagNR ].ti_Tag = WA_CustomScreen; tagList[ tagNR++ ].ti_Data = (ULONG) _glfwWin.Screen; tagList[ tagNR ].ti_Tag = WA_Width; tagList[ tagNR++ ].ti_Data = width; tagList[ tagNR ].ti_Tag = WA_Height; tagList[ tagNR++ ].ti_Data = height; } else { tagList[ tagNR ].ti_Tag = WA_GimmeZeroZero; tagList[ tagNR++ ].ti_Data = TRUE; tagList[ tagNR ].ti_Tag = WA_InnerWidth; tagList[ tagNR++ ].ti_Data = width; tagList[ tagNR ].ti_Tag = WA_InnerHeight; tagList[ tagNR++ ].ti_Data = height; tagList[ tagNR ].ti_Tag = WA_MinWidth; tagList[ tagNR++ ].ti_Data = 20; tagList[ tagNR ].ti_Tag = WA_MinHeight; tagList[ tagNR++ ].ti_Data = 20; tagList[ tagNR ].ti_Tag = WA_MaxWidth; tagList[ tagNR++ ].ti_Data = 9999; tagList[ tagNR ].ti_Tag = WA_MaxHeight; tagList[ tagNR++ ].ti_Data = 9999; tagList[ tagNR ].ti_Tag = WA_Title; tagList[ tagNR++ ].ti_Data = (ULONG) "GLFW Window"; tagList[ tagNR ].ti_Tag = WA_ScreenTitle; tagList[ tagNR++ ].ti_Data = (ULONG) "GLFW Application"; } tagList[ tagNR ].ti_Tag = TAG_DONE; // Open window _glfwWin.Window = OpenWindowTagList( NULL, tagList ); if( !_glfwWin.Window ) { _glfwPlatformCloseWindow(); return GL_FALSE; } // Fullscreen/windowed post fixups if( _glfwWin.Fullscreen ) { // Don't show screen title ShowTitle( _glfwWin.Screen, FALSE ); // Remember window size _glfwWin.Width = _glfwWin.Window->Width; _glfwWin.Height = _glfwWin.Window->Height; } else { // If we are not in fullscreen mode, get screen handle from window _glfwWin.Screen = _glfwWin.Window->WScreen; // Get ModeID for the current video mode _glfwWin.ModeID = GetVPModeID( &_glfwWin.Screen->ViewPort ); // Remember window size _glfwWin.Width = _glfwWin.Window->GZZWidth; _glfwWin.Height = _glfwWin.Window->GZZHeight; } // Put window on top WindowToFront( _glfwWin.Window ); // Create OpenGL context #ifdef _GLFW_STORMMESA tagNR = 0; tagList[ tagNR ].ti_Tag = AMA_Window; tagList[ tagNR++ ].ti_Data = (ULONG) _glfwWin.Window; tagList[ tagNR ].ti_Tag = AMA_RastPort; tagList[ tagNR++ ].ti_Data = (ULONG) _glfwWin.Window->RPort; tagList[ tagNR ].ti_Tag = AMA_Screen; tagList[ tagNR++ ].ti_Data = (ULONG) _glfwWin.Screen; tagList[ tagNR ].ti_Tag = AMA_Left; tagList[ tagNR++ ].ti_Data = 0; tagList[ tagNR ].ti_Tag = AMA_Bottom; tagList[ tagNR++ ].ti_Data = 0; tagList[ tagNR ].ti_Tag = AMA_Width; tagList[ tagNR++ ].ti_Data = _glfwWin.Width; tagList[ tagNR ].ti_Tag = AMA_Height; tagList[ tagNR++ ].ti_Data = _glfwWin.Height; tagList[ tagNR ].ti_Tag = AMA_DoubleBuf; tagList[ tagNR++ ].ti_Data = GL_TRUE; tagList[ tagNR ].ti_Tag = AMA_RGBMode; tagList[ tagNR++ ].ti_Data = GL_TRUE; tagList[ tagNR ].ti_Tag = AMA_AlphaFlag; tagList[ tagNR++ ].ti_Data = alphabits ? GL_TRUE : GL_FALSE; tagList[ tagNR ].ti_Tag = AMA_NoDepth; tagList[ tagNR++ ].ti_Data = depthbits ? GL_FALSE : GL_TRUE; tagList[ tagNR ].ti_Tag = AMA_NoStencil; tagList[ tagNR++ ].ti_Data = stencilbits ? GL_FALSE : GL_TRUE; tagList[ tagNR ].ti_Tag = AMA_NoAccum; tagList[ tagNR++ ].ti_Data = accumbits ? GL_FALSE : GL_TRUE; tagList[ tagNR ].ti_Tag = AMA_DirectRender; tagList[ tagNR++ ].ti_Data = GL_TRUE; tagList[ tagNR ].ti_Tag = AMA_DrawMode; tagList[ tagNR++ ].ti_Data = AMESA_AGA_C2P; tagList[ tagNR ].ti_Tag = TAG_DONE; _glfwWin.Context = AmigaMesaCreateContext( tagList ); #endif if( !_glfwWin.Context ) { _glfwPlatformCloseWindow(); return GL_FALSE; } // Make current #ifdef _GLFW_STORMMESA AmigaMesaMakeCurrent( _glfwWin.Context, _glfwWin.Context->buffer ); #endif return GL_TRUE; }
void _config_env_screenmode_init_mode(config_env_data *data,BOOL save_depth) { struct DimensionInfo diminfo; char buf[128]; struct Screen *screen; int a; ULONG mode_id=0; BOOL got_dims=0; // Get current screenmode information switch (data->config->screen_mode) { // Existing screen case MODE_WORKBENCHUSE: case MODE_WORKBENCHCLONE: case MODE_PUBLICSCREEN: { // Strip Use/Clone from mode name stccpy(buf,data->mode_name,sizeof(buf)); for (a=strlen(buf)-1;a>=0;a--) { if (buf[a]==':') { buf[a]=0; break; } } // Get screen if (screen=LockPubScreen(buf)) { // Get screen mode mode_id=GetVPModeID(&screen->ViewPort); // Get minimum size if (data->config->screen_mode==MODE_WORKBENCHCLONE) { data->mode_size_limit.MinX=screen->Width; data->mode_size_limit.MinY=screen->Height; // Clone depth if (!save_depth) data->config->screen_depth=screen->RastPort.BitMap->Depth; } else { data->mode_size_limit.MinX=640; data->mode_size_limit.MinY=200; } // Get maximum size data->mode_size_limit.MaxX=screen->Width; data->mode_size_limit.MaxY=screen->Height; // Get default size data->mode_size_default.MaxX=screen->Width; data->mode_size_default.MaxY=screen->Height; // Got dimensions got_dims=1; // Release screen UnlockPubScreen(0,screen); } } break; // Real screen mode default: mode_id=data->config->screen_mode; break; } // Get mode info (if available) if (!(ModeNotAvailable(mode_id)) && (GetDisplayInfoData(0,(char *)&diminfo,sizeof(diminfo),DTAG_DIMS,mode_id))) { // Not already got dimensions? if (!got_dims) { // Get minimum size data->mode_size_limit.MinX=diminfo.MinRasterWidth; data->mode_size_limit.MinY=diminfo.MinRasterHeight; // Get maximum size data->mode_size_limit.MaxX=diminfo.MaxRasterWidth; data->mode_size_limit.MaxY=diminfo.MaxRasterHeight; // Get default size data->mode_size_default.MaxX=diminfo.TxtOScan.MaxX+1; data->mode_size_default.MaxY=diminfo.TxtOScan.MaxY+1; } // Get maximum colours data->mode_max_colours=diminfo.MaxDepth; } // Check settings if (data->mode_size_limit.MinX<640) data->mode_size_limit.MinX=640; if (data->mode_size_limit.MinY<200) data->mode_size_limit.MinY=200; if (data->mode_size_limit.MaxX<data->mode_size_limit.MinX) data->mode_size_limit.MaxX=data->mode_size_limit.MinX; if (data->mode_size_limit.MaxY<data->mode_size_limit.MinY) data->mode_size_limit.MaxY=data->mode_size_limit.MinY; if (data->mode_size_default.MaxX<data->mode_size_limit.MinX) data->mode_size_default.MaxX=data->mode_size_limit.MinX; else if (data->mode_size_default.MaxX>data->mode_size_limit.MaxX) data->mode_size_default.MaxX=data->mode_size_limit.MaxX; if (data->mode_size_default.MaxY<data->mode_size_limit.MinY) data->mode_size_default.MaxY=data->mode_size_limit.MinY; else if (data->mode_size_default.MaxY>data->mode_size_limit.MaxY) data->mode_size_default.MaxY=data->mode_size_limit.MaxY; if (data->mode_max_colours<1) data->mode_max_colours=1; // Fix gadgets _config_env_screenmode_fix_gadgets(data); }