Index: Source/core/rendering/RenderObject.h |
diff --git a/Source/core/rendering/RenderObject.h b/Source/core/rendering/RenderObject.h |
index 663713313b1f60cc7004468919e7d955be23800a..b2e3263622ed77a15f97404ffd4a41a76e003238 100644 |
--- a/Source/core/rendering/RenderObject.h |
+++ b/Source/core/rendering/RenderObject.h |
@@ -243,7 +243,7 @@ public: |
// again. We have to make sure the render tree updates as needed to accommodate the new |
// normal flow object. |
void handleDynamicFloatPositionChange(); |
- |
+ |
// RenderObject tree manipulation |
////////////////////////////////////////// |
virtual bool canHaveChildren() const { return virtualChildren(); } |
@@ -263,7 +263,7 @@ protected: |
void setParent(RenderObject* parent) |
{ |
m_parent = parent; |
- |
+ |
// Only update if our flow thread state is different from our new parent and if we're not a RenderFlowThread. |
// A RenderFlowThread is always considered to be inside itself, so it never has to change its state |
// in response to parent changes. |
@@ -499,7 +499,7 @@ public: |
// This function is kept in sync with anonymous block creation conditions in |
// RenderBlock::createAnonymousBlock(). This includes creating an anonymous |
// RenderBlock having a BLOCK or BOX display. Other classes such as RenderTextFragment |
- // are not RenderBlocks and will return false. See https://bugs.webkit.org/show_bug.cgi?id=56709. |
+ // are not RenderBlocks and will return false. See https://bugs.webkit.org/show_bug.cgi?id=56709. |
return isAnonymous() && (style()->display() == BLOCK || style()->display() == BOX) && style()->styleType() == NOPSEUDO && isRenderBlock() && !isListMarker() && !isRenderFlowThread() |
&& !isRenderFullScreen() |
&& !isRenderFullScreenPlaceholder(); |
@@ -559,7 +559,7 @@ public: |
bool posChildNeedsLayout() const { return m_bitfields.posChildNeedsLayout(); } |
bool needsSimplifiedNormalFlowLayout() const { return m_bitfields.needsSimplifiedNormalFlowLayout(); } |
bool normalChildNeedsLayout() const { return m_bitfields.normalChildNeedsLayout(); } |
- |
+ |
bool preferredLogicalWidthsDirty() const { return m_bitfields.preferredLogicalWidthsDirty(); } |
bool isSelectionBorder() const; |
@@ -583,7 +583,7 @@ public: |
// any pseudo classes (and therefore has no concept of changing state). |
RenderStyle* getCachedPseudoStyle(PseudoId, RenderStyle* parentStyle = 0) const; |
PassRefPtr<RenderStyle> getUncachedPseudoStyle(const PseudoStyleRequest&, RenderStyle* parentStyle = 0, RenderStyle* ownStyle = 0) const; |
- |
+ |
virtual void updateDragState(bool dragOn); |
RenderView* view() const { return document()->renderView(); }; |
@@ -624,7 +624,7 @@ public: |
void setNeedsSimplifiedNormalFlowLayout(); |
void setPreferredLogicalWidthsDirty(bool, MarkingBehavior = MarkContainingBlockChain); |
void invalidateContainerPreferredLogicalWidths(); |
- |
+ |
void setNeedsLayoutAndPrefWidthsRecalc() |
{ |
setNeedsLayout(true); |
@@ -666,7 +666,7 @@ public: |
/* This function performs a layout only if one is needed. */ |
void layoutIfNeeded() { if (needsLayout()) layout(); } |
- |
+ |
// used for element state updates that cannot be fixed with a |
// repaint and do not need a relayout |
virtual void updateFromElement() { } |
@@ -731,7 +731,7 @@ public: |
virtual LayoutSize offsetFromContainer(RenderObject*, const LayoutPoint&, bool* offsetDependsOnPoint = 0) const; |
// Return the offset from an object up the container() chain. Asserts that none of the intermediate objects have transforms. |
LayoutSize offsetFromAncestorContainer(RenderObject*) const; |
- |
+ |
virtual void absoluteRects(Vector<IntRect>&, const LayoutPoint&) const { } |
// FIXME: useTransforms should go away eventually |
@@ -755,6 +755,27 @@ public: |
RenderStyle* firstLineStyle() const { return document()->styleSheetCollection()->usesFirstLineRules() ? cachedFirstLineStyle() : style(); } |
RenderStyle* style(bool firstLine) const { return firstLine ? firstLineStyle() : style(); } |
+ inline Color resolveColor(const RenderStyle* styleToUse, int colorProperty) const |
+ { |
+ return styleToUse->visitedDependentColor(colorProperty); |
+ } |
+ |
+ inline Color resolveColor(int colorProperty) const |
+ { |
+ return style()->visitedDependentColor(colorProperty); |
+ } |
+ |
+ inline Color resolveColor(int colorProperty, Color fallback) const |
+ { |
+ Color color = resolveColor(colorProperty); |
+ return color.isValid() ? color : fallback; |
+ } |
+ |
+ inline Color resolveColor(Color color) const |
+ { |
+ return color; |
+ } |
+ |
// Used only by Element::pseudoStyleCacheIsInvalid to get a first line style based off of a |
// given new style, without accessing the cache. |
PassRefPtr<RenderStyle> uncachedFirstLineStyle(RenderStyle*) const; |
@@ -762,7 +783,7 @@ public: |
// Anonymous blocks that are part of of a continuation chain will return their inline continuation's outline style instead. |
// This is typically only relevant when repainting. |
virtual RenderStyle* outlineStyleForRepaint() const { return style(); } |
- |
+ |
virtual CursorDirective getCursor(const LayoutPoint&, Cursor&) const; |
void getTextDecorationColors(int decorations, Color& underline, Color& overline, Color& linethrough, bool quirksMode = false, bool firstlineStyle = false); |
@@ -774,7 +795,7 @@ public: |
// Actually do the repaint of rect r for this object which has been computed in the coordinate space |
// of repaintContainer. If repaintContainer is 0, repaint via the view. |
void repaintUsingContainer(const RenderLayerModelObject* repaintContainer, const IntRect&) const; |
- |
+ |
// Repaint the entire object. Called when, e.g., the color of a border changes, or when a border |
// style changes. |
void repaint() const; |
@@ -904,7 +925,7 @@ public: |
virtual bool willRenderImage(CachedImage*); |
void selectionStartEnd(int& spos, int& epos) const; |
- |
+ |
void remove() { if (parent()) parent()->removeChild(this); } |
AnimationController* animation() const; |
@@ -921,13 +942,13 @@ public: |
// Pushes state onto RenderGeometryMap about how to map coordinates from this renderer to its container, or ancestorToStopAt (whichever is encountered first). |
// Returns the renderer which was mapped to (container or ancestorToStopAt). |
virtual const RenderObject* pushMappingToContainer(const RenderLayerModelObject* ancestorToStopAt, RenderGeometryMap&) const; |
- |
+ |
bool shouldUseTransformFromContainer(const RenderObject* container) const; |
void getTransformFromContainer(const RenderObject* container, const LayoutSize& offsetInContainer, TransformationMatrix&) const; |
- |
+ |
// return true if this object requires a new stacking context |
- bool createsGroup() const { return isTransparent() || hasMask() || hasFilter() || hasBlendMode(); } |
- |
+ bool createsGroup() const { return isTransparent() || hasMask() || hasFilter() || hasBlendMode(); } |
+ |
virtual void addFocusRingRects(Vector<IntRect>&, const LayoutPoint& /* additionalOffset */, const RenderLayerModelObject* /* paintContainer */ = 0) { }; |
LayoutRect absoluteOutlineBounds() const |
@@ -955,7 +976,7 @@ protected: |
void paintFocusRing(PaintInfo&, const LayoutPoint&, RenderStyle*); |
void paintOutline(PaintInfo&, const LayoutRect&); |
void addPDFURLRect(GraphicsContext*, const LayoutRect&); |
- |
+ |
virtual LayoutRect viewRect() const; |
void adjustRectForOutlineAndShadow(LayoutRect&) const; |
@@ -1048,7 +1069,7 @@ private: |
, m_boxDecorationState(NoBoxDecorations) |
{ |
} |
- |
+ |
// 31 bits have been used here. There is one bit available. |
ADD_BOOLEAN_BITFIELD(needsLayout, NeedsLayout); |
ADD_BOOLEAN_BITFIELD(needsPositionedMovementLayout, NeedsPositionedMovementLayout); |
@@ -1099,7 +1120,7 @@ private: |
ALWAYS_INLINE SelectionState selectionState() const { return static_cast<SelectionState>(m_selectionState); } |
ALWAYS_INLINE void setSelectionState(SelectionState selectionState) { m_selectionState = selectionState; } |
- |
+ |
ALWAYS_INLINE FlowThreadState flowThreadState() const { return static_cast<FlowThreadState>(m_flowThreadState); } |
ALWAYS_INLINE void setFlowThreadState(FlowThreadState flowThreadState) { m_flowThreadState = flowThreadState; } |