Changeset 40544 in webkit
- Timestamp:
- Feb 3, 2009 12:43:55 PM (15 years ago)
- Location:
- trunk/WebCore
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r40543 r40544 1 2009-02-02 Simon Fraser <simon.fraser@apple.com> 2 3 Reviewed by Dave Hyatt 4 5 https://bugs.webkit.org/show_bug.cgi?id=23358 6 7 Hook accelerated compositing into RenderLayer. 8 9 * rendering/RenderLayer.cpp: 10 (WebCore::RenderLayer::RenderLayer): 11 (WebCore::RenderLayer::~RenderLayer): 12 Init and clean up backing and the hasCompositingDescendant bit. 13 14 (WebCore::RenderLayer::compositor): 15 Shortcut to get to the RenderLayerCompositor. 16 17 (WebCore::RenderLayer::updateLayerPositions): 18 We need to let full repaints propagate to all compositing layers, and 19 update the backing after layout here. 20 21 (WebCore::RenderLayer::transparentAncestor): 22 (WebCore::transparencyClipBox): 23 (WebCore::RenderLayer::beginTransparencyLayers): 24 Account for the fact that opacity may be rendered via the compositing 25 layer sometimes. 26 27 (WebCore::RenderLayer::addChild): 28 (WebCore::RenderLayer::removeChild): 29 (WebCore::RenderLayer::removeOnlyThisLayer): 30 Tell the compositor when the RenderLayer hierarchy changes. 31 32 (WebCore::RenderLayer::scrollToOffset): 33 Update layer geometry after scrolling. 34 35 (WebCore::RenderLayer::paintLayer): 36 We short-circuit painting on composited layers, because these layers 37 are painted on a callback from the compositing system. 38 39 (WebCore::RenderLayer::hitTestLayer): 40 Only apply transforms if we are rendering them in software. 41 42 (WebCore::RenderLayer::localBoundingBox): 43 (WebCore::RenderLayer::boundingBox): 44 (WebCore::RenderLayer::absoluteBoundingBox): 45 Refactor bounding box code that we can compute local, and ancestor-relative 46 bounding box, as well as absolute. 47 48 (WebCore::RenderLayer::ensureBacking): 49 (WebCore::RenderLayer::clearBacking): 50 RenderLayerBacking creation and destruction. 51 52 (WebCore::RenderLayer::setParent): 53 Tell the compositor when the RenderLayer hierarchy changes. 54 55 (WebCore::RenderLayer::dirtyZOrderLists): 56 (WebCore::RenderLayer::dirtyStackingContextZOrderLists): 57 (WebCore::RenderLayer::dirtyOverflowList): 58 When the z-order and overflow lists change, we need to tell the 59 compositor that the composited layers need to be rejiggered soon. 60 61 (WebCore::RenderLayer::updateZOrderLists): 62 Whitespace cleanup. 63 64 (WebCore::RenderLayer::setBackingNeedsRepaint): 65 (WebCore::RenderLayer::setBackingNeedsRepaintInRect): 66 Dirty composited layer contents for painting. 67 68 (WebCore::RenderLayer::styleChanged): 69 Update the layer backing after style changes. 70 71 * rendering/RenderLayer.h: 72 (WebCore::RenderLayer::isComposited): 73 (WebCore::RenderLayer::backing): 74 Accessors for testing and getting the backing for this RenderLayer. 75 76 (WebCore::RenderLayer::paintsWithTransparency): 77 (WebCore::RenderLayer::paintsWithTransform): 78 Transform and opacity can be applied via the compositing layer, or rendered 79 in software. These methods tell us if we need to account for them in the 80 non-compositing path. 81 82 (WebCore::RenderLayer::hasCompositingDescendant): 83 (WebCore::RenderLayer::setHasCompositingDescendant): 84 Maintain a bit to tell if this layer has composited descendants. 85 1 86 2009-02-03 Simon Fraser <simon.fraser@apple.com> 2 87 -
trunk/WebCore/rendering/RenderLayer.cpp
r40486 r40544 45 45 #include "RenderLayer.h" 46 46 47 #include "CString.h" 47 48 #include "CSSPropertyNames.h" 49 #include "CSSStyleSelector.h" 48 50 #include "Document.h" 49 51 #include "EventHandler.h" … … 74 76 #include "ScrollbarTheme.h" 75 77 #include "SelectionController.h" 78 #include "TransformationMatrix.h" 76 79 #include "TranslateTransformOperation.h" 77 80 #include <wtf/StdLibExtras.h> 81 82 #if USE(ACCELERATED_COMPOSITING) 83 #include "RenderLayerBacking.h" 84 #include "RenderLayerCompositor.h" 85 #endif 78 86 79 87 #if ENABLE(SVG) … … 157 165 , m_visibleDescendantStatusDirty(false) 158 166 , m_hasVisibleDescendant(false) 167 #if USE(ACCELERATED_COMPOSITING) 168 , m_hasCompositingDescendant(false) 169 #endif 159 170 , m_marquee(0) 160 171 , m_staticX(0) … … 164 175 , m_scrollCorner(0) 165 176 , m_resizer(0) 177 #if USE(ACCELERATED_COMPOSITING) 178 , m_backing(0) 179 #endif 166 180 { 167 181 if (!renderer->firstChild() && renderer->style()) { … … 189 203 delete m_marquee; 190 204 205 #if USE(ACCELERATED_COMPOSITING) 206 clearBacking(); 207 #endif 208 191 209 // Make sure we have no lingering clip rects. 192 210 ASSERT(!m_clipRects); … … 205 223 } 206 224 225 #if USE(ACCELERATED_COMPOSITING) 226 RenderLayerCompositor* RenderLayer::compositor() const 227 { 228 return renderer()->view()->compositor(); 229 } 230 #endif // USE(ACCELERATED_COMPOSITING) 231 207 232 void RenderLayer::updateLayerPositions(bool doFullRepaint, bool checkForRepaint) 208 233 { 209 234 if (doFullRepaint) { 210 235 renderer()->repaint(); 236 #if USE(ACCELERATED_COMPOSITING) 237 checkForRepaint = false; 238 // We need the full repaint to propagate to child layers if we are hardware compositing. 239 if (!compositor()->inCompositingMode()) 240 doFullRepaint = false; 241 #else 211 242 checkForRepaint = doFullRepaint = false; 243 #endif 212 244 } 213 245 … … 260 292 for (RenderLayer* child = firstChild(); child; child = child->nextSibling()) 261 293 child->updateLayerPositions(doFullRepaint, checkForRepaint); 294 295 #if USE(ACCELERATED_COMPOSITING) 296 if (isComposited()) 297 backing()->updateAfterLayout(); 298 #endif 262 299 263 300 // With all our children positioned, now update our marquee if we need to. … … 496 533 } 497 534 498 RenderLayer* 499 RenderLayer::transparentAncestor() 500 { 501 RenderLayer* curr = parent(); 502 for ( ; curr && !curr->isTransparent(); curr = curr->parent()) { } 503 return curr; 535 RenderLayer* RenderLayer::transparentPaintingAncestor() 536 { 537 if (isComposited()) 538 return 0; 539 540 for (RenderLayer* curr = parent(); curr; curr = curr->parent()) { 541 if (curr->isComposited()) 542 return 0; 543 if (curr->isTransparent()) 544 return curr; 545 } 546 return 0; 504 547 } 505 548 … … 510 553 // would be better to respect clips. 511 554 512 TransformationMatrix* t = l->transform(); 513 if (t && rootLayer != l) { 555 if (rootLayer != l && l->paintsWithTransform()) { 514 556 // The best we can do here is to use enclosed bounding boxes to establish a "fuzzy" enough clip to encompass 515 557 // the transformed layer and all of its children. … … 517 559 int y = 0; 518 560 l->convertToLayerCoords(rootLayer, x, y); 561 519 562 TransformationMatrix transform; 520 563 transform.translate(x, y); 521 transform = * t* transform;564 transform = *l->transform() * transform; 522 565 transform = transform * enclosingTransform; 523 566 … … 553 596 void RenderLayer::beginTransparencyLayers(GraphicsContext* p, const RenderLayer* rootLayer) 554 597 { 555 if (p->paintingDisabled() || ( isTransparent() && m_usedTransparency))556 return; 557 558 RenderLayer* ancestor = transparent Ancestor();598 if (p->paintingDisabled() || (paintsWithTransparency() && m_usedTransparency)) 599 return; 600 601 RenderLayer* ancestor = transparentPaintingAncestor(); 559 602 if (ancestor) 560 603 ancestor->beginTransparencyLayers(p, rootLayer); 561 604 562 if ( isTransparent()) {605 if (paintsWithTransparency()) { 563 606 m_usedTransparency = true; 564 607 p->save(); … … 617 660 if (child->m_hasVisibleContent || child->m_hasVisibleDescendant) 618 661 childVisibilityChanged(true); 662 663 #if USE(ACCELERATED_COMPOSITING) 664 compositor()->layerWasAdded(this, child); 665 #endif 619 666 } 620 667 621 668 RenderLayer* RenderLayer::removeChild(RenderLayer* oldChild) 622 669 { 670 #if USE(ACCELERATED_COMPOSITING) 671 compositor()->layerWillBeRemoved(this, oldChild); 672 #endif 673 623 674 // remove the child 624 675 if (oldChild->previousSibling()) … … 657 708 return; 658 709 710 #if USE(ACCELERATED_COMPOSITING) 711 compositor()->layerWillBeRemoved(m_parent, this); 712 #endif 713 659 714 // Dirty the clip rects. 660 715 clearClipRectsIncludingDescendants(); … … 834 889 for (RenderLayer* child = firstChild(); child; child = child->nextSibling()) 835 890 child->updateLayerPositions(false, false); 891 892 #if USE(ACCELERATED_COMPOSITING) 893 if (isComposited()) 894 m_backing->updateGraphicsLayerGeometry(); 895 #endif 836 896 837 897 RenderView* view = renderer()->view(); … … 1657 1717 RenderObject* paintingRoot, bool appliedTransform, bool temporaryClipRects) 1658 1718 { 1719 #if USE(ACCELERATED_COMPOSITING) 1720 // Composited RenderLayers are painted via the backing's paintIntoLayer(). 1721 if (isComposited() && !backing()->paintingGoesToWindow()) 1722 return; 1723 #endif 1724 1659 1725 // Avoid painting layers when stylesheets haven't loaded. This eliminates FOUC. 1660 1726 // It's ok not to draw, because later on, when all the stylesheets do load, updateStyleSelector on the Document … … 1667 1733 return; 1668 1734 1669 if ( isTransparent())1735 if (paintsWithTransparency()) 1670 1736 haveTransparency = true; 1671 1737 1672 1738 // Apply a transform if we have one. A reflection is considered to be a transform, since it is a flip and a translate. 1673 if ( m_transform&& !appliedTransform) {1739 if (paintsWithTransform() && !appliedTransform) { 1674 1740 // If the transform can't be inverted, then don't paint anything. 1675 1741 if (!m_transform->isInvertible()) … … 1713 1779 // Now do a paint with the root layer shifted to be us. 1714 1780 paintLayer(this, p, transform.inverse().mapRect(paintDirtyRect), haveTransparency, paintRestriction, paintingRoot, true, temporaryClipRects); 1715 1781 1716 1782 p->restore(); 1717 1783 … … 1739 1805 1740 1806 // Ensure our lists are up-to-date. 1741 updateZOrderLists(); 1742 updateOverflowList(); 1807 updateLayerListsIfNeeded(); 1743 1808 1744 1809 bool selectionOnly = paintRestriction == PaintRestrictionSelectionOnly || paintRestriction == PaintRestrictionSelectionOnlyBlackText; … … 1837 1902 1838 1903 // End our transparency layer 1839 if ( isTransparent()&& m_usedTransparency) {1904 if (haveTransparency && m_usedTransparency) { 1840 1905 p->endTransparencyLayer(); 1841 1906 p->restore(); … … 1895 1960 { 1896 1961 // Apply a transform if we have one. 1897 if ( m_transform&& !appliedTransform) {1962 if (paintsWithTransform() && !appliedTransform) { 1898 1963 // If the transform can't be inverted, then don't hit test this layer at all. 1899 1964 if (!m_transform->isInvertible()) … … 1931 1996 1932 1997 // Ensure our lists are up-to-date. 1933 updateZOrderLists(); 1934 updateOverflowList(); 1998 updateLayerListsIfNeeded(); 1935 1999 1936 2000 // This variable tracks which layer the mouse ends up being inside. The minute we find an insideLayer, … … 2206 2270 } 2207 2271 2208 IntRect RenderLayer:: boundingBox(const RenderLayer* rootLayer) const2272 IntRect RenderLayer::localBoundingBox() const 2209 2273 { 2210 2274 // There are three special cases we need to consider. … … 2229 2293 for (InlineRunBox* curr = firstBox->nextLineBox(); curr; curr = curr->nextLineBox()) 2230 2294 left = min(left, curr->xPos()); 2231 result = IntRect( m_x + left, m_y +(top - renderer()->y()), width(), bottom - top);2295 result = IntRect(left, (top - renderer()->y()), width(), bottom - top); 2232 2296 } else if (renderer()->isTableRow()) { 2233 2297 // Our bounding box is just the union of all of our cells' border/overflow rects. … … 2241 2305 } 2242 2306 } 2243 result.move(m_x, m_y);2244 2307 } else { 2245 2308 if (renderer()->hasMask()) … … 2252 2315 result.unite(overflowRect); 2253 2316 } 2254 2255 // We have to adjust the x/y of this result so that it is in the coordinate space of the layer. 2256 result.move(m_x, m_y); 2257 } 2258 2259 // Convert the bounding box to an absolute position. We can do this easily by looking at the delta 2260 // between the bounding box's xpos and our layer's xpos and then applying that to the absolute layerBounds 2261 // passed in. 2262 int absX = 0, absY = 0; 2263 convertToLayerCoords(rootLayer, absX, absY); 2264 result.move(absX - m_x, absY - m_y); 2317 } 2318 2265 2319 RenderView* view = renderer()->view(); 2266 2320 ASSERT(view); 2267 2321 if (view) 2268 result.inflate(view->maximalOutlineSize()); 2322 result.inflate(view->maximalOutlineSize()); // Used to apply a fudge factor to dirty-rect checks on blocks/tables. 2323 2269 2324 return result; 2325 } 2326 2327 IntRect RenderLayer::boundingBox(const RenderLayer* ancestorLayer) const 2328 { 2329 IntRect result = localBoundingBox(); 2330 2331 int deltaX = 0, deltaY = 0; 2332 convertToLayerCoords(ancestorLayer, deltaX, deltaY); 2333 result.move(deltaX, deltaY); 2334 return result; 2335 } 2336 2337 IntRect RenderLayer::absoluteBoundingBox() const 2338 { 2339 return boundingBox(root()); 2270 2340 } 2271 2341 … … 2290 2360 #endif 2291 2361 } 2362 } 2363 2364 #if USE(ACCELERATED_COMPOSITING) 2365 RenderLayerBacking* RenderLayer::ensureBacking() 2366 { 2367 m_backing.adopt(new RenderLayerBacking(this)); 2368 return m_backing.get(); 2369 } 2370 2371 void RenderLayer::clearBacking() 2372 { 2373 m_backing.clear(); 2374 } 2375 #endif 2376 2377 void RenderLayer::setParent(RenderLayer* parent) 2378 { 2379 if (parent == m_parent) 2380 return; 2381 2382 #if USE(ACCELERATED_COMPOSITING) 2383 if (m_parent && compositor()) 2384 compositor()->layerWillBeRemoved(m_parent, this); 2385 #endif 2386 2387 m_parent = parent; 2388 2389 #if USE(ACCELERATED_COMPOSITING) 2390 if (m_parent) 2391 compositor()->layerWasAdded(m_parent, this); 2392 #endif 2292 2393 } 2293 2394 … … 2387 2488 m_negZOrderList->clear(); 2388 2489 m_zOrderListsDirty = true; 2490 2491 #if USE(ACCELERATED_COMPOSITING) 2492 if (compositor()) 2493 compositor()->setCompositingLayersNeedUpdate(); 2494 #endif 2389 2495 } 2390 2496 … … 2401 2507 m_overflowList->clear(); 2402 2508 m_overflowListDirty = true; 2509 2510 #if USE(ACCELERATED_COMPOSITING) 2511 if (compositor()) 2512 compositor()->setCompositingLayersNeedUpdate(); 2513 #endif 2403 2514 } 2404 2515 … … 2407 2518 if (!isStackingContext() || !m_zOrderListsDirty) 2408 2519 return; 2409 2520 2410 2521 for (RenderLayer* child = firstChild(); child; child = child->nextSibling()) 2411 2522 if (!m_reflection || reflectionLayer() != child) … … 2415 2526 if (m_posZOrderList) 2416 2527 std::stable_sort(m_posZOrderList->begin(), m_posZOrderList->end(), compareZIndex); 2528 2417 2529 if (m_negZOrderList) 2418 2530 std::stable_sort(m_negZOrderList->begin(), m_negZOrderList->end(), compareZIndex); … … 2466 2578 } 2467 2579 2580 void RenderLayer::updateLayerListsIfNeeded() 2581 { 2582 #if USE(ACCELERATED_COMPOSITING) 2583 if (compositor()->inCompositingMode()) { 2584 if ((isStackingContext() && m_zOrderListsDirty) || m_overflowListDirty) 2585 compositor()->updateCompositingLayers(this); 2586 return; 2587 } 2588 #endif 2589 updateZOrderLists(); 2590 updateOverflowList(); 2591 } 2592 2468 2593 void RenderLayer::repaintIncludingDescendants() 2469 2594 { … … 2472 2597 curr->repaintIncludingDescendants(); 2473 2598 } 2599 2600 #if USE(ACCELERATED_COMPOSITING) 2601 void RenderLayer::setBackingNeedsRepaint() 2602 { 2603 ASSERT(isComposited()); 2604 if (backing()->paintingGoesToWindow()) { 2605 // If we're trying to repaint the placeholder document layer, propagate the 2606 // repaint to the native view system. 2607 RenderView* view = renderer()->view(); 2608 if (view) 2609 view->repaintViewRectangle(absoluteBoundingBox()); 2610 } else 2611 backing()->setContentsNeedDisplay(); 2612 } 2613 2614 void RenderLayer::setBackingNeedsRepaintInRect(const IntRect& r) 2615 { 2616 ASSERT(isComposited()); 2617 if (backing()->paintingGoesToWindow()) { 2618 // If we're trying to repaint the placeholder document layer, propagate the 2619 // repaint to the native view system. 2620 IntRect absRect(r); 2621 int x = 0; 2622 int y = 0; 2623 convertToLayerCoords(root(), x, y); 2624 absRect.move(x, y); 2625 2626 RenderView* view = renderer()->view(); 2627 if (view) 2628 view->repaintViewRectangle(absRect); 2629 } else 2630 backing()->setContentsNeedDisplayInRect(r); 2631 } 2632 #endif 2474 2633 2475 2634 bool RenderLayer::shouldBeOverflowOnly() const … … 2482 2641 } 2483 2642 2484 void RenderLayer::styleChanged(RenderStyle::Diff , const RenderStyle*)2643 void RenderLayer::styleChanged(RenderStyle::Diff diff, const RenderStyle*) 2485 2644 { 2486 2645 bool isOverflowOnly = shouldBeOverflowOnly(); … … 2520 2679 updateScrollCornerStyle(); 2521 2680 updateResizerStyle(); 2681 2682 #if USE(ACCELERATED_COMPOSITING) 2683 updateTransform(); 2684 2685 if (compositor()->updateLayerCompositingState(this, diff)) 2686 compositor()->setCompositingLayersNeedUpdate(); 2687 #else 2688 UNUSED_PARAM(diff); 2689 #endif 2522 2690 } 2523 2691 -
trunk/WebCore/rendering/RenderLayer.h
r40500 r40544 52 52 namespace WebCore { 53 53 54 class TransformationMatrix;55 54 class CachedResource; 56 55 class HitTestRequest; … … 65 64 class RenderView; 66 65 class Scrollbar; 66 class TransformationMatrix; 67 68 #if USE(ACCELERATED_COMPOSITING) 69 class RenderLayerBacking; 70 class RenderLayerCompositor; 71 #endif 67 72 68 73 class ClipRects { … … 200 205 void repaintIncludingDescendants(); 201 206 207 #if USE(ACCELERATED_COMPOSITING) 208 // Indicate that the layer contents need to be repainted. Only has an effect 209 // if layer compositing is being used, 210 void setBackingNeedsRepaint(); 211 void setBackingNeedsRepaintInRect(const IntRect& r); // r is in the coordinate space of the layer's render object 212 #endif 213 202 214 void styleChanged(RenderStyle::Diff, const RenderStyle*); 203 215 … … 210 222 211 223 bool isTransparent() const; 212 RenderLayer* transparent Ancestor();224 RenderLayer* transparentPaintingAncestor(); 213 225 void beginTransparencyLayers(GraphicsContext*, const RenderLayer* rootLayer); 214 226 … … 288 300 bool inResizeMode() const { return m_inResizeMode; } 289 301 void setInResizeMode(bool b) { m_inResizeMode = b; } 302 303 #if USE(ACCELERATED_COMPOSITING) 304 RenderLayerCompositor* compositor() const; 305 #endif 290 306 291 307 void updateLayerPosition(); … … 353 369 bool intersectsDamageRect(const IntRect& layerBounds, const IntRect& damageRect, const RenderLayer* rootLayer) const; 354 370 355 // Returns a bounding box for this layer only.371 // Bounding box relative to some ancestor layer. 356 372 IntRect boundingBox(const RenderLayer* rootLayer) const; 373 // Bounding box in the coordinates of this layer. 374 IntRect localBoundingBox() const; 375 // Bounding box relative to the root. 376 IntRect absoluteBoundingBox() const; 357 377 358 378 void updateHoverActiveState(const HitTestRequest&, HitTestResult&); … … 368 388 369 389 bool hasTransform() const { return renderer()->hasTransform(); } 390 // Note that this transform has the transform-origin baked in. 370 391 TransformationMatrix* transform() const { return m_transform.get(); } 371 392 … … 379 400 void operator delete(void*, size_t); 380 401 402 #if USE(ACCELERATED_COMPOSITING) 403 bool isComposited() const { return m_backing != 0; } 404 RenderLayerBacking* backing() const { return m_backing; } 405 RenderLayerBacking* ensureBacking(); 406 void clearBacking(); 407 #else 408 bool isComposited() const { return false; } 409 #endif 410 411 bool paintsWithTransparency() const 412 { 413 return isTransparent() && !isComposited(); 414 } 415 416 bool paintsWithTransform() const 417 { 418 return transform() && !isComposited(); 419 } 420 381 421 private: 382 422 // The normal operator new is disallowed on all render objects. … … 386 426 void setNextSibling(RenderLayer* next) { m_next = next; } 387 427 void setPreviousSibling(RenderLayer* prev) { m_previous = prev; } 388 void setParent(RenderLayer* parent) { m_parent = parent; }428 void setParent(RenderLayer* parent); 389 429 void setFirstChild(RenderLayer* first) { m_first = first; } 390 430 void setLastChild(RenderLayer* last) { m_last = last; } … … 392 432 void collectLayers(Vector<RenderLayer*>*&, Vector<RenderLayer*>*&); 393 433 434 void updateLayerListsIfNeeded(); 435 394 436 void paintLayer(RenderLayer* rootLayer, GraphicsContext*, const IntRect& paintDirtyRect, 395 437 bool haveTransparency, PaintRestriction, RenderObject* paintingRoot, 396 438 bool appliedTransform = false, bool temporaryClipRects = false); 397 439 RenderLayer* hitTestLayer(RenderLayer* rootLayer, const HitTestRequest&, HitTestResult&, const IntRect& hitTestRect, const IntPoint& hitTestPoint, bool appliedTransform = false); 440 398 441 void computeScrollDimensions(bool* needHBar = 0, bool* needVBar = 0); 399 442 … … 425 468 void updateResizerStyle(); 426 469 427 protected: 470 #if USE(ACCELERATED_COMPOSITING) 471 bool hasCompositingDescendant() const { return m_hasCompositingDescendant; } 472 void setHasCompositingDescendant(bool b) { m_hasCompositingDescendant = b; } 473 #endif 474 475 private: 476 friend class RenderLayerBacking; 477 friend class RenderLayerCompositor; 478 479 protected: 428 480 RenderBox* m_renderer; 429 481 … … 502 554 bool m_hasVisibleDescendant : 1; 503 555 556 #if USE(ACCELERATED_COMPOSITING) 557 bool m_hasCompositingDescendant : 1; 558 #endif 559 504 560 RenderMarquee* m_marquee; // Used by layers with overflow:marquee 505 561 … … 516 572 RenderScrollbarPart* m_scrollCorner; 517 573 RenderScrollbarPart* m_resizer; 574 575 #if USE(ACCELERATED_COMPOSITING) 576 OwnPtr<RenderLayerBacking> m_backing; 577 #endif 518 578 }; 519 579
Note: See TracChangeset
for help on using the changeset viewer.