summaryrefslogtreecommitdiffstats
path: root/chalk/ui/kis_view.h
diff options
context:
space:
mode:
Diffstat (limited to 'chalk/ui/kis_view.h')
-rw-r--r--chalk/ui/kis_view.h664
1 files changed, 664 insertions, 0 deletions
diff --git a/chalk/ui/kis_view.h b/chalk/ui/kis_view.h
new file mode 100644
index 00000000..1f197f87
--- /dev/null
+++ b/chalk/ui/kis_view.h
@@ -0,0 +1,664 @@
+/*
+ * Copyright (c) 1999 Matthias Elter <me@kde.org>
+ * 1999 Michael Koch <koch@kde.org>
+ * 1999 Carsten Pfeiffer <pfeiffer@kde.org>
+ * 2002 Patrick Julien <freak@codepimps.org>
+ * 2004 Clarence Dang <dang@kde.org>
+ *
+ * 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.
+ */
+
+#ifndef KIS_VIEW_H_
+#define KIS_VIEW_H_
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <list>
+
+#include <tqdatetime.h>
+#include <tqpixmap.h>
+#include <tqstringlist.h>
+#include <tqtimer.h>
+
+#include <ksqueezedtextlabel.h>
+#include <kdebug.h>
+#include <kxmlguibuilder.h>
+#include <kxmlguiclient.h>
+#include <KoView.h>
+
+#include "kis_canvas_controller.h"
+#include "kis_canvas_subject.h"
+#include "kis_global.h"
+// #include "kis_debug_areas.h"
+#include "kis_types.h"
+#include "kis_profile.h"
+#include "kis_opengl_image_context.h"
+#include "kis_id.h"
+#include "koffice_export.h"
+#include "kis_color.h"
+#include "kis_input_device.h"
+
+class TQButton;
+class TQLabel;
+class TQPaintEvent;
+class TQScrollBar;
+class TQWidget;
+class TQPopup;
+class TQPopupMenu;
+
+class DCOPObject;
+class KAction;
+class KActionMenu;
+class KPrinter;
+class KToggleAction;
+class KToolBar;
+
+class KoPartSelectAction;
+class KoDocumentEntry;
+class KoIconItem;
+class KoTabBar;
+class KoPaletteManager;
+class KoGrayWidget;
+class KoHSVWidget;
+class KoRGBWidget;
+
+class KisBirdEyeBox;
+class KisBrush;
+class KisButtonPressEvent;
+class KisButtonReleaseEvent;
+class KisCanvas;
+class KisCanvasObserver;
+class KisCompositeOp;
+class KisControlFrame;
+class KisDoc;
+class KisDoubleClickEvent;
+class KisFilterManager;
+class KisFilterStrategy;
+class KisGradient;
+class KisGridManager;
+class KisPerspectiveGridManager;
+class KisLabelProgress;
+class KisLayerBox;
+class KisMoveEvent;
+class KisPaletteWidget;
+class KisPattern;
+class KisPoint;
+class KisRect;
+class KisResource;
+class KisResourceMediator;
+class KisRuler;
+class KisSelectionManager;
+class KoToolBox;
+class KisToolControllerInterface;
+class KisToolManager;
+class KisUndoAdapter;
+class KisFilterConfiguration;
+class KisPartLayerHandler;
+class KisPaintOpSettings;
+
+class KRITA_EXPORT KisView
+ : public KoView,
+ public KisCanvasSubject,
+ public KXMLGUIBuilder,
+ private KisCanvasController
+{
+
+ Q_OBJECT
+ TQ_OBJECT
+
+ typedef KoView super;
+
+ typedef std::list<KisCanvasObserver*> vKisCanvasObserver;
+ typedef vKisCanvasObserver::iterator vKisCanvasObserver_it;
+ typedef vKisCanvasObserver::const_iterator vKisCanvasObserver_cit;
+
+public:
+ KisView(KisDoc *doc, KisUndoAdapter *adapter, TQWidget *tqparent = 0, const char *name = 0);
+ virtual ~KisView();
+
+public: // KXMLGUIBuilder implementation
+
+ virtual TQWidget *createContainer( TQWidget *tqparent, int index, const TQDomElement &element, int &id );
+ virtual void removeContainer( TQWidget *container, TQWidget *tqparent, TQDomElement &element, int id );
+
+public: // KoView implementation
+ virtual bool eventFilter(TQObject *o, TQEvent *e);
+
+ virtual DCOPObject* dcopObject();
+
+ virtual void print(KPrinter &printer);
+ virtual void setupPrinter(KPrinter &printer);
+
+ virtual void updateReadWrite(bool readwrite);
+ virtual void guiActivateEvent(KParts::GUIActivateEvent *event);
+
+ virtual int leftBorder() const;
+ virtual int rightBorder() const;
+ virtual int topBorder() const;
+ virtual int bottomBorder() const;
+
+ TQ_INT32 docWidth() const;
+ TQ_INT32 docHeight() const;
+
+ void updateStatusBarSelectionLabel();
+
+ virtual TQPoint applyViewTransformations(const TQPoint& p) const;
+ virtual TQPoint reverseViewTransformations( const TQPoint& p) const;
+ virtual void canvasAddChild(KoViewChild *child);
+
+signals:
+
+ void brushChanged(KisBrush * brush);
+ void gradientChanged(KisGradient * gradient);
+ void patternChanged(KisPattern * pattern);
+ void paintopChanged(KisID paintop, const KisPaintOpSettings *paintopSettings);
+ /**
+ * Indicates when the current layer changed so that the current colorspace could have
+ * changed.
+ **/
+ void currentColorSpaceChanged(KisColorSpace* cs);
+ void cursorPosition(TQ_INT32 xpos, TQ_INT32 ypos);
+
+ void sigFGQColorChanged(const TQColor &);
+ void sigBGQColorChanged(const TQColor &);
+
+ void sigInputDeviceChanged(const KisInputDevice& inputDevice);
+
+ /*
+ * Emitted whenever the zoom or scroll values change.
+ */
+ void viewTransformationsChanged();
+
+public slots:
+
+ void slotSetFGColor(const KisColor& c);
+ void slotSetBGColor(const KisColor& c);
+
+ void rotateLayer180();
+ void rotateLayerLeft90();
+ void rotateLayerRight90();
+ void mirrorLayerX();
+ void mirrorLayerY();
+ void scaleLayer(double sx, double sy, KisFilterStrategy *filterStrategy);
+ void rotateLayer(double radians);
+ void shearLayer(double angleX, double angleY);
+
+ void slotCreateMask();
+ void slotMaskFromSelection();
+ void slotMaskToSelection();
+ void slotApplyMask();
+ void slotRemoveMask();
+ void slotEditMask();
+ void slotShowMask();
+
+ void brushActivated(KisResource *brush);
+ void patternActivated(KisResource *pattern);
+ void gradientActivated(KisResource *gradient);
+ void paintopActivated(const KisID & paintop, const KisPaintOpSettings *paintopSettings);
+
+
+public:
+ virtual void mouseMoveEvent(TQMouseEvent *e);
+
+ void resizeCurrentImage(TQ_INT32 w, TQ_INT32 h, bool cropLayers = false);
+ void scaleCurrentImage(double sx, double sy, KisFilterStrategy *filterStrategy);
+ void rotateCurrentImage(double radians);
+ void shearCurrentImage(double angleX, double angleY);
+
+ void insertPart(const TQRect& viewRect, const KoDocumentEntry& entry,
+ KisGroupLayerSP tqparent, KisLayerSP above);
+
+ /**
+ * Import an image as a layer. If there is more than
+ * one layer in the image, import all of them as separate
+ * layers.
+ *
+ * @param url the url to the image file
+ * @return the number of layers added
+ */
+ TQ_INT32 importImage(const KURL& url = KURL());
+protected:
+
+ virtual void resizeEvent(TQResizeEvent*); // From TQWidget
+ virtual void styleChange(TQStyle& oldStyle); // From TQWidget
+ virtual void paletteChange(const TQPalette& oldPalette); // From TQWidget
+ virtual void showEvent(TQShowEvent *);
+
+protected slots:
+ virtual void slotChildActivated(bool a); // from KoView
+
+// -------------------------------------------------------------------------//
+// KisCanvasSubject implementation
+// -------------------------------------------------------------------------//
+public:
+
+ KisCanvasSubject * canvasSubject() { return this; };
+
+private:
+
+ virtual KisImageSP currentImg() const;
+
+ virtual void attach(KisCanvasObserver *observer);
+ virtual void detach(KisCanvasObserver *observer);
+ virtual void notifyObservers();
+
+ virtual KisColor bgColor() const;
+ virtual void setBGColor(const KisColor& c);
+
+ virtual KisColor fgColor() const;
+ virtual void setFGColor(const KisColor& c);
+
+ float HDRExposure() const;
+ void setHDRExposure(float exposure);
+
+ virtual KisBrush *currentBrush() const;
+ virtual KisPattern *currentPattern() const;
+ virtual KisGradient *currentGradient() const;
+ virtual KisID currentPaintop() const;
+ virtual const KisPaintOpSettings *currentPaintopSettings() const;
+
+ virtual double zoomFactor() const;
+
+ virtual KisUndoAdapter *undoAdapter() const;
+
+ virtual KisCanvasController *canvasController() const;
+ virtual KisToolControllerInterface *toolController() const;
+
+ virtual KisProgressDisplayInterface *progressDisplay() const;
+
+ virtual KisDoc * document() const;
+
+ inline KisGridManager * gridManager() { return m_gridManager; }
+ inline KisPerspectiveGridManager* perspectiveGridManager() { return m_perspectiveGridManager; }
+
+ inline KisSelectionManager * selectionManager() { return m_selectionManager; }
+
+ KoPaletteManager * paletteManager();
+
+ KisProfile * monitorProfile();
+
+
+// -------------------------------------------------------------------------//
+// KisCanvasController implementation
+// -------------------------------------------------------------------------//
+
+public:
+
+ KisCanvasController * getCanvasController() { return this; };
+
+
+private slots:
+ virtual void updateCanvas();
+
+ void updateStatusBarZoomLabel();
+ void updateStatusBarProfileLabel();
+
+private:
+ virtual KisCanvas *kiscanvas() const;
+
+ virtual TQ_INT32 horzValue() const;
+ virtual TQ_INT32 vertValue() const;
+
+ virtual void scrollTo(TQ_INT32 x, TQ_INT32 y);
+
+ virtual void updateCanvas(TQ_INT32 x, TQ_INT32 y, TQ_INT32 w, TQ_INT32 h);
+ virtual void updateCanvas(const TQRect& imageRect);
+
+ virtual void zoomIn();
+ virtual void zoomIn(TQ_INT32 x, TQ_INT32 y);
+
+ virtual void zoomOut();
+ virtual void zoomOut(TQ_INT32 x, TQ_INT32 y);
+
+ virtual void zoomTo(TQ_INT32 x, TQ_INT32 y, TQ_INT32 w, TQ_INT32 h);
+ virtual void zoomTo(const TQRect& r);
+ virtual void zoomTo(const KisRect& r);
+ virtual void zoomAroundPoint(double x, double y, double zf);
+
+ virtual TQPoint viewToWindow(const TQPoint& pt);
+ virtual TQPoint viewToWindow(const TQPoint& pt) const;
+ virtual KisPoint viewToWindow(const KisPoint& pt);
+ virtual TQRect viewToWindow(const TQRect& rc);
+ virtual KisRect viewToWindow(const KisRect& rc);
+ virtual void viewToWindow(TQ_INT32 *x, TQ_INT32 *y);
+
+ virtual TQPoint windowToView(const TQPoint& pt);
+ virtual TQPoint windowToView(const TQPoint& pt) const;
+ virtual KisPoint windowToView(const KisPoint& pt);
+ virtual TQRect windowToView(const TQRect& rc);
+ virtual KisRect windowToView(const KisRect& rc);
+ virtual void windowToView(TQ_INT32 *x, TQ_INT32 *y);
+
+ virtual TQCursor setCanvasCursor(const TQCursor & cursor);
+
+ void setInputDevice(KisInputDevice inputDevice);
+ KisInputDevice currentInputDevice() const;
+
+// -------------------------------------------------------------------------//
+// KisView internals
+// -------------------------------------------------------------------------//
+
+private:
+
+ void connectCurrentImg();
+ void disconnectCurrentImg();
+// void eraseGuides();
+// void paintGuides();
+// void updateGuides();
+// void viewGuideLines();
+
+ void imgUpdateGUI();
+
+ void layerUpdateGUI(bool enable);
+ void createLayerBox();
+ void createDockers();
+
+ void paintToolOverlay(const TQRegion& region);
+
+ void paintTQPaintDeviceView(const TQRegion& canvasRegion);
+ void paintOpenGLView(const TQRect& canvasRect);
+
+ void updateTQPaintDeviceCanvas(const TQRect& imageRect);
+ void updateOpenGLCanvas(const TQRect& imageRect);
+
+ /**
+ * Update the whole of the KisCanvas, including areas outside the image.
+ */
+ void refreshKisCanvas();
+
+ void selectionDisplayToggled(bool displaySelection);
+
+ bool activeLayerHasSelection();
+
+ /**
+ * Reset the monitor profile to the new settings.
+ */
+ void resetMonitorProfile();
+
+ void setupActions();
+ void setupCanvas();
+ void setupRulers();
+ void setupScrollBars();
+ void setupStatusBar();
+
+
+ KisFilterManager * filterManager() { return m_filterManager; }
+ void setCurrentImage(KisImageSP image);
+
+ /**
+ * Returns the next zoom level when zooming in from the current level.
+ */
+ double nextZoomInLevel() const;
+
+ /**
+ * Returns the next zoom level when zooming out from the current level.
+ */
+ double nextZoomOutLevel() const;
+
+ /**
+ * Returns the next zoom level when zooming out from the given level.
+ */
+ double nextZoomOutLevel(double zoomLevel) const;
+
+ /**
+ * Returns the zoom level that fits the image to the canvas.
+ */
+ double fitToCanvasZoomLevel() const;
+
+ /**
+ * Set the zoom level on first creating the view.
+ */
+ void setInitialZoomLevel();
+
+ void startInitialZoomTimerIfReady();
+
+private slots:
+ void layersUpdated(); // Used in the channel separation to notify the view that we have added a few layers.
+ void tqmaskUpdated(); // To update the enabled or disabled status of the tqmask entries
+
+ void slotSetFGQColor(const TQColor & c);
+ void slotSetBGQColor(const TQColor & c);
+
+ void imgUpdated(TQRect rc);
+ void slotOpenGLImageUpdated(TQRect rc);
+
+ void imgResizeToActiveLayer();
+
+ void canvasGotMoveEvent(KisMoveEvent *e);
+ void canvasGotButtonPressEvent(KisButtonPressEvent *e);
+ void canvasGotButtonReleaseEvent(KisButtonReleaseEvent *e);
+ void canvasGotDoubleClickEvent(KisDoubleClickEvent *e);
+ void canvasGotPaintEvent(TQPaintEvent *e);
+ void canvasGotEnterEvent(TQEvent *e);
+ void canvasGotLeaveEvent(TQEvent *e);
+ void canvasGotMouseWheelEvent(TQWheelEvent *e);
+ void canvasGotKeyPressEvent(TQKeyEvent*);
+ void canvasGotKeyReleaseEvent(TQKeyEvent*);
+ void canvasGotDragEnterEvent(TQDragEnterEvent*);
+ void canvasGotDropEvent(TQDropEvent*);
+
+ void reconnectAfterPartInsert();
+
+ TQPoint mapToScreen(const TQPoint& pt);
+ void slotImageProperties();
+
+ void layerCompositeOp(const KisCompositeOp& compositeOp);
+ void layerOpacity(int opacity, bool dontundo);
+ void layerOpacityFinishedChanging(int previous, int opacity);
+
+ void layerToggleVisible();
+ void layerToggleLocked();
+ void actLayerVisChanged(int show);
+ void layerProperties();
+ void showLayerProperties(KisLayerSP layer);
+ void layerAdd();
+ void addLayer(KisGroupLayerSP tqparent, KisLayerSP above);
+ void addGroupLayer(KisGroupLayerSP tqparent, KisLayerSP above);
+ void addPartLayer();
+ void addPartLayer(KisGroupLayerSP tqparent, KisLayerSP above, const KoDocumentEntry& entry);
+ void addAdjustmentLayer();
+ void addAdjustmentLayer(KisGroupLayerSP tqparent, KisLayerSP above);
+ void addAdjustmentLayer(KisGroupLayerSP tqparent, KisLayerSP above, const TQString & name, KisFilterConfiguration * filter, KisSelectionSP selection = 0);
+ void layerRemove();
+ void layerDuplicate();
+ void layerRaise();
+ void layerLower();
+ void layerFront();
+ void layerBack();
+ void flattenImage();
+ void mergeLayer();
+ void saveLayerAsImage();
+
+ void slotUpdateFullScreen(bool toggle);
+ void showRuler();
+
+ void slotZoomIn();
+ void slotZoomOut();
+ void slotActualPixels();
+ void slotActualSize();
+ void slotFitToCanvas();
+
+ void slotImageSizeChanged(TQ_INT32 w, TQ_INT32 h);
+
+ void scrollH(int value);
+ void scrollV(int value);
+
+ void slotInsertImageAsLayer();
+ void profileChanged(KisProfile * profile);
+
+ void slotAddPalette();
+ void slotEditPalette();
+
+ void preferences();
+
+ void slotAutoScroll(const TQPoint &p);
+
+ void handlePartLayerAdded(KisLayerSP layer);
+
+ /// Is called when the file is loaded
+ void slotLoadingFinished();
+
+ void slotInitialZoomTimeout();
+
+private:
+
+ bool m_panning;
+
+ KisTool * m_oldTool;
+
+ KisDoc *m_doc;
+ KisCanvas *m_canvas;
+ KisPartLayerHandler* m_partHandler;
+
+ KisGridManager * m_gridManager;
+ KisPerspectiveGridManager * m_perspectiveGridManager;
+ KisSelectionManager * m_selectionManager;
+ KisFilterManager * m_filterManager;
+ KoPaletteManager * m_paletteManager;
+ KisToolManager * m_toolManager;
+ bool m_actLayerVis;
+
+ // Fringe benefits
+ KisRuler *m_hRuler;
+ KisRuler *m_vRuler;
+ TQ_INT32 m_rulerThickness;
+ TQ_INT32 m_vScrollBarExtent;
+ TQ_INT32 m_hScrollBarExtent;
+
+ // Actions
+ KAction *m_imgFlatten;
+ KAction *m_imgMergeLayer;
+ KAction *m_imgRename;
+ KAction *m_imgResizeToLayer;
+ KAction *m_imgScan;
+
+ KoPartSelectAction * m_actionPartLayer;
+ KAction * m_actionAdjustmentLayer;
+ KAction *m_layerAdd;
+ KAction *m_layerBottom;
+ KAction *m_layerDup;
+ KToggleAction *m_layerHide;
+ KAction *m_layerLower;
+ KAction *m_layerProperties;
+ KAction *m_layerRaise;
+ KAction *m_layerRm;
+ KAction *m_layerSaveAs;
+ KAction *m_layerTop;
+
+ KAction *m_createMask;
+ KAction *m_tqmaskFromSelection;
+ KAction *m_tqmaskToSelection;
+ KAction *m_applyMask;
+ KAction *m_removeMask;
+ KToggleAction *m_editMask;
+ KToggleAction *m_showMask;
+
+ KAction *m_zoomIn;
+ KAction *m_zoomOut;
+ KAction *m_actualPixels;
+ KAction *m_actualSize;
+ KAction *m_fitToCanvas;
+
+ KAction *m_fullScreen;
+ KAction *m_imgProperties;
+
+ KToggleAction *m_RulerAction;
+ KToggleAction *m_guideAction;
+
+ DCOPObject *m_dcop;
+
+ // Widgets
+ TQScrollBar *m_hScroll; // XXX: the sizing of the scrollthumbs
+ TQScrollBar *m_vScroll; // is not right yet.
+ int m_scrollX;
+ int m_scrollY;
+ int m_canvasXOffset;
+ int m_canvasYOffset;
+
+ bool m_paintViewEnabled;
+ bool m_guiActivateEventReceived;
+ bool m_showEventReceived;
+ bool m_imageLoaded;
+
+ TQTimer m_initialZoomTimer;
+
+
+// KisGuideSP m_currentGuide;
+// TQPoint m_lastGuidePoint;
+ KisUndoAdapter *m_adapter;
+ vKisCanvasObserver m_observers;
+ TQLabel *m_statusBarZoomLabel;
+ KSqueezedTextLabel *m_statusBarSelectionLabel;
+ KSqueezedTextLabel *m_statusBarProfileLabel;
+ KisLabelProgress *m_progress;
+
+
+ KisLayerBox *m_layerBox;
+ KoToolBox * m_toolBox;
+ KisControlFrame * m_brushesAndStuffToolBar;
+
+ // Current colours, brushes, patterns etc.
+
+ KisColor m_fg;
+ KisColor m_bg;
+
+ KisBrush *m_brush;
+ KisPattern *m_pattern;
+ KisGradient *m_gradient;
+
+ KisID m_paintop;
+ const KisPaintOpSettings *m_paintopSettings;
+
+ TQTime m_tabletEventTimer;
+ TQTabletEvent::TabletDevice m_lastTabletEventDevice;
+
+ TQPixmap m_canvasPixmap;
+ bool m_toolIsPainting;
+
+#ifdef HAVE_GL
+ // OpenGL context for the current image, containing textures
+ // shared between multiple views.
+ KisOpenGLImageContextSP m_OpenGLImageContext;
+#endif
+
+ // Monitorprofile for this view
+ KisProfile * m_monitorProfile;
+
+ float m_HDRExposure;
+
+ // Currently active input device (mouse, stylus, eraser...)
+ KisInputDevice m_inputDevice;
+
+ KisBirdEyeBox * m_birdEyeBox;
+ KoHSVWidget *m_hsvwidget;
+ KoRGBWidget *m_rgbwidget;
+ KoGrayWidget *m_graywidget;
+ KisPaletteWidget *m_palettewidget;
+ KisID m_currentColorChooserDisplay;
+
+private:
+ KisImageSP m_image;
+
+protected:
+
+ friend class KisSelectionManager;
+ friend class KisFilterManager;
+ friend class KisGridManager;
+ friend class KisPerspectiveGridManager;
+};
+
+#endif // KIS_VIEW_H_