Commits:
-
d5693115
by Charlie Jiang
at 2022-09-04T13:25:59+08:00
[ftinspect] Add auxiliary lines for the grid view.
The aux lines will show advance and asc/descender.
* src/ftinspect/glyphcomponents/grid.cpp,
src/ftinspect/glyphcomponents/grid.hpp: Implement aux lines.
* src/ftinspect/engine/engine.cpp, src/ftinspect/engine/engine.hpp:
Add `currentSizeAscDescPx`.
* src/ftinspect/panels/singular.cpp, src/ftinspect/panels/singular.hpp:
Pass parameters to the `Grid` graphics item.
5 changed files:
Changes:
src/ftinspect/engine/engine.cpp
... |
... |
@@ -458,6 +458,14 @@ Engine::currentFontFixedSizes() |
458
|
458
|
}
|
459
|
459
|
|
460
|
460
|
|
|
461
|
+std::pair<int, int>
|
|
462
|
+Engine::currentSizeAscDescPx()
|
|
463
|
+{
|
|
464
|
+ return { ftSize_->metrics.ascender >> 6,
|
|
465
|
+ ftSize_->metrics.descender >> 6 };
|
|
466
|
+}
|
|
467
|
+
|
|
468
|
+
|
461
|
469
|
QString
|
462
|
470
|
Engine::glyphName(int index)
|
463
|
471
|
{
|
src/ftinspect/engine/engine.hpp
... |
... |
@@ -132,6 +132,8 @@ public: |
132
|
132
|
bool currentFontHasColorLayers();
|
133
|
133
|
std::vector<int> currentFontFixedSizes();
|
134
|
134
|
|
|
135
|
+ std::pair<int, int> currentSizeAscDescPx();
|
|
136
|
+
|
135
|
137
|
// (settings)
|
136
|
138
|
int dpi() { return dpi_; }
|
137
|
139
|
FTC_ImageType imageType() { return &imageType_; }
|
src/ftinspect/glyphcomponents/grid.cpp
... |
... |
@@ -119,7 +119,15 @@ Grid::paint(QPainter* painter, |
119
|
119
|
|
120
|
120
|
if (showAuxLines_)
|
121
|
121
|
{
|
122
|
|
- // TODO: impl
|
|
122
|
+ painter->setPen(gb->ascDescAuxPen);
|
|
123
|
+ painter->drawLine(minX, ascender_,
|
|
124
|
+ maxX, ascender_);
|
|
125
|
+ painter->drawLine(minX, descender_,
|
|
126
|
+ maxX, descender_);
|
|
127
|
+
|
|
128
|
+ painter->setPen(gb->advanceAuxPen);
|
|
129
|
+ painter->drawLine(advance_, minY,
|
|
130
|
+ advance_, maxY);
|
123
|
131
|
}
|
124
|
132
|
}
|
125
|
133
|
|
... |
... |
@@ -133,4 +141,19 @@ Grid::setShowGrid(bool showGrid, bool showAuxLines) |
133
|
141
|
}
|
134
|
142
|
|
135
|
143
|
|
|
144
|
+void
|
|
145
|
+Grid::updateParameters(int ascenderPx,
|
|
146
|
+ int descenderPx,
|
|
147
|
+ int advancePx)
|
|
148
|
+{
|
|
149
|
+ // Need to flip the Y coord (originally Cartesian)
|
|
150
|
+ ascender_ = -ascenderPx;
|
|
151
|
+ descender_ = -descenderPx;
|
|
152
|
+ advance_ = advancePx;
|
|
153
|
+
|
|
154
|
+ if (showAuxLines_)
|
|
155
|
+ update();
|
|
156
|
+}
|
|
157
|
+
|
|
158
|
+
|
136
|
159
|
// end of grid.cpp |
src/ftinspect/glyphcomponents/grid.hpp
... |
... |
@@ -20,6 +20,7 @@ public: |
20
|
20
|
QWidget* widget) override;
|
21
|
21
|
|
22
|
22
|
void setShowGrid(bool showGrid, bool showAuxLines);
|
|
23
|
+ void updateParameters(int ascenderPx, int descenderPx, int advancePx);
|
23
|
24
|
|
24
|
25
|
void updateRect(); // there's no signal/slots for QGraphicsItem.
|
25
|
26
|
|
... |
... |
@@ -30,6 +31,9 @@ private: |
30
|
31
|
|
31
|
32
|
bool showGrid_ = true;
|
32
|
33
|
bool showAuxLines_ = false;
|
|
34
|
+
|
|
35
|
+ int ascender_ = 0, descender_ = 0;
|
|
36
|
+ int advance_ = 0;
|
33
|
37
|
};
|
34
|
38
|
|
35
|
39
|
|
src/ftinspect/panels/singular.cpp
... |
... |
@@ -131,7 +131,14 @@ SingularTab::drawGlyph() |
131
|
131
|
glyphScene_->addItem(currentGlyphPointNumbersItem_);
|
132
|
132
|
}
|
133
|
133
|
}
|
|
134
|
+
|
|
135
|
+ engine_->reloadFont();
|
|
136
|
+ auto ascDesc = engine_->currentSizeAscDescPx();
|
|
137
|
+ gridItem_->updateParameters(ascDesc.first, ascDesc.second,
|
|
138
|
+ glyph->advance.x >> 16);
|
134
|
139
|
}
|
|
140
|
+ else
|
|
141
|
+ gridItem_->updateParameters(0, 0, 0);
|
135
|
142
|
|
136
|
143
|
glyphScene_->update();
|
137
|
144
|
}
|
|