From ae2a03c2941bf92573f89b88ef73f8aa842bea0a Mon Sep 17 00:00:00 2001 From: toma Date: Wed, 25 Nov 2009 17:56:58 +0000 Subject: 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 --- amor/amorwidget.cpp | 125 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 amor/amorwidget.cpp (limited to 'amor/amorwidget.cpp') 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 +** +*/ + +/* +** 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 kde-devel@kde.org +*/ +#include "amorwidget.h" +#include "amorwidget.moc" +#include +#include +#include + +//--------------------------------------------------------------------------- +// +// 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; +} + -- cgit v1.2.3