Changeset 157517 in webkit


Ignore:
Timestamp:
Oct 16, 2013, 7:33:31 AM (12 years ago)
Author:
Antti Koivisto
Message:

Move code for finding rendered character offset to RenderTextLineBoxes
https://bugs.webkit.org/show_bug.cgi?id=122892

Reviewed by Andreas Kling.

  • rendering/RenderText.cpp:

(WebCore::RenderText::countRenderedCharacterOffsets):
(WebCore::RenderText::containsRenderedCharacterOffset):

Renamed for consistency.

  • rendering/RenderTextLineBoxes.cpp:

(WebCore::RenderTextLineBoxes::countCharacterOffsets):

This used to be Position::renderedPosition.

Location:
trunk/Source/WebCore
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r157515 r157517  
     12013-10-16  Antti Koivisto  <antti@apple.com>
     2
     3        Move code for finding rendered character offset to RenderTextLineBoxes
     4        https://bugs.webkit.org/show_bug.cgi?id=122892
     5
     6        Reviewed by Andreas Kling.
     7
     8        * rendering/RenderText.cpp:
     9        (WebCore::RenderText::countRenderedCharacterOffsets):
     10        (WebCore::RenderText::containsRenderedCharacterOffset):
     11       
     12            Renamed for consistency.
     13
     14        * rendering/RenderTextLineBoxes.cpp:
     15        (WebCore::RenderTextLineBoxes::countCharacterOffsets):
     16       
     17            This used to be Position::renderedPosition.
     18
    1192013-10-16  Andreas Kling  <akling@apple.com>
    220
  • trunk/Source/WebCore/dom/Position.cpp

    r157514 r157517  
    480480}
    481481
    482 int Position::renderedOffset() const
    483 {
    484     if (!deprecatedNode()->isTextNode())
    485         return m_offset;
    486    
    487     if (!deprecatedNode()->renderer())
    488         return m_offset;
    489                    
    490     int result = 0;
    491     RenderText* textRenderer = toText(deprecatedNode())->renderer();
    492     for (InlineTextBox *box = textRenderer->firstTextBox(); box; box = box->nextTextBox()) {
    493         int start = box->start();
    494         int end = box->start() + box->len();
    495         if (m_offset < start)
    496             return result;
    497         if (m_offset <= end) {
    498             result += m_offset - start;
    499             return result;
    500         }
    501         result += box->len();
    502     }
    503     return result;
    504 }
    505 
    506482// return first preceding DOM position rendered at a different location, or "this"
    507483Position Position::previousCharacterPosition(EAffinity affinity) const
     
    976952        return false;
    977953   
    978     return renderer->containsCharacterOffset(m_offset);
     954    return renderer->containsRenderedCharacterOffset(m_offset);
    979955}
    980956
     
    10291005        return false;
    10301006
    1031     int thisRenderedOffset = renderedOffset();
    1032     int posRenderedOffset = pos.renderedOffset();
     1007    int thisRenderedOffset = renderer->isText() ? toRenderText(renderer)->countRenderedCharacterOffsetsUntil(m_offset) : m_offset;
     1008    int posRenderedOffset = posRenderer->isText() ? toRenderText(posRenderer)->countRenderedCharacterOffsetsUntil(pos.m_offset) : pos.m_offset;
    10331009
    10341010    if (renderer == posRenderer && thisRenderedOffset == posRenderedOffset)
  • trunk/Source/WebCore/dom/Position.h

    r157514 r157517  
    208208private:
    209209    int offsetForPositionAfterAnchor() const;
    210 
    211     int renderedOffset() const;
    212 
    213210   
    214211    Position previousCharacterPosition(EAffinity) const;
  • trunk/Source/WebCore/rendering/RenderText.cpp

    r157514 r157517  
    11521152}
    11531153
    1154 bool RenderText::containsCharacterOffset(unsigned offset) const
     1154unsigned RenderText::countRenderedCharacterOffsetsUntil(unsigned offset) const
     1155{
     1156    return m_lineBoxes.countCharacterOffsetsUntil(offset);
     1157}
     1158
     1159bool RenderText::containsRenderedCharacterOffset(unsigned offset) const
    11551160{
    11561161    return m_lineBoxes.containsOffset(*this, offset, RenderTextLineBoxes::CharacterOffset);
  • trunk/Source/WebCore/rendering/RenderText.h

    r157514 r157517  
    121121    virtual int caretMinOffset() const OVERRIDE;
    122122    virtual int caretMaxOffset() const OVERRIDE;
    123     bool containsCharacterOffset(unsigned) const;
     123    unsigned countRenderedCharacterOffsetsUntil(unsigned) const;
     124    bool containsRenderedCharacterOffset(unsigned) const;
    124125    bool containsCaretOffset(unsigned) const;
    125126    bool hasRenderedText() const;
  • trunk/Source/WebCore/rendering/RenderTextLineBoxes.cpp

    r157514 r157517  
    244244}
    245245
     246unsigned RenderTextLineBoxes::countCharacterOffsetsUntil(unsigned offset) const
     247{
     248    unsigned result = 0;
     249    for (auto box = m_first; box; box = box->nextTextBox()) {
     250        if (offset < box->start())
     251            return result;
     252        if (offset <= box->start() + box->len()) {
     253            result += offset - box->start();
     254            return result;
     255        }
     256        result += box->len();
     257    }
     258    return result;
     259}
     260
    246261enum ShouldAffinityBeDownstream { AlwaysDownstream, AlwaysUpstream, UpstreamIfPositionIsNotAtStart };
    247262
  • trunk/Source/WebCore/rendering/RenderTextLineBoxes.h

    r157514 r157517  
    6363    enum OffsetType { CaretOffset, CharacterOffset };
    6464    bool containsOffset(const RenderText&, unsigned, OffsetType) const;
     65    unsigned countCharacterOffsetsUntil(unsigned) const;
    6566
    6667    VisiblePosition positionForPoint(const RenderText&, const LayoutPoint&) const;
Note: See TracChangeset for help on using the changeset viewer.