Skip to content

Commit 6725ed0

Browse files
committed
Generalize all font metrics function to char32_t
Cause that will work with both 16bit and 32bit (i.e. ucs4) character maps
1 parent 2f5cb90 commit 6725ed0

File tree

15 files changed

+60
-109
lines changed

15 files changed

+60
-109
lines changed

src/engraving/dom/harmony.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1182,12 +1182,12 @@ void TextSegment::setFont(const muse::draw::Font& f)
11821182
const Char& c2 = m_text.at(i + 1);
11831183
++i;
11841184
char32_t v = Char::surrogateToUcs4(c, c2);
1185-
if (!fm.inFontUcs4(v)) {
1185+
if (!fm.inFont(v)) {
11861186
fail = true;
11871187
break;
11881188
}
11891189
} else {
1190-
if (!fm.inFont(c)) {
1190+
if (!fm.inFont(c.unicode())) {
11911191
fail = true;
11921192
break;
11931193
}

src/engraving/dom/textbase.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -941,12 +941,12 @@ Font TextFragment::font(const TextBase* t) const
941941
const Char& c2 = text.at(i + 1);
942942
++i;
943943
char32_t v = Char::surrogateToUcs4(c, c2);
944-
if (!fm.inFontUcs4(v)) {
944+
if (!fm.inFont(v)) {
945945
fail = true;
946946
break;
947947
}
948948
} else {
949-
if (!fm.inFont(c)) {
949+
if (!fm.inFont(c.unicode())) {
950950
fail = true;
951951
break;
952952
}

src/engraving/internal/engravingfont.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -846,9 +846,9 @@ void EngravingFont::loadEngravingDefaults(const JsonObject& engravingDefaultsObj
846846

847847
void EngravingFont::computeMetrics(EngravingFont::Sym& sym, const Smufl::Code& code)
848848
{
849-
if (fontProvider()->inFontUcs4(m_font, code.smuflCode)) {
849+
if (fontProvider()->inFont(m_font, code.smuflCode)) {
850850
sym.code = code.smuflCode;
851-
} else if (fontProvider()->inFontUcs4(m_font, code.musicSymBlockCode)) {
851+
} else if (fontProvider()->inFont(m_font, code.musicSymBlockCode)) {
852852
sym.code = code.musicSymBlockCode;
853853
}
854854

src/engraving/rendering/score/tlayout.cpp

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1305,9 +1305,7 @@ void TLayout::layoutBend(const Bend* item, Bend::LayoutData* ldata)
13051305

13061306
int idx = (pitch + 12) / 25;
13071307
const char* l = Bend::label[idx];
1308-
bb.unite(fm.boundingRect(RectF(x2, y2, 0, 0),
1309-
muse::draw::AlignHCenter | muse::draw::AlignBottom | muse::draw::TextDontClip,
1310-
String::fromAscii(l)));
1308+
bb.unite(fm.boundingRect(String::fromAscii(l)));
13111309
y = y2;
13121310
}
13131311
if (pitch == item->points().at(pt + 1).pitch) {
@@ -1332,9 +1330,7 @@ void TLayout::layoutBend(const Bend* item, Bend::LayoutData* ldata)
13321330

13331331
int idx = (item->points().at(pt + 1).pitch + 12) / 25;
13341332
const char* l = Bend::label[idx];
1335-
bb.unite(fm.boundingRect(RectF(x2, y2, 0, 0),
1336-
muse::draw::AlignHCenter | muse::draw::AlignBottom | muse::draw::TextDontClip,
1337-
String::fromAscii(l)));
1333+
bb.unite(fm.boundingRect(String::fromAscii(l)));
13381334
} else {
13391335
// down
13401336
x2 = x + spatium * .5;

src/engraving/rendering/single/singlelayout.cpp

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -669,9 +669,7 @@ void SingleLayout::layout(Bend* item, const Context&)
669669

670670
int idx = (pitch + 12) / 25;
671671
const char* l = Bend::label[idx];
672-
bb.unite(fm.boundingRect(RectF(x2, y2, 0, 0),
673-
muse::draw::AlignHCenter | muse::draw::AlignBottom | muse::draw::TextDontClip,
674-
String::fromAscii(l)));
672+
bb.unite(fm.boundingRect(String::fromAscii(l)));
675673
y = y2;
676674
}
677675
if (pitch == item->points().at(pt + 1).pitch) {
@@ -696,9 +694,7 @@ void SingleLayout::layout(Bend* item, const Context&)
696694

697695
int idx = (item->points().at(pt + 1).pitch + 12) / 25;
698696
const char* l = Bend::label[idx];
699-
bb.unite(fm.boundingRect(RectF(x2, y2, 0, 0),
700-
muse::draw::AlignHCenter | muse::draw::AlignBottom | muse::draw::TextDontClip,
701-
String::fromAscii(l)));
697+
bb.unite(fm.boundingRect(String::fromAscii(l)));
702698
} else {
703699
// down
704700
x2 = x + spatium * .5;

src/framework/draw/fontmetrics.cpp

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -74,24 +74,19 @@ double FontMetrics::horizontalAdvance(const String& string) const
7474
return fontProvider()->horizontalAdvance(m_font, string);
7575
}
7676

77-
double FontMetrics::horizontalAdvance(const Char& ch) const
77+
double FontMetrics::horizontalAdvance(char32_t ucs4) const
7878
{
79-
return fontProvider()->horizontalAdvance(m_font, ch);
79+
return fontProvider()->horizontalAdvance(m_font, ucs4);
8080
}
8181

8282
RectF FontMetrics::boundingRect(const String& string) const
8383
{
8484
return fontProvider()->boundingRect(m_font, string);
8585
}
8686

87-
RectF FontMetrics::boundingRect(const Char& ch) const
87+
RectF FontMetrics::boundingRect(char32_t ucs4) const
8888
{
89-
return fontProvider()->boundingRect(m_font, ch);
90-
}
91-
92-
RectF FontMetrics::boundingRect(const RectF& r, int flags, const String& string) const
93-
{
94-
return fontProvider()->boundingRect(m_font, r, flags, string);
89+
return fontProvider()->boundingRect(m_font, ucs4);
9590
}
9691

9792
RectF FontMetrics::tightBoundingRect(const String& string) const
@@ -104,14 +99,9 @@ RectF FontMetrics::tightBoundingRect(const Char& ch) const
10499
return fontProvider()->tightBoundingRect(m_font, ch);
105100
}
106101

107-
bool FontMetrics::inFont(Char ch) const
108-
{
109-
return fontProvider()->inFont(m_font, ch);
110-
}
111-
112-
bool FontMetrics::inFontUcs4(char32_t ucs4) const
102+
bool FontMetrics::inFont(char32_t ucs4) const
113103
{
114-
return fontProvider()->inFontUcs4(m_font, ucs4);
104+
return fontProvider()->inFont(m_font, ucs4);
115105
}
116106

117107
// Static

src/framework/draw/fontmetrics.h

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,16 +49,15 @@ class FontMetrics
4949
double width(const Char& ch) const;
5050

5151
double horizontalAdvance(const String& string) const;
52-
double horizontalAdvance(const Char& ch) const;
52+
double horizontalAdvance(char32_t ucs4) const;
5353

5454
RectF boundingRect(const String& string) const;
55-
RectF boundingRect(const Char& ch) const;
56-
RectF boundingRect(const RectF& r, int flags, const String& string) const;
55+
RectF boundingRect(char32_t ucs4) const;
56+
5757
RectF tightBoundingRect(const String& string) const;
5858
RectF tightBoundingRect(const Char& ch) const;
5959

60-
bool inFont(Char ch) const;
61-
bool inFontUcs4(char32_t ucs4) const;
60+
bool inFont(char32_t ucs4) const;
6261

6362
static double width(const Font& f, const String& string);
6463
static RectF boundingRect(const Font& f, const String& string);

src/framework/draw/ifontprovider.h

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,16 +47,15 @@ class IFontProvider : MODULE_EXPORT_INTERFACE
4747
virtual double ascent(const Font& f) const = 0;
4848
virtual double descent(const Font& f) const = 0;
4949

50-
virtual bool inFont(const Font& f, Char ch) const = 0;
51-
virtual bool inFontUcs4(const Font& f, char32_t ucs4) const = 0;
50+
virtual bool inFont(const Font& f, char32_t ucs4) const = 0;
5251

5352
// Text
5453
virtual double horizontalAdvance(const Font& f, const String& string) const = 0;
55-
virtual double horizontalAdvance(const Font& f, const Char& ch) const = 0;
54+
virtual double horizontalAdvance(const Font& f, char32_t ucs4) const = 0;
5655

5756
virtual RectF boundingRect(const Font& f, const String& string) const = 0;
58-
virtual RectF boundingRect(const Font& f, const Char& ch) const = 0;
59-
virtual RectF boundingRect(const Font& f, const RectF& r, int flags, const String& string) const = 0;
57+
virtual RectF boundingRect(const Font& f, char32_t ucs4) const = 0;
58+
6059
virtual RectF tightBoundingRect(const Font& f, const String& string) const = 0;
6160
};
6261
}

src/framework/draw/internal/fontprovider.cpp

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -63,12 +63,7 @@ double FontProvider::descent(const muse::draw::Font& f) const
6363
return fontsEngine()->descent(f);
6464
}
6565

66-
bool FontProvider::inFont(const muse::draw::Font& f, muse::Char ch) const
67-
{
68-
return inFontUcs4(f, static_cast<char32_t>(ch.unicode()));
69-
}
70-
71-
bool FontProvider::inFontUcs4(const muse::draw::Font& f, char32_t ucs4) const
66+
bool FontProvider::inFont(const muse::draw::Font& f, char32_t ucs4) const
7267
{
7368
return fontsEngine()->inFontUcs4(f, ucs4);
7469
}
@@ -79,26 +74,19 @@ double FontProvider::horizontalAdvance(const muse::draw::Font& f, const muse::St
7974
return fontsEngine()->horizontalAdvance(f, string.toStdU32String());
8075
}
8176

82-
double FontProvider::horizontalAdvance(const muse::draw::Font& f, const muse::Char& ch) const
77+
double FontProvider::horizontalAdvance(const muse::draw::Font& f, char32_t ucs4) const
8378
{
84-
return fontsEngine()->horizontalAdvance(f, ch.unicode());
79+
return fontsEngine()->horizontalAdvance(f, ucs4);
8580
}
8681

8782
RectF FontProvider::boundingRect(const muse::draw::Font& f, const muse::String& string) const
8883
{
8984
return fontsEngine()->boundingRect(f, string.toStdU32String());
9085
}
9186

92-
RectF FontProvider::boundingRect(const muse::draw::Font& f, const muse::Char& ch) const
93-
{
94-
return fontsEngine()->boundingRect(f, ch.unicode());
95-
}
96-
97-
RectF FontProvider::boundingRect(const muse::draw::Font& f, const RectF& r, int flags, const muse::String& string) const
87+
RectF FontProvider::boundingRect(const muse::draw::Font& f, char32_t ucs4) const
9888
{
99-
UNUSED(r);
100-
UNUSED(flags);
101-
return boundingRect(f, string);
89+
return fontsEngine()->boundingRect(f, ucs4);
10290
}
10391

10492
RectF FontProvider::tightBoundingRect(const muse::draw::Font& f, const muse::String& string) const

src/framework/draw/internal/fontprovider.h

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,16 +46,15 @@ class FontProvider : public IFontProvider, public Injectable
4646
double ascent(const Font& f) const override;
4747
double descent(const Font& f) const override;
4848

49-
bool inFont(const Font& f, Char ch) const override;
50-
bool inFontUcs4(const Font& f, char32_t ucs4) const override;
49+
bool inFont(const Font& f, char32_t ucs4) const override;
5150

5251
// Text
5352
double horizontalAdvance(const Font& f, const String& string) const override;
54-
double horizontalAdvance(const Font& f, const Char& ch) const override;
53+
double horizontalAdvance(const Font& f, char32_t ucs4) const override;
5554

5655
RectF boundingRect(const Font& f, const String& string) const override;
57-
RectF boundingRect(const Font& f, const Char& ch) const override;
58-
RectF boundingRect(const Font& f, const RectF& r, int flags, const String& string) const override;
56+
RectF boundingRect(const Font& f, char32_t ucs4) const override;
57+
5958
RectF tightBoundingRect(const Font& f, const String& string) const override;
6059
};
6160
}

0 commit comments

Comments
 (0)