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 <OGRE/OgreRenderWindow.h>
00034
00035 #include <QtGlobal>
00036 #include <QApplication>
00037 #include <QMoveEvent>
00038 #include <QPaintEvent>
00039 #include <QShowEvent>
00040 #include <QVBoxLayout>
00041
00042 namespace rviz
00043 {
00044
00045 RenderWidget::RenderWidget( RenderSystem* render_system, QWidget *parent )
00046 : QWidget( parent )
00047 , render_system_( render_system )
00048 , render_window_( 0 )
00049 {
00050 setAttribute(Qt::WA_OpaquePaintEvent,true);
00051 setAttribute(Qt::WA_PaintOnScreen,true);
00052
00053
00054
00055
00056
00057
00058
00059 this->renderFrame = new QFrame;
00060 this->renderFrame->setLineWidth(1);
00061 this->renderFrame->setFrameShadow(QFrame::Sunken);
00062 this->renderFrame->setFrameShape(QFrame::Box);
00063 this->renderFrame->show();
00064
00065 QVBoxLayout *mainLayout = new QVBoxLayout;
00066 mainLayout->setContentsMargins( 0, 0, 0, 0 );
00067 mainLayout->addWidget(this->renderFrame);
00068 this->setLayout(mainLayout);
00069
00070 #ifdef Q_OS_MAC
00071 uintptr_t win_id = winId();
00072 #else
00073 unsigned int win_id = renderFrame->winId();
00074 #endif
00075 QApplication::flush();
00076 QApplication::syncX();
00077 render_window_ = render_system_->makeRenderWindow( win_id, width(), height() );
00078 }
00079
00080 RenderWidget::~RenderWidget()
00081 {
00082 if( render_window_ )
00083 {
00084 render_window_->removeViewport( 0 );
00085 render_window_->destroy();
00086 }
00087
00088 render_window_ = 0;
00089 }
00090
00091 void RenderWidget::moveEvent(QMoveEvent *e)
00092 {
00093 QWidget::moveEvent(e);
00094
00095 if(e->isAccepted() && render_window_)
00096 {
00097 render_window_->windowMovedOrResized();
00098 }
00099 }
00100
00101 void RenderWidget::paintEvent(QPaintEvent *e)
00102 {
00103 if( render_window_ )
00104 {
00105 render_window_->update();
00106 }
00107 e->accept();
00108 }
00109
00110 void RenderWidget::resizeEvent(QResizeEvent *e)
00111 {
00112 if( render_window_ )
00113 {
00114
00115
00116
00117
00118 render_window_->resize( width() + (width() % 2), height() );
00119 render_window_->windowMovedOrResized();
00120 }
00121 }
00122
00123 }