void WebPage::platformEditorState(Frame& frame, EditorState& result, IncludePostLayoutDataHint shouldIncludePostLayoutData) const { if (shouldIncludePostLayoutData == IncludePostLayoutDataHint::No) { result.isMissingPostLayoutData = true; return; } auto& postLayoutData = result.postLayoutData(); postLayoutData.caretRectAtStart = frame.selection().absoluteCaretBounds(); const VisibleSelection& selection = frame.selection().selection(); if (selection.isNone()) return; const Editor& editor = frame.editor(); if (selection.isRange()) { if (editor.selectionHasStyle(CSSPropertyFontWeight, "bold") == TrueTriState) postLayoutData.typingAttributes |= AttributeBold; if (editor.selectionHasStyle(CSSPropertyFontStyle, "italic") == TrueTriState) postLayoutData.typingAttributes |= AttributeItalics; if (editor.selectionHasStyle(CSSPropertyWebkitTextDecorationsInEffect, "underline") == TrueTriState) postLayoutData.typingAttributes |= AttributeUnderline; if (editor.selectionHasStyle(CSSPropertyWebkitTextDecorationsInEffect, "line-through") == TrueTriState) postLayoutData.typingAttributes |= AttributeStrikeThrough; } else if (selection.isCaret()) { if (editor.selectionStartHasStyle(CSSPropertyFontWeight, "bold")) postLayoutData.typingAttributes |= AttributeBold; if (editor.selectionStartHasStyle(CSSPropertyFontStyle, "italic")) postLayoutData.typingAttributes |= AttributeItalics; if (editor.selectionStartHasStyle(CSSPropertyWebkitTextDecorationsInEffect, "underline")) postLayoutData.typingAttributes |= AttributeUnderline; if (editor.selectionStartHasStyle(CSSPropertyWebkitTextDecorationsInEffect, "line-through")) postLayoutData.typingAttributes |= AttributeStrikeThrough; } }
bool EditorState::decode(IPC::ArgumentDecoder& decoder, EditorState& result) { if (!decoder.decode(result.shouldIgnoreCompositionSelectionChange)) return false; if (!decoder.decode(result.selectionIsNone)) return false; if (!decoder.decode(result.selectionIsRange)) return false; if (!decoder.decode(result.isContentEditable)) return false; if (!decoder.decode(result.isContentRichlyEditable)) return false; if (!decoder.decode(result.isInPasswordField)) return false; if (!decoder.decode(result.isInPlugin)) return false; if (!decoder.decode(result.hasComposition)) return false; if (!decoder.decode(result.isMissingPostLayoutData)) return false; #if PLATFORM(IOS) || PLATFORM(GTK) || PLATFORM(MAC) if (!result.isMissingPostLayoutData) { if (!PostLayoutData::decode(decoder, result.postLayoutData())) return false; } #endif #if PLATFORM(IOS) if (!decoder.decode(result.firstMarkedRect)) return false; if (!decoder.decode(result.lastMarkedRect)) return false; if (!decoder.decode(result.markedText)) return false; #endif return true; }