Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Convert LINE_WIDTH property to spatium #23875

Merged
merged 10 commits into from
Aug 12, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions src/engraving/dom/ambitus.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -424,7 +424,7 @@ PropertyValue Ambitus::getProperty(Pid propertyId) const
return int(direction());
case Pid::GHOST: // recycled property = _hasLine
return hasLine();
case Pid::LINE_WIDTH_SPATIUM:
case Pid::LINE_WIDTH:
return lineWidth();
case Pid::TPC1:
return topTpc();
Expand Down Expand Up @@ -462,7 +462,7 @@ bool Ambitus::setProperty(Pid propertyId, const PropertyValue& v)
case Pid::GHOST: // recycled property = _hasLine
setHasLine(v.toBool());
break;
case Pid::LINE_WIDTH_SPATIUM:
case Pid::LINE_WIDTH:
setLineWidth(v.value<Spatium>());
break;
case Pid::TPC1:
Expand Down Expand Up @@ -505,7 +505,7 @@ PropertyValue Ambitus::propertyDefault(Pid id) const
return int(DIRECTION_DEFAULT);
case Pid::GHOST:
return HASLINE_DEFAULT;
case Pid::LINE_WIDTH_SPATIUM:
case Pid::LINE_WIDTH:
return Spatium(LINEWIDTH_DEFAULT);
case Pid::TPC1:
return estimateRanges().topTpc;
Expand Down
2 changes: 1 addition & 1 deletion src/engraving/dom/bend.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@ bool Bend::setProperty(Pid id, const PropertyValue& v)
setPlayBend(v.toBool());
break;
case Pid::LINE_WIDTH:
m_lineWidth = v.value<Millimetre>();
m_lineWidth = v.value<Spatium>();
break;
case Pid::BEND_TYPE:
updatePointsByBendType(static_cast<BendType>(v.toInt()));
Expand Down
6 changes: 3 additions & 3 deletions src/engraving/dom/bend.h
Original file line number Diff line number Diff line change
Expand Up @@ -76,8 +76,8 @@ class Bend final : public EngravingItem
void setFontSize(double s) { m_fontSize = s; }
FontStyle fontStyle() const { return m_fontStyle; }
void setFontStyle(FontStyle s) { m_fontStyle = s; }
Millimetre lineWidth() const { return m_lineWidth; }
void setLineWidth(Millimetre w) { m_lineWidth = w; }
Spatium lineWidth() const { return m_lineWidth; }
void setLineWidth(Spatium w) { m_lineWidth = w; }

muse::draw::Font font(double) const;

Expand Down Expand Up @@ -108,7 +108,7 @@ class Bend final : public EngravingItem
String m_fontFace;
double m_fontSize = 0.0;
FontStyle m_fontStyle = FontStyle::Undefined;
Millimetre m_lineWidth;
Spatium m_lineWidth;
};
} // namespace mu::engraving
#endif
10 changes: 5 additions & 5 deletions src/engraving/dom/box.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ Box::Box(const ElementType& type, System* parent)

void HBox::computeMinWidth()
{
setWidth(point(boxWidth() + topGap() + bottomGap())); // top/bottom is really left/right
setWidth(absoluteFromSpatium(boxWidth() + topGap() + bottomGap())); // top/bottom is really left/right
}

bool Box::isEditAllowed(EditData&) const
Expand Down Expand Up @@ -102,7 +102,7 @@ void Box::editDrag(EditData& ed)
int n = lrint(m_boxHeight.val() / vRaster);
m_boxHeight = Spatium(vRaster * n);
}
mutldata()->setBbox(0.0, 0.0, system()->width(), point(boxHeight()));
mutldata()->setBbox(0.0, 0.0, system()->width(), absoluteFromSpatium(boxHeight()));
system()->setHeight(height());
triggerLayout();
} else {
Expand Down Expand Up @@ -152,7 +152,7 @@ void Box::add(EngravingItem* e)
MeasureBase::add(e);
}

