9#include <QtCore/qmath.h>
28 , m_isRatioForced(false)
29 , m_isWidthForced(false)
30 , m_isHeightForced(false)
31 , m_rotateActive(false)
40 , m_currentModifiers(Qt::NoModifier)
52 if (widgetsList.size() > 0
54 widgetsList.first().data())) {
57 widgetsList.first().data());
60 sectionRectangle->
appendWidget(
"rectangleConstraintWidget", widget);
61 baseOptions->
appendWidget(
"sectionRectangle", sectionRectangle);
63 widget->setContentsMargins(10, 10, 10, 10);
64 widgetsList.append(widget);
126 if (key == Qt::Key_Control) {
128 }
else if (key == Qt::Key_Shift) {
130 }
else if (key == Qt::Key_Alt) {
140 if (key == Qt::Key_Control) {
142 }
else if (key == Qt::Key_Shift) {
144 }
else if (key == Qt::Key_Alt) {
158 QString message = i18n(
"This tool cannot paint on clone layers. Please select a paint or vector layer or mask.");
164 QString message = i18n(
"The MyPaint Brush Engine is not available for this colorspace");
181 QSizeF area = QSizeF(0,0);
215 area.setHeight(area.width() / ratio);
217 area.setWidth(area.height() * ratio);
230 bool rotateMode = expandFromCenter && translateMode;
231 bool fixedSize =
isFixedSize() && !constraintToggle;
239 angleVector = (fixedSize)?
m_dragEnd: pos;
244 qreal a2 = atan2(angleVector.y(), angleVector.x());
252 if (fixedSize && !rotateMode) {
254 }
else if (translateMode && !rotateMode) {
264 QPointF baseDiag = t1.map(diag);
265 QSizeF area = QSizeF(fabs(baseDiag.x()), fabs(baseDiag.y()));
268 if (!constraintToggle || overrideRatio) {
273 (baseDiag.x() < 0) ? -area.width() : area.width(),
274 (baseDiag.y() < 0) ? -area.height() : area.height()
278 diag = t2.map(baseDiag);
281 if (expandFromCenter && !fixedSize && !rotateMode) {
296 , QString::number(
m_dragStart.y(),
'f', 1)), QIcon(), 1000
355 t.translate(start.x(), start.y());
357 t.translate(-start.x(), -start.y());
358 const QTransform tInv = t.inverted();
360 const QPointF end1 = t.map(end);
361 const QPointF newStart(qRound(start.x()), qRound(start.y()));
362 const QPointF newEnd(qRound(end1.x()), qRound(end1.y()));
363 const QPointF newCenter = (newStart + newEnd) / 2.0;
365 QRectF result(newStart, newEnd);
366 result.moveCenter(tInv.map(newCenter));
368 return result.normalized();
380 const QRect viewRect =
pixelToView(imageRect).toAlignedRect();
391 path.addRoundedRect(viewRect,
392 roundCornersX, roundCornersY);
394 path.addRect(viewRect);
417 path.moveTo(QPointF(pt.x() - 5.0, pt.y() - 5.0)); path.lineTo(QPointF(pt.x() + 5.0, pt.y() + 5.0));
418 path.moveTo(QPointF(pt.x() - 5.0, pt.y() + 5.0)); path.lineTo(QPointF(pt.x() + 5.0, pt.y() - 5.0));
424 t.translate(center.x(), center.y());
425 t.rotateRadians(angle);
426 t.translate(-center.x(), -center.y());
KisCoordinatesConverter * coordinatesConverter
void updateCanvas(const QRectF &rc) override
KisViewManager * viewManager() const
qreal effectiveZoom() const
static Qt::Key workaroundShiftAltMetaHell(const QKeyEvent *keyEvent)
void showFloatingMessage(const QString &message, const QIcon &icon, int timeout=4500, KisFloatingMessage::Priority priority=KisFloatingMessage::Medium, int alignment=Qt::AlignCenter|Qt::TextWordWrap)
shows a floating message in the top right corner of the canvas
bool spontaneous() const
return if this event was spontaneous (see QMouseEvent::spontaneous())
QPointF point
The point in document coordinates.
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
#define KIS_ASSERT_RECOVER_RETURN(cond)
#define koIcon(name)
Use these macros for icons without any issues.