krita
kis_transform_visitor.h00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef KIS_TRANSFORM_VISITOR_H_
00019 #define KIS_TRANSFORM_VISITOR_H_
00020
00021 #include "qrect.h"
00022
00023 #include "klocale.h"
00024
00025 #include "kis_layer_visitor.h"
00026 #include "kis_types.h"
00027 #include "kis_layer.h"
00028 #include "kis_group_layer.h"
00029 #include "kis_paint_layer.h"
00030 #include "kis_adjustment_layer.h"
00031 #include "kis_transaction.h"
00032 #include "kis_transform_worker.h"
00033 #include <kis_selected_transaction.h>
00034
00035 class KisProgressDisplayInterface;
00036 class KisFilterStrategy;
00037
00038 class KisTransformVisitor : public KisLayerVisitor {
00039
00040 public:
00041
00042 KisTransformVisitor(KisImageSP img, double xscale, double yscale,
00043 double , double , double angle,
00044 Q_INT32 tx, Q_INT32 ty, KisProgressDisplayInterface *progress, KisFilterStrategy *filter)
00045 : KisLayerVisitor()
00046 , m_sx(xscale)
00047 , m_sy(yscale)
00048 , m_tx(tx)
00049 , m_ty(ty)
00050 , m_filter(filter)
00051 , m_angle(angle)
00052 , m_progress(progress)
00053 , m_img(img)
00054 {
00055 }
00056
00057 virtual ~KisTransformVisitor()
00058 {
00059 }
00060
00065 bool visit(KisPaintLayer *layer)
00066 {
00067 KisPaintDeviceSP dev = layer->paintDevice();
00068
00069 KisTransaction * t = 0;
00070 if (m_img->undo()) {
00071 t = new KisTransaction(i18n("Rotate Layer"), dev);
00072 Q_CHECK_PTR(t);
00073 }
00074
00075 KisTransformWorker tw(dev, m_sx, m_sy, 0.0, 0.0, m_angle, m_tx, m_ty, m_progress, m_filter);
00076 tw.run();
00077
00078 if (m_img->undo()) {
00079 m_img->undoAdapter()->addCommand(t);
00080 }
00081 layer->setDirty();
00082 return true;
00083 };
00084
00085 bool visit(KisGroupLayer *layer)
00086 {
00087 layer->resetProjection();
00088
00089 KisLayerSP child = layer->firstChild();
00090 while (child) {
00091 child->accept(*this);
00092 child = child->nextSibling();
00093 }
00094 layer->setDirty();
00095 return true;
00096 };
00097
00098 bool visit(KisPartLayer *)
00099 {
00100 return true;
00101 };
00102
00103 virtual bool visit(KisAdjustmentLayer* layer)
00104 {
00105 layer->resetCache();
00106 return true;
00107 }
00108
00109
00110 private:
00111 double m_sx, m_sy;
00112 Q_INT32 m_tx, m_ty;
00113 KisFilterStrategy *m_filter;
00114 double m_angle;
00115 KisProgressDisplayInterface *m_progress;
00116 KisImageSP m_img;
00117 };
00118
00119
00120 #endif
|