webengine/osswebengine/WebCore/rendering/RenderText.cpp
changeset 1 7c90e6132015
parent 0 dd21522fd290
child 15 60c5402cb945
equal deleted inserted replaced
0:dd21522fd290 1:7c90e6132015
   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 {