Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(49)

Side by Side Diff: third_party/WebKit/Source/core/editing/Editor.cpp

Issue 2636043002: Revert of [EditCommandSource] Pass source to |CompositEditCommand| and |TypingCommand| (3/3) (Closed)
Patch Set: Remove command source in ApplyStyleCommandTest.cpp Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | third_party/WebKit/Source/core/editing/InputMethodController.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2006, 2007, 2008, 2011 Apple Inc. All rights reserved. 2 * Copyright (C) 2006, 2007, 2008, 2011 Apple Inc. All rights reserved.
3 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) 3 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions 6 * modification, are permitted provided that the following conditions
7 * are met: 7 * are met:
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after
345 bool killRing, 345 bool killRing,
346 bool isTypingAction) { 346 bool isTypingAction) {
347 if (!canEdit()) 347 if (!canEdit())
348 return false; 348 return false;
349 349
350 EditingState editingState; 350 EditingState editingState;
351 if (frame().selection().isRange()) { 351 if (frame().selection().isRange()) {
352 if (isTypingAction) { 352 if (isTypingAction) {
353 DCHECK(frame().document()); 353 DCHECK(frame().document());
354 TypingCommand::deleteKeyPressed( 354 TypingCommand::deleteKeyPressed(
355 *frame().document(), source, 355 *frame().document(),
356 canSmartCopyOrDelete() ? TypingCommand::SmartDelete : 0, granularity); 356 canSmartCopyOrDelete() ? TypingCommand::SmartDelete : 0, granularity);
357 revealSelectionAfterEditingOperation(); 357 revealSelectionAfterEditingOperation();
358 } else { 358 } else {
359 if (killRing) 359 if (killRing)
360 addToKillRing(selectedRange()); 360 addToKillRing(selectedRange());
361 deleteSelectionWithSmartDelete( 361 deleteSelectionWithSmartDelete(
362 source, 362 source,
363 canSmartCopyOrDelete() ? DeleteMode::Smart : DeleteMode::Simple, 363 canSmartCopyOrDelete() ? DeleteMode::Smart : DeleteMode::Simple,
364 deletionInputTypeFromTextGranularity(direction, granularity)); 364 deletionInputTypeFromTextGranularity(direction, granularity));
365 // Implicitly calls revealSelectionAfterEditingOperation(). 365 // Implicitly calls revealSelectionAfterEditingOperation().
366 } 366 }
367 } else { 367 } else {
368 TypingCommand::Options options = 0; 368 TypingCommand::Options options = 0;
369 if (canSmartCopyOrDelete()) 369 if (canSmartCopyOrDelete())
370 options |= TypingCommand::SmartDelete; 370 options |= TypingCommand::SmartDelete;
371 if (killRing) 371 if (killRing)
372 options |= TypingCommand::KillRing; 372 options |= TypingCommand::KillRing;
373 switch (direction) { 373 switch (direction) {
374 case DeleteDirection::Forward: 374 case DeleteDirection::Forward:
375 DCHECK(frame().document()); 375 DCHECK(frame().document());
376 TypingCommand::forwardDeleteKeyPressed( 376 TypingCommand::forwardDeleteKeyPressed(
377 *frame().document(), source, &editingState, options, granularity); 377 *frame().document(), &editingState, options, granularity);
378 if (editingState.isAborted()) 378 if (editingState.isAborted())
379 return false; 379 return false;
380 break; 380 break;
381 case DeleteDirection::Backward: 381 case DeleteDirection::Backward:
382 DCHECK(frame().document()); 382 DCHECK(frame().document());
383 TypingCommand::deleteKeyPressed(*frame().document(), source, options, 383 TypingCommand::deleteKeyPressed(*frame().document(), options,
384 granularity); 384 granularity);
385 break; 385 break;
386 } 386 }
387 revealSelectionAfterEditingOperation(); 387 revealSelectionAfterEditingOperation();
388 } 388 }
389 389
390 // FIXME: We should to move this down into deleteKeyPressed. 390 // FIXME: We should to move this down into deleteKeyPressed.
391 // clear the "start new kill ring sequence" setting, because it was set to 391 // clear the "start new kill ring sequence" setting, because it was set to
392 // true when the selection was updated by deleting the range 392 // true when the selection was updated by deleting the range
393 if (killRing) 393 if (killRing)
394 setStartNewKillRingSequence(false); 394 setStartNewKillRingSequence(false);
395 395
396 return true; 396 return true;
397 } 397 }
398 398
399 // TODO(chongz): Pass |EditCommandSource| to |CompositeEditCommand|.
399 void Editor::deleteSelectionWithSmartDelete( 400 void Editor::deleteSelectionWithSmartDelete(
400 EditCommandSource source, 401 EditCommandSource,
401 DeleteMode deleteMode, 402 DeleteMode deleteMode,
402 InputEvent::InputType inputType, 403 InputEvent::InputType inputType,
403 const Position& referenceMovePosition) { 404 const Position& referenceMovePosition) {
404 if (frame().selection().isNone()) 405 if (frame().selection().isNone())
405 return; 406 return;
406 407
407 const bool kMergeBlocksAfterDelete = true; 408 const bool kMergeBlocksAfterDelete = true;
408 const bool kExpandForSpecialElements = false; 409 const bool kExpandForSpecialElements = false;
409 const bool kSanitizeMarkup = true; 410 const bool kSanitizeMarkup = true;
410 DCHECK(frame().document()); 411 DCHECK(frame().document());
411 DeleteSelectionCommand::create( 412 DeleteSelectionCommand::create(
412 *frame().document(), deleteMode == DeleteMode::Smart, 413 *frame().document(), deleteMode == DeleteMode::Smart,
413 kMergeBlocksAfterDelete, kExpandForSpecialElements, kSanitizeMarkup, 414 kMergeBlocksAfterDelete, kExpandForSpecialElements, kSanitizeMarkup,
414 inputType, referenceMovePosition) 415 inputType, referenceMovePosition)
415 ->apply(source); 416 ->apply();
416 } 417 }
417 418
418 void Editor::pasteAsPlainText(const String& pastingText, bool smartReplace) { 419 void Editor::pasteAsPlainText(const String& pastingText, bool smartReplace) {
419 Element* target = findEventTargetFromSelection(); 420 Element* target = findEventTargetFromSelection();
420 if (!target) 421 if (!target)
421 return; 422 return;
422 target->dispatchEvent(TextEvent::createForPlainTextPaste( 423 target->dispatchEvent(TextEvent::createForPlainTextPaste(
423 frame().domWindow(), pastingText, smartReplace)); 424 frame().domWindow(), pastingText, smartReplace));
424 } 425 }
425 426
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
583 // invalidate clipboard here for security 584 // invalidate clipboard here for security
584 dataTransfer->setAccessPolicy(DataTransferNumb); 585 dataTransfer->setAccessPolicy(DataTransferNumb);
585 586
586 return !noDefaultProcessing; 587 return !noDefaultProcessing;
587 } 588 }
588 589
589 bool Editor::canSmartReplaceWithPasteboard(Pasteboard* pasteboard) { 590 bool Editor::canSmartReplaceWithPasteboard(Pasteboard* pasteboard) {
590 return smartInsertDeleteEnabled() && pasteboard->canSmartReplace(); 591 return smartInsertDeleteEnabled() && pasteboard->canSmartReplace();
591 } 592 }
592 593
593 void Editor::replaceSelectionWithFragment(EditCommandSource source, 594 // TODO(chongz): Pass |EditCommandSource| to |CompositeEditCommand|.
595 void Editor::replaceSelectionWithFragment(EditCommandSource,
594 DocumentFragment* fragment, 596 DocumentFragment* fragment,
595 bool selectReplacement, 597 bool selectReplacement,
596 bool smartReplace, 598 bool smartReplace,
597 bool matchStyle, 599 bool matchStyle,
598 InputEvent::InputType inputType) { 600 InputEvent::InputType inputType) {
599 DCHECK(!frame().document()->needsLayoutTreeUpdate()); 601 DCHECK(!frame().document()->needsLayoutTreeUpdate());
600 if (frame().selection().isNone() || 602 if (frame().selection().isNone() ||
601 !frame().selection().isContentEditable() || !fragment) 603 !frame().selection().isContentEditable() || !fragment)
602 return; 604 return;
603 605
604 ReplaceSelectionCommand::CommandOptions options = 606 ReplaceSelectionCommand::CommandOptions options =
605 ReplaceSelectionCommand::PreventNesting | 607 ReplaceSelectionCommand::PreventNesting |
606 ReplaceSelectionCommand::SanitizeFragment; 608 ReplaceSelectionCommand::SanitizeFragment;
607 if (selectReplacement) 609 if (selectReplacement)
608 options |= ReplaceSelectionCommand::SelectReplacement; 610 options |= ReplaceSelectionCommand::SelectReplacement;
609 if (smartReplace) 611 if (smartReplace)
610 options |= ReplaceSelectionCommand::SmartReplace; 612 options |= ReplaceSelectionCommand::SmartReplace;
611 if (matchStyle) 613 if (matchStyle)
612 options |= ReplaceSelectionCommand::MatchStyle; 614 options |= ReplaceSelectionCommand::MatchStyle;
613 DCHECK(frame().document()); 615 DCHECK(frame().document());
614 ReplaceSelectionCommand::create(*frame().document(), fragment, options, 616 ReplaceSelectionCommand::create(*frame().document(), fragment, options,
615 inputType) 617 inputType)
616 ->apply(source); 618 ->apply();
617 revealSelectionAfterEditingOperation(); 619 revealSelectionAfterEditingOperation();
618 } 620 }
619 621
620 void Editor::replaceSelectionWithText(EditCommandSource source, 622 void Editor::replaceSelectionWithText(EditCommandSource source,
621 const String& text, 623 const String& text,
622 bool selectReplacement, 624 bool selectReplacement,
623 bool smartReplace, 625 bool smartReplace,
624 InputEvent::InputType inputType) { 626 InputEvent::InputType inputType) {
625 replaceSelectionWithFragment( 627 replaceSelectionWithFragment(
626 source, createFragmentFromText(selectedRange(), text), selectReplacement, 628 source, createFragmentFromText(selectedRange(), text), selectReplacement,
627 smartReplace, true, inputType); 629 smartReplace, true, inputType);
628 } 630 }
629 631
630 // TODO(xiaochengh): Merge it with |replaceSelectionWithFragment()|. 632 // TODO(xiaochengh): Merge it with |replaceSelectionWithFragment()|.
631 void Editor::replaceSelectionAfterDragging(DocumentFragment* fragment, 633 void Editor::replaceSelectionAfterDragging(DocumentFragment* fragment,
632 InsertMode insertMode, 634 InsertMode insertMode,
633 DragSourceType dragSourceType) { 635 DragSourceType dragSourceType) {
634 ReplaceSelectionCommand::CommandOptions options = 636 ReplaceSelectionCommand::CommandOptions options =
635 ReplaceSelectionCommand::SelectReplacement | 637 ReplaceSelectionCommand::SelectReplacement |
636 ReplaceSelectionCommand::PreventNesting; 638 ReplaceSelectionCommand::PreventNesting;
637 if (insertMode == InsertMode::Smart) 639 if (insertMode == InsertMode::Smart)
638 options |= ReplaceSelectionCommand::SmartReplace; 640 options |= ReplaceSelectionCommand::SmartReplace;
639 if (dragSourceType == DragSourceType::PlainTextSource) 641 if (dragSourceType == DragSourceType::PlainTextSource)
640 options |= ReplaceSelectionCommand::MatchStyle; 642 options |= ReplaceSelectionCommand::MatchStyle;
641 DCHECK(frame().document()); 643 DCHECK(frame().document());
642 ReplaceSelectionCommand::create(*frame().document(), fragment, options, 644 ReplaceSelectionCommand::create(*frame().document(), fragment, options,
643 InputEvent::InputType::InsertFromDrop) 645 InputEvent::InputType::InsertFromDrop)
644 ->apply(EditCommandSource::kMenuOrKeyBinding); 646 ->apply();
645 } 647 }
646 648
647 bool Editor::deleteSelectionAfterDraggingWithEvents( 649 bool Editor::deleteSelectionAfterDraggingWithEvents(
648 Element* dragSource, 650 Element* dragSource,
649 DeleteMode deleteMode, 651 DeleteMode deleteMode,
650 const Position& referenceMovePosition) { 652 const Position& referenceMovePosition) {
651 if (!dragSource || !dragSource->isConnected()) 653 if (!dragSource || !dragSource->isConnected())
652 return true; 654 return true;
653 655
654 // Dispatch 'beforeinput'. 656 // Dispatch 'beforeinput'.
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
721 if (frame().settings() && frame().settings()->getAccessibilityEnabled()) { 723 if (frame().settings() && frame().settings()->getAccessibilityEnabled()) {
722 Node* node = endingSelection.start().anchorNode(); 724 Node* node = endingSelection.start().anchorNode();
723 if (AXObjectCache* cache = frame().document()->existingAXObjectCache()) 725 if (AXObjectCache* cache = frame().document()->existingAXObjectCache())
724 cache->handleEditableTextContentChanged(node); 726 cache->handleEditableTextContentChanged(node);
725 } 727 }
726 728
727 spellChecker().updateMarkersForWordsAffectedByEditing(true); 729 spellChecker().updateMarkersForWordsAffectedByEditing(true);
728 client().respondToChangedContents(); 730 client().respondToChangedContents();
729 } 731 }
730 732
731 void Editor::removeFormattingAndStyle(EditCommandSource source) { 733 // TODO(chongz): Pass |EditCommandSource| to |CompositeEditCommand|.
734 void Editor::removeFormattingAndStyle(EditCommandSource) {
732 DCHECK(frame().document()); 735 DCHECK(frame().document());
733 RemoveFormatCommand::create(*frame().document())->apply(source); 736 RemoveFormatCommand::create(*frame().document())->apply();
734 } 737 }
735 738
736 void Editor::registerCommandGroup(CompositeEditCommand* commandGroupWrapper) { 739 void Editor::registerCommandGroup(CompositeEditCommand* commandGroupWrapper) {
737 DCHECK(commandGroupWrapper->isCommandGroupWrapper()); 740 DCHECK(commandGroupWrapper->isCommandGroupWrapper());
738 m_lastEditCommand = commandGroupWrapper; 741 m_lastEditCommand = commandGroupWrapper;
739 } 742 }
740 743
741 void Editor::clearLastEditCommand() { 744 void Editor::clearLastEditCommand() {
742 m_lastEditCommand.clear(); 745 m_lastEditCommand.clear();
743 } 746 }
(...skipping 18 matching lines...) Expand all
762 // do nothing 765 // do nothing
763 break; 766 break;
764 case CaretSelection: 767 case CaretSelection:
765 computeAndSetTypingStyle(source, style, inputType); 768 computeAndSetTypingStyle(source, style, inputType);
766 break; 769 break;
767 case RangeSelection: 770 case RangeSelection:
768 if (style) { 771 if (style) {
769 DCHECK(frame().document()); 772 DCHECK(frame().document());
770 ApplyStyleCommand::create(*frame().document(), 773 ApplyStyleCommand::create(*frame().document(),
771 EditingStyle::create(style), inputType) 774 EditingStyle::create(style), inputType)
772 ->apply(source); 775 ->apply();
773 } 776 }
774 break; 777 break;
775 } 778 }
776 } 779 }
777 780
778 void Editor::applyParagraphStyle(EditCommandSource source, 781 // TODO(chongz): Pass |EditCommandSource| to |CompositeEditCommand|.
782 void Editor::applyParagraphStyle(EditCommandSource,
779 StylePropertySet* style, 783 StylePropertySet* style,
780 InputEvent::InputType inputType) { 784 InputEvent::InputType inputType) {
781 if (frame().selection().isNone() || !style) 785 if (frame().selection().isNone() || !style)
782 return; 786 return;
783 DCHECK(frame().document()); 787 DCHECK(frame().document());
784 ApplyStyleCommand::create(*frame().document(), EditingStyle::create(style), 788 ApplyStyleCommand::create(*frame().document(), EditingStyle::create(style),
785 inputType, ApplyStyleCommand::ForceBlockProperties) 789 inputType, ApplyStyleCommand::ForceBlockProperties)
786 ->apply(source); 790 ->apply();
787 } 791 }
788 792
789 void Editor::applyStyleToSelection(EditCommandSource source, 793 void Editor::applyStyleToSelection(EditCommandSource source,
790 StylePropertySet* style, 794 StylePropertySet* style,
791 InputEvent::InputType inputType) { 795 InputEvent::InputType inputType) {
792 if (!style || style->isEmpty() || !canEditRichly()) 796 if (!style || style->isEmpty() || !canEditRichly())
793 return; 797 return;
794 798
795 applyStyle(source, style, inputType); 799 applyStyle(source, style, inputType);
796 } 800 }
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
1004 1008
1005 const VisibleSelection& selection = selectionForCommand(triggeringEvent); 1009 const VisibleSelection& selection = selectionForCommand(triggeringEvent);
1006 if (!selection.isContentEditable()) 1010 if (!selection.isContentEditable())
1007 return false; 1011 return false;
1008 1012
1009 spellChecker().updateMarkersForWordsAffectedByEditing( 1013 spellChecker().updateMarkersForWordsAffectedByEditing(
1010 isSpaceOrNewline(text[0])); 1014 isSpaceOrNewline(text[0]));
1011 1015
1012 // Insert the text 1016 // Insert the text
1013 TypingCommand::insertText( 1017 TypingCommand::insertText(
1014 *selection.start().document(), source, text, selection, 1018 *selection.start().document(), text, selection,
1015 selectInsertedText ? TypingCommand::SelectInsertedText : 0, 1019 selectInsertedText ? TypingCommand::SelectInsertedText : 0,
1016 triggeringEvent && triggeringEvent->isComposition() 1020 triggeringEvent && triggeringEvent->isComposition()
1017 ? TypingCommand::TextCompositionConfirm 1021 ? TypingCommand::TextCompositionConfirm
1018 : TypingCommand::TextCompositionNone); 1022 : TypingCommand::TextCompositionNone);
1019 1023
1020 // Reveal the current selection 1024 // Reveal the current selection
1021 if (LocalFrame* editedFrame = selection.start().document()->frame()) { 1025 if (LocalFrame* editedFrame = selection.start().document()->frame()) {
1022 if (Page* page = editedFrame->page()) { 1026 if (Page* page = editedFrame->page()) {
1023 LocalFrame* focusedOrMainFrame = 1027 LocalFrame* focusedOrMainFrame =
1024 toLocalFrame(page->focusController().focusedOrMainFrame()); 1028 toLocalFrame(page->focusController().focusedOrMainFrame());
1025 focusedOrMainFrame->selection().revealSelection( 1029 focusedOrMainFrame->selection().revealSelection(
1026 ScrollAlignment::alignCenterIfNeeded); 1030 ScrollAlignment::alignCenterIfNeeded);
1027 } 1031 }
1028 } 1032 }
1029 1033
1030 return true; 1034 return true;
1031 } 1035 }
1032 1036
1033 bool Editor::insertLineBreak() { 1037 bool Editor::insertLineBreak() {
1034 if (!canEdit()) 1038 if (!canEdit())
1035 return false; 1039 return false;
1036 1040
1037 VisiblePosition caret = frame().selection().selection().visibleStart(); 1041 VisiblePosition caret = frame().selection().selection().visibleStart();
1038 bool alignToEdge = isEndOfEditableOrNonEditableContent(caret); 1042 bool alignToEdge = isEndOfEditableOrNonEditableContent(caret);
1039 DCHECK(frame().document()); 1043 DCHECK(frame().document());
1040 // we can pass |EditCommandSource::kMenuOrKeyBinding| because 1044 if (!TypingCommand::insertLineBreak(*frame().document()))
1041 // |insertLineBreak()| is only used by |Editor::handleTextEvent()| and
1042 // |Editor::insertParagraphSeparator()|.
1043 if (!TypingCommand::insertLineBreak(*frame().document(),
1044 EditCommandSource::kMenuOrKeyBinding))
1045 return false; 1045 return false;
1046 revealSelectionAfterEditingOperation( 1046 revealSelectionAfterEditingOperation(
1047 alignToEdge ? ScrollAlignment::alignToEdgeIfNeeded 1047 alignToEdge ? ScrollAlignment::alignToEdgeIfNeeded
1048 : ScrollAlignment::alignCenterIfNeeded); 1048 : ScrollAlignment::alignCenterIfNeeded);
1049 1049
1050 return true; 1050 return true;
1051 } 1051 }
1052 1052
1053 bool Editor::insertParagraphSeparator() { 1053 bool Editor::insertParagraphSeparator() {
1054 if (!canEdit()) 1054 if (!canEdit())
1055 return false; 1055 return false;
1056 1056
1057 if (!canEditRichly()) 1057 if (!canEditRichly())
1058 return insertLineBreak(); 1058 return insertLineBreak();
1059 1059
1060 VisiblePosition caret = frame().selection().selection().visibleStart(); 1060 VisiblePosition caret = frame().selection().selection().visibleStart();
1061 bool alignToEdge = isEndOfEditableOrNonEditableContent(caret); 1061 bool alignToEdge = isEndOfEditableOrNonEditableContent(caret);
1062 DCHECK(frame().document()); 1062 DCHECK(frame().document());
1063 EditingState editingState; 1063 EditingState editingState;
1064 // We can |EditCommandSource::kMenuOrKeyBinding| because 1064 if (!TypingCommand::insertParagraphSeparator(*frame().document()))
1065 // |Editor::insertParagraphSeparator()| is only used by
1066 // |Editor::handleTextEvent()|.
1067 if (!TypingCommand::insertParagraphSeparator(
1068 *frame().document(), EditCommandSource::kMenuOrKeyBinding))
1069 return false; 1065 return false;
1070 revealSelectionAfterEditingOperation( 1066 revealSelectionAfterEditingOperation(
1071 alignToEdge ? ScrollAlignment::alignToEdgeIfNeeded 1067 alignToEdge ? ScrollAlignment::alignToEdgeIfNeeded
1072 : ScrollAlignment::alignCenterIfNeeded); 1068 : ScrollAlignment::alignCenterIfNeeded);
1073 1069
1074 return true; 1070 return true;
1075 } 1071 }
1076 1072
1077 void Editor::cut(EditCommandSource source) { 1073 void Editor::cut(EditCommandSource source) {
1078 if (tryDHTMLCut()) 1074 if (tryDHTMLCut())
(...skipping 364 matching lines...) Expand 10 before | Expand all | Expand 10 after
1443 std::max(startCaretRect.height(), endCaretRect.height())); 1439 std::max(startCaretRect.height(), endCaretRect.height()));
1444 } 1440 }
1445 1441
1446 // start and end aren't on the same line, so go from start to the end of its 1442 // start and end aren't on the same line, so go from start to the end of its
1447 // line 1443 // line
1448 return IntRect(startCaretRect.x(), startCaretRect.y(), 1444 return IntRect(startCaretRect.x(), startCaretRect.y(),
1449 (startCaretRect.width() + extraWidthToEndOfLine).toInt(), 1445 (startCaretRect.width() + extraWidthToEndOfLine).toInt(),
1450 startCaretRect.height()); 1446 startCaretRect.height());
1451 } 1447 }
1452 1448
1453 void Editor::computeAndSetTypingStyle(EditCommandSource source, 1449 // TODO(chongz): Pass |EditCommandSource| to |CompositeEditCommand|.
1450 void Editor::computeAndSetTypingStyle(EditCommandSource,
1454 StylePropertySet* style, 1451 StylePropertySet* style,
1455 InputEvent::InputType inputType) { 1452 InputEvent::InputType inputType) {
1456 if (!style || style->isEmpty()) { 1453 if (!style || style->isEmpty()) {
1457 frame().selection().clearTypingStyle(); 1454 frame().selection().clearTypingStyle();
1458 return; 1455 return;
1459 } 1456 }
1460 1457
1461 // Calculate the current typing style. 1458 // Calculate the current typing style.
1462 EditingStyle* typingStyle = nullptr; 1459 EditingStyle* typingStyle = nullptr;
1463 if (frame().selection().typingStyle()) { 1460 if (frame().selection().typingStyle()) {
1464 typingStyle = frame().selection().typingStyle()->copy(); 1461 typingStyle = frame().selection().typingStyle()->copy();
1465 typingStyle->overrideWithStyle(style); 1462 typingStyle->overrideWithStyle(style);
1466 } else { 1463 } else {
1467 typingStyle = EditingStyle::create(style); 1464 typingStyle = EditingStyle::create(style);
1468 } 1465 }
1469 1466
1470 typingStyle->prepareToApplyAt( 1467 typingStyle->prepareToApplyAt(
1471 frame().selection().selection().visibleStart().deepEquivalent(), 1468 frame().selection().selection().visibleStart().deepEquivalent(),
1472 EditingStyle::PreserveWritingDirection); 1469 EditingStyle::PreserveWritingDirection);
1473 1470
1474 // Handle block styles, substracting these from the typing style. 1471 // Handle block styles, substracting these from the typing style.
1475 EditingStyle* blockStyle = typingStyle->extractAndRemoveBlockProperties(); 1472 EditingStyle* blockStyle = typingStyle->extractAndRemoveBlockProperties();
1476 if (!blockStyle->isEmpty()) { 1473 if (!blockStyle->isEmpty()) {
1477 DCHECK(frame().document()); 1474 DCHECK(frame().document());
1478 ApplyStyleCommand::create(*frame().document(), blockStyle, inputType) 1475 ApplyStyleCommand::create(*frame().document(), blockStyle, inputType)
1479 ->apply(source); 1476 ->apply();
1480 } 1477 }
1481 1478
1482 // Set the remaining style as the typing style. 1479 // Set the remaining style as the typing style.
1483 frame().selection().setTypingStyle(typingStyle); 1480 frame().selection().setTypingStyle(typingStyle);
1484 } 1481 }
1485 1482
1486 bool Editor::findString(const String& target, FindOptions options) { 1483 bool Editor::findString(const String& target, FindOptions options) {
1487 VisibleSelection selection = frame().selection().selection(); 1484 VisibleSelection selection = frame().selection().selection();
1488 1485
1489 // TODO(yosin) We should make |findRangeOfString()| to return 1486 // TODO(yosin) We should make |findRangeOfString()| to return
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after
1738 } 1735 }
1739 1736
1740 DEFINE_TRACE(Editor) { 1737 DEFINE_TRACE(Editor) {
1741 visitor->trace(m_frame); 1738 visitor->trace(m_frame);
1742 visitor->trace(m_lastEditCommand); 1739 visitor->trace(m_lastEditCommand);
1743 visitor->trace(m_undoStack); 1740 visitor->trace(m_undoStack);
1744 visitor->trace(m_mark); 1741 visitor->trace(m_mark);
1745 } 1742 }
1746 1743
1747 } // namespace blink 1744 } // namespace blink
OLDNEW
« no previous file with comments | « no previous file | third_party/WebKit/Source/core/editing/InputMethodController.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698