diff --git a/src/app/GUI/BoxesList/boolpropertywidget.cpp b/src/app/GUI/BoxesList/boolpropertywidget.cpp index 69d2f9b1b..a9b4e6623 100644 --- a/src/app/GUI/BoxesList/boolpropertywidget.cpp +++ b/src/app/GUI/BoxesList/boolpropertywidget.cpp @@ -89,7 +89,7 @@ void BoolPropertyWidget::paintEvent(QPaintEvent *) { p.end(); } -void BoolPropertyWidget::enterEvent(QEvent *) { +void BoolPropertyWidget::enterEvent(QtEnterEvent *) { mHovered = true; update(); } diff --git a/src/app/GUI/BoxesList/boolpropertywidget.h b/src/app/GUI/BoxesList/boolpropertywidget.h index 9961084c1..8083bc6c2 100644 --- a/src/app/GUI/BoxesList/boolpropertywidget.h +++ b/src/app/GUI/BoxesList/boolpropertywidget.h @@ -29,6 +29,7 @@ #include #include "Properties/boolproperty.h" #include "Properties/boolpropertycontainer.h" +#include "../ui/enterevent.h" class BoolPropertyWidget : public QWidget { Q_OBJECT @@ -40,7 +41,7 @@ class BoolPropertyWidget : public QWidget { protected: void mousePressEvent(QMouseEvent *); void paintEvent(QPaintEvent *); - void enterEvent(QEvent *); + void enterEvent(QtEnterEvent *); void leaveEvent(QEvent *); private: bool mHovered = false; diff --git a/src/app/GUI/BoxesList/boxscroller.cpp b/src/app/GUI/BoxesList/boxscroller.cpp index 931046cf0..e1228dc3e 100644 --- a/src/app/GUI/BoxesList/boxscroller.cpp +++ b/src/app/GUI/BoxesList/boxscroller.cpp @@ -180,17 +180,22 @@ void BoxScroller::stopScrolling() { } } -void BoxScroller::dropEvent(QDropEvent *event) { +void BoxScroller::dropEvent(QDropEvent *event) +{ stopScrolling(); mCurrentMimeData = event->mimeData(); +#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) mLastDragMoveY = event->pos().y(); +#else + mLastDragMoveY = event->position().toPoint().y(); +#endif updateDropTarget(); - if(mDropTarget.isValid()) { + if (mDropTarget.isValid()) { const auto targetAbs = mDropTarget.fTargetParent; const auto target = targetAbs->getTarget(); - if(mDropTarget.fDropType == DropType::on) { + if (mDropTarget.fDropType == DropType::on) { target->SWT_drop(mCurrentMimeData); - } else if(mDropTarget.fDropType == DropType::into) { + } else if (mDropTarget.fDropType == DropType::into) { target->SWT_dropInto(mDropTarget.fTargetId, mCurrentMimeData); } planScheduleUpdateVisibleWidgetsContent(); @@ -200,13 +205,18 @@ void BoxScroller::dropEvent(QDropEvent *event) { mDropTarget.reset(); } -void BoxScroller::dragEnterEvent(QDragEnterEvent *event) { +void BoxScroller::dragEnterEvent(QDragEnterEvent *event) +{ const auto mimeData = event->mimeData(); +#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) mLastDragMoveY = event->pos().y(); +#else + mLastDragMoveY = event->position().toPoint().y(); +#endif mCurrentMimeData = mimeData; updateDropTarget(); //mDragging = true; - if(mCurrentMimeData) event->acceptProposedAction(); + if (mCurrentMimeData) { event->acceptProposedAction(); } update(); } @@ -218,18 +228,23 @@ void BoxScroller::dragLeaveEvent(QDragLeaveEvent *event) { update(); } -void BoxScroller::dragMoveEvent(QDragMoveEvent *event) { +void BoxScroller::dragMoveEvent(QDragMoveEvent *event) +{ event->acceptProposedAction(); +#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) const int yPos = event->pos().y(); +#else + const int yPos = event->position().toPoint().y(); +#endif - if(yPos < 30) { - if(!mScrollTimer->isActive()) { + if (yPos < 30) { + if (!mScrollTimer->isActive()) { connect(mScrollTimer, &QTimer::timeout, this, &BoxScroller::scrollUp); mScrollTimer->start(300); } - } else if(yPos > height() - 30) { - if(!mScrollTimer->isActive()) { + } else if (yPos > height() - 30) { + if (!mScrollTimer->isActive()) { connect(mScrollTimer, &QTimer::timeout, this, &BoxScroller::scrollDown); mScrollTimer->start(300); diff --git a/src/app/GUI/BoxesList/boxsinglewidget.cpp b/src/app/GUI/BoxesList/boxsinglewidget.cpp index 8c53bd7b6..d8a541893 100644 --- a/src/app/GUI/BoxesList/boxsinglewidget.cpp +++ b/src/app/GUI/BoxesList/boxsinglewidget.cpp @@ -672,7 +672,11 @@ void BoxSingleWidget::mousePressEvent(QMouseEvent *event) { PropertyMenu pMenu(&menu, mParent->currentScene(), MainWindow::sGetInstance()); pTarget->prp_setupTreeViewMenu(&pMenu); } +#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) menu.exec(event->globalPos()); +#else + menu.exec(event->globalPosition().toPoint()); +#endif setSelected(false); } else { mDragPressPos = event->pos().x() > mFillWidget->x(); @@ -713,7 +717,7 @@ void BoxSingleWidget::mouseReleaseEvent(QMouseEvent *event) const auto target = mTarget->getTarget(); const auto bbox = enve_cast(target); - if (event->button() == Qt::MidButton && bbox) { + if (event->button() == Qt::MiddleButton && bbox) { PropertyNameDialog::sRenameBox(bbox, this); return; } @@ -734,7 +738,7 @@ void BoxSingleWidget::mouseReleaseEvent(QMouseEvent *event) } } -void BoxSingleWidget::enterEvent(QEvent *) +void BoxSingleWidget::enterEvent(QtEnterEvent *) { #ifdef Q_OS_MAC setFocus(); diff --git a/src/app/GUI/BoxesList/boxsinglewidget.h b/src/app/GUI/BoxesList/boxsinglewidget.h index 11fac85ee..b6a8e179e 100644 --- a/src/app/GUI/BoxesList/boxsinglewidget.h +++ b/src/app/GUI/BoxesList/boxsinglewidget.h @@ -37,6 +37,8 @@ #include "smartPointers/ememory.h" #include "framerange.h" #include "Animators/SmartPath/smartpathanimator.h" +#include "../ui/enterevent.h" + class QrealAnimatorValueSlider; class TimelineMovable; class Key; @@ -101,7 +103,7 @@ class BoxSingleWidget : public SingleWidget { void mouseMoveEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event); - void enterEvent(QEvent *); + void enterEvent(QtEnterEvent *); void leaveEvent(QEvent *); #ifdef Q_OS_MAC diff --git a/src/app/GUI/Expressions/expressiondialog.cpp b/src/app/GUI/Expressions/expressiondialog.cpp index 894014485..ab1005f23 100644 --- a/src/app/GUI/Expressions/expressiondialog.cpp +++ b/src/app/GUI/Expressions/expressiondialog.cpp @@ -554,35 +554,42 @@ void ExpressionDialog::updateScriptDefinitions() } { - QRegExp funcDefs("(class|function)\\s+([a-zA-Z_][a-zA-Z0-9_]*)\\s*(\\([a-zA-Z0-9_, ]*\\))"); - int pos = 0; - while ((pos = funcDefs.indexIn(scriptContext, pos)) != -1) { - QStringList funcs = funcDefs.capturedTexts(); - for (int i = 2; i < funcs.count() - 1; i += 3) { - const auto& func = funcs.at(i); - const auto& funcArgs = funcs.at(i + 1); - if (func.isEmpty()) { continue; } - mScriptApi->add(func + funcArgs); - mScriptLexer->addDefinition(func); - mDefsLexer->addDefinition(func); - } - pos += funcDefs.matchedLength(); + QRegularExpression funcDefs("(class|function)\\s+([a-zA-Z_][a-zA-Z0-9_]*)\\s*(\\([a-zA-Z0-9_, ]*\\))"); + auto matchIterator = funcDefs.globalMatch(scriptContext); + + while (matchIterator.hasNext()) { + QRegularExpressionMatch match = matchIterator.next(); + QStringList funcs = match.capturedTexts(); + + for (int i = 2; i < funcs.count() - 1; i += 3) { + const auto& func = funcs.at(i); + const auto& funcArgs = funcs.at(i + 1); + if (func.isEmpty()) { continue; } + + mScriptApi->add(func + funcArgs); + mScriptLexer->addDefinition(func); + mDefsLexer->addDefinition(func); + } } } { - QRegExp varDefs("([a-zA-Z_][a-zA-Z0-9_]*)\\s*=\\s*(?!=)"); - int pos = 0; - while ((pos = varDefs.indexIn(scriptContext, pos)) != -1) { - QStringList vars = varDefs.capturedTexts(); - for (int i = 1; i < vars.count(); i++) { - const auto& var = vars.at(i); - if (var.isEmpty()) { continue; } - mScriptApi->add(var); - mScriptLexer->addDefinition(var); - mDefsLexer->addDefinition(var); - } - pos += varDefs.matchedLength(); + QRegularExpression varDefs("([a-zA-Z_][a-zA-Z0-9_]*)\\s*=\\s*(?!=)"); + + auto matchIterator = varDefs.globalMatch(scriptContext); + + while (matchIterator.hasNext()) { + QRegularExpressionMatch match = matchIterator.next(); + QStringList vars = match.capturedTexts(); + + for (int i = 1; i < vars.count(); i++) { + const auto& var = vars.at(i); + if (var.isEmpty()) { continue; } + + mScriptApi->add(var); + mScriptLexer->addDefinition(var); + mDefsLexer->addDefinition(var); + } } } } diff --git a/src/app/GUI/Expressions/expressioneditor.cpp b/src/app/GUI/Expressions/expressioneditor.cpp index 6cc2b9e4b..202151bb3 100644 --- a/src/app/GUI/Expressions/expressioneditor.cpp +++ b/src/app/GUI/Expressions/expressioneditor.cpp @@ -87,7 +87,7 @@ void ExpressionEditor::keyPressEvent(QKeyEvent *e) { } else if(key == Qt::Key_Tab) { return QWidget::keyPressEvent(e); } else QTextEdit::keyPressEvent(e); - const bool input = e->text().contains(QRegExp("[A-Za-z0-9_ \\.\\$]")); + const bool input = e->text().contains(QRegularExpression("[A-Za-z0-9_ \\.\\$]")); const bool deletion = key == Qt::Key_Delete || key == Qt::Key_Backspace; const bool arrows = key == Qt::Key_Right || diff --git a/src/app/GUI/RenderWidgets/closablecontainer.cpp b/src/app/GUI/RenderWidgets/closablecontainer.cpp index 35ecb91b7..ef0d77c4b 100644 --- a/src/app/GUI/RenderWidgets/closablecontainer.cpp +++ b/src/app/GUI/RenderWidgets/closablecontainer.cpp @@ -47,12 +47,10 @@ ClosableContainer::ClosableContainer(QWidget *parent) : QWidget(parent) { mVLayout->addWidget(mContWidget); mContWidget->setContentsMargins(0, 0, 0, 0); mContWidget->setLayout(mContLayout); - //mContLayout->setMargin(0); mContLayout->setAlignment(Qt::AlignTop); mContLayout->setContentsMargins(0, 0, 0, 0); mContLayout->setSpacing(0); mVLayout->setSpacing(0); - mVLayout->setMargin(0); mVLayout->setContentsMargins(0, 0, 0, 0); setContentVisible(false); } diff --git a/src/app/GUI/RenderWidgets/outputsettingsdialog.cpp b/src/app/GUI/RenderWidgets/outputsettingsdialog.cpp index 00235275c..51456a490 100644 --- a/src/app/GUI/RenderWidgets/outputsettingsdialog.cpp +++ b/src/app/GUI/RenderWidgets/outputsettingsdialog.cpp @@ -362,11 +362,11 @@ void OutputSettingsDialog::setupFormatOptionsTree() container->setContentsMargins(10, 0, 10, 0); container->setMinimumHeight(150); - containerLayout->setMargin(0); + containerLayout->setContentsMargins(0, 0, 0, 0); containerLayout->addWidget(area); containerInner->setContentsMargins(0, 0, 0, 0); - containerInnerLayout->setMargin(0); + containerInnerLayout->setContentsMargins(0, 0, 0, 0); mFormatOptionsTree->setHeaderLabels(QStringList() << tr("Type") @@ -436,7 +436,7 @@ void OutputSettingsDialog::setupFormatOptionsTree() }); showHideWidget->setContentsMargins(0, 0, 10, 0); - showHideLayout->setMargin(0); + showHideLayout->setContentsMargins(0, 0, 0, 0); showHideLayout->addStretch(); showHideLayout->addWidget(showHideButton); diff --git a/src/app/GUI/RenderWidgets/renderinstancewidget.cpp b/src/app/GUI/RenderWidgets/renderinstancewidget.cpp index 174d74584..b72b852b1 100644 --- a/src/app/GUI/RenderWidgets/renderinstancewidget.cpp +++ b/src/app/GUI/RenderWidgets/renderinstancewidget.cpp @@ -31,7 +31,6 @@ #include "outputsettingsprofilesdialog.h" #include "outputsettingsdisplaywidget.h" #include "rendersettingsdisplaywidget.h" -#include "Private/esettings.h" #include "GUI/edialogs.h" #include "appsupport.h" @@ -142,7 +141,7 @@ void RenderInstanceWidget::iniGUI() QWidget *outputSettingsOptWidget = new QWidget(this); outputSettingsOptWidget->setContentsMargins(0, 0, 0, 0); const auto outputSettingsOptLayout = new QHBoxLayout(outputSettingsOptWidget); - outputSettingsOptLayout->setMargin(0); + outputSettingsOptLayout->setContentsMargins(0, 0, 0, 0); outputSettingsOptLayout->addWidget(mOutputSettingsProfilesButton); outputSettingsOptLayout->addWidget(mOutputSettingsButton); @@ -193,7 +192,7 @@ void RenderInstanceWidget::iniGUI() QWidget *outputDestinationWidget = new QWidget(this); outputDestinationWidget->setContentsMargins(0, 0, 0, 0); const auto outputDesinationLayout = new QHBoxLayout(outputDestinationWidget); - outputDesinationLayout->setMargin(0); + outputDesinationLayout->setContentsMargins(0, 0, 0, 0); outputDesinationLayout->addWidget(mOutputDestinationButton); outputDesinationLayout->addWidget(mOutputDestinationLineEdit); @@ -203,7 +202,6 @@ void RenderInstanceWidget::iniGUI() mContentLayout->addWidget(outputSettingsLabelWidget); - mContentLayout->setMargin(0); mContentLayout->setSpacing(0); mContentLayout->setContentsMargins(0, 0, 0, 0); } @@ -284,7 +282,11 @@ void RenderInstanceWidget::mousePressEvent(QMouseEvent *e) delAct->setData(1); delAct->setEnabled(deletable); +#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) const auto act = menu.exec(e->globalPos()); +#else + const auto act = menu.exec(e->globalPosition().toPoint()); +#endif if (act) { switch (act->data().toInt()) { case 0: @@ -489,7 +491,6 @@ void RenderInstanceWidget::updateRenderSettings() updateFromSettings(); } -#include "Private/esettings.h" OutputProfilesListButton::OutputProfilesListButton(RenderInstanceWidget *parent) : QPushButton(parent) { mParentWidget = parent; diff --git a/src/app/GUI/RenderWidgets/renderwidget.cpp b/src/app/GUI/RenderWidgets/renderwidget.cpp index ecd688854..3a23606f0 100644 --- a/src/app/GUI/RenderWidgets/renderwidget.cpp +++ b/src/app/GUI/RenderWidgets/renderwidget.cpp @@ -50,7 +50,7 @@ RenderWidget::RenderWidget(QWidget *parent) , mState(RenderState::none) { mMainLayout = new QVBoxLayout(this); - mMainLayout->setMargin(0); + mMainLayout->setContentsMargins(0, 0, 0, 0); mMainLayout->setSpacing(0); setLayout(mMainLayout); @@ -131,7 +131,7 @@ RenderWidget::RenderWidget(QWidget *parent) mContWidget->setContentsMargins(0, 0, 0, 0); mContLayout = new QVBoxLayout(mContWidget); mContLayout->setAlignment(Qt::AlignTop); - mContLayout->setMargin(0); + mContLayout->setContentsMargins(0, 0, 0, 0); mContLayout->setSpacing(0); mContWidget->setLayout(mContLayout); mScrollArea = new ScrollArea(this); diff --git a/src/app/GUI/Settings/generalsettingswidget.cpp b/src/app/GUI/Settings/generalsettingswidget.cpp index 7d92834f0..c60d7b512 100644 --- a/src/app/GUI/Settings/generalsettingswidget.cpp +++ b/src/app/GUI/Settings/generalsettingswidget.cpp @@ -67,7 +67,7 @@ GeneralSettingsWidget::GeneralSettingsWidget(QWidget *parent) mAutoSaveWidget->setContentsMargins(0, 0, 0, 0); const auto mAutoSaveLayout = new QHBoxLayout(mAutoSaveWidget); mAutoSaveLayout->setContentsMargins(0, 0, 0, 0); - mAutoSaveLayout->setMargin(0); + mAutoSaveLayout->setContentsMargins(0, 0, 0, 0); mAutoSave = new QCheckBox(tr("Enable Auto Save"), this); mAutoSave->setCheckable(true); @@ -147,7 +147,6 @@ GeneralSettingsWidget::GeneralSettingsWidget(QWidget *parent) mImportFileWidget->setContentsMargins(0, 0, 0, 0); const auto mImportFileLayout = new QHBoxLayout(mImportFileWidget); mImportFileLayout->setContentsMargins(0, 0, 0, 0); - mImportFileLayout->setMargin(0); const auto mImportFileLabel = new QLabel(tr("Default import directory"), this); mImportFileDir = new QComboBox(this); diff --git a/src/app/GUI/canvaswindow.h b/src/app/GUI/canvaswindow.h index 3e2b64011..b4899b36f 100644 --- a/src/app/GUI/canvaswindow.h +++ b/src/app/GUI/canvaswindow.h @@ -64,7 +64,7 @@ class CanvasWindow : public GLWindow, public KeyFocusTarget QWidget * const parent = nullptr); ~CanvasWindow(); Canvas *getCurrentCanvas(); - const QMatrix& getViewTransform() const + const QTransform& getViewTransform() const { return mViewTransform; } void setCurrentCanvas(Canvas * const canvas); @@ -132,7 +132,7 @@ class CanvasWindow : public GLWindow, public KeyFocusTarget Actions& mActions; QSize mOldSize{-1, -1}; - QMatrix mViewTransform; + QTransform mViewTransform; QPointF mPrevMousePos; QPointF mPrevPressPos; //bool mValidPaintTarget = false; diff --git a/src/app/GUI/graphboxeslist.cpp b/src/app/GUI/graphboxeslist.cpp index ade62e0a8..ae7ad1b8d 100644 --- a/src/app/GUI/graphboxeslist.cpp +++ b/src/app/GUI/graphboxeslist.cpp @@ -262,7 +262,7 @@ void KeysView::graphPaint(QPainter *p) { p->setRenderHint(QPainter::Antialiasing); - QMatrix transform; + QTransform transform; transform.translate(-mPixelsPerFrame*(mMinViewedFrame - 0.5), height() + mPixelsPerValUnit*mMinShownVal); transform.scale(mPixelsPerFrame, -mPixelsPerValUnit); diff --git a/src/app/GUI/keysview.cpp b/src/app/GUI/keysview.cpp index 81e61815e..7925f7d05 100644 --- a/src/app/GUI/keysview.cpp +++ b/src/app/GUI/keysview.cpp @@ -242,7 +242,7 @@ void KeysView::wheelEvent(QWheelEvent *e) } #endif - const QPoint pos = e->pos(); + const QPoint pos = e->position().toPoint(); const QPoint posU = pos + QPoint(-eSizesUI::widget/2, 0); const qreal currentHoverFrame = static_cast(posU.x()) / mPixelsPerFrame + mMinViewedFrame; // qDebug() << "currentHoverFrame" << currentHoverFrame; diff --git a/src/app/GUI/menu.cpp b/src/app/GUI/menu.cpp index 59f5858bb..db564bebf 100644 --- a/src/app/GUI/menu.cpp +++ b/src/app/GUI/menu.cpp @@ -108,7 +108,7 @@ void MainWindow::setupMenuBar() mSaveAsAct = mFileMenu->addAction(QIcon::fromTheme("disk_drive"), tr("Save As", "MenuBar_File"), this, [this]() { saveFileAs(); }, - Qt::CTRL + Qt::SHIFT + Qt::Key_S); + QStringLiteral("Ctrl+Shift+S")); mSaveAsAct->setEnabled(false); mSaveAsAct->setData(tr("Save Project As ...")); cmdAddAction(mSaveAsAct); @@ -178,7 +178,7 @@ void MainWindow::setupMenuBar() const auto redoQAct = mEditMenu->addAction(QIcon::fromTheme("loop_forwards"), tr("Redo", "MenuBar_Edit")); - redoQAct->setShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_Z); + redoQAct->setShortcut(QStringLiteral("Ctrl+Shift+Z")); mActions.redoAction->connect(redoQAct); cmdAddAction(redoQAct); @@ -410,7 +410,7 @@ void MainWindow::setupMenuBar() const auto groupQAct = mObjectMenu->addAction( tr("Group", "MenuBar_Object")); groupQAct->setIcon(QIcon::fromTheme("group")); - groupQAct->setShortcut(Qt::CTRL + Qt::Key_G); + groupQAct->setShortcut(QStringLiteral("Ctrl+G")); mActions.groupAction->connect(groupQAct); groupQAct->setData(tr("Group Selected")); cmdAddAction(groupQAct); @@ -418,7 +418,7 @@ void MainWindow::setupMenuBar() const auto ungroupQAct = mObjectMenu->addAction( tr("Ungroup", "MenuBar_Object")); ungroupQAct->setIcon(QIcon::fromTheme("group")); - ungroupQAct->setShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_G); + ungroupQAct->setShortcut(QStringLiteral("Ctrl+Shift+G")); mActions.ungroupAction->connect(ungroupQAct); cmdAddAction(ungroupQAct); @@ -426,13 +426,13 @@ void MainWindow::setupMenuBar() const auto otpQAct = mPathMenu->addAction( tr("Object to Path", "MenuBar_Path")); - otpQAct->setShortcut(Qt::SHIFT + Qt::CTRL + Qt::Key_C); + otpQAct->setShortcut(QStringLiteral("Shift+Ctrl+C")); mActions.objectsToPathAction->connect(otpQAct); cmdAddAction(otpQAct); const auto stpQAct = mPathMenu->addAction( tr("Stroke to Path", "MenuBar_Path")); - stpQAct->setShortcut(Qt::CTRL + Qt::ALT + Qt::Key_C); + stpQAct->setShortcut(QStringLiteral("Ctrl+Alt+C")); mActions.strokeToPathAction->connect(stpQAct); cmdAddAction(stpQAct); @@ -498,7 +498,7 @@ void MainWindow::setupMenuBar() const auto qAct = mPathMenu->addAction( tr("Break Apart", "MenuBar_Path")); qAct->setIcon(QIcon::fromTheme("booleans_break_apart")); - qAct->setShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_K); + qAct->setShortcut(QStringLiteral("Ctrl+Shift+K")); mActions.pathsBreakApartAction->connect(qAct); cmdAddAction(qAct); } diff --git a/src/app/GUI/timelinedockwidget.cpp b/src/app/GUI/timelinedockwidget.cpp index eb32b1484..e2577d8a6 100644 --- a/src/app/GUI/timelinedockwidget.cpp +++ b/src/app/GUI/timelinedockwidget.cpp @@ -82,7 +82,7 @@ TimelineDockWidget::TimelineDockWidget(Document& document, mMainLayout = new QVBoxLayout(this); setLayout(mMainLayout); mMainLayout->setSpacing(0); - mMainLayout->setMargin(0); + mMainLayout->setContentsMargins(0, 0, 0, 0); mFrameRewindAct = new QAction(QIcon::fromTheme("rewind"), tr("Rewind"), diff --git a/src/app/GUI/timelinewidget.cpp b/src/app/GUI/timelinewidget.cpp index 06a976866..b9da279e6 100644 --- a/src/app/GUI/timelinewidget.cpp +++ b/src/app/GUI/timelinewidget.cpp @@ -25,8 +25,8 @@ #include #include -#include #include +#include #include "timelinewidget.h" #include "widgets/framescrollbar.h" @@ -58,11 +58,10 @@ TimelineWidget::TimelineWidget(Document &document, mMainLayout = new QGridLayout(this); mMainLayout->setSpacing(0); - mMainLayout->setMargin(0); + mMainLayout->setContentsMargins(0, 0, 0, 0); mMenuLayout = new QHBoxLayout(); //mMenuLayout->setSpacing(0); - mMenuLayout->setMargin(0); mBoxesListMenuBar = new FakeMenuBar(this); mBoxesListMenuBar->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Preferred); @@ -260,7 +259,7 @@ TimelineWidget::TimelineWidget(Document &document, mFrameScrollBar->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Preferred); - const qreal dpi = QApplication::desktop()->logicalDpiX() / 96.0; + const qreal dpi = this->screen()->logicalDotsPerInchX() / 96.0; mFrameScrollBar->setFixedHeight(40 * dpi); // connect(MemoryHandler::sGetInstance(), &MemoryHandler::memoryFreed, @@ -447,7 +446,7 @@ void TimelineWidget::readStateXEV(XevReadBoxesHandler& boxReadHandler, const auto frameRangeStr = ele.attribute("frameRange"); const auto frameStr = ele.attribute("frame"); - const auto frameRangeValStrs = frameRangeStr.splitRef(' '); + const auto frameRangeValStrs = frameRangeStr.split(' '); if(frameRangeValStrs.count() != 2) RuntimeThrow("Invalid frame range value " + frameRangeStr); diff --git a/src/app/GUI/window.cpp b/src/app/GUI/window.cpp index 601cbdfbe..b5bd2b60b 100644 --- a/src/app/GUI/window.cpp +++ b/src/app/GUI/window.cpp @@ -52,7 +52,7 @@ Window::Window(QWidget *parent, setContentsMargins(0, 0, 0, 0); mLayout = new QVBoxLayout(this); - mLayout->setMargin(0); + mLayout->setContentsMargins(0, 0, 0, 0); mLayout->addWidget(child); loadState(visible); diff --git a/src/app/main.cpp b/src/app/main.cpp index 1473a9255..f1f58143b 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -24,7 +24,6 @@ #include #include #include -#include #include "hardwareinfo.h" #include "Private/esettings.h" diff --git a/src/app/renderhandler.cpp b/src/app/renderhandler.cpp index 50166ce83..35647ced5 100644 --- a/src/app/renderhandler.cpp +++ b/src/app/renderhandler.cpp @@ -54,8 +54,11 @@ RenderHandler::RenderHandler(Document &document, this, &RenderHandler::nextPreviewFrame); connect(mPreviewFPSTimer, &QTimer::timeout, this, &RenderHandler::audioPushTimerExpired); + +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) connect(audioHandler.audioOutput(), &QAudioOutput::notify, this, &RenderHandler::audioPushTimerExpired); +#endif const auto vidEmitter = videoEncoder.getEmitter(); // connect(vidEmitter, &VideoEncoderEmitter::encodingStarted, diff --git a/src/cmake/friction-common.cmake b/src/cmake/friction-common.cmake index 12bc5a870..05638164f 100644 --- a/src/cmake/friction-common.cmake +++ b/src/cmake/friction-common.cmake @@ -71,20 +71,33 @@ if(MSVC) endif() find_package(PkgConfig QUIET) -find_package(QT NAMES Qt5 COMPONENTS Core REQUIRED) -find_package( - Qt${QT_VERSION_MAJOR} - 5.15.13 - COMPONENTS - Gui - Widgets - OpenGL - Multimedia - Qml - Xml - #Svg - REQUIRED -) + +option(USE_QT6 "Use Qt6 (experimental)" OFF) +if(USE_QT6) + set(QT_VERSION_MAJOR 6) + find_package(Qt6 6.4.2 REQUIRED COMPONENTS + Core + Gui + Widgets + OpenGLWidgets + OpenGL + Multimedia + Qml + Xml + ) +else() + set(QT_VERSION_MAJOR 5) + find_package(Qt5 5.15.13 REQUIRED COMPONENTS + Core + Gui + Widgets + OpenGL + Multimedia + Qml + Xml + ) +endif() + set(QT_LIBRARIES Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Gui @@ -95,6 +108,9 @@ set(QT_LIBRARIES Qt${QT_VERSION_MAJOR}::Xml #Qt${QT_VERSION_MAJOR}::Svg ) +if(USE_QT6) + list(APPEND QT_LIBRARIES Qt${QT_VERSION_MAJOR}::OpenGLWidgets) +endif() if(WIN32) set(SKIA_LIBRARIES diff --git a/src/core/Animators/SmartPath/listofnodes.cpp b/src/core/Animators/SmartPath/listofnodes.cpp index 9a6d6d559..ad2bdf837 100644 --- a/src/core/Animators/SmartPath/listofnodes.cpp +++ b/src/core/Animators/SmartPath/listofnodes.cpp @@ -114,7 +114,7 @@ void ListOfNodes::prependNodes(ListOfNodes &&src) { updateNodeIds(); } -void ListOfNodes::applyTransform(const QMatrix &transform) { +void ListOfNodes::applyTransform(const QTransform &transform) { for(const auto& node : mList) node->applyTransform(transform); } diff --git a/src/core/Animators/SmartPath/listofnodes.h b/src/core/Animators/SmartPath/listofnodes.h index 63497908a..539d080aa 100644 --- a/src/core/Animators/SmartPath/listofnodes.h +++ b/src/core/Animators/SmartPath/listofnodes.h @@ -88,7 +88,7 @@ class CORE_EXPORT ListOfNodes { void appendNodes(ListOfNodes&& src); void prependNodes(ListOfNodes&& src); - void applyTransform(const QMatrix &transform); + void applyTransform(const QTransform &transform); typedef QList>::const_iterator const_iterator; typedef QList>::iterator iterator; diff --git a/src/core/Animators/SmartPath/node.cpp b/src/core/Animators/SmartPath/node.cpp index f3fb8663e..7b4220464 100644 --- a/src/core/Animators/SmartPath/node.cpp +++ b/src/core/Animators/SmartPath/node.cpp @@ -109,7 +109,7 @@ NormalNodeData Node::normalData() const { mCtrlsMode, mC0, mP1, mC2}; } -void Node::applyTransform(const QMatrix &transform) { +void Node::applyTransform(const QTransform &transform) { mC0 = transform.map(mC0); mP1 = transform.map(mP1); mC2 = transform.map(mC2); diff --git a/src/core/Animators/SmartPath/node.h b/src/core/Animators/SmartPath/node.h index 35b70d57c..fb526004c 100644 --- a/src/core/Animators/SmartPath/node.h +++ b/src/core/Animators/SmartPath/node.h @@ -106,7 +106,7 @@ struct CORE_EXPORT Node { NormalNodeData normalData() const; - void applyTransform(const QMatrix &transform); + void applyTransform(const QTransform &transform); void disableUnnecessaryCtrls(); diff --git a/src/core/Animators/SmartPath/nodelist.h b/src/core/Animators/SmartPath/nodelist.h index 8a14d60fe..035ed8d85 100644 --- a/src/core/Animators/SmartPath/nodelist.h +++ b/src/core/Animators/SmartPath/nodelist.h @@ -117,7 +117,7 @@ class CORE_EXPORT NodeList { void updateDissolvedNodePosition(const int nodeId); void updateDissolvedNodePosition(const int nodeId, Node * const node); - void applyTransform(const QMatrix &transform) + void applyTransform(const QTransform &transform) { mNodes.applyTransform(transform); } bool read(eReadStream& src); diff --git a/src/core/Animators/SmartPath/smartpath.cpp b/src/core/Animators/SmartPath/smartpath.cpp index 9707eacb5..6a25a885f 100644 --- a/src/core/Animators/SmartPath/smartpath.cpp +++ b/src/core/Animators/SmartPath/smartpath.cpp @@ -392,7 +392,7 @@ QString SmartPath::toXEV() const { return result; } -void SmartPath::loadXEV(const QStringRef& xev) { +void SmartPath::loadXEV(const QStringView& xev) { ListOfNodes listOfNodes; const auto nodes = xev.split(',', Qt::SkipEmptyParts); diff --git a/src/core/Animators/SmartPath/smartpath.h b/src/core/Animators/SmartPath/smartpath.h index edb5b18e6..a65528e72 100644 --- a/src/core/Animators/SmartPath/smartpath.h +++ b/src/core/Animators/SmartPath/smartpath.h @@ -146,7 +146,7 @@ class CORE_EXPORT SmartPath { NodeList getAndClearLastDetached(); - void applyTransform(const QMatrix &transform) + void applyTransform(const QTransform &transform) { mNodesList.applyTransform(transform); } bool read(eReadStream& src) @@ -155,7 +155,7 @@ class CORE_EXPORT SmartPath { { return mNodesList.write(dst); } QString toXEV() const; - void loadXEV(const QStringRef& xev); + void loadXEV(const QStringView& xev); const NodeList& getNodesRef() const { return mNodesList; } diff --git a/src/core/Animators/SmartPath/smartpathanimator.cpp b/src/core/Animators/SmartPath/smartpathanimator.cpp index db93da6fe..be1b4b3c0 100644 --- a/src/core/Animators/SmartPath/smartpathanimator.cpp +++ b/src/core/Animators/SmartPath/smartpathanimator.cpp @@ -127,7 +127,7 @@ void SmartPathAnimator::prp_readPropertyXEV_impl( const int modeInt = XmlExportHelpers::stringToInt(modeStr); mMode = static_cast(modeInt); - readValuesXEV(ele, [closed](SmartPath& path, const QStringRef& str) { + readValuesXEV(ele, [closed](SmartPath& path, const QStringView& str) { path.loadXEV(str); path.setClosed(closed); }); @@ -226,7 +226,7 @@ qsptr SmartPathAnimator::createFromDetached() { return newAnim; } -void SmartPathAnimator::applyTransform(const QMatrix &transform) { +void SmartPathAnimator::applyTransform(const QTransform &transform) { const auto& keys = anim_getKeys(); for(const auto &key : keys) { const auto spKey = static_cast(key); diff --git a/src/core/Animators/SmartPath/smartpathanimator.h b/src/core/Animators/SmartPath/smartpathanimator.h index efaad8b8e..f138d5eff 100644 --- a/src/core/Animators/SmartPath/smartpathanimator.h +++ b/src/core/Animators/SmartPath/smartpathanimator.h @@ -112,7 +112,7 @@ class CORE_EXPORT SmartPathAnimator : public SmartPathAnimatorBase { qsptr createFromDetached(); - void applyTransform(const QMatrix &transform); + void applyTransform(const QTransform &transform); const SkPath& getCurrentPath(); diff --git a/src/core/Animators/SmartPath/smartpathcollection.cpp b/src/core/Animators/SmartPath/smartpathcollection.cpp index dd20617ec..64fd02c14 100644 --- a/src/core/Animators/SmartPath/smartpathcollection.cpp +++ b/src/core/Animators/SmartPath/smartpathcollection.cpp @@ -157,7 +157,7 @@ SkPath SmartPathCollection::getPathAtRelFrame(const qreal relFrame) const { return result; } -void SmartPathCollection::applyTransform(const QMatrix &transform) const { +void SmartPathCollection::applyTransform(const QTransform &transform) const { const int iMax = ca_getNumberOfChildren() - 1; for(int i = 0; i <= iMax; i++) { const auto path = ca_getChildAt(i); diff --git a/src/core/Animators/SmartPath/smartpathcollection.h b/src/core/Animators/SmartPath/smartpathcollection.h index 4afbf2aa2..c523e07a4 100644 --- a/src/core/Animators/SmartPath/smartpathcollection.h +++ b/src/core/Animators/SmartPath/smartpathcollection.h @@ -57,7 +57,7 @@ class CORE_EXPORT SmartPathCollection : public SmartPathCollectionBase { SkPath getPathAtRelFrame(const qreal relFrame) const; - void applyTransform(const QMatrix &transform) const; + void applyTransform(const QTransform &transform) const; void loadSkPath(const SkPath& path); diff --git a/src/core/Animators/animatort.h b/src/core/Animators/animatort.h index e113905d4..6ae05b9c1 100644 --- a/src/core/Animators/animatort.h +++ b/src/core/Animators/animatort.h @@ -39,7 +39,7 @@ class AnimatorT : public BasedAnimatorT, T> { AnimatorT(const QString& name) : BasedAnimatorT, T>(name) {} - using StringToValue = std::function; + using StringToValue = std::function; void readValuesXEV(const QDomElement& ele, const StringToValue& strToVal); using ValueToString = std::function; void writeValuesXEV(QDomElement& ele, const ValueToString& valToStr) const; @@ -55,8 +55,8 @@ void AnimatorT::readValuesXEV( const QString valueStrs = ele.attribute("values"); const QString frameStrs = ele.attribute("frames"); - const auto values = valueStrs.splitRef(';'); - const auto framess = frameStrs.splitRef(';'); + const auto values = valueStrs.split(';'); + const auto framess = frameStrs.split(';'); if(values.count() != framess.count()) RuntimeThrow("The values count does not match the frames count"); const int iMax = values.count(); @@ -64,7 +64,7 @@ void AnimatorT::readValuesXEV( const auto& value = values[i]; const auto frames = framess[i].split(' '); if(frames.count() != 3) { - RuntimeThrow("Invalid frames count " + framess[i].toString()); + RuntimeThrow("Invalid frames count " + framess[i]); } const int frame = XmlExportHelpers::stringToInt(frames[1]); @@ -75,7 +75,7 @@ void AnimatorT::readValuesXEV( } } else if(ele.hasAttribute("value")) { const QString value = ele.attribute("value"); - strToVal(this->mCurrentValue, &value); + strToVal(this->mCurrentValue, value); } else RuntimeThrow("No values/frames and no value provided"); } diff --git a/src/core/Animators/gradientpoints.cpp b/src/core/Animators/gradientpoints.cpp index 449a60574..86c4c5462 100644 --- a/src/core/Animators/gradientpoints.cpp +++ b/src/core/Animators/gradientpoints.cpp @@ -51,7 +51,7 @@ void GradientPoints::enable() { mEnabled = true; } -void GradientPoints::applyTransform(const QMatrix &transform) { +void GradientPoints::applyTransform(const QTransform &transform) { mStartAnimator->applyTransform(transform); mEndAnimator->applyTransform(transform); } diff --git a/src/core/Animators/gradientpoints.h b/src/core/Animators/gradientpoints.h index 71cb3d24f..e9b87ffd9 100644 --- a/src/core/Animators/gradientpoints.h +++ b/src/core/Animators/gradientpoints.h @@ -47,7 +47,7 @@ class CORE_EXPORT GradientPoints : public StaticComplexAnimator { void setColors(const QColor &startColor, const QColor &endColor); void setPositions(const QPointF &startPos, const QPointF &endPos); - void applyTransform(const QMatrix &transform);; + void applyTransform(const QTransform &transform);; QPointF getStartPointAtRelFrame(const int relFrame); QPointF getEndPointAtRelFrame(const int relFrame); diff --git a/src/core/Animators/interoptimalanimatort.h b/src/core/Animators/interoptimalanimatort.h index 89b5576d1..4b7bc08c8 100644 --- a/src/core/Animators/interoptimalanimatort.h +++ b/src/core/Animators/interoptimalanimatort.h @@ -74,7 +74,7 @@ class InterOptimalAnimatorT : public GraphAnimator { bool resultUpToDate() const { return mResultUpToDate; } void setResultUpToDate(const bool upToDate) { mResultUpToDate = upToDate; } - using StringToValue = std::function; + using StringToValue = std::function; void readValuesXEV(const QDomElement& ele, const StringToValue& strToVal); using ValueToString = std::function; void writeValuesXEV(QDomElement& ele, const ValueToString& valToStr) const; @@ -224,10 +224,10 @@ void InterOptimalAnimatorT::readValuesXEV( const QString ctrlModeStrs = ele.attribute("ctrlModes"); const QString ctrlValueStrs = ele.attribute("ctrlValues"); - const auto values = valueStrs.splitRef(';'); - const auto framess = frameStrs.splitRef(';'); - const auto ctrlModes = ctrlModeStrs.splitRef(';'); - const auto ctrlValuess = ctrlValueStrs.splitRef(';'); + const auto values = valueStrs.split(';'); + const auto framess = frameStrs.split(';'); + const auto ctrlModes = ctrlModeStrs.split(';'); + const auto ctrlValuess = ctrlValueStrs.split(';'); if(values.count() != framess.count()) RuntimeThrow("The values count does not match the frames count"); if(ctrlModes.count() != framess.count()) @@ -239,11 +239,11 @@ void InterOptimalAnimatorT::readValuesXEV( const auto& value = values[i]; const auto frames = framess[i].split(' '); if(frames.count() != 3) { - RuntimeThrow("Invalid frames count " + framess[i].toString()); + RuntimeThrow("Invalid frames count " + framess[i]); } const auto ctrlValues = ctrlValuess[i].split(' '); if(ctrlValues.count() != 2) { - RuntimeThrow("Invalid ctrlValues count " + ctrlValuess[i].toString()); + RuntimeThrow("Invalid ctrlValues count " + ctrlValuess[i]); } const auto ctrlModeStr = ctrlModes[i]; const auto ctrlMode = XmlExportHelpers::stringToEnum( @@ -280,7 +280,7 @@ void InterOptimalAnimatorT::readValuesXEV( } else if(ele.hasAttribute("value")) { const QString value = ele.attribute("value"); auto& baseValue = this->baseValue(); - strToVal(baseValue, &value); + strToVal(baseValue, value); } else RuntimeThrow("No values/frames and no value provided"); prp_afterWholeInfluenceRangeChanged(); diff --git a/src/core/Animators/interpolationanimatort.h b/src/core/Animators/interpolationanimatort.h index e0a4b5395..d3845ffe3 100644 --- a/src/core/Animators/interpolationanimatort.h +++ b/src/core/Animators/interpolationanimatort.h @@ -54,7 +54,7 @@ class InterpolationAnimatorT : const K * const prevKey, const K * const nextKey) const override; - using StringToValue = std::function; + using StringToValue = std::function; void readValuesXEV(const QDomElement& ele, const StringToValue& strToVal); using ValueToString = std::function; void writeValuesXEV(QDomElement& ele, const ValueToString& valToStr) const; @@ -94,10 +94,10 @@ void InterpolationAnimatorT::readValuesXEV( const QString ctrlModeStrs = ele.attribute("ctrlModes"); const QString ctrlValueStrs = ele.attribute("ctrlValues"); - const auto values = valueStrs.splitRef(';'); - const auto framess = frameStrs.splitRef(';'); - const auto ctrlModes = ctrlModeStrs.splitRef(';'); - const auto ctrlValuess = ctrlValueStrs.splitRef(';'); + const auto values = valueStrs.split(';'); + const auto framess = frameStrs.split(';'); + const auto ctrlModes = ctrlModeStrs.split(';'); + const auto ctrlValuess = ctrlValueStrs.split(';'); if(values.count() != framess.count()) RuntimeThrow("The values count does not match the frames count"); @@ -110,11 +110,11 @@ void InterpolationAnimatorT::readValuesXEV( const auto& value = values[i]; const auto frames = framess[i].split(' '); if(frames.count() != 3) { - RuntimeThrow("Invalid frames count " + framess[i].toString()); + RuntimeThrow("Invalid frames count " + framess[i]); } const auto ctrlValues = ctrlValuess[i].split(' '); if(ctrlValues.count() != 2) { - RuntimeThrow("Invalid ctrlValues count " + ctrlValuess[i].toString()); + RuntimeThrow("Invalid ctrlValues count " + ctrlValuess[i]); } const auto ctrlModeStr = ctrlModes[i]; const auto ctrlMode = XmlExportHelpers::stringToEnum( @@ -150,7 +150,7 @@ void InterpolationAnimatorT::readValuesXEV( } } else if(ele.hasAttribute("value")) { const QString value = ele.attribute("value"); - strToVal(this->mCurrentValue, &value); + strToVal(this->mCurrentValue, value); } else RuntimeThrow("No values/frames and no value provided"); } diff --git a/src/core/Animators/paintsettingsanimator.cpp b/src/core/Animators/paintsettingsanimator.cpp index e6079eb04..2acdea9f2 100644 --- a/src/core/Animators/paintsettingsanimator.cpp +++ b/src/core/Animators/paintsettingsanimator.cpp @@ -228,7 +228,7 @@ void PaintSettingsAnimator::setGradientType(const GradientType type) { prp_afterWholeInfluenceRangeChanged(); } -QMatrix PaintSettingsAnimator::getGradientTransform(const qreal relFrame) const { +QTransform PaintSettingsAnimator::getGradientTransform(const qreal relFrame) const { return mGradientTransform->getRelativeTransformAtFrame(relFrame); } @@ -269,7 +269,7 @@ void PaintSettingsAnimator::duplicatePaintSettingsNotAnim( } } -void PaintSettingsAnimator::applyTransform(const QMatrix &transform) { +void PaintSettingsAnimator::applyTransform(const QTransform &transform) { mGradientPoints->applyTransform(transform); } @@ -475,13 +475,13 @@ void UpdatePaintSettings::updateGradient(const QGradientStops &stops, const QPointF &start, const QPointF &finalStop, const GradientType gradientType, - const QMatrix& transform) { + const QTransform& transform) { const int nStops = stops.count(); QVector gradPoints(nStops); QVector gradColors(nStops); QVector gradPos(nStops); - const QMatrix invertedTransform = transform.inverted(); + const QTransform invertedTransform = transform.inverted(); const QPointF mappedStart = invertedTransform.map(start); const QPointF mappedEnd = invertedTransform.map(finalStop); diff --git a/src/core/Animators/paintsettingsanimator.h b/src/core/Animators/paintsettingsanimator.h index eca22019b..8a51ee3cd 100644 --- a/src/core/Animators/paintsettingsanimator.h +++ b/src/core/Animators/paintsettingsanimator.h @@ -77,7 +77,7 @@ class CORE_EXPORT PaintSettingsAnimator : public ComplexAnimator { GradientType getGradientType() { return mGradientType; } void setGradientType(const GradientType type); - QMatrix getGradientTransform(const qreal relFrame) const; + QTransform getGradientTransform(const qreal relFrame) const; void setGradientTransform(const TransformValues& transform); GradientPoints* getGradientPoints() const @@ -86,7 +86,7 @@ class CORE_EXPORT PaintSettingsAnimator : public ComplexAnimator { void setupPaintSettings(const qreal relFrame, UpdatePaintSettings& settings); void duplicatePaintSettingsNotAnim(PaintSettingsAnimator * const settings); - void applyTransform(const QMatrix& transform); + void applyTransform(const QTransform& transform); signals: void paintTypeChanged(const PaintType &type); @@ -141,7 +141,7 @@ struct CORE_EXPORT UpdatePaintSettings { const QPointF &start, const QPointF &finalStop, const GradientType gradientType, - const QMatrix &transform); + const QTransform &transform); PaintType fPaintType; QColor fPaintColor; sk_sp fGradient; diff --git a/src/core/Animators/qcubicsegment1danimator.cpp b/src/core/Animators/qcubicsegment1danimator.cpp index 5a3a57562..56cf0ccf1 100644 --- a/src/core/Animators/qcubicsegment1danimator.cpp +++ b/src/core/Animators/qcubicsegment1danimator.cpp @@ -32,7 +32,7 @@ qCubicSegment1DAnimator::qCubicSegment1DAnimator(const QString &name) : void qCubicSegment1DAnimator::prp_readPropertyXEV_impl( const QDomElement& ele, const XevImporter& imp) { Q_UNUSED(imp) - readValuesXEV(ele, [](qCubicSegment1D& seg, const QStringRef& str) { + readValuesXEV(ele, [](qCubicSegment1D& seg, const QStringView& str) { const auto valueStrs = str.split(' ', Qt::SkipEmptyParts); if(valueStrs.count() == 4) { const qreal p0 = XmlExportHelpers::stringToDouble(valueStrs[0]); diff --git a/src/core/Animators/qpointfanimator.cpp b/src/core/Animators/qpointfanimator.cpp index c006d3b79..4f513e17b 100644 --- a/src/core/Animators/qpointfanimator.cpp +++ b/src/core/Animators/qpointfanimator.cpp @@ -211,7 +211,7 @@ qreal QPointFAnimator::getSavedYValue() { return mYAnimator->getSavedBaseValue(); } -void QPointFAnimator::applyTransform(const QMatrix &transform) { +void QPointFAnimator::applyTransform(const QTransform &transform) { mXAnimator->anim_coordinateKeysWith(mYAnimator.get()); const auto& xKeys = mXAnimator->anim_getKeys(); const auto& yKeys = mYAnimator->anim_getKeys(); diff --git a/src/core/Animators/qpointfanimator.h b/src/core/Animators/qpointfanimator.h index e9eb50eb5..6e19d175c 100644 --- a/src/core/Animators/qpointfanimator.h +++ b/src/core/Animators/qpointfanimator.h @@ -94,7 +94,7 @@ class CORE_EXPORT QPointFAnimator : public StaticComplexAnimator { qreal getEffectiveYValue(); qreal getEffectiveYValue(const qreal relFrame); - void applyTransform(const QMatrix &transform); + void applyTransform(const QTransform &transform); void saveQPointFSVG(SvgExporter& exp, QDomElement& parent, diff --git a/src/core/Animators/qrealanimator.cpp b/src/core/Animators/qrealanimator.cpp index e6380ba60..f07252776 100644 --- a/src/core/Animators/qrealanimator.cpp +++ b/src/core/Animators/qrealanimator.cpp @@ -935,9 +935,9 @@ void QrealAnimator::prp_readPropertyXEV_impl( if(!values.isEmpty()) { const auto allFrames = ele.attribute("frames"); const auto ctrlModes = ele.attribute("ctrlModes"); - const auto keysValues = values.splitRef(';'); - const auto keysFrames = allFrames.splitRef(';'); - const auto keysCtrlModes = ctrlModes.splitRef(';'); + const auto keysValues = values.split(';'); + const auto keysFrames = allFrames.split(';'); + const auto keysCtrlModes = ctrlModes.split(';'); if(keysValues.count() != keysFrames.count()) RuntimeThrow("The values count does not match the frames count"); if(keysCtrlModes.count() != keysFrames.count()) @@ -946,11 +946,11 @@ void QrealAnimator::prp_readPropertyXEV_impl( for(int i = 0; i < iMax; i++) { const auto values = keysValues[i].split(' '); if(values.count() != 3) { - RuntimeThrow("Invalid values count " + values[i].toString()); + RuntimeThrow("Invalid values count " + values[i]); } const auto frames = keysFrames[i].split(' '); if(frames.count() != 3) { - RuntimeThrow("Invalid frames count " + frames[i].toString()); + RuntimeThrow("Invalid frames count " + frames[i]); } const auto ctrlModeStr = keysCtrlModes[i]; const auto ctrlMode = XmlExportHelpers::stringToEnum( diff --git a/src/core/Animators/qstringanimator.cpp b/src/core/Animators/qstringanimator.cpp index 0d506eefa..601091880 100644 --- a/src/core/Animators/qstringanimator.cpp +++ b/src/core/Animators/qstringanimator.cpp @@ -36,7 +36,7 @@ QStringAnimator::QStringAnimator(const QString &name) : QDomElement createTextElement(SvgExporter& exp, const QString& text) { auto textEle = exp.createElement("text"); - const QStringList lines = text.split(QRegExp("\n|\r\n|\r")); + const QStringList lines = text.split(QRegularExpression("\n|\r\n|\r")); for(int i = 0; i < lines.count(); i++) { const auto& line = lines.at(i); auto tspan = exp.createElement("tspan"); @@ -79,9 +79,9 @@ void QStringAnimator::prp_readPropertyXEV_impl( const QDomElement& ele, const XevImporter& imp) { if(ele.hasAttribute("frames")) { const auto framesStr = ele.attribute("frames"); - const auto frameStrs = framesStr.splitRef(' ', Qt::SkipEmptyParts); + const auto frameStrs = framesStr.split(' ', Qt::SkipEmptyParts); - for(const QStringRef& frame : frameStrs) { + for(const QString& frame : frameStrs) { const int iFrame = XmlExportHelpers::stringToInt(frame); imp.processAsset(frame + ".txt", [&](QIODevice* const src) { QString value; diff --git a/src/core/Animators/transformanimator.cpp b/src/core/Animators/transformanimator.cpp index 21d96460b..476e2dfe7 100644 --- a/src/core/Animators/transformanimator.cpp +++ b/src/core/Animators/transformanimator.cpp @@ -178,10 +178,10 @@ SkPoint BasicTransformAnimator::mapFromParent(const SkPoint &parentRelPos) const return toSkPoint(mapFromParent(toQPointF(parentRelPos))); } -QMatrix BasicTransformAnimator::getRelativeTransformAtFrame( - const qreal relFrame, QMatrix* postTransform) const { +QTransform BasicTransformAnimator::getRelativeTransformAtFrame( + const qreal relFrame, QTransform* postTransform) const { Q_UNUSED(postTransform) - QMatrix matrix; + QTransform matrix; matrix.translate(mPosAnimator->getEffectiveXValue(relFrame), mPosAnimator->getEffectiveYValue(relFrame)); @@ -205,7 +205,7 @@ void BasicTransformAnimator::setRelativePos(const QPointF &relPos) { void BasicTransformAnimator::rotateRelativeToSavedValue(const qreal rotRel, const QPointF &pivot) { - QMatrix matrix; + QTransform matrix; matrix.translate(pivot.x(), pivot.y()); matrix.rotate(rotRel); matrix.translate(-pivot.x() + mPosAnimator->getSavedXValue(), @@ -250,15 +250,15 @@ bool BasicTransformAnimator::rotationFlipped() const { return mInheritedTransform.m11() * mInheritedTransform.m22() < 0.; } -const QMatrix &BasicTransformAnimator::getInheritedTransform() const { +const QTransform &BasicTransformAnimator::getInheritedTransform() const { return mInheritedTransform; } -const QMatrix &BasicTransformAnimator::getTotalTransform() const { +const QTransform &BasicTransformAnimator::getTotalTransform() const { return mTotalTransform; } -const QMatrix &BasicTransformAnimator::getRelativeTransform() const { +const QTransform &BasicTransformAnimator::getRelativeTransform() const { return mRelTransform; } @@ -275,7 +275,7 @@ void BasicTransformAnimator::setParentTransformAnimator( void BasicTransformAnimator::scaleRelativeToSavedValue(const qreal sx, const qreal sy, const QPointF &pivot) { - QMatrix matrix; + QTransform matrix; matrix.translate(pivot.x(), pivot.y()); matrix.rotate(mRotAnimator->getEffectiveValue()); matrix.scale(sx, sy); @@ -299,7 +299,7 @@ QrealAnimator *BasicTransformAnimator::getRotAnimator() const { return mRotAnimator.get(); } -QMatrix BasicTransformAnimator::getInheritedTransformAtFrame( +QTransform BasicTransformAnimator::getInheritedTransformAtFrame( const qreal relFrame) const { if(mParentTransform) { const qreal absFrame = prp_relFrameToAbsFrameF(relFrame); @@ -307,11 +307,11 @@ QMatrix BasicTransformAnimator::getInheritedTransformAtFrame( mParentTransform->prp_absFrameToRelFrameF(absFrame); return mParentTransform->getTotalTransformAtFrame(parentRelFrame); } else { - return QMatrix(); + return QTransform(); } } -QMatrix BasicTransformAnimator::getTotalTransformAtFrame( +QTransform BasicTransformAnimator::getTotalTransformAtFrame( const qreal relFrame) const { if(mParentTransform) { const qreal absFrame = prp_relFrameToAbsFrameF(relFrame); @@ -494,7 +494,7 @@ void AdvancedTransformAnimator::shearRelativeToSavedValue(const qreal shearXBy, const qreal shearYBy, const QPointF &pivot) { - QMatrix matrix; + QTransform matrix; matrix.translate(pivot.x(), pivot.y()); matrix.rotate(mRotAnimator->getEffectiveValue()); matrix.scale(mScaleAnimator->getEffectiveXValue(), mScaleAnimator->getEffectiveYValue()); @@ -519,12 +519,12 @@ void AdvancedTransformAnimator::startTransformSkipOpacity() { startShearTransform(); } -QMatrix valuesToMatrix(const qreal pivotX, const qreal pivotY, +QTransform valuesToMatrix(const qreal pivotX, const qreal pivotY, const qreal posX, const qreal posY, const qreal rot, const qreal scaleX, const qreal scaleY, const qreal shearX, const qreal shearY) { - QMatrix matrix; + QTransform matrix; matrix.translate(pivotX + posX, pivotY + posY); matrix.rotate(rot); matrix.scale(scaleX, scaleY); @@ -541,7 +541,7 @@ void AdvancedTransformAnimator::applyTransformEffects( qreal& rot, qreal& scaleX, qreal& scaleY, qreal& shearX, qreal& shearY, - QMatrix& postTransform) const { + QTransform& postTransform) const { const auto parent = getFirstAncestor(); if(!parent) return; parent->applyTransformEffects(relFrame, @@ -561,7 +561,7 @@ void AdvancedTransformAnimator::setValues(const TransformValues &values) { setShear(values.fShearX, values.fShearY); } -QMatrix AdvancedTransformAnimator::getRotScaleShearTransform() { +QTransform AdvancedTransformAnimator::getRotScaleShearTransform() { qreal pivotX = mPivotAnimator->getEffectiveXValue(); qreal pivotY = mPivotAnimator->getEffectiveYValue(); @@ -577,7 +577,7 @@ QMatrix AdvancedTransformAnimator::getRotScaleShearTransform() { qreal shearY = mShearAnimator->getEffectiveYValue(); - QMatrix matrix = valuesToMatrix(pivotX, pivotY, + QTransform matrix = valuesToMatrix(pivotX, pivotY, posX, posY, rot, scaleX, scaleY, @@ -586,8 +586,8 @@ QMatrix AdvancedTransformAnimator::getRotScaleShearTransform() { return matrix; } -QMatrix AdvancedTransformAnimator::getRelativeTransformAtFrame( - const qreal relFrame, QMatrix* postTransform) const { +QTransform AdvancedTransformAnimator::getRelativeTransformAtFrame( + const qreal relFrame, QTransform* postTransform) const { qreal pivotX = mPivotAnimator->getEffectiveXValue(relFrame); qreal pivotY = mPivotAnimator->getEffectiveYValue(relFrame); @@ -602,7 +602,7 @@ QMatrix AdvancedTransformAnimator::getRelativeTransformAtFrame( qreal shearX = mShearAnimator->getEffectiveXValue(relFrame); qreal shearY = mShearAnimator->getEffectiveYValue(relFrame); - QMatrix postTransformT; + QTransform postTransformT; applyTransformEffects(relFrame, pivotX, pivotY, diff --git a/src/core/Animators/transformanimator.h b/src/core/Animators/transformanimator.h index ee662a615..c0359b35e 100644 --- a/src/core/Animators/transformanimator.h +++ b/src/core/Animators/transformanimator.h @@ -30,7 +30,7 @@ #include "../skia/skiaincludes.h" #include "transformvalues.h" -#include +#include class TransformUpdater; class BoxPathPoint; @@ -44,10 +44,10 @@ class CORE_EXPORT BasicTransformAnimator : public StaticComplexAnimator { BasicTransformAnimator(); public: virtual void reset(); - virtual QMatrix getRelativeTransformAtFrame( - const qreal relFrame, QMatrix* postTransform = nullptr) const; - virtual QMatrix getInheritedTransformAtFrame(const qreal relFrame) const; - virtual QMatrix getTotalTransformAtFrame(const qreal relFrame) const; + virtual QTransform getRelativeTransformAtFrame( + const qreal relFrame, QTransform* postTransform = nullptr) const; + virtual QTransform getInheritedTransformAtFrame(const qreal relFrame) const; + virtual QTransform getTotalTransformAtFrame(const qreal relFrame) const; FrameRange prp_getIdenticalRelRange(const int relFrame) const; @@ -96,9 +96,9 @@ class CORE_EXPORT BasicTransformAnimator : public StaticComplexAnimator { void updateRelativeTransform(const UpdateReason reason); void updateInheritedTransform(const UpdateReason reason); - const QMatrix &getInheritedTransform() const; - const QMatrix &getTotalTransform() const; - const QMatrix &getRelativeTransform() const; + const QTransform &getInheritedTransform() const; + const QTransform &getTotalTransform() const; + const QTransform &getRelativeTransform() const; void setParentTransformAnimator(BasicTransformAnimator *parent); @@ -112,10 +112,10 @@ class CORE_EXPORT BasicTransformAnimator : public StaticComplexAnimator { protected: QList> mChildBoxes; - QMatrix mRelTransform; - QMatrix mPostTransform; - QMatrix mInheritedTransform; - QMatrix mTotalTransform; + QTransform mRelTransform; + QTransform mPostTransform; + QTransform mInheritedTransform; + QTransform mTotalTransform; ConnContextQPtr mParentTransform; @@ -138,8 +138,8 @@ class CORE_EXPORT AdvancedTransformAnimator : public BasicTransformAnimator { AdvancedTransformAnimator(); public: void reset(); - QMatrix getRelativeTransformAtFrame( - const qreal relFrame, QMatrix* postTransform = nullptr) const; + QTransform getRelativeTransformAtFrame( + const qreal relFrame, QTransform* postTransform = nullptr) const; void applyTransformEffects(const qreal relFrame, qreal& pivotX, qreal& pivotY, @@ -147,11 +147,11 @@ class CORE_EXPORT AdvancedTransformAnimator : public BasicTransformAnimator { qreal& rot, qreal& scaleX, qreal& scaleY, qreal& shearX, qreal& shearY, - QMatrix& postTransform) const; + QTransform& postTransform) const; void setValues(const TransformValues& values); - QMatrix getRotScaleShearTransform(); + QTransform getRotScaleShearTransform(); void startRotScaleShearTransform(); void resetRotScaleShear(); diff --git a/src/core/Boxes/animationbox.cpp b/src/core/Boxes/animationbox.cpp index 478850b3f..93716cb63 100644 --- a/src/core/Boxes/animationbox.cpp +++ b/src/core/Boxes/animationbox.cpp @@ -304,7 +304,7 @@ void AnimationBox::setupCanvasMenu(PropertyMenu * const menu) //} void AnimationBox::setupRenderData(const qreal relFrame, - const QMatrix& parentM, + const QTransform& parentM, BoxRenderData * const data, Canvas* const scene) { BoundingBox::setupRenderData(relFrame, parentM, data, scene); diff --git a/src/core/Boxes/animationbox.h b/src/core/Boxes/animationbox.h index 4434fcd6f..cb1980503 100644 --- a/src/core/Boxes/animationbox.h +++ b/src/core/Boxes/animationbox.h @@ -49,7 +49,7 @@ class CORE_EXPORT AnimationBox : public BoundingBox { void setupCanvasMenu(PropertyMenu * const menu); void setupRenderData(const qreal relFrame, - const QMatrix& parentM, + const QTransform& parentM, BoxRenderData * const data, Canvas * const scene); stdsptr createRenderData(); diff --git a/src/core/Boxes/boundingbox.cpp b/src/core/Boxes/boundingbox.cpp index 4da8ea0fd..387457e55 100644 --- a/src/core/Boxes/boundingbox.cpp +++ b/src/core/Boxes/boundingbox.cpp @@ -345,7 +345,7 @@ void BoundingBox::applyTransformEffects( qreal& rot, qreal& scaleX, qreal& scaleY, qreal& shearX, qreal& shearY, - QMatrix& postTransform) { + QTransform& postTransform) { mTransformEffectCollection->applyEffects(relFrame, pivotX, pivotY, posX, posY, @@ -580,7 +580,7 @@ stdsptr BoundingBox::queExternalRender( } stdsptr BoundingBox::queRender( - const qreal relFrame, const QMatrix& parentM) { + const qreal relFrame, const QTransform& parentM) { const auto renderData = updateCurrentRenderData(relFrame); if(!renderData) return nullptr; setupRenderData(relFrame, parentM, renderData, getParentScene()); @@ -734,11 +734,11 @@ void BoundingBox::drawBoundingRect(SkCanvas * const canvas, true, eSizesUI::widget*0.25f); } -QMatrix BoundingBox::getTotalTransform() const { +QTransform BoundingBox::getTotalTransform() const { return mTransformAnimator->getTotalTransform(); } -QMatrix BoundingBox::getRelativeTransformAtCurrentFrame() const { +QTransform BoundingBox::getRelativeTransformAtCurrentFrame() const { return getRelativeTransformAtFrame(anim_getCurrentRelFrame()); } @@ -1073,7 +1073,7 @@ void BoundingBox::finishTransform() { } void BoundingBox::setupRenderData(const qreal relFrame, - const QMatrix& parentM, + const QTransform& parentM, BoxRenderData * const data, Canvas* const scene) { setupWithoutRasterEffects(relFrame, parentM, data, scene); @@ -1081,7 +1081,7 @@ void BoundingBox::setupRenderData(const qreal relFrame, } void BoundingBox::setupWithoutRasterEffects(const qreal relFrame, - const QMatrix& parentM, + const QTransform& parentM, BoxRenderData * const data, Canvas* const scene) { //Q_ASSERT(scene); @@ -1225,19 +1225,19 @@ void BoundingBox::addTransformEffect(const qsptr &transformEffe // } //} -QMatrix BoundingBox::getRelativeTransformAtFrame(const qreal relFrame) const { +QTransform BoundingBox::getRelativeTransformAtFrame(const qreal relFrame) const { if(isZero6Dec(relFrame - anim_getCurrentRelFrame())) return mTransformAnimator->getRelativeTransform(); return mTransformAnimator->getRelativeTransformAtFrame(relFrame); } -QMatrix BoundingBox::getInheritedTransformAtFrame(const qreal relFrame) const { +QTransform BoundingBox::getInheritedTransformAtFrame(const qreal relFrame) const { if(isZero6Dec(relFrame - anim_getCurrentRelFrame())) return mTransformAnimator->getInheritedTransform(); return mTransformAnimator->getInheritedTransformAtFrame(relFrame); } -QMatrix BoundingBox::getTotalTransformAtFrame(const qreal relFrame) const { +QTransform BoundingBox::getTotalTransformAtFrame(const qreal relFrame) const { if(isZero6Dec(relFrame - anim_getCurrentRelFrame())) return mTransformAnimator->getTotalTransform(); return mTransformAnimator->getTotalTransformAtFrame(relFrame); diff --git a/src/core/Boxes/boundingbox.h b/src/core/Boxes/boundingbox.h index 44263cd71..1677b523c 100644 --- a/src/core/Boxes/boundingbox.h +++ b/src/core/Boxes/boundingbox.h @@ -188,10 +188,10 @@ class CORE_EXPORT BoundingBox : public eBoxOrSound { virtual void updateAllBoxes(const UpdateReason reason); - virtual QMatrix getRelativeTransformAtCurrentFrame() const; - virtual QMatrix getRelativeTransformAtFrame(const qreal relFrame) const; - virtual QMatrix getInheritedTransformAtFrame(const qreal relFrame) const; - virtual QMatrix getTotalTransformAtFrame(const qreal relFrame) const; + virtual QTransform getRelativeTransformAtCurrentFrame() const; + virtual QTransform getRelativeTransformAtFrame(const qreal relFrame) const; + virtual QTransform getInheritedTransformAtFrame(const qreal relFrame) const; + virtual QTransform getTotalTransformAtFrame(const qreal relFrame) const; virtual QPointF mapAbsPosToRel(const QPointF &absPos); virtual void applyPaintSetting(const PaintSettingsApplier &setting); @@ -206,7 +206,7 @@ class CORE_EXPORT BoundingBox : public eBoxOrSound { virtual void setupCanvasMenu(PropertyMenu * const menu); - virtual void setupRenderData(const qreal relFrame, const QMatrix& parentM, + virtual void setupRenderData(const qreal relFrame, const QTransform& parentM, BoxRenderData * const data, Canvas * const scene); virtual void renderDataFinished(BoxRenderData *renderData); @@ -264,12 +264,12 @@ class CORE_EXPORT BoundingBox : public eBoxOrSound { stdsptr createRenderData(const qreal relFrame); stdsptr queRender(const qreal relFrame, - const QMatrix& parentM); + const QTransform& parentM); stdsptr queExternalRender( const qreal relFrame, const bool forceRasterize); void setupWithoutRasterEffects(const qreal relFrame, - const QMatrix& parentM, + const QTransform& parentM, BoxRenderData * const data, Canvas* const scene); void setupRasterEffects(const qreal relFrame, @@ -309,7 +309,7 @@ class CORE_EXPORT BoundingBox : public eBoxOrSound { const AlignRelativeTo relativeTo, const QPointF lastPivotAbsPos); - QMatrix getTotalTransform() const; + QTransform getTotalTransform() const; MovablePoint *getPointAtAbsPos(const QPointF &absPos, const CanvasMode mode, @@ -444,7 +444,7 @@ class CORE_EXPORT BoundingBox : public eBoxOrSound { qreal& rot, qreal& scaleX, qreal& scaleY, qreal& shearX, qreal& shearY, - QMatrix& postTransform); + QTransform& postTransform); bool hasTransformEffects() const; const QStringList checkTransformEffectsForSVGSupport(); diff --git a/src/core/Boxes/boxrendercontainer.cpp b/src/core/Boxes/boxrendercontainer.cpp index aa191a093..3e609d387 100644 --- a/src/core/Boxes/boxrendercontainer.cpp +++ b/src/core/Boxes/boxrendercontainer.cpp @@ -39,8 +39,8 @@ void RenderContainer::drawSk(SkCanvas * const canvas, } void RenderContainer::updatePaintTransformGivenNewTotalTransform( - const QMatrix &totalTransform) { - QMatrix paintTransform = mTransform.inverted()*totalTransform; + const QTransform &totalTransform) { + QTransform paintTransform = mTransform.inverted()*totalTransform; const qreal invRes = 1/mResolutionFraction; paintTransform.scale(invRes, invRes); mPaintTransform = toSkMatrix(paintTransform); @@ -57,7 +57,7 @@ void RenderContainer::setSrcRenderData(BoxRenderData * const data) { mImageSk = data->fRenderedImage; mGlobalRect = data->fGlobalRect; mAntiAlias = data->fAntiAlias; - QMatrix paintTransform; + QTransform paintTransform; paintTransform.scale(1/mResolutionFraction, 1/mResolutionFraction); mPaintTransform = toSkMatrix(paintTransform); mSrcRenderData = data->ref(); diff --git a/src/core/Boxes/boxrendercontainer.h b/src/core/Boxes/boxrendercontainer.h index 506f14d7f..c61d632d3 100644 --- a/src/core/Boxes/boxrendercontainer.h +++ b/src/core/Boxes/boxrendercontainer.h @@ -41,7 +41,7 @@ class CORE_EXPORT RenderContainer { const SkFilterQuality filter) const; void updatePaintTransformGivenNewTotalTransform( - const QMatrix &totalTransform); + const QTransform &totalTransform); void clear(); void setSrcRenderData(BoxRenderData * const data); @@ -62,7 +62,7 @@ class CORE_EXPORT RenderContainer { bool mAntiAlias = false; qreal mResolutionFraction; QRect mGlobalRect; - QMatrix mTransform; + QTransform mTransform; SkMatrix mPaintTransform; stdsptr mSrcRenderData; sk_sp mImageSk; diff --git a/src/core/Boxes/boxrenderdata.h b/src/core/Boxes/boxrenderdata.h index e42af3073..f600d1e48 100644 --- a/src/core/Boxes/boxrenderdata.h +++ b/src/core/Boxes/boxrenderdata.h @@ -30,7 +30,7 @@ #include #include "Tasks/updatable.h" #include "Animators/animator.h" -#include +#include class BoundingBox; class ShaderProgramCallerBase; #include "smartPointers/ememory.h" @@ -87,12 +87,12 @@ struct CORE_EXPORT BoxRenderData : public eTask { uint fBoxStateId = 0; - QMatrix fResolutionScale; - QMatrix fScaledTransform; - QMatrix fInheritedTransform; - QMatrix fRelTransform; - QMatrix fTotalTransform; - QMatrix fRenderTransform; + QTransform fResolutionScale; + QTransform fScaledTransform; + QTransform fInheritedTransform; + QTransform fRelTransform; + QTransform fTotalTransform; + QTransform fRenderTransform; bool fRelBoundingRectSet = false; QRectF fRelBoundingRect; diff --git a/src/core/Boxes/containerbox.cpp b/src/core/Boxes/containerbox.cpp index e5fbe400d..7640a927a 100644 --- a/src/core/Boxes/containerbox.cpp +++ b/src/core/Boxes/containerbox.cpp @@ -800,7 +800,7 @@ void ContainerBox::setupCanvasMenu(PropertyMenu * const menu) QAction* defaultUngroup; if (areAllChildrenStatic()) { defaultUngroup = ungroupKeepAction; } else { defaultUngroup = ungroupAbandonAction; } - defaultUngroup->setShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_G); + defaultUngroup->setShortcut(QKeySequence(QStringLiteral("Ctrl+Shift+G"))); menu->addSeparator(); } @@ -977,7 +977,7 @@ void ContainerBox::updateIfUsesProgram( void processChildData(BoundingBox * const child, ContainerBoxRenderData * const parentData, const qreal childRelFrame, - const QMatrix& thisM, + const QTransform& thisM, const qreal absFrame, QList& delayed) { if(!child->isFrameFVisibleAndInDurationRect(childRelFrame)) return; @@ -1015,7 +1015,7 @@ void processChildData(BoundingBox * const child, } void ContainerBox::processChildrenData(const qreal relFrame, - const QMatrix& thisM, + const QTransform& thisM, BoxRenderData * const data, Canvas* const scene) { Q_UNUSED(scene); @@ -1069,7 +1069,7 @@ stdsptr ContainerBox::createRenderData() { } void ContainerBox::setupRenderData(const qreal relFrame, - const QMatrix& parentM, + const QTransform& parentM, BoxRenderData * const data, Canvas* const scene) { BoundingBox::setupRenderData(relFrame, parentM, data, scene); diff --git a/src/core/Boxes/containerbox.h b/src/core/Boxes/containerbox.h index 7f3dec01a..b879e1e47 100644 --- a/src/core/Boxes/containerbox.h +++ b/src/core/Boxes/containerbox.h @@ -68,11 +68,11 @@ class CORE_EXPORT ContainerBox : public BoxWithPathEffects { qsptr createLink(const bool inner); stdsptr createRenderData(); void setupRenderData(const qreal relFrame, - const QMatrix& parentM, + const QTransform& parentM, BoxRenderData * const data, Canvas * const scene); void processChildrenData(const qreal relFrame, - const QMatrix& thisM, + const QTransform& thisM, BoxRenderData* const data, Canvas* const scene); diff --git a/src/core/Boxes/imagebox.cpp b/src/core/Boxes/imagebox.cpp index 5ebf5d39c..8f02c9ce9 100644 --- a/src/core/Boxes/imagebox.cpp +++ b/src/core/Boxes/imagebox.cpp @@ -132,7 +132,7 @@ void ImageBox::changeSourceFile() { if(!importPath.isEmpty()) setFilePath(importPath); } -void ImageBox::setupRenderData(const qreal relFrame, const QMatrix& parentM, +void ImageBox::setupRenderData(const qreal relFrame, const QTransform& parentM, BoxRenderData * const data, Canvas* const scene) { diff --git a/src/core/Boxes/imagebox.h b/src/core/Boxes/imagebox.h index 270c12a15..0ccefa549 100644 --- a/src/core/Boxes/imagebox.h +++ b/src/core/Boxes/imagebox.h @@ -53,7 +53,7 @@ class CORE_EXPORT ImageBox : public BoundingBox { public: void setupCanvasMenu(PropertyMenu * const menu); - void setupRenderData(const qreal relFrame, const QMatrix& parentM, + void setupRenderData(const qreal relFrame, const QTransform& parentM, BoxRenderData * const data, Canvas * const scene); stdsptr createRenderData(); diff --git a/src/core/Boxes/internallinkbox.cpp b/src/core/Boxes/internallinkbox.cpp index 6399c6ced..9bd33c4be 100644 --- a/src/core/Boxes/internallinkbox.cpp +++ b/src/core/Boxes/internallinkbox.cpp @@ -55,7 +55,7 @@ void InternalLinkBox::setLinkTarget(BoundingBox * const linkTarget) { } void InternalLinkBox::setupRenderData(const qreal relFrame, - const QMatrix& parentM, + const QTransform& parentM, BoxRenderData * const data, Canvas* const scene) { const auto linkTarget = getLinkTarget(); diff --git a/src/core/Boxes/internallinkbox.h b/src/core/Boxes/internallinkbox.h index d9d72e296..91a1781d2 100644 --- a/src/core/Boxes/internallinkbox.h +++ b/src/core/Boxes/internallinkbox.h @@ -38,7 +38,7 @@ class CORE_EXPORT InternalLinkBox : public InternalLinkBoxBase { InternalLinkBox(BoundingBox * const linkTarget, const bool innerLink); public: - void setupRenderData(const qreal relFrame, const QMatrix& parentM, + void setupRenderData(const qreal relFrame, const QTransform& parentM, BoxRenderData * const data, Canvas * const scene); diff --git a/src/core/Boxes/internallinkboxbase.h b/src/core/Boxes/internallinkboxbase.h index b4d2b59d5..4bfa87feb 100644 --- a/src/core/Boxes/internallinkboxbase.h +++ b/src/core/Boxes/internallinkboxbase.h @@ -56,9 +56,9 @@ class InternalLinkBoxBase : public BoxT { SkBlendMode getBlendMode() const override; - QMatrix getRelativeTransformAtFrame(const qreal relFrame) const override; - QMatrix getInheritedTransformAtFrame(const qreal relFrame) const override; - QMatrix getTotalTransformAtFrame(const qreal relFrame) const override; + QTransform getRelativeTransformAtFrame(const qreal relFrame) const override; + QTransform getInheritedTransformAtFrame(const qreal relFrame) const override; + QTransform getTotalTransformAtFrame(const qreal relFrame) const override; bool isFrameInDurationRect(const int relFrame) const override; bool isFrameFInDurationRect(const qreal relFrame) const override; @@ -171,10 +171,10 @@ bool ILBB::isFrameFInDurationRect(const qreal relFrame) const { } template -QMatrix ILBB::getRelativeTransformAtFrame(const qreal relFrame) const { +QTransform ILBB::getRelativeTransformAtFrame(const qreal relFrame) const { if(mInnerLink) { const auto linkTarget = getLinkTarget(); - if(!linkTarget) return QMatrix(); + if(!linkTarget) return QTransform(); return linkTarget->getRelativeTransformAtFrame(relFrame); } else { return BoundingBox::getRelativeTransformAtFrame(relFrame); @@ -182,10 +182,10 @@ QMatrix ILBB::getRelativeTransformAtFrame(const qreal relFrame) const { } template -QMatrix ILBB::getInheritedTransformAtFrame(const qreal relFrame) const { +QTransform ILBB::getInheritedTransformAtFrame(const qreal relFrame) const { if(mInnerLink) { const auto parentGroup = this->getParentGroup(); - if(!parentGroup) return QMatrix(); + if(!parentGroup) return QTransform(); return parentGroup->getTotalTransformAtFrame(relFrame); } else { return BoundingBox::getInheritedTransformAtFrame(relFrame); @@ -193,11 +193,11 @@ QMatrix ILBB::getInheritedTransformAtFrame(const qreal relFrame) const { } template -QMatrix ILBB::getTotalTransformAtFrame(const qreal relFrame) const { +QTransform ILBB::getTotalTransformAtFrame(const qreal relFrame) const { if(mInnerLink) { const auto parentGroup = this->getParentGroup(); const auto linkTarget = getLinkTarget(); - if(!linkTarget || !parentGroup) return QMatrix(); + if(!linkTarget || !parentGroup) return QTransform(); return linkTarget->getRelativeTransformAtFrame(relFrame)* parentGroup->getTotalTransformAtFrame(relFrame); } else { diff --git a/src/core/Boxes/internallinkcanvas.cpp b/src/core/Boxes/internallinkcanvas.cpp index aed8753a2..b75ccc8f2 100644 --- a/src/core/Boxes/internallinkcanvas.cpp +++ b/src/core/Boxes/internallinkcanvas.cpp @@ -64,7 +64,7 @@ void InternalLinkCanvas::prp_setupTreeViewMenu(PropertyMenu * const menu) { } void InternalLinkCanvas::setupRenderData(const qreal relFrame, - const QMatrix& parentM, + const QTransform& parentM, BoxRenderData * const data, Canvas* const scene) { if (!scene) { return; } diff --git a/src/core/Boxes/internallinkcanvas.h b/src/core/Boxes/internallinkcanvas.h index 285744b9c..974d5e39f 100644 --- a/src/core/Boxes/internallinkcanvas.h +++ b/src/core/Boxes/internallinkcanvas.h @@ -35,7 +35,7 @@ class CORE_EXPORT InternalLinkCanvas : public InternalLinkGroupBox { InternalLinkCanvas(ContainerBox * const linkTarget, const bool innerLink); public: - void setupRenderData(const qreal relFrame, const QMatrix& parentM, + void setupRenderData(const qreal relFrame, const QTransform& parentM, BoxRenderData * const data, Canvas * const scene); diff --git a/src/core/Boxes/internallinkgroupbox.cpp b/src/core/Boxes/internallinkgroupbox.cpp index afa4d211e..d392c152f 100644 --- a/src/core/Boxes/internallinkgroupbox.cpp +++ b/src/core/Boxes/internallinkgroupbox.cpp @@ -44,7 +44,7 @@ InternalLinkGroupBox::InternalLinkGroupBox(ContainerBox * const linkTarget, } void InternalLinkGroupBox::setupRenderData(const qreal relFrame, - const QMatrix& parentM, + const QTransform& parentM, BoxRenderData * const data, Canvas* const scene) { const auto linkTarget = getLinkTarget(); diff --git a/src/core/Boxes/internallinkgroupbox.h b/src/core/Boxes/internallinkgroupbox.h index 5840ac95d..4920bdc71 100644 --- a/src/core/Boxes/internallinkgroupbox.h +++ b/src/core/Boxes/internallinkgroupbox.h @@ -52,7 +52,7 @@ class CORE_EXPORT InternalLinkGroupBox : public InternalLinkBoxBase createRenderData() { diff --git a/src/core/Boxes/textbox.cpp b/src/core/Boxes/textbox.cpp index d06a22e45..cc39ae609 100644 --- a/src/core/Boxes/textbox.cpp +++ b/src/core/Boxes/textbox.cpp @@ -77,7 +77,6 @@ TextBox::TextBox() } #include -#include void TextBox::openTextEditor(QWidget* dialogParent) { /*bool ok; @@ -212,7 +211,7 @@ stdsptr TextBox::createRenderData() { } else return PathBox::createRenderData(); } -void TextBox::setupRenderData(const qreal relFrame, const QMatrix& parentM, +void TextBox::setupRenderData(const qreal relFrame, const QTransform& parentM, BoxRenderData * const data, Canvas * const scene) { if(!mTextEffects->hasEffects()) { @@ -297,7 +296,7 @@ SkPath TextBox::getRelativePath(const qreal relFrame) const { const qreal lineInc = static_cast(mFont.getSpacing())*lineSpacing; - const QStringList lines = textAtFrame.split(QRegExp("\n|\r\n|\r")); + const QStringList lines = textAtFrame.split(QRegularExpression("\n|\r\n|\r")); qreal maxWidth = 0; QList lineWidths; for(const auto& line : lines) { diff --git a/src/core/Boxes/textbox.h b/src/core/Boxes/textbox.h index ebc3b8851..f8e47d58f 100644 --- a/src/core/Boxes/textbox.h +++ b/src/core/Boxes/textbox.h @@ -60,7 +60,7 @@ class CORE_EXPORT TextBox : public PathBox { const SkFontStyle& style); stdsptr createRenderData(); - void setupRenderData(const qreal relFrame, const QMatrix& parentM, + void setupRenderData(const qreal relFrame, const QTransform& parentM, BoxRenderData * const data, Canvas * const scene); diff --git a/src/core/Boxes/textboxrenderdata.cpp b/src/core/Boxes/textboxrenderdata.cpp index 4ead7f8bf..a4eea2c33 100644 --- a/src/core/Boxes/textboxrenderdata.cpp +++ b/src/core/Boxes/textboxrenderdata.cpp @@ -121,7 +121,7 @@ void LetterRenderData::initialize(const qreal relFrame, } -void LetterRenderData::applyTransform(const QMatrix &transform) { +void LetterRenderData::applyTransform(const QTransform &transform) { fRelTransform = transform*fRelTransform; fTotalTransform = fRelTransform*fInheritedTransform; fLetterPos = transform.map(fLetterPos); @@ -161,7 +161,7 @@ void WordRenderData::initialize(const qreal relFrame, } } -void WordRenderData::applyTransform(const QMatrix &transform) { +void WordRenderData::applyTransform(const QTransform &transform) { fRelTransform = transform*fRelTransform; fTotalTransform = fRelTransform*fInheritedTransform; fWordPos = transform.map(fWordPos); @@ -227,7 +227,7 @@ void LineRenderData::initialize(const qreal relFrame, if(i0 < line.length()) wordFinished(i0, line.length() - 1); } -void LineRenderData::applyTransform(const QMatrix &transform) { +void LineRenderData::applyTransform(const QTransform &transform) { fRelTransform = transform*fRelTransform; fTotalTransform = fRelTransform*fInheritedTransform; fLinePos = transform.map(fLinePos); @@ -257,7 +257,7 @@ void TextBoxRenderData::initialize(const QString &text, const Qt::Alignment vAlignment, TextBox * const parent, Canvas* const scene) { - const QStringList lines = text.split(QRegExp("\n|\r\n|\r")); + const QStringList lines = text.split(QRegularExpression("\n|\r\n|\r")); qreal maxWidth = 0; diff --git a/src/core/Boxes/textboxrenderdata.h b/src/core/Boxes/textboxrenderdata.h index a7755c96a..981b130fd 100644 --- a/src/core/Boxes/textboxrenderdata.h +++ b/src/core/Boxes/textboxrenderdata.h @@ -55,7 +55,7 @@ class CORE_EXPORT LetterRenderData : public PathBoxRenderData { TextBox * const parent, Canvas * const scene); - void applyTransform(const QMatrix& transform); + void applyTransform(const QTransform& transform); QRectF fBoundingRect; QPointF fLetterPos; @@ -79,7 +79,7 @@ class CORE_EXPORT WordRenderData : public ContainerBoxRenderData { TextBox * const parent, Canvas * const scene); - void applyTransform(const QMatrix &transform); + void applyTransform(const QTransform &transform); void queAllLetters(); QRectF fBoundingRect; @@ -101,7 +101,7 @@ class CORE_EXPORT LineRenderData : public ContainerBoxRenderData { TextBox * const parent, Canvas * const scene); - void applyTransform(const QMatrix &transform); + void applyTransform(const QTransform &transform); void queAllWords(); QPointF fLinePos; diff --git a/src/core/Expressions/propertybindingparser.cpp b/src/core/Expressions/propertybindingparser.cpp index 085000dfb..80aa922b2 100644 --- a/src/core/Expressions/propertybindingparser.cpp +++ b/src/core/Expressions/propertybindingparser.cpp @@ -182,7 +182,7 @@ PropertyBindingMap PropertyBindingParser::parseBindings( QString exp, const PropertyBinding::Validator& validator, const Property* const context) { - const auto lines = exp.split(QRegExp("\n|\r\n|\r|;"), + const auto lines = exp.split(QRegularExpression("\n|\r\n|\r|;"), Qt::SkipEmptyParts); PropertyBindingMap result; for(const auto& line : lines) { diff --git a/src/core/GUI/boxeslistactionbutton.cpp b/src/core/GUI/boxeslistactionbutton.cpp index 79ee4dbac..b242b2981 100644 --- a/src/core/GUI/boxeslistactionbutton.cpp +++ b/src/core/GUI/boxeslistactionbutton.cpp @@ -42,7 +42,7 @@ void BoxesListActionButton::mousePressEvent(QMouseEvent *) emit pressed(); } -void BoxesListActionButton::enterEvent(QEvent *) +void BoxesListActionButton::enterEvent(QtEnterEvent *) { mHover = true; update(); diff --git a/src/core/GUI/boxeslistactionbutton.h b/src/core/GUI/boxeslistactionbutton.h index 5c7c1bf12..97e384714 100644 --- a/src/core/GUI/boxeslistactionbutton.h +++ b/src/core/GUI/boxeslistactionbutton.h @@ -28,6 +28,7 @@ #include "../core_global.h" #include "GUI/global.h" +#include "../ui/enterevent.h" #include @@ -41,7 +42,7 @@ class CORE_EXPORT BoxesListActionButton : public QWidget BoxesListActionButton(QWidget * const parent = nullptr); protected: void mousePressEvent(QMouseEvent *); - void enterEvent(QEvent *); + void enterEvent(QtEnterEvent *); void leaveEvent(QEvent *); bool mHover = false; diff --git a/src/core/GUI/valueinput.cpp b/src/core/GUI/valueinput.cpp index e6255a499..97b3b1e80 100644 --- a/src/core/GUI/valueinput.cpp +++ b/src/core/GUI/valueinput.cpp @@ -27,7 +27,7 @@ #include #include -#include +#include #include "skia/skiaincludes.h" #include "skia/skqtconversions.h" @@ -35,15 +35,18 @@ #include ValueInput::ValueInput() { - const int dpi = QApplication::desktop()->logicalDpiX(); + QScreen *screen = QGuiApplication::primaryScreen(); + qreal dpi = screen ? screen->logicalDotsPerInchX() : 96.0; + qreal dpr = screen ? screen->devicePixelRatio() : 1.0; mFont = toSkFont(QApplication::font(), - dpi * qApp->desktop()->devicePixelRatioF(), + dpi * dpr, 72); } void ValueInput::draw(SkCanvas *canvas, const int y) { SkPaint paint; - const qreal pixelRatio = qApp->desktop()->devicePixelRatioF(); + QScreen *screen = QGuiApplication::primaryScreen(); + const qreal pixelRatio = screen ? screen->devicePixelRatio() : 1.0; const auto transStr = getText(); const int textWidth = QApplication::fontMetrics().horizontalAdvance(transStr)*pixelRatio; const SkRect inputRect = SkRect::MakeXYWH(2*eSizesUI::widget*pixelRatio, diff --git a/src/core/MovablePoints/movablepoint.cpp b/src/core/MovablePoints/movablepoint.cpp index 830797481..23b2da023 100644 --- a/src/core/MovablePoints/movablepoint.cpp +++ b/src/core/MovablePoints/movablepoint.cpp @@ -165,7 +165,7 @@ bool MovablePoint::isContainedInRect(const QRectF &absRect) { } void MovablePoint::rotateRelativeToSavedPivot(const qreal rot) { - QMatrix mat; + QTransform mat; mat.translate(mPivot.x(), mPivot.y()); mat.rotate(rot); mat.translate(-mPivot.x(), -mPivot.y()); @@ -175,7 +175,7 @@ void MovablePoint::rotateRelativeToSavedPivot(const qreal rot) { void MovablePoint::scaleRelativeToSavedPivot(const qreal sx, const qreal sy) { - QMatrix mat; + QTransform mat; mat.translate(mPivot.x(), mPivot.y()); mat.scale(sx, sy); mat.translate(-mPivot.x(), -mPivot.y()); @@ -185,7 +185,7 @@ void MovablePoint::scaleRelativeToSavedPivot(const qreal sx, void MovablePoint::shearRelativeToSavedPivot(const qreal shearX, const qreal shearY) { - QMatrix mat; + QTransform mat; mat.translate(mPivot.x(), mPivot.y()); mat.shear(shearX, shearY); mat.translate(-mPivot.x(), -mPivot.y()); @@ -198,7 +198,7 @@ void MovablePoint::saveTransformPivotAbsPos(const QPointF &absPivot) { } void MovablePoint::rotateBy(const qreal rot) { - QMatrix rotMatrix; + QTransform rotMatrix; rotMatrix.translate(-mPivot.x(), -mPivot.y()); rotMatrix.rotate(rot); rotMatrix.translate(mPivot.x(), mPivot.y()); @@ -207,7 +207,7 @@ void MovablePoint::rotateBy(const qreal rot) { void MovablePoint::scale(const qreal scaleXBy, const qreal scaleYBy) { - QMatrix scaleMatrix; + QTransform scaleMatrix; scaleMatrix.translate(-mPivot.x(), -mPivot.y()); scaleMatrix.scale(scaleXBy, scaleYBy); scaleMatrix.translate(mPivot.x(), mPivot.y()); diff --git a/src/core/MovablePoints/movablepoint.h b/src/core/MovablePoints/movablepoint.h index b9ce6611a..3c157813d 100644 --- a/src/core/MovablePoints/movablepoint.h +++ b/src/core/MovablePoints/movablepoint.h @@ -148,7 +148,7 @@ class CORE_EXPORT MovablePoint : public StdSelfRef { void rotateBy(const qreal rot); void scale(const qreal scaleBy); - void applyTransform(const QMatrix &transform) { + void applyTransform(const QTransform &transform) { setRelativePos(transform.map(getRelativePos())); } void setRadius(const qreal radius); diff --git a/src/core/MovablePoints/smartctrlpoint.cpp b/src/core/MovablePoints/smartctrlpoint.cpp index 1a79fb3e5..be448a74b 100644 --- a/src/core/MovablePoints/smartctrlpoint.cpp +++ b/src/core/MovablePoints/smartctrlpoint.cpp @@ -61,14 +61,14 @@ void SmartCtrlPoint::setRelativePos(const QPointF &relPos) { void SmartCtrlPoint::rotateRelativeToSavedPivot(const qreal rotate) { const QPointF savedValue = getSavedRelPos() - mParentPoint_k->getSavedRelPos(); - QMatrix mat; + QTransform mat; mat.rotate(rotate); setRelativePos(mat.map(savedValue) + mParentPoint_k->getRelativePos()); } void SmartCtrlPoint::scale(const qreal sx, const qreal sy) { const QPointF savedValue = getSavedRelPos() - mParentPoint_k->getSavedRelPos(); - QMatrix mat; + QTransform mat; mat.scale(sx, sy); setRelativePos(mat.map(savedValue) + mParentPoint_k->getRelativePos()); } diff --git a/src/core/Private/esettings.cpp b/src/core/Private/esettings.cpp index a35dbfb76..1c1208bf2 100644 --- a/src/core/Private/esettings.cpp +++ b/src/core/Private/esettings.cpp @@ -128,22 +128,25 @@ struct eColorSetting : public eSettingBase const QString oneVal = QStringLiteral("\\s*(\\d+)\\s*"); const QString oneValC = QStringLiteral("\\s*(\\d+)\\s*,"); - QRegExp rx("rgba\\(" - "\\s*(\\d+)\\s*," - "\\s*(\\d+)\\s*," - "\\s*(\\d+)\\s*," - "\\s*(\\d+)\\s*" - "\\)", - Qt::CaseInsensitive); - if(rx.exactMatch(valueStr)) { - rx.indexIn(valueStr); - const QStringList intRGBA = rx.capturedTexts(); + QRegularExpression rx("^rgba\\(" + "\\s*(\\d+)\\s*," + "\\s*(\\d+)\\s*," + "\\s*(\\d+)\\s*," + "\\s*(\\d+)\\s*" + "\\)$", + QRegularExpression::CaseInsensitiveOption); + + QRegularExpressionMatch match = rx.match(valueStr); + if (match.hasMatch()) { + const QStringList intRGBA = match.capturedTexts(); fValue.setRgb(intRGBA.at(1).toInt(), intRGBA.at(2).toInt(), intRGBA.at(3).toInt(), intRGBA.at(4).toInt()); return true; - } else return false; + } else { + return false; + } } void writeValue() const { diff --git a/src/core/Properties/property.cpp b/src/core/Properties/property.cpp index 437a2de69..3fa8ff90a 100644 --- a/src/core/Properties/property.cpp +++ b/src/core/Properties/property.cpp @@ -178,16 +178,16 @@ BasicTransformAnimator *Property::getTransformAnimator() const { return nullptr; } -QMatrix Property::getTransform() const { +QTransform Property::getTransform() const { const auto trans = getTransformAnimator(); if(trans) return trans->getTotalTransform(); - return QMatrix(); + return QTransform(); } -QMatrix Property::getTransform(const qreal relFrame) const { +QTransform Property::getTransform(const qreal relFrame) const { const auto trans = getTransformAnimator(); if(trans) return trans->getTotalTransformAtFrame(relFrame); - return QMatrix(); + return QTransform(); } void Property::prp_setSelected(const bool selected) { @@ -282,7 +282,7 @@ void Property::prp_getFullPath(QStringList& names) const { QString Property::prp_sFixName(const QString &name) { QString result = name.trimmed(); - result.remove(QRegExp("[^A-Za-z0-9 _]")); + result.remove(QRegularExpression("[^A-Za-z0-9 _]")); while(!result.isEmpty() && (result.front() == ' ' || result.front().isDigit())) { @@ -306,7 +306,7 @@ bool Property::prp_sValidateName(const QString &name, *error = "Name cannot end with a space"; return false; } - const int nValid = name.count(QRegExp("[A-Za-z0-9_ ]")); + const int nValid = name.count(QRegularExpression("[A-Za-z0-9_ ]")); if(nValid != name.count()) { *error = "Invalid characters used"; return false; diff --git a/src/core/Properties/property.h b/src/core/Properties/property.h index 7edbd5c8e..ce91cd1a2 100644 --- a/src/core/Properties/property.h +++ b/src/core/Properties/property.h @@ -170,8 +170,8 @@ class CORE_EXPORT Property : public SingleWidgetTarget { QDomElement prp_writeNamedPropertyXEV( const QString& name, const XevExporter& exp) const; - QMatrix getTransform() const; - QMatrix getTransform(const qreal relFrame) const; + QTransform getTransform() const; + QTransform getTransform(const qreal relFrame) const; void prp_setSelected(const bool selected); void prp_afterWholeInfluenceRangeChanged(); diff --git a/src/core/ReadWrite/ereadstream.cpp b/src/core/ReadWrite/ereadstream.cpp index 186a655eb..9b8b85172 100644 --- a/src/core/ReadWrite/ereadstream.cpp +++ b/src/core/ReadWrite/ereadstream.cpp @@ -131,13 +131,54 @@ eReadStream &eReadStream::operator>>(QRectF &val) { return *this; } -eReadStream &eReadStream::operator>>(QMatrix &val) { - read(&val, sizeof(QMatrix)); +eReadStream &eReadStream::operator>>(QTransform &val) +{ + // Get QMatrix (48 bytes) + qreal m[6]; + read(m, sizeof(m)); + + // QMatrix => QTransform (m31=dx, m32=dy, m33=1.0) + val.setMatrix(m[0], m[1], 0.0, + m[2], m[3], 0.0, + m[4], m[5], 1.0); + return *this; } -eReadStream &eReadStream::operator>>(QColor &val) { +eReadStream &eReadStream::operator>>(QColor &val) +{ +#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) read(&val, sizeof(QColor)); +#else + struct Qt5QColorLayout { + int32_t spec; + uint16_t alpha; + uint16_t red; + uint16_t green; + uint16_t blue; + uint16_t pad; + uint16_t pad2; + }; + + Qt5QColorLayout oldColor; + read(&oldColor, sizeof(Qt5QColorLayout)); // 16 bytes + + int a = oldColor.alpha >> 8; + int r = oldColor.red >> 8; + int g = oldColor.green >> 8; + int b = oldColor.blue >> 8; + + if (oldColor.spec == 2) { // HSV + val = QColor::fromHsv(r, g, b, a); + } else if (oldColor.spec == 4) { // HSL + val = QColor::fromHsl(r, g, b, a); + } else if (oldColor.spec == 1) { // RGB + val = QColor::fromRgb(r, g, b, a); + } else { + val = QColor(); + } +#endif + return *this; } diff --git a/src/core/ReadWrite/ereadstream.h b/src/core/ReadWrite/ereadstream.h index 8aaf8f40d..6b9def67e 100644 --- a/src/core/ReadWrite/ereadstream.h +++ b/src/core/ReadWrite/ereadstream.h @@ -72,7 +72,7 @@ class CORE_EXPORT eReadStream { eReadStream& operator>>(qreal &val); eReadStream& operator>>(QPointF &val); eReadStream& operator>>(QRectF &val); - eReadStream& operator>>(QMatrix &val); + eReadStream& operator>>(QTransform &val); eReadStream& operator>>(QColor& val); eReadStream& operator>>(QString &val); eReadStream& operator>>(QByteArray &val); diff --git a/src/core/ReadWrite/ewritestream.cpp b/src/core/ReadWrite/ewritestream.cpp index 33056a9fb..e3ccb412a 100644 --- a/src/core/ReadWrite/ewritestream.cpp +++ b/src/core/ReadWrite/ewritestream.cpp @@ -98,6 +98,22 @@ eWriteStream &eWriteStream::operator<<(const uint64_t val) { return *this; } +#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) +eWriteStream &eWriteStream::operator<<(const int64_t val) +{ + int32_t safeVal = static_cast(val); + write(&safeVal, sizeof(int32_t)); + return *this; +} + +eWriteStream &eWriteStream::operator<<(const long long val) +{ + int32_t safeVal = static_cast(val); + write(&safeVal, sizeof(int32_t)); + return *this; +} +#endif + eWriteStream &eWriteStream::operator<<(const iValueRange val) { write(&val, sizeof(iValueRange)); return *this; @@ -118,13 +134,46 @@ eWriteStream &eWriteStream::operator<<(const QRectF &val) { return *this; } -eWriteStream &eWriteStream::operator<<(const QMatrix &val) { - write(&val, sizeof(QMatrix)); +eWriteStream &eWriteStream::operator<<(const QTransform &val) +{ + // QMatrix (48 bytes) + qreal matrix2d[6] = { + val.m11(), val.m12(), + val.m21(), val.m22(), + val.dx(), val.dy() + }; + + write(matrix2d, sizeof(matrix2d)); return *this; } -eWriteStream &eWriteStream::operator<<(const QColor &val) { +eWriteStream &eWriteStream::operator<<(const QColor &val) +{ +#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) write(&val, sizeof(QColor)); +#else + struct Qt5QColorLayout { + int32_t spec; + uint16_t alpha; + uint16_t red; + uint16_t green; + uint16_t blue; + uint16_t pad; + uint16_t pad2; // 16-bytes + }; + + Qt5QColorLayout oldColor; + oldColor.spec = static_cast(val.spec()); + oldColor.alpha = (val.alpha() << 8) | val.alpha(); + oldColor.red = (val.red() << 8) | val.red(); + oldColor.green = (val.green() << 8) | val.green(); + oldColor.blue = (val.blue() << 8) | val.blue(); + oldColor.pad = 0; + oldColor.pad2 = 0; + + write(&oldColor, sizeof(Qt5QColorLayout)); +#endif + return *this; } diff --git a/src/core/ReadWrite/ewritestream.h b/src/core/ReadWrite/ewritestream.h index 7965b39b4..34a548f32 100644 --- a/src/core/ReadWrite/ewritestream.h +++ b/src/core/ReadWrite/ewritestream.h @@ -71,11 +71,15 @@ class CORE_EXPORT eWriteStream { eWriteStream& operator<<(const int val); eWriteStream& operator<<(const uint val); eWriteStream& operator<<(const uint64_t val); +#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) + eWriteStream& operator<<(const int64_t val); + eWriteStream& operator<<(const long long val); +#endif eWriteStream& operator<<(const iValueRange val); eWriteStream& operator<<(const qreal val); eWriteStream& operator<<(const QPointF& val); eWriteStream& operator<<(const QRectF& val); - eWriteStream& operator<<(const QMatrix& val); + eWriteStream& operator<<(const QTransform& val); eWriteStream& operator<<(const QColor& val); eWriteStream& operator<<(const QString& val); eWriteStream& operator<<(const QByteArray& val); diff --git a/src/core/Segments/qcubicsegment2d.cpp b/src/core/Segments/qcubicsegment2d.cpp index ebdba5d78..1f2fd1b20 100644 --- a/src/core/Segments/qcubicsegment2d.cpp +++ b/src/core/Segments/qcubicsegment2d.cpp @@ -277,7 +277,7 @@ qCubicSegment2D qCubicSegment2D::rotated(const qreal deg) const { return result; } -void qCubicSegment2D::transform(const QMatrix& transform) { +void qCubicSegment2D::transform(const QTransform& transform) { mP0 = transform.map(p0()); mC1 = transform.map(c1()); mC2 = transform.map(c2()); diff --git a/src/core/Segments/qcubicsegment2d.h b/src/core/Segments/qcubicsegment2d.h index 5b1e216ed..11acf6817 100644 --- a/src/core/Segments/qcubicsegment2d.h +++ b/src/core/Segments/qcubicsegment2d.h @@ -131,7 +131,7 @@ struct CORE_EXPORT qCubicSegment2D { qCubicSegment2D rotated(const qreal deg) const; - void transform(const QMatrix& transform); + void transform(const QTransform& transform); void rotate(const qreal deg); diff --git a/src/core/ShaderEffects/shadereffectcreator.cpp b/src/core/ShaderEffects/shadereffectcreator.cpp index 6011016b1..4c0b4c748 100644 --- a/src/core/ShaderEffects/shadereffectcreator.cpp +++ b/src/core/ShaderEffects/shadereffectcreator.cpp @@ -128,7 +128,7 @@ ShaderEffectCreator::Identifier ShaderEffectCreator::sReadIdentifierXEV( const QString name = ele.attribute("name"); const QString grePath = ele.attribute("grePath"); const QString propsStr = ele.attribute("properties"); - const auto propsStrList = propsStr.splitRef(','); + const auto propsStrList = propsStr.split(','); QList props; for(const auto &propStr : propsStrList) { const int propInt = XmlExportHelpers::stringToInt(propStr); @@ -213,10 +213,11 @@ QPointF attrToQPointF(const QDomElement &elem, const QString& def, const bool allowSingleValue) { const QString valS = elem.attribute(attr, def); - const QRegExp rx("\\[" REGEX_TWO_FLOATS "\\]"); - if(rx.exactMatch(valS)) { - rx.indexIn(valS); - const QStringList xy = rx.capturedTexts(); + const QRegularExpression rx("^\\[" REGEX_TWO_FLOATS "\\]$"); + QRegularExpressionMatch match = rx.match(valS); + + if (match.hasMatch()) { + const QStringList xy = match.capturedTexts(); return {xy.at(1).toDouble(), xy.at(2).toDouble()}; } else if(allowSingleValue) { bool ok; @@ -233,19 +234,21 @@ QColor attrToQColor(const QDomElement &elem, const QString& attr, const QString& def) { const QString valS = elem.attribute(attr, def); - const QRegExp rxRGBA("\\[" REGEX_FOUR_FLOATS "\\]"); - if(rxRGBA.exactMatch(valS)) { - rxRGBA.indexIn(valS); - const QStringList rgba = rxRGBA.capturedTexts(); + const QRegularExpression rxRGBA("^\\[" REGEX_FOUR_FLOATS "\\]$"); + QRegularExpressionMatch match = rxRGBA.match(valS); + + if (match.hasMatch()) { + const QStringList rgba = match.capturedTexts(); return QColor::fromRgbF(rgba.at(1).toDouble(), rgba.at(2).toDouble(), rgba.at(3).toDouble(), rgba.at(4).toDouble()); } else { - const QRegExp rxRGB("\\[" REGEX_THREE_FLOATS "\\]"); - if(rxRGB.exactMatch(valS)) { - rxRGB.indexIn(valS); - const QStringList rgb = rxRGB.capturedTexts(); + const QRegularExpression rxRGB("^\\[" REGEX_THREE_FLOATS "\\]$"); + QRegularExpressionMatch match = rxRGB.match(valS); + + if (match.hasMatch()) { + const QStringList rgb = match.capturedTexts(); return QColor::fromRgbF(rgb.at(1).toDouble(), rgb.at(2).toDouble(), rgb.at(3).toDouble()); @@ -360,8 +363,10 @@ void readPropertyCreators(const QDomElement &elem, stdsptr& uniC) { const QString name = elem.attribute("name"); if(name.isEmpty()) RuntimeThrow("Property name not defined."); - const QRegExp rx("[A-Za-z_][A-Za-z0-9_]*"); - if(!rx.exactMatch(name)) RuntimeThrow("Invalid Property name '" + name + "'."); + const QRegularExpression rx("^[A-Za-z_][A-Za-z0-9_]*$"); + if (!rx.match(name).hasMatch()) { + RuntimeThrow("Invalid Property name '" + name + "'."); + } const QString type = elem.attribute("type"); if(type.isEmpty()) RuntimeThrow("Property type not defined for " + name + "."); diff --git a/src/core/ShaderEffects/shadereffectjs.cpp b/src/core/ShaderEffects/shadereffectjs.cpp index f4fb814b7..1d8253851 100644 --- a/src/core/ShaderEffects/shadereffectjs.cpp +++ b/src/core/ShaderEffects/shadereffectjs.cpp @@ -253,7 +253,7 @@ QStringList extractExternFromScript(QString& calc) const auto match = matchIterator.next(); result << match.captured(1); } - calc.remove(QRegExp("\\bextern\\s+")); + calc.remove(QRegularExpression("\\bextern\\s+")); return result; } diff --git a/src/core/Sound/audiohandler.cpp b/src/core/Sound/audiohandler.cpp index 9d8ffb6ce..a614ec45d 100644 --- a/src/core/Sound/audiohandler.cpp +++ b/src/core/Sound/audiohandler.cpp @@ -37,21 +37,52 @@ AudioHandler::AudioHandler() sInstance = this; } +void AudioHandler::provideData(const DataRequest &request) +{ + if (!request || !mAudioIOOutput) { return; } + mAudioIOOutput->write(request.fData, request.fSize); +} + +AudioHandler::DataRequest AudioHandler::dataRequest() +{ +#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) + if (mAudioOutput && mAudioOutput->state() != QAudio::StoppedState) { + int chunkSize = mAudioFormat.bytesPerFrame() * 1024; + + if (chunkSize <= 0 || chunkSize > mAudioBuffer.size()) { + chunkSize = 4096; // fallback (4 KB) + } + + if (mAudioOutput->bytesFree() >= chunkSize) { + return {mAudioBuffer.data(), chunkSize}; + } + } +#else + if (mAudioOutput && mAudioOutput->state() != QAudio::StoppedState) { + if (mAudioOutput->bytesFree() >= mAudioOutput->periodSize()) { + return {mAudioBuffer.data(), mAudioOutput->periodSize()}; + } + } +#endif + + return {nullptr, 0}; +} + const int BufferSize = 32768; -QAudioFormat::SampleType toQtAudioFormat(const AVSampleFormat avFormat) +QtAudioSampleFormat toQtAudioFormat(const AVSampleFormat avFormat) { if (avFormat == AV_SAMPLE_FMT_S32) { - return QAudioFormat::SignedInt; + return AUDIO_SAMPLE_FORMAT; } else if (avFormat == AV_SAMPLE_FMT_FLT) { return QAudioFormat::Float; } else { RuntimeThrow("Unsupported sample format " + av_get_sample_fmt_name(avFormat)); } } -AVSampleFormat toAVAudioFormat(const QAudioFormat::SampleType qFormat) +AVSampleFormat toAVAudioFormat(const QtAudioSampleFormat qFormat) { - if (qFormat == QAudioFormat::SignedInt) { + if (qFormat == AUDIO_SAMPLE_FORMAT) { return AV_SAMPLE_FMT_S32; } else if (qFormat == QAudioFormat::Float) { return AV_SAMPLE_FMT_FLT; @@ -67,10 +98,17 @@ void AudioHandler::initializeAudio(eSoundSettingsData& soundSettings, mAudioBuffer = QByteArray(BufferSize, 0); mAudioDevice = findDevice(deviceName); + +#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) + qDebug() << "Using audio device" << mAudioDevice.description(); +#else qDebug() << "Using audio device" << mAudioDevice.deviceName(); +#endif mAudioFormat.setSampleRate(soundSettings.fSampleRate); mAudioFormat.setChannelCount(soundSettings.channelCount()); + +#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) mAudioFormat.setSampleSize(8*soundSettings.bytesPerSample()); mAudioFormat.setCodec("audio/pcm"); mAudioFormat.setByteOrder(QAudioFormat::LittleEndian); @@ -93,6 +131,20 @@ void AudioHandler::initializeAudio(eSoundSettingsData& soundSettings, mAudioOutput = new QAudioOutput(mAudioDevice, mAudioFormat, this); mAudioOutput->setNotifyInterval(128); +#else + mAudioFormat.setSampleFormat(toQtAudioFormat(soundSettings.fSampleFormat)); + + if (!mAudioDevice.isFormatSupported(mAudioFormat)) { + mAudioFormat = mAudioDevice.preferredFormat(); + soundSettings.fSampleRate = mAudioFormat.sampleRate(); + soundSettings.fSampleFormat = toAVAudioFormat(mAudioFormat.sampleFormat()); + } + + qDebug() << mAudioFormat; + + mAudioOutput = new QAudioSink(mAudioDevice, mAudioFormat, this); +#endif + emit deviceChanged(); } @@ -104,41 +156,58 @@ void AudioHandler::initializeAudio(const QString &deviceName, mAudioBuffer = QByteArray(BufferSize, 0); mAudioDevice = findDevice(deviceName); +#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) + qDebug() << "Using audio device" << mAudioDevice.description(); +#else qDebug() << "Using audio device" << mAudioDevice.deviceName(); +#endif if (save) { AppSupport::setSettings(QString::fromUtf8("audio"), QString::fromUtf8("output"), +#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) + mAudioDevice.id()); +#else mAudioDevice.deviceName()); +#endif } +#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) QAudioDeviceInfo info(mAudioDevice); if (!info.isFormatSupported(mAudioFormat)) { mAudioFormat = info.nearestFormat(mAudioFormat); } +#else + if (!mAudioDevice.isFormatSupported(mAudioFormat)) { + mAudioFormat = mAudioDevice.preferredFormat(); + } +#endif - mAudioOutput = new QAudioOutput(mAudioDevice, mAudioFormat, this); + mAudioOutput = new QtAudioOutput(mAudioDevice, mAudioFormat, this); +#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) mAudioOutput->setNotifyInterval(128); +#endif + emit deviceChanged(); } void AudioHandler::startAudio() { - //if (!QAudioDeviceInfo::availableDevices(QAudio::AudioOutput) - //.contains(mAudioDevice)) { initializeAudio(); } + if (!mAudioOutput) { return; } mAudioIOOutput = mAudioOutput->start(); } void AudioHandler::pauseAudio() { - mAudioOutput->suspend(); + if (mAudioOutput) { mAudioOutput->suspend(); } } void AudioHandler::resumeAudio() { - mAudioOutput->resume(); + if (mAudioOutput) { mAudioOutput->resume(); } } void AudioHandler::stopAudio() { + if (!mAudioOutput) { return; } mAudioIOOutput = nullptr; mAudioOutput->stop(); mAudioOutput->reset(); @@ -158,25 +227,46 @@ qreal AudioHandler::getVolume() const QString AudioHandler::getDeviceName() { +#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) return mAudioDevice.deviceName(); +#else + return mAudioDevice.description(); +#endif } -QAudioDeviceInfo AudioHandler::findDevice(const QString &deviceName) +QtAudioDevice AudioHandler::findDevice(const QString &deviceName) { +#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) if (deviceName.isEmpty()) { return QAudioDeviceInfo::defaultOutputDevice(); } const auto deviceInfos = QAudioDeviceInfo::availableDevices(QAudio::AudioOutput); for (const QAudioDeviceInfo &deviceInfo : deviceInfos) { if (deviceInfo.deviceName() == deviceName) { return deviceInfo; } } return QAudioDeviceInfo::defaultOutputDevice(); +#else + if (deviceName.isEmpty()) { return QMediaDevices::defaultAudioOutput(); } + const auto deviceInfos = QMediaDevices::audioOutputs(); + for (const QAudioDevice &deviceInfo : deviceInfos) { + if (deviceInfo.id() == deviceName || + deviceInfo.description() == deviceName) { return deviceInfo; } + } + return QMediaDevices::defaultAudioOutput(); +#endif } const QStringList AudioHandler::listDevices() { QStringList devices; +#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) const auto deviceInfos = QAudioDeviceInfo::availableDevices(QAudio::AudioOutput); for (const QAudioDeviceInfo &deviceInfo : deviceInfos) { devices << deviceInfo.deviceName(); } +#else + const auto deviceInfos = QMediaDevices::audioOutputs(); + for (const QAudioDevice &deviceInfo : deviceInfos) { + devices << deviceInfo.description(); + } +#endif return devices; } diff --git a/src/core/Sound/audiohandler.h b/src/core/Sound/audiohandler.h index 6408ae791..5d0a273b6 100644 --- a/src/core/Sound/audiohandler.h +++ b/src/core/Sound/audiohandler.h @@ -28,8 +28,25 @@ #include "core_global.h" -#include +#include #include +#include + +#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) +#include +#include +#include +using QtAudioDevice = QAudioDevice; +using QtAudioOutput = QAudioSink; +using QtAudioSampleFormat = QAudioFormat::SampleFormat; +#define AUDIO_SAMPLE_FORMAT QAudioFormat::Int32 +#else +#include +using QtAudioDevice = QAudioDeviceInfo; +using QtAudioOutput = QAudioOutput; +using QtAudioSampleFormat = QAudioFormat::SampleType; +#define AUDIO_SAMPLE_FORMAT QAudioFormat::SignedInt +#endif struct CORE_EXPORT eSoundSettingsData; @@ -51,21 +68,9 @@ class CORE_EXPORT AudioHandler : public QObject } }; - DataRequest dataRequest() - { - if (mAudioOutput && mAudioOutput->state() != QAudio::StoppedState) { - if (mAudioOutput->bytesFree() >= mAudioOutput->periodSize()) { - return {mAudioBuffer.data(), mAudioOutput->periodSize()}; - } - } - return {nullptr, 0}; - } + DataRequest dataRequest(); - void provideData(const DataRequest& request) - { - if (!request || !mAudioIOOutput) { return; } - mAudioIOOutput->write(request.fData, request.fSize); - } + void provideData(const DataRequest& request); void initializeAudio(eSoundSettingsData &soundSettings, const QString &deviceName = QString()); @@ -78,17 +83,17 @@ class CORE_EXPORT AudioHandler : public QObject void setVolume(const int value); qreal getVolume(); const QString getDeviceName(); - QAudioDeviceInfo findDevice(const QString &deviceName); + QtAudioDevice findDevice(const QString &deviceName); const QStringList listDevices(); - QAudioOutput* audioOutput() const { return mAudioOutput; } + QtAudioOutput* audioOutput() const { return mAudioOutput; } signals: void deviceChanged(); private: - QAudioDeviceInfo mAudioDevice; - QAudioOutput *mAudioOutput = nullptr; + QtAudioDevice mAudioDevice; + QtAudioOutput *mAudioOutput = nullptr; QIODevice *mAudioIOOutput = nullptr; // not owned QAudioFormat mAudioFormat; diff --git a/src/core/TransformEffects/followobjecteffect.cpp b/src/core/TransformEffects/followobjecteffect.cpp index b8bfa5f0a..13265afc8 100644 --- a/src/core/TransformEffects/followobjecteffect.cpp +++ b/src/core/TransformEffects/followobjecteffect.cpp @@ -39,7 +39,7 @@ void FollowObjectEffect::applyEffect(const qreal relFrame, qreal& rot, qreal& scaleX, qreal& scaleY, qreal& shearX, qreal& shearY, - QMatrix& postTransform, + QTransform& postTransform, BoundingBox* const parent) { Q_UNUSED(pivotX) Q_UNUSED(pivotY) diff --git a/src/core/TransformEffects/followobjecteffect.h b/src/core/TransformEffects/followobjecteffect.h index a37c51e32..f1ec5a5d1 100644 --- a/src/core/TransformEffects/followobjecteffect.h +++ b/src/core/TransformEffects/followobjecteffect.h @@ -38,7 +38,7 @@ class FollowObjectEffect : public FollowObjectEffectBase { qreal &rot, qreal &scaleX, qreal &scaleY, qreal &shearX, qreal &shearY, - QMatrix& postTransform, + QTransform& postTransform, BoundingBox* const parent) override; }; diff --git a/src/core/TransformEffects/followobjecteffectbase.cpp b/src/core/TransformEffects/followobjecteffectbase.cpp index 44bc15c30..fad5df178 100644 --- a/src/core/TransformEffects/followobjecteffectbase.cpp +++ b/src/core/TransformEffects/followobjecteffectbase.cpp @@ -55,7 +55,7 @@ void FollowObjectEffectBase::applyEffectWithTransform( qreal& scaleX, qreal& scaleY, qreal& shearX, qreal& shearY, BoundingBox* const parent, - const QMatrix& transform) { + const QTransform& transform) { Q_UNUSED(pivotX); Q_UNUSED(pivotY); Q_UNUSED(shearX); diff --git a/src/core/TransformEffects/followobjecteffectbase.h b/src/core/TransformEffects/followobjecteffectbase.h index 3c63f5bbd..77ca6aa90 100644 --- a/src/core/TransformEffects/followobjecteffectbase.h +++ b/src/core/TransformEffects/followobjecteffectbase.h @@ -44,7 +44,7 @@ class FollowObjectEffectBase : public TargetTransformEffect { qreal &scaleX, qreal &scaleY, qreal &shearX, qreal &shearY, BoundingBox* const parent, - const QMatrix& transform); + const QTransform& transform); protected: void setRotScaleAfterTargetChange( BoundingBox* const oldTarget, diff --git a/src/core/TransformEffects/followobjectrelativeeffect.cpp b/src/core/TransformEffects/followobjectrelativeeffect.cpp index 511972cf5..e5bc5497c 100644 --- a/src/core/TransformEffects/followobjectrelativeeffect.cpp +++ b/src/core/TransformEffects/followobjectrelativeeffect.cpp @@ -41,7 +41,7 @@ void FollowObjectRelativeEffect::applyEffect( qreal& rot, qreal& scaleX, qreal& scaleY, qreal& shearX, qreal& shearY, - QMatrix& postTransform, + QTransform& postTransform, BoundingBox* const parent) { Q_UNUSED(pivotX) Q_UNUSED(pivotY) diff --git a/src/core/TransformEffects/followobjectrelativeeffect.h b/src/core/TransformEffects/followobjectrelativeeffect.h index 53cd6a7b4..eb4642817 100644 --- a/src/core/TransformEffects/followobjectrelativeeffect.h +++ b/src/core/TransformEffects/followobjectrelativeeffect.h @@ -39,7 +39,7 @@ class FollowObjectRelativeEffect : qreal &rot, qreal &scaleX, qreal &scaleY, qreal &shearX, qreal &shearY, - QMatrix& postTransform, + QTransform& postTransform, BoundingBox* const parent) override; }; diff --git a/src/core/TransformEffects/followpatheffect.cpp b/src/core/TransformEffects/followpatheffect.cpp index 7b629f396..ab11b4733 100644 --- a/src/core/TransformEffects/followpatheffect.cpp +++ b/src/core/TransformEffects/followpatheffect.cpp @@ -47,7 +47,7 @@ FollowPathEffect::FollowPathEffect() : void calculateFollowRotPosChange( const SkPath relPath, - const QMatrix transform, + const QTransform transform, const bool lengthBased, const bool rotate, const qreal infl, @@ -140,7 +140,7 @@ void FollowPathEffect::applyEffect(const qreal relFrame, qreal& rot, qreal& scaleX, qreal& scaleY, qreal& shearX, qreal& shearY, - QMatrix& postTransform, + QTransform& postTransform, BoundingBox* const parent) { Q_UNUSED(pivotX) Q_UNUSED(pivotY) diff --git a/src/core/TransformEffects/followpatheffect.h b/src/core/TransformEffects/followpatheffect.h index 0a87927c9..5ce3912e2 100644 --- a/src/core/TransformEffects/followpatheffect.h +++ b/src/core/TransformEffects/followpatheffect.h @@ -40,7 +40,7 @@ class FollowPathEffect : public TargetTransformEffect { qreal &rot, qreal &scaleX, qreal &scaleY, qreal &shearX, qreal &shearY, - QMatrix& postTransform, + QTransform& postTransform, BoundingBox* const parent) override; QDomElement saveFollowPathSVG(SvgExporter& exp, diff --git a/src/core/TransformEffects/parenteffect.cpp b/src/core/TransformEffects/parenteffect.cpp index 0b9c3a0b1..8b86c2873 100644 --- a/src/core/TransformEffects/parenteffect.cpp +++ b/src/core/TransformEffects/parenteffect.cpp @@ -108,7 +108,7 @@ void ParentEffect::applyEffect(const qreal relFrame, qreal& scaleY, qreal& shearX, qreal& shearY, - QMatrix& postTransform, + QTransform& postTransform, BoundingBox* const parent) { Q_UNUSED(parent) @@ -176,7 +176,7 @@ bool ParentEffect::computeEffectTransform(const qreal relFrame, const qreal scaleXInfl, const qreal scaleYInfl, const qreal rotInfl, - QMatrix& outPostTransform, + QTransform& outPostTransform, const bool updateState) { if (!isVisible()) { return false; } @@ -198,9 +198,9 @@ bool ParentEffect::computeEffectTransform(const qreal relFrame, if (!ensureBindState(relFrame)) { return false; } - const QMatrix targetRel = target->getRelativeTransformAtFrame(targetRelFrame); - const QMatrix targetInParentSpace = targetRel*mBindTargetParentToParentSpace; - const QMatrix targetLinear(targetInParentSpace.m11(), + const QTransform targetRel = target->getRelativeTransformAtFrame(targetRelFrame); + const QTransform targetInParentSpace = targetRel*mBindTargetParentToParentSpace; + const QTransform targetLinear(targetInParentSpace.m11(), targetInParentSpace.m12(), targetInParentSpace.m21(), targetInParentSpace.m22(), @@ -210,10 +210,10 @@ bool ParentEffect::computeEffectTransform(const qreal relFrame, const QPointF targetPivotInParent = targetInParentSpace.map(targetPivotRel); bool bindLinearInvertible = false; - const QMatrix bindLinearInv = mBindTargetLinearInParent.inverted(&bindLinearInvertible); + const QTransform bindLinearInv = mBindTargetLinearInParent.inverted(&bindLinearInvertible); if (!bindLinearInvertible) { return false; } - const QMatrix deltaLinear = targetLinear*bindLinearInv; + const QTransform deltaLinear = targetLinear*bindLinearInv; const TransformValues deltaValues = MatrixDecomposition::decompose(deltaLinear); const qreal rawDeltaAngle = std::atan2(deltaLinear.m12(), deltaLinear.m11()); @@ -240,7 +240,7 @@ bool ParentEffect::computeEffectTransform(const qreal relFrame, linearValues.fShearX = deltaValues.fShearX*scaleXInfl; linearValues.fShearY = deltaValues.fShearY*scaleYInfl; - const QMatrix linear = linearValues.calculate(); + const QTransform linear = linearValues.calculate(); const QPointF objectPivotLocal(baseValues.fPivotX, baseValues.fPivotY); @@ -289,9 +289,9 @@ bool ParentEffect::computeEffectTransform(const qreal relFrame, QPointF noFollowPivot = mBindObjectPivotInParent; if (mNoFollowStateValid) { bool prevLinearInvertible = false; - const QMatrix prevLinearInv = mNoFollowLinearState.inverted(&prevLinearInvertible); + const QTransform prevLinearInv = mNoFollowLinearState.inverted(&prevLinearInvertible); if (prevLinearInvertible) { - const QMatrix deltaLinearStep = linear*prevLinearInv; + const QTransform deltaLinearStep = linear*prevLinearInv; const QPointF prevRel(mNoFollowPivotState.x() - targetPivotInParent.x(), mNoFollowPivotState.y() - targetPivotInParent.y()); const QPointF nextRel = mapLinear(deltaLinearStep, prevRel); @@ -316,7 +316,7 @@ bool ParentEffect::computeEffectTransform(const qreal relFrame, const QPointF offset(finalPivot.x() - linearAtObjectPivot.x(), finalPivot.y() - linearAtObjectPivot.y()); - outPostTransform = QMatrix(linear.m11(), linear.m12(), + outPostTransform = QTransform(linear.m11(), linear.m12(), linear.m21(), linear.m22(), offset.x(), offset.y()); @@ -340,19 +340,19 @@ void ParentEffect::captureBindState(const qreal relFrame) const qreal absFrame = prp_relFrameToAbsFrameF(relFrame); const qreal targetRelFrame = target->prp_absFrameToRelFrameF(absFrame); - const QMatrix inherited = parent->getInheritedTransformAtFrame(relFrame); + const QTransform inherited = parent->getInheritedTransformAtFrame(relFrame); bool inheritedInvertible = false; - const QMatrix inheritedInv = inherited.inverted(&inheritedInvertible); + const QTransform inheritedInv = inherited.inverted(&inheritedInvertible); if (!inheritedInvertible) { mBindStateValid = false; return; } - const QMatrix targetInherited = target->getInheritedTransformAtFrame(targetRelFrame); + const QTransform targetInherited = target->getInheritedTransformAtFrame(targetRelFrame); mBindTargetParentToParentSpace = targetInherited*inheritedInv; - const QMatrix targetRel = target->getRelativeTransformAtFrame(targetRelFrame); - const QMatrix targetInParentSpace = targetRel*mBindTargetParentToParentSpace; - const QMatrix targetLinear(targetInParentSpace.m11(), + const QTransform targetRel = target->getRelativeTransformAtFrame(targetRelFrame); + const QTransform targetInParentSpace = targetRel*mBindTargetParentToParentSpace; + const QTransform targetLinear(targetInParentSpace.m11(), targetInParentSpace.m12(), targetInParentSpace.m21(), targetInParentSpace.m22(), @@ -370,7 +370,7 @@ void ParentEffect::captureBindState(const qreal relFrame) mAccumDeltaAngleRad = 0.0; mDeltaAngleStateValid = false; mNoFollowPivotState = objectPivotInParent; - mNoFollowLinearState = QMatrix(); + mNoFollowLinearState = QTransform(); mNoFollowStateValid = true; const auto transform = parent->getBoxTransformAnimator(); @@ -445,7 +445,7 @@ void ParentEffect::handleInfluenceChanged() const TransformValues baseValues = getCurrentBaseValues(transform, relFrame); - QMatrix oldPost; + QTransform oldPost; if (!computeEffectTransform(relFrame, baseValues, mPrevPosInfluence.x(), @@ -459,7 +459,7 @@ void ParentEffect::handleInfluenceChanged() return; } - QMatrix newPost; + QTransform newPost; if (!computeEffectTransform(relFrame, baseValues, posXInfl, @@ -474,14 +474,14 @@ void ParentEffect::handleInfluenceChanged() } bool invertible = false; - const QMatrix invNewPost = newPost.inverted(&invertible); + const QTransform invNewPost = newPost.inverted(&invertible); if (!invertible) { updatePrevInfluences(relFrame); return; } - const QMatrix baseRel = baseValues.calculate(); - const QMatrix newBaseRel = baseRel*oldPost*invNewPost; + const QTransform baseRel = baseValues.calculate(); + const QTransform newBaseRel = baseRel*oldPost*invNewPost; TransformValues newValues = MatrixDecomposition::decomposePivoted(newBaseRel, QPointF(baseValues.fPivotX, diff --git a/src/core/TransformEffects/parenteffect.h b/src/core/TransformEffects/parenteffect.h index 4ae1b0b46..1905e4c73 100644 --- a/src/core/TransformEffects/parenteffect.h +++ b/src/core/TransformEffects/parenteffect.h @@ -49,7 +49,7 @@ class ParentEffect : public FollowObjectEffectBase qreal &scaleY, qreal &shearX, qreal &shearY, - QMatrix& postTransform, + QTransform& postTransform, BoundingBox* const parent) override; private: @@ -63,7 +63,7 @@ class ParentEffect : public FollowObjectEffectBase const qreal scaleXInfl, const qreal scaleYInfl, const qreal rotInfl, - QMatrix& outPostTransform, + QTransform& outPostTransform, const bool updateState); void handleInfluenceChanged(); @@ -91,13 +91,13 @@ class ParentEffect : public FollowObjectEffectBase bool mPrevInfluenceValid = false; QPointF mBindTargetPivotInParent; QPointF mBindObjectPivotInParent; - QMatrix mBindTargetParentToParentSpace; - QMatrix mBindTargetLinearInParent; + QTransform mBindTargetParentToParentSpace; + QTransform mBindTargetLinearInParent; bool mBindStateValid = false; qreal mAccumDeltaAngleRad = 0.0; bool mDeltaAngleStateValid = false; QPointF mNoFollowPivotState; - QMatrix mNoFollowLinearState; + QTransform mNoFollowLinearState; bool mNoFollowStateValid = false; QPointF mLastBaseMove; bool mLastBaseMoveValid = false; diff --git a/src/core/TransformEffects/trackeffect.cpp b/src/core/TransformEffects/trackeffect.cpp index 1a0be1b81..d1fc5607d 100644 --- a/src/core/TransformEffects/trackeffect.cpp +++ b/src/core/TransformEffects/trackeffect.cpp @@ -89,7 +89,7 @@ void TrackEffect::applyEffect( qreal& rot, qreal& scaleX, qreal& scaleY, qreal& shearX, qreal& shearY, - QMatrix& postTransform, + QTransform& postTransform, BoundingBox* const parent) { Q_UNUSED(pivotX) Q_UNUSED(pivotY) diff --git a/src/core/TransformEffects/trackeffect.h b/src/core/TransformEffects/trackeffect.h index 80683743d..b6f9207cc 100644 --- a/src/core/TransformEffects/trackeffect.h +++ b/src/core/TransformEffects/trackeffect.h @@ -38,7 +38,7 @@ class TrackEffect : public TargetTransformEffect { qreal &rot, qreal &scaleX, qreal &scaleY, qreal &shearX, qreal &shearY, - QMatrix& postTransform, + QTransform& postTransform, BoundingBox* const parent) override; private: void setRotScaleAfterTargetChange( diff --git a/src/core/TransformEffects/transformeffect.h b/src/core/TransformEffects/transformeffect.h index eb8fc43d3..4ba67d9fe 100644 --- a/src/core/TransformEffects/transformeffect.h +++ b/src/core/TransformEffects/transformeffect.h @@ -47,7 +47,7 @@ class TransformEffect : public eEffect { qreal& rot, qreal& scaleX, qreal& scaleY, qreal& shearX, qreal& shearY, - QMatrix& postTransform, + QTransform& postTransform, BoundingBox* const parent) = 0; void prp_setupTreeViewMenu(PropertyMenu * const menu); diff --git a/src/core/TransformEffects/transformeffectcollection.cpp b/src/core/TransformEffects/transformeffectcollection.cpp index 07f794c08..ffc448c5b 100644 --- a/src/core/TransformEffects/transformeffectcollection.cpp +++ b/src/core/TransformEffects/transformeffectcollection.cpp @@ -127,7 +127,7 @@ void TransformEffectCollection::applyEffects( qreal& rot, qreal& scaleX, qreal& scaleY, qreal& shearX, qreal& shearY, - QMatrix& postTransform, + QTransform& postTransform, BoundingBox* const parent) const { const int iMax = ca_getNumberOfChildren(); for(int i = 0; i < iMax; i++) { diff --git a/src/core/TransformEffects/transformeffectcollection.h b/src/core/TransformEffects/transformeffectcollection.h index 864b02d9a..480108315 100644 --- a/src/core/TransformEffects/transformeffectcollection.h +++ b/src/core/TransformEffects/transformeffectcollection.h @@ -74,7 +74,7 @@ class CORE_EXPORT TransformEffectCollection : qreal& rot, qreal& scaleX, qreal& scaleY, qreal& shearX, qreal& shearY, - QMatrix& postTransform, + QTransform& postTransform, BoundingBox* const parent) const; }; diff --git a/src/core/XML/xmlexporthelpers.cpp b/src/core/XML/xmlexporthelpers.cpp index d0a389fed..b5f16f067 100644 --- a/src/core/XML/xmlexporthelpers.cpp +++ b/src/core/XML/xmlexporthelpers.cpp @@ -104,28 +104,20 @@ QString XmlExportHelpers::blendModeToString(const SkBlendMode blendMode) { } } -qreal XmlExportHelpers::stringToDouble(const QStringRef& string) { +qreal XmlExportHelpers::stringToDouble(const QStringView& string) { bool ok; const qreal value = string.toDouble(&ok); if(!ok) RuntimeThrow("Invalid value " + string.toString()); return value; } -qreal XmlExportHelpers::stringToDouble(const QString& string) { - return stringToDouble(&string); -} - -int XmlExportHelpers::stringToInt(const QStringRef& string) { +int XmlExportHelpers::stringToInt(const QStringView& string) { bool ok; const int value = string.toInt(&ok); if(!ok) RuntimeThrow("Invalid value " + string.toString()); return value; } -int XmlExportHelpers::stringToInt(const QString& string) { - return stringToInt(&string); -} - QDomElement XevExportHelpers::brushToElement( SimpleBrushWrapper* const brush, QDomDocument& doc) { auto ele = doc.createElement("Brush"); @@ -140,7 +132,7 @@ SimpleBrushWrapper* XevExportHelpers::brushFromElement(const QDomElement& ele) { return BrushCollectionData::sGetBrush(coll, name); } -QMatrix XmlExportHelpers::stringToMatrix(const QString& str) { +QTransform XmlExportHelpers::stringToMatrix(const QString& str) { const auto vals = str.split(' ', Qt::SkipEmptyParts); if(vals.count() != 6) RuntimeThrow("Invalid matrix value '" + str + "'"); const qreal m11 = stringToDouble(vals[0]); @@ -149,10 +141,10 @@ QMatrix XmlExportHelpers::stringToMatrix(const QString& str) { const qreal m22 = stringToDouble(vals[3]); const qreal dx = stringToDouble(vals[4]); const qreal dy = stringToDouble(vals[5]); - return QMatrix(m11, m12, m21, m22, dx, dy); + return QTransform(m11, m12, m21, m22, dx, dy); } -QString XmlExportHelpers::matrixToString(const QMatrix& m) { +QString XmlExportHelpers::matrixToString(const QTransform& m) { return QString("%1 %2 %3 %4 %5 %6").arg(m.m11()).arg(m.m12()). arg(m.m21()).arg(m.m22()). arg(m.dx()).arg(m.dy()); @@ -166,14 +158,15 @@ void XevExportHelpers::setAbsAndRelFileSrc(const QString& absSrc, } QString XevExportHelpers::getAbsAndRelFileSrc(const QDomElement& ele, - const XevImporter& imp) { + const XevImporter& imp) +{ const auto relSrc = ele.attribute("relSrc"); const auto absRelSrc = imp.relPathToAbsPath(relSrc); - if(QFileInfo(absRelSrc).exists()) { + if (QFileInfo::exists(absRelSrc)) { return absRelSrc; } else { const auto absSrc = ele.attribute("absSrc"); - if(absSrc.isEmpty()) return absRelSrc; + if (absSrc.isEmpty()) { return absRelSrc; } else return absSrc; } } diff --git a/src/core/XML/xmlexporthelpers.h b/src/core/XML/xmlexporthelpers.h index 34d012711..90200f33b 100644 --- a/src/core/XML/xmlexporthelpers.h +++ b/src/core/XML/xmlexporthelpers.h @@ -45,13 +45,10 @@ namespace XmlExportHelpers { QString blendModeToString(const SkBlendMode blendMode); CORE_EXPORT - qreal stringToDouble(const QStringRef& string); - CORE_EXPORT - qreal stringToDouble(const QString& string); - CORE_EXPORT - int stringToInt(const QStringRef& string); + qreal stringToDouble(const QStringView& string); + CORE_EXPORT - int stringToInt(const QString& string); + int stringToInt(const QStringView& string); template T stringToEnum(const S& string) { @@ -73,9 +70,9 @@ namespace XmlExportHelpers { } CORE_EXPORT - QMatrix stringToMatrix(const QString& str); + QTransform stringToMatrix(const QString& str); CORE_EXPORT - QString matrixToString(const QMatrix& m); + QString matrixToString(const QTransform& m); }; namespace XevExportHelpers { diff --git a/src/core/appsupport.cpp b/src/core/appsupport.cpp index 51903accc..1c980e236 100644 --- a/src/core/appsupport.cpp +++ b/src/core/appsupport.cpp @@ -934,7 +934,7 @@ bool AppSupport::removeXDGDesktopIntegration() QFile fileName(QString("%1/%2").arg(path, file)); if (fileName.exists()) { if (!fileName.remove()) { - qWarning() << "Failed to remove" << fileName; + qWarning() << "Failed to remove" << fileName.fileName(); return false; } } @@ -1036,6 +1036,12 @@ void AppSupport::initEnv(const bool &isRenderer) // GLX not supported! qputenv("QT_XCB_GL_INTEGRATION", "xcb_egl"); #endif + +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + qputenv("QT_WIDGETS_RHI", "1"); + qputenv("QT_WIDGETS_RHI_BACKEND", "opengl"); + qputenv("QSG_RHI_BACKEND", "opengl"); +#endif } QPair AppSupport::handleXDGArgs(const bool &isRenderer, diff --git a/src/core/canvas.cpp b/src/core/canvas.cpp index f6e587c51..58173f251 100644 --- a/src/core/canvas.cpp +++ b/src/core/canvas.cpp @@ -249,7 +249,7 @@ void drawTransparencyMesh(SkCanvas* const canvas, void Canvas::renderSk(SkCanvas* const canvas, const QRect& drawRect, - const QMatrix& viewTrans, + const QTransform& viewTrans, const bool mouseGrabbing) { mDrawnSinceQue = true; diff --git a/src/core/canvas.h b/src/core/canvas.h index 6bdeb5c6c..8cf6b2b87 100644 --- a/src/core/canvas.h +++ b/src/core/canvas.h @@ -312,14 +312,14 @@ class CORE_EXPORT Canvas : public CanvasBase void updateTotalTransform() {} - QMatrix getTotalTransform() const + QTransform getTotalTransform() const { - return QMatrix(); + return QTransform(); } - QMatrix getRelativeTransformAtCurrentFrame() const + QTransform getRelativeTransformAtCurrentFrame() const { - return QMatrix(); + return QTransform(); } QPointF mapAbsPosToRel(const QPointF &absPos) @@ -334,7 +334,7 @@ class CORE_EXPORT Canvas : public CanvasBase void renderSk(SkCanvas* const canvas, const QRect &drawRect, - const QMatrix &viewTrans, + const QTransform &viewTrans, const bool mouseGrabbing); void renderGizmos(SkCanvas* const canvas, const qreal qInvZoom, @@ -415,7 +415,7 @@ class CORE_EXPORT Canvas : public CanvasBase stdsptr createRenderData(); void setupRenderData(const qreal relFrame, - const QMatrix &parentM, + const QTransform &parentM, BoxRenderData* const data, Canvas* const scene) { diff --git a/src/core/canvasmouseinteractions.cpp b/src/core/canvasmouseinteractions.cpp index 4f5d89e84..9ccbd511e 100644 --- a/src/core/canvasmouseinteractions.cpp +++ b/src/core/canvasmouseinteractions.cpp @@ -54,7 +54,6 @@ #include "MovablePoints/smartnodepoint.h" #include "MovablePoints/pathpivot.h" -#include #include #include #include @@ -551,8 +550,8 @@ const QColor Canvas::pickPixelColor(const QPoint &pos) // Windows and X11 don't care QScreen *screen = QApplication::screenAt(pos); if (!screen) { return QColor(); } - WId wid = QApplication::desktop()->winId(); - const auto pix = screen->grabWindow(wid, pos.x(), pos.y(), 1, 1); + QPoint localPos = pos - screen->geometry().topLeft(); + const auto pix = screen->grabWindow(0, localPos.x(), localPos.y(), 1, 1); return QColor(pix.toImage().pixel(0, 0)); } diff --git a/src/core/canvasselectedboxesactions.cpp b/src/core/canvasselectedboxesactions.cpp index 8968e1d12..4ceb39c7e 100644 --- a/src/core/canvasselectedboxesactions.cpp +++ b/src/core/canvasselectedboxesactions.cpp @@ -758,7 +758,7 @@ SmartVectorPath *Canvas::getPathResultingFromOperation(const SkPathOp& pathOp) for (const auto &box : boxes) { if (const auto pBox = enve_cast(box)) { SkPath boxPath = pBox->getRelativePath(); - const QMatrix boxTrans = box->getRelativeTransformAtCurrentFrame(); + const QTransform boxTrans = box->getRelativeTransformAtCurrentFrame(); boxPath.transform(toSkMatrix(boxTrans)); if (first) { builder.add(boxPath, SkPathOp::kUnion_SkPathOp); @@ -796,11 +796,11 @@ SmartVectorPath *Canvas::getPathResultingFromCombine() { } const auto targetVP = newPath->getPathAnimator(); - const QMatrix firstTranf = newPath->getTotalTransform(); + const QTransform firstTranf = newPath->getTotalTransform(); for(const auto &box : mSelectedBoxes) { if(box == newPath) continue; if(const auto boxPath = enve_cast(box)) { - const QMatrix relTransf = boxPath->getTotalTransform()* + const QTransform relTransf = boxPath->getTotalTransform()* firstTranf.inverted(); const auto srcVP = boxPath->getPathAnimator(); srcVP->applyTransform(relTransf); diff --git a/src/core/conncontextptr.h b/src/core/conncontextptr.h index 127714b96..d8d1fb021 100644 --- a/src/core/conncontextptr.h +++ b/src/core/conncontextptr.h @@ -83,7 +83,7 @@ class ConnContextQSPtr { T* operator->() const { return mPtr.get(); } operator T*() const { return mPtr.get(); } - operator bool() const { return mPtr; } + operator bool() const { return !mPtr.isNull(); } T* operator*() const { return mPtr.get(); } ConnContext& operator<<(const QMetaObject::Connection& connection) { return mConnContext << connection; } diff --git a/src/core/customidentifier.cpp b/src/core/customidentifier.cpp index ce59bced4..7193dc97f 100644 --- a/src/core/customidentifier.cpp +++ b/src/core/customidentifier.cpp @@ -53,8 +53,8 @@ CustomIdentifier CustomIdentifier::sRead(eReadStream& src) { CustomIdentifier CustomIdentifier::sReadXEV(const QDomElement& ele) { CustomIdentifier id; - id.fEffectId = XmlExportHelpers::stringToInt(ele.attribute("id")); - id.fEffectName = XmlExportHelpers::stringToInt(ele.attribute("name")); + id.fEffectId = ele.attribute("id"); + id.fEffectName = ele.attribute("name"); const QString versionStr = ele.attribute("version"); id.fVersion = Version::sFromString(versionStr); return id; diff --git a/src/core/customidentifier.h b/src/core/customidentifier.h index d2f7c98ff..9e8e9ed5c 100644 --- a/src/core/customidentifier.h +++ b/src/core/customidentifier.h @@ -47,7 +47,7 @@ struct CORE_EXPORT CustomIdentifier { } static Version sFromString(const QString& str) { - const auto sep = str.splitRef('.'); + const auto sep = str.split('.'); if(sep.count() != 3) RuntimeThrow("Invalid Version format " + str); return {sep[0].toUInt(), sep[1].toUInt(), sep[2].toUInt()}; } diff --git a/src/core/matrixdecomposition.cpp b/src/core/matrixdecomposition.cpp index 3ab205368..8dafed940 100644 --- a/src/core/matrixdecomposition.cpp +++ b/src/core/matrixdecomposition.cpp @@ -26,7 +26,7 @@ #include "matrixdecomposition.h" #include "simplemath.h" -TransformValues MatrixDecomposition::decompose(const QMatrix &transform) { +TransformValues MatrixDecomposition::decompose(const QTransform &transform) { TransformValues result; result.fPivotX = 0; result.fPivotY = 0; @@ -69,7 +69,7 @@ TransformValues MatrixDecomposition::decompose(const QMatrix &transform) { } TransformValues MatrixDecomposition::decomposePivoted( - const QMatrix &transform, const QPointF &pivot) { + const QTransform &transform, const QPointF &pivot) { const TransformValues notPivoted = decompose(transform); TransformValues result = setPivotKeepTransform(notPivoted, pivot); return result; @@ -77,7 +77,7 @@ TransformValues MatrixDecomposition::decomposePivoted( TransformValues MatrixDecomposition::setPivotKeepTransform( const TransformValues &transform, const QPointF &newPivot) { - QMatrix newTransform; + QTransform newTransform; newTransform.translate(newPivot.x() + transform.fMoveX, newPivot.y() + transform.fMoveY); diff --git a/src/core/matrixdecomposition.h b/src/core/matrixdecomposition.h index b9ef054d2..74e72f632 100644 --- a/src/core/matrixdecomposition.h +++ b/src/core/matrixdecomposition.h @@ -30,9 +30,9 @@ namespace MatrixDecomposition { CORE_EXPORT - TransformValues decompose(const QMatrix& transform); + TransformValues decompose(const QTransform& transform); CORE_EXPORT - TransformValues decomposePivoted(const QMatrix& transform, + TransformValues decomposePivoted(const QTransform& transform, const QPointF& pivot); CORE_EXPORT TransformValues setPivotKeepTransform(const TransformValues& transform, diff --git a/src/core/namefixer.cpp b/src/core/namefixer.cpp index 61eb8c968..7ecc5f1e8 100644 --- a/src/core/namefixer.cpp +++ b/src/core/namefixer.cpp @@ -28,8 +28,9 @@ #include "Properties/property.h" QString NameFixer::stringScrapEndDigits(const QString &string) { - const QRegExp endNumbers(QStringLiteral("[0-9]+$")); - const int endNumbersIndex = endNumbers.indexIn(string); + const QRegularExpression endNumbers(QStringLiteral("[0-9]+$")); + QRegularExpressionMatch match = endNumbers.match(string); + const int endNumbersIndex = match.capturedStart(); QString trimmedName; if(endNumbersIndex >= 0) { return string.mid(0, endNumbersIndex); diff --git a/src/core/namefixer.h b/src/core/namefixer.h index ac98da19d..8fc898bcf 100644 --- a/src/core/namefixer.h +++ b/src/core/namefixer.h @@ -28,7 +28,7 @@ #include "core_global.h" -#include +#include #include namespace NameFixer { diff --git a/src/core/paintsettingsapplier.h b/src/core/paintsettingsapplier.h index 6a6d1c6c6..c9b24a8d7 100644 --- a/src/core/paintsettingsapplier.h +++ b/src/core/paintsettingsapplier.h @@ -103,7 +103,7 @@ class CORE_EXPORT GradientPtsPosSetting : public PaintSetting { class CORE_EXPORT GradientTransformSetting : public PaintSetting { public: GradientTransformSetting(const Target& target, - const QMatrix& trans) : + const QTransform& trans) : PaintSetting(target), mTransform(trans) {} protected: void applyToPS(PaintSettingsAnimator * const target) const { @@ -111,7 +111,7 @@ class CORE_EXPORT GradientTransformSetting : public PaintSetting { target->setGradientTransform(dec); } private: - const QMatrix mTransform; + const QTransform mTransform; }; class CORE_EXPORT GradientTypePaintSetting : public PaintSetting { diff --git a/src/core/pointhelpers.cpp b/src/core/pointhelpers.cpp index 3a3b2833a..d8ca70b1e 100644 --- a/src/core/pointhelpers.cpp +++ b/src/core/pointhelpers.cpp @@ -29,7 +29,7 @@ #include #include #include -#include +#include #include typedef std::complex cmplx; diff --git a/src/core/renderinstancesettings.cpp b/src/core/renderinstancesettings.cpp index 2a7595acb..a0536c09d 100644 --- a/src/core/renderinstancesettings.cpp +++ b/src/core/renderinstancesettings.cpp @@ -126,7 +126,6 @@ void RenderInstanceSettings::renderingAboutToStart() { mRenderSettings.fFrameInc = mRenderSettings.fBaseFps/mRenderSettings.fFps; } -#include void RenderInstanceSettings::setCurrentState(const RenderState &state, const QString &text) { mState = state; diff --git a/src/core/simplemath.cpp b/src/core/simplemath.cpp index 134d47048..03f2a7f00 100644 --- a/src/core/simplemath.cpp +++ b/src/core/simplemath.cpp @@ -265,7 +265,7 @@ bool nearlyEqual(double lhs, return std::abs(lhs - rhs) <= eps; } -QPointF mapLinear(const QMatrix &m, +QPointF mapLinear(const QTransform &m, const QPointF &p) { return {m.m11()*p.x() + m.m21()*p.y(), diff --git a/src/core/simplemath.h b/src/core/simplemath.h index c6e3847db..0c0214f8d 100644 --- a/src/core/simplemath.h +++ b/src/core/simplemath.h @@ -158,8 +158,10 @@ qreal clamp(const qreal val, const T1 &min, const T2 &max) { template float clamp(const float val, const T1 &min, const T2 &max) { static_assert((std::is_same::value || + std::is_same::value || std::is_same::value) && (std::is_same::value || + std::is_same::value || std::is_same::value), "float can be clamped only with ints and floats"); if(val > max) return max; @@ -204,7 +206,7 @@ extern bool nearlyEqual(double lhs, double rhs); CORE_EXPORT -QPointF mapLinear(const QMatrix& m, +QPointF mapLinear(const QTransform& m, const QPointF& p); #endif // SIMPLEMATH_H diff --git a/src/core/singlewidgettarget.cpp b/src/core/singlewidgettarget.cpp index f586425f2..b12e8fad9 100644 --- a/src/core/singlewidgettarget.cpp +++ b/src/core/singlewidgettarget.cpp @@ -170,7 +170,7 @@ void SingleWidgetTarget::SWT_readAbstractionXEV( const QDomElement& ele, const XevImporter& imp) const { const QString absOpenStr = ele.attribute("open"); if(absOpenStr.isEmpty()) return; - const auto absOpenStrs = absOpenStr.splitRef(' '); + const auto absOpenStrs = absOpenStr.split(' '); QList open; for(const auto& val : absOpenStrs) { open << XmlExportHelpers::stringToInt(val); diff --git a/src/core/skia/skqtconversions.cpp b/src/core/skia/skqtconversions.cpp index ab45376e5..5e3d7d819 100644 --- a/src/core/skia/skqtconversions.cpp +++ b/src/core/skia/skqtconversions.cpp @@ -58,8 +58,8 @@ SkRect toSkRect(const QRectF &rect) { // m12 - skewY // m21 - skewX // m22 - scaleY -QMatrix toQMatrix(const SkMatrix &matrix) { - return QMatrix(toQreal(matrix.getScaleX()), +QTransform toQTransform(const SkMatrix &matrix) { + return QTransform(toQreal(matrix.getScaleX()), toQreal(matrix.getSkewY()), toQreal(matrix.getSkewX()), toQreal(matrix.getScaleY()), @@ -67,7 +67,7 @@ QMatrix toQMatrix(const SkMatrix &matrix) { toQreal(matrix.getTranslateY())); } -SkMatrix toSkMatrix(const QMatrix &matrix) { +SkMatrix toSkMatrix(const QTransform &matrix) { SkMatrix skMatrix; skMatrix.reset(); skMatrix.set(SkMatrix::kMScaleX, toSkScalar(matrix.m11())); @@ -281,7 +281,7 @@ QFont toQFont(const SkFont &skfont, const int skPPI, const int qPPI) { typeface->getFamilyName(&family); qFont.setFamily(family.c_str()); qFont.setStretch(stretch); - qFont.setWeight(weight); + qFont.setWeight(static_cast(weight)); qFont.setStyle(style); qFont.setPointSizeF(skfont.getSize()*skPPI/qPPI); return qFont; diff --git a/src/core/skia/skqtconversions.h b/src/core/skia/skqtconversions.h index 3569563e5..a241c13f3 100644 --- a/src/core/skia/skqtconversions.h +++ b/src/core/skia/skqtconversions.h @@ -27,7 +27,7 @@ #define SKQTCONVERSIONS_H #include -#include +#include #include #include @@ -72,10 +72,10 @@ extern SkRect toSkRect(const QRectF &rect); // m21 - skewX // m22 - scaleY CORE_EXPORT -extern QMatrix toQMatrix(const SkMatrix &matrix); +extern QTransform toQTransform(const SkMatrix &matrix); CORE_EXPORT -extern SkMatrix toSkMatrix(const QMatrix &matrix); +extern SkMatrix toSkMatrix(const QTransform &matrix); extern inline QPointF toQPointF(const SkPoint &point) { return QPointF(toQreal(point.x()), diff --git a/src/core/smartPointers/eobject.h b/src/core/smartPointers/eobject.h index 5f75c4117..1072eea65 100644 --- a/src/core/smartPointers/eobject.h +++ b/src/core/smartPointers/eobject.h @@ -29,10 +29,12 @@ #include "../core_global.h" #define e_PROHIBIT_HEAP \ -private: \ +public: \ + static void* operator new(size_t, void* ptr) noexcept { return ptr; } \ + private: \ static void *operator new (size_t sz) { \ return std::malloc(sz); \ - } +} #define e_OBJECT \ friend class SelfRef; \ diff --git a/src/core/svgimporter.cpp b/src/core/svgimporter.cpp index 9a7d1744f..fc786bf33 100644 --- a/src/core/svgimporter.cpp +++ b/src/core/svgimporter.cpp @@ -95,7 +95,7 @@ struct SvgGradient { qreal fY1; qreal fX2; qreal fY2; - QMatrix fTrans; + QTransform fTrans; GradientType fType; QString fUnits; }; @@ -127,7 +127,7 @@ class FillSvgAttributes { GradientType mGradientType = GradientType::LINEAR; QPointF mGradientP1; QPointF mGradientP2; - QMatrix mGradientTransform; + QTransform mGradientTransform; }; class StrokeSvgAttributes : public FillSvgAttributes { @@ -162,7 +162,7 @@ class BoxSvgAttributes { void setParent(const BoxSvgAttributes &parent); SkPathFillType getFillRule() const; - const QMatrix &getRelTransform() const; + const QTransform &getRelTransform() const; const FillSvgAttributes &getFillAttributes() const; const StrokeSvgAttributes &getStrokeAttributes() const; const TextSvgAttributes &getTextAttributes() const; @@ -181,7 +181,7 @@ class BoxSvgAttributes { qreal mOpacity = 100; - QMatrix mRelTransform; + QTransform mRelTransform; QString mId; QString mLabel; @@ -414,7 +414,7 @@ bool parsePolylineData(const QString &dataStr, while (str != end) { while(str->isSpace()) ++str; QChar endc = *end; - *const_cast(end) = 0; // parseNumbersArray requires 0-termination that QStringRef cannot guarantee + *const_cast(end) = QChar(); // parseNumbersArray requires 0-termination that QStringRef cannot guarantee QVarLengthArray arg; parseNumbersArray(str, arg); *const_cast(end) = endc; @@ -588,21 +588,23 @@ void loadLine(const QDomElement &pathElement, parentGroup->addContained(vectorPath); } -bool extractTranslation(const QString& str, QMatrix& target) { - const QRegExp rx1(RGXS "translate\\(" REGEX_SINGLE_FLOAT "\\)" RGXS, - Qt::CaseInsensitive); - if(rx1.exactMatch(str)) { - rx1.indexIn(str); - const QStringList capturedTxt = rx1.capturedTexts(); +bool extractTranslation(const QString& str, QTransform& target) { + const QRegularExpression rx1("^" RGXS "translate\\(" REGEX_SINGLE_FLOAT "\\)" RGXS "$", + QRegularExpression::CaseInsensitiveOption); + QRegularExpressionMatch match1 = rx1.match(str); + + if (match1.hasMatch()) { + const QStringList capturedTxt = match1.capturedTexts(); target.translate(capturedTxt.at(1).toDouble(), 0); return true; } - const QRegExp rx2(RGXS "translate\\(" REGEX_TWO_FLOATS "\\)" RGXS, - Qt::CaseInsensitive); - if(rx2.exactMatch(str)) { - rx2.indexIn(str); - const QStringList capturedTxt = rx2.capturedTexts(); + const QRegularExpression rx2("^" RGXS "translate\\(" REGEX_TWO_FLOATS "\\)" RGXS "$", + QRegularExpression::CaseInsensitiveOption); + QRegularExpressionMatch match2 = rx2.match(str); + + if (match2.hasMatch()) { + const QStringList capturedTxt = match2.capturedTexts(); target.translate(capturedTxt.at(1).toDouble(), capturedTxt.at(2).toDouble()); return true; @@ -612,22 +614,24 @@ bool extractTranslation(const QString& str, QMatrix& target) { } -bool extractScale(const QString& str, QMatrix& target) { - const QRegExp rx1(RGXS "scale\\(" REGEX_SINGLE_FLOAT "\\)" RGXS, - Qt::CaseInsensitive); - if(rx1.exactMatch(str)) { - rx1.indexIn(str); - const QStringList capturedTxt = rx1.capturedTexts(); +bool extractScale(const QString& str, QTransform& target) { + const QRegularExpression rx1("^" RGXS "scale\\(" REGEX_SINGLE_FLOAT "\\)" RGXS "$", + QRegularExpression::CaseInsensitiveOption); + QRegularExpressionMatch match1 = rx1.match(str); + + if (match1.hasMatch()) { + const QStringList capturedTxt = match1.capturedTexts(); const qreal scale = capturedTxt.at(1).toDouble(); target.scale(scale, scale); return true; } - const QRegExp rx2(RGXS "scale\\(" REGEX_TWO_FLOATS "\\)" RGXS, - Qt::CaseInsensitive); - if(rx2.exactMatch(str)) { - rx2.indexIn(str); - const QStringList capturedTxt = rx2.capturedTexts(); + const QRegularExpression rx2("^" RGXS "scale\\(" REGEX_TWO_FLOATS "\\)" RGXS "$", + QRegularExpression::CaseInsensitiveOption); + QRegularExpressionMatch match2 = rx2.match(str); + + if (match2.hasMatch()) { + const QStringList capturedTxt = match2.capturedTexts(); target.scale(capturedTxt.at(1).toDouble(), capturedTxt.at(2).toDouble()); return true; @@ -637,14 +641,14 @@ bool extractScale(const QString& str, QMatrix& target) { } bool extractRotate(const QString& str, - QMatrix& target) + QTransform& target) { - const QRegExp rxRotate("rotate\\s*\\(\\s*([^\\s,)]+)(?:[\\s,]+([^\\s,)]+)[\\s,]+([^\\s,)]+))?\\s*\\)", - Qt::CaseInsensitive); + const QRegularExpression rxRotate("rotate\\s*\\(\\s*([^\\s,)]+)(?:[\\s,]+([^\\s,)]+)[\\s,]+([^\\s,)]+))?\\s*\\)", + QRegularExpression::CaseInsensitiveOption); - int pos = rxRotate.indexIn(str); - if (pos != -1) { - const QStringList captured = rxRotate.capturedTexts(); + QRegularExpressionMatch match = rxRotate.match(str); + if (match.hasMatch()) { + const QStringList captured = match.capturedTexts(); bool ok; double angle = captured.at(1).toDouble(&ok); @@ -662,34 +666,39 @@ bool extractRotate(const QString& str, return true; } } + return false; } -bool extractWholeMatrix(const QString& str, QMatrix& target) { - const QRegExp rx(RGXS "matrix\\(" - REGEX_FIRST_FLOAT - REGEX_INNER_FLOAT - REGEX_INNER_FLOAT - REGEX_INNER_FLOAT - REGEX_INNER_FLOAT - REGEX_LAST_FLOAT - "\\)" RGXS, Qt::CaseInsensitive); - if(rx.exactMatch(str)) { - rx.indexIn(str); - const QStringList capturedTxt = rx.capturedTexts(); - target.setMatrix(capturedTxt.at(1).toDouble(), - capturedTxt.at(2).toDouble(), - capturedTxt.at(3).toDouble(), - capturedTxt.at(4).toDouble(), - capturedTxt.at(5).toDouble(), - capturedTxt.at(6).toDouble()); +bool extractWholeMatrix(const QString& str, QTransform& target) { + const QRegularExpression rx("^" RGXS "matrix\\(" + REGEX_FIRST_FLOAT + REGEX_INNER_FLOAT + REGEX_INNER_FLOAT + REGEX_INNER_FLOAT + REGEX_INNER_FLOAT + REGEX_LAST_FLOAT + "\\)" RGXS "$", + QRegularExpression::CaseInsensitiveOption); + + QRegularExpressionMatch match = rx.match(str); + + if (match.hasMatch()) { + const QStringList capturedTxt = match.capturedTexts(); + target = QTransform(capturedTxt.at(1).toDouble(), // m11 (a) + capturedTxt.at(2).toDouble(), // m12 (b) + capturedTxt.at(3).toDouble(), // m21 (c) + capturedTxt.at(4).toDouble(), // m22 (d) + capturedTxt.at(5).toDouble(), // dx (e) + capturedTxt.at(6).toDouble());// dy (f) return true; } + return false; } -QMatrix getMatrixFromString(const QString &str) { - QMatrix matrix; +QTransform getMatrixFromString(const QString &str) { + QTransform matrix; if(str.isEmpty()) return matrix; const bool found = str.isEmpty() || extractWholeMatrix(str, matrix) || @@ -733,7 +742,7 @@ void applyGradientToAttributes(const QDomElement &element, const SvgGradient &templateGrad = gGradients[gradId]; QPointF p1, p2; - QMatrix finalTransform; + QTransform finalTransform; if (templateGrad.fUnits == "objectBoundingBox") { qreal w = element.attribute("width").toDouble(); @@ -750,10 +759,10 @@ void applyGradientToAttributes(const QDomElement &element, p2 = QPointF((templateGrad.fX2 / divX) * w, (templateGrad.fY2 / divY) * h); - QMatrix m = templateGrad.fTrans; - finalTransform.setMatrix(m.m11(), m.m12(), - m.m21(), m.m22(), - m.dx() * w, m.dy() * h); + QTransform m = templateGrad.fTrans; + finalTransform.setMatrix(m.m11(), m.m12(), 0.0, + m.m21(), m.m22(), 0.0, + m.dx() * w, m.dy() * h, 1.0); } else { // userSpaceOnUse QPointF p1_world = templateGrad.fTrans.map(QPointF(templateGrad.fX1, @@ -765,7 +774,7 @@ void applyGradientToAttributes(const QDomElement &element, p2 = p2_world - offset; if (templateGrad.fType == GradientType::RADIAL) { - QMatrix trans = templateGrad.fTrans; + QTransform trans = templateGrad.fTrans; qreal scaleX = qSqrt(trans.m11()*trans.m11() + trans.m12()*trans.m12()); qreal scaleY = qSqrt(trans.m21()*trans.m21() + trans.m22()*trans.m22()); @@ -980,7 +989,7 @@ void loadElement(const QDomElement &element, gradient->addColor(stopColor); } } else { - if(linkId.at(0) == "#") linkId.remove(0, 1); + if (linkId.startsWith('#')) { linkId.remove(0, 1); } const auto it = gGradients.find(linkId); if(it == gGradients.end()) { gUnresolvedGradientLinks[linkId].append(id); @@ -1025,7 +1034,7 @@ void loadElement(const QDomElement &element, QPointF p1, p2; const QString units = element.attribute("gradientUnits"); const QString gradTrans = element.attribute("gradientTransform"); - QMatrix trans = getMatrixFromString(gradTrans); + QTransform trans = getMatrixFromString(gradTrans); if (units == "userSpaceOnUse") { if (type == GradientType::LINEAR) { @@ -1099,10 +1108,13 @@ void loadElement(const QDomElement &element, } bool getUrlId(const QString &urlStr, QString *id) { - const QRegExp rx = QRegExp(RGXS "url\\(\\s*#(.*)\\)" RGXS, Qt::CaseInsensitive); - if(rx.exactMatch(urlStr)) { - rx.indexIn(urlStr); - const QStringList capturedTxt = rx.capturedTexts(); + const QRegularExpression rx("^" RGXS "url\\(\\s*#(.*)\\)" RGXS "$", + QRegularExpression::CaseInsensitiveOption); + + QRegularExpressionMatch match = rx.match(urlStr); + + if (match.hasMatch()) { + const QStringList capturedTxt = match.capturedTexts(); *id = capturedTxt.at(1); return true; } @@ -1112,17 +1124,22 @@ bool getUrlId(const QString &urlStr, QString *id) { bool getGradientFromString(const QString &colorStr, FillSvgAttributes * const target) { - const QRegExp rx = QRegExp(RGXS "url\\(\\s*(.*)\\s*\\)" RGXS, Qt::CaseInsensitive); - if(rx.exactMatch(colorStr)) { - const QStringList capturedTxt = rx.capturedTexts(); + const QRegularExpression rx("^" RGXS "url\\(\\s*(.*)\\s*\\)" RGXS "$", + QRegularExpression::CaseInsensitiveOption); + + QRegularExpressionMatch match = rx.match(colorStr); + + if (match.hasMatch()) { + const QStringList capturedTxt = match.capturedTexts(); QString id = capturedTxt.at(1); - if(id.at(0) == '#') id.remove(0, 1); + if (id.startsWith('#')) id.remove(0, 1); const auto it = gGradients.find(id); - if(it != gGradients.end()) { + if (it != gGradients.end()) { target->setGradient(it.value()); return true; } } + return false; } @@ -1218,7 +1235,7 @@ SkPathFillType BoxSvgAttributes::getFillRule() const { return mFillRule; } -const QMatrix &BoxSvgAttributes::getRelTransform() const { +const QTransform &BoxSvgAttributes::getRelTransform() const { return mRelTransform; } diff --git a/src/core/texteffect.cpp b/src/core/texteffect.cpp index 586a0770d..f008b07ac 100644 --- a/src/core/texteffect.cpp +++ b/src/core/texteffect.cpp @@ -302,7 +302,7 @@ QMimeData *TextEffect::SWT_createMimeData() { return new eMimeData(QList() << this); } -QMatrix TextEffect::getTransform(const qreal relFrame, +QTransform TextEffect::getTransform(const qreal relFrame, const qreal influence, const QPointF& addPivot) const { const auto pivotAnim = mTransform->getPivotAnimator(); @@ -313,7 +313,7 @@ QMatrix TextEffect::getTransform(const qreal relFrame, const qreal yScale = scaleAnim->getEffectiveYValue(relFrame); const qreal xPivot = pivotAnim->getEffectiveXValue(relFrame) + addPivot.x(); const qreal yPivot = pivotAnim->getEffectiveYValue(relFrame) + addPivot.y(); - QMatrix transform; + QTransform transform; transform.translate(xPivot + posAnim->getEffectiveXValue(relFrame)*influence, yPivot + posAnim->getEffectiveYValue(relFrame)*influence); transform.rotate(rotAnim->getEffectiveValue(relFrame)*influence); diff --git a/src/core/texteffect.h b/src/core/texteffect.h index d8a5d7807..f91e5d7e3 100644 --- a/src/core/texteffect.h +++ b/src/core/texteffect.h @@ -67,7 +67,7 @@ class CORE_EXPORT TextEffect : public eEffect { qreal getGuideLineWidth() const; qreal getGuideLineHeight() const; private: - QMatrix getTransform(const qreal relFrame, + QTransform getTransform(const qreal relFrame, const qreal influence, const QPointF &addPivot) const; diff --git a/src/core/themesupport.cpp b/src/core/themesupport.cpp index 2aa79ed41..cc666ec16 100644 --- a/src/core/themesupport.cpp +++ b/src/core/themesupport.cpp @@ -27,8 +27,8 @@ #include #include #include -#include #include +#include const QString ThemeSupport::getAppIconName(const bool alt) { @@ -231,7 +231,8 @@ const QString ThemeSupport::getThemeStyle(int iconSize) css = stylesheet.readAll(); stylesheet.close(); } - const qreal iconPixelRatio = iconSize * qApp->desktop()->devicePixelRatioF(); + QScreen *screen = QGuiApplication::primaryScreen(); + const qreal iconPixelRatio = iconSize * (screen ? screen->devicePixelRatio() : 1.0); return css.arg(getThemeButtonBaseColor().name(), getThemeButtonBorderColor().name(), getThemeBaseDarkerColor().name(), diff --git a/src/core/transformvalues.cpp b/src/core/transformvalues.cpp index 091877e1a..e24ac5de5 100644 --- a/src/core/transformvalues.cpp +++ b/src/core/transformvalues.cpp @@ -25,8 +25,8 @@ #include "transformvalues.h" -QMatrix TransformValues::calculate() const { - QMatrix result; +QTransform TransformValues::calculate() const { + QTransform result; result.translate(fPivotX + fMoveX, fPivotY + fMoveY); result.rotate(fRotation); result.scale(fScaleX, fScaleY); diff --git a/src/core/transformvalues.h b/src/core/transformvalues.h index b25b6911d..1fe307e3b 100644 --- a/src/core/transformvalues.h +++ b/src/core/transformvalues.h @@ -26,7 +26,7 @@ #ifndef TRANSFORMVALUES_H #define TRANSFORMVALUES_H -#include +#include #include "core_global.h" @@ -41,7 +41,7 @@ struct CORE_EXPORT TransformValues { qreal fShearX = 0; qreal fShearY = 0; - QMatrix calculate() const; + QTransform calculate() const; }; #endif // TRANSFORMVALUES_H diff --git a/src/ui/CMakeLists.txt b/src/ui/CMakeLists.txt index bbf4461c1..af0b08be4 100644 --- a/src/ui/CMakeLists.txt +++ b/src/ui/CMakeLists.txt @@ -123,6 +123,7 @@ endif() set( HEADERS ui_global.h + enterevent.h dialogs/adjustscenedialog.h dialogs/applyexpressiondialog.h dialogs/commandpalette.h diff --git a/src/ui/enterevent.h b/src/ui/enterevent.h new file mode 100644 index 000000000..4219fb827 --- /dev/null +++ b/src/ui/enterevent.h @@ -0,0 +1,36 @@ +/* +# +# Friction - https://friction.graphics +# +# Copyright (c) Ole-André Rodlie and contributors +# +# 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, version 3. +# +# 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, see . +# +# See 'README.md' for more information. +# +*/ + +#ifndef UI_ENTEREVENT_H +#define UI_ENTEREVENT_H + +#include + +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) +#include +using QtEnterEvent = QEnterEvent; +#else +#include +using QtEnterEvent = QEvent; +#endif + +#endif // UI_ENTEREVENT_H diff --git a/src/ui/gradientwidgets/gradientwidget.cpp b/src/ui/gradientwidgets/gradientwidget.cpp index 63e93da81..f7815af8d 100644 --- a/src/ui/gradientwidgets/gradientwidget.cpp +++ b/src/ui/gradientwidgets/gradientwidget.cpp @@ -50,7 +50,7 @@ GradientWidget::GradientWidget(QWidget * const parent) setContentsMargins(0, 0, 0, 0); const auto mMainLayout = new QVBoxLayout(this); - mMainLayout->setMargin(0); + mMainLayout->setContentsMargins(0, 0, 0, 0); mGradientsListWidget = new GradientsListWidget(this); mCurrentGradientWidget = new CurrentGradientWidget(this); diff --git a/src/ui/widgets/assetswidget.cpp b/src/ui/widgets/assetswidget.cpp index eadd1fb96..86533f82c 100644 --- a/src/ui/widgets/assetswidget.cpp +++ b/src/ui/widgets/assetswidget.cpp @@ -155,7 +155,7 @@ AssetsWidget::AssetsWidget(QWidget *parent) setAutoFillBackground(true); setContentsMargins(0, 10, 0, 0); QVBoxLayout *mLayout = new QVBoxLayout(this); - mLayout->setMargin(0); + mLayout->setContentsMargins(0, 0, 0, 0); mTree = new AssetsTreeWidget(this); mLayout->addWidget(mTree); diff --git a/src/ui/widgets/buttonbase.cpp b/src/ui/widgets/buttonbase.cpp index 6571d5d7a..72ee43eb2 100644 --- a/src/ui/widgets/buttonbase.cpp +++ b/src/ui/widgets/buttonbase.cpp @@ -48,7 +48,7 @@ void ButtonBase::mousePressEvent(QMouseEvent *) { emit pressed(); } -void ButtonBase::enterEvent(QEvent *) { +void ButtonBase::enterEvent(QtEnterEvent *) { mHover = true; update(); } diff --git a/src/ui/widgets/buttonbase.h b/src/ui/widgets/buttonbase.h index 6db0f1b89..82f08507e 100644 --- a/src/ui/widgets/buttonbase.h +++ b/src/ui/widgets/buttonbase.h @@ -27,6 +27,7 @@ #define BUTTONBASE_H #include "ui_global.h" +#include "enterevent.h" #include @@ -40,7 +41,7 @@ class UI_EXPORT ButtonBase : public QWidget protected: void mouseReleaseEvent(QMouseEvent *) final; void mousePressEvent(QMouseEvent *) final; - void enterEvent(QEvent *) final; + void enterEvent(QtEnterEvent *event) final; void leaveEvent(QEvent *) final; void paintEvent(QPaintEvent *) final; diff --git a/src/ui/widgets/changewidthwidget.cpp b/src/ui/widgets/changewidthwidget.cpp index b9c408eeb..1f6f6fa8d 100644 --- a/src/ui/widgets/changewidthwidget.cpp +++ b/src/ui/widgets/changewidthwidget.cpp @@ -54,17 +54,27 @@ void ChangeWidthWidget::paintEvent(QPaintEvent *) { p.end(); } -void ChangeWidthWidget::mouseMoveEvent(QMouseEvent *event) { +void ChangeWidthWidget::mouseMoveEvent(QMouseEvent *event) +{ +#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) const int newWidth = mCurrentWidth + event->x() - mPressX; +#else + const int newWidth = mCurrentWidth + event->position().x() - mPressX; +#endif mCurrentWidth = clamp(newWidth, 10*eSizesUI::widget, 40*eSizesUI::widget); emit widthSet(mCurrentWidth); //mBoxesList->setFixedWidth(newWidth); updatePos(); } -void ChangeWidthWidget::mousePressEvent(QMouseEvent *event) { +void ChangeWidthWidget::mousePressEvent(QMouseEvent *event) +{ mPressed = true; +#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) mPressX = event->x(); +#else + mPressX = event->position().x(); +#endif update(); } @@ -73,7 +83,7 @@ void ChangeWidthWidget::mouseReleaseEvent(QMouseEvent *) { update(); } -void ChangeWidthWidget::enterEvent(QEvent *) { +void ChangeWidthWidget::enterEvent(QtEnterEvent *) { mHover = true; update(); } diff --git a/src/ui/widgets/changewidthwidget.h b/src/ui/widgets/changewidthwidget.h index 8b2d0aaf7..c9b563fd9 100644 --- a/src/ui/widgets/changewidthwidget.h +++ b/src/ui/widgets/changewidthwidget.h @@ -27,6 +27,7 @@ #define CHANGEWIDTHWIDGET_H #include "ui_global.h" +#include "enterevent.h" #include @@ -45,7 +46,7 @@ class UI_EXPORT ChangeWidthWidget : public QWidget void mousePressEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *); - void enterEvent(QEvent *); + void enterEvent(QtEnterEvent *); void leaveEvent(QEvent *); int getCurrentWidth() { diff --git a/src/ui/widgets/colorsettingswidget.cpp b/src/ui/widgets/colorsettingswidget.cpp index 1c0f3bf15..0e6a41f4d 100644 --- a/src/ui/widgets/colorsettingswidget.cpp +++ b/src/ui/widgets/colorsettingswidget.cpp @@ -305,7 +305,7 @@ ColorSettingsWidget::ColorSettingsWidget(QWidget *parent) : QWidget(parent) { setContentsMargins(0, 0, 0, 0); - mWidgetsLayout->setMargin(0); + mWidgetsLayout->setContentsMargins(0, 0, 0, 0); mTabWidget->setFocusPolicy(Qt::NoFocus); diff --git a/src/ui/widgets/colortoolbutton.cpp b/src/ui/widgets/colortoolbutton.cpp index f85c52bf3..0d4d85bda 100644 --- a/src/ui/widgets/colortoolbutton.cpp +++ b/src/ui/widgets/colortoolbutton.cpp @@ -96,7 +96,6 @@ ColorToolButton::ColorToolButton(Document& document, const auto mainLay = new QVBoxLayout(this); mainLay->setContentsMargins(0, 0, 0, 0); - mainLay->setMargin(0); mainLay->addWidget(mColorLabel); addAction(mColorAct); diff --git a/src/ui/widgets/fillstrokesettings.cpp b/src/ui/widgets/fillstrokesettings.cpp index d75554812..b9cb8a986 100644 --- a/src/ui/widgets/fillstrokesettings.cpp +++ b/src/ui/widgets/fillstrokesettings.cpp @@ -107,7 +107,7 @@ FillStrokeSettingsWidget::FillStrokeSettingsWidget(Document &document, const auto lineLayout = new QHBoxLayout(lineWidget); lineWidget->setContentsMargins(0, 0, 0 ,0); - lineLayout->setMargin(0); + lineLayout->setContentsMargins(0, 0, 0, 0); const auto lineLabel = new QLabel(tr("Width"), this); @@ -143,14 +143,14 @@ FillStrokeSettingsWidget::FillStrokeSettingsWidget(Document &document, const auto mStrokeJoinCapLayout = new QVBoxLayout(mStrokeJoinCapWidget); mStrokeJoinCapWidget->setContentsMargins(0, 0, 0, 0); - mStrokeJoinCapLayout->setMargin(0); + mStrokeJoinCapLayout->setContentsMargins(0, 0, 0, 0); // join const auto mJoinStyleWidget = new QWidget(this); const auto mJoinStyleLayout = new QHBoxLayout(mJoinStyleWidget); mJoinStyleWidget->setContentsMargins(0, 0, 0, 0); - mJoinStyleLayout->setMargin(0); + mJoinStyleLayout->setContentsMargins(0, 0, 0, 0); mBevelJoinStyleButton = new QPushButton(QIcon::fromTheme("joinBevel"), QString(), this); @@ -189,7 +189,7 @@ FillStrokeSettingsWidget::FillStrokeSettingsWidget(Document &document, const auto mCapStyleLayout = new QHBoxLayout(mCapStyleWidget); mCapStyleWidget->setContentsMargins(0, 0, 0, 0); - mCapStyleLayout->setMargin(0); + mCapStyleLayout->setContentsMargins(0, 0, 0, 0); mFlatCapStyleButton = new QPushButton(QIcon::fromTheme("capFlat"), QString(), this); @@ -231,7 +231,7 @@ FillStrokeSettingsWidget::FillStrokeSettingsWidget(Document &document, const auto mGradientTypeLayout = new QHBoxLayout(mGradientTypeWidget); mGradientTypeWidget->setContentsMargins(0, 0, 0, 0); - mGradientTypeLayout->setMargin(0); + mGradientTypeLayout->setContentsMargins(0, 0, 0, 0); mLinearGradientButton = new QPushButton(QIcon::fromTheme("fill_gradient_2"), tr("Linear"), this); mRadialGradientButton = new QPushButton(QIcon::fromTheme("fill_gradient_radial_2"), tr("Radial"), this); @@ -282,7 +282,7 @@ FillStrokeSettingsWidget::FillStrokeSettingsWidget(Document &document, const auto mStrokeSettingsLayout = new QHBoxLayout(mStrokeSettingsWidget); mStrokeSettingsWidget->setContentsMargins(0, 0, 0, 0); - mStrokeSettingsLayout->setMargin(0); + mStrokeSettingsLayout->setContentsMargins(0, 0, 0, 0); mStrokeSettingsLayout->addWidget(lineWidget); mStrokeSettingsLayout->addWidget(mStrokeJoinCapWidget); @@ -291,7 +291,7 @@ FillStrokeSettingsWidget::FillStrokeSettingsWidget(Document &document, const auto mTargetLayout = new QHBoxLayout(mTargetWidget); mTargetWidget->setContentsMargins(0, 0, 0, 0); - mTargetLayout->setMargin(0); + mTargetLayout->setContentsMargins(0, 0, 0, 0); mTargetLayout->addWidget(mFillTargetButton); mTargetLayout->addWidget(mStrokeTargetButton); @@ -300,7 +300,7 @@ FillStrokeSettingsWidget::FillStrokeSettingsWidget(Document &document, const auto mColorTypeLayout = new QHBoxLayout(mColorTypeWidget); mColorTypeWidget->setContentsMargins(0, 0, 0, 0); - mColorTypeLayout->setMargin(0); + mColorTypeLayout->setContentsMargins(0, 0, 0, 0); mColorTypeLayout->addWidget(mFillNoneButton); mColorTypeLayout->addWidget(mFillFlatButton); @@ -321,7 +321,6 @@ FillStrokeSettingsWidget::FillStrokeSettingsWidget(Document &document, const auto mLayout = new QVBoxLayout(this); mLayout->setContentsMargins(0, 0, 0, 0); - mLayout->setMargin(0); mFillAndStrokeWidget->setObjectName("DarkWidget"); if (noScroll) { diff --git a/src/ui/widgets/flowlayout.cpp b/src/ui/widgets/flowlayout.cpp index fa17a785c..1f68ddca2 100644 --- a/src/ui/widgets/flowlayout.cpp +++ b/src/ui/widgets/flowlayout.cpp @@ -108,7 +108,9 @@ QSize FlowLayout::minimumSize() const { for(const auto item : mItemList) size = size.expandedTo(item->minimumSize()); - size += QSize(2*margin(), 2*margin()); + QMargins margins = contentsMargins(); + size += QSize(margins.left() + margins.right(), + margins.top() + margins.bottom()); return size; } diff --git a/src/ui/widgets/fontswidget.cpp b/src/ui/widgets/fontswidget.cpp index 9ca055106..99d7b77f0 100644 --- a/src/ui/widgets/fontswidget.cpp +++ b/src/ui/widgets/fontswidget.cpp @@ -110,7 +110,7 @@ FontsWidget::FontsWidget(QWidget *parent, fontFamilyWidget->setContentsMargins(0, 0, 0, 0); QHBoxLayout *fontFamilyLayout = new QHBoxLayout(fontFamilyWidget); - fontFamilyLayout->setMargin(0); + fontFamilyLayout->setContentsMargins(0, 0, 0, 0); fontFamilyLayout->addWidget(mFontFamilyCombo); fontFamilyLayout->addWidget(mFontStyleCombo); @@ -258,7 +258,7 @@ const QStringList FontsWidget::filterFonts() QString font = families.at(i); if (font.startsWith(".")) { continue; } // get a lot of .someKindOfFont on macOS, ignore! if (font.contains("[") && font.contains("]")) { - fonts << font.remove(QRegExp("\\[(.*)\\]")).trimmed(); + fonts << font.remove(QRegularExpression("\\[(.*)\\]")).trimmed(); } else { fonts << font; } } fonts.removeDuplicates(); diff --git a/src/ui/widgets/performancesettingswidget.cpp b/src/ui/widgets/performancesettingswidget.cpp index e199d600d..985323e5d 100644 --- a/src/ui/widgets/performancesettingswidget.cpp +++ b/src/ui/widgets/performancesettingswidget.cpp @@ -258,7 +258,7 @@ void PerformanceSettingsWidget::setupRasterEffectWidgets() container->setContentsMargins(0, 0, 0, 0); - containerInnerLayout->setMargin(5); + containerInnerLayout->setContentsMargins(0, 0, 0, 0); containerLayout->addWidget(area); @@ -277,7 +277,7 @@ void PerformanceSettingsWidget::setupRasterEffectWidgets() const auto lay = new QHBoxLayout(wid); wid->setContentsMargins(0, 0, 0, 0); - lay->setMargin(0); + lay->setContentsMargins(0, 0, 0, 0); lay->addWidget(label); lay->addWidget(box); diff --git a/src/ui/widgets/presetsettingswidget.cpp b/src/ui/widgets/presetsettingswidget.cpp index 520624bf2..e8acf0652 100644 --- a/src/ui/widgets/presetsettingswidget.cpp +++ b/src/ui/widgets/presetsettingswidget.cpp @@ -84,7 +84,7 @@ void PresetSettingsWidget::setupResolutionPresetWidget() container->setContentsMargins(0, 0, 0, 0); - containerInnerLayout->setMargin(0); + containerInnerLayout->setContentsMargins(0, 0, 0, 0); containerLayout->addWidget(area); @@ -187,7 +187,7 @@ void PresetSettingsWidget::setupFpsPresetWidget() container->setContentsMargins(0, 0, 0, 0); - containerInnerLayout->setMargin(0); + containerInnerLayout->setContentsMargins(0, 0, 0, 0); containerLayout->addWidget(area); diff --git a/src/ui/widgets/qdoubleslider.cpp b/src/ui/widgets/qdoubleslider.cpp index 95c0d7c69..5972b468b 100644 --- a/src/ui/widgets/qdoubleslider.cpp +++ b/src/ui/widgets/qdoubleslider.cpp @@ -495,7 +495,7 @@ void QDoubleSlider::wheelEvent(QWheelEvent *event) } #endif -void QDoubleSlider::enterEvent(QEvent *) +void QDoubleSlider::enterEvent(QtEnterEvent *) { mHovered = true; setCursor(Qt::SizeHorCursor); diff --git a/src/ui/widgets/qdoubleslider.h b/src/ui/widgets/qdoubleslider.h index 061dccaa4..1405a82b4 100644 --- a/src/ui/widgets/qdoubleslider.h +++ b/src/ui/widgets/qdoubleslider.h @@ -27,6 +27,7 @@ #define QDOUBLESLIDER_H #include "ui_global.h" +#include "enterevent.h" #include #include @@ -119,7 +120,7 @@ class UI_EXPORT QDoubleSlider : public QWidget { void wheelEvent(QWheelEvent *event); #endif - void enterEvent(QEvent *); + void enterEvent(QtEnterEvent *); void leaveEvent(QEvent *); void paint(QPainter *p, diff --git a/src/ui/widgets/savedcolorbutton.h b/src/ui/widgets/savedcolorbutton.h index 478f4a510..f440fe2eb 100644 --- a/src/ui/widgets/savedcolorbutton.h +++ b/src/ui/widgets/savedcolorbutton.h @@ -27,6 +27,7 @@ #define SAVEDCOLORBUTTON_H #include "ui_global.h" +#include "enterevent.h" #include #include @@ -46,7 +47,7 @@ class UI_EXPORT SavedColorButton : public QWidget protected: void paintEvent(QPaintEvent *); void mousePressEvent(QMouseEvent *e); - void enterEvent(QEvent*) { + void enterEvent(QtEnterEvent*) { mHovered = true; update(); } diff --git a/src/ui/widgets/toolbutton.h b/src/ui/widgets/toolbutton.h index 12ebd3a4d..af92c0358 100644 --- a/src/ui/widgets/toolbutton.h +++ b/src/ui/widgets/toolbutton.h @@ -25,9 +25,9 @@ #define FRICTION_TOOLBUTTON_H #include "ui_global.h" +#include "enterevent.h" #include -#include #include #include #include @@ -64,7 +64,7 @@ namespace Friction bool mAutoPopup; protected: - void enterEvent(QEvent *event) override + void enterEvent(QtEnterEvent *event) override { if (mAutoPopup) { showMenu(); } QToolButton::enterEvent(event); diff --git a/src/ui/widgets/toolinteract.cpp b/src/ui/widgets/toolinteract.cpp index df5d26fc6..4d9fb29d6 100644 --- a/src/ui/widgets/toolinteract.cpp +++ b/src/ui/widgets/toolinteract.cpp @@ -385,7 +385,7 @@ void ToolInteract::setupGridButton() const auto label = new QLabel(tr("Threshold"), wid); wid->setContentsMargins(0, 0, 0, 0); - lay->setMargin(4); + lay->setContentsMargins(4, 4, 4, 4); lay->addWidget(label); lay->addWidget(spin); diff --git a/src/ui/widgets/uilayout.cpp b/src/ui/widgets/uilayout.cpp index d71377dac..dde0a9409 100644 --- a/src/ui/widgets/uilayout.cpp +++ b/src/ui/widgets/uilayout.cpp @@ -58,7 +58,6 @@ UIDock::UIDock(QWidget *parent, setContentsMargins(0, 0, 0, 0); mLayout = new QVBoxLayout(this); mLayout->setContentsMargins(0, 0, 0, 0); - mLayout->setMargin(0); mLayout->setSpacing(0); if (showHeader) { @@ -74,7 +73,6 @@ UIDock::UIDock(QWidget *parent, headerWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); headerLayout->setContentsMargins(0, 0, 0, 0); - headerLayout->setMargin(0); headerLayout->setSpacing(0); const auto leftButton = new QPushButton(this); diff --git a/src/ui/widgets/welcomedialog.cpp b/src/ui/widgets/welcomedialog.cpp index 730a0f84e..a571412df 100644 --- a/src/ui/widgets/welcomedialog.cpp +++ b/src/ui/widgets/welcomedialog.cpp @@ -69,7 +69,7 @@ WelcomeDialog::WelcomeDialog(QMenu *recentMenu, const auto buttonWid = new QWidget(this); buttonWid->setContentsMargins(0, 0, 0, 0); const auto buttonLay = new QHBoxLayout(buttonWid); - buttonLay->setMargin(0); + buttonLay->setContentsMargins(0, 0, 0, 0); const auto newButton = new QPushButton(QIcon::fromTheme("file_blank"), tr("New"), diff --git a/src/ui/widgets/widgetstack.h b/src/ui/widgets/widgetstack.h index d82047242..4fa6d8b8d 100644 --- a/src/ui/widgets/widgetstack.h +++ b/src/ui/widgets/widgetstack.h @@ -27,6 +27,7 @@ #define WIDGETSTACK_H #include "ui_global.h" +#include "enterevent.h" #include #include @@ -189,7 +190,7 @@ class UI_EXPORT VStackResizer : public QWidget, public StackResizerBaseaddLayout(mMenuLayout); setLayout(mLayout); mLayout->setSpacing(0); - mLayout->setMargin(0); + mLayout->setContentsMargins(0, 0, 0, 0); } void WidgetWrapperNode::setMenuBar(StackWrapperMenu * const menu) { diff --git a/src/ui/widgets/wrappernode.cpp b/src/ui/widgets/wrappernode.cpp index 97555b086..d55c02180 100644 --- a/src/ui/widgets/wrappernode.cpp +++ b/src/ui/widgets/wrappernode.cpp @@ -46,8 +46,10 @@ QDomElement WrapperNode::writeXEV(QDomDocument& doc, WrapperNode* WrapperNode::sRead(eReadStream &src, const WidgetCreator &creator) { - WrapperNodeType type; - src.read(&type, sizeof(WrapperNodeType)); + int typeVal; + src >> typeVal; // 4 bytes for evformat + + WrapperNodeType type = static_cast(typeVal); const auto wid = createForType(type, creator); wid->readData(src); return wid;