/********************************************************************** OverlayEngine - Engine for displaying overlays. Copyright (C) 2008 Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "overlayengine.h" #include #include #include #include #include #include #include // for OpenGL bits #include #include using namespace std; using namespace Eigen; namespace Avogadro { OverlayEngine::OverlayEngine(QObject *parent) : Engine(parent), m_settingsWidget(0) { } Engine *OverlayEngine::clone() const { OverlayEngine *engine = new OverlayEngine(parent()); engine->setAlias(alias()); engine->setEnabled(isEnabled()); return engine; } bool OverlayEngine::renderOpaque(PainterDevice *pd) { QPainter p; p.begin((QGLWidget*)GLWidget::current()); p.save(); // draw the transparent background p.setBrush(QColor(255,255,255,100)); p.drawRect(pd->width() / 2 - 200, pd->height() - 70, 400, 60); // draw the gradient QLinearGradient gradient(QPointF(pd->width() / 2 - 150, 0), QPointF(pd->width() / 2 + 150, 0)); gradient.setColorAt(0, QColor(255, 0, 0, 255)); gradient.setColorAt(0.5, QColor(0, 255, 0, 255)); gradient.setColorAt(1, QColor(0, 0, 255, 255)); p.setBrush(gradient); p.drawRect(pd->width() / 2 - 150, pd->height() - 60, 300, 40); p.setBrush(QColor(0, 0, 0, 255)); p.drawRect(pd->width() / 2 - 190, pd->height() - 44, 30, 8); p.drawRect(pd->width() / 2 + 160, pd->height() - 44, 30, 8); p.drawRect(pd->width() / 2 + 171, pd->height() - 55, 8, 30); p.restore(); p.end(); return true; } bool OverlayEngine::renderQuick(PainterDevice *) { // Don't render text when moving... return true; } QWidget *OverlayEngine::settingsWidget() { if(!m_settingsWidget) { m_settingsWidget = new OverlaySettingsWidget(); connect(m_settingsWidget, SIGNAL(destroyed()), this, SLOT(settingsWidgetDestroyed())); } return m_settingsWidget; } void OverlayEngine::settingsWidgetDestroyed() { qDebug() << "Destroyed Settings Widget"; m_settingsWidget = 0; } Engine::Layers OverlayEngine::layers() const { return Engine::Overlay; } Engine::PrimitiveTypes OverlayEngine::primitiveTypes() const { return Engine::NoPrimitives; } Engine::ColorTypes OverlayEngine::colorTypes() const { return Engine::ColorGradients; } void OverlayEngine::writeSettings(QSettings &settings) const { Engine::writeSettings(settings); } void OverlayEngine::readSettings(QSettings &settings) { Engine::readSettings(settings); } } #include "overlayengine.moc" Q_EXPORT_PLUGIN2(overlayengine, Avogadro::OverlayEngineFactory)