IntRect LayerAndroid::visibleContentArea(bool force3dContentVisible) const { IntRect area = fullContentArea(); if (subclassType() == LayerAndroid::FixedBackgroundImageLayer) return area; // If transform isn't limited to 2D space, return the entire content area. // Transforming from layers to content coordinates and back doesn't // preserve 3D. if (force3dContentVisible && GLUtils::has3dTransform(m_drawTransform)) return area; // First, we get the transformed area of the layer, // in content coordinates IntRect rect = m_drawTransform.mapRect(area); // Then we apply the clipping IntRect clip(m_clippingRect); rect.intersect(clip); // Now clip with the viewport in content coordinate IntRect contentViewport(TilesManager::instance()->shader()->contentViewport()); rect.intersect(contentViewport); // Finally, let's return the visible area, in layers coordinate return m_drawTransform.inverse().mapRect(rect); }
IntRect Surface::visibleContentArea(bool force3dContentVisible) const { if (singleLayer()) return getFirstLayer()->visibleContentArea(force3dContentVisible); IntRect rect = m_fullContentArea; // clip with the viewport in content coordinate IntRect contentViewport(TilesManager::instance()->shader()->contentViewport()); rect.intersect(contentViewport); // TODO: handle recursive layer clip return rect; }
void LayerAndroid::showLayer(int indent) { char spaces[256]; memset(spaces, 0, 256); for (int i = 0; i < indent; i++) spaces[i] = ' '; if (!indent) { ALOGD("\n\n--- LAYERS TREE ---"); IntRect contentViewport(TilesManager::instance()->shader()->contentViewport()); ALOGD("contentViewport(%d, %d, %d, %d)", contentViewport.x(), contentViewport.y(), contentViewport.width(), contentViewport.height()); } IntRect r(0, 0, getWidth(), getHeight()); IntRect tr = m_drawTransform.mapRect(r); IntRect visible = visibleContentArea(); IntRect clip(m_clippingRect.x(), m_clippingRect.y(), m_clippingRect.width(), m_clippingRect.height()); ALOGD("%s s:%x %s %s (%d) [%d:%x - 0x%x] - %s %s - area (%d, %d, %d, %d) - visible (%d, %d, %d, %d) " "clip (%d, %d, %d, %d) %s %s m_content(%x), pic w: %d h: %d originalLayer: %x %d", spaces, m_surface, m_haveClip ? "CLIP LAYER" : "", subclassName().ascii().data(), subclassType(), uniqueId(), this, m_owningLayer, needsTexture() ? "needsTexture" : "", m_imageCRC ? "hasImage" : "", tr.x(), tr.y(), tr.width(), tr.height(), visible.x(), visible.y(), visible.width(), visible.height(), clip.x(), clip.y(), clip.width(), clip.height(), contentIsScrollable() ? "SCROLLABLE" : "", isPositionFixed() ? "FIXED" : "", m_content, m_content ? m_content->width() : -1, m_content ? m_content->height() : -1, m_originalLayer, m_originalLayer ? m_originalLayer->uniqueId() : -1); int count = this->countChildren(); for (int i = 0; i < count; i++) this->getChild(i)->showLayer(indent + 2); }