/* ============================================================ * * This file is a part of digiKam project * http://www.digikam.org * * Date : 2005-01-18 * Description : a widget class to edit perspective. * * Copyright (C) 2005-2007 by Gilles Caulier * Copyright (C) 2006-2007 by Marcel Wiesweg * * 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, 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. * * ============================================================ */ #ifndef PERSPECTIVEWIDGET_H #define PERSPECTIVEWIDGET_H // TQt includes. #include #include #include #include #include // Digikam includes. #include "dimg.h" // Local includes. #include "matrix.h" class TQPixmap; namespace Digikam { class ImageIface; } namespace DigikamPerspectiveImagesPlugin { class PerspectiveWidget : public TQWidget { TQ_OBJECT public: PerspectiveWidget(int width, int height, TQWidget *parent=0); ~PerspectiveWidget(); TQRect getTargetSize(void); TQPoint getTopLeftCorner(void); TQPoint getTopRightCorner(void); TQPoint getBottomLeftCorner(void); TQPoint getBottomRightCorner(void); void reset(void); float getAngleTopLeft(void); float getAngleTopRight(void); float getAngleBottomLeft(void); float getAngleBottomRight(void); void applyPerspectiveAdjustment(void); Digikam::ImageIface* imageIface(); public slots: void slotToggleAntiAliasing(bool a); void slotToggleDrawWhileMoving(bool draw); void slotToggleDrawGrid(bool grid); void slotChangeGuideColor(const TQColor &color); void slotChangeGuideSize(int size); signals: void signalPerspectiveChanged( TQRect newSize, float topLeftAngle, float topRightAngle, float bottomLeftAngle, float bottomRightAngle ); protected: void paintEvent( TQPaintEvent *e ); void resizeEvent( TQResizeEvent * e ); void mousePressEvent ( TQMouseEvent * e ); void mouseReleaseEvent ( TQMouseEvent * e ); void mouseMoveEvent ( TQMouseEvent * e ); private: // Widget methods. void updatePixmap(void); void transformAffine(Digikam::DImg *orgImage, Digikam::DImg *destImage, const Matrix &matrix, Digikam::DColor background); TQPoint buildPerspective(TQPoint orignTopLeft, TQPoint orignBottomRight, TQPoint transTopLeft, TQPoint transTopRight, TQPoint transBottomLeft, TQPoint transBottomRight, Digikam::DImg *orgImage=0, Digikam::DImg *destImage=0, Digikam::DColor background=Digikam::DColor()); private: enum ResizingMode { ResizingNone = 0, ResizingTopLeft, ResizingTopRight, ResizingBottomLeft, ResizingBottomRight }; bool m_antiAlias; bool m_drawWhileMoving; bool m_drawGrid; uint *m_data; int m_w; int m_h; int m_origW; int m_origH; int m_currentResizing; int m_guideSize; TQRect m_rect; // Tranformed center area for mouse position control. TQPoint m_transformedCenter; // Draggable local region selection corners. TQRect m_topLeftCorner; TQRect m_topRightCorner; TQRect m_bottomLeftCorner; TQRect m_bottomRightCorner; TQPoint m_topLeftPoint; TQPoint m_topRightPoint; TQPoint m_bottomLeftPoint; TQPoint m_bottomRightPoint; TQPoint m_spot; TQColor m_guideColor; // 60 points will be stored to compute a grid of 15x15 lines. TQPointArray m_grid; TQPixmap *m_pixmap; Digikam::ImageIface *m_iface; Digikam::DImg m_previewImage; }; } // NameSpace DigikamPerspectiveImagesPlugin #endif /* PERSPECTIVEWIDGET_H */