diff options
author | Marissa Wall <marissaw@google.com> | 2017-03-02 22:10:07 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2017-03-02 22:10:07 +0000 |
commit | edb5d3c50ce845c0a108651b6fbd6b1cc7570fc1 (patch) | |
tree | 6f0195470c930a986bbb0b078cdf244cda8b22bf | |
parent | 9f52aeef0a29c2df7e5358d9e37724e69292d794 (diff) | |
parent | df4e35671b2475b8aa90e1047e48012f76802421 (diff) | |
download | flounder-edb5d3c50ce845c0a108651b6fbd6b1cc7570fc1.tar.gz |
hwc2: set layer visible region
am: df4e35671b
Change-Id: I255f897aabe5dae3bca11fe10c873407af0965bc
-rw-r--r-- | hwc2/hwc2.cpp | 8 | ||||
-rw-r--r-- | hwc2/hwc2.h | 10 | ||||
-rw-r--r-- | hwc2/hwc2_buffer.cpp | 12 | ||||
-rw-r--r-- | hwc2/hwc2_dev.cpp | 7 | ||||
-rw-r--r-- | hwc2/hwc2_display.cpp | 12 | ||||
-rw-r--r-- | hwc2/hwc2_layer.cpp | 5 |
6 files changed, 49 insertions, 5 deletions
diff --git a/hwc2/hwc2.cpp b/hwc2/hwc2.cpp index 9da3561..f6ed40d 100644 --- a/hwc2/hwc2.cpp +++ b/hwc2/hwc2.cpp @@ -322,11 +322,11 @@ hwc2_error_t set_layer_transform(hwc2_device_t *device, hwc2_display_t display, return dev->set_layer_transform(display, layer, transform); } -hwc2_error_t set_layer_visible_region(hwc2_device_t* /*device*/, - hwc2_display_t /*display*/, hwc2_layer_t /*layer*/, - hwc_region_t /*visible*/) +hwc2_error_t set_layer_visible_region(hwc2_device_t *device, + hwc2_display_t display, hwc2_layer_t layer, hwc_region_t visible) { - return HWC2_ERROR_NONE; + hwc2_dev *dev = reinterpret_cast<hwc2_context *>(device)->hwc2_dev; + return dev->set_layer_visible_region(display, layer, visible); } hwc2_error_t set_layer_z_order(hwc2_device_t *device, hwc2_display_t display, diff --git a/hwc2/hwc2.h b/hwc2/hwc2.h index fc4ed06..423f589 100644 --- a/hwc2/hwc2.h +++ b/hwc2/hwc2.h @@ -63,6 +63,7 @@ public: hwc2_error_t set_blend_mode(hwc2_blend_mode_t blend_mode); hwc2_error_t set_plane_alpha(float plane_alpha); hwc2_error_t set_transform(hwc_transform_t transform); + hwc2_error_t set_visible_region(const hwc_region_t &visible_region); private: /* A handle to the buffer */ @@ -100,6 +101,10 @@ private: /* The rotation or flip of the buffer */ hwc_transform_t transform; + + /* The portion of the layer that is visible including portions under + * translucent areas of other buffers */ + std::vector<hwc_rect_t> visible_region; }; class hwc2_config { @@ -170,6 +175,7 @@ public: hwc2_error_t set_blend_mode(hwc2_blend_mode_t blend_mode); hwc2_error_t set_plane_alpha(float plane_alpha); hwc2_error_t set_transform(hwc_transform_t transform); + hwc2_error_t set_visible_region(const hwc_region_t &visible_region); static hwc2_layer_t get_next_id(); @@ -242,6 +248,8 @@ public: hwc2_error_t set_layer_plane_alpha(hwc2_layer_t lyr_id, float plane_alpha); hwc2_error_t set_layer_transform(hwc2_layer_t lyr_id, hwc_transform_t transform); + hwc2_error_t set_layer_visible_region(hwc2_layer_t lyr_id, + const hwc_region_t &visible_region); hwc2_error_t set_layer_color(hwc2_layer_t lyr_id, const hwc_color_t &color); hwc2_error_t set_cursor_position(hwc2_layer_t lyr_id, int32_t x, int32_t y); @@ -338,6 +346,8 @@ public: hwc2_layer_t lyr_id, float plane_alpha); hwc2_error_t set_layer_transform(hwc2_display_t dpy_id, hwc2_layer_t lyr_id, hwc_transform_t transform); + hwc2_error_t set_layer_visible_region(hwc2_display_t dpy_id, + hwc2_layer_t lyr_id, const hwc_region_t &visible_region); hwc2_error_t set_layer_color(hwc2_display_t dpy_id, hwc2_layer_t lyr_id, const hwc_color_t &color); hwc2_error_t set_cursor_position(hwc2_display_t dpy_id, hwc2_layer_t lyr_id, diff --git a/hwc2/hwc2_buffer.cpp b/hwc2/hwc2_buffer.cpp index 7bd2361..2344eb4 100644 --- a/hwc2/hwc2_buffer.cpp +++ b/hwc2/hwc2_buffer.cpp @@ -28,7 +28,8 @@ hwc2_buffer::hwc2_buffer() surface_damage(), blend_mode(HWC2_BLEND_MODE_NONE), plane_alpha(1.0), - transform() { } + transform(), + visible_region() { } hwc2_buffer::~hwc2_buffer() { @@ -124,3 +125,12 @@ hwc2_error_t hwc2_buffer::set_transform(const hwc_transform_t transform) return HWC2_ERROR_NONE; } + +hwc2_error_t hwc2_buffer::set_visible_region(const hwc_region_t &visible_region) +{ + this->visible_region.clear(); + for (size_t idx = 0; idx < visible_region.numRects; idx++) + this->visible_region.push_back(visible_region.rects[idx]); + + return HWC2_ERROR_NONE; +} diff --git a/hwc2/hwc2_dev.cpp b/hwc2/hwc2_dev.cpp index 294272b..cbe9bc2 100644 --- a/hwc2/hwc2_dev.cpp +++ b/hwc2/hwc2_dev.cpp @@ -247,6 +247,13 @@ hwc2_error_t hwc2_dev::set_layer_transform(hwc2_display_t dpy_id, return displays.find(dpy_id)->second.set_layer_transform(lyr_id, transform); } +hwc2_error_t hwc2_dev::set_layer_visible_region(hwc2_display_t dpy_id, + hwc2_layer_t lyr_id, const hwc_region_t &visible_region) +{ + return displays.find(dpy_id)->second.set_layer_visible_region(lyr_id, + visible_region); +} + hwc2_error_t hwc2_dev::set_layer_color(hwc2_display_t dpy_id, hwc2_layer_t lyr_id, const hwc_color_t &color) { diff --git a/hwc2/hwc2_display.cpp b/hwc2/hwc2_display.cpp index c84d36b..983bba7 100644 --- a/hwc2/hwc2_display.cpp +++ b/hwc2/hwc2_display.cpp @@ -382,6 +382,18 @@ hwc2_error_t hwc2_display::set_layer_transform(hwc2_layer_t lyr_id, return it->second.set_transform(transform); } +hwc2_error_t hwc2_display::set_layer_visible_region(hwc2_layer_t lyr_id, + const hwc_region_t &visible_region) +{ + auto it = layers.find(lyr_id); + if (it == layers.end()) { + ALOGE("dpy %" PRIu64 ": lyr %" PRIu64 ": bad layer handle", id, lyr_id); + return HWC2_ERROR_BAD_LAYER; + } + + return it->second.set_visible_region(visible_region); +} + hwc2_error_t hwc2_display::set_layer_color(hwc2_layer_t lyr_id, const hwc_color_t& /*color*/) { diff --git a/hwc2/hwc2_layer.cpp b/hwc2/hwc2_layer.cpp index 65e9b84..125f28f 100644 --- a/hwc2/hwc2_layer.cpp +++ b/hwc2/hwc2_layer.cpp @@ -107,6 +107,11 @@ hwc2_error_t hwc2_layer::set_transform(const hwc_transform_t transform) return buffer.set_transform(transform); } +hwc2_error_t hwc2_layer::set_visible_region(const hwc_region_t &visible_region) +{ + return buffer.set_visible_region(visible_region); +} + hwc2_layer_t hwc2_layer::get_next_id() { return layer_cnt++; |