diff options
Diffstat (limited to 'krita/plugins/tools/selectiontools/kis_tool_select_elliptical.cc')
-rw-r--r-- | krita/plugins/tools/selectiontools/kis_tool_select_elliptical.cc | 321 |
1 files changed, 0 insertions, 321 deletions
diff --git a/krita/plugins/tools/selectiontools/kis_tool_select_elliptical.cc b/krita/plugins/tools/selectiontools/kis_tool_select_elliptical.cc deleted file mode 100644 index a97518ce..00000000 --- a/krita/plugins/tools/selectiontools/kis_tool_select_elliptical.cc +++ /dev/null @@ -1,321 +0,0 @@ -/* - * kis_tool_select_elliptical.cc -- part of Krita - * - * Copyright (c) 2004 Boudewijn Rempt ([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; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -#include <tqapplication.h> -#include <tqpainter.h> -#include <tqpen.h> -#include <tqlayout.h> - -#include <kdebug.h> -#include <kaction.h> -#include <kcommand.h> -#include <klocale.h> - -#include "kis_autobrush_resource.h" -#include "kis_canvas_controller.h" -#include "kis_canvas_subject.h" -#include "kis_cursor.h" -#include "kis_image.h" -#include "kis_painter.h" -#include "kis_tool_select_elliptical.h" -#include "kis_layer.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_selection.h" -#include "kis_selection_options.h" -#include "kis_selected_transaction.h" -#include "kis_canvas.h" -#include "kis_canvas_painter.h" - -KisToolSelectElliptical::KisToolSelectElliptical() - : super(i18n("Elliptical Select")) -{ - setName("tool_select_elliptical"); - setCursor(KisCursor::load("tool_elliptical_selection_cursor.png", 6, 6)); - - m_subject = 0; - m_selecting = false; - m_centerPos = KisPoint(0, 0); - m_startPos = KisPoint(0, 0); - m_endPos = KisPoint(0, 0); - m_optWidget = 0; - m_selectAction = SELECTION_ADD; -} - -KisToolSelectElliptical::~KisToolSelectElliptical() -{ -} - -void KisToolSelectElliptical::activate() -{ - super::activate(); - - if (!m_optWidget) - return; - - m_optWidget->slotActivated(); -} - -void KisToolSelectElliptical::update(KisCanvasSubject *subject) -{ - m_subject = subject; - super::update(m_subject); -} - -void KisToolSelectElliptical::paint(KisCanvasPainter& gc) -{ - if (m_selecting) - paintOutline(gc, TQRect()); -} - -void KisToolSelectElliptical::paint(KisCanvasPainter& gc, const TQRect& rc) -{ - if (m_selecting) - paintOutline(gc, rc); -} - -void KisToolSelectElliptical::clearSelection() -{ - if (m_subject) { - KisCanvasController *controller = m_subject->canvasController(); - KisImageSP img = m_subject->currentImg(); - - Q_ASSERT(controller); - -// if (img && img->floatingSelection().data() != 0) { -// img->unsetFloatingSelection(); -// controller->canvas()->update(); -// } - - m_startPos = KisPoint(0, 0); - m_endPos = KisPoint(0, 0); - m_selecting = false; - } -} - -void KisToolSelectElliptical::buttonPress(KisButtonPressEvent *e) -{ - if (m_subject) { - KisImageSP img = m_subject->currentImg(); - - if (img && img->activeDevice() && e->button() == LeftButton) { - clearSelection(); - m_startPos = m_endPos = m_centerPos = e->pos(); - m_selecting = true; - paintOutline(); - } - } -} - -void KisToolSelectElliptical::move(KisMoveEvent *e) -{ - if (m_subject && m_selecting) { - paintOutline(); - // move (alt) or resize ellipse - if (e->state() & TQt::AltButton) { - KisPoint trans = e->pos() - m_endPos; - m_startPos += trans; - m_endPos += trans; - } else { - KisPoint diag = e->pos() - (e->state() & TQt::ControlButton - ? m_centerPos : m_startPos); - // circle? - if (e->state() & TQt::ShiftButton) { - double size = TQMAX(fabs(diag.x()), fabs(diag.y())); - double w = diag.x() < 0 ? -size : size; - double h = diag.y() < 0 ? -size : size; - diag = KisPoint(w, h); - } - - // resize around center point? - if (e->state() & TQt::ControlButton) { - m_startPos = m_centerPos - diag; - m_endPos = m_centerPos + diag; - } else { - m_endPos = m_startPos + diag; - } - } - paintOutline(); - m_centerPos = KisPoint((m_startPos.x() + m_endPos.x()) / 2, - (m_startPos.y() + m_endPos.y()) / 2); - } -} - -void KisToolSelectElliptical::buttonRelease(KisButtonReleaseEvent *e) -{ - if (m_subject && m_selecting && e->button() == LeftButton) { - - paintOutline(); - - if (m_startPos == m_endPos) { - clearSelection(); - } else { - TQApplication::setOverrideCursor(KisCursor::waitCursor()); - KisImageSP img = m_subject->currentImg(); - - if (!img) - return; - - if (m_endPos.y() < 0) - m_endPos.setY(0); - - if (m_endPos.y() > img->height()) - m_endPos.setY(img->height()); - - if (m_endPos.x() < 0) - m_endPos.setX(0); - - if (m_endPos.x() > img->width()) - m_endPos.setX(img->width()); - - if (img && img->activeDevice()) { - KisPaintDeviceSP dev = img->activeDevice(); - KisSelectedTransaction *t = 0; - if (img->undo()) t = new KisSelectedTransaction(i18n("Elliptical Selection"), dev); - - bool hasSelection = dev->hasSelection(); - if(! hasSelection) - { - dev->selection()->clear(); - if(m_selectAction==SELECTION_SUBTRACT) - dev->selection()->invert(); - } - TQRect rc( m_startPos.floorTQPoint(), m_endPos.floorTQPoint()); - rc = rc.normalize(); - - KisSelectionSP tmpSel = new KisSelection(dev); - KisAutobrushCircleShape tqshape(rc.width(),rc.height(), 1, 1); - TQ_UINT8 value; - for (int y = 0; y <= rc.height(); y++) - for (int x = 0; x <= rc.width(); x++) - { - value = MAX_SELECTED - tqshape.valueAt(x,y); - tmpSel->setSelected( x+rc.x(), y+rc.y(), value); - } - switch(m_selectAction) - { - case SELECTION_ADD: - dev->addSelection(tmpSel); - break; - case SELECTION_SUBTRACT: - dev->subtractSelection(tmpSel); - break; - } - - if(hasSelection) { - dev->setDirty(rc); - dev->emitSelectionChanged(rc); - } else { - dev->setDirty(); - dev->emitSelectionChanged(); - } - - if (img->undo()) - img->undoAdapter()->addCommand(t); - - TQApplication::restoreOverrideCursor(); - } - } - m_selecting = false; - } -} - -void KisToolSelectElliptical::paintOutline() -{ - if (m_subject) { - KisCanvasController *controller = m_subject->canvasController(); - KisCanvas *canvas = controller->kiscanvas(); - KisCanvasPainter gc(canvas); - TQRect rc; - - paintOutline(gc, rc); - } -} - -void KisToolSelectElliptical::paintOutline(KisCanvasPainter& gc, const TQRect&) -{ - if (m_subject) { - KisCanvasController *controller = m_subject->canvasController(); - RasterOp op = gc.rasterOp(); - TQPen old = gc.pen(); - TQPen pen(TQt::DotLine); - TQPoint start; - TQPoint end; - - Q_ASSERT(controller); - start = controller->windowToView(m_startPos).floorTQPoint(); - end = controller->windowToView(m_endPos).floorTQPoint(); - - gc.setRasterOp(TQt::NotROP); - gc.setPen(pen); - gc.drawEllipse(TQRect(start, end)); - gc.setRasterOp(op); - gc.setPen(old); - } -} - -void KisToolSelectElliptical::slotSetAction(int action) { - if (action >= SELECTION_ADD && action <= SELECTION_SUBTRACT) - m_selectAction =(enumSelectionMode)action; -} - -void KisToolSelectElliptical::setup(KActionCollection *collection) -{ - m_action = static_cast<KRadioAction *>(collection->action(name())); - - if (m_action == 0) { - m_action = new KRadioAction(i18n("&Elliptical Selection"), - "tool_elliptical_selection" , - TQt::Key_J, - this, - TQT_SLOT(activate()), - collection, - name()); - Q_CHECK_PTR(m_action); - m_action->setToolTip(i18n("Select an elliptical area")); - m_action->setExclusiveGroup("tools"); - m_ownAction = true; - } -} - -TQWidget* KisToolSelectElliptical::createOptionWidget(TQWidget* tqparent) -{ - m_optWidget = new KisSelectionOptions(tqparent, m_subject); - Q_CHECK_PTR(m_optWidget); - m_optWidget->setCaption(i18n("Elliptical Selection")); - - connect (m_optWidget, TQT_SIGNAL(actionChanged(int)), this, TQT_SLOT(slotSetAction(int))); - - TQVBoxLayout * l = dynamic_cast<TQVBoxLayout*>(m_optWidget->tqlayout()); - l->addItem(new TQSpacerItem(1, 1, TQSizePolicy::Fixed, TQSizePolicy::Expanding)); - - return m_optWidget; -} - -TQWidget* KisToolSelectElliptical::optionWidget() -{ - return m_optWidget; -} - - - -#include "kis_tool_select_elliptical.moc" |