Skip to content

Commit b6b9045

Browse files
committed
Do not draw rectangles with antialias in Gdiplus context.
1 parent e3046a8 commit b6b9045

1 file changed

Lines changed: 23 additions & 2 deletions

File tree

Sources/WindowsAppSupport/WAS_GdiplusOffscreenContext.cpp

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,26 @@ static Gdiplus::RectF CreateRectF (const NUIE::Rect& rect)
2525
return gdiRect;
2626
}
2727

28+
class DisableAntialiasGuard
29+
{
30+
public:
31+
DisableAntialiasGuard (Gdiplus::Graphics* graphics) :
32+
graphics (graphics),
33+
oldMode (graphics->GetSmoothingMode ())
34+
{
35+
graphics->SetSmoothingMode (Gdiplus::SmoothingMode::SmoothingModeNone);
36+
}
37+
38+
~DisableAntialiasGuard ()
39+
{
40+
graphics->SetSmoothingMode (oldMode);
41+
}
42+
43+
private:
44+
Gdiplus::Graphics* graphics;
45+
Gdiplus::SmoothingMode oldMode;
46+
};
47+
2848
GdiplusOffscreenContext::GdiplusOffscreenContext () :
2949
NUIE::NativeDrawingContext (),
3050
gdiplusInitializer (),
@@ -96,7 +116,7 @@ int GdiplusOffscreenContext::GetHeight () const
96116

97117
void GdiplusOffscreenContext::BeginDraw ()
98118
{
99-
119+
graphics->SetSmoothingMode (Gdiplus::SmoothingMode::SmoothingModeAntiAlias);
100120
}
101121

102122
void GdiplusOffscreenContext::EndDraw ()
@@ -125,6 +145,7 @@ void GdiplusOffscreenContext::DrawBezier (const NUIE::Point& p1, const NUIE::Poi
125145

126146
void GdiplusOffscreenContext::DrawRect (const NUIE::Rect& rect, const NUIE::Pen& pen)
127147
{
148+
DisableAntialiasGuard antialiasGuard (graphics.get ());
128149
const NUIE::Color& color = pen.GetColor ();
129150
Gdiplus::Pen gdiPen (Gdiplus::Color (color.GetR (), color.GetG (), color.GetB ()), (Gdiplus::REAL) pen.GetThickness ());
130151
Gdiplus::Rect gdiRect = CreateRect (rect);
@@ -133,6 +154,7 @@ void GdiplusOffscreenContext::DrawRect (const NUIE::Rect& rect, const NUIE::Pen&
133154

134155
void GdiplusOffscreenContext::FillRect (const NUIE::Rect& rect, const NUIE::Color& color)
135156
{
157+
DisableAntialiasGuard antialiasGuard (graphics.get ());
136158
Gdiplus::SolidBrush brush (Gdiplus::Color (color.GetR (), color.GetG (), color.GetB ()));
137159
Gdiplus::Rect gdiRect = CreateRect (rect);
138160
graphics->FillRectangle (&brush, gdiRect);
@@ -215,7 +237,6 @@ void GdiplusOffscreenContext::InitGraphics ()
215237
{
216238
bitmap.reset (new Gdiplus::Bitmap (width, height));
217239
graphics.reset (new Gdiplus::Graphics (bitmap.get ()));
218-
graphics->SetSmoothingMode (Gdiplus::SmoothingMode::SmoothingModeAntiAlias);
219240
}
220241

221242
}

0 commit comments

Comments
 (0)