From e35f3fe53cd8df85d4fd04e49dfffbaeac971cdf Mon Sep 17 00:00:00 2001 From: Timothy Pearson Date: Mon, 7 Nov 2011 21:50:31 -0600 Subject: Rename kwin to twin (Part 2 of 2) --- twin-styles/glow/glowbutton.cpp | 339 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 339 insertions(+) create mode 100644 twin-styles/glow/glowbutton.cpp (limited to 'twin-styles/glow/glowbutton.cpp') diff --git a/twin-styles/glow/glowbutton.cpp b/twin-styles/glow/glowbutton.cpp new file mode 100644 index 00000000..87079c2e --- /dev/null +++ b/twin-styles/glow/glowbutton.cpp @@ -0,0 +1,339 @@ +/*************************************************************************** + glowbutton.cpp - description + ------------------- + begin : Thu Sep 6 2001 + copyright : (C) 2001 by Henning Burchardt + email : h_burchardt@gmx.net + ***************************************************************************/ + +/*************************************************************************** + * * + * This program 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. * + * * + ***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "glowbutton.h" + +namespace Glow +{ + +//----------------------------------------------------------------------------- +// PixmapCache +//----------------------------------------------------------------------------- + +TQMap PixmapCache::m_pixmapMap; + +const TQPixmap* PixmapCache::find(const TQString& key) +{ + TQMap::const_iterator it = + m_pixmapMap.find(key); + if( it != m_pixmapMap.end() ) + return *it; + else + return 0; +} + +void PixmapCache::insert(const TQString& key, const TQPixmap *pixmap) +{ + m_pixmapMap[key] = pixmap; +} + +void PixmapCache::erase(const TQString& key) +{ + TQMap::iterator it = + m_pixmapMap.find(key); + if (it != m_pixmapMap.end()) + { + delete *it; + m_pixmapMap.erase(it); + } +} + +void PixmapCache::clear() +{ + // delete all pixmaps in the cache + TQMap::const_iterator it + = m_pixmapMap.begin(); + for(; it != m_pixmapMap.end(); ++it) + delete *it; + m_pixmapMap.clear(); +} + +//----------------------------------------------------------------------------- +// GlowButton +//----------------------------------------------------------------------------- + +GlowButton::GlowButton(TQWidget *parent, const char *name, + const TQString& tip, const int realizeBtns) + : TQButton(parent, name) +{ + m_realizeButtons = realizeBtns; + + _steps = 0; + m_updateTime = 50; + m_pixmapName = TQString(); + + m_timer = new TQTimer(this); + connect(m_timer, TQT_SIGNAL(timeout()), this, TQT_SLOT(slotTimeout())); + m_pos = 0; + m_timertqStatus = Stop; + + setTipText (tip); + setCursor(arrowCursor); +} + +GlowButton::~GlowButton() +{ +} + +void GlowButton::setTipText( const TQString& tip ) +{ + if (KDecoration::options()->showTooltips()) + { + TQToolTip::remove( this ); + TQToolTip::add( this, tip ); + } +} + +TQString GlowButton::getPixmapName() const +{ + return m_pixmapName; +} + +TQt::ButtonState GlowButton::lastButton() const +{ + return _last_button; +} + +void GlowButton::setPixmapName(const TQString& pixmapName) +{ + m_pixmapName = pixmapName; + + const TQPixmap *pixmap = PixmapCache::find(pixmapName); + if( ! pixmap ) + return; + + // set steps + _steps = pixmap->height()/pixmap->width() - 1; + + tqrepaint(false); +} + +void GlowButton::paintEvent( TQPaintEvent *e ) +{ + TQWidget::paintEvent(e); + const TQPixmap *pixmap = PixmapCache::find(m_pixmapName); + if( pixmap != 0 ) + { + int pos = m_pos>=0?m_pos:-m_pos; + TQPainter p; + TQPixmap pm (pixmap->size()); + p.begin(&pm); + const TQPixmap * bg_pixmap = PixmapCache::find( + TQString::number(parentWidget()->winId())); + p.drawPixmap (0, 0, *bg_pixmap, x(), y(), width(), height()); + p.drawPixmap (0, 0, *pixmap, 0, pos*height(), width(), height()); + p.end(); + p.begin(this); + p.drawPixmap (0, 0, pm); + p.end(); + } +} + +void GlowButton::enterEvent( TQEvent *e ) +{ + if( m_pos<0 ) + m_pos=-m_pos; + m_timertqStatus = Run; + if( ! m_timer->isActive() ) + m_timer->start(m_updateTime); + TQButton::enterEvent(e); +} + +void GlowButton::leaveEvent( TQEvent *e ) +{ + m_timertqStatus = Stop; + if( ! m_timer->isActive() ) + m_timer->start(m_updateTime); + TQButton::leaveEvent(e); +} + +void GlowButton::mousePressEvent( TQMouseEvent *e ) +{ + _last_button = e->button(); + if( m_timer->isActive() ) + m_timer->stop(); + m_pos = _steps; + tqrepaint(false); + // without pretending LeftButton, clicking on the button with MidButton + // or RightButton would cause unwanted titlebar action + TQMouseEvent me (e->type(), e->pos(), e->globalPos(), + (e->button()&m_realizeButtons)?Qt::LeftButton:Qt::NoButton, e->state()); + TQButton::mousePressEvent(&me); +} + +void GlowButton::mouseReleaseEvent( TQMouseEvent *e ) +{ + _last_button = e->button(); + TQPoint p = mapToParent(mapFromGlobal(e->globalPos())); + if( ! m_timer->isActive() ) { + m_timer->start(m_updateTime); + } + if( ! tqgeometry().contains(p) ) { + m_timertqStatus = Stop; + } + TQMouseEvent me (e->type(), e->pos(), e->globalPos(), + (e->button()&m_realizeButtons)?Qt::LeftButton:Qt::NoButton, e->state()); + TQButton::mouseReleaseEvent(&me); +} + +void GlowButton::slotTimeout() +{ + tqrepaint(false); + + if( m_pos>=_steps-1 ) { + m_pos = -m_pos; + } + if( m_timertqStatus==Stop ) { + if( m_pos==0 ) { + m_timer->stop(); + return; + } else if( m_pos>0 ) { + m_pos = -m_pos; + } + } + + m_pos++; +} + +//----------------------------------------------------------------------------- +// GlowButtonFactory +//----------------------------------------------------------------------------- + +GlowButtonFactory::GlowButtonFactory() +{ + _steps = 20; +} + +int GlowButtonFactory::getSteps() +{ + return _steps; +} + +void GlowButtonFactory::setSteps(int steps) +{ + _steps = steps; +} + +TQPixmap * GlowButtonFactory::createGlowButtonPixmap( + const TQImage & bg_image, + const TQImage & fg_image, + const TQImage & glow_image, + const TQColor & color, + const TQColor & glow_color) +{ + if (bg_image.size() != fg_image.size() + || fg_image.size() != glow_image.size()) { + std::cerr << "Image size error" << std::endl; + return new TQPixmap(); + } + + TQImage colorized_bg_image = bg_image.copy(); + KIconEffect::colorize (colorized_bg_image, color, 1.0); + + int w = colorized_bg_image.width(); + int h = colorized_bg_image.height(); + + TQImage image (w, (_steps+1)*h, 32); + image.setAlphaBuffer (true); + for (int i=0; i<_steps+1; ++i) { + for (int y=0; y