diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | ae2a03c2941bf92573f89b88ef73f8aa842bea0a (patch) | |
tree | 3566563f3fb6ac3cb3496669d8f233062d3091bc /amor/amorwidget.cpp | |
download | tdetoys-ae2a03c2941bf92573f89b88ef73f8aa842bea0a.tar.gz tdetoys-ae2a03c2941bf92573f89b88ef73f8aa842bea0a.zip |
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdetoys@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'amor/amorwidget.cpp')
-rw-r--r-- | amor/amorwidget.cpp | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/amor/amorwidget.cpp b/amor/amorwidget.cpp new file mode 100644 index 0000000..e343524 --- /dev/null +++ b/amor/amorwidget.cpp @@ -0,0 +1,125 @@ +/* amorwidget.cpp +** +** Copyright (c) 1999 Martin R. Jones <[email protected]> +** +*/ + +/* +** 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. +** +** This program 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 in a file called COPYING; if not, write to +** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +** MA 02110-1301, USA. +*/ + +/* +** Bug reports and questions can be sent to [email protected] +*/ +#include "amorwidget.h" +#include "amorwidget.moc" +#include <qbitmap.h> +#include <X11/Xlib.h> +#include <X11/extensions/shape.h> + +//--------------------------------------------------------------------------- +// +// Constructor +// +AmorWidget::AmorWidget() + : QWidget(0, 0, WStyle_Customize | WStyle_NoBorder | WX11BypassWM ), + mPixmap(0) +{ + setBackgroundMode( NoBackground ); + dragging = false; +} + +//--------------------------------------------------------------------------- +// +// Destructor +// +AmorWidget::~AmorWidget() +{ +} + +//--------------------------------------------------------------------------- +// +// Set the pixmap to display +// +void AmorWidget::setPixmap(const QPixmap *pixmap) +{ + mPixmap = pixmap; + + if (mPixmap) + { + if (mPixmap->mask()) + { + XShapeCombineMask( x11Display(), winId(), ShapeBounding, 0, 0, + mPixmap->mask()->handle(), ShapeSet ); + repaint(false); + } + + update(); + } +} + +//--------------------------------------------------------------------------- +// +// Draw the pixmap +// +void AmorWidget::paintEvent(QPaintEvent *) +{ + if (mPixmap) + bitBlt( this, 0, 0, mPixmap ); + else + erase(); +} + +//--------------------------------------------------------------------------- +// +// The user clicked on the widget +// +void AmorWidget::mousePressEvent(QMouseEvent *me) +{ + clickPos = me->globalPos(); +} + +//--------------------------------------------------------------------------- +// +// The user moved the mouse +// +void AmorWidget::mouseMoveEvent(QMouseEvent *me) +{ + if ( me->state() == LeftButton ) { + if ( !dragging && (clickPos-me->globalPos()).manhattanLength() > 3 ) + dragging = true; + if ( dragging ) { + emit dragged( me->globalPos() - clickPos, false ); + clickPos = me->globalPos(); + } + } +} + +//--------------------------------------------------------------------------- +// +// The user clicked on the widget +// +void AmorWidget::mouseReleaseEvent(QMouseEvent *me) +{ + if ( dragging ) + emit dragged( me->globalPos() - clickPos, true ); + else if ( me->state() == RightButton ) + emit mouseClicked(clickPos); + + clickPos = QPoint(); + dragging = false; +} + |