int RenderCanvas::docWidth() const { if (m_cachedDocWidth != -1) return m_cachedDocWidth; int w; if (m_pagedMode || !m_view) w = m_width; else w = 0; RenderObject *fc = firstChild(); if(fc) { // ow: like effectiveWidth() but without the negative const int ow = fc->hasOverflowClip() ? fc->width() : fc->overflowWidth(); int dw = ow + fc->marginLeft() + fc->marginRight(); int rightmostPos = fc->rightmostPosition(false); // kdDebug(6040) << "w " << w << " rightmostPos " << rightmostPos << " dw " << dw << " fc->rw " << fc->effectiveWidth() << " fc->width() " << fc->width() << endl; if( rightmostPos > dw ) dw = rightmostPos; rightmostPos = rightmostAbsolutePosition(); if ( rightmostPos > dw ) dw = rightmostPos; if( dw > w ) w = dw; } RenderLayer *layer = m_layer; w = kMax( w, layer->xPos() + layer->width() ); // kdDebug(6040) << "w " << w << " layer(" << layer->renderer()->renderName() << ")->width " << layer->width() << " rm " << (layer->xPos() + layer->width()) << " width() " << layer->renderer()->width() << " rw " << layer->renderer()->effectiveWidth() << endl; return w; }
LayoutState::LayoutState(RenderObject* root) : m_clipped(false) , m_isPaginated(false) , m_pageLogicalHeightChanged(false) #if !ASSERT_DISABLED , m_layoutDeltaXSaturated(false) , m_layoutDeltaYSaturated(false) #endif , m_columnInfo(0) , m_lineGrid(0) , m_next(0) , m_shapeInsideInfo(0) , m_pageLogicalHeight(0) #ifndef NDEBUG , m_renderer(root) #endif { RenderObject* container = root->container(); FloatPoint absContentPoint = container->localToAbsolute(FloatPoint(), UseTransforms); m_paintOffset = LayoutSize(absContentPoint.x(), absContentPoint.y()); if (container->hasOverflowClip()) { m_clipped = true; RenderBox* containerBox = toRenderBox(container); m_clipRect = LayoutRect(toPoint(m_paintOffset), containerBox->cachedSizeForOverflowClip()); m_paintOffset -= containerBox->scrolledContentOffset(); } }
LayoutState::LayoutState(RenderObject* root) : m_clipped(false) , m_isPaginated(false) , m_pageLogicalHeight(0) , m_pageLogicalHeightChanged(false) , m_columnInfo(0) , m_lineGrid(0) , m_next(0) #ifndef NDEBUG , m_renderer(root) #endif #if ENABLE(CSS_EXCLUSIONS) , m_exclusionShapeInsideInfo(0) #endif { RenderObject* container = root->container(); FloatPoint absContentPoint = container->localToAbsolute(FloatPoint(), false, true); m_paintOffset = LayoutSize(absContentPoint.x(), absContentPoint.y()); if (container->hasOverflowClip()) { m_clipped = true; RenderBox* containerBox = toRenderBox(container); m_clipRect = LayoutRect(toPoint(m_paintOffset), containerBox->cachedSizeForOverflowClip()); m_paintOffset -= containerBox->scrolledContentOffset(); } }
LayoutState::LayoutState(RenderObject* root) : m_clipped(false) , m_pageLogicalHeight(0) , m_pageLogicalHeightChanged(false) , m_columnInfo(0) , m_next(0) #ifndef NDEBUG , m_renderer(root) #endif { RenderObject* container = root->container(); // [SonyEricsson]: Check if container is null and in that case create an empty size // to avoid a crash dereferencing a null pointer. if (container) { FloatPoint absContentPoint = container->localToAbsolute(FloatPoint(), false, true); m_paintOffset = IntSize(absContentPoint.x(), absContentPoint.y()); } else { m_paintOffset = IntSize(); } if (container->hasOverflowClip()) { RenderLayer* layer = toRenderBoxModelObject(container)->layer(); m_clipped = true; m_clipRect = IntRect(toPoint(m_paintOffset), layer->size()); m_paintOffset -= layer->scrolledContentOffset(); } }
static void applyClipRects(const ClipRectsContext& context, RenderObject& renderer, LayoutPoint offset, ClipRects& clipRects) { ASSERT(renderer.hasOverflowClip() || renderer.hasClip()); if (renderer.hasOverflowClip()) { ClipRect newOverflowClip = toRenderBox(renderer).overflowClipRect(offset); newOverflowClip.setHasRadius(renderer.style()->hasBorderRadius()); clipRects.setOverflowClipRect(intersection(newOverflowClip, clipRects.overflowClipRect())); if (renderer.isPositioned()) clipRects.setPosClipRect(intersection(newOverflowClip, clipRects.posClipRect())); } if (renderer.hasClip()) { LayoutRect newClip = toRenderBox(renderer).clipRect(offset); clipRects.setPosClipRect(intersection(newClip, clipRects.posClipRect())); clipRects.setOverflowClipRect(intersection(newClip, clipRects.overflowClipRect())); } }
static void applyClipRects(const ClipRectsContext& context, RenderObject& renderer, LayoutPoint offset, ClipRects& clipRects) { ASSERT(renderer.hasOverflowClip() || renderer.hasClip()); RenderView* view = renderer.view(); ASSERT(view); if (clipRects.fixed() && context.rootLayer->renderer() == view) offset -= view->frameView()->scrollOffsetForFixedPosition(); if (renderer.hasOverflowClip()) { ClipRect newOverflowClip = toRenderBox(renderer).overflowClipRect(offset, context.scrollbarRelevancy); newOverflowClip.setHasRadius(renderer.style()->hasBorderRadius()); clipRects.setOverflowClipRect(intersection(newOverflowClip, clipRects.overflowClipRect())); if (renderer.isPositioned()) clipRects.setPosClipRect(intersection(newOverflowClip, clipRects.posClipRect())); } if (renderer.hasClip()) { LayoutRect newClip = toRenderBox(renderer).clipRect(offset); clipRects.setPosClipRect(intersection(newClip, clipRects.posClipRect())); clipRects.setOverflowClipRect(intersection(newClip, clipRects.overflowClipRect())); clipRects.setFixedClipRect(intersection(newClip, clipRects.fixedClipRect())); } }
LayoutState::LayoutState(RenderObject* root) : m_clipped(false) , m_next(0) #ifndef NDEBUG , m_renderer(root) #endif { RenderObject* container = root->container(); FloatPoint absContentPoint = container->localToAbsolute(FloatPoint(), false, true); m_offset = IntSize(absContentPoint.x(), absContentPoint.y()); if (container->hasOverflowClip()) { RenderLayer* layer = toRenderBoxModelObject(container)->layer(); m_clipped = true; m_clipRect = IntRect(toPoint(m_offset), layer->size()); m_offset -= layer->scrolledContentOffset(); } }
static QRect enclosingPositionedRect (RenderObject *n) { RenderObject *enclosingParent = n->containingBlock(); QRect rect(0,0,0,0); if (enclosingParent) { int ox, oy; enclosingParent->absolutePosition(ox, oy); int off = 0; if (!enclosingParent->hasOverflowClip()) { ox += enclosingParent->overflowLeft(); oy += enclosingParent->overflowTop(); } rect.setX(ox); rect.setY(oy); rect.setWidth(enclosingParent->effectiveWidth()); rect.setHeight(enclosingParent->effectiveHeight()); } return rect; }
static bool isDeletableElement(const Node* node) { if (!node || !node->isHTMLElement() || !node->inDocument() || !node->isContentEditable()) return false; // In general we want to only draw the UI arround object of a certain area, but we still keep the min width/height to // make sure we don't end up with very thin or very short elements getting the UI. const int minimumArea = 2500; const int minimumWidth = 48; const int minimumHeight = 16; const unsigned minimumVisibleBorders = 1; RenderObject* renderer = node->renderer(); if (!renderer || !renderer->isBox()) return false; // Disallow the body element since it isn't practical to delete, and the deletion UI would be clipped. if (node->hasTagName(bodyTag)) return false; // Disallow elements with any overflow clip, since the deletion UI would be clipped as well. <rdar://problem/6840161> if (renderer->hasOverflowClip()) return false; // Disallow Mail blockquotes since the deletion UI would get in the way of editing for these. if (isMailBlockquote(node)) return false; RenderBox* box = toRenderBox(renderer); IntRect borderBoundingBox = box->borderBoundingBox(); if (borderBoundingBox.width() < minimumWidth || borderBoundingBox.height() < minimumHeight) return false; if ((borderBoundingBox.width() * borderBoundingBox.height()) < minimumArea) return false; if (renderer->isTable()) return true; if (node->hasTagName(ulTag) || node->hasTagName(olTag) || node->hasTagName(iframeTag)) return true; if (renderer->isPositioned()) return true; if (renderer->isRenderBlock() && !renderer->isTableCell()) { RenderStyle* style = renderer->style(); if (!style) return false; // Allow blocks that have background images if (style->hasBackgroundImage() && style->backgroundImage()->canRender(1.0f)) return true; // Allow blocks with a minimum number of non-transparent borders unsigned visibleBorders = style->borderTop().isVisible() + style->borderBottom().isVisible() + style->borderLeft().isVisible() + style->borderRight().isVisible(); if (visibleBorders >= minimumVisibleBorders) return true; // Allow blocks that have a different background from it's parent Node* parentNode = node->parentNode(); if (!parentNode) return false; RenderObject* parentRenderer = parentNode->renderer(); if (!parentRenderer) return false; RenderStyle* parentStyle = parentRenderer->style(); if (!parentStyle) return false; if (style->hasBackground() && (!parentStyle->hasBackground() || style->backgroundColor() != parentStyle->backgroundColor())) return true; } return false; }