Skip to content

Commit 5a28b42

Browse files
committed
Add 'Points' as a unit of measure in Screen Ruler
This adds 'Points' (pt) as a new measurement unit option in Screen Ruler. Points are commonly used in typography and design (1 point = 1/72 inch). - Add Point enum value (16) to Measurement::Unit - Add conversion logic for Points based on pixel-to-mm ratio - Add 'pt' abbreviation string resource - Add Points option to Settings UI ComboBox Fixes #39464
1 parent 503bcbd commit 5a28b42

File tree

5 files changed

+27
-2
lines changed

5 files changed

+27
-2
lines changed

src/modules/MeasureTool/MeasureToolCore/Measurement.cpp

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ namespace
3434
return pixels * px2mmRatio / 10.0f;
3535
case Measurement::Unit::Millimetre:
3636
return pixels * px2mmRatio;
37+
case Measurement::Unit::Point:
38+
return pixels * px2mmRatio / 10.0f / 2.54f * 72.0f;
3739
default:
3840
return pixels;
3941
}
@@ -50,14 +52,16 @@ namespace
5052
return pixels / 96.0f * 2.54f;
5153
case Measurement::Unit::Millimetre:
5254
return pixels / 96.0f / 10.0f * 2.54f;
55+
case Measurement::Unit::Point:
56+
return pixels / 96.0f * 72.0f;
5357
default:
5458
return pixels;
5559
}
5660
}
5761
}
5862
}
5963

60-
winrt::hstring Measurement::abbreviations[4]{};
64+
winrt::hstring Measurement::abbreviations[5]{};
6165

6266
inline float Measurement::Width(const Unit units) const
6367
{
@@ -81,6 +85,8 @@ Measurement::Unit Measurement::GetUnitFromIndex(int index)
8185
return Measurement::Unit::Centimetre;
8286
case 3:
8387
return Measurement::Unit::Millimetre;
88+
case 4:
89+
return Measurement::Unit::Point;
8490
default:
8591
return Measurement::Unit::Pixel;
8692
}
@@ -94,6 +100,7 @@ void Measurement::InitResources()
94100
abbreviations[1] = mm.GetValue(L"Resources/MeasurementUnitAbbrInch").ValueAsString();
95101
abbreviations[2] = mm.GetValue(L"Resources/MeasurementUnitAbbrCentimetre").ValueAsString();
96102
abbreviations[3] = mm.GetValue(L"Resources/MeasurementUnitAbbrMillimetre").ValueAsString();
103+
abbreviations[4] = mm.GetValue(L"Resources/MeasurementUnitAbbrPoint").ValueAsString();
97104
}
98105

99106
const wchar_t* Measurement::GetUnitAbbreviation(Measurement::Unit units)
@@ -108,6 +115,8 @@ const wchar_t* Measurement::GetUnitAbbreviation(Measurement::Unit units)
108115
return abbreviations[2].c_str();
109116
case Unit::Millimetre:
110117
return abbreviations[3].c_str();
118+
case Unit::Point:
119+
return abbreviations[4].c_str();
111120
default:
112121
return L"??";
113122
}
@@ -174,6 +183,13 @@ Measurement::PrintResult Measurement::Print(wchar_t* buf,
174183
L" %s",
175184
Measurement::GetUnitAbbreviation(unit));
176185

186+
break;
187+
case Measurement::Unit::Point:
188+
result.strLen += swprintf_s(buf + result.strLen,
189+
bufSize - result.strLen,
190+
L" %s",
191+
Measurement::GetUnitAbbreviation(unit));
192+
177193
break;
178194
}
179195
if (paren)
@@ -188,6 +204,7 @@ Measurement::PrintResult Measurement::Print(wchar_t* buf,
188204
Measurement::Unit::Millimetre,
189205
Measurement::Unit::Inch,
190206
Measurement::Unit::Centimetre,
207+
Measurement::Unit::Point,
191208
};
192209
// We only use two units at most, it would be to long otherwise.
193210
for each (Measurement::Unit unit in allUnits)

src/modules/MeasureTool/MeasureToolCore/Measurement.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,13 @@ struct Measurement
1313
Inch = 2,
1414
Centimetre = 4,
1515
Millimetre = 8,
16+
Point = 16,
1617
};
1718

1819
D2D1_RECT_F rect = {}; // corners are inclusive
1920

2021
float px2mmRatio = 0;
21-
static winrt::hstring abbreviations[4]; // Abbreviations of units.
22+
static winrt::hstring abbreviations[5]; // Abbreviations of units.
2223

2324
Measurement(const Measurement&) = default;
2425
Measurement& operator=(const Measurement&) = default;

src/modules/MeasureTool/MeasureToolUI/Strings/en-us/Resources.resw

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,4 +78,7 @@
7878
<data name="MeasurementUnitAbbrMillimetre" xml:space="preserve">
7979
<value>mm</value>
8080
</data>
81+
<data name="MeasurementUnitAbbrPoint" xml:space="preserve">
82+
<value>pt</value>
83+
</data>
8184
</root>

src/settings-ui/Settings.UI/SettingsXAML/Views/MeasureToolPage.xaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@
8686
<ComboBoxItem x:Uid="MeasureTool_UnitsOfMeasure_Inches" />
8787
<ComboBoxItem x:Uid="MeasureTool_UnitsOfMeasure_Centimeters" />
8888
<ComboBoxItem x:Uid="MeasureTool_UnitsOfMeasure_Millimeters" />
89+
<ComboBoxItem x:Uid="MeasureTool_UnitsOfMeasure_Points" />
8990
</ComboBox>
9091
</tkcontrols:SettingsCard>
9192

src/settings-ui/Settings.UI/Strings/en-us/Resources.resw

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,9 @@
203203
<data name="MeasureTool_UnitsOfMeasure_Millimeters.Content" xml:space="preserve">
204204
<value>Millimeters</value>
205205
</data>
206+
<data name="MeasureTool_UnitsOfMeasure_Points.Content" xml:space="preserve">
207+
<value>Points</value>
208+
</data>
206209
<data name="MeasureTool_PixelTolerance.Header" xml:space="preserve">
207210
<value>Pixel tolerance for edge detection</value>
208211
</data>

0 commit comments

Comments
 (0)