mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-14 12:13:22 +00:00
Implemented smart detection of character format (to be used for next text type) depending on last arrow key usage
This commit is contained in:
parent
79a8c1d47f
commit
5745def7d6
@ -2863,6 +2863,23 @@ EDT_ClipboardResult CEditBuffer::DeleteChar(XP_Bool bForward, XP_Bool bTyping)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// After deleting at a boundary between elements,
|
||||||
|
// caret is always at the end of the current element
|
||||||
|
// Check for this and move to the beginning of next element
|
||||||
|
// and set flag to use format of this element
|
||||||
|
// Note that testing for bForward means Backspace key will
|
||||||
|
/// always use format of element to the left.
|
||||||
|
// TODO: Is that the correct thing to to?
|
||||||
|
CEditElement *pNext = m_pCurrent->GetNextSibling();
|
||||||
|
m_bUseCurrentTextFormat = ( bForward && m_pCurrent && m_pCurrent->IsText() &&
|
||||||
|
(m_iCurrentOffset == m_pCurrent->Text()->GetLen()) &&
|
||||||
|
pNext && pNext->IsText() &&
|
||||||
|
pNext->Text()->GetLen() > 0 ) ? TRUE : FALSE;
|
||||||
|
if( m_bUseCurrentTextFormat )
|
||||||
|
{
|
||||||
|
// We need to move insert point so m_pCurrent = pNext;
|
||||||
|
SetInsertPoint(pNext->Leaf(), 0, m_bCurrentStickyAfter);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -3172,16 +3189,15 @@ void CEditBuffer::NavigateChunk( XP_Bool bSelect, intn chunkType, XP_Bool bForwa
|
|||||||
else {
|
else {
|
||||||
VALIDATE_TREE(this);
|
VALIDATE_TREE(this);
|
||||||
ClearPhantomInsertPoint();
|
ClearPhantomInsertPoint();
|
||||||
m_bUseCurrentTextFormat = FALSE;
|
|
||||||
ClearMove(); /* Arrow keys clear the up/down target position */
|
ClearMove(); /* Arrow keys clear the up/down target position */
|
||||||
BeginSelection();
|
BeginSelection();
|
||||||
LO_NavigateChunk( m_pContext, chunkType, bSelect, bForward );
|
LO_NavigateChunk( m_pContext, chunkType, bSelect, bForward );
|
||||||
EndSelection();
|
EndSelection();
|
||||||
DoneTyping();
|
DoneTyping();
|
||||||
if( !bForward && m_pCurrent && m_pCurrent->IsText() && m_iCurrentOffset == 0 )
|
// If moving from right to left with arrow or Home,
|
||||||
{
|
// then set flag to use format to the right of caret upon next text insert
|
||||||
m_bUseCurrentTextFormat = TRUE;
|
m_bUseCurrentTextFormat = (!bForward && m_pCurrent && m_pCurrent->IsText()
|
||||||
}
|
&& m_iCurrentOffset == 0) ? TRUE : FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4947,10 +4963,17 @@ void CEditBuffer::SetHREF( char *pHref, char *pExtra ){
|
|||||||
|
|
||||||
// Use this only when setting one attribute at a time
|
// Use this only when setting one attribute at a time
|
||||||
// Always make Superscript and Subscript mutually exclusive - very tricky!
|
// Always make Superscript and Subscript mutually exclusive - very tricky!
|
||||||
void CEditBuffer::FormatCharacter( ED_TextFormat tf ){
|
void CEditBuffer::FormatCharacter( ED_TextFormat tf )
|
||||||
|
{
|
||||||
VALIDATE_TREE(this);
|
VALIDATE_TREE(this);
|
||||||
CEditSelection selection;
|
CEditSelection selection;
|
||||||
GetSelection(selection);
|
GetSelection(selection);
|
||||||
|
|
||||||
|
// If user is setting the format, then they
|
||||||
|
// will always want to use it instead of the
|
||||||
|
// element to the right of the caret
|
||||||
|
m_bUseCurrentTextFormat = FALSE;
|
||||||
|
|
||||||
if ( selection.IsContainerEnd() )
|
if ( selection.IsContainerEnd() )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -5172,6 +5195,11 @@ void CEditBuffer::SetCharacterData( EDT_CharacterData *pData )
|
|||||||
VALIDATE_TREE(this);
|
VALIDATE_TREE(this);
|
||||||
CEditSelection selection;
|
CEditSelection selection;
|
||||||
GetSelection(selection);
|
GetSelection(selection);
|
||||||
|
|
||||||
|
// We are setting data at caret, so clear flag
|
||||||
|
// to use style to the right of caret
|
||||||
|
m_bUseCurrentTextFormat = FALSE;
|
||||||
|
|
||||||
if ( selection.IsContainerEnd() )
|
if ( selection.IsContainerEnd() )
|
||||||
return;
|
return;
|
||||||
else if( selection.AnyLeavesSelected() ){
|
else if( selection.AnyLeavesSelected() ){
|
||||||
@ -5273,6 +5301,7 @@ void CEditBuffer::SetCharacterDataAtOffset( EDT_CharacterData *pData,
|
|||||||
CEditSelection sel = PersistentToEphemeral( perSel );
|
CEditSelection sel = PersistentToEphemeral( perSel );
|
||||||
|
|
||||||
SetCharacterDataSelection( pData, sel, TRUE );
|
SetCharacterDataSelection( pData, sel, TRUE );
|
||||||
|
m_bUseCurrentTextFormat = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CEditBuffer::SetRefresh( XP_Bool bRefreshOn ){
|
void CEditBuffer::SetRefresh( XP_Bool bRefreshOn ){
|
||||||
@ -11074,7 +11103,6 @@ void CEditBuffer::StartSelection( int32 x, int32 y, XP_Bool doubleClick ){
|
|||||||
LO_Click( m_pContext, x, y, FALSE );
|
LO_Click( m_pContext, x, y, FALSE );
|
||||||
#endif /* LAYERS */
|
#endif /* LAYERS */
|
||||||
}
|
}
|
||||||
CEditElement *pPrev;
|
|
||||||
// If we set caret at beginning of a text element,
|
// If we set caret at beginning of a text element,
|
||||||
// use its formating with next text typed
|
// use its formating with next text typed
|
||||||
m_bUseCurrentTextFormat = (m_pCurrent && m_pCurrent->IsText() && m_iCurrentOffset == 0 ) ? TRUE : FALSE;
|
m_bUseCurrentTextFormat = (m_pCurrent && m_pCurrent->IsText() && m_iCurrentOffset == 0 ) ? TRUE : FALSE;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user