summaryrefslogtreecommitdiff
diff options
-rw-r--r--tests/test_em_converter.cpp20
-rw-r--r--unity-shared/EMConverter.cpp27
-rw-r--r--unity-shared/EMConverter.h10
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_;
};