Guest User

Untitled

a guest
Oct 20th, 2017
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.04 KB | None | 0 0
  1.  
  2. #ifndef PARAGON_UIMANAGER_HPP
  3. #define PARAGON_UIMANAGER_HPP
  4.  
  5. #include <QtGui/QtGui>
  6. #include <QtCore/QtCore>
  7. #include <QtCore/QObject>
  8. #include <QImageWriter>
  9. #include "irrlicht.h"
  10.  
  11. namespace client {
  12.  
  13.     namespace utility {
  14.  
  15.         /*
  16.         int nextHigherPowerOfTwo (int value) {
  17.  
  18.             --value;
  19.  
  20.             int retValue = 1;
  21.             while (retValue < value) {
  22.  
  23.                 retValue <<= 1;
  24.             }
  25.  
  26.             return retValue;
  27.         }*/
  28.     }
  29.  
  30.     class UIManager : public QObject {
  31.  
  32.         Q_OBJECT
  33.  
  34.         public:
  35.  
  36.             UIManager () : mWidgetScene (0), mWidgetView (0), mTopLevelWidget (0), mFocusedWidget (0) {
  37.  
  38.                 mWidgetScene = new QGraphicsScene (this);
  39.                 mWidgetView = new QGraphicsView (mWidgetScene);
  40.                 mWidgetView->setAlignment (Qt::AlignLeft | Qt::AlignTop);
  41.  
  42.                 QEvent wsce (QEvent::WindowActivate);
  43.                 QApplication::sendEvent (mWidgetScene, &wsce);
  44.  
  45.                 mWidgetView->setGeometry (QRect (0, 0, 640, 480));
  46.  
  47.                 //connect (mWidgetScene, SIGNAL (changed (const QList <QRectF> &)), this, SLOT (setUiDirty()));
  48.  
  49.             }
  50.  
  51.             virtual ~UIManager () {
  52.  
  53.                 QEvent wsce (QEvent::WindowDeactivate);
  54.                 QApplication::sendEvent (mWidgetScene, &wsce);
  55.             }
  56.  
  57.             void setActiveWidget (QWidget *widget) {
  58.  
  59.                 if (mTopLevelWidget && mTopLevelWidget != widget) {
  60.  
  61.                     if (mFocusedWidget) {
  62.  
  63.                         QEvent foe (QEvent::FocusOut);
  64.                         QApplication::sendEvent (mFocusedWidget, &foe);
  65.                         mFocusedWidget = NULL;
  66.                     }
  67.  
  68.                     mWidgetScene->clear();
  69.                     mTopLevelWidget = NULL;
  70.                 }
  71.  
  72.                 qDebug () << "added widget";
  73.                 mWidgetScene->addWidget (widget);
  74.                 mTopLevelWidget = widget;
  75.             }
  76.  
  77.             void renderIntoTexture (irr::video::ITexture *tex) {
  78.  
  79.                 uchar *pd = (uchar *) tex->lock();
  80.  
  81.                 QImage textureImg ((uchar *)pd, tex->getSize().Width, tex->getSize().Height, QImage::Format_ARGB32_Premultiplied);
  82.                 // textureImg.fill (0);
  83.  
  84.                 qDebug () << textureImg.height() << "," << textureImg.width();
  85.  
  86.                 QPainter painter (&textureImg);
  87.                 mWidgetView->render (&painter, QRect (QPoint (0, 0), mWidgetView->size()), QRect (QPoint (0, 0), mWidgetView->size()));
  88.                 painter.end();
  89.  
  90.                 QImageWriter writer ("foo.png");
  91.                 writer.setFormat ("png");
  92.                 if (!writer.write (textureImg)) {
  93.  
  94.                     qDebug () << writer.errorString();
  95.                 }
  96.  
  97.                 tex->unlock();
  98.  
  99.             }
  100.  
  101.         private:
  102.  
  103.             QGraphicsScene *mWidgetScene;
  104.             QGraphicsView *mWidgetView;
  105.             QWidget *mTopLevelWidget;
  106.             QWidget *mFocusedWidget;
  107.  
  108.     };
  109. }
  110.  
  111. #endif
Add Comment
Please, Sign In to add comment