double Box::point(const Spatium val) const
double Box::absoluteFromSpatium(const Spatium& val) const
{
const double sp = sizeIsSpatiumDependent() ? spatium() : style().defaultSpatium();
return val.val() * sp;
Expand Down Expand Up @@ -617,12 +617,12 @@ VBox::VBox(System* parent)

double VBox::minHeight() const
{
return point(Spatium(10));
return absoluteFromSpatium(Spatium(10));
}

double VBox::maxHeight() const
{
return point(Spatium(30));
return absoluteFromSpatium(Spatium(30));
}

PropertyValue VBox::getProperty(Pid propertyId) const
Expand Down
2 changes: 1 addition & 1 deletion src/engraving/dom/box.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ class Box : public MeasureBase
virtual bool acceptDrop(EditData&) const override;
virtual EngravingItem* drop(EditData&) override;
virtual void add(EngravingItem* e) override;
virtual double point(const Spatium val) const override;
virtual double absoluteFromSpatium(const Spatium& val) const override;

RectF contentRect() const;
Spatium boxWidth() const { return m_boxWidth; }
Expand Down
2 changes: 1 addition & 1 deletion src/engraving/dom/engravingitem.h
Original file line number Diff line number Diff line change
Expand Up @@ -403,7 +403,7 @@ class EngravingItem : public EngravingObject

bool isPrintable() const;
bool isPlayable() const;
virtual double point(const Spatium sp) const { return sp.val() * spatium(); }
virtual double absoluteFromSpatium(const Spatium& sp) const { return sp.val() * spatium(); }

bool systemFlag() const { return flag(ElementFlag::SYSTEM); }
void setSystemFlag(bool v) const { setFlag(ElementFlag::SYSTEM, v); }
Expand Down
27 changes: 22 additions & 5 deletions src/engraving/dom/line.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -815,7 +815,6 @@ void LineSegment::spatiumChanged(double ov, double nv)
{
EngravingItem::spatiumChanged(ov, nv);
double scale = nv / ov;
line()->setLineWidth(line()->lineWidth() * scale);
m_offset2 *= scale;
}

Expand Down Expand Up @@ -869,6 +868,24 @@ RectF LineSegment::drag(EditData& ed)
return canvasBoundingRect();
}

Spatium LineSegment::lineWidth() const
{
if (!line()) {
return Spatium(0.0);
}

return line()->lineWidth();
}

double LineSegment::absoluteFromSpatium(const Spatium& sp) const
{
if (!line()) {
return EngravingItem::absoluteFromSpatium(sp);
}

return line()->absoluteFromSpatium(sp);
}

