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

📄 display.cpp

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/////////////////////////////////////////////////////////////////////////////// Name:        src/mac/carbon/display.cpp// Purpose:     Mac implementation of wxDisplay class// Author:      Ryan Norton & Brian Victor// Modified by: Royce Mitchell III, Vadim Zeitlin// Created:     06/21/02// RCS-ID:      $Id: display.cpp,v 1.22 2006/10/02 05:38:00 PC Exp $// Copyright:   (c) wxWidgets team// Licence:     wxWindows licence/////////////////////////////////////////////////////////////////////////////// ============================================================================// declarations// ============================================================================// ----------------------------------------------------------------------------// headers// ----------------------------------------------------------------------------#include "wx/wxprec.h"#ifdef __BORLANDC__    #pragma hdrstop#endif#if wxUSE_DISPLAY#include "wx/display.h"#ifndef WX_PRECOMP    #include "wx/dynarray.h"    #include "wx/log.h"    #include "wx/string.h"    #include "wx/gdicmn.h"#endif#ifdef __DARWIN__    #include <Carbon/Carbon.h>#else    #include <Gestalt.h>    #include <Displays.h>    #include <Quickdraw.h>    #include <Video.h>  // for VDSwitchInfoRec    #include <FixMath.h>    #include <Debugging.h>#endif#include "wx/display_impl.h"// ----------------------------------------------------------------------------// display classes implementation// ----------------------------------------------------------------------------#ifdef __WXMAC_OSX__class wxDisplayImplMacOSX : public wxDisplayImpl{public:    wxDisplayImplMacOSX(unsigned n, CGDirectDisplayID id)        : wxDisplayImpl(n),          m_id(id)    {    }    virtual wxRect GetGeometry() const;    virtual wxString GetName() const { return wxString(); }    virtual wxArrayVideoModes GetModes(const wxVideoMode& mode) const;    virtual wxVideoMode GetCurrentMode() const;    virtual bool ChangeMode(const wxVideoMode& mode);private:    CGDirectDisplayID m_id;    DECLARE_NO_COPY_CLASS(wxDisplayImplMacOSX)};class wxDisplayFactoryMacOSX : public wxDisplayFactory{public:    wxDisplayFactoryMacOSX() {}    virtual wxDisplayImpl *CreateDisplay(unsigned n);    virtual unsigned GetCount();    virtual int GetFromPoint(const wxPoint& pt);protected:    DECLARE_NO_COPY_CLASS(wxDisplayFactoryMacOSX)};// ============================================================================// wxDisplayFactoryMacOSX implementation// ============================================================================unsigned wxDisplayFactoryMacOSX::GetCount(){    CGDisplayCount count;#ifdef __WXDEBUG__    CGDisplayErr err =#endif    CGGetActiveDisplayList(0, NULL, &count);    wxASSERT(err == CGDisplayNoErr);    return count;}int wxDisplayFactoryMacOSX::GetFromPoint(const wxPoint& p){    CGPoint thePoint = {(float)p.x, (float)p.y};    CGDirectDisplayID theID;    CGDisplayCount theCount;    CGDisplayErr err = CGGetDisplaysWithPoint(thePoint, 1, &theID, &theCount);    wxASSERT(err == CGDisplayNoErr);    int nWhich = wxNOT_FOUND;    if (theCount)    {        theCount = GetCount();        CGDirectDisplayID* theIDs = new CGDirectDisplayID[theCount];        err = CGGetActiveDisplayList(theCount, theIDs, &theCount);        wxASSERT(err == CGDisplayNoErr);        for (nWhich = 0; nWhich < (int) theCount; ++nWhich)        {            if (theIDs[nWhich] == theID)                break;        }        delete [] theIDs;        if (nWhich == (int) theCount)        {            wxFAIL_MSG(wxT("Failed to find display in display list"));            nWhich = wxNOT_FOUND;        }    }    return nWhich;}wxDisplayImpl *wxDisplayFactoryMacOSX::CreateDisplay(unsigned n){    CGDisplayCount theCount = GetCount();    CGDirectDisplayID* theIDs = new CGDirectDisplayID[theCount];#ifdef __WXDEBUG__    CGDisplayErr err =#endif    CGGetActiveDisplayList(theCount, theIDs, &theCount);    wxASSERT( err == CGDisplayNoErr );    wxASSERT( n < theCount );    wxDisplayImplMacOSX *display = new wxDisplayImplMacOSX(n, theIDs[n]);    delete [] theIDs;    return display;}// ============================================================================// wxDisplayImplMacOSX implementation// ============================================================================wxRect wxDisplayImplMacOSX::GetGeometry() const{    CGRect theRect = CGDisplayBounds(m_id);    return wxRect( (int)theRect.origin.x,                   (int)theRect.origin.y,                   (int)theRect.size.width,                   (int)theRect.size.height ); //floats}static int wxCFDictKeyToInt( CFDictionaryRef desc, CFStringRef key ){    CFNumberRef value = (CFNumberRef) CFDictionaryGetValue( desc, key );    if (value == NULL)        return 0;    int num = 0;    CFNumberGetValue( value, kCFNumberIntType, &num );    return num;}wxArrayVideoModes wxDisplayImplMacOSX::GetModes(const wxVideoMode& mode) const{    wxArrayVideoModes resultModes;    CFArrayRef theArray = CGDisplayAvailableModes( m_id );    for (CFIndex i = 0; i < CFArrayGetCount(theArray); ++i)    {        CFDictionaryRef theValue = (CFDictionaryRef) CFArrayGetValueAtIndex( theArray, i );        wxVideoMode theMode(            wxCFDictKeyToInt( theValue, kCGDisplayWidth ),            wxCFDictKeyToInt( theValue, kCGDisplayHeight ),            wxCFDictKeyToInt( theValue, kCGDisplayBitsPerPixel ),            wxCFDictKeyToInt( theValue, kCGDisplayRefreshRate ));        if (theMode.Matches( mode ))            resultModes.Add( theMode );    }    return resultModes;}wxVideoMode wxDisplayImplMacOSX::GetCurrentMode() const{    CFDictionaryRef theValue = CGDisplayCurrentMode( m_id );    return wxVideoMode(        wxCFDictKeyToInt( theValue, kCGDisplayWidth ),        wxCFDictKeyToInt( theValue, kCGDisplayHeight ),        wxCFDictKeyToInt( theValue, kCGDisplayBitsPerPixel ),        wxCFDictKeyToInt( theValue, kCGDisplayRefreshRate ));}bool wxDisplayImplMacOSX::ChangeMode( const wxVideoMode& mode ){    // Changing to default mode (wxDefaultVideoMode) doesn't    // work because we don't have access to the system's 'scrn'    // resource which holds the user's mode which the system    // will return to after this app is done    boolean_t bExactMatch;    CFDictionaryRef theCGMode = CGDisplayBestModeForParametersAndRefreshRate(        m_id,        (size_t)mode.bpp,        (size_t)mode.w,        (size_t)mode.h,        (double)mode.refresh,        &bExactMatch );    bool bOK = bExactMatch;    if (bOK)        bOK = CGDisplaySwitchToMode( m_id, theCGMode ) == CGDisplayNoErr;    return bOK;}// ============================================================================// wxDisplay::CreateFactory()// ============================================================================/* static */ wxDisplayFactory *wxDisplay::CreateFactory(){    return new wxDisplayFactoryMacOSX;}#else // !__WXMAC_OSX__class wxDisplayImplMac : public wxDisplayImpl{public:    wxDisplayImplMac(unsigned n, GDHandle hndl)        : wxDisplayImpl(n),          m_hndl(hndl)    {    }    virtual wxRect GetGeometry() const;    virtual wxString GetName() const { return wxString(); }    virtual wxArrayVideoModes GetModes(const wxVideoMode& mode) const;    virtual wxVideoMode GetCurrentMode() const;    virtual bool ChangeMode(const wxVideoMode& mode);private:    GDHandle m_hndl;    DECLARE_NO_COPY_CLASS(wxDisplayImplMac)};class wxDisplayFactoryMac : public wxDisplayFactory{public:    wxDisplayFactoryMac();    virtual wxDisplayImpl *CreateDisplay(unsigned n);    virtual unsigned GetCount();    virtual int GetFromPoint(const wxPoint& pt);protected:    DECLARE_NO_COPY_CLASS(wxDisplayFactoryMac)};// ============================================================================// wxDisplayFactoryMac implementation// ============================================================================unsigned wxDisplayFactoryMac::GetCount(){    unsigned num = 0;    GDHandle hndl = DMGetFirstScreenDevice(true);    while(hndl)    {        num++;        hndl = DMGetNextScreenDevice(hndl, true);    }    return num;}int wxDisplayFactoryMac::GetFromPoint(const wxPoint &p){    unsigned num = 0;    GDHandle hndl = DMGetFirstScreenDevice(true);    while(hndl)    {        Rect screenrect = (*hndl)->gdRect;        if (p.x >= screenrect.left &&            p.x <= screenrect.right &&            p.y >= screenrect.top &&            p.y <= screenrect.bottom)        {            return num;        }        num++;        hndl = DMGetNextScreenDevice(hndl, true);    }    return wxNOT_FOUND;}wxDisplayImpl *wxDisplayFactoryMac::CreateDisplay(unsigned n){    unsigned nOrig = n;    GDHandle hndl = DMGetFirstScreenDevice(true);    while(hndl)    {        if (n == 0)        {            return new wxDisplayImplMac(nOrig, hndl);        }        n--;        hndl = DMGetNextScreenDevice(hndl, true);    }    return NULL;}// ============================================================================// wxDisplayImplMac implementation// ============================================================================wxRect wxDisplayImplMac::GetGeometry() const{    Rect screenrect = (*m_hndl)->gdRect;    return wxRect(screenrect.left, screenrect.top,                  screenrect.right - screenrect.left,                  screenrect.bottom - screenrect.top);}struct DMModeIteratorRec{    wxArrayVideoModes* pModes;    const wxVideoMode* pMatchMode;

⌨️ 快捷键说明

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