summaryrefslogtreecommitdiffstats
path: root/src/komposeglfullscreenwidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/komposeglfullscreenwidget.cpp')
-rw-r--r--src/komposeglfullscreenwidget.cpp176
1 files changed, 176 insertions, 0 deletions
diff --git a/src/komposeglfullscreenwidget.cpp b/src/komposeglfullscreenwidget.cpp
new file mode 100644
index 0000000..095a1de
--- /dev/null
+++ b/src/komposeglfullscreenwidget.cpp
@@ -0,0 +1,176 @@
+//
+// C++ Implementation: komposeglwidget
+//
+// Description:
+//
+//
+// Author: Hans Oischinger <[email protected]>, (C) 2004
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+#include "komposeglfullscreenwidget.h"
+
+#include "komposelayout.h"
+#include "komposetaskmanager.h"
+#include "komposegldesktopwidget.h"
+#include <kdebug.h>
+
+#include <GL/gl.h>
+#include <GL/glut.h>
+
+KomposeGLFullscreenWidget::KomposeGLFullscreenWidget(QWidget *parent, const char *name) :
+ QGLWidget(parent, name)
+{
+ qDebug("KomposeGLFullscreenWidget::KomposeGLFullscreenWidget()");
+ layout = new KomposeLayout( this );
+
+ setWindowState(Qt::WindowMaximized | Qt::WindowActive);
+ showFullScreen();
+
+ createDesktopWidgets();
+}
+
+
+KomposeGLFullscreenWidget::~KomposeGLFullscreenWidget()
+{}
+
+void KomposeGLFullscreenWidget::createDesktopWidgets()
+{
+ // Create a Widget for every desktop
+ for (int i=0; i < KomposeTaskManager::instance()->getNumDesktops(); ++i)
+ {
+ int row = i / 2;
+ int col = i % 2;
+ //qDebug("rc %d %d", row, col);
+ desktop[i] = new KomposeGLDesktopWidget(i, this);
+ layout->add(dynamic_cast<KomposeWidgetInterface*>(desktop[i]));
+ }
+}
+
+void KomposeGLFullscreenWidget::initializeGL()
+{
+ // Set up the rendering context, define display lists etc.:
+ if( !format().hasOpenGL() )
+ {
+ qWarning( "KomposeGLFullscreenWidget::initializeGL() - OpenGL not supported!" );
+ return;
+ }
+
+ if ( !format().doubleBuffer() )
+ {
+ qWarning( "KomposeGLFullscreenWidget::initializeGL() - Direct rendering enabled !" );
+ }
+// glShadeModel(GL_SMOOTH);
+//
+// format().setDirectRendering( true );
+// format().setDoubleBuffer( true );
+// format().setRgba( true );
+// format().setDepth ( false );
+// format().setAccum( false );
+// format().setStencil( false );
+// format().setAlpha( true );
+
+ // Alpha blend
+// glEnable( GL_BLEND );
+// glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
+
+ // All smoothing stuff
+// glEnable( GL_POLYGON_SMOOTH );
+// glHint( GL_POLYGON_SMOOTH_HINT, GL_FASTEST );
+// glEnable( GL_POINT_SMOOTH );
+// glHint( GL_POINT_SMOOTH_HINT, GL_FASTEST );
+// glEnable( GL_LINE_SMOOTH );
+// glHint( GL_LINE_SMOOTH_HINT, GL_FASTEST );
+
+ // Lighting and Depth Test
+ glDisable( GL_LIGHTING );
+// glDisable( GL_DEPTH_TEST );
+// glDisable( GL_NORMALIZE );
+
+ glClearColor( 0.0, 0.0, 0.0, 0.0 );
+ glClear( GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_ACCUM_BUFFER_BIT );
+
+ /*! Setup sizes */
+// glLineWidth( 1.0 );
+// glPointSize( 2.0 );
+
+ setOrthographicProjection();
+}
+
+void KomposeGLFullscreenWidget::resizeGL( int w, int h )
+{
+ // setup viewport, projection etc.:
+ setOrthographicProjection();
+ layout->arrangeLayout();
+}
+
+
+/*! draw OpenGL scene ( called from Qt ) */
+void KomposeGLFullscreenWidget::paintGL()
+{
+ qDebug("KomposeGLFullscreenWidget::paintGL()");
+
+ glPushMatrix();
+
+ // clears the color buffer (this will set the window to black)
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+ // Draw Desktop Widgets
+ for (int i=0; i < KomposeTaskManager::instance()->getNumDesktops(); ++i)
+ {
+ // FIXME: Make desktop arrays dynamic or at least avoid KomposeTaskManager::instance()->getNumDesktops() here
+ desktop[i]->draw();
+ }
+
+ glFlush();
+ glPopMatrix();
+}
+
+
+void KomposeGLFullscreenWidget::setOrthographicProjection()
+{
+ qDebug("KomposeGLFullscreenWidget::setOrthographicProjection() - %dx%d", width(), height());
+ glViewport( 0, 0, (GLint)width(), (GLint)height() );
+ // switch to projection mode
+ glMatrixMode(GL_PROJECTION);
+ // reset matrix
+ glLoadIdentity();
+ // set a 2D orthographic projection
+ gluOrtho2D(0.0, (GLdouble)width(), 0.0, (GLdouble)height());
+ // invert the y axis, down is positive
+ glScalef(1, -1, 1);
+ // mover the origin from the bottom left corner
+ // to the upper left corner
+ glTranslatef(0, -height(), 0);
+ glMatrixMode(GL_MODELVIEW);;
+}
+
+// Redirect these functions to QGLWidget
+
+void KomposeGLFullscreenWidget::setGeom ( const QRect &rect )
+{
+ QGLWidget::setGeometry( rect );
+}
+
+void KomposeGLFullscreenWidget::setGeom ( const QSize &size )
+{
+ QGLWidget::resize( size );
+}
+
+QSize KomposeGLFullscreenWidget::getSize() const
+{
+ return QGLWidget::size();
+}
+
+QRect KomposeGLFullscreenWidget::getRect() const
+{
+ return QGLWidget::rect();
+}
+
+void KomposeGLFullscreenWidget::removeChildWidget( KomposeWidgetInterface* obj )
+{
+ QGLWidget::removeChild((QObject *) obj);
+}
+
+#include "komposeglfullscreenwidget.moc"