|
|
|
/* 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 <tqwidget.h>
|
|
|
|
#include <tqrect.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <tqsize.h>
|
|
|
|
#include <tqwmatrix.h>
|
|
|
|
#include <tqscrollview.h>
|
|
|
|
#include <tqstrlist.h>
|
|
|
|
|
|
|
|
#ifdef USE_KPIXMAPIO
|
|
|
|
#include <kpixmapio.h>
|
|
|
|
#endif
|
|
|
|
|
|
|
|
class TQPopupMenu;
|
|
|
|
class TQPixmap;
|
|
|
|
class TQImage;
|
|
|
|
class TQPainter;
|
|
|
|
|
|
|
|
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 TQScrollView
|
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
TQ_OBJECT
|
|
|
|
Q_ENUMS( PopupIDs )
|
|
|
|
TQ_PROPERTY( int brightness READ getBrightness WRITE setBrightness )
|
|
|
|
TQ_PROPERTY( int contrast READ getContrast WRITE setContrast )
|
|
|
|
TQ_PROPERTY( int gamma READ getGamma WRITE setGamma )
|
|
|
|
TQ_PROPERTY( int scale_factor READ getScaleFactor WRITE setScaleFactor )
|
|
|
|
|
|
|
|
public:
|
|
|
|
ImageCanvas( TQWidget *tqparent = 0,
|
|
|
|
const TQImage *start_image = 0,
|
|
|
|
const char *name = 0);
|
|
|
|
~ImageCanvas( );
|
|
|
|
|
|
|
|
int getBrightness() const;
|
|
|
|
int getContrast() const;
|
|
|
|
int getGamma() const;
|
|
|
|
|
|
|
|
int getScaleFactor() const;
|
|
|
|
|
|
|
|
const TQImage *rootImage();
|
|
|
|
|
|
|
|
bool hasImage( void ) { return acquired; }
|
|
|
|
TQPopupMenu* contextMenu() { return m_contextMenu; }
|
|
|
|
TQRect 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( TQImage* );
|
|
|
|
|
|
|
|
ScaleKinds scaleKind();
|
|
|
|
const TQString scaleKindString();
|
|
|
|
|
|
|
|
ScaleKinds defaultScaleKind();
|
|
|
|
|
|
|
|
const TQString 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;
|
|
|
|
tqrepaint();
|
|
|
|
}
|
|
|
|
virtual TQSize tqsizeHint() const;
|
|
|
|
void newImage( TQImage* );
|
|
|
|
void newImageHoldZoom( TQImage* );
|
|
|
|
void deleteView( TQImage *);
|
|
|
|
void newRectSlot();
|
|
|
|
void newRectSlot( TQRect 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 TQRect&, const TQPen&, const TQBrush&, 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( TQRect );
|
|
|
|
void scalingRequested();
|
|
|
|
void closingRequested();
|
|
|
|
void scalingChanged( const TQString& );
|
|
|
|
/**
|
|
|
|
* 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( TQPainter * p, int clipx, int clipy, int clipw, int cliph );
|
|
|
|
|
|
|
|
void timerEvent(TQTimerEvent *);
|
|
|
|
void viewportMousePressEvent(TQMouseEvent *);
|
|
|
|
void viewportMouseReleaseEvent(TQMouseEvent *);
|
|
|
|
void viewportMouseMoveEvent(TQMouseEvent *);
|
|
|
|
|
|
|
|
void resizeEvent( TQResizeEvent * event );
|
|
|
|
|
|
|
|
private:
|
|
|
|
TQStrList urls;
|
|
|
|
|
|
|
|
int scale_factor;
|
|
|
|
const TQImage *image;
|
|
|
|
int brightness, contrast, gamma;
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef USE_KPIXMAPIO
|
|
|
|
KPixmapIO pixIO;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
TQWMatrix scale_matrix;
|
|
|
|
TQWMatrix inv_scale_matrix;
|
|
|
|
TQPixmap *pmScaled;
|
|
|
|
float used_yscaler;
|
|
|
|
float used_xscaler;
|
|
|
|
TQPopupMenu *m_contextMenu;
|
|
|
|
bool maintain_aspect;
|
|
|
|
|
|
|
|
int timer_id;
|
|
|
|
TQRect *selected;
|
|
|
|
preview_state moving;
|
|
|
|
int cr1,cr2;
|
|
|
|
int lx,ly;
|
|
|
|
bool acquired;
|
|
|
|
|
|
|
|
/* private functions for the running ant */
|
|
|
|
void drawHAreaBorder(TQPainter &p,int x1,int x2,int y,int r = FALSE);
|
|
|
|
void drawVAreaBorder(TQPainter &p,int x,int y1,int y2,int r = FALSE);
|
|
|
|
void drawAreaBorder(TQPainter *p,int r = FALSE);
|
|
|
|
void update_scaled_pixmap( void );
|
|
|
|
|
|
|
|
preview_state classifyPoint(int x,int y);
|
|
|
|
|
|
|
|
class ImageCanvasPrivate;
|
|
|
|
ImageCanvasPrivate *d;
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|