VirtualBox

Changeset 7407 in vbox


Ignore:
Timestamp:
Mar 10, 2008 2:35:46 PM (17 years ago)
Author:
vboxsync
Message:

FE/Qt4: Ported some parts of the console view and the qimage framebuffer class.

Location:
trunk/src/VBox/Frontends/VirtualBox4
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox4/include/VBoxConsoleView.h

    r7233 r7407  
    2525#include "VBoxGlobalSettings.h"
    2626
    27 #include <qdatetime.h>
     27/* Qt includes */
    2828#include <q3scrollview.h>
    29 #include <qpixmap.h>
    30 #include <qimage.h>
    31 
    32 #include <qkeysequence.h>
    33 //Added by qt3to4:
    34 #include <QTimerEvent>
    35 #include <QPaintEvent>
    36 #include <QLabel>
    37 #include <QEvent>
    3829
    3930#if defined (Q_WS_PM)
  • trunk/src/VBox/Frontends/VirtualBox4/include/VBoxFrameBuffer.h

    r7220 r7407  
    2121
    2222#include "COMDefs.h"
    23 //Added by qt3to4:
    24 #include <QMoveEvent>
    25 #include <QPaintEvent>
    26 
    27 class VBoxConsoleView;
    28 
    29 #include <qmutex.h>
    30 #include <qevent.h>
    31 #include <qpixmap.h>
    32 #include <qimage.h>
     23
     24/* Qt includes */
     25#include <QImage>
     26#include <QPixmap>
     27#include <QMutex>
    3328
    3429#if defined (VBOX_GUI_USE_SDL)
     
    4540#include <ddraw.h>
    4641#endif
     42
     43class VBoxConsoleView;
    4744
    4845//#define VBOX_GUI_FRAMEBUF_STAT
     
    151148    AssertMsg (addr, ("The buffer address must not be null"));
    152149
    153     bool rc = pm.convertFromImage (QImage (addr,
    154                                            display.GetWidth(), display.GetHeight(),
    155                                            display.GetBitsPerPixel(),
    156                                            0, 0, QImage::LittleEndian));
    157     AssertMsg (rc, ("convertFromImage() must always return true"));
     150    QImage::Format format = QImage::Format_Invalid;
     151    switch (display.GetBitsPerPixel())
     152    {
     153        /* 32-, 8- and 1-bpp are the only depths suported by QImage */
     154        case 32:
     155            format = QImage::Format_RGB32;
     156            break;
     157        case 8:
     158            format = QImage::Format_Indexed8;
     159            break;
     160        case 1:
     161            format = QImage::Format_Mono;
     162            break;
     163    }
     164
     165    bool rc = false;
     166    if(format != QImage::Format_Invalid)
     167    {
     168        pm = QPixmap::fromImage (QImage (addr,
     169                                         display.GetWidth(), display.GetHeight(),
     170                                         format));
     171        rc = !pm.isNull();
     172        AssertMsg (rc, ("convertFromImage() must always return true"));
     173    }
    158174
    159175    display.UnlockFramebuffer();
  • trunk/src/VBox/Frontends/VirtualBox4/src/VBoxConsoleView.cpp

    r7346 r7407  
    2929#endif
    3030
    31 #include <qapplication.h>
    32 #include <qstatusbar.h>
    33 #include <qlabel.h>
    34 #include <qpainter.h>
    35 #include <qpixmap.h>
    36 #include <qimage.h>
    37 #include <qbitmap.h>
    38 #include <qcursor.h>
    39 #include <qthread.h>
    40 
    41 #include <qmenudata.h>
    42 #include <qmenubar.h>
    43 #include <qwidget.h>
    44 #include <qtimer.h>
    45 //Added by qt3to4:
     31/* Qt includes */
     32#include <QMenuBar>
    4633#include <QDesktopWidget>
    47 #include <QTimerEvent>
    48 #include <QMoveEvent>
    49 #include <QWheelEvent>
    50 #include <QMouseEvent>
    51 #include <QKeyEvent>
    52 #include <QEvent>
    53 #include <QPaintEvent>
     34#include <QTimer>
     35#include <QStatusBar>
     36#include <QPainter>
    5437
    5538#ifdef Q_WS_WIN
     
    441424        CGuest guest = mView->console().GetGuest();
    442425        LogFlowFunc (("ver=%s, active=%d\n",
    443                       guest.GetAdditionsVersion().latin1(),
     426                      guest.GetAdditionsVersion().toLatin1().constData(),
    444427                      guest.GetAdditionsActive()));
    445428        QApplication::postEvent (mView,
     
    521504        QApplication::postEvent (mView,
    522505                                 new RuntimeErrorEvent (!!fatal,
    523                                                         QString::fromUcs2 (id),
    524                                                         QString::fromUcs2 (message)));
     506                                                        QString::fromUtf16 (id),
     507                                                        QString::fromUtf16 (message)));
    525508        return S_OK;
    526509    }
     
    664647#ifdef Q_WS_X11
    665648    /* initialize the X keyboard subsystem */
    666     initXKeyboard (this->x11Display());
     649    initXKeyboard (QX11Info::display());
    667650#endif
    668651
     
    674657
    675658    mToggleFSModeTimer = new QTimer (this);
     659    mToggleFSModeTimer->setSingleShot (true);
    676660    connect (mToggleFSModeTimer, SIGNAL (timeout()),
    677661             this, SIGNAL (resizeHintDone()));
     
    707691            /* This is somehow necessary to prevent strange X11 warnings on
    708692             * i386 and segfaults on x86_64. */
    709             XFlush(this->x11Display());
     693            XFlush(QX11Info::display());
    710694# endif
    711695            mFrameBuf = new VBoxSDLFrameBuffer (this);
     
    756740    AssertWrapperOk (mConsole);
    757741
    758     viewport()->setEraseColor (Qt::black);
     742    QPalette palette (viewport()->palette());
     743    palette.setColor (viewport()->backgroundRole(), Qt::black);
     744    viewport()->setPalette (palette);
    759745
    760746    setSizePolicy (QSizePolicy (QSizePolicy::Maximum, QSizePolicy::Maximum));
     
    907893    /* resize the frame to fit the contents */
    908894    s -= tlw->size();
    909     fr.rRight() += s.width();
    910     fr.rBottom() += s.height();
     895    fr.setRight (fr.right() + s.width());
     896    fr.setBottom (fr.bottom() + s.height());
    911897
    912898    if (adjustPosition)
     
    11181104                viewport()->repaint (re->x() - contentsX(),
    11191105                                     re->y() - contentsY(),
    1120                                      re->width(), re->height(), false);
     1106                                     re->width(), re->height());
    11211107                /* mConsole.GetDisplay().UpdateCompleted(); - the event was acked already */
    11221108                return true;
     
    11331119                    mMainWnd->setMask (sre->region());
    11341120                }
    1135                 else if (!mLastVisibleRegion.isNull() &&
     1121                else if (!mLastVisibleRegion.isEmpty() &&
    11361122                         !mMainWnd->isTrueSeamless())
    11371123                    mLastVisibleRegion = QRegion();
     
    12351221                bool destroyed = list.indexOf (mMainWnd) < 0;
    12361222                if (!destroyed && mMainWnd->statusBar())
    1237                     mMainWnd->statusBar()->clear();
     1223                    mMainWnd->statusBar()->clearMessage();
    12381224
    12391225                return true;
     
    19171903
    19181904    /* perform the mega-complex translation using the wine algorithms */
    1919     handleXKeyEvent (this->x11Display(), event, &wineKeyboardInfo);
     1905    handleXKeyEvent (QX11Info::display(), event, &wineKeyboardInfo);
    19201906
    19211907#if 0
     
    22572243        doResizeHint (newSize);
    22582244    }
    2259     mToggleFSModeTimer->start (2000, true);
     2245    mToggleFSModeTimer->start (2000);
    22602246}
    22612247
     
    25072493#elif defined (Q_WS_X11)
    25082494        NOREF(aUniKey);
    2509         Display *display = x11Display();
     2495        Display *display = QX11Info::display();
    25102496        int keysyms_per_keycode = getKeysymsPerKeycode();
    25112497        KeyCode kc = XKeysymToKeycode (display, aKey);
     
    27362722                if (scrGeo.width() < contentsWidth())
    27372723                {
    2738                     if (scrGeo.rLeft() == aGlobalPos.x()) dx = -1;
    2739                     if (scrGeo.rRight() == aGlobalPos.x()) dx = +1;
     2724                    if (scrGeo.left() == aGlobalPos.x()) dx = -1;
     2725                    if (scrGeo.right() == aGlobalPos.x()) dx = +1;
    27402726                }
    27412727                if (scrGeo.height() < contentsHeight())
    27422728                {
    2743                     if (scrGeo.rTop() == aGlobalPos.y()) dy = -1;
    2744                     if (scrGeo.rBottom() == aGlobalPos.y()) dy = +1;
     2729                    if (scrGeo.top() == aGlobalPos.y()) dy = -1;
     2730                    if (scrGeo.bottom() == aGlobalPos.y()) dy = +1;
    27452731                }
    27462732                if (dx || dy)
     
    28302816                 *  needs a 32bpp image
    28312817                 */
    2832                 QImage shot = QImage (mFrameBuf->width(), mFrameBuf->height(), 32, 0);
     2818                QImage shot = QImage (mFrameBuf->width(), mFrameBuf->height(), QImage::Format_RGB32);
    28332819                CDisplay dsp = mConsole.GetDisplay();
    28342820                dsp.TakeScreenShot (shot.bits(), shot.width(), shot.height());
     
    28412827                {
    28422828                    dimImage (shot);
    2843                     mPausedShot = shot;
     2829                    mPausedShot = QPixmap::fromImage (shot);
    28442830                    /* fully repaint to pick up mPausedShot */
    28452831                    viewport()->repaint();
     
    28622848                {
    28632849                    /* reset the pixmap to free memory */
    2864                     mPausedShot.resize (0, 0);
     2850                    mPausedShot = QPixmap ();
    28652851                    /*
    28662852                     *  ask for full guest display update (it will also update
     
    30153001#elif defined (Q_WS_X11)
    30163002        if (aCapture)
    3017                 XGrabKey (x11Display(), AnyKey, AnyModifier,
     3003                XGrabKey (QX11Info::display(), AnyKey, AnyModifier,
    30183004                  topLevelWidget()->winId(), False,
    30193005                  GrabModeAsync, GrabModeAsync);
    30203006        else
    3021                 XUngrabKey (x11Display(),  AnyKey, AnyModifier,
     3007                XUngrabKey (QX11Info::display(),  AnyKey, AnyModifier,
    30223008                    topLevelWidget()->winId());
    30233009#elif defined (Q_WS_MAC)
     
    34613447            }
    34623448
    3463             Cursor cur = XcursorImageLoadCursor (x11Display(), img);
     3449            Cursor cur = XcursorImageLoadCursor (QX11Info::display(), img);
    34643450            Assert (cur);
    34653451            if (cur)
  • trunk/src/VBox/Frontends/VirtualBox4/src/VBoxFrameBuffer.cpp

    r7220 r7407  
    2323#include "VBoxGlobal.h"
    2424
    25 #include <qapplication.h>
    26 //Added by qt3to4:
    27 #include <QPaintEvent>
     25/* Qt includes */
     26#include <QPainter>
    2827
    2928//
     
    4241
    4342VBoxFrameBuffer::VBoxFrameBuffer (VBoxConsoleView *aView)
    44     : mView (aView), mMutex (new QMutex (true))
     43    : mView (aView), mMutex (new QMutex (QMutex::Recursive))
    4544    , mWdt (0), mHgt (0)
    4645#if defined (Q_OS_WIN32)
     
    336335    FRAMEBUF_DEBUG_START (xxx);
    337336
    338     if (r.width() < mWdt * 2 / 3)
    339     {
    340         /* this method is faster for narrow updates */
    341         mPM.convertFromImage (mImg.copy (r.x() + mView->contentsX(),
    342                                          r.y() + mView->contentsY(),
    343                                          r.width(), r.height()));
    344 
    345 #warning port me
     337    /* In Qt4 there is not bitblt anymore. So
     338     * we create a qpainter object and paint on
     339     * that. Todo: Do some performance test. */
     340#warning port me: do it faster?
     341    QPainter painter (mView->viewport());
     342    painter.drawImage (r.x(), r.y(), mImg,
     343                       r.x() + mView->contentsX(),
     344                       r.y() + mView->contentsY(),
     345                       r.width(), r.height());
     346//    if (r.width() < mWdt * 2 / 3)
     347//    {
     348//        /* this method is faster for narrow updates */
     349//        mPM.convertFromImage (mImg.copy (r.x() + mView->contentsX(),
     350//                                         r.y() + mView->contentsY(),
     351//                                         r.width(), r.height()));
    346352//        ::bitBlt (mView->viewport(), r.x(), r.y(),
    347353//                  &mPM, 0, 0,
    348354//                  r.width(), r.height(),
    349355//                  Qt::CopyROP, TRUE);
    350     }
    351     else
    352     {
    353         /* this method is faster for wide updates */
    354         mPM.convertFromImage (QImage (mImg.scanLine (r.y() + mView->contentsY()),
    355                                       mImg.width(), r.height(), mImg.depth(),
    356                                       0, 0, QImage::LittleEndian));
    357 
    358 #warning port me
     356//    }
     357//    else
     358//    {
     359//        /* this method is faster for wide updates */
     360//        mPM.convertFromImage (QImage (mImg.scanLine (r.y() + mView->contentsY()),
     361//                                      mImg.width(), r.height(), mImg.depth(),
     362//                                      0, 0, QImage::LittleEndian));
    359363//        ::bitBlt (mView->viewport(), r.x(), r.y(),
    360364//                  &mPM, r.x() + mView->contentsX(), 0,
    361365//                  r.width(), r.height(),
    362366//                  Qt::CopyROP, TRUE);
    363     }
     367//    }
    364368
    365369    FRAMEBUF_DEBUG_STOP (xxx, r.width(), r.height());
     
    384388    if (re->pixelFormat() == FramebufferPixelFormat_FOURCC_RGB)
    385389    {
     390        QImage::Format format;
    386391        switch (re->bitsPerPixel())
    387392        {
    388393            /* 32-, 8- and 1-bpp are the only depths suported by QImage */
    389394            case 32:
     395                format = QImage::Format_RGB32;
    390396                break;
    391397            case 8:
     398                format = QImage::Format_Indexed8;
     399                remind = true;
     400                break;
    392401            case 1:
     402                format = QImage::Format_Mono;
    393403                remind = true;
    394404                break;
     
    407417            if (!fallback)
    408418            {
    409                 mImg = QImage ((uchar *) re->VRAM(), mWdt, mHgt,
    410                                re->bitsPerPixel(), NULL, 0, QImage::LittleEndian);
     419                mImg = QImage ((uchar *) re->VRAM(), mWdt, mHgt, format);
    411420                mPixelFormat = FramebufferPixelFormat_FOURCC_RGB;
    412421                mUsesGuestVRAM = true;
     
    423432        /* we don't support either the pixel format or the color depth,
    424433         * fallback to a self-provided 32bpp RGB buffer */
    425         mImg = QImage (mWdt, mHgt, 32, 0, QImage::LittleEndian);
     434        mImg = QImage (mWdt, mHgt, QImage::Format_RGB32);
    426435        mPixelFormat = FramebufferPixelFormat_FOURCC_RGB;
    427436        mUsesGuestVRAM = false;
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette