blob: ad08a92885e365c4e249784b99c433190f559d29 [file] [log] [blame]
Robert Carrcdf83202018-03-07 12:48:34 -08001/*
2 * Copyright (C) 2018 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17// #define LOG_NDEBUG 0
18#undef LOG_TAG
Robert Carr578038f2018-03-09 12:25:24 -080019#define LOG_TAG "ContainerLayer"
Robert Carrcdf83202018-03-07 12:48:34 -080020
Robert Carr578038f2018-03-09 12:25:24 -080021#include "ContainerLayer.h"
Robert Carrcdf83202018-03-07 12:48:34 -080022
23namespace android {
24
Lloyd Pique42ab75e2018-09-12 20:46:03 -070025ContainerLayer::ContainerLayer(const LayerCreationArgs& args) : Layer(args) {}
26
27ContainerLayer::~ContainerLayer() = default;
Robert Carrcdf83202018-03-07 12:48:34 -080028
Peiyong Lin8f28a1d2019-02-07 17:25:12 -080029bool ContainerLayer::prepareClientLayer(const RenderArea&, const Region&, bool, Region&, const bool,
Alec Mourie7d1d4a2019-02-05 01:13:46 +000030 renderengine::LayerSettings&) {
31 return false;
32}
Robert Carrcdf83202018-03-07 12:48:34 -080033
Robert Carr578038f2018-03-09 12:25:24 -080034bool ContainerLayer::isVisible() const {
chaviw3e727cd2019-01-31 13:41:05 -080035 return false;
36}
37
38bool ContainerLayer::canReceiveInput() const {
Robert Carrcdf83202018-03-07 12:48:34 -080039 return !isHiddenByPolicy();
40}
41
Lloyd Pique37c2c9b2018-12-04 17:25:10 -080042void ContainerLayer::setPerFrameData(const sp<const DisplayDevice>&, const ui::Transform&,
Peiyong Linc502cb72019-03-01 15:00:23 -080043 const Rect&, int32_t, const ui::Dataspace) {}
Robert Carrcdf83202018-03-07 12:48:34 -080044
Peiyong Lin05eb5c42019-03-21 18:33:43 -070045Layer::RoundedCornerState ContainerLayer::getRoundedCornerStateInternal(
46 const FloatRect bounds) const {
47 const auto& p = mDrawingParent.promote();
48 if (p != nullptr) {
49 RoundedCornerState parentState = p->getRoundedCornerStateInternal(bounds);
50 if (parentState.radius > 0) {
51 ui::Transform t = getActiveTransform(getDrawingState());
52 t = t.inverse();
53 parentState.cropRect = t.transform(parentState.cropRect);
54 // The rounded corners shader only accepts 1 corner radius for performance reasons,
55 // but a transform matrix can define horizontal and vertical scales.
56 // Let's take the average between both of them and pass into the shader, practically we
57 // never do this type of transformation on windows anyway.
58 parentState.radius *= (t[0][0] + t[1][1]) / 2.0f;
59 return parentState;
60 }
61 }
62 const float radius = getDrawingState().cornerRadius;
63 if (radius > 0) {
64 const Rect crop = getCrop(getDrawingState());
65 if (!crop.isEmpty()) {
66 return RoundedCornerState(bounds.intersect(crop.toFloatRect()), radius);
67 }
68 return RoundedCornerState(bounds, radius);
69 }
70 return RoundedCornerState();
71}
72
Robert Carrcdf83202018-03-07 12:48:34 -080073} // namespace android