diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2011-06-26 00:41:16 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2011-06-26 00:41:16 +0000 |
commit | 698569f8428ca088f764d704034a1330517b98c0 (patch) | |
tree | bf45be6946ebbbee9cce5a5bcf838f4c952d87e6 /chalk/plugins/viewplugins/screenshot/regiongrabber.cpp | |
parent | 2785103a6bd4de55bd26d79e34d0fdd4b329a73a (diff) | |
download | koffice-698569f8428ca088f764d704034a1330517b98c0.tar.gz koffice-698569f8428ca088f764d704034a1330517b98c0.zip |
Finish rebranding of Krita as Chalk
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/koffice@1238363 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'chalk/plugins/viewplugins/screenshot/regiongrabber.cpp')
-rw-r--r-- | chalk/plugins/viewplugins/screenshot/regiongrabber.cpp | 170 |
1 files changed, 170 insertions, 0 deletions
diff --git a/chalk/plugins/viewplugins/screenshot/regiongrabber.cpp b/chalk/plugins/viewplugins/screenshot/regiongrabber.cpp new file mode 100644 index 00000000..1d3a451d --- /dev/null +++ b/chalk/plugins/viewplugins/screenshot/regiongrabber.cpp @@ -0,0 +1,170 @@ +/* + * This file was copied from ksnapshot + * + * Copyright (C) 2003 Nadeem Hasan <[email protected]> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Library 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 "regiongrabber.h" + +#include <tqpainter.h> +#include <tqpalette.h> +#include <tqstyle.h> +#include <tqtimer.h> +#include <tqtooltip.h> + +#include <kglobalsettings.h> + +SizeTip::SizeTip( TQWidget *tqparent, const char *name ) + : TQLabel( tqparent, name, WStyle_Customize | WX11BypassWM | + WStyle_StaysOnTop | WStyle_NoBorder | WStyle_Tool ) +{ + setMargin( 2 ); + setIndent( 0 ); + setFrameStyle( TQFrame::Plain | TQFrame::Box ); + + setPalette( TQToolTip::palette() ); +} + +void SizeTip::setTip( const TQRect &rect ) +{ + TQString tip = TQString( "%1x%2" ).tqarg( rect.width() ) + .tqarg( rect.height() ); + + setText( tip ); + adjustSize(); + + positionTip( rect ); +} + +void SizeTip::positionTip( const TQRect &rect ) +{ + TQRect tipRect = tqgeometry(); + tipRect.moveTopLeft( TQPoint( 0, 0 ) ); + + if ( rect.intersects( tipRect ) ) + { + TQRect deskR = KGlobalSettings::desktopGeometry( TQPoint( 0, 0 ) ); + + tipRect.moveCenter( TQPoint( deskR.width()/2, deskR.height()/2 ) ); + if ( !rect.tqcontains( tipRect, true ) && rect.intersects( tipRect ) ) + tipRect.moveBottomRight( tqgeometry().bottomRight() ); + } + + move( tipRect.topLeft() ); +} + +RegionGrabber::RegionGrabber() + : TQWidget( 0, 0 ), + mouseDown( false ), sizeTip( 0L ) +{ + sizeTip = new SizeTip( ( TQWidget * )0L ); + + tipTimer = new TQTimer( this ); + Q_CHECK_PTR(tipTimer); + connect( tipTimer, TQT_SIGNAL( timeout() ), TQT_SLOT( updateSizeTip() ) ); + + TQTimer::singleShot( 200, this, TQT_SLOT( initGrabber() ) ); +} + +RegionGrabber::~RegionGrabber() +{ + delete sizeTip; +} + +void RegionGrabber::initGrabber() +{ + pixmap = TQPixmap::grabWindow( qt_xrootwin() ); + setPaletteBackgroundPixmap( pixmap ); + + showFullScreen(); + + grabMouse( crossCursor ); +} + +void RegionGrabber::mousePressEvent( TQMouseEvent *e ) +{ + if ( e->button() == Qt::LeftButton ) + { + mouseDown = true; + grabRect = TQRect( e->pos(), e->pos() ); + } +} + +void RegionGrabber::mouseMoveEvent( TQMouseEvent *e ) +{ + if ( mouseDown ) + { + sizeTip->hide(); + tipTimer->start( 250, true ); + + drawRubber(); + grabRect.setBottomRight( e->pos() ); + drawRubber(); + } +} + +void RegionGrabber::mouseReleaseEvent( TQMouseEvent *e ) +{ + mouseDown = false; + drawRubber(); + sizeTip->hide(); + + grabRect.setBottomRight( e->pos() ); + grabRect = grabRect.normalize(); + + TQPixmap region = TQPixmap::grabWindow( winId(), grabRect.x(), grabRect.y(), + grabRect.width(), grabRect.height() ); + + releaseMouse(); + + emit regionGrabbed( region ); +} + +void RegionGrabber::keyPressEvent( TQKeyEvent *e ) +{ + if ( e->key() == TQt::Key_Escape ) + { + releaseMouse(); + emit regionGrabbed( TQPixmap() ); + } + else + e->ignore(); +} + +void RegionGrabber::updateSizeTip() +{ + TQRect rect = grabRect.normalize(); + + sizeTip->setTip( rect ); + sizeTip->show(); +} + +void RegionGrabber::drawRubber() +{ + TQPainter p; + p.begin( this ); + p.setRasterOp( NotROP ); + p.setPen( TQPen( color0, 1 ) ); + p.setBrush( NoBrush ); + + tqstyle().tqdrawPrimitive( TQStyle::PE_FocusRect, &p, grabRect, tqcolorGroup(), + TQStyle::Style_Default, TQStyleOption( tqcolorGroup().base() ) ); + + p.end(); +} + +#include "regiongrabber.moc" |