⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uma.cpp

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/////////////////////////////////////////////////////////////////////////////// Name:        src/mac/carbon/uma.cpp// Purpose:     UMA support// Author:      Stefan Csomor// Modified by:// Created:     04/01/98// RCS-ID:      $Id: uma.cpp,v 1.80 2006/10/14 15:24:58 SC Exp $// Copyright:   (c) Stefan Csomor// Licence:     The wxWindows licence/////////////////////////////////////////////////////////////////////////////#include "wx/wxprec.h"#if wxUSE_GUI#include "wx/toplevel.h"#include "wx/dc.h"#ifndef __DARWIN__#  include <MacTextEditor.h>#  include <Navigation.h>#  if defined(TARGET_CARBON)#    if PM_USE_SESSION_APIS#      include <PMCore.h>#    endif#    include <PMApplication.h>#  else#    include <Printing.h>#  endif#endif#ifndef __DARWIN__#  include <Scrap.h>#endif#include "wx/mac/uma.h"// since we have decided that we only support 8.6 upwards we are// checking for these minimum requirements in the startup code of// the application so all wxWidgets code can safely assume that appearance 1.1// windows manager, control manager, navigation services etc. are// presentstatic SInt32 sUMASystemVersion = 0 ;long UMAGetSystemVersion() { return sUMASystemVersion ; }void UMACleanupToolbox(){}void UMAInitToolbox( UInt16 inMoreMastersCalls, bool isEmbedded ){    ::InitCursor();    if ( Gestalt(gestaltSystemVersion, &sUMASystemVersion) != noErr)        sUMASystemVersion = 0x0000 ;#ifndef __LP64__    {        FontFamilyID fontId ;        Str255 fontName ;        SInt16 fontSize ;        Style fontStyle ;        GetThemeFont(kThemeSmallSystemFont , GetApplicationScript() , fontName , &fontSize , &fontStyle ) ;        GetFNum( fontName, &fontId );        TXNMacOSPreferredFontDescription fontDescriptions[] =        {            { fontId , (fontSize << 16) , kTXNDefaultFontStyle, kTXNSystemDefaultEncoding }        } ;        int noOfFontDescriptions = sizeof( fontDescriptions ) / sizeof(TXNMacOSPreferredFontDescription) ;        OptionBits options = 0 ;        if ( UMAGetSystemVersion() < 0x1000 )            options |= kTXNAlwaysUseQuickDrawTextMask ;        TXNInitTextension( fontDescriptions,  noOfFontDescriptions, options );    }#endif    UMASetSystemIsInitialized( true );}// process managerlong UMAGetProcessMode(){    OSErr err ;    ProcessInfoRec processinfo;    ProcessSerialNumber procno ;    procno.highLongOfPSN = 0 ;    procno.lowLongOfPSN = kCurrentProcess ;    processinfo.processInfoLength = sizeof(ProcessInfoRec);    processinfo.processName = NULL;#ifndef __LP64__    processinfo.processAppSpec = NULL;#endif    err = ::GetProcessInformation( &procno , &processinfo ) ;    wxASSERT( err == noErr ) ;    return processinfo.processMode ;}bool UMAGetProcessModeDoesActivateOnFGSwitch(){    return UMAGetProcessMode() & modeDoesActivateOnFGSwitch ;}// menu managerMenuRef UMANewMenu( SInt16 id , const wxString& title , wxFontEncoding encoding ){    wxString str = wxStripMenuCodes( title ) ;    MenuRef menu ;#if TARGET_CARBON    CreateNewMenu( id , 0 , &menu ) ;    SetMenuTitleWithCFString( menu , wxMacCFStringHolder(str , encoding ) ) ;#else    Str255 ptitle ;    wxMacStringToPascal( str , ptitle ) ;    menu = ::NewMenu( id , ptitle ) ;#endif    return menu ;}void UMASetMenuTitle( MenuRef menu , const wxString& title , wxFontEncoding encoding ){    wxString str = wxStripMenuCodes( title ) ;#if TARGET_CARBON    SetMenuTitleWithCFString( menu , wxMacCFStringHolder(str , encoding) ) ;#else    Str255 ptitle ;    wxMacStringToPascal( str , ptitle ) ;    SetMenuTitle( menu , ptitle ) ;#endif}void UMASetMenuItemText( MenuRef menu,  MenuItemIndex item, const wxString& title, wxFontEncoding encoding ){    // we don't strip the accels here anymore, must be done before    wxString str = title ;#if TARGET_CARBON    SetMenuItemTextWithCFString( menu , item , wxMacCFStringHolder(str , encoding) ) ;#else    Str255 ptitle ;    wxMacStringToPascal( str , ptitle ) ;    SetMenuItemText( menu , item , ptitle ) ;#endif}UInt32 UMAMenuEvent( EventRecord *inEvent ){    return MenuEvent( inEvent ) ;}void UMAEnableMenuItem( MenuRef inMenu , MenuItemIndex inItem , bool enable){    if ( enable )        EnableMenuItem( inMenu , inItem ) ;    else        DisableMenuItem( inMenu , inItem ) ;}void UMAAppendSubMenuItem( MenuRef menu , const wxString& title, wxFontEncoding encoding , SInt16 id ){    AppendMenuItemTextWithCFString( menu,                                CFSTR("A"), 0, 0,NULL);     UMASetMenuItemText( menu, (SInt16) ::CountMenuItems(menu), title , encoding );    SetMenuItemHierarchicalID( menu , CountMenuItems( menu ) , id ) ;}void UMAInsertSubMenuItem( MenuRef menu , const wxString& title, wxFontEncoding encoding , MenuItemIndex item , SInt16 id  ){    InsertMenuItemTextWithCFString( menu,                CFSTR("A"), item, 0, 0);                     UMASetMenuItemText( menu, item+1, title , encoding );    SetMenuItemHierarchicalID( menu , item+1 , id ) ;}void UMASetMenuItemShortcut( MenuRef menu , MenuItemIndex item , wxAcceleratorEntry *entry ){    if ( !entry )        return ;    UInt8 modifiers = 0 ;    SInt16 key = entry->GetKeyCode() ;    if ( key )    {        bool explicitCommandKey = (entry->GetFlags() & wxACCEL_CTRL);        if (entry->GetFlags() & wxACCEL_ALT)            modifiers |= kMenuOptionModifier ;        if (entry->GetFlags() & wxACCEL_SHIFT)            modifiers |= kMenuShiftModifier ;        SInt16 glyph = 0 ;        SInt16 macKey = key ;        if ( key >= WXK_F1 && key <= WXK_F15 )        {            if ( !explicitCommandKey )                modifiers |= kMenuNoCommandModifier ;            // for some reasons this must be 0 right now            // everything else leads to just the first function key item            // to be selected. Thanks to Ryan Wilcox for finding out.            macKey = 0 ;            glyph = kMenuF1Glyph + ( key - WXK_F1 ) ;            if ( key >= WXK_F13 )                glyph += 13 ;        }        else        {            switch ( key )            {                case WXK_BACK :                    macKey = kBackspaceCharCode ;                    glyph = kMenuDeleteLeftGlyph ;                    break ;                case WXK_TAB :                    macKey = kTabCharCode ;                    glyph = kMenuTabRightGlyph ;                    break ;                case kEnterCharCode :                    macKey = kEnterCharCode ;                    glyph = kMenuEnterGlyph ;                    break ;                case WXK_RETURN :                    macKey = kReturnCharCode ;                    glyph = kMenuReturnGlyph ;                    break ;                case WXK_ESCAPE :                    macKey = kEscapeCharCode ;                    glyph = kMenuEscapeGlyph ;                    break ;                case WXK_SPACE :                    macKey = ' ' ;                    glyph = kMenuSpaceGlyph ;                    break ;                case WXK_DELETE :                    macKey = kDeleteCharCode ;                    glyph = kMenuDeleteRightGlyph ;                    break ;                case WXK_CLEAR :                    macKey = kClearCharCode ;                    glyph = kMenuClearGlyph ;                    break ;                case WXK_PAGEUP :                    macKey = kPageUpCharCode ;                    glyph = kMenuPageUpGlyph ;                    break ;                case WXK_PAGEDOWN :                    macKey = kPageDownCharCode ;                    glyph = kMenuPageDownGlyph ;                    break ;                case WXK_LEFT :                    macKey = kLeftArrowCharCode ;                    glyph = kMenuLeftArrowGlyph ;                    break ;                case WXK_UP :                    macKey = kUpArrowCharCode ;                    glyph = kMenuUpArrowGlyph ;                    break ;                case WXK_RIGHT :                    macKey = kRightArrowCharCode ;                    glyph = kMenuRightArrowGlyph ;                    break ;                case WXK_DOWN :                    macKey = kDownArrowCharCode ;                    glyph = kMenuDownArrowGlyph ;                    break ;                case WXK_HOME :                    macKey = kHomeCharCode ;                    glyph = kMenuNorthwestArrowGlyph ;                    break ;                case WXK_END :                    macKey = kEndCharCode ;                    glyph = kMenuSoutheastArrowGlyph ;                    break ;                default :                    macKey = toupper( key ) ;                    break ;            }            // we now allow non command key shortcuts            // remove in case this gives problems            if ( !explicitCommandKey )                modifiers |= kMenuNoCommandModifier ;        }        // 1d and 1e have special meaning to SetItemCmd, so        // do not use for these character codes.        if (key != WXK_UP && key != WXK_RIGHT && key != WXK_DOWN && key != WXK_LEFT)            SetItemCmd( menu, item , macKey );        SetMenuItemModifiers( menu, item , modifiers ) ;        if ( glyph )            SetMenuItemKeyGlyph( menu, item , glyph ) ;    }}void UMAAppendMenuItem( MenuRef menu , const wxString& title, wxFontEncoding encoding , wxAcceleratorEntry *entry ){    AppendMenuItemTextWithCFString( menu,                                CFSTR("A"), 0, 0,NULL);     // don't attempt to interpret metacharacters like a '-' at the beginning (would become a separator otherwise)    ChangeMenuItemAttributes( menu , ::CountMenuItems(menu), kMenuItemAttrIgnoreMeta , 0 ) ;    UMASetMenuItemText(menu, (SInt16) ::CountMenuItems(menu), title , encoding );    UMASetMenuItemShortcut( menu , (SInt16) ::CountMenuItems(menu), entry ) ;}void UMAInsertMenuItem( MenuRef menu , const wxString& title, wxFontEncoding encoding , MenuItemIndex item , wxAcceleratorEntry *entry ){    InsertMenuItemTextWithCFString( menu,                CFSTR("A"), item, 0, 0);     // don't attempt to interpret metacharacters like a '-' at the beginning (would become a separator otherwise)    ChangeMenuItemAttributes( menu , item+1, kMenuItemAttrIgnoreMeta , 0 ) ;    UMASetMenuItemText(menu, item+1 , title , encoding );    UMASetMenuItemShortcut( menu , item+1 , entry ) ;}// quickdraw#if !TARGET_CARBONint gPrOpenCounter = 0 ;OSStatus UMAPrOpen(){    OSErr err = noErr ;    ++gPrOpenCounter ;    if ( gPrOpenCounter == 1 )    {        PrOpen() ;        err = PrError() ;        wxASSERT( err == noErr ) ;    }    return err ;}OSStatus UMAPrClose(){    OSErr err = noErr ;    wxASSERT( gPrOpenCounter >= 1 ) ;    if ( gPrOpenCounter == 1 )    {        PrClose() ;        err = PrError() ;        wxASSERT( err == noErr ) ;    }    --gPrOpenCounter ;    return err ;}pascal QDGlobalsPtr GetQDGlobalsPtr() ;pascal QDGlobalsPtr GetQDGlobalsPtr()

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -