summaryrefslogtreecommitdiffstats
path: root/krita/ui/kis_view.cc
diff options
context:
space:
mode:
Diffstat (limited to 'krita/ui/kis_view.cc')
-rw-r--r--krita/ui/kis_view.cc4018
1 files changed, 0 insertions, 4018 deletions
diff --git a/krita/ui/kis_view.cc b/krita/ui/kis_view.cc
deleted file mode 100644
index 3220c07e..00000000
--- a/krita/ui/kis_view.cc
+++ /dev/null
@@ -1,4018 +0,0 @@
-/* This file is part of KimageShop^WKrayon^WKrita
- *
- * Copyright (c) 1999 Matthias Elter <[email protected]>
- * 1999 Michael Koch <[email protected]>
- * 1999 Carsten Pfeiffer <[email protected]>
- * 2002 Patrick Julien <[email protected]>
- * 2003-2005 Boudewijn Rempt <[email protected]>
- * 2004 Clarence Dang <[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 <algorithm>
-#include <cmath>
-
-// TQt
-#include <tqapplication.h>
-#include <tqbutton.h>
-#include <tqcursor.h>
-#include <tqevent.h>
-#include <tqpainter.h>
-#include <tqscrollbar.h>
-#include <tqspinbox.h>
-#include <tqdockarea.h>
-#include <tqstringlist.h>
-#include <tqstyle.h>
-#include <tqpopupmenu.h>
-#include <tqvaluelist.h>
-#include <tqstringlist.h>
-#include <tqobjectlist.h>
-
-// KDE
-#include <kis_meta_registry.h>
-#include <kglobalsettings.h>
-#include <dcopobject.h>
-#include <kaction.h>
-#include <kcolordialog.h>
-#include <kiconloader.h>
-#include <kfiledialog.h>
-#include <klocale.h>
-#include <kmessagebox.h>
-#include <knotifyclient.h>
-#include <kprinter.h>
-#include <kpushbutton.h>
-#include <kstatusbar.h>
-#include <kstdaction.h>
-#include <kinputdialog.h>
-#include <kurldrag.h>
-#include <kpopupmenu.h>
-#include <kdebug.h>
-#include <ksharedptr.h>
-#include <ktoolbar.h>
-#include <kparts/plugin.h>
-#include <kservice.h>
-#include <ktrader.h>
-#include <kparts/componentfactory.h>
-#include <kparts/event.h>
-
-// KOffice
-#include <KoPartSelectAction.h>
-#include <KoFilterManager.h>
-#include <KoMainWindow.h>
-#include <KoView.h>
-#include <KoTabBar.h>
-#include <ko_gray_widget.h>
-#include <ko_hsv_widget.h>
-#include <ko_rgb_widget.h>
-#include <kopalettemanager.h>
-#include <kopalette.h>
-
-// Local
-#include "kis_brush.h"
-#include "kis_button_press_event.h"
-#include "kis_button_release_event.h"
-#include "kis_canvas.h"
-#include "kis_canvas_painter.h"
-#include "kis_color.h"
-#include "kis_colorspace_factory_registry.h"
-#include "kis_config.h"
-#include "kis_controlframe.h"
-#include "kis_cursor.h"
-#include "kis_doc.h"
-#include "kis_double_click_event.h"
-#include "kis_factory.h"
-#include "kis_filter_strategy.h"
-#include "kis_gradient.h"
-#include "kis_group_layer.h"
-#include "kis_adjustment_layer.h"
-#include "kis_paint_device.h"
-#include "kis_tool_freehand.h"
-//#include "kis_guide.h"
-#include "kis_layerbox.h"
-#include "kis_import_catcher.h"
-#include "kis_layer.h"
-#include "kis_paint_layer.h"
-#include "kis_move_event.h"
-#include "kis_paint_device.h"
-#include "kis_painter.h"
-#include "kis_paintop_registry.h"
-#include "kis_part_layer.h"
-#include "kis_part_layer_handler.h"
-#include "kis_pattern.h"
-#include "kis_profile.h"
-#include "kis_rect.h"
-#include "kis_resource.h"
-#include "kis_palette.h"
-#include "kis_ruler.h"
-#include "kis_selection.h"
-#include "KoToolBox.h"
-#include "kis_tool.h"
-#include "kis_tool_manager.h"
-#include "kis_transaction.h"
-#include "kis_selected_transaction.h"
-#include "kis_types.h"
-#include "kis_undo_adapter.h"
-#include "kis_view.h"
-#include "kis_view_iface.h"
-#include "kis_label_progress.h"
-#include "kis_opengl_image_context.h"
-#include "kis_background.h"
-#include "kis_paint_device_action.h"
-#include "kis_filter_configuration.h"
-#include "kis_transform_worker.h"
-#include "kis_shear_visitor.h"
-
-#include <kis_resourceserver.h>
-#include <kis_resource_mediator.h>
-
-#include "kis_icon_item.h"
-#include "kis_palette_widget.h"
-#include "kis_birdeye_box.h"
-#include "kis_color.h"
-#include "kis_factory.h"
-
-// Dialog boxes
-#include "kis_dlg_new_layer.h"
-#include "kis_dlg_layer_properties.h"
-#include "kis_dlg_preferences.h"
-#include "kis_dlg_image_properties.h"
-#include "kis_dlg_adjustment_layer.h"
-#include "kis_dlg_adj_layer_props.h"
-
-// Action managers
-#include "kis_selection_manager.h"
-#include "kis_filter_manager.h"
-#include "kis_grid_manager.h"
-#include "kis_perspective_grid_manager.h"
-
-#include "kis_custom_palette.h"
-#include "wdgpalettechooser.h"
-
-#include <fixx11h.h>
-
-// Time in ms that must pass after a tablet event before a mouse event is allowed to
-// change the input device to the mouse. This is needed because mouse events are always
-// sent to a receiver if it does not accept the tablet event.
-#define MOUSE_CHANGE_EVENT_DELAY 100
-
-KisView::KisView(KisDoc *doc, KisUndoAdapter *adapter, TQWidget *tqparent, const char *name)
- : super(doc, tqparent, name)
- , KXMLGUIBuilder( shell() )
- , m_panning( false )
- , m_oldTool( 0 )
- , m_doc( doc )
- , m_canvas( 0 )
- , m_partHandler( 0 )
- , m_gridManager( 0 )
- , m_perspectiveGridManager( 0 )
- , m_selectionManager( 0 )
- , m_filterManager( 0 )
- , m_paletteManager( 0 )
- , m_toolManager( 0 )
- , m_actLayerVis( false )
- , m_hRuler( 0 )
- , m_vRuler( 0 )
- , m_imgFlatten( 0 )
- , m_imgMergeLayer( 0 )
- , m_imgRename( 0 )
- , m_imgResizeToLayer( 0 )
- , m_imgScan( 0 )
- , m_actionPartLayer( 0 )
- , m_layerAdd( 0 )
- , m_layerBottom( 0 )
- , m_layerDup( 0 )
- , m_layerHide( 0 )
- , m_layerLower( 0 )
- , m_layerProperties( 0 )
- , m_layerRaise( 0 )
- , m_layerRm( 0 )
- , m_layerSaveAs( 0 )
- , m_layerTop( 0 )
- , m_zoomIn( 0 )
- , m_zoomOut( 0 )
- , m_actualPixels( 0 )
- , m_actualSize( 0 )
- , m_fitToCanvas( 0 )
- , m_fullScreen( 0 )
- , m_imgProperties( 0 )
- , m_RulerAction( 0 )
- , m_guideAction( 0 )
- , m_dcop( 0 )
- , m_hScroll( 0 )
- , m_vScroll( 0 )
- , m_scrollX( 0 )
- , m_scrollY( 0 )
- , m_canvasXOffset( 0)
- , m_canvasYOffset( 0)
- , m_paintViewEnabled( false )
- , m_guiActivateEventReceived( false )
- , m_showEventReceived( false )
- , m_imageLoaded( false )
-// , m_currentGuide( 0 )
- , m_adapter( adapter )
- , m_statusBarZoomLabel( 0 )
- , m_statusBarSelectionLabel( 0 )
- , m_statusBarProfileLabel( 0 )
- , m_progress( 0 )
- , m_layerBox( 0 )
- , m_toolBox( 0 )
- , m_brush( 0 )
- , m_pattern( 0 )
- , m_gradient( 0 )
- , m_toolIsPainting( false )
- , m_monitorProfile( 0 )
- , m_HDRExposure( 0 )
-{
-
- Q_ASSERT(doc);
- Q_ASSERT(adapter);
- Q_ASSERT(tqparent);
-
- KisConfig cfg;
-
- m_currentColorChooserDisplay = KisID("BLA");
- setFocusPolicy( TQ_StrongFocus );
-
- // Must come before input devices are referenced as this detects them.
-#ifdef TQ_WS_X11
- KisCanvasWidget::initX11Support();
-#endif
- // Install event filter before we create any child widgets so they can see
- // the tablet events.
- tqApp->installEventFilter(this);
-
- m_tabletEventTimer.start();
- m_inputDevice = KisInputDevice::mouse();
-
- connect(&m_initialZoomTimer, TQT_SIGNAL(timeout()), TQT_SLOT(slotInitialZoomTimeout()));
-
- m_paletteManager = new KoPaletteManager(this, actionCollection(), "Krita palette manager");
- if (cfg.fixDockerWidth()) m_paletteManager->setFixedWidth( 360 );
-
- m_paletteManager->createPalette( krita::CONTROL_PALETTE, i18n("Control box"));
- m_paletteManager->createPalette( krita::COLORBOX, i18n("Colors"));
- m_paletteManager->createPalette( krita::LAYERBOX, i18n("Layers"));
-
- m_selectionManager = new KisSelectionManager(this, doc);
- m_filterManager = new KisFilterManager(this, doc);
- m_toolManager = new KisToolManager(canvasSubject(), getCanvasController());
- m_gridManager = new KisGridManager(this);
- m_perspectiveGridManager = new KisPerspectiveGridManager(this);
-
- // This needs to be set before the dockers are created.
- m_image = m_doc->currentImage();
- KisColorSpace * cs = KisMetaRegistry::instance()->csRegistry()->getRGB8();
- m_fg = KisColor(TQt::black, cs);
- m_bg = KisColor(TQt::white, cs);
-
- createDockers();
-
- setInstance(KisFactory::instance(), false);
- setClientBuilder( this );
-
- if (!doc->isReadWrite())
- setXMLFile("krita_readonly.rc");
- else
- setXMLFile("krita.rc");
-
- KStdAction::keyBindings( mainWindow()->guiFactory(), TQT_SLOT( configureShortcuts() ), actionCollection() );
-
- createLayerBox();
-
- setupCanvas();
- m_canvas->hide();
- setupRulers();
- setupScrollBars();
- setupStatusBar();
-
- setupActions();
- dcopObject();
-
-
- connect(this, TQT_SIGNAL(autoScroll(const TQPoint &)), TQT_SLOT(slotAutoScroll(const TQPoint &)));
-
- setMouseTracking(true);
-
- resetMonitorProfile();
-
- layersUpdated();
-
- m_brushesAndStuffToolBar = new KisControlFrame(mainWindow(), this);
-
- // Load all plugins
- KTrader::OfferList offers = KTrader::self()->query(TQString::tqfromLatin1("Krita/ViewPlugin"),
- TQString::tqfromLatin1("(Type == 'Service') and "
- "([X-Krita-Version] == 2)"));
- KTrader::OfferList::ConstIterator iter;
- for(iter = offers.begin(); iter != offers.end(); ++iter)
- {
- KService::Ptr service = *iter;
- int errCode = 0;
- KParts::Plugin* plugin =
- KParts::ComponentFactory::createInstanceFromService<KParts::Plugin> ( service, this, 0, TQStringList(), &errCode);
- if ( plugin ) {
- kdDebug(41006) << "found plugin " << service->property("Name").toString() << "\n";
- insertChildClient(plugin);
- }
- else {
- kdDebug(41006) << "found plugin " << service->property("Name").toString() << ", " << errCode << "\n";
- if( errCode == KParts::ComponentFactory::ErrNoLibrary)
- {
- kdWarning(41006) << " Error loading plugin was : ErrNoLibrary " << KLibLoader::self()->lastErrorMessage() << endl;
- }
- }
- }
-
- if(!doc->isLoading())
- {
- slotLoadingFinished();
- } else {
- connect(doc, TQT_SIGNAL(loadingFinished()), this, TQT_SLOT(slotLoadingFinished()));
- }
-
- setFocus();
-}
-
-KisView::~KisView()
-{
- KisConfig cfg;
- cfg.setShowRulers( m_RulerAction->isChecked() );
-
- delete m_dcop;
- delete m_paletteManager;
- delete m_selectionManager;
- delete m_filterManager;
- delete m_toolManager;
-
-}
-
-
-static TQt::Dock stringToDock( const TQString& attrPosition )
-{
- KToolBar::Dock dock = KToolBar::DockTop;
- if ( !attrPosition.isEmpty() ) {
- if ( attrPosition == "top" )
- dock = TQt::DockTop;
- else if ( attrPosition == "left" )
- dock = TQt::DockLeft;
- else if ( attrPosition == "right" )
- dock = TQt::DockRight;
- else if ( attrPosition == "bottom" )
- dock = TQt::DockBottom;
- else if ( attrPosition == "floating" )
- dock = TQt::DockTornOff;
- else if ( attrPosition == "flat" )
- dock = TQt::DockMinimized;
- }
- return dock;
-}
-
-TQWidget * KisView::createContainer( TQWidget *tqparent, int index, const TQDomElement &element, int &id )
-{
- if( element.attribute( "name" ) == "ToolBox" )
- {
- m_toolBox = new KoToolBox(mainWindow(), "ToolBox", KisFactory::instance(), NUMBER_OF_TOOLTYPES);
- m_toolBox->setLabel(i18n("Krita"));
- m_toolManager->setUp(m_toolBox, m_paletteManager, actionCollection());
-
- Dock dock = stringToDock( element.attribute( "position" ).lower() );
-
- mainWindow()->addDockWindow( m_toolBox, dock, false);
- mainWindow()->moveDockWindow( m_toolBox, dock, false, 0, 0 );
- }
-
- return KXMLGUIBuilder::createContainer( tqparent, index, element, id );
-
-}
-
-void KisView::removeContainer( TQWidget *container, TQWidget *tqparent, TQDomElement &element, int id )
-{
- Q_ASSERT(container);
-
- if( shell() && container == m_toolBox )
- {
- delete m_toolBox;
- m_toolManager->youAintGotNoToolBox();
- }
- else {
- KXMLGUIBuilder::removeContainer( container, tqparent, element, id );
- }
-}
-
-KoPaletteManager * KisView::paletteManager()
-{
- if (!m_paletteManager) {
- m_paletteManager = new KoPaletteManager(this, actionCollection(), "Krita palette manager");
- Q_CHECK_PTR(m_paletteManager);
- }
- return m_paletteManager;
-}
-
-void KisView::createLayerBox()
-{
- m_layerBox = new KisLayerBox(this);
- m_layerBox->setCaption(i18n("Layers"));
-
- connect(m_layerBox, TQT_SIGNAL(sigRequestLayer(KisGroupLayerSP, KisLayerSP)),
- this, TQT_SLOT(addLayer(KisGroupLayerSP, KisLayerSP)));
- connect(m_layerBox, TQT_SIGNAL(sigRequestGroupLayer(KisGroupLayerSP, KisLayerSP)),
- this, TQT_SLOT(addGroupLayer(KisGroupLayerSP, KisLayerSP)));
- connect(m_layerBox, TQT_SIGNAL(sigRequestAdjustmentLayer(KisGroupLayerSP, KisLayerSP)),
- this, TQT_SLOT(addAdjustmentLayer(KisGroupLayerSP, KisLayerSP)));
- connect(m_layerBox, TQT_SIGNAL(sigRequestPartLayer(KisGroupLayerSP, KisLayerSP, const KoDocumentEntry&)),
- this, TQT_SLOT(addPartLayer(KisGroupLayerSP, KisLayerSP, const KoDocumentEntry&)));
- connect(m_layerBox, TQT_SIGNAL(sigRequestLayerProperties(KisLayerSP)),
- this, TQT_SLOT(showLayerProperties(KisLayerSP)));
- connect(m_layerBox, TQT_SIGNAL(sigOpacityChanged(int, bool)), this, TQT_SLOT(layerOpacity(int, bool)));
- connect(m_layerBox, TQT_SIGNAL(sigOpacityFinishedChanging(int, int)),
- this, TQT_SLOT(layerOpacityFinishedChanging(int, int)));
- connect(m_layerBox, TQT_SIGNAL(sigItemComposite(const KisCompositeOp&)), this, TQT_SLOT(layerCompositeOp(const KisCompositeOp&)));
-
- paletteManager()->addWidget(m_layerBox, "layerbox", krita::LAYERBOX, 0);
-
-}
-
-DCOPObject* KisView::dcopObject()
-{
- if (!m_dcop) {
- m_dcop = new KisViewIface(this);
- Q_CHECK_PTR(m_dcop);
- }
- return m_dcop;
-}
-
-void KisView::setupScrollBars()
-{
- m_scrollX = 0;
- m_scrollY = 0;
- m_vScroll = new TQScrollBar(TQScrollBar::Vertical, this);
- Q_CHECK_PTR(m_vScroll);
-
- m_hScroll = new TQScrollBar(TQScrollBar::Horizontal, this);
- Q_CHECK_PTR(m_hScroll);
-
- m_vScroll->setGeometry(width() - 16, 20, 16, height() - 36);
- m_hScroll->setGeometry(20, height() - 16, width() - 36, 16);
- m_hScroll->setValue(0);
- m_vScroll->setValue(0);
- TQObject::connect(m_vScroll, TQT_SIGNAL(valueChanged(int)), this, TQT_SLOT(scrollV(int)));
- TQObject::connect(m_hScroll, TQT_SIGNAL(valueChanged(int)), this, TQT_SLOT(scrollH(int)));
-}
-
-void KisView::setupRulers()
-{
- m_hRuler = new KisRuler(Qt::Horizontal, this);
- Q_CHECK_PTR(m_hRuler);
-
- m_vRuler = new KisRuler(Qt::Vertical, this);
- Q_CHECK_PTR(m_vRuler);
-
- m_hRuler->setGeometry(20, 0, width() - 20, 20);
- m_vRuler->setGeometry(0, 20, 20, height() - 20);
-
- if (statusBar()) {
- m_hRuler->installEventFilter(this);
- m_vRuler->installEventFilter(this);
- }
-}
-
-#define EPSILON 1e-6
-
-void KisView::updateStatusBarZoomLabel ()
-{
- if (zoom() < 1 - EPSILON) {
- m_statusBarZoomLabel->setText(i18n("Zoom %1%").tqarg(zoom() * 100, 0, 'g', 4));
- } else {
- m_statusBarZoomLabel->setText(i18n("Zoom %1%").tqarg(zoom() * 100, 0, 'f', 0));
- }
- m_statusBarZoomLabel->setMaximumWidth(m_statusBarZoomLabel->fontMetrics().width(i18n("Zoom %1%").tqarg("0.8888 ")));
-}
-
-void KisView::updateStatusBarSelectionLabel()
-{
- if (m_statusBarSelectionLabel == 0) {
- return;
- }
-
- KisImageSP img = currentImg();
- if (img) {
- KisPaintDeviceSP dev = img->activeDevice();
- if (dev) {
- if (dev->hasSelection()) {
- TQRect r = dev->selection()->selectedExactRect();
- m_statusBarSelectionLabel->setText( i18n("Selection Active: x = %1 y = %2 width = %3 height = %4").tqarg(r.x()).tqarg(r.y()).tqarg( r.width()).tqarg( r.height()));
- return;
- }
- }
- }
-
- m_statusBarSelectionLabel->setText(i18n("No Selection"));
-}
-
-void KisView::updateStatusBarProfileLabel()
-{
- if (m_statusBarProfileLabel == 0) {
- return;
- }
-
- KisImageSP img = currentImg();
- if (!img) return;
-
- if (img->getProfile() == 0) {
- m_statusBarProfileLabel->setText(i18n("No profile"));
- }
- else {
- m_statusBarProfileLabel->setText(img->colorSpace()->id().name() + " " + img->getProfile()->productName());
- }
-}
-
-
-KisProfile * KisView::monitorProfile()
-{
- if (m_monitorProfile == 0) {
- resetMonitorProfile();
- }
- return m_monitorProfile;
-}
-
-
-void KisView::resetMonitorProfile()
-{
- m_monitorProfile = KisProfile::getScreenProfile();
-
- if (m_monitorProfile == 0) {
- KisConfig cfg;
- TQString monitorProfileName = cfg.monitorProfile();
- m_monitorProfile = KisMetaRegistry::instance()->csRegistry()->getProfileByName(monitorProfileName);
- }
-
-}
-
-void KisView::setupStatusBar()
-{
- KStatusBar *sb = statusBar();
-
- if (sb) {
- m_statusBarZoomLabel = new TQLabel(sb);
- addStatusBarItem(m_statusBarZoomLabel,1);
- updateStatusBarZoomLabel();
-
- m_statusBarSelectionLabel = new KSqueezedTextLabel(sb);
- addStatusBarItem(m_statusBarSelectionLabel,2);
- updateStatusBarSelectionLabel();
-
- m_statusBarProfileLabel = new KSqueezedTextLabel(sb);
- addStatusBarItem(m_statusBarProfileLabel,3);
- updateStatusBarProfileLabel();
-
- //int height = m_statusBarProfileLabel->height();
-
- m_progress = new KisLabelProgress(this);
- m_progress->setMaximumWidth(225);
- m_progress->setMinimumWidth(225);
- m_progress->setMaximumHeight(fontMetrics().height() );
- addStatusBarItem(m_progress, 2, true);
-
- m_progress->hide();
- }
-}
-
-void KisView::setupActions()
-{
- KisConfig cfg;
-
- m_selectionManager->setup(actionCollection());
- m_filterManager->setup(actionCollection());
- m_gridManager->setup(actionCollection());
- m_perspectiveGridManager->setup(actionCollection());
-
-
- m_fullScreen = KStdAction::fullScreen( NULL, NULL, actionCollection(), this );
- connect( m_fullScreen, TQT_SIGNAL( toggled( bool )), this, TQT_SLOT( slotUpdateFullScreen( bool )));
-
- m_imgProperties = new KAction(i18n("Image Properties"), 0, this, TQT_SLOT(slotImageProperties()), actionCollection(), "img_properties");
- m_imgScan = 0; // How the hell do I get a KAction to the scan plug-in?!?
- m_imgResizeToLayer = new KAction(i18n("Resize Image to Size of Current Layer"), 0, this, TQT_SLOT(imgResizeToActiveLayer()), actionCollection(), "resizeimgtolayer");
-
- // view actions
- m_zoomIn = KStdAction::zoomIn(this, TQT_SLOT(slotZoomIn()), actionCollection(), "zoom_in");
- m_zoomOut = KStdAction::zoomOut(this, TQT_SLOT(slotZoomOut()), actionCollection(), "zoom_out");
- m_actualPixels = new KAction(i18n("Actual Pixels"), "Ctrl+0", this, TQT_SLOT(slotActualPixels()), actionCollection(), "actual_pixels");
- m_actualSize = KStdAction::actualSize(this, TQT_SLOT(slotActualSize()), actionCollection(), "actual_size");
- m_actualSize->setEnabled(false);
- m_fitToCanvas = KStdAction::fitToPage(this, TQT_SLOT(slotFitToCanvas()), actionCollection(), "fit_to_canvas");
-
- // layer actions
- m_layerAdd = new KAction(i18n("&Add..."), "Ctrl+Shift+N", this, TQT_SLOT(layerAdd()), actionCollection(), "insert_layer");
-
- m_actionPartLayer = new KoPartSelectAction( i18n( "&Object Layer" ), "frame_query",
- this, TQT_SLOT( addPartLayer() ),
- actionCollection(), "insert_part_layer" );
-
-
- m_actionAdjustmentLayer = new KAction( i18n( "&Adjustment Layer" ), 0,
- this, TQT_SLOT( addAdjustmentLayer() ),
- actionCollection(), "insert_adjustment_layer" );
-
-
- m_layerRm = new KAction(i18n("&Remove"), 0, this, TQT_SLOT(layerRemove()), actionCollection(), "remove_layer");
- m_layerDup = new KAction(i18n("Duplicate"), 0, this, TQT_SLOT(layerDuplicate()), actionCollection(), "duplicate_layer");
- m_layerHide = new KToggleAction(i18n("&Hide"), 0, this, TQT_SLOT(layerToggleVisible()), actionCollection(), "hide_layer");
- m_layerHide->setCheckedState(KGuiItem(i18n("&Show")));
- m_layerHide->setChecked(false);
-
- m_layerRaise = new KAction(i18n("Raise"), "raise", "Ctrl+]", this, TQT_SLOT(layerRaise()), actionCollection(), "raiselayer");
- m_layerLower = new KAction(i18n("Lower"), "lower", "Ctrl+[", this, TQT_SLOT(layerLower()), actionCollection(), "lowerlayer");
- m_layerTop = new KAction(i18n("To Top"), "bring_forward", "Ctrl+Shift+]", this, TQT_SLOT(layerFront()), actionCollection(), "toplayer");
- m_layerBottom = new KAction(i18n("To Bottom"), "send_backward", "Ctrl+Shift+[", this, TQT_SLOT(layerBack()), actionCollection(), "bottomlayer");
- m_layerProperties = new KAction(i18n("Properties"), 0, this, TQT_SLOT(layerProperties()), actionCollection(), "layer_properties");
- (void)new KAction(i18n("I&nsert Image as Layer..."), 0, this, TQT_SLOT(slotInsertImageAsLayer()), actionCollection(), "insert_image_as_layer");
- m_layerSaveAs = new KAction(i18n("Save Layer as Image..."), "filesave", this, TQT_SLOT(saveLayerAsImage()), actionCollection(), "save_layer_as_image");
- (void)new KAction(i18n("Flip on &X Axis"), "view_left_right", 0, this, TQT_SLOT(mirrorLayerX()), actionCollection(), "mirrorLayerX");
- (void)new KAction(i18n("Flip on &Y Axis"), "view_top_bottom", 0, this, TQT_SLOT(mirrorLayerY()), actionCollection(), "mirrorLayerY");
-
- m_createMask = new KAction(i18n("Create Mask"), 0, this,
- TQT_SLOT(slotCreateMask()), actionCollection(), "create_tqmask");
- m_tqmaskFromSelection = new KAction(i18n("Mask From Selection"), 0, this,
- TQT_SLOT(slotMaskFromSelection()), actionCollection(),
- "tqmask_fromsel");
- m_tqmaskToSelection = new KAction(i18n("Mask to Selection"), 0, this,
- TQT_SLOT(slotMaskToSelection()), actionCollection(), "tqmask_tosel");
- m_applyMask = new KAction(i18n("Apply Mask"), 0, this, TQT_SLOT(slotApplyMask()),
- actionCollection(), "apply_tqmask");
- m_removeMask = new KAction(i18n("Remove Mask"), 0, this,
- TQT_SLOT(slotRemoveMask()), actionCollection(), "remove_tqmask");
- m_showMask = new KToggleAction(i18n( "Show Mask" ), 0, this,
- TQT_SLOT(slotShowMask()), actionCollection(), "show_tqmask");
- m_editMask = new KToggleAction(i18n( "Edit Mask" ), 0, this,
- TQT_SLOT(slotEditMask()), actionCollection(), "edit_tqmask");
-
- // image actions
- m_imgFlatten = new KAction(i18n("&Flatten Image"), "Ctrl+Shift+E", this, TQT_SLOT(flattenImage()), actionCollection(), "flatten_image");
- m_imgMergeLayer = new KAction(i18n("&Merge with Layer Below"), "Ctrl+E", this, TQT_SLOT(mergeLayer()), actionCollection(), "merge_layer");
-
- // setting actions
- KStdAction::preferences(this, TQT_SLOT(preferences()), actionCollection(), "preferences");
-
- m_RulerAction = new KToggleAction( i18n( "Show Rulers" ), "Ctrl+R", this, TQT_SLOT( showRuler() ), actionCollection(), "view_ruler" );
- m_RulerAction->setChecked(cfg.showRulers());
- m_RulerAction->setCheckedState(i18n("Hide Rulers"));
- m_RulerAction->setWhatsThis( i18n("The rulers show the horizontal and vertical positions of the mouse on the image "
- "and can be used to position your mouse at the right place on the canvas. <p>Uncheck this to disable "
- "the rulers from being displayed." ) );
-
- //m_guideAction = new KToggleAction( i18n( "Guide Lines" ), 0, this, TQT_SLOT( viewGuideLines() ), actionCollection(), "view_guidelines" );
-
- // Add new palette
- new KAction(i18n("Add New Palette..."), 0, this, TQT_SLOT(slotAddPalette()),
- actionCollection(), "add_palette");
- new KAction(i18n("Edit Palette..."), 0, this, TQT_SLOT(slotEditPalette()),
- actionCollection(), "edit_palette");
-
- // XXX: This triggers a tqrepaint of the image, but way too early
- //showRuler();
-
-}
-
-void KisView::resizeEvent(TQResizeEvent *)
-{
- if (!m_paintViewEnabled) {
- startInitialZoomTimerIfReady();
- }
-
- KisImageSP img = currentImg();
- TQ_INT32 scrollBarExtent = style().tqpixelMetric(TQStyle::PM_ScrollBarExtent);
- TQ_INT32 drawH;
- TQ_INT32 drawW;
- TQ_INT32 docW;
- TQ_INT32 docH;
-
-// if (img) {
-// KisGuideMgr *mgr = img->guides();
-// mgr->resize(size());
-// }
-
- docW = static_cast<TQ_INT32>(ceil(docWidth() * zoom()));
- docH = static_cast<TQ_INT32>(ceil(docHeight() * zoom()));
-
- m_rulerThickness = m_RulerAction->isChecked() ? RULER_THICKNESS : 0;
- drawH = height() - m_rulerThickness;
- drawW = width() - m_rulerThickness;
-
- if (drawH < docH) {
- // Will need vert scrollbar
- drawW -= scrollBarExtent;
- if (drawW < docW)
- // Will need horiz scrollbar
- drawH -= scrollBarExtent;
- } else if (drawW < docW) {
- // Will need horiz scrollbar
- drawH -= scrollBarExtent;
- if (drawH < docH)
- // Will need vert scrollbar
- drawW -= scrollBarExtent;
- }
-
- m_vScroll->setEnabled(docH > drawH);
- m_hScroll->setEnabled(docW > drawW);
-
- if (docH <= drawH && docW <= drawW) {
- // we need no scrollbars
- m_vScroll->hide();
- m_hScroll->hide();
- m_vScroll->setValue(0);
- m_hScroll->setValue(0);
- m_vScrollBarExtent = 0;
- m_hScrollBarExtent = 0;
- } else if (docH <= drawH) {
- // we need a horizontal scrollbar only
- m_vScroll->hide();
- m_vScroll->setValue(0);
- m_hScroll->setRange(0, docW - drawW);
- m_hScroll->setGeometry(m_rulerThickness,
- height() - scrollBarExtent,
- width() - m_rulerThickness,
- scrollBarExtent);
- m_hScroll->show();
- m_hScrollBarExtent = scrollBarExtent;
- m_hScrollBarExtent = scrollBarExtent;
- } else if(docW <= drawW) {
- // we need a vertical scrollbar only
- m_hScroll->hide();
- m_hScroll->setValue(0);
- m_vScroll->setRange(0, docH - drawH);
- m_vScroll->setGeometry(width() - scrollBarExtent, m_rulerThickness, scrollBarExtent, height() - m_rulerThickness);
- m_vScroll->show();
- m_vScrollBarExtent = scrollBarExtent;
- } else {
- // we need both scrollbars
- m_vScroll->setRange(0, docH - drawH);
- m_vScroll->setGeometry(width() - scrollBarExtent,
- m_rulerThickness,
- scrollBarExtent,
- height() -2* m_rulerThickness);
- m_hScroll->setRange(0, docW - drawW);
- m_hScroll->setGeometry(m_rulerThickness,
- height() - scrollBarExtent,
- width() - 2*m_rulerThickness,
- scrollBarExtent);
- m_vScroll->show();
- m_hScroll->show();
- m_vScrollBarExtent = scrollBarExtent;
- m_hScrollBarExtent = scrollBarExtent;
- }
-
- TQ_INT32 oldCanvasXOffset = m_canvasXOffset;
- TQ_INT32 oldCanvasYOffset = m_canvasYOffset;
-
- if (docW < drawW) {
- m_canvasXOffset = (drawW - docW) / 2;
- } else {
- m_canvasXOffset = 0;
- }
-
- if (docH < drawH) {
- m_canvasYOffset = (drawH - docH) / 2;
- } else {
- m_canvasYOffset = 0;
- }
-
- //Check if rulers are visible
- if( m_RulerAction->isChecked() )
- m_canvas->setGeometry(m_rulerThickness, m_rulerThickness, drawW, drawH);
- else
- m_canvas->setGeometry(0, 0, drawW, drawH);
- m_canvas->show();
-
- if (!m_canvas->isOpenGLCanvas()) {
-
- if (m_canvasPixmap.size() != TQSize(drawW, drawH)) {
-
- TQ_INT32 oldCanvasWidth = m_canvasPixmap.width();
- TQ_INT32 oldCanvasHeight = m_canvasPixmap.height();
-
- TQ_INT32 newCanvasWidth = drawW;
- TQ_INT32 newCanvasHeight = drawH;
-
- TQRegion exposedRegion = TQRect(0, 0, newCanvasWidth, newCanvasHeight);
-
- // Increase size first so that we can copy the old image area to the new one.
- m_canvasPixmap.resize(TQMAX(oldCanvasWidth, newCanvasWidth), TQMAX(oldCanvasHeight, newCanvasHeight));
-
- if (!m_canvasPixmap.isNull()) {
-
- if (oldCanvasXOffset != m_canvasXOffset || oldCanvasYOffset != m_canvasYOffset) {
-
- TQ_INT32 srcX;
- TQ_INT32 srcY;
- TQ_INT32 srcWidth;
- TQ_INT32 srcHeight;
- TQ_INT32 dstX;
- TQ_INT32 dstY;
-
- if (oldCanvasXOffset <= m_canvasXOffset) {
- // Move to the right
- srcX = 0;
- dstX = m_canvasXOffset - oldCanvasXOffset;
- srcWidth = oldCanvasWidth;
- } else {
- // Move to the left
- srcX = oldCanvasXOffset - m_canvasXOffset;
- dstX = 0;
- srcWidth = newCanvasWidth;
- }
-
- if (oldCanvasYOffset <= m_canvasYOffset) {
- // Move down
- srcY = 0;
- dstY = m_canvasYOffset - oldCanvasYOffset;
- srcHeight = oldCanvasHeight;
- } else {
- // Move up
- srcY = oldCanvasYOffset - m_canvasYOffset;
- dstY = 0;
- srcHeight = newCanvasHeight;
- }
-
- bitBlt(&m_canvasPixmap, dstX, dstY, &m_canvasPixmap, srcX, srcY, srcWidth, srcHeight);
- exposedRegion -= TQRegion(TQRect(dstX, dstY, srcWidth, srcHeight));
- } else {
- exposedRegion -= TQRegion(TQRect(0, 0, oldCanvasWidth, oldCanvasHeight));
- }
- }
-
- m_canvasPixmap.resize(newCanvasWidth, newCanvasHeight);
-
- if (!m_canvasPixmap.isNull() && !exposedRegion.isEmpty()) {
-
- TQMemArray<TQRect> rects = exposedRegion.rects();
-
- for (unsigned int i = 0; i < rects.count(); i++) {
- TQRect r = rects[i];
- updateTQPaintDeviceCanvas(viewToWindow(r));
- }
- }
- }
- }
-
- int fontheight = TQFontMetrics(KGlobalSettings::generalFont()).height() * 3;
- m_vScroll->setPageStep(drawH);
- m_vScroll->setLineStep(fontheight);
- m_hScroll->setPageStep(drawW);
- m_hScroll->setLineStep(fontheight);
-
- m_hRuler->setGeometry(m_rulerThickness + m_canvasXOffset, 0, TQMIN(docW, drawW), m_rulerThickness);
- m_vRuler->setGeometry(0, m_rulerThickness + m_canvasYOffset, m_rulerThickness, TQMIN(docH, drawH));
-
- if (m_vScroll->isVisible())
- m_vRuler->updateVisibleArea(0, m_vScroll->value());
- else
- m_vRuler->updateVisibleArea(0, 0);
-
- if (m_hScroll->isVisible())
- m_hRuler->updateVisibleArea(m_hScroll->value(), 0);
- else
- m_hRuler->updateVisibleArea(0, 0);
-
- if( m_RulerAction->isChecked() )
- {
- m_hRuler->show();
- m_vRuler->show();
- }
- else {
- m_hRuler->hide();
- m_vRuler->hide();
- }
-
- emit viewTransformationsChanged();
-}
-
-void KisView::styleChange(TQStyle& oldStyle)
-{
- Q_UNUSED(oldStyle);
- m_canvas->updateGeometry();
- refreshKisCanvas();
-}
-
-void KisView::paletteChange(const TQPalette& oldPalette)
-{
- Q_UNUSED(oldPalette);
- refreshKisCanvas();
-}
-
-void KisView::showEvent(TQShowEvent *)
-{
- if (!m_showEventReceived) {
- m_showEventReceived = true;
- startInitialZoomTimerIfReady();
- }
-}
-
-void KisView::updateReadWrite(bool readwrite)
-{
- layerUpdateGUI(readwrite);
-}
-
-TQ_INT32 KisView::horzValue() const
-{
- return m_hScroll->value() - m_canvasXOffset;
-}
-
-TQ_INT32 KisView::vertValue() const
-{
- return m_vScroll->value() - m_canvasYOffset;
-}
-
-void KisView::updateTQPaintDeviceCanvas(const TQRect& imageRect)
-{
- TQRect vr = windowToView(imageRect);
- vr &= TQRect(0, 0, m_canvas->width(), m_canvas->height());
-
- if (!vr.isEmpty()) {
-
- TQPainter gc;
-
- if (gc.begin(&m_canvasPixmap)) {
-
- KisImageSP img = currentImg();
-
- if (img && m_paintViewEnabled) {
-
- TQRect wr = viewToWindow(vr);
-
- if (wr.left() < 0 || wr.right() >= img->width() || wr.top() < 0 || wr.bottom() >= img->height()) {
- // Erase areas outside document
- TQRegion rg(vr);
- rg -= TQRegion(windowToView(TQRect(0, 0, img->width(), img->height())));
-
- TQMemArray<TQRect> rects = rg.rects();
-
- for (unsigned int i = 0; i < rects.count(); i++) {
- TQRect er = rects[i];
- gc.fillRect(er, tqcolorGroup().mid());
- }
- wr &= TQRect(0, 0, img->width(), img->height());
- }
-
- if (!wr.isEmpty()) {
-
- KisImage::PaintFlags paintFlags = (KisImage::PaintFlags)KisImage::PAINT_BACKGROUND;
-
- if (m_actLayerVis) {
- paintFlags = (KisImage::PaintFlags)(paintFlags|KisImage::PAINT_MASKINACTIVELAYERS);
- }
-
- if (m_selectionManager->displaySelection())
- {
- paintFlags = (KisImage::PaintFlags)(paintFlags|KisImage::PAINT_SELECTION);
- }
-
- if (zoom() > 1.0 - EPSILON) {
-
- gc.setWorldXForm(true);
- gc.translate(-horzValue(), -vertValue());
- gc.scale(zoomFactor(), zoomFactor());
-
- m_image->renderToPainter(wr.left(), wr.top(),
- wr.right(), wr.bottom(), gc, monitorProfile(),
- paintFlags, HDRExposure());
- } else {
-
- TQRect canvasRect = windowToView(wr);
- TQRect scaledImageRect = canvasRect;
- scaledImageRect.moveBy(horzValue(), vertValue());
-
- TQSize scaledImageSize(static_cast<TQ_INT32>(ceil(docWidth() * zoom())),
- static_cast<TQ_INT32>(ceil(docHeight() * zoom())));
-
- TQImage image = m_image->convertToTQImage(scaledImageRect, scaledImageSize,
- monitorProfile(), paintFlags, HDRExposure());
-
- gc.drawImage(canvasRect.topLeft(), image, image.rect());
-
- // Set up for the grid drawer.
- gc.setWorldXForm(true);
- gc.translate(-horzValue(), -vertValue());
- gc.scale(zoomFactor(), zoomFactor());
- }
-
- m_gridManager->drawGrid( wr, &gc );
- m_perspectiveGridManager->drawGrid( wr, &gc );
- }
-// paintGuides();
- } else {
- gc.fillRect(vr, tqcolorGroup().mid());
- }
- }
- }
-}
-
-void KisView::paintTQPaintDeviceView(const TQRegion& canvasRegion)
-{
- Q_ASSERT(m_canvas->TQPaintDeviceWidget() != 0);
-
- if (m_canvas->TQPaintDeviceWidget() != 0 && !m_canvasPixmap.isNull()) {
- TQMemArray<TQRect> rects = canvasRegion.rects();
-
- for (unsigned int i = 0; i < rects.count(); i++) {
- TQRect r = rects[i];
-
- bitBlt(m_canvas->TQPaintDeviceWidget(), r.x(), r.y(), &m_canvasPixmap,
- r.x(), r.y(), r.width(), r.height());
- }
-
- paintToolOverlay(canvasRegion);
- }
-}
-
-void KisView::updateOpenGLCanvas(const TQRect& imageRect)
-{
-#ifdef HAVE_GL
- KisImageSP img = currentImg();
-
- if (img && m_paintViewEnabled) {
- Q_ASSERT(m_OpenGLImageContext != 0);
-
- if (m_OpenGLImageContext != 0) {
- m_OpenGLImageContext->update(imageRect);
- }
- }
-#else
- Q_UNUSED(imageRect);
-#endif
-}
-
-void KisView::paintOpenGLView(const TQRect& canvasRect)
-{
-#ifdef HAVE_GL
- if (!m_canvas->isUpdatesEnabled()) {
- return;
- }
-
- m_canvas->OpenGLWidget()->makeCurrent();
-
- glDrawBuffer(GL_BACK);
-
- TQColor widgetBackgroundColor = tqcolorGroup().mid();
-
- glClearColor(widgetBackgroundColor.red() / 255.0, widgetBackgroundColor.green() / 255.0, widgetBackgroundColor.blue() / 255.0, 1.0);
- glClear(GL_COLOR_BUFFER_BIT);
-
- KisImageSP img = currentImg();
-
- if (img && m_paintViewEnabled) {
-
- TQRect vr = canvasRect;
- vr &= TQRect(0, 0, m_canvas->width(), m_canvas->height());
-
- if (!vr.isNull()) {
-
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glViewport(0, 0, m_canvas->width(), m_canvas->height());
- glOrtho(0, m_canvas->width(), m_canvas->height(), 0, -1, 1);
-
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
-
- glBindTexture(GL_TEXTURE_2D, m_OpenGLImageContext->backgroundTexture());
-
- glTranslatef(m_canvasXOffset, m_canvasYOffset, 0.0);
-
- glEnable(GL_TEXTURE_2D);
- glBegin(GL_TQUADS);
-
- glTexCoord2f(0.0, 0.0);
- glVertex2f(0.0, 0.0);
-
- glTexCoord2f((img->width() * zoom()) / KisOpenGLImageContext::BACKGROUND_TEXTURE_WIDTH, 0.0);
- glVertex2f(img->width() * zoom(), 0.0);
-
- glTexCoord2f((img->width() * zoom()) / KisOpenGLImageContext::BACKGROUND_TEXTURE_WIDTH,
- (img->height() * zoom()) / KisOpenGLImageContext::BACKGROUND_TEXTURE_HEIGHT);
- glVertex2f(img->width() * zoom(), img->height() * zoom());
-
- glTexCoord2f(0.0, (img->height() * zoom()) / KisOpenGLImageContext::BACKGROUND_TEXTURE_HEIGHT);
- glVertex2f(0.0, img->height() * zoom());
-
- glEnd();
-
- glTranslatef(-m_canvasXOffset, -m_canvasYOffset, 0.0);
-
- glTranslatef(-horzValue(), -vertValue(), 0.0);
- glScalef(zoomFactor(), zoomFactor(), 1.0);
-
- glEnable(GL_BLEND);
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-
- TQRect wr = viewToWindow(TQRect(0, 0, m_canvas->width(), m_canvas->height()));
- wr &= TQRect(0, 0, img->width(), img->height());
-
- m_OpenGLImageContext->setHDRExposure(HDRExposure());
-
- m_canvas->OpenGLWidget()->makeCurrent();
-
- for (int x = (wr.left() / m_OpenGLImageContext->imageTextureTileWidth()) * m_OpenGLImageContext->imageTextureTileWidth();
- x <= wr.right();
- x += m_OpenGLImageContext->imageTextureTileWidth()) {
- for (int y = (wr.top() / m_OpenGLImageContext->imageTextureTileHeight()) * m_OpenGLImageContext->imageTextureTileHeight();
- y <= wr.bottom();
- y += m_OpenGLImageContext->imageTextureTileHeight()) {
-
- glBindTexture(GL_TEXTURE_2D, m_OpenGLImageContext->imageTextureTile(x, y));
-
- glBegin(GL_TQUADS);
-
- glTexCoord2f(0.0, 0.0);
- glVertex2f(x, y);
-
- glTexCoord2f(1.0, 0.0);
- glVertex2f(x + m_OpenGLImageContext->imageTextureTileWidth(), y);
-
- glTexCoord2f(1.0, 1.0);
- glVertex2f(x + m_OpenGLImageContext->imageTextureTileWidth(), y + m_OpenGLImageContext->imageTextureTileHeight());
-
- glTexCoord2f(0.0, 1.0);
- glVertex2f(x, y + m_OpenGLImageContext->imageTextureTileHeight());
-
- glEnd();
- }
- }
-
- glDisable(GL_TEXTURE_2D);
- glDisable(GL_BLEND);
-
- m_gridManager->drawGrid(wr, 0, true);
- m_perspectiveGridManager->drawGrid( wr, 0, true );
-
- // Unbind the texture otherwise the ATI driver crashes when the canvas context is
- // made current after the textures are deleted following an image resize.
- glBindTexture(GL_TEXTURE_2D, 0);
-
- //paintGuides();
- }
- }
-
- m_canvas->OpenGLWidget()->swapBuffers();
-
- paintToolOverlay(TQRegion(canvasRect));
-
-#else
- Q_UNUSED(canvasRect);
-#endif
-}
-
-void KisView::setInputDevice(KisInputDevice inputDevice)
-{
- if (inputDevice != m_inputDevice) {
- m_inputDevice = inputDevice;
-
- m_toolManager->setToolForInputDevice(m_inputDevice, inputDevice);
-
- if (m_toolManager->currentTool() == 0) {
- m_toolManager->setCurrentTool(m_toolManager->findTool("tool_brush", m_inputDevice));
- }
- else {
- m_toolManager->setCurrentTool(m_toolManager->currentTool());
- }
- m_toolManager->activateCurrentTool();
-
- emit sigInputDeviceChanged(inputDevice);
- }
-
-}
-
-KisInputDevice KisView::currentInputDevice() const
-{
- return m_inputDevice;
-}
-
-
-KisCanvas *KisView::kiscanvas() const
-{
- return m_canvas;
-}
-
-void KisView::updateCanvas()
-{
- if (m_image) {
- updateCanvas(m_image->bounds());
- }
-}
-
-void KisView::updateCanvas(TQ_INT32 x, TQ_INT32 y, TQ_INT32 w, TQ_INT32 h)
-{
- updateCanvas(TQRect(x, y, w, h));
-}
-
-void KisView::updateCanvas(const TQRect& imageRect)
-{
- if (m_canvas->isOpenGLCanvas()) {
- updateOpenGLCanvas(imageRect);
- paintOpenGLView(windowToView(imageRect));
- } else {
- updateTQPaintDeviceCanvas(imageRect);
- //m_canvas->update(windowToView(imageRect));
- m_canvas->tqrepaint(windowToView(imageRect));
- }
-}
-
-void KisView::refreshKisCanvas()
-{
- TQRect imageRect = viewToWindow(TQRect(0, 0, m_canvas->width(), m_canvas->height()));
-
- if (m_image) {
- imageRect |= m_image->bounds();
- }
-
- updateCanvas(imageRect);
-
- // Enable this if updateCanvas does an m_canvas->update()
- //m_canvas->tqrepaint();
-}
-
-void KisView::selectionDisplayToggled(bool displaySelection)
-{
-#ifdef HAVE_GL
- if (m_canvas->isOpenGLCanvas()) {
- if (m_OpenGLImageContext) {
- m_OpenGLImageContext->setSelectionDisplayEnabled(displaySelection);
- }
- }
-#else
- Q_UNUSED(displaySelection);
-#endif
- updateCanvas();
-}
-
-void KisView::layerUpdateGUI(bool enable)
-{
- KisImageSP img = currentImg();
-
- KisLayerSP layer;
- TQ_INT32 nlayers = 0;
- TQ_INT32 nvisible = 0;
-
-
-
- if (img) {
- layer = img->activeLayer();
- nlayers = img->nlayers();
- nvisible = nlayers - img->nHiddenLayers();
- }
-
- KisPaintLayer * pl = dynamic_cast<KisPaintLayer*>(layer.data());
-
- if (pl && ( m_currentColorChooserDisplay != KisID("BLA") ||
- pl->paintDevice()->colorSpace()->id() != m_currentColorChooserDisplay)) {
- if (pl->paintDevice()->colorSpace()->id() == KisID("WET")) {
- m_paletteManager->hideWidget( "hsvwidget" );
- m_paletteManager->hideWidget( "rgbwidget" );
- m_paletteManager->hideWidget( "graywidget" );
- m_paletteManager->hideWidget( "palettewidget" );
- m_paletteManager->showWidget( "watercolor docker" );
- }
- else {
- m_paletteManager->hideWidget( "watercolor docker" );
- m_paletteManager->showWidget( "palettewidget" );
- m_paletteManager->showWidget( "graywidget" );
- m_paletteManager->showWidget( "rgbwidget" );
- m_paletteManager->showWidget( "hsvwidget" );
- }
- m_currentColorChooserDisplay = pl->paintDevice()->colorSpace()->id();
- }
-
- enable = enable && img && layer && layer->visible() && !layer->locked();
- m_layerDup->setEnabled(enable);
- m_layerRm->setEnabled(enable);
- m_layerHide->setEnabled(img && layer);
- m_layerProperties->setEnabled(enable);
- m_layerSaveAs->setEnabled(enable);
- m_layerRaise->setEnabled(enable && layer->prevSibling());
- m_layerLower->setEnabled(enable && layer->nextSibling());
- m_layerTop->setEnabled(enable && nlayers > 1 && layer != img->rootLayer()->firstChild());
- m_layerBottom->setEnabled(enable && nlayers > 1 && layer != img->rootLayer()->lastChild());
-
- // XXX these should be named layer instead of img
- m_imgFlatten->setEnabled(nlayers > 1);
- m_imgMergeLayer->setEnabled(nlayers > 1 && layer && layer->nextSibling());
-
-
- m_selectionManager->updateGUI();
- m_filterManager->updateGUI();
- m_toolManager->updateGUI();
- m_gridManager->updateGUI();
- m_perspectiveGridManager->updateGUI();
-
-
- KisPartLayer * partLayer = dynamic_cast<KisPartLayer*>(layer.data());
- if (partLayer) {
- setCanvasCursor( KisCursor::arrowCursor() );
- }
-
- if (img && img->activeDevice())
- emit currentColorSpaceChanged(img->activeDevice()->colorSpace());
-
- imgUpdateGUI();
-}
-
-
-void KisView::imgUpdateGUI()
-{
- KisImageSP img = currentImg();
-
- m_imgResizeToLayer->setEnabled(img && img->activeLayer());
-
- updateStatusBarProfileLabel();
-}
-
-static const double zoomLevels[] = {
- 1.0 / 500,
- 1.0 / 333.333333,
- 1.0 / 250,
- 1.0 / 200,
- 1.0 / 150,
- 1.0 / 100,
- 1.0 / 66.666667,
- 1.0 / 50,
- 1.0 / 33.333333,
- 1.0 / 25,
- 1.0 / 20,
- 1.0 / 16,
- 1.0 / 12,
- 1.0 / 8,
- 1.0 / 6,
- 1.0 / 4,
- 1.0 / 3,
- 1.0 / 2,
- 1.0 / 1.5,
- 1,
- 2,
- 3,
- 4,
- 5,
- 6,
- 7,
- 8,
- 12,
- 16
-};
-
-#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
-#define NUM_ZOOM_LEVELS ARRAY_SIZE(zoomLevels)
-
-#define FIRST_ZOOM_LEVEL_INDEX 0
-#define LAST_ZOOM_LEVEL_INDEX (NUM_ZOOM_LEVELS - 1)
-
-#define KISVIEW_MIN_ZOOM (zoomLevels[FIRST_ZOOM_LEVEL_INDEX])
-#define KISVIEW_MAX_ZOOM (zoomLevels[LAST_ZOOM_LEVEL_INDEX])
-
-double KisView::nextZoomInLevel() const
-{
- uint zoomLevelIndex = FIRST_ZOOM_LEVEL_INDEX;
-
- while (zoom() >= zoomLevels[zoomLevelIndex] && zoomLevelIndex < LAST_ZOOM_LEVEL_INDEX) {
- zoomLevelIndex++;
- }
-
- return zoomLevels[zoomLevelIndex];
-}
-
-double KisView::nextZoomOutLevel(double zoomLevel) const
-{
- int zoomLevelIndex = LAST_ZOOM_LEVEL_INDEX;
-
- while (zoomLevel <= zoomLevels[zoomLevelIndex] && zoomLevelIndex > FIRST_ZOOM_LEVEL_INDEX) {
- zoomLevelIndex--;
- }
-
- return zoomLevels[zoomLevelIndex];
-}
-
-double KisView::nextZoomOutLevel() const
-{
- return nextZoomOutLevel(zoom());
-}
-
-void KisView::zoomAroundPoint(double x, double y, double zf)
-{
- // Disable updates while we change the scrollbar settings.
- m_canvas->setUpdatesEnabled(false);
- m_hScroll->setUpdatesEnabled(false);
- m_vScroll->setUpdatesEnabled(false);
-
- if (x < 0 || y < 0) {
- // Zoom about the centre of the current display
- KisImageSP img = currentImg();
-
- if (img) {
- if (m_hScroll->isVisible()) {
- KisPoint c = viewToWindow(KisPoint(m_canvas->width() / 2.0, m_canvas->height() / 2.0));
- x = c.x();
- }
- else {
- x = img->width() / 2.0;
- }
-
- if (m_vScroll->isVisible()) {
- KisPoint c = viewToWindow(KisPoint(m_canvas->width() / 2.0, m_canvas->height() / 2.0));
- y = c.y();
- }
- else {
- y = img->height() / 2.0;
- }
- }
- else {
- x = 0;
- y = 0;
- }
- }
-
- setZoom(zf);
-
- Q_ASSERT(m_zoomIn);
- Q_ASSERT(m_zoomOut);
-
- updateStatusBarZoomLabel ();
-
- m_zoomIn->setEnabled(zf < KISVIEW_MAX_ZOOM);
- m_zoomOut->setEnabled(zf > KISVIEW_MIN_ZOOM);
- resizeEvent(0);
-
- m_hRuler->setZoom(zf);
- m_vRuler->setZoom(zf);
-
- if (m_hScroll->isVisible()) {
- double vcx = m_canvas->width() / 2.0;
- TQ_INT32 scrollX = tqRound(x * zoom() - vcx);
- m_hScroll->setValue(scrollX);
- }
-
- if (m_vScroll->isVisible()) {
- double vcy = m_canvas->height() / 2.0;
- TQ_INT32 scrollY = tqRound(y * zoom() - vcy);
- m_vScroll->setValue(scrollY);
- }
-
- // Now update everything.
- m_canvas->setUpdatesEnabled(true);
- m_hScroll->setUpdatesEnabled(true);
- m_vScroll->setUpdatesEnabled(true);
- m_hScroll->update();
- m_vScroll->update();
-
- if (m_canvas->isOpenGLCanvas()) {
- paintOpenGLView(TQRect(0, 0, m_canvas->width(), m_canvas->height()));
- } else {
- refreshKisCanvas();
- }
-
- emit viewTransformationsChanged();
-}
-
-void KisView::zoomTo(const KisRect& r)
-{
- if (!r.isNull()) {
-
- double wZoom = fabs(m_canvas->width() / r.width());
- double hZoom = fabs(m_canvas->height() / r.height());
-
- double zf = kMin(wZoom, hZoom);
-
- if (zf < KISVIEW_MIN_ZOOM) {
- zf = KISVIEW_MIN_ZOOM;
- }
- else
- if (zf > KISVIEW_MAX_ZOOM) {
- zf = KISVIEW_MAX_ZOOM;
- }
-
- zoomAroundPoint(r.center().x(), r.center().y(), zf);
- }
-}
-
-void KisView::zoomTo(const TQRect& r)
-{
- zoomTo(KisRect(r));
-}
-
-void KisView::zoomTo(TQ_INT32 x, TQ_INT32 y, TQ_INT32 w, TQ_INT32 h)
-{
- zoomTo(KisRect(x, y, w, h));
-}
-
-void KisView::zoomIn(TQ_INT32 x, TQ_INT32 y)
-{
- zoomAroundPoint(x, y, nextZoomInLevel());
-}
-
-void KisView::zoomOut(TQ_INT32 x, TQ_INT32 y)
-{
- zoomAroundPoint(x, y, nextZoomOutLevel());
-}
-
-void KisView::zoomIn()
-{
- slotZoomIn();
-}
-
-void KisView::zoomOut()
-{
- slotZoomOut();
-}
-
-void KisView::slotZoomIn()
-{
- zoomIn(-1, -1);
-}
-
-void KisView::slotZoomOut()
-{
- zoomOut(-1, -1);
-}
-
-void KisView::slotActualPixels()
-{
- zoomAroundPoint(-1, -1, 1.0);
-}
-
-void KisView::slotActualSize()
-{
- //XXX later this should be update to take screen res and image res into consideration
- zoomAroundPoint(-1, -1, 1.0);
-}
-
-double KisView::fitToCanvasZoomLevel() const
-{
- int fullCanvasWidth = width();
-
- if (m_vRuler->isVisible()) {
- fullCanvasWidth -= m_vRuler->width();
- }
-
- int fullCanvasHeight = height();
-
- if (m_hRuler->isVisible()) {
- fullCanvasHeight -= m_hRuler->height();
- }
-
- KisImageSP img = currentImg();
- if (img) {
- double xZoomLevel = static_cast<double>(fullCanvasWidth) / img->width();
- double yZoomLevel = static_cast<double>(fullCanvasHeight) / img->height();
-
- return TQMIN(xZoomLevel, yZoomLevel);
- }
- else {
- return 1;
- }
-}
-
-void KisView::slotFitToCanvas()
-{
- zoomAroundPoint(-1, -1, fitToCanvasZoomLevel());
-}
-
-void KisView::setInitialZoomLevel()
-{
- double zoomLevel = fitToCanvasZoomLevel();
-
- if (zoomLevel > 1) {
- zoomLevel = 1;
- } else {
- zoomLevel = nextZoomOutLevel(zoomLevel);
- }
-
- zoomAroundPoint(-1, -1, zoomLevel);
-}
-
-void KisView::imgResizeToActiveLayer()
-{
- KisImageSP img = currentImg();
- KisLayerSP layer;
-
- if (img && (layer = img->activeLayer())) {
-
- if (m_adapter && m_adapter->undo()) {
- m_adapter->beginMacro(i18n("Resize Image to Size of Current Layer"));
- }
-
- img->lock();
-
- TQRect r = layer->exactBounds();
- img->resize(r.width(), r.height(), r.x(), r.y(), true);
-
- img->unlock();
-
- if (m_adapter && m_adapter->undo()) {
- m_adapter->endMacro();
- }
- }
-}
-
-void KisView::slotImageProperties()
-{
- KisImageSP img = currentImg();
-
- if (!img) return;
-
- KisDlgImageProperties dlg(img, this);
-
- if (dlg.exec() == TQDialog::Accepted) {
- if (dlg.imageWidth() != img->width() ||
- dlg.imageHeight() != img->height()) {
-
- resizeCurrentImage(dlg.imageWidth(),
- dlg.imageHeight());
- }
- TQ_INT32 opacity = dlg.opacity();
- opacity = opacity * 255 / 100;
- img->setName(dlg.imageName());
- img->setColorSpace(dlg.colorSpace());
- img->setResolution(dlg.resolution(), dlg.resolution());
- img->setDescription(dlg.description());
- img->setProfile(dlg.profile());
- }
-}
-
-void KisView::slotInsertImageAsLayer()
-{
- if (importImage() > 0)
- m_doc->setModified(true);
-}
-
-void KisView::slotAddPalette()
-{
- KDialogBase* base = new KDialogBase(this, 0, true, i18n("Add Palette"), KDialogBase::Ok | KDialogBase::Cancel);
- KisCustomPalette* p = new KisCustomPalette(base, "add palette", i18n("Add Palette"), this);
- base->setMainWidget(p);
- base->show();
-}
-
-void KisView::slotEditPalette()
-{
- KisPaletteChooser chooser(this);
- KisResourceServerBase* srv = KisResourceServerRegistry::instance()->get("PaletteServer");
- if (!srv) {
- return;
- }
- TQValueList<KisResource*> resources = srv->resources();
- TQValueList<KisPalette*> palettes;
-
- for(uint i = 0; i < resources.count(); i++) {
- KisPalette* palette = dynamic_cast<KisPalette*>(*resources.at(i));
-
- chooser.paletteList->insertItem(palette->name());
- palettes.append(palette);
- }
-
- if (chooser.exec() != TQDialog::Accepted ) {
- return;
- }
-
- int index = chooser.paletteList->currentItem();
- if (index < 0) {
- KMessageBox::error(this, i18n("No palette selected."), i18n("Palette"));
- return;
- }
-
- KDialogBase* base = new KDialogBase(this, 0, true, i18n("Edit Palette") , KDialogBase::Ok);
- KisCustomPalette* cp = new KisCustomPalette(base, "edit palette",
- i18n("Edit Palette"), this);
- cp->setEditMode(true);
- cp->setPalette(*palettes.at(index));
- base->setMainWidget(cp);
- base->show();
-}
-
-void KisView::saveLayerAsImage()
-{
- TQStringList listMimeFilter = KoFilterManager::mimeFilter("application/x-krita", KoFilterManager::Export);
- TQString mimelist = listMimeFilter.join(" ");
-
- KFileDialog fd (TQString(), mimelist, this, "Export Layer", true);
- fd.setCaption(i18n("Export Layer"));
- fd.setMimeFilter(listMimeFilter);
- fd.setOperationMode(KFileDialog::Saving);
-
- if (!fd.exec()) return;
-
- KURL url = fd.selectedURL();
- TQString mimefilter = fd.currentMimeFilter();
-
- if (url.isEmpty())
- return;
-
-
- KisImageSP img = currentImg();
- if (!img) return;
-
- KisLayerSP l = img->activeLayer();
- if (!l) return;
-
- TQRect r = l->exactBounds();
-
- KisDoc d;
- d.prepareForImport();
-
- KisImageSP dst = new KisImage(d.undoAdapter(), r.width(), r.height(), img->colorSpace(), l->name());
- d.setCurrentImage( dst );
- dst->addLayer(l->clone(),dst->rootLayer(),0);
-
- d.setOutputMimeType(mimefilter.latin1());
- d.exp0rt(url);
-}
-
-
-
-TQ_INT32 KisView::importImage(const KURL& urlArg)
-{
- KisImageSP currentImage = currentImg();
-
- if (!currentImage) {
- return 0;
- }
-
- KURL::List urls;
- TQ_INT32 rc = 0;
-
- if (urlArg.isEmpty()) {
- TQString mimelist = KoFilterManager::mimeFilter("application/x-krita", KoFilterManager::Import).join(" ");
- urls = KFileDialog::getOpenURLs(TQString(), mimelist, 0, i18n("Import Image"));
- } else {
- urls.push_back(urlArg);
- }
-
- if (urls.empty())
- return 0;
-
- for (KURL::List::iterator it = urls.begin(); it != urls.end(); ++it) {
- new KisImportCatcher( *it, currentImage );
- }
-
- updateCanvas();
-
- return rc;
-}
-
-void KisView::rotateLayer180()
-{
- rotateLayer( M_PI );
-}
-
-void KisView::rotateLayerLeft90()
-{
- rotateLayer( M_PI/2 - 2*M_PI );
-}
-
-void KisView::rotateLayerRight90()
-{
- rotateLayer( M_PI/2 );
-}
-
-void KisView::mirrorLayerX()
-{
- if (!currentImg()) return;
- KisPaintDeviceSP dev = currentImg()->activeDevice();
- if (!dev) return;
-
- KisTransaction * t = 0;
- if (undoAdapter() && undoAdapter()->undo()) {
- t = new KisTransaction(i18n("Mirror Layer X"), dev);
- Q_CHECK_PTR(t);
- }
-
- dev->mirrorX();
-
- if (t) undoAdapter()->addCommand(t);
-
- m_doc->setModified(true);
- layersUpdated();
- updateCanvas();
-}
-
-void KisView::mirrorLayerY()
-{
- if (!currentImg()) return;
- KisPaintDeviceSP dev = currentImg()->activeDevice();
- if (!dev) return;
-
- KisTransaction * t = 0;
- if (undoAdapter() && undoAdapter()->undo()) {
- t = new KisTransaction(i18n("Mirror Layer Y"), dev);
- Q_CHECK_PTR(t);
- }
-
- dev->mirrorY();
-
- if (t) undoAdapter()->addCommand(t);
-
- m_doc->setModified(true);
- layersUpdated();
- updateCanvas();
-}
-
-void KisView::scaleLayer(double sx, double sy, KisFilterStrategy *filterStrategy)
-{
- if (!currentImg()) return;
-
- KisPaintDeviceSP dev = currentImg()->activeDevice();
- if (!dev) return;
-
- KisSelectedTransaction * t = 0;
- if (undoAdapter() && undoAdapter()->undo()) {
- t = new KisSelectedTransaction(i18n("Scale Layer"), dev);
- Q_CHECK_PTR(t);
- }
-
- KisTransformWorker worker(dev, sx, sy, 0, 0, 0.0, 0, 0, m_progress, filterStrategy);
- worker.run();
-
- if (t) undoAdapter()->addCommand(t);
- currentImg()->rootLayer()->setDirty(false);
- m_doc->setModified(true);
- layersUpdated();
- updateCanvas();
-}
-
-void KisView::rotateLayer(double radians)
-{
- if (!currentImg()) return;
-
- KisPaintDeviceSP dev = currentImg()->activeDevice();
- if (!dev) return;
-
- KisSelectedTransaction * t = 0;
- if (undoAdapter() && undoAdapter()->undo()) {
- t = new KisSelectedTransaction(i18n("Rotate Layer"), dev);
- Q_CHECK_PTR(t);
- }
-
- KisFilterStrategy *filter = KisFilterStrategyRegistry::instance()->get(KisID("Triangle"));
- TQRect r;
- if(dev->hasSelection())
- r = dev->selection()->selectedExactRect();
- else
- r = dev->exactBounds();
- double cx = r.x()+r.width()/2.0;
- double cy = r.y()+r.height()/2.0;
- TQ_INT32 tx = TQ_INT32(cx*cos(radians) - cy*sin(radians) - cx + 0.5);
- TQ_INT32 ty = TQ_INT32(cy*cos(radians) + cx*sin(radians) - cy + 0.5);
-
- KisTransformWorker tw(dev, 1.0, 1.0, 0, 0, radians, -tx, -ty, m_progress, filter);
- tw.run();
-
- if (t) undoAdapter()->addCommand(t);
-
- m_doc->setModified(true);
- layersUpdated();
- updateCanvas();
-}
-
-void KisView::shearLayer(double angleX, double angleY)
-{
- if (!currentImg()) return;
-
- KisLayerSP layer = currentImg()->activeLayer();
- if (!layer) return;
-
- KisUndoAdapter * undo = 0;
- if ((undo = currentImg()->undoAdapter())) {
- undo->beginMacro(i18n("Shear layer"));
- }
-
- KisShearVisitor v(angleX, angleY, m_progress);
- v.setUndoAdapter(undo);
- layer->accept(v);
-
- if (undo) undo->endMacro();
-
- m_doc->setModified(true);
- layersUpdated();
- updateCanvas();
-}
-
-void KisView::flattenImage()
-{
- KisImageSP img = currentImg();
-
- if (img) {
- bool doIt = true;
-
- if (img->nHiddenLayers() > 0) {
- int answer = KMessageBox::warningYesNo(this,
- i18n("The image contains hidden layers that will be lost."),
- i18n("Flatten Image"),
- i18n("&Flatten Image"),
- KStdGuiItem::cancel());
-
- if (answer != KMessageBox::Yes) {
- doIt = false;
- }
- }
-
- if (doIt) {
- img->flatten();
- }
- }
-}
-
-void KisView::mergeLayer()
-{
- KisImageSP img = currentImg();
- if (!img) return;
-
- KisLayerSP layer = img->activeLayer();
- if (!layer) return;
-
- img->mergeLayer(layer);
-}
-
-void KisView::preferences()
-{
-#ifdef HAVE_GL
- bool canvasWasOpenGL = m_canvas->isOpenGLCanvas();
-#endif
-
- if (PreferencesDialog::editPreferences())
- {
- KisConfig cfg;
- m_paletteManager->slotResetFont();
- resetMonitorProfile();
-
-#ifdef HAVE_GL
- if (cfg.useOpenGL() != canvasWasOpenGL) {
-
- disconnectCurrentImg();
-
- //XXX: Need to notify other views that this global setting has changed.
- if (cfg.useOpenGL()) {
- m_OpenGLImageContext = KisOpenGLImageContext::getImageContext(m_image, monitorProfile());
- m_canvas->createOpenGLCanvas(m_OpenGLImageContext->sharedContextWidget());
- } else
- {
- m_OpenGLImageContext = 0;
- m_canvas->createTQPaintDeviceCanvas();
- }
-
- connectCurrentImg();
-
- resizeEvent(0);
- }
-
- if (cfg.useOpenGL()) {
- m_OpenGLImageContext->setMonitorProfile(monitorProfile());
- }
-#endif
-
- refreshKisCanvas();
-
- if (m_toolManager->currentTool()) {
- setCanvasCursor(m_toolManager->currentTool()->cursor());
- }
-
-#if defined(EXTENDED_X11_TABLET_SUPPORT)
- m_canvas->selectTabletDeviceEvents();
-#endif
-
- }
-}
-
-void KisView::layerCompositeOp(const KisCompositeOp& compositeOp)
-{
- KisImageSP img = currentImg();
- if (!img) return;
-
- KisLayerSP layer = img->activeLayer();
- if (!layer) return;
-
- if (img->undo()) {
- KNamedCommand *cmd = layer->setCompositeOpCommand(compositeOp);
- cmd->execute();
- undoAdapter()->addCommand(cmd);
- }
-}
-
-// range: 0 - 100
-void KisView::layerOpacity(int opacity, bool dontundo)
-{
- KisImageSP img = currentImg();
- if (!img) return;
-
- KisLayerSP layer = img->activeLayer();
- if (!layer) return;
-
- opacity = int(float(opacity * 255) / 100 + 0.5);
- if (opacity > 255)
- opacity = 255;
-
- if (opacity == layer->opacity()) return;
-
- if (dontundo)
- layer->setOpacity( opacity );
- else
- {
- if (img->undo()) {
- KNamedCommand *cmd = layer->setOpacityCommand(opacity);
- cmd->execute();
- undoAdapter()->addCommand(cmd);
- }
- }
-}
-
-void KisView::layerOpacityFinishedChanging( int previous, int opacity )
-{
- KisImageSP img = currentImg();
- if (!img) return;
-
- KisLayerSP layer = img->activeLayer();
- if (!layer) return;
-
- opacity = int(float(opacity * 255) / 100 + 0.5);
- if (opacity > 255)
- opacity = 255;
-
- previous = int(float(previous * 255) / 100 + 0.5);
- if (previous > 255)
- previous = 255;
-
- if (previous == opacity) return;
-
- if (img->undo()) {
- KNamedCommand *cmd = layer->setOpacityCommand(previous, opacity);
- m_adapter->addCommand(cmd);
- }
-}
-
-
-void KisView::showRuler()
-{
- if( m_RulerAction->isChecked() )
- {
- m_hRuler->show();
- m_vRuler->show();
- }
- else
- {
- m_hRuler->hide();
- m_vRuler->hide();
- }
-
- resizeEvent(0);
- refreshKisCanvas();
-}
-
-void KisView::slotUpdateFullScreen(bool toggle)
-{
- if (KoView::shell()) {
-
- uint newState = KoView::shell()->windowState();
-
- if (toggle) {
- newState |= TQt::WindowFullScreen;
- } else {
- newState &= ~TQt::WindowFullScreen;
- }
-
- KoView::shell()->setWindowState(newState);
- }
-}
-
-TQ_INT32 KisView::docWidth() const
-{
- return currentImg() ? currentImg()->width() : 0;
-}
-
-TQ_INT32 KisView::docHeight() const
-{
- return currentImg() ? currentImg()->height() : 0;
-}
-
-void KisView::scrollTo(TQ_INT32 x, TQ_INT32 y)
-{
- if (m_hScroll->isVisible()) {
- m_hScroll->setValue(x);
- }
- if (m_vScroll->isVisible()) {
- m_vScroll->setValue(y);
- }
-}
-
-void KisView::brushActivated(KisResource *brush)
-{
-
- m_brush = dynamic_cast<KisBrush*>(brush);
-
- if (m_brush )
- {
- emit brushChanged(m_brush);
- notifyObservers();
- }
-}
-
-void KisView::patternActivated(KisResource *pattern)
-{
- m_pattern = dynamic_cast<KisPattern*>(pattern);
-
- if (m_pattern) {
- emit patternChanged(m_pattern);
- notifyObservers();
- }
-}
-
-void KisView::gradientActivated(KisResource *gradient)
-{
-
- m_gradient = dynamic_cast<KisGradient*>(gradient);
-
- if (m_gradient) {
- emit gradientChanged(m_gradient);
- notifyObservers();
- }
-}
-
-void KisView::paintopActivated(const KisID & paintop, const KisPaintOpSettings *paintopSettings)
-{
- if (paintop.id().isNull() || paintop.id().isEmpty()) {
- return;
- }
-
- m_paintop = paintop;
- m_paintopSettings = paintopSettings;
- emit paintopChanged(m_paintop, paintopSettings);
- notifyObservers();
-}
-
-void KisView::setBGColor(const KisColor& c)
-{
- m_bg = c;
- notifyObservers();
- emit sigBGTQColorChanged( c.toTQColor() );
-}
-
-void KisView::setFGColor(const KisColor& c)
-{
- m_fg = c;
- notifyObservers();
- emit sigFGTQColorChanged( c.toTQColor() );
-}
-
-void KisView::slotSetFGColor(const KisColor& c)
-{
-
- m_fg = c;
- notifyObservers();
-}
-
-void KisView::slotSetBGColor(const KisColor& c)
-{
-
- m_bg = c;
- notifyObservers();
-}
-
-void KisView::slotSetFGTQColor(const TQColor& c)
-{
- KisColorSpace * monitorSpace = KisMetaRegistry::instance()->csRegistry()->getColorSpace(KisID("RGBA"), m_monitorProfile);
- setFGColor(KisColor(c, monitorSpace));
- emit sigFGTQColorChanged(c);
-}
-
-void KisView::slotSetBGTQColor(const TQColor& c)
-{
- KisColorSpace * monitorSpace = KisMetaRegistry::instance()->csRegistry()->getColorSpace(KisID("RGBA"), m_monitorProfile);
- setBGColor(KisColor(c, monitorSpace));
- emit sigBGTQColorChanged(c);
-}
-
-
-void KisView::setupPrinter(KPrinter& printer)
-{
- KisImageSP img = currentImg();
-
- if (img) {
- printer.setPageSelection(KPrinter::ApplicationSide);
- printer.setPageSize(KPrinter::A4);
- printer.setOrientation(KPrinter::Portrait);
- }
-}
-
-void KisView::print(KPrinter& printer)
-{
- TQPainter gc(&printer);
-
- KisImageSP img = currentImg();
- if (!img) return;
-
- printer.setFullPage(true);
- gc.setClipping(false);
-
- KisConfig cfg;
- TQString printerProfileName = cfg.printerProfile();
- KisProfile * printerProfile = KisMetaRegistry::instance()->csRegistry() ->getProfileByName(printerProfileName);
-
- TQRect r = img->bounds();
- img->renderToPainter(r.x(), r.y(), r.width(), r.height(), gc, printerProfile, KisImage::PAINT_IMAGE_ONLY, HDRExposure());
-}
-
-void KisView::paintToolOverlay(const TQRegion& region)
-{
- if (!region.isEmpty() && m_toolManager->currentTool() && !m_toolIsPainting) {
- KisCanvasPainter gc(m_canvas);
-
- gc.setClipRegion(region);
- gc.setClipping(true);
-
- // Prevent endless loop if the tool needs to have the canvas tqrepainted
- m_toolIsPainting = true;
- m_toolManager->currentTool()->paint(gc, region.boundingRect());
- m_toolIsPainting = false;
- }
-}
-
-void KisView::canvasGotPaintEvent(TQPaintEvent *event)
-{
- if (m_canvas->isOpenGLCanvas()) {
- paintOpenGLView(event->rect());
- } else {
- paintTQPaintDeviceView(event->region());
- }
-}
-
-void KisView::canvasGotButtonPressEvent(KisButtonPressEvent *e)
-{
-#if defined(EXTENDED_X11_TABLET_SUPPORT)
- // The event filter doesn't see tablet events going to the canvas.
- if (e->device() != KisInputDevice::mouse()) {
- m_tabletEventTimer.start();
- }
-#endif // EXTENDED_X11_TABLET_SUPPORT
-
- if (e->device() != currentInputDevice()) {
- if (e->device() == KisInputDevice::mouse()) {
- if (m_tabletEventTimer.elapsed() > MOUSE_CHANGE_EVENT_DELAY) {
- setInputDevice(KisInputDevice::mouse());
- }
- } else {
- setInputDevice(e->device());
- }
- }
-
- KisImageSP img = currentImg();
-
-// if (img) {
-// TQPoint pt = mapToScreen(e->pos().floorTQPoint());
-// KisGuideMgr *mgr = img->guides();
-//
-// m_lastGuidePoint = mapToScreen(e->pos().floorTQPoint());
-// m_currentGuide = 0;
-//
-// if ((e->state() & ~TQt::ShiftButton) == Qt::NoButton) {
-// KisGuideSP gd = mgr->tqfind(static_cast<TQ_INT32>(pt.x() / zoom()), static_cast<TQ_INT32>(pt.y() / zoom()), TQMAX(2.0, 2.0 / zoom()));
-//
-// if (gd) {
-// m_currentGuide = gd;
-//
-// if ((e->button() == Qt::RightButton) || ((e->button() & TQt::ShiftButton) == TQt::ShiftButton)) {
-// if (gd->isSelected())
-// mgr->unselect(gd);
-// else
-// mgr->select(gd);
-// } else {
-// if (!gd->isSelected()) {
-// mgr->unselectAll();
-// mgr->select(gd);
-// }
-// }
-//
-// updateGuides();
-// return;
-// }
-// }
-// }
- if (e->button() == Qt::RightButton) {
- TQPopupMenu * m_popup = 0;
- if (factory()) {
- Q_ASSERT(factory());
- m_popup = (TQPopupMenu *)factory()->container("image_popup", this);
- }
- if (m_popup) {
- m_popup->popup(e->globalPos().roundTQPoint());
- }
- }
- else if (e->device() == currentInputDevice() && m_toolManager->currentTool()) {
- KisPoint p = viewToWindow(e->pos());
- // somewhat of a hack: we should actually test if we intersect with the scrollers,
- // but the globalPos seems to be off by a few pixels
- if (m_vScroll->draggingSlider() || m_hScroll->draggingSlider())
- return;
-
- if (m_toolManager->currentTool()->wantsAutoScroll()) {
- enableAutoScroll();
- }
-
- KisButtonPressEvent ev(e->device(), p, e->globalPos(), e->pressure(), e->xTilt(), e->yTilt(), e->button(), e->state());
- m_toolManager->currentTool()->buttonPress(&ev);
- }
-}
-
-void KisView::canvasGotMoveEvent(KisMoveEvent *e)
-{
-#if defined(EXTENDED_X11_TABLET_SUPPORT)
- // The event filter doesn't see tablet events going to the canvas.
- if (e->device() != KisInputDevice::mouse()) {
- m_tabletEventTimer.start();
- }
-#endif // EXTENDED_X11_TABLET_SUPPORT
-
- if (e->device() != currentInputDevice()) {
- if (e->device() == KisInputDevice::mouse()) {
- if (m_tabletEventTimer.elapsed() > MOUSE_CHANGE_EVENT_DELAY) {
- setInputDevice(KisInputDevice::mouse());
- }
- } else {
- setInputDevice(e->device());
- }
- }
-
- KisImageSP img = currentImg();
-
- m_hRuler->updatePointer(e->pos().floorX() - m_canvasXOffset, e->pos().floorY() - m_canvasYOffset);
- m_vRuler->updatePointer(e->pos().floorX() - m_canvasXOffset, e->pos().floorY() - m_canvasYOffset);
-
- KisPoint wp = viewToWindow(e->pos());
-
-#if 0
- if (img && m_currentGuide) {
- TQPoint p = mapToScreen(e->pos().floorTQPoint());
- KisGuideMgr *mgr = img->guides();
-
- if (((e->state() & Qt::LeftButton) == Qt::LeftButton) && mgr->hasSelected()) {
- eraseGuides();
- p -= m_lastGuidePoint;
-
- if (p.x())
- mgr->moveSelectedByX(p.x() / zoom());
-
- if (p.y())
- mgr->moveSelectedByY(p.y() / zoom());
-
- m_doc->setModified(true);
- paintGuides();
- }
- } else
-#endif
- if (e->device() == currentInputDevice() && m_toolManager->currentTool()) {
- KisMoveEvent ev(e->device(), wp, e->globalPos(), e->pressure(), e->xTilt(), e->yTilt(), e->state());
-
- m_toolManager->currentTool()->move(&ev);
- }
-
-// m_lastGuidePoint = mapToScreen(e->pos().floorTQPoint());
- emit cursorPosition(wp.floorX(), wp.floorY());
-}
-
-int KisView::leftBorder() const
-{
- return m_rulerThickness;
-}
-
-int KisView::rightBorder() const
-{
- return m_hScrollBarExtent;
-}
-
-int KisView::topBorder() const
-{
- return m_rulerThickness;
-}
-
-int KisView::bottomBorder() const
-{
- return m_vScrollBarExtent;
-}
-
-void KisView::mouseMoveEvent(TQMouseEvent *e)
-{
- KisMoveEvent ke(currentInputDevice(), e->pos(), e->globalPos(), PRESSURE_DEFAULT, 0, 0, e->state());
- canvasGotMoveEvent(&ke);
-}
-
-void KisView::slotAutoScroll(const TQPoint &p)
-{
- scrollTo(horzValue()+p.x(), vertValue()+p.y());
-}
-
-void KisView::canvasGotButtonReleaseEvent(KisButtonReleaseEvent *e)
-{
-#if defined(EXTENDED_X11_TABLET_SUPPORT)
- // The event filter doesn't see tablet events going to the canvas.
- if (e->device() != KisInputDevice::mouse()) {
- m_tabletEventTimer.start();
- }
-#endif // EXTENDED_X11_TABLET_SUPPORT
-
- if (e->device() != currentInputDevice()) {
- if (e->device() == KisInputDevice::mouse()) {
- if (m_tabletEventTimer.elapsed() > MOUSE_CHANGE_EVENT_DELAY) {
- setInputDevice(KisInputDevice::mouse());
- }
- } else {
- setInputDevice(e->device());
- }
- }
-
- KisImageSP img = currentImg();
-
-// if (img && m_currentGuide) {
-// m_currentGuide = 0;
-// } else
- if (e->device() == currentInputDevice() && m_toolManager->currentTool()) {
- KisPoint p = viewToWindow(e->pos());
- KisButtonReleaseEvent ev(e->device(), p, e->globalPos(), e->pressure(), e->xTilt(), e->yTilt(), e->button(), e->state());
-
- disableAutoScroll();
- if (m_toolManager->currentTool()) {
- m_toolManager->currentTool()->buttonRelease(&ev);
- }
- }
-}
-
-void KisView::canvasGotDoubleClickEvent(KisDoubleClickEvent *e)
-{
-#if defined(EXTENDED_X11_TABLET_SUPPORT)
- // The event filter doesn't see tablet events going to the canvas.
- if (e->device() != KisInputDevice::mouse()) {
- m_tabletEventTimer.start();
- }
-#endif // EXTENDED_X11_TABLET_SUPPORT
-
- if (e->device() != currentInputDevice()) {
- if (e->device() == KisInputDevice::mouse()) {
- if (m_tabletEventTimer.elapsed() > MOUSE_CHANGE_EVENT_DELAY) {
- setInputDevice(KisInputDevice::mouse());
- }
- } else {
- setInputDevice(e->device());
- }
- }
-
- if (e->device() == currentInputDevice() && m_toolManager->currentTool()) {
- KisPoint p = viewToWindow(e->pos());
- KisDoubleClickEvent ev(e->device(), p, e->globalPos(), e->pressure(), e->xTilt(), e->yTilt(), e->button(), e->state());
-
- if (m_toolManager->currentTool()) {
- m_toolManager->currentTool()->doubleClick(&ev);
- }
- }
-}
-
-void KisView::canvasGotEnterEvent(TQEvent *e)
-{
- Q_UNUSED( e );
-}
-
-void KisView::canvasGotLeaveEvent (TQEvent *e)
-{
- Q_UNUSED( e );
-}
-
-void KisView::canvasGotMouseWheelEvent(TQWheelEvent *event)
-{
- //if(event->state() == ControlButton )
- //{
- if(event->delta() / 120 != 0)
- {
- if(event->delta() > 0)
- {
- zoomIn();
- } else {
- zoomOut();
- }
- if (m_oldTool) {
- KisCanvasPainter gc(m_canvas);
- m_oldTool->paint(gc);
- }
- }
- //} else {
- // TQApplication::sendEvent(m_vScroll, event);
- //}
-}
-
-void KisView::canvasGotKeyPressEvent(TQKeyEvent *event)
-{
- if (!m_toolManager->currentTool()) {
- event->ignore();
- return;
- }
-
- if (event->key() == TQt::Key_Space) {
- if (!m_panning) {
- // Set tool temporarily to pan
- m_panning = true;
- m_oldTool = m_toolManager->currentTool();
- m_toolManager->setCurrentTool( "tool_pan" );
- }
- else {
- // Unset panning
- m_panning = false;
- m_toolManager->setCurrentTool( m_oldTool );
- m_oldTool = 0;
- }
- }
- if (m_toolManager->currentTool())
- m_toolManager->currentTool()->keyPress(event);
-}
-
-void KisView::canvasGotKeyReleaseEvent(TQKeyEvent *event)
-{
- if (m_toolManager->currentTool())
- m_toolManager->currentTool()->keyRelease(event);
-}
-
-void KisView::canvasGotDragEnterEvent(TQDragEnterEvent *event)
-{
- bool accept = false;
-
- // Only accept drag if we're not busy, particularly as we may
- // be showing a progress bar and calling tqApp->processEvents().
- if (KURLDrag::canDecode(event) && TQApplication::overrideCursor() == 0) {
- accept = true;
- }
-
- event->accept(accept);
-}
-
-void KisView::canvasGotDropEvent(TQDropEvent *event)
-{
- KURL::List urls;
-
- if (KURLDrag::decode(event, urls))
- {
- if (urls.count() > 0) {
- enum enumActionId {
- addLayerId = 1,
- addDocumentId = 2,
- cancelId
- };
-
- KPopupMenu popup(this, "drop_popup");
-
- if (urls.count() == 1) {
- if (currentImg() != 0) {
- popup.insertItem(i18n("Insert as New Layer"), addLayerId);
- }
- popup.insertItem(i18n("Open in New Document"), addDocumentId);
- }
- else {
- if (currentImg() != 0) {
- popup.insertItem(i18n("Insert as New Layers"), addLayerId);
- }
- popup.insertItem(i18n("Open in New Documents"), addDocumentId);
- }
-
- popup.insertSeparator();
- popup.insertItem(i18n("Cancel"), cancelId);
-
- int actionId = popup.exec(TQCursor::pos());
-
- if (actionId >= 0 && actionId != cancelId) {
- for (KURL::List::ConstIterator it = urls.begin (); it != urls.end (); ++it) {
- KURL url = *it;
-
- switch (actionId) {
- case addLayerId:
- importImage(url);
- break;
- case addDocumentId:
- if (shell() != 0) {
- shell()->openDocument(url);
- }
- break;
- }
- }
- }
- }
- }
-}
-
-void KisView::layerProperties()
-{
- if (currentImg() && currentImg()->activeLayer())
- showLayerProperties(currentImg()->activeLayer());
-}
-
-namespace {
- class KisChangeFilterCmd : public KNamedCommand {
- typedef KNamedCommand super;
-
- public:
- // The TQStrings are the _serialized_ configs
- KisChangeFilterCmd(KisAdjustmentLayerSP layer,
- KisFilterConfiguration* config,
- const TQString& before,
- const TQString& after) : super(i18n("Change Filter"))
- {
- m_layer = layer;
- m_config = config;
- m_before = before;
- m_after = after;
- }
- public:
- virtual void execute()
- {
- TQApplication::setOverrideCursor(KisCursor::waitCursor());
- m_config->fromXML(m_after);
- //Q_ASSERT(m_after == m_config->toString());
- m_layer->setFilter(m_config);
- m_layer->setDirty();
- TQApplication::restoreOverrideCursor();
- }
-
- virtual void unexecute()
- {
- TQApplication::setOverrideCursor(KisCursor::waitCursor());
- m_config->fromXML(m_before);
- //Q_ASSERT(m_before == m_config->toString());
- m_layer->setFilter(m_config);
- m_layer->setDirty();
- TQApplication::restoreOverrideCursor();
- }
- private:
- KisAdjustmentLayerSP m_layer;
- KisFilterConfiguration* m_config;
- TQString m_before;
- TQString m_after;
- };
-}
-
-void KisView::showLayerProperties(KisLayerSP layer)
-{
- Q_ASSERT( layer );
- if ( !layer ) return;
-
- KisColorSpace * cs = 0;
- KisPaintLayer * pl = dynamic_cast<KisPaintLayer*>( layer.data() );
- if ( pl ) {
- cs = pl->paintDevice()->colorSpace();
- }
- else {
- cs = layer->image()->colorSpace();
- }
-
-
- if (KisAdjustmentLayerSP alayer = dynamic_cast<KisAdjustmentLayer*>(layer.data()))
- {
- KisDlgAdjLayerProps dlg(alayer, alayer->name(), i18n("Adjustment Layer Properties"), this, "dlgadjlayerprops");
- TQString before = dlg.filterConfiguration()->toString();
- if (dlg.exec() == TQDialog::Accepted)
- {
- KisChangeFilterCmd * cmd = new KisChangeFilterCmd(alayer,
- dlg.filterConfiguration(),
- before,
- dlg.filterConfiguration()->toString());
- cmd->execute();
- m_adapter->addCommand(cmd);
- m_doc->setModified( true );
- }
- }
- else
- {
- KisDlgLayerProperties dlg(layer->name(),
- layer->opacity(),
- layer->compositeOp(),
- cs);
- if (dlg.exec() == TQDialog::Accepted)
- {
- if (layer->name() != dlg.getName() ||
- layer->opacity() != dlg.getOpacity() ||
- layer->compositeOp() != dlg.getCompositeOp())
- {
- TQApplication::setOverrideCursor(KisCursor::waitCursor());
- m_adapter->beginMacro(i18n("Property Changes"));
- layer->image()->setLayerProperties(layer, dlg.getOpacity(), dlg.getCompositeOp(), dlg.getName());
- layer->setDirty();
- m_adapter->endMacro();
- TQApplication::restoreOverrideCursor();
- m_doc->setModified( true );
- }
- }
- }
-}
-
-void KisView::layerAdd()
-{
- KisImageSP img = currentImg();
- if (img && img->activeLayer()) {
- addLayer(img->activeLayer()->tqparent(), img->activeLayer());
- }
- else if (img)
- addLayer(static_cast<KisGroupLayer*>(img->rootLayer().data()), 0);
-}
-
-void KisView::addLayer(KisGroupLayerSP tqparent, KisLayerSP above)
-{
- KisImageSP img = currentImg();
- if (img) {
- KisConfig cfg;
- TQString profilename;
- if(img->colorSpace()->getProfile())
- profilename = img->colorSpace()->getProfile()->productName();
- NewLayerDialog dlg(img->colorSpace()->id(), profilename, img->nextLayerName(), this);
-
- if (dlg.exec() == TQDialog::Accepted) {
- KisColorSpace* cs = KisMetaRegistry::instance()-> csRegistry() ->
- getColorSpace(dlg.colorSpaceID(),dlg.profileName());
- KisLayerSP layer = new KisPaintLayer(img, dlg.layerName(), dlg.opacity(), cs);
- if (layer) {
- layer->setCompositeOp(dlg.compositeOp());
- img->addLayer(layer, tqparent.data(), above);
- updateCanvas();
- } else {
- KMessageBox::error(this, i18n("Could not add layer to image."), i18n("Layer Error"));
- }
- }
- else {
- img->rollBackLayerName();
- }
- }
-}
-
-void KisView::addGroupLayer(KisGroupLayerSP tqparent, KisLayerSP above)
-{
- KisImageSP img = currentImg();
- if (img) {
- TQString profilename;
- if(img->colorSpace()->getProfile())
- profilename = img->colorSpace()->getProfile()->productName();
- KisConfig cfg;
- NewLayerDialog dlg(img->colorSpace()->id(), profilename, img->nextLayerName(), this);
- dlg.setColorSpaceEnabled(false);
-
- if (dlg.exec() == TQDialog::Accepted) {
- KisLayerSP layer = new KisGroupLayer(img, dlg.layerName(), dlg.opacity());
- if (layer) {
- layer->setCompositeOp(dlg.compositeOp());
- img->addLayer(layer, tqparent.data(), above);
- updateCanvas();
- } else {
- KMessageBox::error(this, i18n("Could not add layer to image."), i18n("Layer Error"));
- }
- }
- }
-}
-
-void KisView::addPartLayer()
-{
- KisImageSP img = currentImg();
- if (!img) return;
-
- addPartLayer(img->rootLayer(), img->rootLayer()->firstChild(), m_actionPartLayer->documentEntry());
-}
-
-void KisView::addPartLayer(KisGroupLayerSP tqparent, KisLayerSP above, const KoDocumentEntry& entry)
-{
- delete m_partHandler; // Only one at a time
- m_partHandler = new KisPartLayerHandler(this, entry, tqparent, above);
-
- disconnect(m_canvas, TQT_SIGNAL(sigGotButtonPressEvent(KisButtonPressEvent*)), this, 0);
- disconnect(m_canvas, TQT_SIGNAL(sigGotButtonReleaseEvent(KisButtonReleaseEvent*)), this, 0);
- disconnect(m_canvas, TQT_SIGNAL(sigGotMoveEvent(KisMoveEvent*)), this, 0);
- disconnect(m_canvas, TQT_SIGNAL(sigGotKeyPressEvent(TQKeyEvent*)), this, 0);
-
- connect(m_canvas, TQT_SIGNAL(sigGotButtonPressEvent(KisButtonPressEvent*)),
- m_partHandler, TQT_SLOT(gotButtonPressEvent(KisButtonPressEvent*)));
- connect(m_canvas, TQT_SIGNAL(sigGotButtonReleaseEvent(KisButtonReleaseEvent*)),
- m_partHandler, TQT_SLOT(gotButtonReleaseEvent(KisButtonReleaseEvent*)));
- connect(m_canvas, TQT_SIGNAL(sigGotMoveEvent(KisMoveEvent*)),
- m_partHandler, TQT_SLOT(gotMoveEvent(KisMoveEvent*)));
- connect(m_canvas, TQT_SIGNAL(sigGotKeyPressEvent(TQKeyEvent*)),
- m_partHandler, TQT_SLOT(gotKeyPressEvent(TQKeyEvent*)));
-
- connect(m_partHandler, TQT_SIGNAL(sigGotMoveEvent(KisMoveEvent*)),
- this, TQT_SLOT(canvasGotMoveEvent(KisMoveEvent*)));
- connect(m_partHandler, TQT_SIGNAL(sigGotKeyPressEvent(TQKeyEvent*)),
- this, TQT_SLOT(canvasGotKeyPressEvent(TQKeyEvent*)));
- connect(m_partHandler, TQT_SIGNAL(handlerDone()),
- this, TQT_SLOT(reconnectAfterPartInsert()));
-}
-
-void KisView::insertPart(const TQRect& viewRect, const KoDocumentEntry& entry,
- KisGroupLayerSP tqparent, KisLayerSP above) {
- KisImageSP img = currentImg();
- if (!img) return;
-
- KoDocument* doc = entry.createDoc(m_doc);
- if ( !doc )
- return;
-
- if ( !doc->showEmbedInitDialog(this) )
- return;
-
- TQRect rect = viewToWindow(viewRect);
-
- KisChildDoc * childDoc = m_doc->createChildDoc(rect, doc);
-
- KisPartLayerImpl* partLayer = new KisPartLayerImpl(img, childDoc);
- partLayer->setDocType(entry.service()->genericName());
- img->addLayer(partLayer, tqparent, above);
- m_doc->setModified(true);
-
- reconnectAfterPartInsert();
-}
-
-void KisView::reconnectAfterPartInsert() {
- connect(m_canvas, TQT_SIGNAL(sigGotButtonPressEvent(KisButtonPressEvent*)),
- this, TQT_SLOT(canvasGotButtonPressEvent(KisButtonPressEvent*)));
- connect(m_canvas, TQT_SIGNAL(sigGotButtonReleaseEvent(KisButtonReleaseEvent*)),
- this, TQT_SLOT(canvasGotButtonReleaseEvent(KisButtonReleaseEvent*)));
- connect(m_canvas, TQT_SIGNAL(sigGotMoveEvent(KisMoveEvent*)),
- this, TQT_SLOT(canvasGotMoveEvent(KisMoveEvent*)));
- connect(m_canvas, TQT_SIGNAL(sigGotKeyPressEvent(TQKeyEvent*)),
- this, TQT_SLOT(canvasGotKeyPressEvent(TQKeyEvent*)));
-
- delete m_partHandler;
- m_partHandler = 0;
-}
-
-void KisView::addAdjustmentLayer()
-{
- KisImageSP img = currentImg();
- if (!img) return;
-
- addAdjustmentLayer( img->activeLayer()->tqparent(), img->activeLayer() );
-}
-
-void KisView::addAdjustmentLayer(KisGroupLayerSP tqparent, KisLayerSP above)
-{
- Q_ASSERT(tqparent);
- Q_ASSERT(above);
-
- KisImageSP img = currentImg();
- if (!img) return;
-
- KisLayerSP l = img->activeLayer();
-
- KisPaintDeviceSP dev;
-
- // Argh! I hate having to cast, cast and cast again to see what kind of a layer I've got!
- KisPaintLayer * pl = dynamic_cast<KisPaintLayer*>(l.data());
- if (pl) {
- dev = pl->paintDevice();
- }
- else {
- KisGroupLayer * gl = dynamic_cast<KisGroupLayer*>(l.data());
- if (gl) {
- dev = gl->projection(img->bounds());
- }
- else {
- KisAdjustmentLayer * al = dynamic_cast<KisAdjustmentLayer*>(l.data());
- if (al) {
- dev = al->cachedPaintDevice();
- }
- else {
- return;
- }
- }
- }
-
- KisDlgAdjustmentLayer dlg(img, img->nextLayerName(), i18n("New Adjustment Layer"), this, "dlgadjustmentlayer");
- if (dlg.exec() == TQDialog::Accepted) {
- KisSelectionSP selection = 0;
- if (dev->hasSelection()) {
- selection = dev->selection();
- }
- KisFilterConfiguration * filter = dlg.filterConfiguration();
- TQString name = dlg.layerName();
-
- addAdjustmentLayer( tqparent, above, name, filter, selection);
-
- }
-}
-
-void KisView::addAdjustmentLayer(KisGroupLayerSP tqparent, KisLayerSP above, const TQString & name,
- KisFilterConfiguration * filter, KisSelectionSP selection)
-{
- Q_ASSERT(tqparent);
- Q_ASSERT(above);
- Q_ASSERT(filter);
-
- KisImageSP img = currentImg();
- if (!img) return;
-
- KisAdjustmentLayer * l = new KisAdjustmentLayer(img, name, filter, selection);
- img->addLayer(l, tqparent, above);
-}
-
-void KisView::slotChildActivated(bool a) {
- // It should be so that the only part (child) we can activate, is the current layer:
- if (currentImg() && currentImg()->activeLayer())
- {
- if (a) {
- currentImg()->activeLayer()->activate();
- } else {
- currentImg()->activeLayer()->deactivate();
- }
- }
-
- super::slotChildActivated(a);
-}
-
-void KisView::layerRemove()
-{
- KisImageSP img = currentImg();
-
- if (img) {
- KisLayerSP layer = img->activeLayer();
-
- if (layer) {
-
-
- img->removeLayer(layer);
-
- if (layer->tqparent())
- layer->tqparent()->setDirty(layer->extent());
-
- updateCanvas();
- layerUpdateGUI(img->activeLayer() != 0);
- }
- }
-}
-
-void KisView::layerDuplicate()
-{
- KisImageSP img = currentImg();
-
- if (!img)
- return;
-
- KisLayerSP active = img->activeLayer();
-
- if (!active)
- return;
-
- KisLayerSP dup = active->clone();
- dup->setName(i18n("Duplicate of '%1'").tqarg(active->name()));
- img->addLayer(dup, active->tqparent().data(), active);
- if (dup) {
- img->activate( dup );
- updateCanvas();
- } else {
- KMessageBox::error(this, i18n("Could not add layer to image."), i18n("Layer Error"));
- }
-}
-
-void KisView::layerRaise()
-{
- KisImageSP img = currentImg();
- KisLayerSP layer;
-
- if (!img)
- return;
-
- layer = img->activeLayer();
-
- img->raiseLayer(layer);
-}
-
-void KisView::layerLower()
-{
- KisImageSP img = currentImg();
- KisLayerSP layer;
-
- if (!img)
- return;
-
- layer = img->activeLayer();
-
- img->lowerLayer(layer);
-}
-
-void KisView::layerFront()
-{
- KisImageSP img = currentImg();
- KisLayerSP layer;
-
- if (!img)
- return;
-
- layer = img->activeLayer();
- img->toTop(layer);
-}
-
-void KisView::layerBack()
-{
- KisImageSP img = currentImg();
- if (!img) return;
-
- KisLayerSP layer;
-
- layer = img->activeLayer();
- img->toBottom(layer);
-}
-
-void KisView::layersUpdated()
-{
- KisImageSP img = currentImg();
- if (!img) return;
-
- KisLayerSP layer = img->activeLayer();
-
- layerUpdateGUI(img && layer);
-
- notifyObservers();
-}
-
-void KisView::layerToggleVisible()
-{
- KisImageSP img = currentImg();
- if (!img) return;
-
- KisLayerSP layer = img->activeLayer();
- if (!layer) return;
-
- layer->setVisible(!layer->visible());
-}
-
-void KisView::layerToggleLocked()
-{
- KisImageSP img = currentImg();
- if (!img) return;
-
- KisLayerSP layer = img->activeLayer();
- if (!layer) return;
-
- layer->setLocked(!layer->locked());
-}
-
-void KisView::actLayerVisChanged(int show)
-{
- m_actLayerVis = (show != 0);
-}
-
-bool KisView::activeLayerHasSelection()
-{
- return m_image && m_image->activeDevice() && m_image->activeDevice()->hasSelection();
-}
-
-void KisView::scrollH(int value)
-{
- m_hRuler->updateVisibleArea(value, 0);
-
- int xShift = m_scrollX - value;
- m_scrollX = value;
-
- if (m_canvas->isUpdatesEnabled()) {
- if (xShift > 0) {
-
- if (m_canvas->isOpenGLCanvas()) {
- paintOpenGLView(TQRect(0, 0, m_canvas->width(), m_canvas->height()));
- } else {
- TQRect drawRect(0, 0, xShift, m_canvasPixmap.height());
-
- bitBlt(&m_canvasPixmap, xShift, 0, &m_canvasPixmap, 0, 0, m_canvasPixmap.width() - xShift, m_canvasPixmap.height());
-
- updateTQPaintDeviceCanvas(viewToWindow(drawRect));
- m_canvas->tqrepaint();
- }
- } else if (xShift < 0) {
-
- TQRect drawRect(m_canvasPixmap.width() + xShift, 0, -xShift, m_canvasPixmap.height());
-
- if (m_canvas->isOpenGLCanvas()) {
- paintOpenGLView(TQRect(0, 0, m_canvas->width(), m_canvas->height()));
- } else {
- bitBlt(&m_canvasPixmap, 0, 0, &m_canvasPixmap, -xShift, 0, m_canvasPixmap.width() + xShift, m_canvasPixmap.height());
-
- updateTQPaintDeviceCanvas(viewToWindow(drawRect));
- m_canvas->tqrepaint();
- }
- }
- if (m_oldTool) {
- KisCanvasPainter gc(m_canvas);
- m_oldTool->paint(gc);
- }
- }
-
- if (xShift != 0) {
- // XXX do sth with the childframe or so
- }
- emit viewTransformationsChanged();
-}
-
-void KisView::scrollV(int value)
-{
- m_vRuler->updateVisibleArea(0, value);
-
- int yShift = m_scrollY - value;
- m_scrollY = value;
-
- if (m_canvas->isUpdatesEnabled()) {
- if (yShift > 0) {
-
- if (m_canvas->isOpenGLCanvas()) {
- paintOpenGLView(TQRect(0, 0, m_canvas->width(), m_canvas->height()));
- } else {
- TQRect drawRect(0, 0, m_canvasPixmap.width(), yShift);
-
- bitBlt(&m_canvasPixmap, 0, yShift, &m_canvasPixmap, 0, 0, m_canvasPixmap.width(), m_canvasPixmap.height() - yShift);
-
- updateTQPaintDeviceCanvas(viewToWindow(drawRect));
- m_canvas->tqrepaint();
- }
- } else if (yShift < 0) {
-
- if (m_canvas->isOpenGLCanvas()) {
- paintOpenGLView(TQRect(0, 0, m_canvas->width(), m_canvas->height()));
- } else {
- TQRect drawRect(0, m_canvasPixmap.height() + yShift, m_canvasPixmap.width(), -yShift);
-
- bitBlt(&m_canvasPixmap, 0, 0, &m_canvasPixmap, 0, -yShift, m_canvasPixmap.width(), m_canvasPixmap.height() + yShift);
-
- updateTQPaintDeviceCanvas(viewToWindow(drawRect));
- m_canvas->tqrepaint();
- }
- }
- if (m_oldTool) {
- KisCanvasPainter gc(m_canvas);
- m_oldTool->paint(gc);
- }
- }
-
- if (yShift != 0) {
- // XXX do sth with the childframe or so
- }
- emit viewTransformationsChanged();
-}
-
-void KisView::setupCanvas()
-{
- m_canvas = new KisCanvas(this, "kis_canvas");
- m_canvas->setFocusPolicy( TQ_StrongFocus );
- TQObject::connect(m_canvas, TQT_SIGNAL(sigGotButtonPressEvent(KisButtonPressEvent*)), this, TQT_SLOT(canvasGotButtonPressEvent(KisButtonPressEvent*)));
- TQObject::connect(m_canvas, TQT_SIGNAL(sigGotButtonReleaseEvent(KisButtonReleaseEvent*)), this, TQT_SLOT(canvasGotButtonReleaseEvent(KisButtonReleaseEvent*)));
- TQObject::connect(m_canvas, TQT_SIGNAL(sigGotDoubleClickEvent(KisDoubleClickEvent*)), this, TQT_SLOT(canvasGotDoubleClickEvent(KisDoubleClickEvent*)));
- TQObject::connect(m_canvas, TQT_SIGNAL(sigGotMoveEvent(KisMoveEvent*)), this, TQT_SLOT(canvasGotMoveEvent(KisMoveEvent*)));
- TQObject::connect(m_canvas, TQT_SIGNAL(sigGotPaintEvent(TQPaintEvent*)), this, TQT_SLOT(canvasGotPaintEvent(TQPaintEvent*)));
- TQObject::connect(m_canvas, TQT_SIGNAL(sigGotEnterEvent(TQEvent*)), this, TQT_SLOT(canvasGotEnterEvent(TQEvent*)));
- TQObject::connect(m_canvas, TQT_SIGNAL(sigGotLeaveEvent(TQEvent*)), this, TQT_SLOT(canvasGotLeaveEvent(TQEvent*)));
- TQObject::connect(m_canvas, TQT_SIGNAL(sigGotMouseWheelEvent(TQWheelEvent*)), this, TQT_SLOT(canvasGotMouseWheelEvent(TQWheelEvent*)));
- TQObject::connect(m_canvas, TQT_SIGNAL(sigGotKeyPressEvent(TQKeyEvent*)), this, TQT_SLOT(canvasGotKeyPressEvent(TQKeyEvent*)));
- TQObject::connect(m_canvas, TQT_SIGNAL(sigGotKeyReleaseEvent(TQKeyEvent*)), this, TQT_SLOT(canvasGotKeyReleaseEvent(TQKeyEvent*)));
- TQObject::connect(m_canvas, TQT_SIGNAL(sigGotDragEnterEvent(TQDragEnterEvent*)), this, TQT_SLOT(canvasGotDragEnterEvent(TQDragEnterEvent*)));
- TQObject::connect(m_canvas, TQT_SIGNAL(sigGotDropEvent(TQDropEvent*)), this, TQT_SLOT(canvasGotDropEvent(TQDropEvent*)));
-}
-
-void KisView::connectCurrentImg()
-{
- if (m_image) {
- connect(m_image, TQT_SIGNAL(sigActiveSelectionChanged(KisImageSP)), m_selectionManager, TQT_SLOT(imgSelectionChanged(KisImageSP)));
- connect(m_image, TQT_SIGNAL(sigActiveSelectionChanged(KisImageSP)), this, TQT_SLOT(updateCanvas()));
- connect(m_image, TQT_SIGNAL(sigColorSpaceChanged(KisColorSpace *)), this, TQT_SLOT(updateStatusBarProfileLabel()));
- connect(m_image, TQT_SIGNAL(sigProfileChanged(KisProfile * )), TQT_SLOT(profileChanged(KisProfile * )));
-
- connect(m_image, TQT_SIGNAL(sigLayersChanged(KisGroupLayerSP)), TQT_SLOT(layersUpdated()));
- connect(m_image, TQT_SIGNAL(sigMaskInfoChanged()), TQT_SLOT(tqmaskUpdated()));
- connect(m_image, TQT_SIGNAL(sigLayerAdded(KisLayerSP)), TQT_SLOT(layersUpdated()));
- connect(m_image, TQT_SIGNAL(sigLayerRemoved(KisLayerSP, KisGroupLayerSP, KisLayerSP)), TQT_SLOT(layersUpdated()));
- connect(m_image, TQT_SIGNAL(sigLayerMoved(KisLayerSP, KisGroupLayerSP, KisLayerSP)), TQT_SLOT(layersUpdated()));
- connect(m_image, TQT_SIGNAL(sigLayerActivated(KisLayerSP)), TQT_SLOT(layersUpdated()));
- connect(m_image, TQT_SIGNAL(sigLayerActivated(KisLayerSP)), TQT_SLOT(updateCanvas()));
- connect(m_image, TQT_SIGNAL(sigLayerPropertiesChanged(KisLayerSP)), TQT_SLOT(layersUpdated()));
-
- KisConnectPartLayerVisitor v(m_image, this, true);
- m_image->rootLayer()->accept(v);
- connect(m_image, TQT_SIGNAL(sigLayerAdded(KisLayerSP)),
- TQT_SLOT(handlePartLayerAdded(KisLayerSP)));
-
- tqmaskUpdated();
-#ifdef HAVE_GL
- if (m_OpenGLImageContext != 0) {
- connect(m_OpenGLImageContext, TQT_SIGNAL(sigImageUpdated(TQRect)), TQT_SLOT(slotOpenGLImageUpdated(TQRect)));
- connect(m_OpenGLImageContext, TQT_SIGNAL(sigSizeChanged(TQ_INT32, TQ_INT32)), TQT_SLOT(slotImageSizeChanged(TQ_INT32, TQ_INT32)));
- } else
-#endif
- {
- connect(m_image, TQT_SIGNAL(sigImageUpdated(TQRect)), TQT_SLOT(imgUpdated(TQRect)));
- connect(m_image, TQT_SIGNAL(sigSizeChanged(TQ_INT32, TQ_INT32)), TQT_SLOT(slotImageSizeChanged(TQ_INT32, TQ_INT32)));
- }
- }
-
- m_layerBox->setImage(m_image);
- m_birdEyeBox->setImage(m_image);
-}
-
-void KisView::disconnectCurrentImg()
-{
- if (m_image) {
- m_image->disconnect(this);
- m_layerBox->setImage(0);
- m_birdEyeBox->setImage(0);
-
- KisConnectPartLayerVisitor v(m_image, this, false);
- m_image->rootLayer()->accept(v);
- }
-
-#ifdef HAVE_GL
- if (m_OpenGLImageContext != 0) {
- m_OpenGLImageContext->disconnect(this);
- }
-#endif
-}
-
-void KisView::handlePartLayerAdded(KisLayerSP layer)
-{
- KisPartLayer* l = dynamic_cast<KisPartLayer*>(layer.data());
- if (!l)
- return;
-
- connect(this, TQT_SIGNAL(childActivated(KoDocumentChild*)),
- layer, TQT_SLOT(childActivated(KoDocumentChild*)));
-}
-
-void KisView::imgUpdated(TQRect rc)
-{
- updateCanvas(rc);
-}
-
-void KisView::slotOpenGLImageUpdated(TQRect rc)
-{
- paintOpenGLView(windowToView(rc));
-}
-
-void KisView::profileChanged(KisProfile * /*profile*/)
-{
- updateStatusBarProfileLabel();
-}
-
-void KisView::slotImageSizeChanged(TQ_INT32 /*w*/, TQ_INT32 /*h*/)
-{
- resizeEvent(0);
- refreshKisCanvas();
-}
-
-void KisView::resizeCurrentImage(TQ_INT32 w, TQ_INT32 h, bool cropLayers)
-{
- if (!currentImg()) return;
-
- currentImg()->resize(w, h, cropLayers);
- m_doc->setModified(true);
- layersUpdated();
-}
-
-void KisView::scaleCurrentImage(double sx, double sy, KisFilterStrategy *filterStrategy)
-{
- if (!currentImg()) return;
- currentImg()->scale(sx, sy, m_progress, filterStrategy);
- m_doc->setModified(true);
- layersUpdated();
-}
-
-void KisView::rotateCurrentImage(double radians)
-{
- if (!currentImg()) return;
- currentImg()->rotate(radians, m_progress);
- m_doc->setModified(true);
- layersUpdated();
-}
-
-void KisView::shearCurrentImage(double angleX, double angleY)
-{
- if (!currentImg()) return;
- currentImg()->shear(angleX, angleY, m_progress);
- m_doc->setModified(true);
- layersUpdated();
-}
-
-
-TQPoint KisView::viewToWindow(const TQPoint& pt)
-{
- TQPoint converted;
-
- converted.rx() = static_cast<int>((pt.x() + horzValue()) / zoom());
- converted.ry() = static_cast<int>((pt.y() + vertValue()) / zoom());
-
- return converted;
-}
-
-TQPoint KisView::viewToWindow(const TQPoint& pt) const
-{
- TQPoint converted;
-
- converted.rx() = static_cast<int>((pt.x() + horzValue()) / zoom());
- converted.ry() = static_cast<int>((pt.y() + vertValue()) / zoom());
-
- return converted;
-}
-
-KisPoint KisView::viewToWindow(const KisPoint& pt)
-{
- KisPoint converted;
-
- converted.setX((pt.x() + horzValue()) / zoom());
- converted.setY((pt.y() + vertValue()) / zoom());
-
- return converted;
-}
-
-TQRect KisView::viewToWindow(const TQRect& rc)
-{
- TQRect r;
-
- r.setTopLeft(viewToWindow(rc.topLeft()));
- r.setRight((int)(ceil((rc.right() + 1.0 + horzValue()) / zoom()) - 1));
- r.setBottom((int)(ceil((rc.bottom() + 1.0 + vertValue()) / zoom()) - 1));
-
- return r;
-}
-
-KisRect KisView::viewToWindow(const KisRect& rc)
-{
- KisRect r;
- KisPoint p = viewToWindow(KisPoint(rc.x(), rc.y()));
- r.setX(p.x());
- r.setY(p.y());
- r.setWidth(rc.width() / zoom());
- r.setHeight(rc.height() / zoom());
-
- return r;
-}
-
-void KisView::viewToWindow(TQ_INT32 *x, TQ_INT32 *y)
-{
- if (x && y) {
- TQPoint p = viewToWindow(TQPoint(*x, *y));
- *x = p.x();
- *y = p.y();
- }
-}
-
-TQPoint KisView::windowToView(const TQPoint& pt)
-{
- TQPoint p;
- p.setX(static_cast<int>(pt.x() * zoom() - horzValue()));
- p.setY(static_cast<int>(pt.y() * zoom() - vertValue()));
-
- return p;
-}
-
-TQPoint KisView::windowToView(const TQPoint& pt) const
-{
- TQPoint p;
- p.setX(static_cast<int>(pt.x() * zoom() - horzValue()));
- p.setY(static_cast<int>(pt.y() * zoom() - vertValue()));
-
- return p;
-}
-
-KisPoint KisView::windowToView(const KisPoint& pt)
-{
- KisPoint p;
- p.setX(pt.x() * zoom() - horzValue());
- p.setY(pt.y() * zoom() - vertValue());
-
- return p;
-}
-
-TQRect KisView::windowToView(const TQRect& rc)
-{
- TQRect r;
-
- r.setTopLeft(windowToView(rc.topLeft()));
- r.setRight((int)(ceil((rc.right() + 1.0) * zoom()) - horzValue() - 1));
- r.setBottom((int)(ceil((rc.bottom() + 1.0) * zoom()) - vertValue() - 1));
-
- return r;
-}
-
-KisRect KisView::windowToView(const KisRect& rc)
-{
- KisRect r;
- KisPoint p = windowToView(KisPoint(rc.x(), rc.y()));
- r.setX(p.x());
- r.setY(p.y());
- r.setWidth(rc.width() * zoom());
- r.setHeight(rc.height() * zoom());
-
- return r;
-}
-
-void KisView::windowToView(TQ_INT32 *x, TQ_INT32 *y)
-{
- if (x && y) {
- TQPoint p = windowToView(TQPoint(*x, *y));
- *x = p.x();
- *y = p.y();
- }
-}
-
-void KisView::guiActivateEvent(KParts::GUIActivateEvent *event)
-{
- Q_ASSERT(event);
-
- if (event->activated()) {
-
- KStatusBar *sb = statusBar();
- if (sb) {
- sb->show();
- }
-
- if (!m_guiActivateEventReceived) {
- m_guiActivateEventReceived = true;
- startInitialZoomTimerIfReady();
- }
- }
-
- super::guiActivateEvent(event);
-}
-
-bool KisView::eventFilter(TQObject *o, TQEvent *e)
-{
- Q_ASSERT(o);
- Q_ASSERT(e);
-
- switch (e->type()) {
- case TQEvent::TabletMove:
- case TQEvent::TabletPress:
- case TQEvent::TabletRelease:
- {
- TQTabletEvent *te = static_cast<TQTabletEvent *>(e);
- KisInputDevice device;
-
- switch (te->device()) {
- default:
- case TQTabletEvent::Stylus:
- case TQTabletEvent::NoDevice:
- device = KisInputDevice::stylus();
- break;
- case TQTabletEvent::Puck:
- device = KisInputDevice::puck();
- break;
- case TQTabletEvent::Eraser:
- device = KisInputDevice::eraser();
- break;
- }
-
- setInputDevice(device);
-
- // We ignore device change due to mouse events for a short duration
- // after a tablet event, since these are almost certainly mouse events
- // sent to tqreceivers that don't accept the tablet event.
- m_tabletEventTimer.start();
- break;
- }
- case TQEvent::MouseButtonPress:
- case TQEvent::MouseMove:
- case TQEvent::MouseButtonRelease:
- {
-#ifdef EXTENDED_X11_TABLET_SUPPORT
- KisInputDevice device = KisCanvasWidget::findActiveInputDevice();
-
- if (device != KisInputDevice::mouse()) {
- setInputDevice(device);
- m_tabletEventTimer.start();
- } else
-#endif
- {
- if (currentInputDevice() != KisInputDevice::mouse() && m_tabletEventTimer.elapsed() > MOUSE_CHANGE_EVENT_DELAY) {
- setInputDevice(KisInputDevice::mouse());
- }
- }
- break;
- }
- case TQEvent::KeyPress:
- case TQEvent::KeyRelease:
- {
- if (m_canvas->cursorIsOverCanvas()) {
- m_canvas->handleKeyEvent(e);
- return true;
- }
- break;
- }
-#if 0
- // This code is unnecessary now that there's an application event filter
- // This eventFilter is called for all widgets already, no need to install event filters multiple times
- // Even worse: with multiple views, they would all install event filters on each other's widgets,
- // due to the qapp event filter triggering in all views!
- case TQEvent::ChildInserted:
- {
- TQChildEvent *childEvent = static_cast<TQChildEvent *>(e);
- TQObject *child = childEvent->child();
- if ( child->isWidgetType() ) {
-
- child->installEventFilter(this);
-
- TQObjectList *objectList = child->queryList(TQWIDGET_OBJECT_NAME_STRING);
- TQObjectListIt it(*objectList);
- TQObject *obj;
- while ((obj = it.current()) != 0) {
- obj->installEventFilter(this);
- ++it;
- }
- delete objectList;
- }
- }
-#endif
- default:
- // Ignore
- break;
- }
-
-#if 0
- if ((o == m_hRuler || o == m_vRuler) && (e->type() == TQEvent::MouseMove || e->type() == TQEvent::MouseButtonRelease)) {
- TQMouseEvent *me = dynamic_cast<TQMouseEvent*>(e);
- TQPoint pt = mapFromGlobal(me->globalPos());
- KisImageSP img = currentImg();
- KisGuideMgr *mgr;
-
- if (!img)
- return super::eventFilter(o, e);
-
- mgr = img->guides();
-
- if (e->type() == TQEvent::MouseMove && (me->state() & Qt::LeftButton)) {
- bool flag = tqgeometry().tqcontains(pt);
- KisGuideSP gd;
-
- if (m_currentGuide == 0 && flag) {
- // No guide is being edited and moving mouse over the canvas.
- // Create a new guide.
- enterEvent(0);
- eraseGuides();
- mgr->unselectAll();
-
- if (o == m_vRuler)
- gd = mgr->add((pt.x() - m_vRuler->width() + horzValue()) / zoom(), Qt::Vertical);
- else
- gd = mgr->add((pt.y() - m_hRuler->height() + vertValue()) / zoom(), Qt::Horizontal);
-
- m_currentGuide = gd;
- mgr->select(gd);
- m_lastGuidePoint = mapToScreen(pt);
- } else if (m_currentGuide) {
- if (flag) {
- // moved an existing guide.
- KisMoveEvent kme(currentInputDevice(), pt, me->globalPos(), PRESSURE_DEFAULT, 0, 0, me->state());
- canvasGotMoveEvent(&kme);
- } else {
- // moved a guide out of the frame, destroy it
- leaveEvent(0);
- eraseGuides();
- mgr->remove(m_currentGuide);
- paintGuides();
- m_currentGuide = 0;
- }
- }
- } else if (e->type() == TQEvent::MouseButtonRelease && m_currentGuide) {
- eraseGuides();
- mgr->unselect(m_currentGuide);
- paintGuides();
- m_currentGuide = 0;
- enterEvent(0);
- KisMoveEvent kme(currentInputDevice(), pt, me->globalPos(), PRESSURE_DEFAULT, 0, 0, Qt::NoButton);
- canvasGotMoveEvent(&kme);
- }
- }
-#endif
-
- return super::eventFilter(o, e);
-}
-
-#if 0
-void KisView::eraseGuides()
-{
- KisImageSP img = currentImg();
-
- if (img) {
- KisGuideMgr *mgr = img->guides();
-
- if (mgr)
- mgr->erase(&m_canvasPixmap, this, horzValue(), vertValue(), zoom());
- }
-}
-
-void KisView::paintGuides()
-{
- KisImageSP img = currentImg();
-
- if (img) {
- KisGuideMgr *mgr = img->guides();
-
- if (mgr)
- mgr->paint(&m_canvasPixmap, this, horzValue(), vertValue(), zoom());
- }
-}
-
-void KisView::updateGuides()
-{
- eraseGuides();
- paintGuides();
-}
-#endif
-
-//void KisView::viewGuideLines()
-//{
-//}
-
-TQPoint KisView::mapToScreen(const TQPoint& pt)
-{
- TQPoint converted;
-
- converted.rx() = pt.x() + horzValue();
- converted.ry() = pt.y() + vertValue();
- return converted;
-}
-
-void KisView::attach(KisCanvasObserver *observer)
-{
- Q_ASSERT(observer);
- if (observer)
- m_observers.push_back(observer);
-}
-
-void KisView::detach(KisCanvasObserver *observer)
-{
- Q_ASSERT(observer);
- if (observer) {
- vKisCanvasObserver_it it = std::tqfind(m_observers.begin(), m_observers.end(), observer);
-
- if (it != m_observers.end())
- m_observers.erase(it);
- }
-}
-
-void KisView::notifyObservers()
-{
- for (vKisCanvasObserver_it it = m_observers.begin(); it != m_observers.end(); ++it) {
- (*it)->update(this);
- }
-}
-
-KisImageSP KisView::currentImg() const
-{
- return m_image;
-}
-
-void KisView::setCurrentImage(KisImageSP image)
-{
- if(!image) return;
-
- disconnectCurrentImg();
- m_image = image;
-
- KisConfig cfg;
-
-#ifdef HAVE_GL
- if (cfg.useOpenGL()) {
- m_OpenGLImageContext = KisOpenGLImageContext::getImageContext(image, monitorProfile());
- m_canvas->createOpenGLCanvas(m_OpenGLImageContext->sharedContextWidget());
- }
-#endif
- connectCurrentImg();
- m_layerBox->setImage(currentImg());
-
- zoomAroundPoint(0, 0, 1.0);
-
- if (!currentImg())
- layersUpdated();
-
- imgUpdateGUI();
-
- image->blockSignals(false);
-}
-
-KisColor KisView::bgColor() const
-{
- return m_bg;
-}
-
-KisColor KisView::fgColor() const
-{
- return m_fg;
-}
-
-KisBrush *KisView::currentBrush() const
-{
- return m_brush;
-}
-
-KisPattern *KisView::currentPattern() const
-{
- return m_pattern;
-}
-
-KisGradient *KisView::currentGradient() const
-{
- return m_gradient;
-}
-
-KisID KisView::currentPaintop() const
-{
- return m_paintop;
-}
-
-const KisPaintOpSettings *KisView::currentPaintopSettings() const
-{
- return m_paintopSettings;
-}
-
-double KisView::zoomFactor() const
-{
- return zoom();
-}
-
-KisUndoAdapter *KisView::undoAdapter() const
-{
- return m_adapter;
-}
-
-KisCanvasController *KisView::canvasController() const
-{
- return const_cast<KisCanvasController*>(static_cast<const KisCanvasController*>(this));
-}
-
-KisToolControllerInterface *KisView::toolController() const
-{
- return const_cast<KisToolControllerInterface*>(static_cast<const KisToolControllerInterface*>(m_toolManager));
-}
-
-KisDoc *KisView::document() const
-{
- return m_doc;
-}
-
-KisProgressDisplayInterface *KisView::progressDisplay() const
-{
- return m_progress;
-}
-
-TQCursor KisView::setCanvasCursor(const TQCursor & cursor)
-{
- TQCursor oldCursor = m_canvas->cursor();
- TQCursor newCursor;
-
- KisConfig cfg;
-
- switch (cfg.cursorStyle()) {
- case CURSOR_STYLE_TOOLICON:
- newCursor = cursor;
- break;
- case CURSOR_STYLE_CROSSHAIR:
- newCursor = KisCursor::crossCursor();
- break;
- case CURSOR_STYLE_POINTER:
- newCursor = KisCursor::arrowCursor();
- break;
- case CURSOR_STYLE_OUTLINE:
- newCursor = cursor;
- break;
- default:
- newCursor = cursor;
- }
-
- m_canvas->setCursor(newCursor);
- return oldCursor;
-}
-
-float KisView::HDRExposure() const
-{
- return m_HDRExposure;
-}
-
-void KisView::setHDRExposure(float exposure)
-{
- if (exposure != m_HDRExposure) {
- m_HDRExposure = exposure;
- notifyObservers();
- updateCanvas();
- }
-}
-
-void KisView::createDockers()
-{
-
- m_birdEyeBox = new KisBirdEyeBox(this);
- m_birdEyeBox->setCaption(i18n("Overview"));
- m_paletteManager->addWidget( m_birdEyeBox, "birdeyebox", krita::CONTROL_PALETTE);
-
- m_hsvwidget = new KoHSVWidget(this, "hsv");
- m_hsvwidget->setCaption(i18n("HSV"));
-
- connect(m_hsvwidget, TQT_SIGNAL(sigFgColorChanged(const TQColor &)), this, TQT_SLOT(slotSetFGTQColor(const TQColor &)));
- connect(m_hsvwidget, TQT_SIGNAL(sigBgColorChanged(const TQColor &)), this, TQT_SLOT(slotSetBGTQColor(const TQColor &)));
- connect(this, TQT_SIGNAL(sigFGTQColorChanged(const TQColor &)), m_hsvwidget, TQT_SLOT(setFgColor(const TQColor &)));
- connect(this, TQT_SIGNAL(sigBGTQColorChanged(const TQColor &)), m_hsvwidget, TQT_SLOT(setBgColor(const TQColor &)));
- m_paletteManager->addWidget( m_hsvwidget, "hsvwidget", krita::COLORBOX, 0, PALETTE_DOCKER, true);
-
- m_rgbwidget = new KoRGBWidget(this, "rgb");
- m_rgbwidget->setCaption(i18n("RGB"));
- connect(m_rgbwidget, TQT_SIGNAL(sigFgColorChanged(const TQColor &)), this, TQT_SLOT(slotSetFGTQColor(const TQColor &)));
- connect(m_rgbwidget, TQT_SIGNAL(sigBgColorChanged(const TQColor &)), this, TQT_SLOT(slotSetBGTQColor(const TQColor &)));
- connect(this, TQT_SIGNAL(sigFGTQColorChanged(const TQColor &)), m_rgbwidget, TQT_SLOT(setFgColor(const TQColor &)));
- connect(this, TQT_SIGNAL(sigBGTQColorChanged(const TQColor &)), m_rgbwidget, TQT_SLOT(setBgColor(const TQColor &)));
- m_paletteManager->addWidget( m_rgbwidget, "rgbwidget", krita::COLORBOX);
-
- m_graywidget = new KoGrayWidget(this, "gray");
- m_graywidget->setCaption(i18n("Gray"));
- connect(m_graywidget, TQT_SIGNAL(sigFgColorChanged(const TQColor &)), this, TQT_SLOT(slotSetFGTQColor(const TQColor &)));
- connect(m_graywidget, TQT_SIGNAL(sigBgColorChanged(const TQColor &)), this, TQT_SLOT(slotSetBGTQColor(const TQColor &)));
- connect(this, TQT_SIGNAL(sigFGTQColorChanged(const TQColor &)), m_graywidget, TQT_SLOT(setFgColor(const TQColor &)));
- connect(this, TQT_SIGNAL(sigBGTQColorChanged(const TQColor &)), m_graywidget, TQT_SLOT(setBgColor(const TQColor &)));
- m_paletteManager->addWidget( m_graywidget, "graywidget", krita::COLORBOX);
-
- //make sure the color chooser get right default values
- emit sigFGTQColorChanged(m_fg.toTQColor());
- emit sigBGTQColorChanged(m_bg.toTQColor());
-
- m_palettewidget = new KisPaletteWidget(this);
- m_palettewidget->setCaption(i18n("Palettes"));
- connect(m_palettewidget, TQT_SIGNAL(colorSelected(const TQColor &)),
- this, TQT_SLOT(slotSetFGTQColor(const TQColor &)));
- // No BGColor or reverse slotFGChanged->palette connections, since that's not useful here
-
- KisResourceServerBase* rServer;
- rServer = KisResourceServerRegistry::instance()->get("PaletteServer");
- TQValueList<KisResource*> resources = rServer->resources();
- TQValueList<KisResource*>::iterator it;
- for ( it = resources.begin(); it != resources.end(); ++it ) {
- m_palettewidget->slotAddPalette( *it );
- }
- connect(m_palettewidget, TQT_SIGNAL(colorSelected(const KisColor &)), this, TQT_SLOT(slotSetFGColor(const KisColor &)));
- m_paletteManager->addWidget( m_palettewidget, "palettewidget", krita::COLORBOX, 10, PALETTE_DOCKER, true);
-}
-
-TQPoint KisView::applyViewTransformations(const TQPoint& p) const {
- TQPoint point(windowToView(p));
-
- if (m_hRuler->isShown())
- point.ry() += m_hRuler->height();
- if (m_vRuler -> isShown())
- point.rx() += m_vRuler->width();
-
- return point;
-}
-
-TQPoint KisView::reverseViewTransformations(const TQPoint& p) const {
- // Since we now zoom ourselves, the only thing super::~ does is nothing anymore.
- // Hence, zoom ourselves, like super would
- // viewToWindow doesn't take the rulers into account, do that ourselves
- TQPoint point(p);
- if (m_hRuler -> isShown())
- point.ry() -= m_hRuler -> height();
- if (m_vRuler -> isShown())
- point.rx() -= m_vRuler -> width();
-
- return viewToWindow(point);
-}
-
-void KisView::canvasAddChild(KoViewChild *child) {
- super::canvasAddChild(child);
- connect(this, TQT_SIGNAL(viewTransformationsChanged()), child, TQT_SLOT(reposition()));
- m_vScroll->raise();
- m_hScroll->raise();
- m_vScroll->raise();
- m_hRuler->raise();
- m_vRuler->raise();
-}
-
-void KisView::slotLoadingFinished()
-{
- // Set the current image for real now everything is ready to go.
- setCurrentImage(document()->currentImage());
- m_paletteManager->showWidget( "layerbox" );
- m_canvas->show();
- disconnect(document(), TQT_SIGNAL(loadingFinished()), this, TQT_SLOT(slotLoadingFinished()));
-
- m_imageLoaded = true;
- startInitialZoomTimerIfReady();
-}
-
-void KisView::startInitialZoomTimerIfReady()
-{
- if (m_imageLoaded && m_showEventReceived && m_guiActivateEventReceived) {
- m_initialZoomTimer.start(250, true);
- }
-}
-
-void KisView::slotInitialZoomTimeout()
-{
- Q_ASSERT(!m_paintViewEnabled);
-
- m_paintViewEnabled = true;
- setInitialZoomLevel();
-}
-
-
-void KisView::slotCreateMask() {
- KisPaintLayer* layer = dynamic_cast<KisPaintLayer*>(currentImg()->activeLayer().data());
- if (!layer)
- return;
-
- KNamedCommand *cmd = layer->createMaskCommand();
- cmd->execute();
- if (undoAdapter() && undoAdapter()->undo()) {
- undoAdapter()->addCommand(cmd);
- }
-}
-
-void KisView::slotMaskFromSelection() {
- KisPaintLayer* layer = dynamic_cast<KisPaintLayer*>(currentImg()->activeLayer().data());
- if (!layer)
- return;
-
- KNamedCommand *cmd = layer->tqmaskFromSelectionCommand();
- cmd->execute();
- if (undoAdapter() && undoAdapter()->undo()) {
- undoAdapter()->addCommand(cmd);
- }
-}
-
-void KisView::slotMaskToSelection() {
- KisPaintLayer* layer = dynamic_cast<KisPaintLayer*>(currentImg()->activeLayer().data());
- if (!layer)
- return;
-
- KNamedCommand *cmd = layer->tqmaskToSelectionCommand();
- cmd->execute();
- if (undoAdapter() && undoAdapter()->undo()) {
- undoAdapter()->addCommand(cmd);
- }
-}
-
-void KisView::slotApplyMask() {
- KisPaintLayer* layer = dynamic_cast<KisPaintLayer*>(currentImg()->activeLayer().data());
- if (!layer)
- return;
-
- KNamedCommand *cmd = layer->applyMaskCommand();
- cmd->execute();
- if (undoAdapter() && undoAdapter()->undo()) {
- undoAdapter()->addCommand(cmd);
- }
-}
-
-void KisView::slotRemoveMask() {
- KisPaintLayer* layer = dynamic_cast<KisPaintLayer*>(currentImg()->activeLayer().data());
- if (!layer)
- return;
-
- KNamedCommand *cmd = layer->removeMaskCommand();
- cmd->execute();
- if (undoAdapter() && undoAdapter()->undo()) {
- undoAdapter()->addCommand(cmd);
- }
-}
-
-void KisView::slotEditMask() {
- KisPaintLayer* layer = dynamic_cast<KisPaintLayer*>(currentImg()->activeLayer().data());
- if (!layer)
- return;
-
- layer->setEditMask(m_editMask->isChecked());
-}
-
-void KisView::slotShowMask() {
- KisPaintLayer* layer = dynamic_cast<KisPaintLayer*>(currentImg()->activeLayer().data());
- if (!layer)
- return;
-
- layer->setRenderMask(m_showMask->isChecked());
-}
-
-void KisView::tqmaskUpdated() {
- KisPaintLayer* layer = dynamic_cast<KisPaintLayer*>(currentImg()->activeLayer().data());
- if (!layer) {
- m_createMask->setEnabled(false);
- m_applyMask->setEnabled(false);
- m_removeMask->setEnabled(false);
- m_editMask->setEnabled(false);
- m_showMask->setEnabled(false);
- return;
- }
- m_createMask->setEnabled(!layer->hasMask());
- m_tqmaskFromSelection->setEnabled(true); // Perhaps also update this to false when no selection?
- m_tqmaskToSelection->setEnabled(layer->hasMask());
- m_applyMask->setEnabled(layer->hasMask());
- m_removeMask->setEnabled(layer->hasMask());
-
- m_editMask->setEnabled(layer->hasMask());
- m_editMask->setChecked(layer->editMask());
- m_showMask->setEnabled(layer->hasMask());
- m_showMask->setChecked(layer->renderMask());
-}
-
-#include "kis_view.moc"
-