22#include "kis_filters_listview.h"
24#include <tqapplication.h>
29#include <tdeglobalsettings.h>
32#include "kis_paint_device.h"
33#include "kis_cursor.h"
35#include "kis_paint_layer.h"
36#include "kis_group_layer.h"
37#include "kis_filter.h"
38#include "kis_filter_strategy.h"
39#include "kis_thread_pool.h"
43KisFiltersThumbnailThread::KisFiltersThumbnailThread(TQIconView * parent, KisFiltersIconViewItem * iconItem,
KisFilterConfiguration * config,
KisFilter * filter, KisPaintDeviceSP dev,
const TQRect & bounds, KisProfile * profile)
45 , m_iconItem(iconItem)
54KisFiltersThumbnailThread::~KisFiltersThumbnailThread()
56 m_iconItem->resetThread();
59void KisFiltersThumbnailThread::run()
61 if (m_canceled)
return;
63 KisPaintDeviceSP thumbPreview =
new KisPaintDevice(*m_dev);
64 m_filter->disableProgress();
65 m_filter->process(thumbPreview, thumbPreview, m_config, m_bounds);
68 m_pixmap = thumbPreview->convertToTQImage(m_profile);
70 tqApp->postEvent(m_parent,
new KisThumbnailDoneEvent (m_iconItem, m_pixmap));
75TQPixmap KisFiltersThumbnailThread::pixmap()
90KisFiltersIconViewItem::KisFiltersIconViewItem(TQIconView * parent,
const TQString & text,
const TQPixmap & icon,
92 KisPaintDeviceSP thumb,
const TQRect & bounds, KisProfile * profile)
93 : TQIconViewItem(parent, text, icon)
96 , m_filterconfig(filterConfig)
98 m_thread =
new KisFiltersThumbnailThread(parent,
this, filterConfig, filter, thumb, bounds, profile);
101KisFiltersIconViewItem::~KisFiltersIconViewItem()
103 if (m_thread) m_thread->cancel();
109KisFiltersListView::KisFiltersListView(TQWidget* parent,
bool filterForAdjustmentLayers,
const char* name)
110 : TDEIconView(parent, name)
113 , m_filterForAdjustmentLayers(filterForAdjustmentLayers)
118KisFiltersListView::KisFiltersListView(TQWidget * parent,
const char * name, WFlags f,
bool filterForAdjustmentLayers)
119 : TDEIconView(parent, name, f)
122 , m_filterForAdjustmentLayers(filterForAdjustmentLayers)
127KisFiltersListView::KisFiltersListView(KisLayerSP layer, TQWidget* parent,
bool filterForAdjustmentLayers,
const char * name)
128 : TDEIconView(parent, name)
131 , m_filterForAdjustmentLayers(filterForAdjustmentLayers)
136 m_original = pl->paintDevice();
142KisFiltersListView::KisFiltersListView(KisPaintDeviceSP device, TQWidget* parent,
bool filterForAdjustmentLayers,
const char * name)
143 : TDEIconView(parent, name)
146 , m_filterForAdjustmentLayers(filterForAdjustmentLayers)
152void KisFiltersListView::init()
154 setCaption(i18n(
"Filters List"));
155 setItemsMovable(
false);
156 setSelectionMode(TQIconView::Single);
157 setSizePolicy(TQSizePolicy(TQSizePolicy::Fixed, TQSizePolicy::Expanding ));
158 setMinimumWidth(160);
162void KisFiltersListView::setLayer(KisLayerSP layer) {
163 KisPaintLayer* pl =
dynamic_cast<KisPaintLayer*
>(layer.data());
166 KisPaintDeviceSP npd = pl->paintDevice();
174void KisFiltersListView::setCurrentFilter(
KisID filter)
176 setCurrentItem(findItem(filter.name()));
179void KisFiltersListView::buildPreview()
185 TQApplication::setOverrideCursor(KisCursor::waitCursor());
187 m_thumb = m_original->createThumbnailDevice(150, 150);
190 TQRect bounds = m_thumb->exactBounds();
191 TQPixmap pm(bounds.width(), bounds.height());
193 gc.fillRect(0, 0, bounds.width(), bounds.height(), backgroundColor());
197 KisIDList l = KisFilterRegistry::instance()->
listKeys();
198 KisIDList::iterator it;
201 for (it = l.begin(); it != l.end(); ++it) {
202 KisFilterSP f = KisFilterRegistry::instance()->
get(*it);
204 if (f->supportsPreview() && f->workWith( m_original->colorSpace() ) ) {
206 if (m_filterForAdjustmentLayers) {
207 kdDebug() <<
"We're filtering for adj layers, and this filter (" << f->id().name() <<
") supports them: " << f->supportsAdjustmentLayers() << endl;
208 if(!f->supportsAdjustmentLayers())
continue;
210 std::list<KisFilterConfiguration*> configlist = f->listOfExamplesConfiguration(m_thumb);
212 for(std::list<KisFilterConfiguration*>::iterator itc = configlist.begin();
213 itc != configlist.end();
216 KisFiltersIconViewItem * icon =
new KisFiltersIconViewItem(
this, (*it).name(), pm, *it, f, *itc, m_thumb, bounds, m_profile );
218 icon->thread()->runDirectly();
222 TQApplication::restoreOverrideCursor();
226void KisFiltersListView::customEvent(TQCustomEvent * e)
228 KisThumbnailDoneEvent * ev =
dynamic_cast<KisThumbnailDoneEvent *
>(e);
230 TQPixmap * p = ev->m_iconItem->pixmap();
231 TQImage img = ev->m_image;
234 if (p->width() > img.width())
235 x = (p->width() - img.width()) / 2;
238 if (p->height() > img.height())
239 y = (p->height() - img.height()) / 2;
244 gc.drawImage(TQPoint(x,y), img);
248 arrangeItemsInGrid();
A KisFilterConfiguration is the serializable representation of the filter parameters.
Basic interface of a Chalk filter.
KisIDList listKeys() const
This function return a list of all the keys.
_T get(const KisID &name) const
This function allow to get an object from its KisID.
Chalk has a large number of extensible resources.
This layer is of a type that can be painted on.
virtual void cancel()
Request the thread to cancel at the first opportunity.