diff options
author | Lei Zhang <thestig@chromium.org> | 2017-08-29 11:34:12 -0700 |
---|---|---|
committer | Chromium commit bot <commit-bot@chromium.org> | 2017-08-29 20:37:23 +0000 |
commit | 77f9bff2c229df771a43448a9d5087e042235936 (patch) | |
tree | 3bdc3d70491248a301c53275ccfe583b074d9184 /fpdfsdk/pwl | |
parent | c9d6d68e9b91a0373d8aac42cdde5dac1925ec42 (diff) | |
download | pdfium-77f9bff2c229df771a43448a9d5087e042235936.tar.xz |
Reduce rounding errors when Invalidating rects.
Instead of using CFX_FloatRect::ToFxRect(), which always rounds down,
use GetOuterRect() which correctly rounds up / down depending on the
side of the rectangle.
Change-Id: I7abd3a65e8c0467ed4303292f26a72737a5d553b
Reviewed-on: https://pdfium-review.googlesource.com/12312
Commit-Queue: dsinclair <dsinclair@chromium.org>
Reviewed-by: dsinclair <dsinclair@chromium.org>
Diffstat (limited to 'fpdfsdk/pwl')
-rw-r--r-- | fpdfsdk/pwl/cpwl_wnd.cpp | 15 | ||||
-rw-r--r-- | fpdfsdk/pwl/cpwl_wnd.h | 2 |
2 files changed, 6 insertions, 11 deletions
diff --git a/fpdfsdk/pwl/cpwl_wnd.cpp b/fpdfsdk/pwl/cpwl_wnd.cpp index 0198c63d6a..53c692dada 100644 --- a/fpdfsdk/pwl/cpwl_wnd.cpp +++ b/fpdfsdk/pwl/cpwl_wnd.cpp @@ -18,7 +18,6 @@ namespace { constexpr float kDefaultFontSize = 9.0f; -constexpr int kInvalidationInflate = 2; } // namespace @@ -302,11 +301,9 @@ void CPWL_Wnd::InvalidateRect(CFX_FloatRect* pRect) { } } - FX_RECT rcWin = PWLtoWnd(rcRefresh); - rcWin.left -= kInvalidationInflate; - rcWin.top -= kInvalidationInflate; - rcWin.right += kInvalidationInflate; - rcWin.bottom += kInvalidationInflate; + CFX_FloatRect rcWin = PWLtoWnd(rcRefresh); + rcWin.Inflate(1, 1); + rcWin.Normalize(); if (CFX_SystemHandler* pSH = GetSystemHandler()) { if (CPDFSDK_Widget* widget = static_cast<CPDFSDK_Widget*>( @@ -737,11 +734,9 @@ CFX_Matrix CPWL_Wnd::GetWindowMatrix() const { return mt; } -FX_RECT CPWL_Wnd::PWLtoWnd(const CFX_FloatRect& rect) const { +CFX_FloatRect CPWL_Wnd::PWLtoWnd(const CFX_FloatRect& rect) const { CFX_Matrix mt = GetWindowMatrix(); - CFX_FloatRect rcTemp = mt.TransformRect(rect); - return FX_RECT((int32_t)(rcTemp.left + 0.5), (int32_t)(rcTemp.bottom + 0.5), - (int32_t)(rcTemp.right + 0.5), (int32_t)(rcTemp.top + 0.5)); + return mt.TransformRect(rect); } CFX_PointF CPWL_Wnd::ParentToChild(const CFX_PointF& point) const { diff --git a/fpdfsdk/pwl/cpwl_wnd.h b/fpdfsdk/pwl/cpwl_wnd.h index 3c6c2824e2..9c913f1c23 100644 --- a/fpdfsdk/pwl/cpwl_wnd.h +++ b/fpdfsdk/pwl/cpwl_wnd.h @@ -318,7 +318,7 @@ class CPWL_Wnd : public CPWL_TimerHandler, public CFX_Observable<CPWL_Wnd> { void DrawChildAppearance(CFX_RenderDevice* pDevice, const CFX_Matrix& mtUser2Device); - FX_RECT PWLtoWnd(const CFX_FloatRect& rect) const; + CFX_FloatRect PWLtoWnd(const CFX_FloatRect& rect) const; void AddChild(CPWL_Wnd* pWnd); void RemoveChild(CPWL_Wnd* pWnd); |