Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #include "ogre_helpers/render_widget.h"
00031 #include "ogre_helpers/render_system.h"
00032
00033 #include <OgreRenderWindow.h>
00034
00035 #include <QtGlobal>
00036 #include <QApplication>
00037 #include <QMoveEvent>
00038 #include <QPaintEvent>
00039 #include <QShowEvent>
00040 #include <QVBoxLayout>
00041 #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
00042 #include <QWindow>
00043 #endif
00044
00045 namespace rviz
00046 {
00047
00048 RenderWidget::RenderWidget( RenderSystem* render_system, QWidget *parent )
00049 : QWidget( parent )
00050 , render_system_( render_system )
00051 , render_window_( 0 )
00052 {
00053 setAttribute(Qt::WA_OpaquePaintEvent,true);
00054 setAttribute(Qt::WA_PaintOnScreen,true);
00055
00056 #if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
00057
00058
00059
00060
00061
00062
00063 this->renderFrame = new QFrame;
00064 this->renderFrame->setLineWidth(1);
00065 this->renderFrame->setFrameShadow(QFrame::Sunken);
00066 this->renderFrame->setFrameShape(QFrame::Box);
00067 this->renderFrame->show();
00068
00069 QVBoxLayout *mainLayout = new QVBoxLayout;
00070 mainLayout->setContentsMargins( 0, 0, 0, 0 );
00071 mainLayout->addWidget(this->renderFrame);
00072 this->setLayout(mainLayout);
00073 #endif
00074
00075 #ifdef Q_OS_MAC
00076 uintptr_t win_id = winId();
00077 #else
00078 # if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
00079 unsigned int win_id = renderFrame->winId();
00080 # else
00081 unsigned int win_id = winId();
00082 # endif
00083 #endif
00084
00085 QApplication::flush();
00086
00087 #if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
00088 QApplication::syncX();
00089 double pixel_ratio = 1.0;
00090 #else
00091 QWindow* window = windowHandle();
00092 double pixel_ratio = window ? window->devicePixelRatio() : 1.0;
00093 #endif
00094 render_window_ = render_system_->makeRenderWindow( win_id, width(), height(), pixel_ratio );
00095 }
00096
00097 RenderWidget::~RenderWidget()
00098 {
00099 if( render_window_ )
00100 {
00101 render_window_->removeViewport( 0 );
00102 render_window_->destroy();
00103 }
00104
00105 render_window_ = 0;
00106 }
00107
00108 void RenderWidget::moveEvent(QMoveEvent *e)
00109 {
00110 QWidget::moveEvent(e);
00111
00112 if(e->isAccepted() && render_window_)
00113 {
00114 render_window_->windowMovedOrResized();
00115 }
00116 }
00117
00118 void RenderWidget::paintEvent(QPaintEvent *e)
00119 {
00120 if( render_window_ )
00121 {
00122 render_window_->update();
00123 }
00124 e->accept();
00125 }
00126
00127 void RenderWidget::resizeEvent(QResizeEvent *e)
00128 {
00129 if( render_window_ )
00130 {
00131
00132
00133
00134
00135 render_window_->resize( width() + (width() % 2), height() );
00136 render_window_->windowMovedOrResized();
00137 }
00138 }
00139
00140 }