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.
141 lines
4.9 KiB
141 lines
4.9 KiB
15 years ago
|
/*
|
||
|
* kis_previewwidget.h - part of Krita
|
||
|
*
|
||
|
* Copyright (c) 2001 John Califf <jcaliff@compuzone.net>
|
||
|
* Copyright (c) 2004 Bart Coppens <kde@bartcoppens.be>
|
||
|
* Copyright (c) 2005 Cyrille Berger <cberger@cberger.net>
|
||
|
* Copyright (c) 2007 Benjamin Schleimer <bensch128@yahoo.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 of the License, 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.
|
||
|
*
|
||
|
* You should have received a copy of the GNU General Public License
|
||
|
* along with this program; if not, write to the Free Software
|
||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||
|
*/
|
||
|
#ifndef __kis_previewwidget_h__
|
||
|
#define __kis_previewwidget_h__
|
||
|
|
||
|
#include <qimage.h>
|
||
|
#include <qevent.h>
|
||
|
|
||
|
#include "kis_types.h"
|
||
|
|
||
|
#include "kis_previewwidgetbase.h"
|
||
|
|
||
|
class QWidget;
|
||
|
class KisProfile;
|
||
|
class KisFilter;
|
||
|
class KisFilterConfiguration;
|
||
|
class QTimer;
|
||
|
class KisLabelProgress;
|
||
|
|
||
|
/**
|
||
|
* A widget that can be used by plugins to show a preview of the effect of the
|
||
|
* plugin to the user. This is a convenience class thand handily packs a source and a
|
||
|
* preview view together with a zoom button.
|
||
|
* It would be nice if every plugin that needs to show a preview
|
||
|
* (maybe not those that create a new image) would use this. This can prevent the distracting
|
||
|
* effect the GIMP has with a different preview for almost every filter.
|
||
|
*/
|
||
|
class KisPreviewWidget : public PreviewWidgetBase
|
||
|
{
|
||
|
Q_OBJECT
|
||
|
|
||
|
public:
|
||
|
/** Constructs the widget */
|
||
|
KisPreviewWidget( QWidget* parent = 0, const char* name = 0 );
|
||
|
virtual ~KisPreviewWidget();
|
||
|
|
||
|
/** returns if the preview is automatically updated */
|
||
|
bool getAutoUpdate() const;
|
||
|
|
||
|
void wheelEvent(QWheelEvent * e);
|
||
|
|
||
|
/** Instructs the KisPreviewWidget to eventually update the preview.
|
||
|
* KisPreviewWidget delays the actual running of the filter for 500ms
|
||
|
* so if the user is changing a configuration setting, it won't run multiple time.
|
||
|
* @param filter to run on the image
|
||
|
* @config to use when filtering.
|
||
|
*/
|
||
|
void runFilter(KisFilter * filter, KisFilterConfiguration * config);
|
||
|
|
||
|
public slots:
|
||
|
|
||
|
/** Sets the preview to use the layer specified as argument */
|
||
|
void slotSetDevice(KisPaintDeviceSP dev);
|
||
|
|
||
|
/** Enables or disables the automatically updating of the preview */
|
||
|
void slotSetAutoUpdate(bool set);
|
||
|
|
||
|
/** Toggle between display preview and display original */
|
||
|
void setPreviewDisplayed(bool v);
|
||
|
|
||
|
/** use to indicate that the preview need to be updated. */
|
||
|
void needUpdate();
|
||
|
|
||
|
signals:
|
||
|
/** This is emitted when the position or zoom factor of the widget has changed */
|
||
|
void updated();
|
||
|
|
||
|
private slots:
|
||
|
|
||
|
void zoomIn();
|
||
|
void zoomOut();
|
||
|
void zoomOneToOne();
|
||
|
|
||
|
/**
|
||
|
* Called when the "Force Update" button is clicked
|
||
|
*/
|
||
|
void forceUpdate();
|
||
|
|
||
|
/**
|
||
|
* Updates the zoom and redisplays either the original or the preview (filtered) image
|
||
|
*/
|
||
|
void updateZoom();
|
||
|
|
||
|
/** Internal method which actually runs the filter
|
||
|
*/
|
||
|
void runFilterHelper();
|
||
|
|
||
|
private:
|
||
|
/**
|
||
|
* Recalculates the zoom factor
|
||
|
*/
|
||
|
void zoomChanged(const double zoom);
|
||
|
|
||
|
bool m_autoupdate; /// Flag indicating that the widget should auto update whenever a setting is changed
|
||
|
bool m_previewIsDisplayed; /// Flag indicating whether the filtered or original image is displayed
|
||
|
|
||
|
QImage m_scaledOriginal; /// QImage copy of the original image
|
||
|
bool m_dirtyOriginal; /// flag indicating that the original image is dirty
|
||
|
KisPaintDeviceSP m_origDevice; /// Pointer to the original image
|
||
|
|
||
|
QImage m_scaledPreview; /// QImage copy of the filtered image
|
||
|
bool m_dirtyPreview; /// flag indicating that the preview image is dirty
|
||
|
KisPaintDeviceSP m_previewDevice; /// Pointer to the preview image
|
||
|
KisImageSP m_scaledImage; /// Scaled image copied from the original
|
||
|
|
||
|
double m_filterZoom; /// Zoom amount when the filtering occurred
|
||
|
double m_zoom; /// Current zoom amount
|
||
|
KisProfile * m_profile; /// the color profile to use when converting to QImage
|
||
|
|
||
|
KisLabelProgress *m_progress; /// Progress bar of the preview.
|
||
|
|
||
|
QTimer * m_zoomTimer; /// Timer used to update the view whenever the zoom changes
|
||
|
QTimer * m_filterTimer; /// Timer used to update the view whenever the filter changes
|
||
|
KisFilter * m_filter; /// Filter used
|
||
|
KisFilterConfiguration * m_config; /// Configuration used
|
||
|
bool m_firstFilter; /// Flag to determine if we should delay the first filter or not
|
||
|
bool m_firstZoom; /// Flag to determine if we should delay the first zoom or not
|
||
|
};
|
||
|
|
||
|
#endif
|