From: Cary Clark Date: Mon, 13 Sep 2010 20:04:18 +0000 (-0400) Subject: clip img elements the same as text X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=205a7cfa91854de791995f40278e8c19491f6d99;p=android-x86%2Fexternal-webkit.git clip img elements the same as text The nav cache builds the cursor ring by collecting the bounds of the text and images contained by the clickable node. The clip described by the parent node is available when the bounds are collected. The current code clips the text. Generalize this to clip the images also. Also, print whether the node is transparent in the node dumper. Change-Id: I44d6cbacb95211f191cf11b6abd5273e0712930f http://b/2463829 --- diff --git a/WebKit/android/nav/CacheBuilder.cpp b/WebKit/android/nav/CacheBuilder.cpp index 3453d20ef..8adc648ba 100644 --- a/WebKit/android/nav/CacheBuilder.cpp +++ b/WebKit/android/nav/CacheBuilder.cpp @@ -473,9 +473,11 @@ void CacheBuilder::Debug::groups() { RenderStyle* style = renderer->style(); snprintf(scratch, sizeof(scratch), "// renderStyle:" " visibility=%s hasBackGround=%d" - " tapHighlightColor().alpha()=0x%02x", + " tapHighlightColor().alpha()=0x%02x" + " isTransparent()=%s", style->visibility() == HIDDEN ? "HIDDEN" : "VISIBLE", - renderer->hasBackground(), style->tapHighlightColor().alpha()); + renderer->hasBackground(), style->tapHighlightColor().alpha(), + renderer->isTransparent() ? "true" : "false"); newLine(); print(scratch); RenderBlock* renderBlock = static_cast(renderer); @@ -3023,18 +3025,18 @@ bool CacheBuilder::ConstructPartRects(Node* node, const IntRect& bounds, EVisibility vis = renderer->style()->visibility(); if (vis == HIDDEN) continue; + bool hasClip = renderer->hasOverflowClip(); + size_t clipIndex = clipTracker.size(); + IntRect clipBounds = IntRect(0, 0, INT_MAX, INT_MAX); + if (hasClip || --clipIndex > 0) { + clipBounds = hasClip ? renderer->absoluteBoundingBoxRect() : + clipTracker.at(clipIndex).mBounds; // x, y fixup done by ConstructTextRect + } if (test->isTextNode()) { RenderText* renderText = (RenderText*) renderer; InlineTextBox *textBox = renderText->firstTextBox(); if (textBox == NULL) continue; - bool hasClip = renderer->hasOverflowClip(); - size_t clipIndex = clipTracker.size(); - IntRect clipBounds = IntRect(0, 0, INT_MAX, INT_MAX); - if (hasClip || --clipIndex > 0) { - clipBounds = hasClip ? renderer->absoluteBoundingBoxRect() : - clipTracker.at(clipIndex).mBounds; // x, y fixup done by ConstructTextRect - } if (ConstructTextRect((Text*) test, textBox, 0, INT_MAX, x, y, focusBounds, clipBounds, result) == false) { return false; @@ -3043,6 +3045,7 @@ bool CacheBuilder::ConstructPartRects(Node* node, const IntRect& bounds, } if (test->hasTagName(HTMLNames::imgTag)) { IntRect bounds = test->getRect(); + bounds.intersect(clipBounds); if (AddPartRect(bounds, x, y, result, focusBounds) == false) return false; continue;