| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <string> | 5 #include <string> |
| 6 #include <utility> | 6 #include <utility> |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "ppapi/c/dev/ppb_cursor_control_dev.h" | 9 #include "ppapi/c/dev/ppb_cursor_control_dev.h" |
| 10 #include "ppapi/c/ppb_console.h" | 10 #include "ppapi/c/ppb_console.h" |
| 11 #include "ppapi/cpp/completion_callback.h" | 11 #include "ppapi/cpp/completion_callback.h" |
| 12 #include "ppapi/cpp/dev/font_dev.h" | 12 #include "ppapi/cpp/dev/font_dev.h" |
| 13 #include "ppapi/cpp/dev/ime_input_event_dev.h" | |
| 14 #include "ppapi/cpp/dev/text_input_dev.h" | |
| 15 #include "ppapi/cpp/graphics_2d.h" | 13 #include "ppapi/cpp/graphics_2d.h" |
| 16 #include "ppapi/cpp/image_data.h" | 14 #include "ppapi/cpp/image_data.h" |
| 15 #include "ppapi/cpp/ime_input_event.h" |
| 17 #include "ppapi/cpp/input_event.h" | 16 #include "ppapi/cpp/input_event.h" |
| 18 #include "ppapi/cpp/instance.h" | 17 #include "ppapi/cpp/instance.h" |
| 19 #include "ppapi/cpp/module.h" | 18 #include "ppapi/cpp/module.h" |
| 20 #include "ppapi/cpp/rect.h" | 19 #include "ppapi/cpp/rect.h" |
| 21 #include "ppapi/cpp/size.h" | 20 #include "ppapi/cpp/size.h" |
| 21 #include "ppapi/cpp/text_input.h" |
| 22 | 22 |
| 23 namespace { | 23 namespace { |
| 24 | 24 |
| 25 // Extracted from: ui/base/keycodes/keyboard_codes.h | 25 // Extracted from: ui/base/keycodes/keyboard_codes.h |
| 26 enum { | 26 enum { |
| 27 VKEY_BACK = 0x08, | 27 VKEY_BACK = 0x08, |
| 28 VKEY_SHIFT = 0x10, | 28 VKEY_SHIFT = 0x10, |
| 29 VKEY_DELETE = 0x2E, | 29 VKEY_DELETE = 0x2E, |
| 30 VKEY_LEFT = 0x25, | 30 VKEY_LEFT = 0x25, |
| 31 VKEY_UP = 0x26, | 31 VKEY_UP = 0x26, |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 110 virtual void FocusOut() { | 110 virtual void FocusOut() { |
| 111 textinput_control_.CancelCompositionText(); | 111 textinput_control_.CancelCompositionText(); |
| 112 textinput_control_.SetTextInputType(PP_TEXTINPUT_TYPE_NONE); | 112 textinput_control_.SetTextInputType(PP_TEXTINPUT_TYPE_NONE); |
| 113 } | 113 } |
| 114 virtual void UpdateSelection(const std::string& text) { | 114 virtual void UpdateSelection(const std::string& text) { |
| 115 textinput_control_.SetSelectionText(text); | 115 textinput_control_.SetSelectionText(text); |
| 116 textinput_control_.SelectionChanged(); | 116 textinput_control_.SelectionChanged(); |
| 117 } | 117 } |
| 118 | 118 |
| 119 private: | 119 private: |
| 120 class MyTextInput : public pp::TextInput_Dev { | 120 class MyTextInput : public pp::TextInput { |
| 121 public: | 121 public: |
| 122 MyTextInput(pp::Instance* instance) : pp::TextInput_Dev(instance) {} | 122 MyTextInput(pp::Instance* instance) : pp::TextInput(instance) {} |
| 123 virtual void RequestSurroundingText(uint32_t characters) { | 123 virtual void RequestSurroundingText(uint32_t characters) { |
| 124 UpdateSurroundingText(selection_text_, 0, selection_text_.size()); | 124 UpdateSurroundingText(selection_text_, 0, selection_text_.size()); |
| 125 } | 125 } |
| 126 void SetSelectionText(const std::string& text) { selection_text_ = text; } | 126 void SetSelectionText(const std::string& text) { selection_text_ = text; } |
| 127 std::string selection_text_; | 127 std::string selection_text_; |
| 128 }; | 128 }; |
| 129 MyTextInput textinput_control_; | 129 MyTextInput textinput_control_; |
| 130 }; | 130 }; |
| 131 | 131 |
| 132 // Hand-made text field for demonstrating text input API. | 132 // Hand-made text field for demonstrating text input API. |
| (...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 421 RequestInputEvents(PP_INPUTEVENT_CLASS_MOUSE); | 421 RequestInputEvents(PP_INPUTEVENT_CLASS_MOUSE); |
| 422 RequestFilteringInputEvents(PP_INPUTEVENT_CLASS_KEYBOARD); | 422 RequestFilteringInputEvents(PP_INPUTEVENT_CLASS_KEYBOARD); |
| 423 | 423 |
| 424 for (uint32_t i = 0; i < argc; ++i) { | 424 for (uint32_t i = 0; i < argc; ++i) { |
| 425 if (argn[i] == std::string("ime")) { | 425 if (argn[i] == std::string("ime")) { |
| 426 if (argv[i] == std::string("no")) { | 426 if (argv[i] == std::string("no")) { |
| 427 // Example of NO-IME plugins (e.g., games). | 427 // Example of NO-IME plugins (e.g., games). |
| 428 // | 428 // |
| 429 // When a plugin never wants to accept text input, at initialization | 429 // When a plugin never wants to accept text input, at initialization |
| 430 // explicitly turn off the text input feature by calling: | 430 // explicitly turn off the text input feature by calling: |
| 431 pp::TextInput_Dev(this).SetTextInputType(PP_TEXTINPUT_TYPE_NONE); | 431 pp::TextInput(this).SetTextInputType(PP_TEXTINPUT_TYPE_NONE); |
| 432 } else if (argv[i] == std::string("unaware")) { | 432 } else if (argv[i] == std::string("unaware")) { |
| 433 // Demonstrating the behavior of IME-unaware plugins. | 433 // Demonstrating the behavior of IME-unaware plugins. |
| 434 // Never call any text input related APIs. | 434 // Never call any text input related APIs. |
| 435 // | 435 // |
| 436 // In such a case, the plugin is assumed to always accept text input. | 436 // In such a case, the plugin is assumed to always accept text input. |
| 437 // For example, when the plugin is focused in touch devices a virtual | 437 // For example, when the plugin is focused in touch devices a virtual |
| 438 // keyboard may pop up, or in environment IME is used, users can type | 438 // keyboard may pop up, or in environment IME is used, users can type |
| 439 // text via IME on the plugin. The characters are delivered to the | 439 // text via IME on the plugin. The characters are delivered to the |
| 440 // plugin via PP_INPUTEVENT_TYPE_CHAR events. | 440 // plugin via PP_INPUTEVENT_TYPE_CHAR events. |
| 441 } else if (argv[i] == std::string("caretmove")) { | 441 } else if (argv[i] == std::string("caretmove")) { |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 495 ret = OnKeyDown(keyEvent); | 495 ret = OnKeyDown(keyEvent); |
| 496 break; | 496 break; |
| 497 } | 497 } |
| 498 case PP_INPUTEVENT_TYPE_CHAR: { | 498 case PP_INPUTEVENT_TYPE_CHAR: { |
| 499 const pp::KeyboardInputEvent keyEvent(event); | 499 const pp::KeyboardInputEvent keyEvent(event); |
| 500 Log("Char [" + keyEvent.GetCharacterText().AsString() + "]"); | 500 Log("Char [" + keyEvent.GetCharacterText().AsString() + "]"); |
| 501 ret = OnChar(keyEvent); | 501 ret = OnChar(keyEvent); |
| 502 break; | 502 break; |
| 503 } | 503 } |
| 504 case PP_INPUTEVENT_TYPE_IME_COMPOSITION_START: { | 504 case PP_INPUTEVENT_TYPE_IME_COMPOSITION_START: { |
| 505 const pp::IMEInputEvent_Dev imeEvent(event); | 505 const pp::IMEInputEvent imeEvent(event); |
| 506 Log("CompositionStart [" + imeEvent.GetText().AsString() + "]"); | 506 Log("CompositionStart [" + imeEvent.GetText().AsString() + "]"); |
| 507 ret = true; | 507 ret = true; |
| 508 break; | 508 break; |
| 509 } | 509 } |
| 510 case PP_INPUTEVENT_TYPE_IME_COMPOSITION_UPDATE: { | 510 case PP_INPUTEVENT_TYPE_IME_COMPOSITION_UPDATE: { |
| 511 const pp::IMEInputEvent_Dev imeEvent(event); | 511 const pp::IMEInputEvent imeEvent(event); |
| 512 Log("CompositionUpdate [" + imeEvent.GetText().AsString() + "]"); | 512 Log("CompositionUpdate [" + imeEvent.GetText().AsString() + "]"); |
| 513 ret = OnCompositionUpdate(imeEvent); | 513 ret = OnCompositionUpdate(imeEvent); |
| 514 break; | 514 break; |
| 515 } | 515 } |
| 516 case PP_INPUTEVENT_TYPE_IME_COMPOSITION_END: { | 516 case PP_INPUTEVENT_TYPE_IME_COMPOSITION_END: { |
| 517 const pp::IMEInputEvent_Dev imeEvent(event); | 517 const pp::IMEInputEvent imeEvent(event); |
| 518 Log("CompositionEnd [" + imeEvent.GetText().AsString() + "]"); | 518 Log("CompositionEnd [" + imeEvent.GetText().AsString() + "]"); |
| 519 ret = OnCompositionEnd(imeEvent); | 519 ret = OnCompositionEnd(imeEvent); |
| 520 break; | 520 break; |
| 521 } | 521 } |
| 522 case PP_INPUTEVENT_TYPE_IME_TEXT: { | 522 case PP_INPUTEVENT_TYPE_IME_TEXT: { |
| 523 const pp::IMEInputEvent_Dev imeEvent(event); | 523 const pp::IMEInputEvent imeEvent(event); |
| 524 Log("ImeText [" + imeEvent.GetText().AsString() + "]"); | 524 Log("ImeText [" + imeEvent.GetText().AsString() + "]"); |
| 525 ret = OnImeText(imeEvent); | 525 ret = OnImeText(imeEvent); |
| 526 break; | 526 break; |
| 527 } | 527 } |
| 528 default: | 528 default: |
| 529 break; | 529 break; |
| 530 } | 530 } |
| 531 if (ret && (dragging_ || event.GetType() != PP_INPUTEVENT_TYPE_MOUSEMOVE)) | 531 if (ret && (dragging_ || event.GetType() != PP_INPUTEVENT_TYPE_MOUSEMOVE)) |
| 532 Paint(); | 532 Paint(); |
| 533 return ret; | 533 return ret; |
| 534 } | 534 } |
| 535 | 535 |
| 536 virtual void DidChangeView(const pp::Rect& position, const pp::Rect& clip) { | 536 virtual void DidChangeView(const pp::Rect& position, const pp::Rect& clip) { |
| 537 if (position.size() == last_size_) | 537 if (position.size() == last_size_) |
| 538 return; | 538 return; |
| 539 last_size_ = position.size(); | 539 last_size_ = position.size(); |
| 540 Paint(); | 540 Paint(); |
| 541 } | 541 } |
| 542 | 542 |
| 543 private: | 543 private: |
| 544 bool OnCompositionUpdate(const pp::IMEInputEvent_Dev& ev) { | 544 bool OnCompositionUpdate(const pp::IMEInputEvent& ev) { |
| 545 for (std::vector<MyTextField>::iterator it = textfield_.begin(); | 545 for (std::vector<MyTextField>::iterator it = textfield_.begin(); |
| 546 it != textfield_.end(); | 546 it != textfield_.end(); |
| 547 ++it) { | 547 ++it) { |
| 548 if (it->Focused()) { | 548 if (it->Focused()) { |
| 549 std::vector< std::pair<uint32_t, uint32_t> > segs; | 549 std::vector< std::pair<uint32_t, uint32_t> > segs; |
| 550 for (uint32_t i = 0; i < ev.GetSegmentNumber(); ++i) | 550 for (uint32_t i = 0; i < ev.GetSegmentCount(); ++i) |
| 551 segs.push_back(std::make_pair(ev.GetSegmentOffset(i), | 551 segs.push_back(std::make_pair(ev.GetSegmentOffset(i), |
| 552 ev.GetSegmentOffset(i + 1))); | 552 ev.GetSegmentOffset(i + 1))); |
| 553 it->SetComposition(ev.GetText().AsString(), | 553 it->SetComposition(ev.GetText().AsString(), |
| 554 segs, | 554 segs, |
| 555 ev.GetTargetSegment(), | 555 ev.GetTargetSegment(), |
| 556 ev.GetSelection()); | 556 ev.GetSelection()); |
| 557 return true; | 557 return true; |
| 558 } | 558 } |
| 559 } | 559 } |
| 560 return false; | 560 return false; |
| 561 } | 561 } |
| 562 | 562 |
| 563 bool OnCompositionEnd(const pp::IMEInputEvent_Dev& ev) { | 563 bool OnCompositionEnd(const pp::IMEInputEvent& ev) { |
| 564 for (std::vector<MyTextField>::iterator it = textfield_.begin(); | 564 for (std::vector<MyTextField>::iterator it = textfield_.begin(); |
| 565 it != textfield_.end(); | 565 it != textfield_.end(); |
| 566 ++it) { | 566 ++it) { |
| 567 if (it->Focused()) { | 567 if (it->Focused()) { |
| 568 it->SetComposition(std::string(), | 568 it->SetComposition(std::string(), |
| 569 std::vector<std::pair<uint32_t, uint32_t> >(), | 569 std::vector<std::pair<uint32_t, uint32_t> >(), |
| 570 0, | 570 0, |
| 571 std::make_pair(0, 0)); | 571 std::make_pair(0, 0)); |
| 572 return true; | 572 return true; |
| 573 } | 573 } |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 660 if (it->Focused()) { | 660 if (it->Focused()) { |
| 661 std::string str = ev.GetCharacterText().AsString(); | 661 std::string str = ev.GetCharacterText().AsString(); |
| 662 if (str != "\r" && str != "\n") | 662 if (str != "\r" && str != "\n") |
| 663 it->InsertText(str); | 663 it->InsertText(str); |
| 664 return true; | 664 return true; |
| 665 } | 665 } |
| 666 } | 666 } |
| 667 return false; | 667 return false; |
| 668 } | 668 } |
| 669 | 669 |
| 670 bool OnImeText(const pp::IMEInputEvent_Dev ev) { | 670 bool OnImeText(const pp::IMEInputEvent ev) { |
| 671 for (std::vector<MyTextField>::iterator it = textfield_.begin(); | 671 for (std::vector<MyTextField>::iterator it = textfield_.begin(); |
| 672 it != textfield_.end(); | 672 it != textfield_.end(); |
| 673 ++it) { | 673 ++it) { |
| 674 if (it->Focused()) { | 674 if (it->Focused()) { |
| 675 it->InsertText(ev.GetText().AsString()); | 675 it->InsertText(ev.GetText().AsString()); |
| 676 return true; | 676 return true; |
| 677 } | 677 } |
| 678 } | 678 } |
| 679 return false; | 679 return false; |
| 680 } | 680 } |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 729 } | 729 } |
| 730 }; | 730 }; |
| 731 | 731 |
| 732 namespace pp { | 732 namespace pp { |
| 733 | 733 |
| 734 Module* CreateModule() { | 734 Module* CreateModule() { |
| 735 return new MyModule(); | 735 return new MyModule(); |
| 736 } | 736 } |
| 737 | 737 |
| 738 } // namespace pp | 738 } // namespace pp |
| OLD | NEW |