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

📄 qapplication_qws.cpp

📁 奇趣公司比较新的qt/emd版本
💻 CPP
📖 第 1 页 / 共 5 页
字号:
                region_offset_window = 0;            } else {                if (region_offset_window == re->window() && !region_offset.isNull()) {//                    qDebug("Rgn Adjust a %d, %d", region_offset.x(), region_offset.y());                    translateExpose(re, region_offset);                }                if (!region_event || re->window() == region_event->window()) {                    if (region_event) {                        QRegion r1;                        r1.setRects(re->rectangles, re->simpleData.nrectangles);                        QRegion r2;                        r2.setRects(region_event->rectangles,                                region_event->simpleData.nrectangles);                        QRegion ur(r1 + r2);                        region_event->setData(reinterpret_cast<const char *>(ur.rects().constData()),                                ur.rects().count() * sizeof(QRect), true);                        region_event->simpleData.nrectangles = ur.rects().count();                        delete e;                    } else {                        region_event = re;                    }                } else {                    queue.append(e);                }            }#endif // 0 (RegionModified)#ifndef QT_NO_QWS_PROPERTIES        } else if (e->type == QWSEvent::PropertyReply) {            QWSPropertyReplyEvent *pe = static_cast<QWSPropertyReplyEvent*>(e);            int len = pe->simpleData.len;            char *data;            if (len <= 0) {                data = 0;            } else {                data = new char[len];                memcpy(data, pe->data, len) ;            }            QPaintDevice::qwsDisplay()->getPropertyLen = len;            QPaintDevice::qwsDisplay()->getPropertyData = data;            delete e;#endif // QT_NO_QWS_PROPERTIES        } else if (e->type==QWSEvent::MaxWindowRect && qt_screen) {            // Process this ASAP, in case new widgets are created (startup)            setMaxWindowRect((static_cast<QWSMaxWindowRectEvent*>(e))->simpleData.rect);            delete e;#ifndef QT_NO_COP        } else if (e->type == QWSEvent::QCopMessage) {            QWSQCopMessageEvent *pe = static_cast<QWSQCopMessageEvent*>(e);            if (pe->simpleData.is_response) {                qcop_response = pe;            } else {                queue.append(e);            }#endif        } else {            queue.append(e);        }        //debugQueue();#ifndef QT_NO_QWS_MULTIPROCESS        if (csocket && bytesRead >= bytesAvailable)            break;#endif        e = readMore();    }}#if 0void QWSDisplay::Data::offsetPendingExpose(int window, const QPoint &offset){    if (offset.isNull())        return;    region_offset = offset;    region_offset_window = window;    for (int i = 0; i < queue.size(); ++i) {        QWSEvent *e = queue.at(i);        if (e->type == QWSEvent::RegionModified) {            QWSRegionModifiedEvent *re = static_cast<QWSRegionModifiedEvent *>(e);            if (!re->simpleData.is_ack && region_offset_window == re->window()) {//                qDebug("Rgn Adjust b %d, %d", region_offset.x(), region_offset.y());                translateExpose(re, region_offset);            }        }    }    if (region_event && region_offset_window == region_event->window()) {//        qDebug("Rgn Adjust c %d, %d", region_offset.x(), region_offset.y());        translateExpose(region_event, region_offset);    }}#endif#ifndef QT_NO_QWS_MULTIPROCESSstatic int qws_connection_timeout = 5;void QWSDisplay::Data::connectToPipe(){    Q_ASSERT(csocket);    int timeout = qgetenv("QWS_CONNECTION_TIMEOUT").toInt();    if (timeout)        qws_connection_timeout = timeout;    const QString pipe = qws_qtePipeFilename();    int i = 0;    while (!csocket->connectToLocalFile(pipe)) {        if (++i > qws_connection_timeout) {            qWarning("No Qtopia Core server appears to be running.");            qWarning("If you want to run this program as a server,");            qWarning("add the \"-qws\" command-line option.");            exit(1);        }        sleep(1);    }}void QWSDisplay::Data::waitForConnection(){    connected_event = 0;    for (int i = 0; i < qws_connection_timeout; i++) {        fillQueue();        if (connected_event)            return;        csocket->flush();        csocket->waitForReadyRead(1000);    }    csocket->flush();    if (!connected_event)        qFatal("Did not receive a connection event from the qws server");}void QWSDisplay::Data::waitForRegionAck(int winId){    QWSEvent *ack = 0;    if (csocket) { // GuiClient        int i = 0;        while (!ack) {            fillQueue();            while (i < queue.size()) {                QWSEvent *e = queue.at(i);                if (e->type == QWSEvent::Region && e->window() == winId) {                    ack = e;                    queue.removeAt(i);                    break;                }                ++i;            }            if (!ack) {                csocket->flush();                csocket->waitForReadyRead(1000);            }        }    } else { // GuiServer        fillQueue();        for (int i = 0; i < queue.size(); /* nothing */) {            QWSEvent *e = queue.at(i);            if (e->type == QWSEvent::Region && e->window() == winId) {                ack = e;                queue.removeAt(i);                break;            }            ++i;        }        if (!ack) // already processed            return;    }    Q_ASSERT(ack);    qApp->qwsProcessEvent(ack);    delete ack;}void QWSDisplay::Data::waitForRegionEvents(int winId){    if (!clientLock)        return;    // fill queue with unreceived region events    if (!clientLock->hasLock(QWSLock::RegionEvent)) {        for (;;) {            fillQueue();            if (clientLock->hasLock(QWSLock::RegionEvent))                break;            csocket->flush();            csocket->waitForReadyRead(1000);        }    }    // check the queue for pending region events    QWSEvent *regionEvent = 0;    for (int i = 0; i < queue.size(); /* nothing */) {        QWSEvent *e = queue.at(i);        if (e->type == QWSEvent::Region && e->window() == winId) {            delete regionEvent;            regionEvent = e;            queue.removeAt(i);        } else {            ++i;        }    }    if (regionEvent) {        qApp->qwsProcessEvent(regionEvent);        delete regionEvent;    }}#endif // QT_NO_QWS_MULTIPROCESSvoid QWSDisplay::Data::waitForCreation(){    fillQueue();#ifndef QT_NO_QWS_MULTIPROCESS    while (unused_identifiers.count() == 0) {        if (csocket) {            csocket->flush();            csocket->waitForReadyRead(1000);        }        fillQueue();    }#endif}#ifndef QT_NO_QWS_MULTIPROCESSvoid QWSDisplay::Data::waitForPropertyReply(){    if (!csocket)        return;    fillQueue();    while (qt_fbdpy->getPropertyLen == -2) {        csocket->flush();        csocket->waitForReadyRead(1000);        fillQueue();    }}#endif#ifndef QT_NO_COPvoid QWSDisplay::Data::waitForQCopResponse(){    for (;;) {        fillQueue();        if (qcop_response)            break;#ifndef QT_NO_QWS_MULTIPROCESS        if (csocket) {            csocket->flush();            csocket->waitForReadyRead(1000);        }#endif    }    queue.prepend(qcop_response);    qcop_response = 0;}#endif/*!    \class QWSDisplay qwsdisplay_qws.h    \brief The QWSDisplay class provides a display for QWS; it is an internal class.    \internal    \ingroup qws*/QWSDisplay::QWSDisplay(){    d = new Data(0, qws_single_process);}QWSDisplay::~QWSDisplay(){    delete d;    delete lock;    lock = 0;}bool QWSDisplay::grabbed(){    return lock->locked();}void QWSDisplay::grab(){    lock->lock(QLock::Read);}void QWSDisplay::grab(bool write){    lock->lock(write ? QLock::Write : QLock::Read);}void QWSDisplay::ungrab(){    lock->unlock();}#if 0QWSRegionManager *QWSDisplay::regionManager() const{    return d->rgnMan;}#endifbool QWSDisplay::eventPending() const{#ifndef QT_NO_QWS_MULTIPROCESS    d->flush();#endif    d->fillQueue();    return d->queueNotEmpty();}/*  Caller must delete return value! */QWSEvent *QWSDisplay::getEvent(){    d->fillQueue();    Q_ASSERT(d->queueNotEmpty());    QWSEvent* e = d->dequeue();    return e;}uchar* QWSDisplay::frameBuffer() const { return qt_screen->base(); }int QWSDisplay::width() const { return qt_screen->width(); }int QWSDisplay::height() const { return qt_screen->height(); }int QWSDisplay::depth() const { return qt_screen->depth(); }int QWSDisplay::pixmapDepth() const { return qt_screen->pixmapDepth(); }bool QWSDisplay::supportsDepth(int depth) const { return qt_screen->supportsDepth(depth); }uchar *QWSDisplay::sharedRam() const { return d->sharedRam; }int QWSDisplay::sharedRamSize() const { return d->sharedRamSize; }#ifndef QT_NO_QWS_PROPERTIESvoid QWSDisplay::addProperty(int winId, int property){    QWSAddPropertyCommand cmd;    cmd.simpleData.windowid = winId;    cmd.simpleData.property = property;    d->sendCommand(cmd);}void QWSDisplay::setProperty(int winId, int property, int mode, const QByteArray &data){    QWSSetPropertyCommand cmd;    cmd.simpleData.windowid = winId;    cmd.simpleData.property = property;    cmd.simpleData.mode = mode;    cmd.setData(data.constData(), data.size());    d->sendCommand(cmd);}void QWSDisplay::setProperty(int winId, int property, int mode,                              const char * data){    QWSSetPropertyCommand cmd;    cmd.simpleData.windowid = winId;    cmd.simpleData.property = property;    cmd.simpleData.mode = mode;    cmd.setData(data, strlen(data));    d->sendCommand(cmd);}void QWSDisplay::removeProperty(int winId, int property){    QWSRemovePropertyCommand cmd;    cmd.simpleData.windowid = winId;    cmd.simpleData.property = property;    d->sendCommand(cmd);}/*    It is the caller's responsibility to delete[] \a data. */bool QWSDisplay::getProperty(int winId, int property, char *&data, int &len){    if (d->directServerConnection()) {        const char *propertyData;        bool retval = qwsServer->d_func()->get_property(winId, property, propertyData, len);        if (len <= 0) {            data = 0;        } else {            data = new char[len];            memcpy(data, propertyData, len) ;        }        return retval;    }    QWSGetPropertyCommand cmd;    cmd.simpleData.windowid = winId;    cmd.simpleData.property = property;    d->sendCommand(cmd);    getPropertyLen = -2;    getPropertyData = 0;#ifndef QT_NO_QWS_MULTIPROCESS    d->waitForPropertyReply();#endif    len = getPropertyLen;    data = getPropertyData;    getPropertyLen = -2;    getPropertyData = 0;    return len != -1;}#endif // QT_NO_QWS_PROPERTIESvoid QWSDisplay::setAltitude(int winId, int alt, bool fixed){    QWSChangeAltitudeCommand cmd;#ifdef QT_DEBUG    memset(cmd.simpleDataPtr, 0, sizeof(cmd.simpleData)); //shut up Valgrind#endif    cmd.simpleData.windowid = winId;    cmd.simpleData.altitude = QWSChangeAltitudeCommand::Altitude(alt);    cmd.simpleData.fixed = fixed;    if (d->directServerConnection()) {        qwsServer->d_func()->set_altitude(&cmd);    } else {        d->sendSynchronousCommand(cmd);    }}void QWSDisplay::setOpacity(int winId, int opacity){    QWSSetOpacityCommand cmd;    cmd.simpleData.windowid = winId;    cmd.simpleData.opacity = opacity;    if (d->directServerConnection()) {        qwsServer->d_func()->set_opacity(&cmd);    } else {        d->sendCommand(cmd);    }}

⌨️ 快捷键说明

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