diff options
Diffstat (limited to 'chalk/plugins/tools/tool_crop/kis_tool_crop.cc')
-rw-r--r-- | chalk/plugins/tools/tool_crop/kis_tool_crop.cc | 925 |
1 files changed, 0 insertions, 925 deletions
diff --git a/chalk/plugins/tools/tool_crop/kis_tool_crop.cc b/chalk/plugins/tools/tool_crop/kis_tool_crop.cc deleted file mode 100644 index 11a47590c..000000000 --- a/chalk/plugins/tools/tool_crop/kis_tool_crop.cc +++ /dev/null @@ -1,925 +0,0 @@ -/* - * kis_tool_crop.cc -- part of Chalk - * - * Copyright (c) 2004 Boudewijn Rempt <boud@valdyas.org> - * Copyright (c) 2005 Michael Thaler <michael.thaler@physik.tu-muenchen.de> - * Copyright (c) 2006 Cyrille Berger <cberger@cberger.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. - * - * 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; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - - -#include <tqcheckbox.h> -#include <tqcombobox.h> -#include <tqobject.h> -#include <tqpainter.h> -#include <tqpen.h> -#include <tqpushbutton.h> -#include <tqrect.h> - -#include <kdebug.h> -#include <tdeaction.h> -#include <kcommand.h> -#include <tdelocale.h> -#include <knuminput.h> -#include <kdebug.h> - -#include <kis_global.h> -#include <kis_painter.h> -#include <kis_canvas_controller.h> -#include <kis_canvas_subject.h> -#include <kis_cursor.h> -#include <kis_image.h> -#include <kis_undo_adapter.h> -#include <kis_button_press_event.h> -#include <kis_button_release_event.h> -#include <kis_move_event.h> -#include <kis_selected_transaction.h> -#include <kis_selection.h> -#include <kis_layer.h> -#include <kis_crop_visitor.h> - -#include "kis_tool_crop.h" -#include "wdg_tool_crop.h" - -#include "kis_canvas.h" -#include "kis_canvas_painter.h" - - - -KisToolCrop::KisToolCrop() - : super(i18n("Crop")) -{ - setName("tool_crop"); - m_cropCursor = KisCursor::load("tool_crop_cursor.png", 6, 6); - setCursor(m_cropCursor); - m_subject = 0; - m_selecting = false; - m_rectCrop = TQRect(0, 0, 0, 0); - m_handleSize = 13; - m_haveCropSelection = false; - m_optWidget = 0; -} - -KisToolCrop::~KisToolCrop() -{ -} - -void KisToolCrop::update(KisCanvasSubject *subject) -{ - m_subject = subject; - super::update(m_subject); -} - -void KisToolCrop::activate() -{ - super::activate(); - - // No current crop rectangle, try to use the selection of the device to make a rectangle - if (m_subject && m_subject->currentImg() && m_subject->currentImg()->activeDevice()) { - KisPaintDeviceSP device = m_subject->currentImg()->activeDevice(); - if (!device->hasSelection()) { - //m_rectCrop = m_subject->currentImg()->bounds(); - //validateSelection(); - m_haveCropSelection = false; - m_selecting = false; - } - else { - - m_rectCrop = device->selection()->selectedRect(); - validateSelection(); - crop(); - } - } -} - -void KisToolCrop::deactivate() -{ - clearRect(); -} - - -void KisToolCrop::paint(KisCanvasPainter& gc) -{ - paintOutlineWithHandles(gc, TQRect()); -} - -void KisToolCrop::paint(KisCanvasPainter& gc, const TQRect& rc) -{ - paintOutlineWithHandles(gc, rc); -} - -void KisToolCrop::clearRect() -{ - kdDebug() << "Clearing\n"; - if (m_subject) { - - KisCanvasController *controller = m_subject->canvasController(); - KisImageSP img = m_subject->currentImg(); - - Q_ASSERT(controller); - - controller->kiscanvas()->update(); - - m_rectCrop = TQRect(0,0,0,0); - - updateWidgetValues(); - m_selecting = false; - } -} - -void KisToolCrop::buttonPress(KisButtonPressEvent *e) -{ - if (m_subject) { - KisImageSP img = m_subject->currentImg(); - - if (img && img->activeDevice() && e->button() == Qt::LeftButton) { - - TQPoint pos = e->pos().floorTQPoint(); - TQRect b = img->bounds(); - - if (pos.x() < b.x()) - pos.setX(b.x()); - else if (pos.x() > b.x() + b.width()) - pos.setX(b.x() + b.width()); - - if (pos.y() < b.y()) - pos.setY(b.y()); - else if (pos.y() > b.y() + b.height()) - pos.setY(b.y() + b.height()); - - m_selecting = true; - - if( !m_haveCropSelection ) //if the selection is not set - { - m_rectCrop = TQRect( pos.x(), pos.y(), 0, 0); - paintOutlineWithHandles(); - } - else - { - KisCanvasController *controller = m_subject->canvasController(); - m_mouseOnHandleType = mouseOnHandle(controller ->windowToView(pos)); - m_dragStart = pos; - } - - updateWidgetValues(); - } - } -} - -void KisToolCrop::move(KisMoveEvent *e) -{ - if ( m_subject && m_subject->currentImg()) - { - if( m_selecting ) //if the user selects - { - if( !m_haveCropSelection ) //if the cropSelection is not yet set - { - paintOutlineWithHandles(); - - m_rectCrop.setBottomRight( e->pos().floorTQPoint()); - - KisImageSP image = m_subject->currentImg(); - - m_rectCrop.setRight( TQMIN(m_rectCrop.right(), image->width())); - m_rectCrop.setBottom( TQMIN(m_rectCrop.bottom(), image->width())); - m_rectCrop = m_rectCrop.normalize(); - - paintOutlineWithHandles(); - } - else //if the crop selection is set - { - m_dragStop = e->pos().floorTQPoint(); - if (m_mouseOnHandleType != None && m_dragStart != m_dragStop ) { - - - TQ_INT32 imageWidth = m_subject->currentImg()->width(); - TQ_INT32 imageHeight = m_subject->currentImg()->height(); - - paintOutlineWithHandles(); - - TQPoint pos = e->pos().floorTQPoint(); - if( m_mouseOnHandleType == Inside ) - { - m_rectCrop.moveBy( ( m_dragStop.x() - m_dragStart.x() ), ( m_dragStop.y() - m_dragStart.y() ) ); - if( m_rectCrop.left() < 0 ) - { - m_rectCrop.moveLeft( 0 ); - } - if( m_rectCrop.right() > imageWidth ) - { - m_rectCrop.moveRight( imageWidth ); - } - if( m_rectCrop.top() < 0 ) - { - m_rectCrop.moveTop( 0 ); - } - if( m_rectCrop.bottom() > imageHeight ) - { - m_rectCrop.moveBottom( imageHeight ); - } - } else if(m_optWidget->boolRatio->isChecked()) - { - TQPoint drag = m_dragStop - m_dragStart; - if( ! m_optWidget->boolWidth->isChecked() && !m_optWidget->boolHeight->isChecked() ) - { - switch (m_mouseOnHandleType) - { - case (UpperLeft): - { - TQ_INT32 dep = (drag.x() + drag.y()) / 2; - m_rectCrop.setTop( m_rectCrop.top() + dep ); - m_rectCrop.setLeft( (int) ( m_rectCrop.right() - m_optWidget->doubleRatio->value() * m_rectCrop.height() ) ); - } - break; - case (LowerRight): - { - TQ_INT32 dep = (drag.x() + drag.y()) / 2; - m_rectCrop.setBottom( m_rectCrop.bottom() + dep ); - m_rectCrop.setWidth( (int) ( m_optWidget->doubleRatio->value() * m_rectCrop.height() ) ); - break; - } - case (UpperRight): - { - TQ_INT32 dep = (drag.x() - drag.y()) / 2; - m_rectCrop.setTop( m_rectCrop.top() - dep ); - m_rectCrop.setWidth( (int) ( m_optWidget->doubleRatio->value() * m_rectCrop.height() ) ); - break; - } - case (LowerLeft): - { - TQ_INT32 dep = (drag.x() - drag.y()) / 2; - m_rectCrop.setBottom( m_rectCrop.bottom() - dep ); - m_rectCrop.setLeft( (int) ( m_rectCrop.right() - m_optWidget->doubleRatio->value() * m_rectCrop.height() ) ); - break; - } - case (Upper): - m_rectCrop.setTop( pos.y() + m_dy ); - m_rectCrop.setWidth( (int) (m_rectCrop.height() * m_optWidget->doubleRatio->value()) ); - break; - case (Lower): - m_rectCrop.setBottom( pos.y() + m_dy ); - m_rectCrop.setWidth( (int) (m_rectCrop.height() * m_optWidget->doubleRatio->value()) ); - break; - case (Left): - m_rectCrop.setLeft( pos.x() + m_dx ); - m_rectCrop.setHeight( (int) (m_rectCrop.width() / m_optWidget->doubleRatio->value()) ); - break; - case (Right): - m_rectCrop.setRight( pos.x() + m_dx ); - m_rectCrop.setHeight( (int) (m_rectCrop.width() / m_optWidget->doubleRatio->value()) ); - break; - case (Inside): // never happen - break; - } - } - } else { - if( m_optWidget->boolWidth->isChecked() ) - { - m_rectCrop.setWidth( m_optWidget->intWidth->value() + 1 ); - } else { - switch (m_mouseOnHandleType) - { - case (LowerLeft): - case (Left): - case (UpperLeft): - m_rectCrop.setLeft( pos.x() + m_dx ); - break; - case (Right): - case (UpperRight): - case (LowerRight): - m_rectCrop.setRight( pos.x() + m_dx ); - break; - default: - break; - } - } - if( m_optWidget->boolHeight->isChecked() ) - { - m_rectCrop.setHeight( m_optWidget->intHeight->value() + 1 ); - } else { - switch (m_mouseOnHandleType) - { - case (UpperLeft): - case (Upper): - case (UpperRight): - m_rectCrop.setTop( pos.y() + m_dy ); - break; - case (LowerRight): - case (LowerLeft): - case (Lower): - m_rectCrop.setBottom( pos.y() + m_dy ); - break; - default: - break; - } - } - } - if( m_rectCrop.height() < 0) - { - if( m_mouseOnHandleType == Lower) - m_mouseOnHandleType = Upper; - else if( m_mouseOnHandleType == LowerLeft) - m_mouseOnHandleType = UpperLeft; - else if( m_mouseOnHandleType == LowerRight) - m_mouseOnHandleType = UpperRight; - else if( m_mouseOnHandleType == Upper) - m_mouseOnHandleType = Lower; - else if( m_mouseOnHandleType == UpperLeft) - m_mouseOnHandleType = LowerLeft; - else if( m_mouseOnHandleType == UpperRight) - m_mouseOnHandleType = LowerRight; - } - if( m_rectCrop.width() < 0) - { - if( m_mouseOnHandleType == Right) - m_mouseOnHandleType = Left; - else if( m_mouseOnHandleType == UpperRight) - m_mouseOnHandleType = UpperLeft; - else if( m_mouseOnHandleType == LowerRight) - m_mouseOnHandleType = LowerLeft; - else if( m_mouseOnHandleType == Left) - m_mouseOnHandleType = Right; - else if( m_mouseOnHandleType == UpperLeft) - m_mouseOnHandleType = UpperRight; - else if( m_mouseOnHandleType == LowerLeft) - m_mouseOnHandleType = LowerRight; - } - - m_rectCrop = m_rectCrop.normalize(); - m_rectCrop = m_rectCrop.intersect( TQRect(0,0, imageWidth + 1, imageHeight + 1 ) ); - m_dragStart = e->pos().floorTQPoint(); - paintOutlineWithHandles(); - } - } - updateWidgetValues(); - } - else //if we are not selecting - { - if ( m_haveCropSelection ) //if the crop selection is set - { - KisCanvasController *controller = m_subject->canvasController(); - TQ_INT32 type = mouseOnHandle(controller->windowToView(e->pos().floorTQPoint())); - //set resize cursor if we are on one of the handles - setMoveResizeCursor(type); - } - } - } -} - -void KisToolCrop::updateWidgetValues(bool updateratio) -{ - TQRect r = realRectCrop(); - setOptionWidgetX(r.x()); - setOptionWidgetY(r.y()); - setOptionWidgetWidth(r.width() ); - setOptionWidgetHeight(r.height() ); - if(updateratio && !m_optWidget->boolRatio->isChecked() ) - setOptionWidgetRatio((double)r.width() / (double)r.height() ); -} - -void KisToolCrop::buttonRelease(KisButtonReleaseEvent *e) -{ - if (m_subject && m_subject->currentImg() && m_selecting && e->button() == Qt::LeftButton) { - - m_selecting = false; - m_haveCropSelection = true; - - paintOutlineWithHandles(); - validateSelection(); - paintOutlineWithHandles(); - } -} - -void KisToolCrop::doubleClick(KisDoubleClickEvent *) -{ - if (m_haveCropSelection) crop(); -} - -void KisToolCrop::validateSelection(bool updateratio) -{ - if (m_subject) { - KisImageSP image = m_subject->currentImg(); - - if (image) { - TQ_INT32 imageWidth = image->width(); - TQ_INT32 imageHeight = image->height(); - m_rectCrop.setLeft(TQMAX(0, m_rectCrop.left())); - m_rectCrop.setTop(TQMAX(0, m_rectCrop.top())); - m_rectCrop.setRight(TQMIN(imageWidth, m_rectCrop.right())); - m_rectCrop.setBottom(TQMIN(imageHeight, m_rectCrop.bottom())); - - updateWidgetValues(updateratio); - } - } -} - -void KisToolCrop::paintOutlineWithHandles() -{ - if (m_subject) { - KisCanvasController *controller = m_subject->canvasController(); - KisCanvas *canvas = controller->kiscanvas(); - KisCanvasPainter gc(canvas); - TQRect rc; - - paintOutlineWithHandles(gc, rc); - } -} - -void KisToolCrop::paintOutlineWithHandles(KisCanvasPainter& gc, const TQRect&) -{ - if (m_subject && (m_selecting || m_haveCropSelection)) { - KisCanvasController *controller = m_subject->canvasController(); - RasterOp op = gc.rasterOp(); - TQPen old = gc.pen(); - TQPen pen(TQt::SolidLine); - pen.setWidth(1); - TQPoint start; - TQPoint end; - - Q_ASSERT(controller); - start = controller->windowToView(m_rectCrop.topLeft()); - end = controller->windowToView(m_rectCrop.bottomRight()); - - gc.setRasterOp(TQt::NotROP); - gc.setPen(pen); - //draw handles - m_handlesRegion = handles(TQRect(start, end)); - - TQ_INT32 startx; - TQ_INT32 starty; - TQ_INT32 endx; - TQ_INT32 endy; - if(start.x()<=end.x()) - { - startx=start.x(); - endx=end.x(); - } - else - { - startx=end.x(); - endx=start.x(); - } - if(start.y()<=end.y()) - { - starty=start.y(); - endy=end.y(); - } - else - { - starty=end.y(); - endy=start.y(); - } - //draw upper line of selection - gc.drawLine(startx + m_handleSize / 2 + 1, starty, startx + (endx - startx - m_handleSize) / 2 + 1, starty); - gc.drawLine(startx + (endx - startx + m_handleSize) / 2 + 1, starty, endx - m_handleSize / 2, starty); - //draw lower line of selection - gc.drawLine(startx + m_handleSize / 2 + 1, endy, startx + (endx - startx - m_handleSize) / 2 + 1, endy); - gc.drawLine(startx + (endx - startx + m_handleSize) / 2 + 1, endy, endx - m_handleSize / 2 , endy); - //draw right line of selection - gc.drawLine(startx, starty + m_handleSize / 2 + 1, startx, starty + (endy - starty - m_handleSize) / 2 + 1); - gc.drawLine(startx, starty + (endy - starty + m_handleSize) / 2 + 1, startx, endy - m_handleSize / 2); - //draw left line of selection - gc.drawLine(endx, starty + m_handleSize / 2 + 1, endx, starty + (endy - starty - m_handleSize) / 2 + 1); - gc.drawLine(endx, starty + (endy - starty + m_handleSize) / 2 + 1, endx, endy - m_handleSize / 2); - - //draw guides - gc.drawLine(0,endy,startx - m_handleSize / 2,endy); - gc.drawLine(startx,endy + m_handleSize / 2 + 1, startx, controller->kiscanvas()->height()); - gc.drawLine(endx,0,endx,starty - m_handleSize / 2); - gc.drawLine(endx + m_handleSize / 2 + 1,starty, controller->kiscanvas()->width(), starty); - TQMemArray <TQRect> rects = m_handlesRegion.rects (); - for (TQMemArray <TQRect>::ConstIterator it = rects.begin (); it != rects.end (); ++it) - { - gc.fillRect (*it, TQt::black); - } - - - gc.setRasterOp(op); - gc.setPen(old); - } -} - -void KisToolCrop::crop() { - // XXX: Should cropping be part of KisImage/KisPaintDevice's API? - - m_haveCropSelection = false; - setCursor(m_cropCursor); - - KisImageSP img = m_subject->currentImg(); - - if (!img) - return; - - TQRect rc = realRectCrop().normalize(); - - // The visitor adds the undo steps to the macro - if (m_optWidget->cmbType->currentItem() == 0) { - - TQRect dirty = img->bounds(); - - // The layer(s) under the current layer will take care of adding - // undo information to the Crop macro. - if (img->undo()) - img->undoAdapter()->beginMacro(i18n("Crop")); - - KisCropVisitor v(rc, false); - KisLayerSP layer = img->activeLayer(); - layer->accept(v); - layer->setDirty( dirty ); - if (img->undo()) - img->undoAdapter()->endMacro(); - - } - else { - // Resize creates the undo macro itself - img->resize(rc, true); - } - - m_rectCrop = TQRect(0,0,0,0); - - updateWidgetValues(); -} - -void KisToolCrop::setCropX(int x) -{ - if (!m_haveCropSelection) { - m_haveCropSelection = true; - } - else { - paintOutlineWithHandles(); // remove outlines - } - - m_rectCrop.setX(x); - - validateSelection(); - paintOutlineWithHandles(); -} - -void KisToolCrop::setCropY(int y) -{ - if (!m_haveCropSelection) { - m_haveCropSelection = true; - } - else { - paintOutlineWithHandles(); // remove outlines - } - - m_rectCrop.setY(y); - - validateSelection(); - paintOutlineWithHandles(); - -} - -void KisToolCrop::setCropWidth(int w) -{ - if (!m_haveCropSelection) { - m_haveCropSelection = true; - } - else { - paintOutlineWithHandles(); // remove outlines - } - - m_rectCrop.setWidth(w + 1); - - if( m_optWidget->boolRatio->isChecked() ) - { - m_rectCrop.setHeight( (int) ( w / m_optWidget->doubleRatio->value() ) ); - } else { - setOptionWidgetRatio((double)m_rectCrop.width() / (double)m_rectCrop.height() ); - } - - validateSelection(); - paintOutlineWithHandles(); - -} - -void KisToolCrop::setCropHeight(int h) -{ - if (!m_haveCropSelection) { - m_haveCropSelection = true; - } - else { - paintOutlineWithHandles(); // remove outlines - } - - m_rectCrop.setHeight(h + 1); - - if( m_optWidget->boolRatio->isChecked() ) - { - m_rectCrop.setWidth( (int) ( h * m_optWidget->doubleRatio->value() ) ); - } else { - setOptionWidgetRatio((double)m_rectCrop.width() / (double)m_rectCrop.height() ); - } - - validateSelection(); - paintOutlineWithHandles(); - -} - -void KisToolCrop::setRatio(double ) -{ - if( ! (m_optWidget->boolWidth->isChecked() && m_optWidget->boolHeight->isChecked() )) - { - if (!m_haveCropSelection) { - m_haveCropSelection = true; - } - else { - paintOutlineWithHandles(); // remove outlines - } - if( m_optWidget->boolWidth->isChecked() ) - { - m_rectCrop.setHeight( (int) ( m_rectCrop.width() / m_optWidget->doubleRatio->value()) ); - setOptionWidgetHeight( m_rectCrop.height() ); - } else if(m_optWidget->boolHeight->isChecked()) { - m_rectCrop.setWidth( (int) (m_rectCrop.height() * m_optWidget->doubleRatio->value()) ); - setOptionWidgetWidth( m_rectCrop.width() ); - } else { - int newwidth = (int) (m_optWidget->doubleRatio->value() * m_rectCrop.height()); - newwidth = (newwidth + m_rectCrop.width()) / 2; - m_rectCrop.setWidth( newwidth + 1); - setOptionWidgetWidth( newwidth ); - m_rectCrop.setHeight( (int) (newwidth / m_optWidget->doubleRatio->value()) + 1 ); - setOptionWidgetHeight( m_rectCrop.height() - 1 ); - } - validateSelection(false); - paintOutlineWithHandles(); - } -} - -void KisToolCrop::setOptionWidgetX(TQ_INT32 x) -{ - // Disable signals otherwise we get the valueChanged signal, which we don't want - // to go through the logic for setting values that way. - m_optWidget->intX->blockSignals(true); - m_optWidget->intX->setValue(x); - m_optWidget->intX->blockSignals(false); -} - -void KisToolCrop::setOptionWidgetY(TQ_INT32 y) -{ - m_optWidget->intY->blockSignals(true); - m_optWidget->intY->setValue(y); - m_optWidget->intY->blockSignals(false); -} - -void KisToolCrop::setOptionWidgetWidth(TQ_INT32 x) -{ - m_optWidget->intWidth->blockSignals(true); - m_optWidget->intWidth->setValue(x); - m_optWidget->intWidth->blockSignals(false); -} - -void KisToolCrop::setOptionWidgetHeight(TQ_INT32 y) -{ - m_optWidget->intHeight->blockSignals(true); - m_optWidget->intHeight->setValue(y); - m_optWidget->intHeight->blockSignals(false); -} - -void KisToolCrop::setOptionWidgetRatio(double ratio) -{ - m_optWidget->doubleRatio->blockSignals(true); - m_optWidget->doubleRatio->setValue(ratio); - m_optWidget->doubleRatio->blockSignals(false); -} - - -TQWidget* KisToolCrop::createOptionWidget(TQWidget* parent) -{ - m_optWidget = new WdgToolCrop(parent); - TQ_CHECK_PTR(m_optWidget); - - connect(m_optWidget->bnCrop, TQT_SIGNAL(clicked()), this, TQT_SLOT(crop())); - - connect(m_optWidget->intX, TQT_SIGNAL(valueChanged(int)), this, TQT_SLOT(setCropX(int))); - connect(m_optWidget->intY, TQT_SIGNAL(valueChanged(int)), this, TQT_SLOT(setCropY(int))); - connect(m_optWidget->intWidth, TQT_SIGNAL(valueChanged(int)), this, TQT_SLOT(setCropWidth(int))); - connect(m_optWidget->intHeight, TQT_SIGNAL(valueChanged(int)), this, TQT_SLOT(setCropHeight(int))); - connect(m_optWidget->doubleRatio, TQT_SIGNAL(valueChanged(double)), this, TQT_SLOT(setRatio( double ))); - - return m_optWidget; -} - -TQWidget* KisToolCrop::optionWidget() -{ - return m_optWidget; -} - -void KisToolCrop::setup(TDEActionCollection *collection) -{ - m_action = static_cast<TDERadioAction *>(collection->action(name())); - - if (m_action == 0) { - m_action = new TDERadioAction(i18n("&Crop"), - "tool_crop", - 0, - this, - TQT_SLOT(activate()), - collection, - name()); - TQ_CHECK_PTR(m_action); - - m_action->setToolTip(i18n("Crop an area")); - m_action->setExclusiveGroup("tools"); - - m_ownAction = true; - } -} - -TQRect toTQRect(double x, double y, int w, int h) -{ - return TQRect(int(x), int(y), w, h); -} - -TQRegion KisToolCrop::handles(TQRect rect) -{ - TQRegion handlesRegion; - - //add handle at the lower right corner - handlesRegion += toTQRect( TQABS( rect.width() ) - m_handleSize / 2.0, TQABS( rect.height() ) - m_handleSize / 2.0, m_handleSize, m_handleSize ); - //add handle at the upper right corner - handlesRegion += toTQRect( TQABS( rect.width() ) - m_handleSize / 2.0 , 0 - m_handleSize / 2.0, m_handleSize, m_handleSize ); - //add rectangle at the lower left corner - handlesRegion += toTQRect( 0 - m_handleSize / 2.0 , TQABS( rect.height() ) - m_handleSize / 2.0, m_handleSize, m_handleSize ); - //add rectangle at the upper left corner - handlesRegion += toTQRect( 0 - m_handleSize / 2.0, 0 - m_handleSize / 2.0, m_handleSize, m_handleSize ); - //add handle at the lower edge of the rectangle - handlesRegion += toTQRect( ( TQABS( rect.width() ) - m_handleSize ) / 2.0 , TQABS( rect.height() ) - m_handleSize / 2.0, m_handleSize, m_handleSize ); - //add handle at the right edge of the rectangle - handlesRegion += toTQRect( TQABS( rect.width() ) - m_handleSize / 2.0 , ( TQABS( rect.height() ) - m_handleSize ) / 2.0, m_handleSize, m_handleSize ); - //add handle at the upper edge of the rectangle - handlesRegion += toTQRect( ( TQABS( rect.width() ) - m_handleSize ) / 2.0 , 0 - m_handleSize / 2.0, m_handleSize, m_handleSize ); - //add handle at the left edge of the rectangle - handlesRegion += toTQRect( 0 - m_handleSize / 2.0, ( TQABS( rect.height() ) - m_handleSize ) / 2.0, m_handleSize, m_handleSize ); - - //move the handles to the correct position - if( rect.width() >= 0 && rect.height() >= 0) - { - handlesRegion.translate ( rect.x(), rect.y() ); - } - else if( rect.width() < 0 && rect.height() >= 0) - { - handlesRegion.translate ( rect.x() - TQABS( rect.width() ), rect.y() ); - } - else if( rect.width() >= 0 && rect.height() < 0) - { - handlesRegion.translate ( rect.x(), rect.y() - TQABS( rect.height() ) ); - } - else if( rect.width() < 0 && rect.height() < 0) - { - handlesRegion.translate ( rect.x() - TQABS( rect.width() ), rect.y() - TQABS( rect.height() ) ); - } - return handlesRegion; -} - -TQ_INT32 KisToolCrop::mouseOnHandle(TQPoint currentViewPoint) -{ - KisCanvasController *controller = m_subject->canvasController(); - Q_ASSERT(controller); - TQPoint start = controller->windowToView(m_rectCrop.topLeft()); - TQPoint end = controller->windowToView(m_rectCrop.bottomRight()); - - TQ_INT32 startx; - TQ_INT32 starty; - TQ_INT32 endx; - TQ_INT32 endy; - if(start.x()<=end.x()) - { - startx=start.x(); - endx=end.x(); - } - else - { - startx=end.x(); - endx=start.x(); - } - if(start.y()<=end.y()) - { - starty=start.y(); - endy=end.y(); - } - else - { - starty=end.y(); - endy=start.y(); - } - - if ( toTQRect ( startx - m_handleSize / 2.0, starty - m_handleSize / 2.0, m_handleSize, m_handleSize ).contains( currentViewPoint ) ) - { - if( !m_selecting ) - { - m_dx= startx-currentViewPoint.x(); - m_dy = starty - currentViewPoint.y(); - } - return UpperLeft; - } - else if ( toTQRect ( startx - m_handleSize / 2.0, endy - m_handleSize / 2.0, m_handleSize, m_handleSize ).contains( currentViewPoint ) ) - { - if( !m_selecting ) - { - m_dx = startx-currentViewPoint.x(); - m_dy = endy-currentViewPoint.y(); - } - return LowerLeft; - } - else if ( toTQRect ( endx - m_handleSize / 2.0, starty - m_handleSize / 2.0, m_handleSize, m_handleSize ).contains( currentViewPoint ) ) - { - if( !m_selecting ) - { - m_dx = endx - currentViewPoint.x(); - m_dy = starty - currentViewPoint.y() ; - } - return UpperRight; - } - else if ( toTQRect ( endx - m_handleSize / 2.0, endy - m_handleSize / 2.0, m_handleSize, m_handleSize ).contains( currentViewPoint ) ) - { - if( !m_selecting ) - { - m_dx = endx - currentViewPoint.x(); - m_dy= endy - currentViewPoint.y(); - } - return LowerRight; - } - else if ( toTQRect ( startx + ( endx - startx - m_handleSize ) / 2.0, starty - m_handleSize / 2.0, m_handleSize, m_handleSize ).contains( currentViewPoint ) ) - { - if( !m_selecting ) - { - m_dy = starty - currentViewPoint.y() ; - } - return Upper; - } - else if ( toTQRect ( startx + ( endx - startx - m_handleSize ) / 2.0, endy - m_handleSize / 2, m_handleSize, m_handleSize ).contains( currentViewPoint ) ) - { - if( !m_selecting ) - { - m_dy = endy - currentViewPoint.y(); - } - return Lower; - } - else if ( toTQRect ( startx - m_handleSize / 2.0, starty + ( endy - starty - m_handleSize ) / 2.0, m_handleSize, m_handleSize ).contains( currentViewPoint ) ) - { - if( !m_selecting ) - { - m_dx = startx - currentViewPoint.x() ; - } - return Left; - } - else if ( toTQRect ( endx - m_handleSize / 2.0 , starty + ( endy - starty - m_handleSize ) / 2.0, m_handleSize, m_handleSize ).contains( currentViewPoint ) ) - { - if( !m_selecting ) - { - m_dx = endx-currentViewPoint.x(); - } - return Right; - } - else if ( toTQRect ( startx , starty, endx - startx , endy - starty ).contains( currentViewPoint ) ) - { - return Inside; - } - else return None; -} - -void KisToolCrop::setMoveResizeCursor (TQ_INT32 handle) -{ - switch (handle) - { - case (UpperLeft): - case (LowerRight): - m_subject->canvasController()->setCanvasCursor(KisCursor::sizeFDiagCursor()); - return; - case (LowerLeft): - case (UpperRight): - m_subject->canvasController()->setCanvasCursor(KisCursor::sizeBDiagCursor()); - return; - case (Upper): - case (Lower): - m_subject->canvasController()->setCanvasCursor(KisCursor::sizeVerCursor()); - return; - case (Left): - case (Right): - m_subject->canvasController()->setCanvasCursor(KisCursor::sizeHorCursor()); - return; - case (Inside): - m_subject->canvasController()->setCanvasCursor(KisCursor::sizeAllCursor()); - return; - } - m_subject->canvasController()->setCanvasCursor(KisCursor::arrowCursor()); - return; -} - - -#include "kis_tool_crop.moc" |