From 00bb99ac80741fc50ef8a289719373032f2391eb Mon Sep 17 00:00:00 2001 From: toma Date: Wed, 25 Nov 2009 17:56:58 +0000 Subject: Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features. BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdeaccessibility@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- kmag/kmagzoomview.h | 249 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 249 insertions(+) create mode 100644 kmag/kmagzoomview.h (limited to 'kmag/kmagzoomview.h') diff --git a/kmag/kmagzoomview.h b/kmag/kmagzoomview.h new file mode 100644 index 0000000..a863ad6 --- /dev/null +++ b/kmag/kmagzoomview.h @@ -0,0 +1,249 @@ +/*************************************************************************** + kmagview.h - description + ------------------- + begin : Mon Feb 12 23:45:41 EST 2001 + copyright : (C) 2001-2003 by Sarang Lakare + email : sarang#users.sf.net + copyright : (C) 2003-2005 by Olaf Schmidt + email : ojschmidt@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; version 2 of the License * + * * + ***************************************************************************/ + + +#ifndef KMagZoomView_h_ +#define KMagZoomView_h_ + +#ifdef HAVE_CONFIG_H +#include +#endif + +// include files for Qt +#include +#include +#include +#include +#include +#include +#include +#include + +//class KMagSelRect; +#include "kmagselrect.h" + +/** + * The KMagZoomView class provides the view widget for the KmagApp instance. + * + * @author Olaf Schmikt + * @author Sarang Lakare + */ +class KMagZoomView : public QScrollView +{ + Q_OBJECT + public: + /// Constructor for the main view + KMagZoomView(QWidget *parent = 0, const char *name=0); + + /// Destructor for the main view + ~KMagZoomView(); + + /// Toggles the refreshing of the window + void toggleRefresh(); + + /// Returns the currently displayed zoomed view + QPixmap getPixmap(); + + /// Returns the state of the refresh switch + bool getRefreshStatus() const { return m_refreshSwitch; }; + + /// Returns teh status of followMouse + bool getFollowMouse() const { return m_followMouse; }; + + /// Get the status of "show rect. always" + bool getShowSelRect() const { return (m_selRect.getAlwaysVisible()); }; + + /// Get the coordinates of the selection rectangle + QRect getSelRectPos() const { return static_cast(m_selRect); }; + + /// Returns the current state of show mouse + unsigned int getShowMouseType() const; + + /// Returns the different ways of showing mouse cursor + QStringList getShowMouseStringList() const; + + /// Returns the status of "fit to window" option + bool getFitToWindow() const { return (m_fitToWindow); }; + + public slots: + + /// Sets zoom to the given value + void setZoom(float zoom = 0.0); + + /// Sets the rotation to the given value + void setRotation(int rotation = 0); + + /// Sets whether the magnified image is shown inverted + void setInvertation(bool invert); + + /// Grabs a frame from the given portion of the display + void grabFrame(); + + /// Update the mouse cursor in the zoom view + void updateMouseView(); + + /// Set grab-window-follows-mouse mode + void followMouse(bool follow = true); + + /// Shows/Hides the selection marker + void showSelRect(bool show=true); + + /// Set the position of the selection region to the given pos + void setSelRectPos(const QRect & rect); + + /// Set the refresh rate in fps (frames per second) + void setRefreshRate(float fps); + + /// Shows/Hides mouse cursor in the zoomed view + bool showMouse(unsigned int type); + + /// Set the status of "fit to window" option + void setFitToWindow (bool fit=true); + + /// Fits the zoom view to the zoom view window + void fitToWindow(); + + signals: + void contextMenu(QPoint pos); + + protected: + /// Called when the widget is hidden + void hideEvent( QHideEvent * e); + + /// Called when the widget is shown + void showEvent( QShowEvent * e); + + /// Called when the widget has been resized + void resizeEvent(QResizeEvent *e); + + /// Called when the widget is to be repainted + void drawContents ( QPainter * p, int clipx, int clipy, int clipw, int cliph ); + + /// This function calculates the mouse position relative to the image + QPoint calcMousePos(bool updateMousePos=true); + + /// This function draws the mouse cursor + void paintMouseCursor(QPaintDevice *dev, QPoint mousePos); + + /// Called when mouse click is detected + void mousePressEvent (QMouseEvent *e); + + /// Called when mouse is moved + void mouseMoveEvent(QMouseEvent *e); + + /// Mouse button release event handler + void mouseReleaseEvent(QMouseEvent *e); + + /// Mouse button release event handler + void keyPressEvent(QKeyEvent *e); + + /// Mouse button release event handler + void keyReleaseEvent(QKeyEvent *e); + + /// Catch context menu events + void contextMenuEvent (QContextMenuEvent *e); + + /// Mouse button release event handler + void focusOutEvent(QFocusEvent *e); + + /// Returns the rectangle where the pixmap will be drawn + QRect pixmapRect(); + + private: + /// Stores the pixmap grabbed from the screen - to be zoomed + QPixmap m_grabbedPixmap; + + /// The selected rectangle which is to be grabbed + KMagSelRect m_selRect; + + /// Grabs a window when the timer goes off + QTimer m_grabTimer; + + /// Updates the mouse view + QTimer m_mouseViewTimer; + + /// Zoom matrix + QWMatrix m_zoomMatrix; + + /// Inverted zoom matrix + QWMatrix m_invertedMatrix; + + /// Saves the mouse position when a button is clicked and b4 the cursor is moved to new position + QPoint m_oldMousePos; + + /// Saves the center of the grab window + QPoint m_oldCenter; + + /// Possible modes for the mouse to be in + enum KMagMouseMode { + Normal, + StartSelect, + ResizeSelection, + MoveSelection, + GrabSelection + }; + + /// The current mode which the mouse is + KMagMouseMode m_mouseMode; + + /// stores the state of the Ctrl key + bool m_ctrlKeyPressed; + + /// stores the state of the Shift key + bool m_shiftKeyPressed; + + /// Store the more recent updated cursor position + QPoint m_latestCursorPos; + + /// Various ways of showing mouse cursor + QStringList m_showMouseTypes; + + // configuration options: + + /// To follow mouse motion or not when no key is pressed + bool m_followMouse; + + /// State of refreshing - on or off + bool m_refreshSwitch; + + /// Stores the state of the refresh switch on hide event + bool m_refreshSwitchStateOnHide; + + /// Show mouse cursor type - 0 : do not show, non zero: show + unsigned int m_showMouse; + + /// Frames per second for refresh + unsigned int m_fps; + + /// Stores the amount to zoom the pixmap + float m_zoom; + + /// Stores the degrees to rotate the pixmap + int m_rotation; + + /// Whether the magnified image is to be shown inverted + int m_invert; + + /// Fit the zoom view to the zoom window + bool m_fitToWindow; + + /// Update the magnification matrix + void updateMatrix(); +}; + +#endif // KMagZoomView_h_ -- cgit v1.2.1