diff options
| author | 2018-11-30 20:46:53 +0800 | |
|---|---|---|
| committer | 2018-11-30 12:49:00 +0000 | |
| commit | 39d4aa5bb18a14680347f6f6d1a34eed918e274b (patch) | |
| tree | 40d06173e8d45207ad57cf3fae1c4d72bd8f4c8e /libs/ui/Region.cpp | |
| parent | 75cc36e4924601444c75b24a59fac117ead00ee2 (diff) | |
Fix empty region if the scale is smaller than 1
It may be used by Layer of SurfaceFlinger to calculate
touchable region. It should be able to scale a window
to a smaller size.
Bug: 111440400
Test: manual - An input-associated surface with a scaling
      matrix that has dsdx, dsdy < 1. Use "dumpsys input"
      to observe its touchable region.
Change-Id: I495bd16acec77f913fd39dcac90404eddc71cabb
Diffstat (limited to 'libs/ui/Region.cpp')
| -rw-r--r-- | libs/ui/Region.cpp | 10 | 
1 files changed, 5 insertions, 5 deletions
diff --git a/libs/ui/Region.cpp b/libs/ui/Region.cpp index 815093174c..618c7d62b1 100644 --- a/libs/ui/Region.cpp +++ b/libs/ui/Region.cpp @@ -325,14 +325,14 @@ Region& Region::translateSelf(int x, int y) {      return *this;  } -Region& Region::scaleSelf(int sx, int sy) { +Region& Region::scaleSelf(float sx, float sy) {      size_t count = mStorage.size();      Rect* rects = mStorage.editArray();      while (count) { -        rects->left *= sx; -        rects->right *= sx; -        rects->top *= sy; -        rects->bottom *= sy; +        rects->left = static_cast<int32_t>(rects->left * sx + 0.5f); +        rects->right = static_cast<int32_t>(rects->right * sx + 0.5f); +        rects->top = static_cast<int32_t>(rects->top * sy + 0.5f); +        rects->bottom = static_cast<int32_t>(rects->bottom * sy + 0.5f);          rects++;          count--;      }  |