mirror of
https://github.com/MaurycyLiebner/enve.git
synced 2024-12-20 23:52:13 +00:00
Compare commits
No commits in common. "37e515884403395c4533adb02d09fdb958796e54" and "88171af028aacf75fa1a11b68f606a75f841c4ab" have entirely different histories.
37e5158844
...
88171af028
@ -909,16 +909,10 @@ void MainWindow::setupToolBar() {
|
|||||||
|
|
||||||
mToolBar->addSeparator();
|
mToolBar->addSeparator();
|
||||||
|
|
||||||
mNullMode = SwitchButton::sCreate2Switch(
|
|
||||||
"toolbarButtons/nullCreateUnchecked.png",
|
|
||||||
"toolbarButtons/nullCreateChecked.png",
|
|
||||||
gSingleLineTooltip(tr("Add Null Object Mode", "ToolBar"), "F9"), this);
|
|
||||||
mToolBar->addWidget(mNullMode);
|
|
||||||
|
|
||||||
mPickPaintSettingsMode = SwitchButton::sCreate2Switch(
|
mPickPaintSettingsMode = SwitchButton::sCreate2Switch(
|
||||||
"toolbarButtons/pickUnchecked.png",
|
"toolbarButtons/pickUnchecked.png",
|
||||||
"toolbarButtons/pickChecked.png",
|
"toolbarButtons/pickChecked.png",
|
||||||
gSingleLineTooltip(tr("Pick Mode", "ToolBar"), "F10"), this);
|
gSingleLineTooltip(tr("Pick Mode", "ToolBar"), "F9"), this);
|
||||||
mToolBar->addWidget(mPickPaintSettingsMode);
|
mToolBar->addWidget(mPickPaintSettingsMode);
|
||||||
|
|
||||||
mToolBar->widgetForAction(mToolBar->addAction(" "))->
|
mToolBar->widgetForAction(mToolBar->addAction(" "))->
|
||||||
@ -1004,8 +998,6 @@ void MainWindow::connectToolBarActions() {
|
|||||||
connect(mTextMode, &ActionButton::pressed,
|
connect(mTextMode, &ActionButton::pressed,
|
||||||
&mActions, &Actions::setTextMode);
|
&mActions, &Actions::setTextMode);
|
||||||
|
|
||||||
connect(mNullMode, &ActionButton::pressed,
|
|
||||||
&mActions, &Actions::setNullMode);
|
|
||||||
connect(mPickPaintSettingsMode, &ActionButton::pressed,
|
connect(mPickPaintSettingsMode, &ActionButton::pressed,
|
||||||
&mActions, &Actions::setPickPaintSettingsMode);
|
&mActions, &Actions::setPickPaintSettingsMode);
|
||||||
|
|
||||||
@ -1061,7 +1053,6 @@ void MainWindow::updateCanvasModeButtonsChecked() {
|
|||||||
mRectangleMode->setState(mode == CanvasMode::rectCreate);
|
mRectangleMode->setState(mode == CanvasMode::rectCreate);
|
||||||
mTextMode->setState(mode == CanvasMode::textCreate);
|
mTextMode->setState(mode == CanvasMode::textCreate);
|
||||||
|
|
||||||
mNullMode->setState(mode == CanvasMode::nullCreate);
|
|
||||||
mPickPaintSettingsMode->setState(mode == CanvasMode::pickFillStroke);
|
mPickPaintSettingsMode->setState(mode == CanvasMode::pickFillStroke);
|
||||||
|
|
||||||
const bool boxMode = mode == CanvasMode::boxTransform;
|
const bool boxMode = mode == CanvasMode::boxTransform;
|
||||||
@ -1209,8 +1200,6 @@ bool handleCanvasModeKeyPress(Document& document, const int key) {
|
|||||||
} else if(key == Qt::Key_F8) {
|
} else if(key == Qt::Key_F8) {
|
||||||
document.setCanvasMode(CanvasMode::textCreate);
|
document.setCanvasMode(CanvasMode::textCreate);
|
||||||
} else if(key == Qt::Key_F9) {
|
} else if(key == Qt::Key_F9) {
|
||||||
document.setCanvasMode(CanvasMode::nullCreate);
|
|
||||||
} else if(key == Qt::Key_F10) {
|
|
||||||
document.setCanvasMode(CanvasMode::pickFillStroke);
|
document.setCanvasMode(CanvasMode::pickFillStroke);
|
||||||
} else return false;
|
} else return false;
|
||||||
KeyFocusTarget::KFT_sSetRandomTarget();
|
KeyFocusTarget::KFT_sSetRandomTarget();
|
||||||
|
@ -252,7 +252,6 @@ private:
|
|||||||
SwitchButton *mRectangleMode;
|
SwitchButton *mRectangleMode;
|
||||||
SwitchButton *mTextMode;
|
SwitchButton *mTextMode;
|
||||||
//
|
//
|
||||||
SwitchButton *mNullMode;
|
|
||||||
SwitchButton *mPickPaintSettingsMode;
|
SwitchButton *mPickPaintSettingsMode;
|
||||||
|
|
||||||
ActionButton *mActionConnectPoints;
|
ActionButton *mActionConnectPoints;
|
||||||
|
@ -1,71 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<svg
|
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
width="25"
|
|
||||||
height="25"
|
|
||||||
viewBox="0 0 6.6145832 6.6145835"
|
|
||||||
version="1.1"
|
|
||||||
id="svg1468"
|
|
||||||
inkscape:version="0.92.3 (2405546, 2018-03-11)"
|
|
||||||
sodipodi:docname="nullCreate.svg">
|
|
||||||
<defs
|
|
||||||
id="defs1462" />
|
|
||||||
<sodipodi:namedview
|
|
||||||
id="base"
|
|
||||||
pagecolor="#ffffff"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1.0"
|
|
||||||
inkscape:pageopacity="0.0"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:zoom="31.678384"
|
|
||||||
inkscape:cx="10.871939"
|
|
||||||
inkscape:cy="10.351229"
|
|
||||||
inkscape:document-units="mm"
|
|
||||||
inkscape:current-layer="layer1"
|
|
||||||
showgrid="false"
|
|
||||||
units="px"
|
|
||||||
inkscape:window-width="1920"
|
|
||||||
inkscape:window-height="1054"
|
|
||||||
inkscape:window-x="0"
|
|
||||||
inkscape:window-y="0"
|
|
||||||
inkscape:window-maximized="1"
|
|
||||||
inkscape:document-rotation="0" />
|
|
||||||
<metadata
|
|
||||||
id="metadata1465">
|
|
||||||
<rdf:RDF>
|
|
||||||
<cc:Work
|
|
||||||
rdf:about="">
|
|
||||||
<dc:format>image/svg+xml</dc:format>
|
|
||||||
<dc:type
|
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
|
||||||
<dc:title />
|
|
||||||
</cc:Work>
|
|
||||||
</rdf:RDF>
|
|
||||||
</metadata>
|
|
||||||
<g
|
|
||||||
inkscape:label="Layer 1"
|
|
||||||
inkscape:groupmode="layer"
|
|
||||||
id="layer1"
|
|
||||||
transform="translate(0,-290.3854)">
|
|
||||||
<path
|
|
||||||
id="path4906"
|
|
||||||
style="opacity:1;fill:#f9f9f9;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.372986;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:9.4;stroke-opacity:1"
|
|
||||||
d="m 3.3072917,291.45459 a 2.2379143,2.2379143 0 0 0 -2.2381062,2.2381 2.2379143,2.2379143 0 0 0 2.2381062,2.23811 2.2379143,2.2379143 0 0 0 2.2381062,-2.23811 2.2379143,2.2379143 0 0 0 -2.2381062,-2.2381 z m -0.027905,0.45578 a 1.7824545,1.7824545 0 0 1 0.027905,0 1.7824545,1.7824545 0 0 1 1.7823201,1.78232 1.7824545,1.7824545 0 0 1 -1.7823201,1.78232 1.7824545,1.7824545 0 0 1 -1.7823201,-1.78232 1.7824545,1.7824545 0 0 1 1.7544151,-1.78232 z" />
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path818"
|
|
||||||
d="m 1.787365,292.27266 2.9441409,2.94414"
|
|
||||||
style="fill:#f9f9f9;fill-opacity:1;stroke:#f9f9f9;stroke-width:0.52916667;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
|
||||||
<path
|
|
||||||
style="fill:#f9f9f9;fill-opacity:1;stroke:#f9f9f9;stroke-width:0.52916667;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
|
|
||||||
d="m 4.7315054,292.27266 -2.94414,2.94414"
|
|
||||||
id="path816"
|
|
||||||
inkscape:connector-curvature="0" />
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 2.9 KiB |
@ -556,7 +556,6 @@ stdsptr<BoxRenderData> BoundingBox::createRenderData(const qreal relFrame) {
|
|||||||
|
|
||||||
BoxRenderData *BoundingBox::updateCurrentRenderData(const qreal relFrame) {
|
BoxRenderData *BoundingBox::updateCurrentRenderData(const qreal relFrame) {
|
||||||
const auto renderData = createRenderData(relFrame);
|
const auto renderData = createRenderData(relFrame);
|
||||||
if(!renderData) return nullptr;
|
|
||||||
mRenderDataHandler.addItemAtRelFrame(renderData);
|
mRenderDataHandler.addItemAtRelFrame(renderData);
|
||||||
return renderData.get();
|
return renderData.get();
|
||||||
}
|
}
|
||||||
|
@ -76,7 +76,6 @@ enum class eBoxType {
|
|||||||
group,
|
group,
|
||||||
custom,
|
custom,
|
||||||
deprecated0, // sculptPath,
|
deprecated0, // sculptPath,
|
||||||
nullObject,
|
|
||||||
|
|
||||||
count
|
count
|
||||||
};
|
};
|
||||||
|
@ -1466,7 +1466,6 @@ void ContainerBox::writeBoxOrSoundXEV(const stdsptr<XevZipFileSaver>& xevFileSav
|
|||||||
#include "internallinkbox.h"
|
#include "internallinkbox.h"
|
||||||
#include "customboxcreator.h"
|
#include "customboxcreator.h"
|
||||||
#include "svglinkbox.h"
|
#include "svglinkbox.h"
|
||||||
#include "nullobject.h"
|
|
||||||
|
|
||||||
qsptr<BoundingBox> createBoxOfNonCustomType(const eBoxType type) {
|
qsptr<BoundingBox> createBoxOfNonCustomType(const eBoxType type) {
|
||||||
switch(type) {
|
switch(type) {
|
||||||
@ -1498,8 +1497,6 @@ qsptr<BoundingBox> createBoxOfNonCustomType(const eBoxType type) {
|
|||||||
return enve::make_shared<SvgLinkBox>();
|
return enve::make_shared<SvgLinkBox>();
|
||||||
case(eBoxType::internalLinkCanvas):
|
case(eBoxType::internalLinkCanvas):
|
||||||
return enve::make_shared<InternalLinkCanvas>(nullptr, false);
|
return enve::make_shared<InternalLinkCanvas>(nullptr, false);
|
||||||
case(eBoxType::nullObject):
|
|
||||||
return enve::make_shared<NullObject>();
|
|
||||||
case(eBoxType::deprecated0): break;
|
case(eBoxType::deprecated0): break;
|
||||||
case(eBoxType::canvas) : break;
|
case(eBoxType::canvas) : break;
|
||||||
case(eBoxType::count) : break;
|
case(eBoxType::count) : break;
|
||||||
|
@ -232,7 +232,6 @@ stdsptr<BoxRenderData> ILBB::createRenderData() {
|
|||||||
const auto linkTarget = getLinkTarget();
|
const auto linkTarget = getLinkTarget();
|
||||||
if(!linkTarget) return nullptr;
|
if(!linkTarget) return nullptr;
|
||||||
const auto renderData = linkTarget->createRenderData();
|
const auto renderData = linkTarget->createRenderData();
|
||||||
if(!renderData) return nullptr;
|
|
||||||
renderData->fParentBox = this;
|
renderData->fParentBox = this;
|
||||||
if(!mInnerLink) renderData->fBlendEffectIdentifier = this;
|
if(!mInnerLink) renderData->fBlendEffectIdentifier = this;
|
||||||
return renderData;
|
return renderData;
|
||||||
|
@ -1,184 +0,0 @@
|
|||||||
// enve - 2D animations software
|
|
||||||
// Copyright (C) 2016-2020 Maurycy Liebner
|
|
||||||
|
|
||||||
// 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, either version 3 of the License, or
|
|
||||||
// (at your option) any later version.
|
|
||||||
|
|
||||||
// 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 <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
#include "nullobject.h"
|
|
||||||
|
|
||||||
#include "Animators/transformanimator.h"
|
|
||||||
#include "canvas.h"
|
|
||||||
|
|
||||||
class NullObjectType : public ComboBoxProperty {
|
|
||||||
enum class Type {
|
|
||||||
square, circle, triangle
|
|
||||||
};
|
|
||||||
public:
|
|
||||||
NullObjectType(ColorAnimator* const color,
|
|
||||||
QrealAnimator* const size);
|
|
||||||
|
|
||||||
void prp_drawCanvasControls(SkCanvas * const canvas, const CanvasMode mode,
|
|
||||||
const float invScale, const bool ctrlPressed);
|
|
||||||
|
|
||||||
void updatePath();
|
|
||||||
bool relPointInsidePath(const QPointF &relPos);
|
|
||||||
QRectF relBoundingRect();
|
|
||||||
private:
|
|
||||||
SkPath mCurrentPath;
|
|
||||||
|
|
||||||
ColorAnimator* const mColor;
|
|
||||||
QrealAnimator* const mSize;
|
|
||||||
};
|
|
||||||
|
|
||||||
NullObjectType::NullObjectType(ColorAnimator* const color,
|
|
||||||
QrealAnimator* const size) :
|
|
||||||
ComboBoxProperty("type", QStringList() << "square" <<
|
|
||||||
"circle" <<
|
|
||||||
"triangle"),
|
|
||||||
mColor(color), mSize(size) {
|
|
||||||
prp_setDrawingOnCanvasEnabled(true);
|
|
||||||
|
|
||||||
connect(this, &ComboBoxProperty::prp_currentFrameChanged,
|
|
||||||
this, &NullObjectType::updatePath);
|
|
||||||
connect(mSize, &QrealAnimator::prp_currentFrameChanged,
|
|
||||||
this, &NullObjectType::updatePath);
|
|
||||||
updatePath();
|
|
||||||
}
|
|
||||||
|
|
||||||
void NullObjectType::prp_drawCanvasControls(
|
|
||||||
SkCanvas* const canvas, const CanvasMode mode,
|
|
||||||
const float invScale, const bool ctrlPressed) {
|
|
||||||
Q_UNUSED(mode)
|
|
||||||
Q_UNUSED(ctrlPressed)
|
|
||||||
|
|
||||||
const auto qtrans = getTransform();
|
|
||||||
const auto sktrans = toSkMatrix(qtrans);
|
|
||||||
SkPath mappedPath;
|
|
||||||
mCurrentPath.transform(sktrans, &mappedPath);
|
|
||||||
|
|
||||||
const auto color = mColor->getColor();
|
|
||||||
|
|
||||||
SkPaint paint;
|
|
||||||
paint.setAntiAlias(true);
|
|
||||||
paint.setStrokeWidth(2.f*invScale);
|
|
||||||
paint.setStyle(SkPaint::kStroke_Style);
|
|
||||||
paint.setColor(SK_ColorLTGRAY);
|
|
||||||
canvas->drawPath(mappedPath, paint);
|
|
||||||
paint.setStrokeWidth(1.f*invScale);
|
|
||||||
paint.setColor(toSkColor(color));
|
|
||||||
canvas->drawPath(mappedPath, paint);
|
|
||||||
}
|
|
||||||
|
|
||||||
void NullObjectType::updatePath() {
|
|
||||||
mCurrentPath.reset();
|
|
||||||
const int val = getCurrentValue();
|
|
||||||
const Type type = static_cast<Type>(val);
|
|
||||||
const qreal size = mSize->getEffectiveValue();
|
|
||||||
const qreal ten = 10*size;
|
|
||||||
switch(type) {
|
|
||||||
case Type::square:
|
|
||||||
mCurrentPath.moveTo(-ten, -ten);
|
|
||||||
mCurrentPath.lineTo(ten, -ten);
|
|
||||||
mCurrentPath.lineTo(ten, ten);
|
|
||||||
mCurrentPath.lineTo(-ten, ten);
|
|
||||||
mCurrentPath.lineTo(-ten, -ten);
|
|
||||||
mCurrentPath.moveTo(-ten, -ten);
|
|
||||||
mCurrentPath.lineTo(ten, ten);
|
|
||||||
mCurrentPath.moveTo(ten, -ten);
|
|
||||||
mCurrentPath.lineTo(-ten, ten);
|
|
||||||
break;
|
|
||||||
case Type::circle:
|
|
||||||
mCurrentPath.addCircle(0, 0, ten);
|
|
||||||
mCurrentPath.moveTo(-ten, -ten);
|
|
||||||
mCurrentPath.lineTo(ten, ten);
|
|
||||||
mCurrentPath.moveTo(ten, -ten);
|
|
||||||
mCurrentPath.lineTo(-ten, ten);
|
|
||||||
break;
|
|
||||||
case Type::triangle:
|
|
||||||
const qreal a = 3*ten/sqrt(3);
|
|
||||||
const qreal h = ten + a*sqrt(3)/6;
|
|
||||||
mCurrentPath.moveTo(0, -ten);
|
|
||||||
mCurrentPath.lineTo(0.5*a, -ten + h);
|
|
||||||
mCurrentPath.lineTo(-0.5*a, -ten + h);
|
|
||||||
mCurrentPath.lineTo(0, -ten);
|
|
||||||
mCurrentPath.moveTo(0, -ten);
|
|
||||||
mCurrentPath.lineTo(0, 0);
|
|
||||||
mCurrentPath.moveTo(0.5*a, -ten + h);
|
|
||||||
mCurrentPath.lineTo(0, 0);
|
|
||||||
mCurrentPath.moveTo(-0.5*a, -ten + h);
|
|
||||||
mCurrentPath.lineTo(0, 0);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool NullObjectType::relPointInsidePath(const QPointF& relPos) {
|
|
||||||
const int val = getCurrentValue();
|
|
||||||
const Type type = static_cast<Type>(val);
|
|
||||||
const qreal size = mSize->getEffectiveValue();
|
|
||||||
const qreal ten = 10*size;
|
|
||||||
switch(type) {
|
|
||||||
case Type::square: {
|
|
||||||
QRectF rect(-ten, -ten, 2*ten, 2*ten);
|
|
||||||
return rect.contains(relPos);
|
|
||||||
} case Type::circle: {
|
|
||||||
QPainterPath path;
|
|
||||||
path.addEllipse({0., 0.}, ten, ten);
|
|
||||||
return path.contains(relPos);
|
|
||||||
} case Type::triangle:
|
|
||||||
const qreal a = 3*ten/sqrt(3);
|
|
||||||
const qreal h = ten + a*sqrt(3)/6;
|
|
||||||
QPainterPath path;
|
|
||||||
path.moveTo(0, -ten);
|
|
||||||
path.lineTo(0.5*a, -ten + h);
|
|
||||||
path.lineTo(-0.5*a, -ten + h);
|
|
||||||
path.closeSubpath();
|
|
||||||
return path.contains(relPos);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
QRectF NullObjectType::relBoundingRect() {
|
|
||||||
const auto skRect = mCurrentPath.computeTightBounds();
|
|
||||||
return toQRectF(skRect);
|
|
||||||
}
|
|
||||||
|
|
||||||
void NullObject::queTasks() {
|
|
||||||
setRelBoundingRect(mType->relBoundingRect());
|
|
||||||
BoundingBox::queTasks();
|
|
||||||
}
|
|
||||||
|
|
||||||
NullObject::NullObject() : BoundingBox("null object", eBoxType::nullObject) {
|
|
||||||
mColor = enve::make_shared<ColorAnimator>();
|
|
||||||
mSize = enve::make_shared<QrealAnimator>(1, 1, 100, 0.1, "size");
|
|
||||||
mType = enve::make_shared<NullObjectType>(mColor.get(), mSize.get());
|
|
||||||
|
|
||||||
ca_addChild(mType);
|
|
||||||
ca_addChild(mColor);
|
|
||||||
ca_addChild(mSize);
|
|
||||||
|
|
||||||
connect(this, &BoundingBox::prp_sceneChanged,
|
|
||||||
this, [this](Canvas* const oldS, Canvas* const newS) {
|
|
||||||
if(oldS) oldS->removeNullObject(this);
|
|
||||||
if(newS) newS->addNullObject(this);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
bool NullObject::relPointInsidePath(const QPointF &relPos) const {
|
|
||||||
return mType->relPointInsidePath(relPos);
|
|
||||||
}
|
|
||||||
|
|
||||||
void NullObject::drawNullObject(
|
|
||||||
SkCanvas* const canvas, const CanvasMode mode,
|
|
||||||
const float invScale, const bool ctrlPressed) {
|
|
||||||
mType->prp_drawCanvasControls(canvas, mode, invScale, ctrlPressed);
|
|
||||||
}
|
|
@ -1,44 +0,0 @@
|
|||||||
// enve - 2D animations software
|
|
||||||
// Copyright (C) 2016-2020 Maurycy Liebner
|
|
||||||
|
|
||||||
// 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, either version 3 of the License, or
|
|
||||||
// (at your option) any later version.
|
|
||||||
|
|
||||||
// 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 <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
#ifndef NULLOBJECT_H
|
|
||||||
#define NULLOBJECT_H
|
|
||||||
|
|
||||||
#include "boundingbox.h"
|
|
||||||
|
|
||||||
#include "Properties/comboboxproperty.h"
|
|
||||||
#include "Animators/coloranimator.h"
|
|
||||||
|
|
||||||
class NullObjectType;
|
|
||||||
|
|
||||||
class NullObject : public BoundingBox {
|
|
||||||
public:
|
|
||||||
NullObject();
|
|
||||||
|
|
||||||
void queTasks();
|
|
||||||
stdsptr<BoxRenderData> createRenderData() { return nullptr; }
|
|
||||||
bool shouldScheduleUpdate() { return false; }
|
|
||||||
bool relPointInsidePath(const QPointF &relPos) const;
|
|
||||||
|
|
||||||
void drawNullObject(SkCanvas* const canvas, const CanvasMode mode,
|
|
||||||
const float invScale, const bool ctrlPressed);
|
|
||||||
private:
|
|
||||||
qsptr<NullObjectType> mType;
|
|
||||||
qsptr<ColorAnimator> mColor;
|
|
||||||
qsptr<QrealAnimator> mSize;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // NULLOBJECT_H
|
|
@ -858,7 +858,6 @@ void AutoTilesData::crop(const QRect &cropRect) {
|
|||||||
const QRect iniRect = pixelBoundingRect();
|
const QRect iniRect = pixelBoundingRect();
|
||||||
const QRect normalizedCrop = cropRect.normalized();
|
const QRect normalizedCrop = cropRect.normalized();
|
||||||
const QRect clampedCrop = normalizedCrop.intersected(iniRect);
|
const QRect clampedCrop = normalizedCrop.intersected(iniRect);
|
||||||
if(!clampedCrop.isValid()) return;
|
|
||||||
|
|
||||||
{
|
{
|
||||||
const int dl = clampedCrop.left() - iniRect.left();
|
const int dl = clampedCrop.left() - iniRect.left();
|
||||||
|
@ -28,9 +28,8 @@ Property::Property(const QString& name) :
|
|||||||
connect(this, &Property::prp_ancestorChanged, this, [this]() {
|
connect(this, &Property::prp_ancestorChanged, this, [this]() {
|
||||||
const auto newScene = mParent_k ? mParent_k->mParentScene : nullptr;
|
const auto newScene = mParent_k ? mParent_k->mParentScene : nullptr;
|
||||||
if(mParentScene != newScene) {
|
if(mParentScene != newScene) {
|
||||||
const auto old = mParentScene;
|
|
||||||
mParentScene = newScene;
|
mParentScene = newScene;
|
||||||
emit prp_sceneChanged(old, newScene);
|
emit prp_sceneChanged();
|
||||||
}
|
}
|
||||||
emit prp_pathChanged();
|
emit prp_pathChanged();
|
||||||
});
|
});
|
||||||
|
@ -46,7 +46,6 @@ enum class CanvasMode : short {
|
|||||||
rectCreate,
|
rectCreate,
|
||||||
textCreate,
|
textCreate,
|
||||||
|
|
||||||
nullCreate,
|
|
||||||
pickFillStroke
|
pickFillStroke
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -269,7 +268,7 @@ signals:
|
|||||||
void prp_parentChanged(ComplexAnimator*, QPrivateSignal);
|
void prp_parentChanged(ComplexAnimator*, QPrivateSignal);
|
||||||
void prp_ancestorChanged(QPrivateSignal);
|
void prp_ancestorChanged(QPrivateSignal);
|
||||||
void prp_pathChanged();
|
void prp_pathChanged();
|
||||||
void prp_sceneChanged(Canvas*, Canvas*);
|
void prp_sceneChanged();
|
||||||
private:
|
private:
|
||||||
bool prp_mSelected = false;
|
bool prp_mSelected = false;
|
||||||
bool mDrawOnCanvas = false;
|
bool mDrawOnCanvas = false;
|
||||||
|
@ -783,10 +783,6 @@ void Actions::setPaintMode() {
|
|||||||
mDocument.setCanvasMode(CanvasMode::paint);
|
mDocument.setCanvasMode(CanvasMode::paint);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Actions::setNullMode() {
|
|
||||||
mDocument.setCanvasMode(CanvasMode::nullCreate);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Actions::finishSmoothChange() {
|
void Actions::finishSmoothChange() {
|
||||||
mSmoothChange = false;
|
mSmoothChange = false;
|
||||||
// mDocument.actionFinished();
|
// mDocument.actionFinished();
|
||||||
|
@ -103,7 +103,6 @@ public:
|
|||||||
void setCircleMode();
|
void setCircleMode();
|
||||||
void setTextMode();
|
void setTextMode();
|
||||||
|
|
||||||
void setNullMode();
|
|
||||||
void setPickPaintSettingsMode();
|
void setPickPaintSettingsMode();
|
||||||
//
|
//
|
||||||
bool smoothChange() const { return mSmoothChange; }
|
bool smoothChange() const { return mSmoothChange; }
|
||||||
|
@ -38,7 +38,6 @@
|
|||||||
#include "svgexporter.h"
|
#include "svgexporter.h"
|
||||||
#include "ReadWrite/evformat.h"
|
#include "ReadWrite/evformat.h"
|
||||||
#include "eevent.h"
|
#include "eevent.h"
|
||||||
#include "Boxes/nullobject.h"
|
|
||||||
|
|
||||||
Canvas::Canvas(Document &document,
|
Canvas::Canvas(Document &document,
|
||||||
const int canvasWidth, const int canvasHeight,
|
const int canvasWidth, const int canvasHeight,
|
||||||
@ -277,11 +276,6 @@ void Canvas::renderSk(SkCanvas * const canvas,
|
|||||||
iBox->drawAllCanvasControls(canvas, mCurrentMode, invZoom, ctrlPressed);
|
iBox->drawAllCanvasControls(canvas, mCurrentMode, invZoom, ctrlPressed);
|
||||||
canvas->restore();
|
canvas->restore();
|
||||||
}
|
}
|
||||||
for(const auto obj : mNullObjects) {
|
|
||||||
canvas->save();
|
|
||||||
obj->drawNullObject(canvas, mCurrentMode, invZoom, ctrlPressed);
|
|
||||||
canvas->restore();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(mCurrentMode == CanvasMode::boxTransform ||
|
if(mCurrentMode == CanvasMode::boxTransform ||
|
||||||
@ -1113,14 +1107,6 @@ SceneBoundGradient *Canvas::getGradientWithDocumentId(const int id) const {
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Canvas::addNullObject(NullObject* const obj) {
|
|
||||||
mNullObjects.append(obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Canvas::removeNullObject(NullObject* const obj) {
|
|
||||||
mNullObjects.removeOne(obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
#include "simpletask.h"
|
#include "simpletask.h"
|
||||||
void Canvas::clearGradientRWIds() const {
|
void Canvas::clearGradientRWIds() const {
|
||||||
SimpleTask::sScheduleContexted(this, [this]() {
|
SimpleTask::sScheduleContexted(this, [this]() {
|
||||||
|
@ -56,7 +56,6 @@ struct ShaderEffectCreator;
|
|||||||
class VideoBox;
|
class VideoBox;
|
||||||
class ImageBox;
|
class ImageBox;
|
||||||
class Document;
|
class Document;
|
||||||
class NullObject;
|
|
||||||
|
|
||||||
class eMouseEvent;
|
class eMouseEvent;
|
||||||
class eKeyEvent;
|
class eKeyEvent;
|
||||||
@ -569,9 +568,6 @@ public:
|
|||||||
|
|
||||||
SceneBoundGradient * getGradientWithRWId(const int rwId) const;
|
SceneBoundGradient * getGradientWithRWId(const int rwId) const;
|
||||||
SceneBoundGradient * getGradientWithDocumentId(const int id) const;
|
SceneBoundGradient * getGradientWithDocumentId(const int id) const;
|
||||||
|
|
||||||
void addNullObject(NullObject* const obj);
|
|
||||||
void removeNullObject(NullObject* const obj);
|
|
||||||
private:
|
private:
|
||||||
void addGradient(const qsptr<SceneBoundGradient>& grad);
|
void addGradient(const qsptr<SceneBoundGradient>& grad);
|
||||||
|
|
||||||
@ -593,7 +589,6 @@ private:
|
|||||||
TransformMode mTransMode = TransformMode::none;
|
TransformMode mTransMode = TransformMode::none;
|
||||||
|
|
||||||
QList<qsptr<SceneBoundGradient>> mGradients;
|
QList<qsptr<SceneBoundGradient>> mGradients;
|
||||||
QList<NullObject*> mNullObjects;
|
|
||||||
protected:
|
protected:
|
||||||
Document& mDocument;
|
Document& mDocument;
|
||||||
bool mDrawnSinceQue = true;
|
bool mDrawnSinceQue = true;
|
||||||
|
@ -29,7 +29,6 @@
|
|||||||
#include "Boxes/containerbox.h"
|
#include "Boxes/containerbox.h"
|
||||||
#include "Boxes/smartvectorpath.h"
|
#include "Boxes/smartvectorpath.h"
|
||||||
#include "Boxes/paintbox.h"
|
#include "Boxes/paintbox.h"
|
||||||
#include "Boxes/nullobject.h"
|
|
||||||
|
|
||||||
#include "pointtypemenu.h"
|
#include "pointtypemenu.h"
|
||||||
#include "pointhelpers.h"
|
#include "pointhelpers.h"
|
||||||
@ -238,13 +237,6 @@ void Canvas::handleLeftButtonMousePress(const eMouseEvent& e) {
|
|||||||
|
|
||||||
mCurrentCircle = newPath.get();
|
mCurrentCircle = newPath.get();
|
||||||
|
|
||||||
} else if(mCurrentMode == CanvasMode::nullCreate) {
|
|
||||||
const auto newPath = enve::make_shared<NullObject>();
|
|
||||||
newPath->planCenterPivotPosition();
|
|
||||||
mCurrentContainer->addContained(newPath);
|
|
||||||
newPath->setAbsolutePos(e.fPos);
|
|
||||||
clearBoxesSelection();
|
|
||||||
addBoxToSelection(newPath.get());
|
|
||||||
} else if(mCurrentMode == CanvasMode::rectCreate) {
|
} else if(mCurrentMode == CanvasMode::rectCreate) {
|
||||||
const auto newPath = enve::make_shared<RectangleBox>();
|
const auto newPath = enve::make_shared<RectangleBox>();
|
||||||
newPath->planCenterPivotPosition();
|
newPath->planCenterPivotPosition();
|
||||||
|
@ -45,7 +45,6 @@ DEFINES += QT_DEPRECATED_WARNINGS
|
|||||||
include(core.pri)
|
include(core.pri)
|
||||||
|
|
||||||
SOURCES += \
|
SOURCES += \
|
||||||
Boxes/nullobject.cpp \
|
|
||||||
Expressions/expression.cpp \
|
Expressions/expression.cpp \
|
||||||
Expressions/framebinding.cpp \
|
Expressions/framebinding.cpp \
|
||||||
Expressions/propertybinding.cpp \
|
Expressions/propertybinding.cpp \
|
||||||
@ -363,7 +362,6 @@ SOURCES += \
|
|||||||
zipfilesaver.cpp
|
zipfilesaver.cpp
|
||||||
|
|
||||||
HEADERS += \
|
HEADERS += \
|
||||||
Boxes/nullobject.h \
|
|
||||||
Expressions/expression.h \
|
Expressions/expression.h \
|
||||||
Expressions/framebinding.h \
|
Expressions/framebinding.h \
|
||||||
Expressions/propertybinding.h \
|
Expressions/propertybinding.h \
|
||||||
|
Loading…
Reference in New Issue
Block a user