void Layer::setGeometry( const sp<const DisplayDevice>& hw, HWComposer::HWCLayerInterface& layer) { LayerBaseClient::setGeometry(hw, layer); // enable this layer layer.setSkip(false); // we can't do alpha-fade with the hwc HAL const State& s(drawingState()); if (s.alpha < 0xFF) { layer.setSkip(true); } if (isSecure() && !hw->isSecure()) { layer.setSkip(true); } /* * Transformations are applied in this order: * 1) buffer orientation/flip/mirror * 2) state transformation (window manager) * 3) layer orientation (screen orientation) * (NOTE: the matrices are multiplied in reverse order) */ const Transform bufferOrientation(mCurrentTransform); const Transform tr(hw->getTransform() * s.transform * bufferOrientation); // this gives us only the "orientation" component of the transform const uint32_t finalTransform = tr.getOrientation(); // we can only handle simple transformation if (finalTransform & Transform::ROT_INVALID) { layer.setSkip(true); } else { layer.setTransform(finalTransform); } layer.setCrop(computeBufferCrop()); // [MTK] {{{ hwc_color_t color; color.a = s.alpha; layer.setFillColor(color); layer.setTransform(finalTransform); layer.setIdentity(getIdentity()); layer.setMatrix(tr); layer.setSecure((isSecure() || isProtected())); // [MTK] }}} }
void Layer::setGeometry(hwc_layer_t* hwcl) { LayerBaseClient::setGeometry(hwcl); hwcl->flags &= ~HWC_SKIP_LAYER; // we can't do alpha-fade with the hwc HAL const State& s(drawingState()); if (s.alpha < 0xFF) { hwcl->flags = HWC_SKIP_LAYER; } /* * Transformations are applied in this order: * 1) buffer orientation/flip/mirror * 2) state transformation (window manager) * 3) layer orientation (screen orientation) * mTransform is already the composition of (2) and (3) * (NOTE: the matrices are multiplied in reverse order) */ const Transform bufferOrientation(mCurrentTransform); #ifdef QCOM_HARDWARE hwcl->sourceTransform = bufferOrientation.getOrientation(); #endif const Transform tr(mTransform * bufferOrientation); // this gives us only the "orientation" component of the transform const uint32_t finalTransform = tr.getOrientation(); // we can only handle simple transformation if (finalTransform & Transform::ROT_INVALID) { hwcl->flags = HWC_SKIP_LAYER; } else { hwcl->transform = finalTransform; } Rect crop = computeBufferCrop(); hwcl->sourceCrop.left = crop.left; hwcl->sourceCrop.top = crop.top; hwcl->sourceCrop.right = crop.right; hwcl->sourceCrop.bottom = crop.bottom; }