diff options
| -rw-r--r-- | tests/test_em_converter.cpp | 20 | ||||
| -rw-r--r-- | unity-shared/EMConverter.cpp | 27 | ||||
| -rw-r--r-- | unity-shared/EMConverter.h | 10 |
3 files changed, 41 insertions, 16 deletions
diff --git a/tests/test_em_converter.cpp b/tests/test_em_converter.cpp index 2cb0392c4..798a344a7 100644 --- a/tests/test_em_converter.cpp +++ b/tests/test_em_converter.cpp @@ -62,25 +62,21 @@ TEST_F(TestEMConverter, TestSetDPI) EXPECT_EQ(dpi, em_converter.GetDPI()); } -TEST_F(TestEMConverter, TestEMToPixel) +TEST_F(TestEMConverter, TestConvertPixel) { - double pixel_size_em = em_converter.PixelsToEM(PIXEL_SIZE); - EXPECT_EQ(PIXEL_SIZE, em_converter.EMToPixels(pixel_size_em)); + EXPECT_EQ(PIXEL_SIZE, em_converter.ConvertPixels(PIXEL_SIZE)); } -TEST_F(TestEMConverter, TestPixelToEM) +TEST_F(TestEMConverter, TestDPIScale) { - double pixel_size_em = em_converter.PixelsToEM(PIXEL_SIZE); - EXPECT_NEAR(pixel_size_em, 1.38, 0.01); + EXPECT_FLOAT_EQ(em_converter.DPIScale(), 1.0); } -TEST_F(TestEMConverter, TestSetDPIEMToPixels) +TEST_F(TestEMConverter, TestDPIScale2) { - double pixel_size_em = em_converter.PixelsToEM(PIXEL_SIZE); - em_converter.SetDPI(120.0); - - EXPECT_EQ(em_converter.EMToPixels(pixel_size_em), 30); + float scale = 2.0f; + em_converter.SetDPI(DPI * scale); + EXPECT_FLOAT_EQ(em_converter.DPIScale(), 2.0); } - } // namespace unity diff --git a/unity-shared/EMConverter.cpp b/unity-shared/EMConverter.cpp index 799c99485..fa67834e8 100644 --- a/unity-shared/EMConverter.cpp +++ b/unity-shared/EMConverter.cpp @@ -22,15 +22,18 @@ namespace unity { +double const BASE_DPI = 96.0; double const DEFAULT_PPE = 10.0; double const PIXELS_PER_INCH = 72.0; EMConverter::EMConverter(int font_size, double dpi) : pixels_per_em_(DEFAULT_PPE) + , base_pixels_per_em_(DEFAULT_PPE) , dpi_(dpi) , font_size_(font_size) { UpdatePixelsPerEM(); + UpdateBasePixelsPerEM(); } void EMConverter::UpdatePixelsPerEM() @@ -41,12 +44,21 @@ void EMConverter::UpdatePixelsPerEM() pixels_per_em_ = DEFAULT_PPE; } +void EMConverter::UpdateBasePixelsPerEM() +{ + base_pixels_per_em_ = font_size_ * BASE_DPI / PIXELS_PER_INCH; + + if (base_pixels_per_em_ == 0) + base_pixels_per_em_ = DEFAULT_PPE; +} + void EMConverter::SetFontSize(int font_size) { if (font_size != font_size_) { font_size_ = font_size; UpdatePixelsPerEM(); + UpdateBasePixelsPerEM(); } } @@ -74,9 +86,20 @@ int EMConverter::EMToPixels(double em) const return (em * pixels_per_em_); } -double EMConverter::PixelsToEM(int pixels) const +double EMConverter::PixelsToBaseEM(int pixels) const +{ + return (pixels / base_pixels_per_em_); +} + +int EMConverter::ConvertPixels(int pixels) const +{ + double pixels_em = PixelsToBaseEM(pixels); + return EMToPixels(pixels_em); +} + +double EMConverter::DPIScale() const { - return (pixels / pixels_per_em_); + return dpi_ / BASE_DPI; } } // namespace unity diff --git a/unity-shared/EMConverter.h b/unity-shared/EMConverter.h index 381a50b70..739ce713a 100644 --- a/unity-shared/EMConverter.h +++ b/unity-shared/EMConverter.h @@ -34,13 +34,19 @@ public: int GetFontSize() const; double GetDPI() const; - int EMToPixels(double em) const; - double PixelsToEM(int pixels) const; + int ConvertPixels(int pixels) const; + double DPIScale() const; private: void UpdatePixelsPerEM(); + void UpdateBasePixelsPerEM(); + + int EMToPixels(double em) const; + double PixelsToBaseEM(int pixels) const; double pixels_per_em_; + double base_pixels_per_em_; + double dpi_; int font_size_; }; |
