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

📄 qt_mac.h

📁 Trolltech公司发布的图形界面操作系统。可在qt-embedded-2.3.10平台上编译为嵌入式图形界面操作系统。
💻 H
字号:
/************************************************************************ Copyright (C) 2000-2005 Trolltech AS.  All rights reserved.**** This file is part of the Qtopia Environment.** ** This program is free software; you can redistribute it and/or modify it** under the terms of the GNU General Public License as published by the** Free Software Foundation; either version 2 of the License, or (at your** option) any later version.** ** A copy of the GNU GPL license version 2 is included in this package as ** LICENSE.GPL.**** This program is distributed in the hope that it will be useful, but** WITHOUT ANY WARRANTY; without even the implied warranty of** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ** See the GNU General Public License for more details.**** In addition, as a special exception Trolltech gives permission to link** the code of this program with Qtopia applications copyrighted, developed** and distributed by Trolltech under the terms of the Qtopia Personal Use** License Agreement. You must comply with the GNU General Public License** in all respects for all of the code used other than the applications** licensed under the Qtopia Personal Use License Agreement. If you modify** this file, you may extend this exception to your version of the file,** but you are not obligated to do so. If you do not wish to do so, delete** this exception statement from your version.** ** See http://www.trolltech.com/gpl/ for GPL licensing information.**** Contact info@trolltech.com if any conditions of this licensing are** not clear to you.************************************************************************/#ifndef QT_MAC_H#define QT_MAC_H#undef OLD_DEBUG#ifdef DEBUG#define OLD_DEBUG DEBUG#undef DEBUG#endif#define DEBUG 0#ifndef __IMAGECAPTURE__#define __IMAGECAPTURE__#endif#include <Carbon/Carbon.h>#include <QuickTime/Movies.h>#undef QT_BUILD_KEY#include <qconfig.h> //We need this to get QT_MACOSX_VERSION#include "qglobal.h"#ifdef Q_OS_MAC9# define QMAC_DEFAULT_STYLE "QPlatinumStyle" //Default style# include "qt_mac9.h"#elif defined(Q_OS_MACX)# define QMAC_DEFAULT_STYLE "QMacStyle" //DefaultStyle#endif#if !defined(Q_WS_MACX) || QT_MACOSX_VERSION < 0x1020 || QT_MACOSX_VERSION >= 0x1030# define QMAC_NO_FAKECURSOR#endif/* We don't use the ApplicationEventLoop because it can causes bad behaviour in   multithreaded applications. I've left the code in however because using the   ApplicationEventLoop solved other problems (ages ago) - for example the gumdrop   "hover" effects. *///#define QMAC_USE_APPLICATION_EVENT_LOOP#undef DEBUG#ifdef OLD_DEBUG#define DEBUG OLD_DEBUG#endif#undef OLD_DEBUG#include "qnamespace.h"#if 0#ifdef Q_WS_MAC#include "qpainter.h"#include "qwidget.h"extern int mac_window_count; //qwidget_mac.cpp#ifdef QT_THREAD_SUPPORT#include "qthread.h"extern QMutex *qt_mac_port_mutex; //qapplication_mac.cpp#endifclass QMacBlockingFunction : public QObject //done in qapplication_mac.cpp{private:    static int block;public:    QMacBlockingFunction();    ~QMacBlockingFunction() { block--; }    static bool blocking() { return block != 0; }protected:    void timerEvent(QTimerEvent *);};class QMacSavedFontInfo {private:    void init(CGrafPtr);protected:    short tfont, tface;    int tsize;public:    inline QMacSavedFontInfo() { GWorldPtr w; GDHandle h; GetGWorld(&w, &h); init(w); }    inline QMacSavedFontInfo(CGrafPtr w) { init(w); }    ~QMacSavedFontInfo();};inline QMacSavedFontInfo::~QMacSavedFontInfo() {    if(mac_window_count) {	TextFont(tfont);	TextFace(tface);	TextSize(tsize);    }}inline void QMacSavedFontInfo::init(CGrafPtr w) {    if(mac_window_count) {	tfont = GetPortTextFont(w);	tface = GetPortTextFace(w);	tsize = GetPortTextSize(w);    }}class QMacFontInfo{public:    inline QMacFontInfo() : fi_fnum(0), fi_face(0), fi_size(0), fi_enc(0), fi_astyle(0)	{ }    inline ~QMacFontInfo() 	{ if(fi_astyle && fi_astyle->deref()) {	    ATSUDisposeStyle(fi_astyle->style);	    delete fi_astyle;	} }    inline QMacFontInfo &operator=(const QMacFontInfo &rhs) {	setEncoding(rhs.encoding());	setFont(rhs.font());	setStyle(rhs.style());	setSize(rhs.size());	if(rhs.atsuStyle()) {	    rhs.atsuStyle()->ref();	    setATSUStyle(rhs.atsuStyle());	} else {	    if(fi_astyle && fi_astyle->deref()) {		ATSUDisposeStyle(fi_astyle->style);		delete fi_astyle;	    }	    setStyle(NULL);	}	return *this;    }    inline TextEncoding encoding() const { return fi_enc; }    inline void setEncoding(TextEncoding f) { fi_enc = f; }    inline short font() const { return fi_fnum; }    inline void setFont(short f) { fi_fnum = f; }    inline short style() const { return fi_face; }    inline void setStyle(short f) { fi_face = f; }    inline int size() const { return fi_size; }    inline void setSize(int f) { fi_size = f; }    struct QATSUStyle : public QShared {	ATSUStyle style;	RGBColor rgb;    };    inline QATSUStyle *atsuStyle() const { return fi_astyle; }    inline void setATSUStyle(QATSUStyle *s) { fi_astyle = s; }private:    short fi_fnum, fi_face;    int fi_size;    TextEncoding fi_enc;    QATSUStyle *fi_astyle;};class QFontEngine;class QFontDef;class QFontPrivate;class QMacSetFontInfo : public QMacSavedFontInfo, public QMacFontInfo {private:    static QMacFontInfo *createFontInfo(const QFontEngine *fe, const QFontDef *def, QPaintDevice *pdev);public:    //create this for temporary font settting    inline QMacSetFontInfo(const QFontPrivate *d, QPaintDevice *pdev) : QMacSavedFontInfo(), 									QMacFontInfo() { setMacFont(d, this, pdev); }    inline QMacSetFontInfo(const QFontEngine *fe, QPaintDevice *pdev) : QMacSavedFontInfo(), 									QMacFontInfo() { setMacFont(fe, this, pdev); }    //you can use these to cause font setting, without restoring old    static bool setMacFont(const QMacFontInfo *f, QMacSetFontInfo *sfi=NULL);    static bool setMacFont(const QFontPrivate *d, QMacSetFontInfo *sfi=NULL, QPaintDevice *pdev=NULL);    static bool setMacFont(const QFontEngine *fe, QMacSetFontInfo *sfi=NULL, QPaintDevice *pdev=NULL);};#include "qptrlist.h"#include "qpaintdevice.h"extern QPaintDevice *qt_mac_safe_pdev; //qapplication_mac.cppextern QPainter *qt_mac_current_painter; //qpainter_mac.cppclass QMacSavedPortInfo{    RgnHandle clip;    GWorldPtr world;    GDHandle handle;    PenState pen; //go pennstate    RGBColor back, fore;    QMacSavedFontInfo *fi;    QPainter *painter;    bool valid_gworld;    void init();    public:    inline QMacSavedPortInfo() { init(); }    inline QMacSavedPortInfo(QPaintDevice *pd) { init(); setPaintDevice(pd); }    inline QMacSavedPortInfo(QWidget *w, bool set_clip=FALSE) { init(); setPaintDevice(w, set_clip); }    inline QMacSavedPortInfo(QPaintDevice *pd, const QRect &r) 	{ init(); setPaintDevice(pd); setClipRegion(r); }    inline QMacSavedPortInfo(QPaintDevice *pd, const QRegion &r) 	{ init(); setPaintDevice(pd); setClipRegion(r); }    ~QMacSavedPortInfo();    static bool setClipRegion(const QRect &r);    static bool setClipRegion(const QRegion &r);    static bool setPaintDevice(QPaintDevice *);    static bool setPaintDevice(QWidget *, bool set_clip=FALSE, bool with_child=TRUE);    static bool flush(QPaintDevice *);    static bool flush(QPaintDevice *, QRegion r, bool force=FALSE);    static void setAlphaTransparency(QWidget *, float);};inline bool QMacSavedPortInfo::flush(QPaintDevice *pdev) {#ifdef Q_WS_MACX    if(pdev->devType() == QInternal::Widget) {	QWidget *w = (QWidget *)pdev;	if(!w->isHidden() && QDIsPortBuffered(GetWindowPort((WindowPtr)w->handle()))) {	    QDFlushPortBuffer(GetWindowPort((WindowPtr)w->handle()), NULL);	    return TRUE;	}    } #else    Q_UNUSED(pdev);#endif    return FALSE;}inline bool QMacSavedPortInfo::flush(QPaintDevice *pdev, QRegion r, bool force) {#ifdef Q_WS_MACX    if(pdev->devType() == QInternal::Widget) {	QWidget *w = (QWidget *)pdev;	r.translate(w->topLevelWidget()->geometry().x(), w->topLevelWidget()->geometry().y());	if(!w->isHidden() || QDIsPortBuffered(GetWindowPort((WindowPtr)w->handle()))) {	    QDFlushPortBuffer(GetWindowPort((WindowPtr)w->handle()), r.handle(force));	    return TRUE;	}    } #else    Q_UNUSED(pdev);    Q_UNUSED(r);    Q_UNUSED(force);#endif    return FALSE;}#ifdef Q_WS_MACXextern "C" {    typedef struct CGSConnection *CGSConnectionRef;    typedef struct CGSWindow *CGSWindowRef;    extern OSStatus CGSSetWindowAlpha(CGSConnectionRef, CGSWindowRef, float);    extern CGSWindowRef GetNativeWindowFromWindowRef(WindowRef);    extern CGSConnectionRef _CGSDefaultConnection();}#endifinline void QMacSavedPortInfo::setAlphaTransparency(QWidget *w, float l){#ifdef Q_WS_MACX    CGSSetWindowAlpha(_CGSDefaultConnection(), 		      GetNativeWindowFromWindowRef((WindowRef)w->handle()), l);#else    Q_UNUSED(w);    Q_UNUSED(l);#endif}inline bool QMacSavedPortInfo::setClipRegion(const QRect &rect){    Rect r;    SetRect(&r, rect.x(), rect.y(), rect.right()+1, rect.bottom()+1);#if defined(QT_THREAD_SUPPORT)    if(qt_mac_port_mutex)	qt_mac_port_mutex->lock();#endif    qt_mac_current_painter = NULL;    ClipRect(&r);#if defined(QT_THREAD_SUPPORT)    if(qt_mac_port_mutex)	qt_mac_port_mutex->unlock();#endif    return TRUE;}inline bool QMacSavedPortInfo::setClipRegion(const QRegion &r){    if(r.isNull())	return setClipRegion(QRect());    else if(!r.handle())	return setClipRegion(r.boundingRect());#if defined(QT_THREAD_SUPPORT)    if(qt_mac_port_mutex)	qt_mac_port_mutex->lock();#endif    qt_mac_current_painter = NULL;    SetClip(r.handle());#if defined(QT_THREAD_SUPPORT)    if(qt_mac_port_mutex)	qt_mac_port_mutex->unlock();#endif    return TRUE;}inline boolQMacSavedPortInfo::setPaintDevice(QWidget *w, bool set_clip, bool with_child) {    if(!w)	return FALSE;    if(!setPaintDevice((QPaintDevice *)w))	return FALSE;    if(set_clip) 	return setClipRegion(w->clippedRegion(with_child));    return TRUE;}inline boolQMacSavedPortInfo::setPaintDevice(QPaintDevice *pd){    if(!pd)	return FALSE;#if 0    if(qt_mac_current_painter && qt_mac_current_painter->handle() == pd->handle())	return TRUE;#endif    bool ret = TRUE;#if defined(QT_THREAD_SUPPORT)    if(qt_mac_port_mutex)	qt_mac_port_mutex->lock();#endif//    if(qt_mac_current_painter && qt_mac_current_painter->handle() != pd->handle())	qt_mac_current_painter = NULL;    if(pd->devType() == QInternal::Widget)	SetPortWindowPort((WindowPtr)pd->handle());    else if(pd->devType() == QInternal::Pixmap || pd->devType() == QInternal::Printer)	SetGWorld((GrafPtr)pd->handle(), 0); //set the gworld    else	ret = FALSE;#if defined(QT_THREAD_SUPPORT)    if(qt_mac_port_mutex)	qt_mac_port_mutex->unlock();#endif    return ret;}    inline void QMacSavedPortInfo::init(){#if defined(QT_THREAD_SUPPORT)    if(qt_mac_port_mutex)	qt_mac_port_mutex->lock();#endif    fi = NULL;    painter = qt_mac_current_painter;    if(mac_window_count) {   	GetBackColor(&back);	GetForeColor(&fore);	GetGWorld(&world, &handle);	valid_gworld = TRUE;	fi = new QMacSavedFontInfo(world);	clip = NewRgn();	GetClip(clip);	GetPenState(&pen);    }}inline QMacSavedPortInfo::~QMacSavedPortInfo(){    if(mac_window_count) {	if(valid_gworld) 	    SetGWorld(world,handle); //always do this one first	else	    setPaintDevice(qt_mac_safe_pdev);	SetClip(clip);	DisposeRgn(clip);	SetPenState(&pen);	RGBForeColor(&fore);	RGBBackColor(&back);    }    if(fi)	delete fi;    qt_mac_current_painter = painter;#if defined(QT_THREAD_SUPPORT)    if(qt_mac_port_mutex)	qt_mac_port_mutex->unlock();#endif}#endif //Q_WS_MAC#endif#endif // QT_MAC_H

⌨️ 快捷键说明

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