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

Side by Side Diff: Source/core/editing/VisiblePosition.cpp

Issue 20681004: Make first-letter style to work with editing Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: 2013-08-08T13:29:08 Created 7 years, 4 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) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv ed. 2 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv ed.
3 * Portions Copyright (c) 2011 Motorola Mobility, Inc. All rights reserved. 3 * Portions Copyright (c) 2011 Motorola Mobility, Inc. All rights reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions 6 * modification, are permitted provided that the following conditions
7 * are met: 7 * are met:
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 21 matching lines...) Expand all
32 #include "bindings/v8/ExceptionState.h" 32 #include "bindings/v8/ExceptionState.h"
33 #include "core/dom/Document.h" 33 #include "core/dom/Document.h"
34 #include "core/dom/Range.h" 34 #include "core/dom/Range.h"
35 #include "core/dom/Text.h" 35 #include "core/dom/Text.h"
36 #include "core/editing/VisibleUnits.h" 36 #include "core/editing/VisibleUnits.h"
37 #include "core/editing/htmlediting.h" 37 #include "core/editing/htmlediting.h"
38 #include "core/html/HTMLElement.h" 38 #include "core/html/HTMLElement.h"
39 #include "core/html/HTMLHtmlElement.h" 39 #include "core/html/HTMLHtmlElement.h"
40 #include "core/platform/graphics/FloatQuad.h" 40 #include "core/platform/graphics/FloatQuad.h"
41 #include "core/rendering/RenderBlock.h" 41 #include "core/rendering/RenderBlock.h"
42 #include "core/rendering/RenderText.h"
42 #include "core/rendering/RootInlineBox.h" 43 #include "core/rendering/RootInlineBox.h"
43 #include "wtf/text/CString.h" 44 #include "wtf/text/CString.h"
44 45
45 namespace WebCore { 46 namespace WebCore {
46 47
47 using namespace HTMLNames; 48 using namespace HTMLNames;
48 49
49 VisiblePosition::VisiblePosition(const Position &pos, EAffinity affinity) 50 VisiblePosition::VisiblePosition(const Position &pos, EAffinity affinity)
50 { 51 {
51 init(pos, affinity); 52 init(pos, affinity);
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
241 if (box->bidiLevel() == level) 242 if (box->bidiLevel() == level)
242 break; 243 break;
243 level = box->bidiLevel(); 244 level = box->bidiLevel();
244 } 245 }
245 renderer = box->renderer(); 246 renderer = box->renderer();
246 offset = primaryDirection == LTR ? box->caretMinOffset() : box-> caretMaxOffset(); 247 offset = primaryDirection == LTR ? box->caretMinOffset() : box-> caretMaxOffset();
247 } 248 }
248 break; 249 break;
249 } 250 }
250 251
252 if (renderer->isText())
253 offset += toRenderText(renderer)->textStartOffset();
251 p = createLegacyEditingPosition(renderer->node(), offset); 254 p = createLegacyEditingPosition(renderer->node(), offset);
252 255
253 if ((p.isCandidate() && p.downstream() != downstreamStart) || p.atStartO fTree() || p.atEndOfTree()) 256 if ((p.isCandidate() && p.downstream() != downstreamStart) || p.atStartO fTree() || p.atEndOfTree())
254 return p; 257 return p;
255 258
256 ASSERT(p != m_deepPosition); 259 ASSERT(p != m_deepPosition);
257 } 260 }
258 } 261 }
259 262
260 VisiblePosition VisiblePosition::left(bool stayInEditableContent) const 263 VisiblePosition VisiblePosition::left(bool stayInEditableContent) const
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
409 if (box->bidiLevel() == level) 412 if (box->bidiLevel() == level)
410 break; 413 break;
411 level = box->bidiLevel(); 414 level = box->bidiLevel();
412 } 415 }
413 renderer = box->renderer(); 416 renderer = box->renderer();
414 offset = primaryDirection == LTR ? box->caretMaxOffset() : box-> caretMinOffset(); 417 offset = primaryDirection == LTR ? box->caretMaxOffset() : box-> caretMinOffset();
415 } 418 }
416 break; 419 break;
417 } 420 }
418 421
422 if (renderer->isText())
423 offset += toRenderText(renderer)->textStartOffset();
419 p = createLegacyEditingPosition(renderer->node(), offset); 424 p = createLegacyEditingPosition(renderer->node(), offset);
420 425
421 if ((p.isCandidate() && p.downstream() != downstreamStart) || p.atStartO fTree() || p.atEndOfTree()) 426 if ((p.isCandidate() && p.downstream() != downstreamStart) || p.atStartO fTree() || p.atEndOfTree())
422 return p; 427 return p;
423 428
424 ASSERT(p != m_deepPosition); 429 ASSERT(p != m_deepPosition);
425 } 430 }
426 } 431 }
427 432
428 VisiblePosition VisiblePosition::right(bool stayInEditableContent) const 433 VisiblePosition VisiblePosition::right(bool stayInEditableContent) const
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
596 601
597 return textNode->data().characterStartingAt(offset); 602 return textNode->data().characterStartingAt(offset);
598 } 603 }
599 604
600 LayoutRect VisiblePosition::localCaretRect(RenderObject*& renderer) const 605 LayoutRect VisiblePosition::localCaretRect(RenderObject*& renderer) const
601 { 606 {
602 if (m_deepPosition.isNull()) { 607 if (m_deepPosition.isNull()) {
603 renderer = 0; 608 renderer = 0;
604 return IntRect(); 609 return IntRect();
605 } 610 }
606 Node* node = m_deepPosition.anchorNode(); 611 renderer = m_deepPosition.renderer();
607
608 renderer = node->renderer();
609 if (!renderer) 612 if (!renderer)
610 return LayoutRect(); 613 return LayoutRect();
611 614
612 InlineBox* inlineBox; 615 InlineBox* inlineBox;
613 int caretOffset; 616 int caretOffset;
614 getInlineBoxAndOffset(inlineBox, caretOffset); 617 getInlineBoxAndOffset(inlineBox, caretOffset);
615 618
616 if (inlineBox) 619 if (inlineBox)
617 renderer = inlineBox->renderer(); 620 renderer = inlineBox->renderer();
618 621
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
754 if (vpos) 757 if (vpos)
755 vpos->showTreeForThis(); 758 vpos->showTreeForThis();
756 } 759 }
757 760
758 void showTree(const WebCore::VisiblePosition& vpos) 761 void showTree(const WebCore::VisiblePosition& vpos)
759 { 762 {
760 vpos.showTreeForThis(); 763 vpos.showTreeForThis();
761 } 764 }
762 765
763 #endif 766 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698