You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
222 lines
5.6 KiB
222 lines
5.6 KiB
15 years ago
|
/* This file is part of the KDE Project
|
||
|
Copyright (C) 1999 Klaas Freitag <freitag@suse.de>
|
||
|
|
||
|
This library is free software; you can redistribute it and/or
|
||
|
modify it under the terms of the GNU Library General Public
|
||
|
License as published by the Free Software Foundation; either
|
||
|
version 2 of the License, or (at your option) any later version.
|
||
|
|
||
|
This library 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
|
||
|
Library General Public License for more details.
|
||
|
|
||
|
You should have received a copy of the GNU Library General Public License
|
||
|
along with this library; see the file COPYING.LIB. If not, write to
|
||
|
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||
|
Boston, MA 02110-1301, USA.
|
||
|
*/
|
||
|
|
||
|
#ifndef __IMG_CANVAS_H__
|
||
|
#define __IMG_CANVAS_H__
|
||
|
|
||
|
#include <qwidget.h>
|
||
|
#include <qrect.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <qsize.h>
|
||
|
#include <qwmatrix.h>
|
||
|
#include <qscrollview.h>
|
||
|
#include <qstrlist.h>
|
||
|
|
||
|
#ifdef USE_KPIXMAPIO
|
||
|
#include <kpixmapio.h>
|
||
|
#endif
|
||
|
|
||
|
class QPopupMenu;
|
||
|
class QPixmap;
|
||
|
class QImage;
|
||
|
class QPainter;
|
||
|
|
||
|
enum preview_state {
|
||
|
MOVE_NONE,
|
||
|
MOVE_TOP_LEFT,
|
||
|
MOVE_TOP_RIGHT,
|
||
|
MOVE_BOTTOM_LEFT,
|
||
|
MOVE_BOTTOM_RIGHT,
|
||
|
MOVE_LEFT,
|
||
|
MOVE_RIGHT,
|
||
|
MOVE_TOP,
|
||
|
MOVE_BOTTOM,
|
||
|
MOVE_WHOLE
|
||
|
};
|
||
|
|
||
|
enum cursor_type {
|
||
|
CROSS,
|
||
|
VSIZE,
|
||
|
HSIZE,
|
||
|
BDIAG,
|
||
|
FDIAG,
|
||
|
ALL,
|
||
|
HREN
|
||
|
};
|
||
|
|
||
|
const int MIN_AREA_WIDTH = 3;
|
||
|
const int MIN_AREA_HEIGHT = 3;
|
||
|
const int delta = 3;
|
||
|
#ifdef __PREVIEW_CPP__
|
||
|
int max_dpi = 600;
|
||
|
#else
|
||
|
extern int max_dpi;
|
||
|
#endif
|
||
|
|
||
|
|
||
|
|
||
|
class ImageCanvas: public QScrollView
|
||
|
{
|
||
|
Q_OBJECT
|
||
|
Q_ENUMS( PopupIDs )
|
||
|
Q_PROPERTY( int brightness READ getBrightness WRITE setBrightness )
|
||
|
Q_PROPERTY( int contrast READ getContrast WRITE setContrast )
|
||
|
Q_PROPERTY( int gamma READ getGamma WRITE setGamma )
|
||
|
Q_PROPERTY( int scale_factor READ getScaleFactor WRITE setScaleFactor )
|
||
|
|
||
|
public:
|
||
|
ImageCanvas( QWidget *parent = 0,
|
||
|
const QImage *start_image = 0,
|
||
|
const char *name = 0);
|
||
|
~ImageCanvas( );
|
||
|
|
||
|
int getBrightness() const;
|
||
|
int getContrast() const;
|
||
|
int getGamma() const;
|
||
|
|
||
|
int getScaleFactor() const;
|
||
|
|
||
|
const QImage *rootImage();
|
||
|
|
||
|
bool hasImage( void ) { return acquired; }
|
||
|
QPopupMenu* contextMenu() { return m_contextMenu; }
|
||
|
QRect sel( void );
|
||
|
|
||
|
enum ScaleKinds { UNSPEC, DYNAMIC, FIT_ORIG, FIT_WIDTH, FIT_HEIGHT, ZOOM };
|
||
|
|
||
|
enum PopupIDs { ID_POP_ZOOM, ID_POP_CLOSE, ID_FIT_WIDTH,
|
||
|
ID_FIT_HEIGHT, ID_ORIG_SIZE };
|
||
|
|
||
|
bool selectedImage( QImage* );
|
||
|
|
||
|
ScaleKinds scaleKind();
|
||
|
const QString scaleKindString();
|
||
|
|
||
|
ScaleKinds defaultScaleKind();
|
||
|
|
||
|
const QString imageInfoString( int w=0, int h=0, int d=0 );
|
||
|
|
||
|
public slots:
|
||
|
void setBrightness(int);
|
||
|
void setContrast(int );
|
||
|
void setGamma(int );
|
||
|
|
||
|
void toggleAspect( int aspect_in_mind )
|
||
|
{
|
||
|
maintain_aspect = aspect_in_mind;
|
||
|
repaint();
|
||
|
}
|
||
|
virtual QSize sizeHint() const;
|
||
|
void newImage( QImage* );
|
||
|
void newImageHoldZoom( QImage* );
|
||
|
void deleteView( QImage *);
|
||
|
void newRectSlot();
|
||
|
void newRectSlot( QRect newSel );
|
||
|
void noRectSlot( void );
|
||
|
void setScaleFactor( int i );
|
||
|
void handle_popup(int item );
|
||
|
void enableContextMenu( bool wantContextMenu );
|
||
|
void setKeepZoom( bool k );
|
||
|
void setScaleKind( ScaleKinds k );
|
||
|
void setDefaultScaleKind( ScaleKinds k );
|
||
|
|
||
|
/**
|
||
|
* Highlight a rectangular area on the current image using the given brush
|
||
|
* and pen.
|
||
|
* The function returns a id that needs to be given to the remove method.
|
||
|
*/
|
||
|
int highlight( const QRect&, const QPen&, const QBrush&, bool ensureVis=false );
|
||
|
|
||
|
/**
|
||
|
* reverts the highlighted region back to normal view.
|
||
|
*/
|
||
|
void removeHighlight( int idx = -1 );
|
||
|
|
||
|
/**
|
||
|
* permit to do changes to the image that are saved back to the file
|
||
|
*/
|
||
|
void setReadOnly( bool );
|
||
|
|
||
|
bool readOnly();
|
||
|
|
||
|
signals:
|
||
|
void noRect( void );
|
||
|
void newRect( void );
|
||
|
void newRect( QRect );
|
||
|
void scalingRequested();
|
||
|
void closingRequested();
|
||
|
void scalingChanged( const QString& );
|
||
|
/**
|
||
|
* signal emitted if the permission of the currently displayed image changed,
|
||
|
* ie. if it goes from writeable to readable.
|
||
|
* @param shows if the image is now read only (true) or not.
|
||
|
*/
|
||
|
void imageReadOnly( bool isRO );
|
||
|
|
||
|
protected:
|
||
|
void drawContents( QPainter * p, int clipx, int clipy, int clipw, int cliph );
|
||
|
|
||
|
void timerEvent(QTimerEvent *);
|
||
|
void viewportMousePressEvent(QMouseEvent *);
|
||
|
void viewportMouseReleaseEvent(QMouseEvent *);
|
||
|
void viewportMouseMoveEvent(QMouseEvent *);
|
||
|
|
||
|
void resizeEvent( QResizeEvent * event );
|
||
|
|
||
|
private:
|
||
|
QStrList urls;
|
||
|
|
||
|
int scale_factor;
|
||
|
const QImage *image;
|
||
|
int brightness, contrast, gamma;
|
||
|
|
||
|
|
||
|
#ifdef USE_KPIXMAPIO
|
||
|
KPixmapIO pixIO;
|
||
|
#endif
|
||
|
|
||
|
QWMatrix scale_matrix;
|
||
|
QWMatrix inv_scale_matrix;
|
||
|
QPixmap *pmScaled;
|
||
|
float used_yscaler;
|
||
|
float used_xscaler;
|
||
|
QPopupMenu *m_contextMenu;
|
||
|
bool maintain_aspect;
|
||
|
|
||
|
int timer_id;
|
||
|
QRect *selected;
|
||
|
preview_state moving;
|
||
|
int cr1,cr2;
|
||
|
int lx,ly;
|
||
|
bool acquired;
|
||
|
|
||
|
/* private functions for the running ant */
|
||
|
void drawHAreaBorder(QPainter &p,int x1,int x2,int y,int r = FALSE);
|
||
|
void drawVAreaBorder(QPainter &p,int x,int y1,int y2,int r = FALSE);
|
||
|
void drawAreaBorder(QPainter *p,int r = FALSE);
|
||
|
void update_scaled_pixmap( void );
|
||
|
|
||
|
preview_state classifyPoint(int x,int y);
|
||
|
|
||
|
class ImageCanvasPrivate;
|
||
|
ImageCanvasPrivate *d;
|
||
|
};
|
||
|
|
||
|
#endif
|