Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(214)

Side by Side Diff: Source/core/rendering/RenderTableCell.cpp

Issue 360833002: Divorce PaintInvalidationState from LayoutState (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: ToT again... Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1997 Martin Jones (mjones@kde.org) 2 * Copyright (C) 1997 Martin Jones (mjones@kde.org)
3 * (C) 1997 Torben Weis (weis@kde.org) 3 * (C) 1997 Torben Weis (weis@kde.org)
4 * (C) 1998 Waldo Bastian (bastian@kde.org) 4 * (C) 1998 Waldo Bastian (bastian@kde.org)
5 * (C) 1999 Lars Knoll (knoll@kde.org) 5 * (C) 1999 Lars Knoll (knoll@kde.org)
6 * (C) 1999 Antti Koivisto (koivisto@kde.org) 6 * (C) 1999 Antti Koivisto (koivisto@kde.org)
7 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. 7 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
8 * 8 *
9 * This library is free software; you can redistribute it and/or 9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Library General Public 10 * modify it under the terms of the GNU Library General Public
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 { 308 {
309 ASSERT(o == container()); 309 ASSERT(o == container());
310 310
311 LayoutSize offset = RenderBlockFlow::offsetFromContainer(o, point, offsetDep endsOnPoint); 311 LayoutSize offset = RenderBlockFlow::offsetFromContainer(o, point, offsetDep endsOnPoint);
312 if (parent()) 312 if (parent())
313 offset -= parentBox()->locationOffset(); 313 offset -= parentBox()->locationOffset();
314 314
315 return offset; 315 return offset;
316 } 316 }
317 317
318 LayoutRect RenderTableCell::clippedOverflowRectForPaintInvalidation(const Render LayerModelObject* paintInvalidationContainer) const 318 LayoutRect RenderTableCell::clippedOverflowRectForPaintInvalidation(const Render LayerModelObject* paintInvalidationContainer, const PaintInvalidationState* pain tInvalidationState) const
319 { 319 {
320 // If the table grid is dirty, we cannot get reliable information about adjo ining cells, 320 // If the table grid is dirty, we cannot get reliable information about adjo ining cells,
321 // so we ignore outside borders. This should not be a problem because it mea ns that 321 // so we ignore outside borders. This should not be a problem because it mea ns that
322 // the table is going to recalculate the grid, relayout and repaint its curr ent rect, which 322 // the table is going to recalculate the grid, relayout and repaint its curr ent rect, which
323 // includes any outside borders of this cell. 323 // includes any outside borders of this cell.
324 if (!table()->collapseBorders() || table()->needsSectionRecalc()) 324 if (!table()->collapseBorders() || table()->needsSectionRecalc())
325 return RenderBlockFlow::clippedOverflowRectForPaintInvalidation(paintInv alidationContainer); 325 return RenderBlockFlow::clippedOverflowRectForPaintInvalidation(paintInv alidationContainer, paintInvalidationState);
326 326
327 bool rtl = !styleForCellFlow()->isLeftToRightDirection(); 327 bool rtl = !styleForCellFlow()->isLeftToRightDirection();
328 int outlineSize = style()->outlineSize(); 328 int outlineSize = style()->outlineSize();
329 int left = std::max(borderHalfLeft(true), outlineSize); 329 int left = std::max(borderHalfLeft(true), outlineSize);
330 int right = std::max(borderHalfRight(true), outlineSize); 330 int right = std::max(borderHalfRight(true), outlineSize);
331 int top = std::max(borderHalfTop(true), outlineSize); 331 int top = std::max(borderHalfTop(true), outlineSize);
332 int bottom = std::max(borderHalfBottom(true), outlineSize); 332 int bottom = std::max(borderHalfBottom(true), outlineSize);
333 if ((left && !rtl) || (right && rtl)) { 333 if ((left && !rtl) || (right && rtl)) {
334 if (RenderTableCell* before = table()->cellBefore(this)) { 334 if (RenderTableCell* before = table()->cellBefore(this)) {
335 top = std::max(top, before->borderHalfTop(true)); 335 top = std::max(top, before->borderHalfTop(true));
(...skipping 14 matching lines...) Expand all
350 } 350 }
351 if (bottom) { 351 if (bottom) {
352 if (RenderTableCell* below = table()->cellBelow(this)) { 352 if (RenderTableCell* below = table()->cellBelow(this)) {
353 left = std::max(left, below->borderHalfLeft(true)); 353 left = std::max(left, below->borderHalfLeft(true));
354 right = std::max(right, below->borderHalfRight(true)); 354 right = std::max(right, below->borderHalfRight(true));
355 } 355 }
356 } 356 }
357 LayoutPoint location(std::max<LayoutUnit>(left, -visualOverflowRect().x()), std::max<LayoutUnit>(top, -visualOverflowRect().y())); 357 LayoutPoint location(std::max<LayoutUnit>(left, -visualOverflowRect().x()), std::max<LayoutUnit>(top, -visualOverflowRect().y()));
358 LayoutRect r(-location.x(), -location.y(), location.x() + std::max(width() + right, visualOverflowRect().maxX()), location.y() + std::max(height() + bottom, visualOverflowRect().maxY())); 358 LayoutRect r(-location.x(), -location.y(), location.x() + std::max(width() + right, visualOverflowRect().maxX()), location.y() + std::max(height() + bottom, visualOverflowRect().maxY()));
359 359
360 mapRectToPaintInvalidationBacking(paintInvalidationContainer, r); 360 mapRectToPaintInvalidationBacking(paintInvalidationContainer, r, false /* fi xed */, paintInvalidationState);
361 return r; 361 return r;
362 } 362 }
363 363
364 void RenderTableCell::mapRectToPaintInvalidationBacking(const RenderLayerModelOb ject* paintInvalidationContainer, LayoutRect& r, bool fixed) const 364 void RenderTableCell::mapRectToPaintInvalidationBacking(const RenderLayerModelOb ject* paintInvalidationContainer, LayoutRect& r, bool fixed, const PaintInvalida tionState* paintInvalidationState) const
365 { 365 {
366 if (paintInvalidationContainer == this) 366 if (paintInvalidationContainer == this)
367 return; 367 return;
368 r.setY(r.y()); 368 r.setY(r.y());
369 RenderView* v = view(); 369 // RenderView* v = view();
370 if ((!v || !v->canMapUsingLayoutStateForContainer(paintInvalidationContainer )) && parent()) 370 // if ((!v || !v->canMapUsingLayoutStateForContainer(paintInvalidationContai ner)) && parent())
Julien - ping for review 2014/07/07 22:09:59 doh'?!
371 r.moveBy(-parentBox()->location()); // Rows are in the same coordinate s pace, so don't add their offset in. 371 r.moveBy(-parentBox()->location()); // Rows are in the same coordinate s pace, so don't add their offset in.
372 RenderBlockFlow::mapRectToPaintInvalidationBacking(paintInvalidationContaine r, r, fixed); 372 RenderBlockFlow::mapRectToPaintInvalidationBacking(paintInvalidationContaine r, r, fixed, paintInvalidationState);
373 } 373 }
374 374
375 LayoutUnit RenderTableCell::cellBaselinePosition() const 375 LayoutUnit RenderTableCell::cellBaselinePosition() const
376 { 376 {
377 // <http://www.w3.org/TR/2007/CR-CSS21-20070719/tables.html#height-layout>: The baseline of a cell is the baseline of 377 // <http://www.w3.org/TR/2007/CR-CSS21-20070719/tables.html#height-layout>: The baseline of a cell is the baseline of
378 // the first in-flow line box in the cell, or the first in-flow table-row in the cell, whichever comes first. If there 378 // the first in-flow line box in the cell, or the first in-flow table-row in the cell, whichever comes first. If there
379 // is no such line box or table-row, the baseline is the bottom of content e dge of the cell box. 379 // is no such line box or table-row, the baseline is the bottom of content e dge of the cell box.
380 LayoutUnit firstLineBaseline = firstLineBoxBaseline(); 380 LayoutUnit firstLineBaseline = firstLineBoxBaseline();
381 if (firstLineBaseline != -1) 381 if (firstLineBaseline != -1)
382 return firstLineBaseline; 382 return firstLineBaseline;
(...skipping 879 matching lines...) Expand 10 before | Expand all | Expand 10 after
1262 1262
1263 RenderTableCell* RenderTableCell::createAnonymousWithParentRenderer(const Render Object* parent) 1263 RenderTableCell* RenderTableCell::createAnonymousWithParentRenderer(const Render Object* parent)
1264 { 1264 {
1265 RenderTableCell* newCell = RenderTableCell::createAnonymous(&parent->documen t()); 1265 RenderTableCell* newCell = RenderTableCell::createAnonymous(&parent->documen t());
1266 RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyleWithDisplay( parent->style(), TABLE_CELL); 1266 RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyleWithDisplay( parent->style(), TABLE_CELL);
1267 newCell->setStyle(newStyle.release()); 1267 newCell->setStyle(newStyle.release());
1268 return newCell; 1268 return newCell;
1269 } 1269 }
1270 1270
1271 } // namespace WebCore 1271 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698