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

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

Issue 256743006: [New Multicolumn] Make offsetLeft, offsetTop and getClientRects() behave. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Rebase master Created 6 years, 7 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011 Adobe Systems Incorporated. All rights reserved. 2 * Copyright (C) 2011 Adobe Systems Incorporated. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 7 *
8 * 1. Redistributions of source code must retain the above 8 * 1. Redistributions of source code must retain the above
9 * copyright notice, this list of conditions and the following 9 * copyright notice, this list of conditions and the following
10 * disclaimer. 10 * disclaimer.
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 LayoutUnit pageLogicalBottom = pageLogicalTop + pageLogicalHeight; 308 LayoutUnit pageLogicalBottom = pageLogicalTop + pageLogicalHeight;
309 LayoutUnit remainingHeight = pageLogicalBottom - offset; 309 LayoutUnit remainingHeight = pageLogicalBottom - offset;
310 if (pageBoundaryRule == IncludePageBoundary) { 310 if (pageBoundaryRule == IncludePageBoundary) {
311 // If IncludePageBoundary is set, the line exactly on the top edge of a 311 // If IncludePageBoundary is set, the line exactly on the top edge of a
312 // region will act as being part of the previous region. 312 // region will act as being part of the previous region.
313 remainingHeight = intMod(remainingHeight, pageLogicalHeight); 313 remainingHeight = intMod(remainingHeight, pageLogicalHeight);
314 } 314 }
315 return remainingHeight; 315 return remainingHeight;
316 } 316 }
317 317
318 RenderRegion* RenderFlowThread::mapFromFlowToRegion(TransformState& transformSta te) const
319 {
320 if (!hasValidRegionInfo())
321 return 0;
322
323 LayoutRect boxRect = transformState.mappedQuad().enclosingBoundingBox();
324 flipForWritingMode(boxRect);
325
326 // FIXME: We need to refactor RenderObject::absoluteQuads to be able to spli t the quads across regions,
327 // for now we just take the center of the mapped enclosing box and map it to a region.
328 // Note: Using the center in order to avoid rounding errors.
329
330 LayoutPoint center = boxRect.center();
331 RenderRegion* renderRegion = regionAtBlockOffset(isHorizontalWritingMode() ? center.y() : center.x());
332 if (!renderRegion)
333 return 0;
334
335 LayoutRect flippedRegionRect(renderRegion->flowThreadPortionRect());
336 flipForWritingMode(flippedRegionRect);
337
338 transformState.move(renderRegion->contentBoxRect().location() - flippedRegio nRect.location());
339
340 return renderRegion;
341 }
342
343 RenderRegion* RenderFlowThread::firstRegion() const 318 RenderRegion* RenderFlowThread::firstRegion() const
344 { 319 {
345 if (!hasValidRegionInfo()) 320 if (!hasValidRegionInfo())
346 return 0; 321 return 0;
347 return m_regionList.first(); 322 return m_regionList.first();
348 } 323 }
349 324
350 RenderRegion* RenderFlowThread::lastRegion() const 325 RenderRegion* RenderFlowThread::lastRegion() const
351 { 326 {
352 if (!hasValidRegionInfo()) 327 if (!hasValidRegionInfo())
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
551 } 526 }
552 527
553 void RenderFlowThread::RegionSearchAdapter::collectIfNeeded(const RegionInterval & interval) 528 void RenderFlowThread::RegionSearchAdapter::collectIfNeeded(const RegionInterval & interval)
554 { 529 {
555 if (m_result) 530 if (m_result)
556 return; 531 return;
557 if (interval.low() <= m_offset && interval.high() > m_offset) 532 if (interval.low() <= m_offset && interval.high() > m_offset)
558 m_result = interval.data(); 533 m_result = interval.data();
559 } 534 }
560 535
561 void RenderFlowThread::mapLocalToContainer(const RenderLayerModelObject* repaint Container, TransformState& transformState, MapCoordinatesFlags mode, bool* wasFi xed) const
562 {
563 if (this == repaintContainer)
564 return;
565
566 if (RenderRegion* region = mapFromFlowToRegion(transformState)) {
567 // FIXME: The cast below is probably not the best solution, we may need to find a better way.
568 static_cast<const RenderObject*>(region)->mapLocalToContainer(region->co ntainerForRepaint(), transformState, mode, wasFixed);
569 } else {
570 // This will happen for multicol when the flow thread is empty.
571 RenderBlockFlow::mapLocalToContainer(repaintContainer, transformState, m ode, wasFixed);
572 }
573 }
574
575 CurrentRenderFlowThreadMaintainer::CurrentRenderFlowThreadMaintainer(RenderFlowT hread* renderFlowThread) 536 CurrentRenderFlowThreadMaintainer::CurrentRenderFlowThreadMaintainer(RenderFlowT hread* renderFlowThread)
576 : m_renderFlowThread(renderFlowThread) 537 : m_renderFlowThread(renderFlowThread)
577 , m_previousRenderFlowThread(0) 538 , m_previousRenderFlowThread(0)
578 { 539 {
579 if (!m_renderFlowThread) 540 if (!m_renderFlowThread)
580 return; 541 return;
581 RenderView* view = m_renderFlowThread->view(); 542 RenderView* view = m_renderFlowThread->view();
582 m_previousRenderFlowThread = view->flowThreadController()->currentRenderFlow Thread(); 543 m_previousRenderFlowThread = view->flowThreadController()->currentRenderFlow Thread();
583 view->flowThreadController()->setCurrentRenderFlowThread(m_renderFlowThread) ; 544 view->flowThreadController()->setCurrentRenderFlowThread(m_renderFlowThread) ;
584 } 545 }
585 546
586 CurrentRenderFlowThreadMaintainer::~CurrentRenderFlowThreadMaintainer() 547 CurrentRenderFlowThreadMaintainer::~CurrentRenderFlowThreadMaintainer()
587 { 548 {
588 if (!m_renderFlowThread) 549 if (!m_renderFlowThread)
589 return; 550 return;
590 RenderView* view = m_renderFlowThread->view(); 551 RenderView* view = m_renderFlowThread->view();
591 ASSERT(view->flowThreadController()->currentRenderFlowThread() == m_renderFl owThread); 552 ASSERT(view->flowThreadController()->currentRenderFlowThread() == m_renderFl owThread);
592 view->flowThreadController()->setCurrentRenderFlowThread(m_previousRenderFlo wThread); 553 view->flowThreadController()->setCurrentRenderFlowThread(m_previousRenderFlo wThread);
593 } 554 }
594 555
595 556
596 } // namespace WebCore 557 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/core/rendering/RenderFlowThread.h ('k') | Source/core/rendering/RenderMultiColumnFlowThread.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698