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.
210 lines
5.4 KiB
210 lines
5.4 KiB
/* ============================================================
|
|
*
|
|
* This file is a part of digiKam project
|
|
* http://www.digikam.org
|
|
*
|
|
* Date : 2003-01-09
|
|
* Description : image editor canvas management class
|
|
*
|
|
* Copyright (C) 2004-2005 by Renchi Raju <renchi@pooh.tam.uiuc.edu>
|
|
* Copyright (C) 2004-2008 by Gilles Caulier <caulier dot gilles at gmail dot com>
|
|
*
|
|
* 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 CANVAS_H
|
|
#define CANVAS_H
|
|
|
|
// TQt includes.
|
|
|
|
#include <tqscrollview.h>
|
|
#include <tqrect.h>
|
|
|
|
// Local includes.
|
|
|
|
#include "digikam_export.h"
|
|
#include "dimg.h"
|
|
|
|
class TQString;
|
|
class TQStringList;
|
|
class TQPixmap;
|
|
class TQPaintEvent;
|
|
class TQResizeEvent;
|
|
class TQWheelEvent;
|
|
class TQKeyEvent;
|
|
class TQColor;
|
|
|
|
namespace Digikam
|
|
{
|
|
|
|
class CanvasPrivate;
|
|
class DImgInterface;
|
|
class ExposureSettingsContainer;
|
|
class ICCSettingsContainer;
|
|
class IOFileSettingsContainer;
|
|
|
|
class DIGIKAM_EXPORT Canvas : public TQScrollView
|
|
{
|
|
TQ_OBJECT
|
|
|
|
|
|
public:
|
|
|
|
Canvas(TQWidget *parent=0);
|
|
~Canvas();
|
|
|
|
void load(const TQString& filename, IOFileSettingsContainer *IOFileSettings);
|
|
void preload(const TQString& filename);
|
|
|
|
void saveAs(const TQString& filename, IOFileSettingsContainer *IOFileSettings,
|
|
bool setExifOrientationTag, const TQString& mimeType=TQString());
|
|
void resetImage();
|
|
void switchToLastSaved(const TQString& newFilename);
|
|
void abortSaving();
|
|
void setModified();
|
|
void readMetadataFromFile(const TQString &file);
|
|
void clearUndoHistory();
|
|
void setUndoHistoryOrigin();
|
|
void updateUndoState();
|
|
DImg currentImage();
|
|
TQString currentImageFileFormat();
|
|
TQString currentImageFilePath();
|
|
|
|
DImgInterface *interface() const;
|
|
void makeDefaultEditingCanvas();
|
|
|
|
double snapZoom(double z);
|
|
void setZoomFactorSnapped(double zoom);
|
|
|
|
double zoomFactor();
|
|
void setZoomFactor(double z);
|
|
bool fitToWindow();
|
|
bool maxZoom();
|
|
bool minZoom();
|
|
bool exifRotated();
|
|
int imageWidth();
|
|
int imageHeight();
|
|
TQRect getSelectedArea();
|
|
|
|
// If current image file format is only available in read only,
|
|
// typicially all RAW image file formats.
|
|
bool isReadOnly();
|
|
|
|
void resizeImage(int w, int h);
|
|
|
|
void setBackgroundColor(const TQColor& color);
|
|
void setICCSettings(ICCSettingsContainer *cmSettings);
|
|
void setExposureSettings(ExposureSettingsContainer *expoSettings);
|
|
|
|
void setExifOrient(bool exifOrient);
|
|
|
|
void increaseGamma();
|
|
void decreaseGamma();
|
|
void increaseBrightness();
|
|
void decreaseBrightness();
|
|
void increaseContrast();
|
|
void decreaseContrast();
|
|
|
|
void getUndoHistory(TQStringList &titles);
|
|
void getRedoHistory(TQStringList &titles);
|
|
|
|
void toggleFitToWindow();
|
|
void fitToSelect();
|
|
|
|
signals:
|
|
|
|
void signalZoomChanged(double zoom);
|
|
void signalMaxZoom();
|
|
void signalMinZoom();
|
|
void signalChanged();
|
|
void signalUndoStateChanged(bool, bool, bool);
|
|
void signalSelected(bool);
|
|
void signalRightButtonClicked();
|
|
void signalShowNextImage();
|
|
void signalShowPrevImage();
|
|
void signalPrepareToLoad();
|
|
void signalLoadingStarted(const TQString &filename);
|
|
void signalLoadingFinished(const TQString &filename, bool success);
|
|
void signalLoadingProgress(const TQString& filePath, float progress);
|
|
void signalSavingStarted(const TQString &filename);
|
|
void signalSavingFinished(const TQString &filename, bool success);
|
|
void signalSavingProgress(const TQString& filePath, float progress);
|
|
void signalSelectionChanged(const TQRect&);
|
|
void signalToggleOffFitToWindow();
|
|
|
|
public slots:
|
|
|
|
void slotIncreaseZoom();
|
|
void slotDecreaseZoom();
|
|
|
|
// image modifiers
|
|
void slotRotate90();
|
|
void slotRotate180();
|
|
void slotRotate270();
|
|
|
|
void slotFlipHoriz();
|
|
void slotFlipVert();
|
|
|
|
void slotCrop();
|
|
|
|
void slotRestore();
|
|
void slotUndo(int steps=1);
|
|
void slotRedo(int steps=1);
|
|
|
|
void slotCopy();
|
|
|
|
void slotSelectAll();
|
|
void slotSelectNone();
|
|
|
|
protected:
|
|
|
|
void resizeEvent(TQResizeEvent* e);
|
|
void viewportPaintEvent(TQPaintEvent *e);
|
|
void contentsMousePressEvent(TQMouseEvent *e);
|
|
void contentsMouseMoveEvent(TQMouseEvent *e);
|
|
void contentsMouseReleaseEvent(TQMouseEvent *e);
|
|
void contentsWheelEvent(TQWheelEvent *e);
|
|
|
|
private:
|
|
|
|
TQRect calcSeletedArea();
|
|
double calcAutoZoomFactor();
|
|
void updateAutoZoom();
|
|
void updateContentsSize(bool deleteRubber);
|
|
|
|
void drawRubber();
|
|
void paintViewport(const TQRect& er, bool antialias);
|
|
|
|
void reset();
|
|
|
|
private slots:
|
|
|
|
void slotSelected();
|
|
void slotModified();
|
|
void slotImageLoaded(const TQString& filePath, bool success);
|
|
void slotImageSaved(const TQString& filePath, bool success);
|
|
void slotCornerButtonPressed();
|
|
void slotZoomChanged(double);
|
|
void slotPanIconSelectionMoved(const TQRect&, bool);
|
|
void slotPanIconHiden();
|
|
|
|
private:
|
|
|
|
CanvasPrivate *d;
|
|
};
|
|
|
|
} // namespace Digikam
|
|
|
|
#endif /* CANVAS_H */
|
|
|