/* * Copyright (c) 2003 Patrick Julien * * 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_CANVAS_CONTROLLER_H_ #define KIS_CANVAS_CONTROLLER_H_ #include #include #include #include "kis_types.h" class TQWidget; class KisTool; class KisRect; class KisPoint; class KisCanvas; class KisInputDevice; /** * Interface for classes that implement a canvas; i.e., a widget where KisImages * are painted onto. This is the "view" part of the model-view-controller paradigm; * the naming is a confusing historical artefact. */ class KisCanvasController { public: KisCanvasController() {}; virtual ~KisCanvasController() {}; public: /** * @return the canvas object */ virtual KisCanvas *kiscanvas() const = 0; /** * @return the value of the horizontal scrollbar. */ virtual TQ_INT32 horzValue() const = 0; /** * @return the value of the vertical scrollbar */ virtual TQ_INT32 vertValue() const = 0; /** * Sets the horizontal and vertical scrollbars to the specified values * * @param x the value the horizontal scrollbar is set to * @param y the value the vertical scrollbar is set to */ virtual void scrollTo(TQ_INT32 x, TQ_INT32 y) = 0; /** * Tell all of the canvas to repaint itself. */ virtual void updateCanvas() = 0; /** * Tell the canvas to repaint the rectangle defined by x, y, w and h. * The coordinates are image coordinates. */ virtual void updateCanvas(TQ_INT32 x, TQ_INT32 y, TQ_INT32 w, TQ_INT32 h) = 0; /** * Tell the canvas repaint the specified rectangle. The coordinates * are image coordinates, not view coordinates. */ virtual void updateCanvas(const TQRect& rc) = 0; /** * Increase the zoomlevel one step */ virtual void zoomIn() = 0; /** * Increase the zoomlevel one step and make sure that x,y is the center point of the view. * * @param x The x coordinate of the visible point in image coordinates * @param y the y coordinate of the visible point in image coordinates */ virtual void zoomIn(TQ_INT32 x, TQ_INT32 y) = 0; /** * Decrease the zoomlevel one step */ virtual void zoomOut() = 0; /** * Decrease the zoomlevel one step and make sure that x,y is the center point of the view. * * @param x the x coordinate of the visible point in image coordinates * @param y the y coordinate of the visible point in image coordinates */ virtual void zoomOut(TQ_INT32 x, TQ_INT32 y) = 0; /** * To centre the view on the given point with the given zoom factor. * * @param x the x coordinate of the center point in image coordinates * @param y the y coordinate of the center point in image coordinates * @param zf the zoomfactor */ virtual void zoomAroundPoint(double x, double y, double zf) = 0; /** * Make the rect defined by x, y, w and h visible, zooming in or * out as necessary. The view will be centered around the center point * of the specified rect. */ virtual void zoomTo(TQ_INT32 x, TQ_INT32 y, TQ_INT32 w, TQ_INT32 h) = 0; /** * Make the rect defined by x, y, w and h visible, zooming in or * out as necessary. The view will be centered around the center point * of the specified rect. */ virtual void zoomTo(const TQRect& r) = 0; /** * Make the rect defined by x, y, w and h visible, zooming in or * out as necessary. The view will be centered around the center point * of the specified rect. */ virtual void zoomTo(const KisRect& r) = 0; /** * Conversion functions from view coordinates to image coordinates * * You can get the rectangle of the image that's visible using the * viewToWindow() functions (KisCanvasController). E.g. * viewToWindow(TQRect(0, 0, canvasWidth, canvasHeight)). * * Here, the view is the canvas widget in the view widget, and the window * is the window on the image. */ virtual TQPoint viewToWindow(const TQPoint& pt) = 0; virtual KisPoint viewToWindow(const KisPoint& pt) = 0; virtual TQRect viewToWindow(const TQRect& rc) = 0; virtual KisRect viewToWindow(const KisRect& rc) = 0; virtual void viewToWindow(TQ_INT32 *x, TQ_INT32 *y) = 0; /** * Conversion functions from image coordinates to view coordinates */ virtual TQPoint windowToView(const TQPoint& pt) = 0; virtual KisPoint windowToView(const KisPoint& pt) = 0; virtual TQRect windowToView(const TQRect& rc) = 0; virtual KisRect windowToView(const KisRect& rc) = 0; virtual void windowToView(TQ_INT32 *x, TQ_INT32 *y) = 0; /** * Set the cursor shown when the pointer is over the canvas widget to * the specified cursor. * * @param cursor the new cursor * @return the old cursor */ virtual TQCursor setCanvasCursor(const TQCursor & cursor) = 0; /** * Set the active input device to the specified input device, This * could be a mouse, a stylus, an eraser or any other pointing input * device. * * @param inputDevice the new input device */ virtual void setInputDevice(KisInputDevice inputDevice) = 0; /** * @return the current input device, such as a mouse or a stylus */ virtual KisInputDevice currentInputDevice() const = 0; private: KisCanvasController(const KisCanvasController&); KisCanvasController& operator=(const KisCanvasController&); }; #endif // KIS_CANVAS_CONTROLLER_H_