equal
deleted
inserted
replaced
767 } |
767 } |
768 |
768 |
769 containingBlock()->setSelectionState(state); |
769 containingBlock()->setSelectionState(state); |
770 } |
770 } |
771 |
771 |
772 void RenderText::setTextWithOffset(PassRefPtr<StringImpl> text, unsigned offset, unsigned len, bool force) |
772 void RenderText::setTextWithOffset(PassRefPtr<StringImpl> text, unsigned offset, unsigned len, bool force, bool backspace) |
773 { |
773 { |
774 unsigned oldLen = textLength(); |
774 unsigned oldLen = textLength(); |
775 unsigned newLen = text->length(); |
775 unsigned newLen = text->length(); |
776 int delta = newLen - oldLen; |
776 int delta = newLen - oldLen; |
777 unsigned end = len ? offset + len - 1 : offset; |
777 unsigned end = len ? offset + len - 1 : offset; |
829 if (curr->lineBreakObj() == this && curr->lineBreakPos() > end) |
829 if (curr->lineBreakObj() == this && curr->lineBreakPos() > end) |
830 curr->setLineBreakPos(curr->lineBreakPos() + delta); |
830 curr->setLineBreakPos(curr->lineBreakPos() + delta); |
831 } |
831 } |
832 |
832 |
833 m_linesDirty = dirtiedLines; |
833 m_linesDirty = dirtiedLines; |
834 setText(text, force); |
834 setText(text, force, backspace); |
835 } |
835 } |
836 |
836 |
837 static inline bool isInlineFlowOrEmptyText(RenderObject* o) |
837 static inline bool isInlineFlowOrEmptyText(RenderObject* o) |
838 { |
838 { |
839 if (o->isInlineFlow()) |
839 if (o->isInlineFlow()) |
858 if (StringImpl* previousString = static_cast<RenderText*>(previousText)->text()) |
858 if (StringImpl* previousString = static_cast<RenderText*>(previousText)->text()) |
859 prev = (*previousString)[previousString->length() - 1]; |
859 prev = (*previousString)[previousString->length() - 1]; |
860 return prev; |
860 return prev; |
861 } |
861 } |
862 |
862 |
863 void RenderText::setTextInternal(PassRefPtr<StringImpl> text) |
863 void RenderText::setTextInternal(PassRefPtr<StringImpl> text, bool backspace) |
864 { |
864 { |
865 m_text = text; |
865 m_text = text; |
866 ASSERT(m_text); |
866 ASSERT(m_text); |
867 |
867 |
868 m_text = m_text->replace('\\', backslashAsCurrencySymbol()); |
868 m_text = m_text->replace('\\', backslashAsCurrencySymbol()); |
922 break; |
922 break; |
923 case TSCIRCLE: |
923 case TSCIRCLE: |
924 m_text = m_text->secureShowLast(whiteBullet); |
924 m_text = m_text->secureShowLast(whiteBullet); |
925 break; |
925 break; |
926 case TSDISC: |
926 case TSDISC: |
927 m_text = m_text->secureShowLast(bullet); |
927 if(backspace){ |
|
928 m_text = m_text->secure(bullet); |
|
929 } |
|
930 else{ |
|
931 m_text = m_text->secureShowLast(bullet); |
|
932 } |
|
933 |
928 break; |
934 break; |
929 case TSSQUARE: |
935 case TSSQUARE: |
930 m_text = m_text->secureShowLast(blackSquare); |
936 m_text = m_text->secureShowLast(blackSquare); |
931 } |
937 } |
932 |
938 |
958 ASSERT(!isBR() || (textLength() == 1 && (*m_text)[0] == '\n')); |
964 ASSERT(!isBR() || (textLength() == 1 && (*m_text)[0] == '\n')); |
959 |
965 |
960 m_isAllASCII = charactersAreAllASCII(m_text.get()); |
966 m_isAllASCII = charactersAreAllASCII(m_text.get()); |
961 } |
967 } |
962 |
968 |
963 void RenderText::setText(PassRefPtr<StringImpl> text, bool force) |
969 void RenderText::setText(PassRefPtr<StringImpl> text, bool force, bool backspace) |
964 { |
970 { |
965 ASSERT(text); |
971 ASSERT(text); |
966 |
972 |
967 if (!force && equal(m_text.get(), text.get())) |
973 if (!force && equal(m_text.get(), text.get())) |
968 return; |
974 return; |
969 |
975 |
970 setTextInternal(text); |
976 setTextInternal(text, backspace); |
971 setNeedsLayoutAndPrefWidthsRecalc(); |
977 setNeedsLayoutAndPrefWidthsRecalc(); |
972 } |
978 } |
973 |
979 |
974 int RenderText::height() const |
980 int RenderText::height() const |
975 { |
981 { |