void LineSegment::undoMoveStartEndAndSnappedItems(bool moveStart, bool moveEnd, Segment* s1, Segment* s2)
{
SLine* thisLine = line();
Expand Down Expand Up @@ -911,7 +928,7 @@ SLine::SLine(const ElementType& type, EngravingItem* parent, ElementFlags f)
{
setTrack(0);
m_lineColor = configuration()->defaultColor();
m_lineWidth = 0.15 * spatium();
m_lineWidth = Spatium(0.15);
}

SLine::SLine(const SLine& s)
Expand Down Expand Up @@ -1038,9 +1055,9 @@ bool SLine::setProperty(Pid id, const PropertyValue& v)
break;
case Pid::LINE_WIDTH:
if (v.type() == P_TYPE::MILLIMETRE) {
m_lineWidth = v.value<Millimetre>();
m_lineWidth = Spatium::fromMM(v.value<Millimetre>(), spatium());
} else if (v.type() == P_TYPE::SPATIUM) {
m_lineWidth = v.value<Spatium>().toMM(spatium());
m_lineWidth = v.value<Spatium>();
}
break;
case Pid::LINE_STYLE:
Expand Down Expand Up @@ -1074,7 +1091,7 @@ PropertyValue SLine::propertyDefault(Pid pid) const
if (propertyFlags(pid) != PropertyFlags::NOSTYLE) {
return Spanner::propertyDefault(pid);
}
return Millimetre(0.15 * spatium());
return Spatium(0.15);
case Pid::LINE_STYLE:
if (propertyFlags(pid) != PropertyFlags::NOSTYLE) {
return Spanner::propertyDefault(pid);
Expand Down
11 changes: 8 additions & 3 deletions src/engraving/dom/line.h
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,11 @@ class LineSegment : public SpannerSegment

std::vector<LineF> dragAnchorLines() const override;
RectF drag(EditData& ed) override;

Spatium lineWidth() const;

double absoluteFromSpatium(const Spatium& sp) const override;

private:
Segment* findNewAnchorSegment(const EditData& ed, const Segment* curSeg);
void undoMoveStartEndAndSnappedItems(bool moveStart, bool moveEnd, Segment* s1, Segment* s2);
Expand Down Expand Up @@ -108,10 +113,10 @@ class SLine : public Spanner
bool diagonal() const { return m_diagonal; }
void setDiagonal(bool v) { m_diagonal = v; }

Millimetre lineWidth() const { return m_lineWidth; }
Spatium lineWidth() const { return m_lineWidth; }
Color lineColor() const { return m_lineColor; }
LineType lineStyle() const { return m_lineStyle; }
void setLineWidth(const Millimetre& v) { m_lineWidth = v; }
void setLineWidth(const Spatium& v) { m_lineWidth = v; }
void setLineColor(const Color& v) { m_lineColor = v; }
void setLineStyle(LineType v) { m_lineStyle = v; }

Expand Down Expand Up @@ -141,7 +146,7 @@ class SLine : public Spanner

friend class LineSegment;

Millimetre m_lineWidth;
Spatium m_lineWidth;
Color m_lineColor;
LineType m_lineStyle = LineType::SOLID;
double m_dashLineLen = 5.0;
Expand Down
6 changes: 3 additions & 3 deletions src/engraving/dom/lyricsline.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ LyricsLine::LyricsLine(EngravingItem* parent)
{
setGenerated(true); // no need to save it, as it can be re-generated
setDiagonal(false);
setLineWidth(style().styleMM(Sid::lyricsDashLineThickness));
setLineWidth(style().styleS(Sid::lyricsDashLineThickness));
setAnchor(Spanner::Anchor::SEGMENT);
m_nextLyrics = 0;
}
Expand All @@ -62,7 +62,7 @@ LyricsLine::LyricsLine(const LyricsLine& g)

void LyricsLine::styleChanged()
{
setLineWidth(style().styleMM(Sid::lyricsDashLineThickness));
setLineWidth(style().styleS(Sid::lyricsDashLineThickness));
}

//---------------------------------------------------------
Expand Down Expand Up @@ -145,7 +145,7 @@ LyricsLineSegment::LyricsLineSegment(LyricsLine* sp, System* parent)
double LyricsLineSegment::baseLineShift() const
{
if (lyricsLine()->isEndMelisma()) {
return -0.5 * lyricsLine()->lineWidth();
return -0.5 * absoluteFromSpatium(lineWidth());
}

Lyrics* lyrics = lyricsLine()->lyrics();
Expand Down
2 changes: 1 addition & 1 deletion src/engraving/dom/ottava.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -435,7 +435,7 @@ PointF Ottava::linePos(Grip grip, System** system) const
x = std::min(x, followingCRseg->x() + followingCRseg->measure()->x());
}

x -= 0.5 * lineWidth();
x -= 0.5 * absoluteFromSpatium(lineWidth());

return PointF(x, 0.0);
}
Expand Down
4 changes: 2 additions & 2 deletions src/engraving/dom/pedal.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ engraving::PropertyValue Pedal::propertyDefault(Pid propertyId) const
{
switch (propertyId) {
case Pid::LINE_WIDTH:
return style().styleMM(Sid::pedalLineWidth); // return point, not spatium
return style().styleS(Sid::pedalLineWidth); // return point, not spatium

case Pid::LINE_STYLE:
return style().styleV(Sid::pedalLineStyle);
Expand Down Expand Up @@ -224,7 +224,7 @@ PointF Pedal::linePos(Grip grip, System** sys) const
if (beginText() == "<sym>keyboardPedalPed</sym>") {
x -= 0.5 * spatium();
} else if (beginHookType() == HookType::HOOK_90 || beginHookType() == HookType::HOOK_90T) {
x += 0.5 * lineWidth();
x += 0.5 * absoluteFromSpatium(lineWidth());
} else if (beginHookType() == HookType::HOOK_45) {
EngravingItem* item = startElement();
if (item && item->isChord()) {
Expand Down
3 changes: 1 addition & 2 deletions src/engraving/dom/property.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -208,8 +208,7 @@ static constexpr PropertyMetaData propertyList[] = {
{ Pid::DIAGONAL, false, 0, P_TYPE::BOOL, PropertyGroup::APPEARANCE, DUMMY_QT_TR_NOOP("propertyName", "diagonal") },
{ Pid::GROUP_NODES, false, 0, P_TYPE::GROUPS, PropertyGroup::NONE , DUMMY_QT_TR_NOOP("propertyName", "groups") },
{ Pid::LINE_STYLE, false, "lineStyle", P_TYPE::LINE_TYPE, PropertyGroup::APPEARANCE, DUMMY_QT_TR_NOOP("propertyName", "line style") },
{ Pid::LINE_WIDTH, false, "lineWidth", P_TYPE::MILLIMETRE, PropertyGroup::APPEARANCE, DUMMY_QT_TR_NOOP("propertyName", "line width") },
{ Pid::LINE_WIDTH_SPATIUM, false, "lineWidth", P_TYPE::SPATIUM, PropertyGroup::APPEARANCE, DUMMY_QT_TR_NOOP("propertyName", "line width (spatium)") },
{ Pid::LINE_WIDTH, false, "lineWidth", P_TYPE::SPATIUM, PropertyGroup::APPEARANCE, DUMMY_QT_TR_NOOP("propertyName", "line width") },
{ Pid::TIME_STRETCH, true, "timeStretch", P_TYPE::REAL, PropertyGroup::APPEARANCE, DUMMY_QT_TR_NOOP("propertyName", "time stretch") },
{ Pid::ORNAMENT_STYLE, true, "ornamentStyle", P_TYPE::ORNAMENT_STYLE, PropertyGroup::APPEARANCE, DUMMY_QT_TR_NOOP("propertyName", "ornament style") },
{ Pid::INTERVAL_ABOVE, true, "intervalAbove", P_TYPE::ORNAMENT_INTERVAL, PropertyGroup::APPEARANCE, DUMMY_QT_TR_NOOP("propertyName", "interval above") },
Expand Down
1 change: 0 additions & 1 deletion src/engraving/dom/property.h
Original file line number Diff line number Diff line change
Expand Up @@ -217,7 +217,6 @@ enum class Pid {
GROUP_NODES,
LINE_STYLE,
LINE_WIDTH,
LINE_WIDTH_SPATIUM,
TIME_STRETCH,
ORNAMENT_STYLE,
INTERVAL_ABOVE,
Expand Down
7 changes: 6 additions & 1 deletion src/engraving/dom/stem.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,11 @@ void Stem::setBaseLength(Millimetre baseLength)
m_baseLength = Millimetre(std::abs(baseLength.val()));
}

double Stem::lineWidthMag() const
{
return absoluteFromSpatium(m_lineWidth) * chord()->intrinsicMag();
}

void Stem::spatiumChanged(double oldValue, double newValue)
{
m_userLength = (m_userLength / oldValue) * newValue;
Expand Down Expand Up @@ -163,7 +168,7 @@ bool Stem::setProperty(Pid propertyId, const PropertyValue& v)
{
switch (propertyId) {
case Pid::LINE_WIDTH:
setLineWidth(v.value<Millimetre>());
setLineWidth(v.value<Spatium>());
break;
case Pid::USER_LEN:
setUserLength(v.value<Millimetre>());
Expand Down
8 changes: 4 additions & 4 deletions src/engraving/dom/stem.h
Original file line number Diff line number Diff line change
Expand Up @@ -67,9 +67,9 @@ class Stem final : public EngravingItem
Millimetre userLength() const { return m_userLength; }
void setUserLength(Millimetre userLength) { m_userLength = userLength; }

Millimetre lineWidth() const { return m_lineWidth; }
double lineWidthMag() const { return m_lineWidth * mag(); }
void setLineWidth(Millimetre lineWidth) { m_lineWidth = lineWidth; }
Spatium lineWidth() const { return m_lineWidth; }
double lineWidthMag() const;
void setLineWidth(Spatium lineWidth) { m_lineWidth = lineWidth; }

PointF flagPosition() const;
double length() const { return m_baseLength + m_userLength; }
Expand All @@ -92,7 +92,7 @@ class Stem final : public EngravingItem
Millimetre m_baseLength = Millimetre(0.0);
Millimetre m_userLength = Millimetre(0.0);

Millimetre m_lineWidth = Millimetre(0.0);
Spatium m_lineWidth = Spatium(0.0);
};
}
#endif
4 changes: 2 additions & 2 deletions src/engraving/dom/stretchedbend.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ bool StretchedBend::setProperty(Pid id, const PropertyValue& v)
_fontStyle = FontStyle(v.toInt());
break;
case Pid::LINE_WIDTH:
_lineWidth = v.value<Millimetre>();
_lineWidth = v.value<Spatium>();
break;
default:
return EngravingItem::setProperty(id, v);
Expand Down Expand Up @@ -542,7 +542,7 @@ RectF StretchedBend::calculateBoundingRect() const
}
}

double lw = lineWidth();
double lw = absoluteFromSpatium(lineWidth());
bRect.adjust(-lw, -lw, lw, lw);

return bRect;
Expand Down
2 changes: 1 addition & 1 deletion src/engraving/dom/stretchedbend.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ class StretchedBend final : public EngravingItem
M_PROPERTY(String, fontFace, setFontFace)
M_PROPERTY(double, fontSize, setFontSize)
M_PROPERTY(FontStyle, fontStyle, setFontStyle)
M_PROPERTY(Millimetre, lineWidth, setLineWidth)
M_PROPERTY(Spatium, lineWidth, setLineWidth)

public:

Expand Down
2 changes: 1 addition & 1 deletion src/engraving/dom/system.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -849,7 +849,7 @@ double System::minTop() const
double System::minBottom() const
{
if (const Box* vb = vbox()) {
return vb->point(vb->bottomGap());
return vb->absoluteFromSpatium(vb->bottomGap());
}
staff_idx_t si = lastVisibleSysStaff();
SysStaff* s = si == muse::nidx ? nullptr : staff(si);
Expand Down
2 changes: 1 addition & 1 deletion src/engraving/dom/tuplet.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -589,7 +589,7 @@ bool Tuplet::setProperty(Pid propertyId, const PropertyValue& v)
setBracketType(TupletBracketType(v.toInt()));
break;
case Pid::LINE_WIDTH:
setBracketWidth(v.value<Millimetre>());
setBracketWidth(v.value<Spatium>());
break;
case Pid::NORMAL_NOTES:
m_ratio.setDenominator(v.toInt());
Expand Down
6 changes: 3 additions & 3 deletions src/engraving/dom/tuplet.h
Original file line number Diff line number Diff line change
Expand Up @@ -84,8 +84,8 @@ class Tuplet final : public DurationElement
void setBracketType(TupletBracketType val) { m_bracketType = val; }
bool hasBracket() const { return m_hasBracket; }
void setHasBracket(bool b) { m_hasBracket = b; }
Millimetre bracketWidth() const { return m_bracketWidth; }
void setBracketWidth(Millimetre s) { m_bracketWidth = s; }
Spatium bracketWidth() const { return m_bracketWidth; }
void setBracketWidth(Spatium s) { m_bracketWidth = s; }

const Fraction& ratio() const { return m_ratio; }
void setRatio(const Fraction& r) { m_ratio = r; }
Expand Down Expand Up @@ -178,7 +178,7 @@ class Tuplet final : public DurationElement
DirectionV m_direction = DirectionV::AUTO;
TupletNumberType m_numberType = TupletNumberType::SHOW_NUMBER;
TupletBracketType m_bracketType = TupletBracketType::AUTO_BRACKET;
Millimetre m_bracketWidth;
Spatium m_bracketWidth;

bool m_hasBracket = false;
Fraction m_ratio;
Expand Down
Loading
Loading