19 #ifndef SCRIBBLEAREA_H
20 #define SCRIBBLEAREA_H
31 #include <QPixmapCache>
34 #include "pencildef.h"
35 #include "vectorimage.h"
36 #include "bitmapimage.h"
37 #include "colourref.h"
38 #include "vectorselection.h"
39 #include "colormanager.h"
40 #include "viewmanager.h"
41 #include "canvasrenderer.h"
42 #include "preferencemanager.h"
57 friend class EditTool;
65 void setCore(
Editor* pCore ) { mEditor = pCore; }
67 void deleteSelection();
68 void setSelection( QRectF rect,
bool );
69 void displaySelectionProperties();
71 QRectF getSelection()
const {
return mySelection; }
72 bool somethingSelected;
73 QRectF mySelection, myTransformedSelection, myTempTransformedSelection;
76 bool areLayersSane()
const;
77 bool isLayerPaintable()
const;
83 void setEffect( SETTING e,
bool isOn );
85 int showAllLayers()
const {
return mShowAllLayers; }
86 qreal getCurveSmoothing()
const {
return mCurveSmoothingLevel; }
87 bool usePressure()
const {
return mUsePressure; }
88 bool makeInvisible()
const {
return mMakeInvisible; }
90 enum MoveMode { MIDDLE, TOPLEFT, TOPRIGHT, BOTTOMLEFT, BOTTOMRIGHT, ROTATION, SYMMETRY, NONE };
91 MoveMode getMoveMode()
const {
return mMoveMode; }
92 void setMoveMode( MoveMode moveMode ) { mMoveMode = moveMode; }
96 QRectF getCameraRect();
97 QPointF getCentralPoint();
99 void updateCurrentFrame();
100 void updateFrame(
int frame );
101 void updateAllFrames();
102 void updateAllVectorLayersAtCurrentFrame();
103 void updateAllVectorLayersAt(
int frame );
104 void updateAllVectorLayers();
106 bool shouldUpdateAll()
const {
return mNeedUpdateAll; }
107 void setAllDirty() { mNeedUpdateAll =
true; }
110 BaseTool* getTool( ToolType eToolMode );
111 void setCurrentTool( ToolType eToolMode );
112 void setTemporaryTool( ToolType eToolMode );
115 StrokeManager* getStrokeManager()
const {
return mStrokeManager.get(); }
117 Editor* editor() {
return mEditor; }
119 void floodFillError(
int errorType );
121 bool isMouseInUse() {
return mMouseInUse; }
125 void modification(
int );
126 void multiLayerOnionSkinChanged(
bool );
127 void refreshPreview();
131 void calculateSelectionRect();
132 QTransform getSelectionTransformation() {
return selectionTransformation; }
133 void calculateSelectionTransformation();
134 void paintTransformedSelection();
135 void applyTransformedSelection();
136 void cancelTransformedSelection();
137 void setModified(
int layerNumber,
int frameNumber );
142 void setCurveSmoothing(
int );
143 void toggleThinLines();
144 void toggleOutlines();
145 void toggleShowAllLayers();
147 void updateToolCursor();
148 void paletteColorChanged(QColor);
151 void tabletEvent( QTabletEvent* )
override;
152 void wheelEvent( QWheelEvent* )
override;
153 void mousePressEvent( QMouseEvent* )
override;
154 void mouseMoveEvent( QMouseEvent* )
override;
155 void mouseReleaseEvent( QMouseEvent* )
override;
156 void mouseDoubleClickEvent( QMouseEvent* )
override;
157 void keyPressEvent( QKeyEvent* )
override;
158 void keyReleaseEvent( QKeyEvent* )
override;
159 void paintEvent( QPaintEvent* )
override;
160 void resizeEvent( QResizeEvent* )
override;
163 void drawPolyline(QPainterPath path, QPen pen,
bool useAA );
164 void drawLine( QPointF P1, QPointF P2, QPen pen, QPainter::CompositionMode cm );
165 void drawPath( QPainterPath path, QPen pen, QBrush brush, QPainter::CompositionMode cm );
166 void drawPen( QPointF thePoint, qreal brushWidth, QColor fillColour,
bool useAA =
true );
167 void drawPencil( QPointF thePoint, qreal brushWidth, QColor fillColour, qreal opacity );
168 void drawBrush( QPointF thePoint, qreal brushWidth, qreal offset, QColor fillColour, qreal opacity,
bool usingFeather =
true,
int useAA = 0 );
169 void blurBrush(
BitmapImage *bmiSource_, QPointF srcPoint_, QPointF thePoint_, qreal brushWidth_, qreal offset_, qreal opacity_ );
170 void liquifyBrush(
BitmapImage *bmiSource_, QPointF srcPoint_, QPointF thePoint_, qreal brushWidth_, qreal offset_, qreal opacity_ );
172 void paintBitmapBuffer();
173 void paintBitmapBufferRect( QRect rect );
174 void paintCanvasCursor( QPainter& painter );
175 void clearBitmapBuffer();
176 void refreshBitmap(
const QRectF& rect,
int rad );
177 void refreshVector(
const QRectF& rect,
int rad );
178 void setGaussianGradient( QGradient &gradient, QColor colour, qreal opacity, qreal offset );
180 void updateCanvasCursor();
188 void drawCanvas(
int frame, QRect rect );
189 void settingUpdated(SETTING setting);
191 MoveMode mMoveMode = MIDDLE;
192 ToolType mPrevTemporalToolType;
193 ToolType mPrevToolType = PEN;
196 bool isTransforming =
false;
198 std::unique_ptr< StrokeManager > mStrokeManager;
200 Editor* mEditor =
nullptr;
202 bool mIsSimplified =
false;
203 bool mShowThinLines =
false;
204 bool mQuickSizing =
true;
206 bool mUsePressure =
true;
207 bool mMakeInvisible =
false;
208 bool mToolCursors =
true;
209 qreal mCurveSmoothingLevel = 0.0;
210 bool mMultiLayerOnionSkin;
213 bool mNeedUpdateAll =
false;
217 bool mKeyboardInUse =
false;
218 bool mMouseInUse =
false;
219 bool mMouseRightButtonInUse =
false;
221 QPointF mCurrentPixel;
223 QPointF mCurrentPoint;
231 bool instantTool =
false;
234 QTransform selectionTransformation;
242 std::vector<QPixmapCache::Key> mPixmapCacheKeys;
246 QLoggingCategory mLog;
247 std::deque< clock_t > mDebugTimeQue;
void resetSelectionProperties()
ScribbleArea::resetSelectionProperties should be used whenever translate, rotate, transform...
QVector< QPoint > calcSelectionCenterPoints()
ScribbleArea::calculateSelectionCenter.
void flipSelection(bool flipVertical)
ScribbleArea::flipSelection flip selection along the X or Y axis.