1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135
|
/* Copyright 2012 The Chromium Authors
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
/**
* This file defines the Input Event interfaces.
*/
label Chrome {
M13 = 1.0,
M14 = 1.1,
M34 = 1.2,
M55 = 1.3,
M60 = 1.4
};
/**
* This enumeration contains the types of input events.
*/
[assert_size(4)]
enum PP_InputEvent_Type {
PP_INPUTEVENT_TYPE_UNDEFINED = -1,
PP_INPUTEVENT_TYPE_FIRST = PP_INPUTEVENT_TYPE_UNDEFINED,
/**
* Notification that a mouse button was pressed.
*
* Register for this event using the PP_INPUTEVENT_CLASS_MOUSE class.
*/
PP_INPUTEVENT_TYPE_MOUSEDOWN = 0,
/**
* Notification that a mouse button was released.
*
* Register for this event using the PP_INPUTEVENT_CLASS_MOUSE class.
*/
PP_INPUTEVENT_TYPE_MOUSEUP = 1,
/**
* Notification that a mouse button was moved when it is over the instance
* or dragged out of it.
*
* Register for this event using the PP_INPUTEVENT_CLASS_MOUSE class.
*/
PP_INPUTEVENT_TYPE_MOUSEMOVE = 2,
/**
* Notification that the mouse entered the instance's bounds.
*
* Register for this event using the PP_INPUTEVENT_CLASS_MOUSE class.
*/
PP_INPUTEVENT_TYPE_MOUSEENTER = 3,
/**
* Notification that a mouse left the instance's bounds.
*
* Register for this event using the PP_INPUTEVENT_CLASS_MOUSE class.
*/
PP_INPUTEVENT_TYPE_MOUSELEAVE = 4,
/**
* Notification that the scroll wheel was used.
*
* Register for this event using the PP_INPUTEVENT_CLASS_WHEEL class.
*/
PP_INPUTEVENT_TYPE_WHEEL = 5,
/**
* Notification that a key transitioned from "up" to "down".
*
* Register for this event using the PP_INPUTEVENT_CLASS_KEYBOARD class.
*/
PP_INPUTEVENT_TYPE_RAWKEYDOWN = 6,
/**
* Notification that a key was pressed. This does not necessarily correspond
* to a character depending on the key and language. Use the
* PP_INPUTEVENT_TYPE_CHAR for character input.
*
* Register for this event using the PP_INPUTEVENT_CLASS_KEYBOARD class.
*/
PP_INPUTEVENT_TYPE_KEYDOWN = 7,
/**
* Notification that a key was released.
*
* Register for this event using the PP_INPUTEVENT_CLASS_KEYBOARD class.
*/
PP_INPUTEVENT_TYPE_KEYUP = 8,
/**
* Notification that a character was typed. Use this for text input. Key
* down events may generate 0, 1, or more than one character event depending
* on the key, locale, and operating system.
*
* Register for this event using the PP_INPUTEVENT_CLASS_KEYBOARD class.
*/
PP_INPUTEVENT_TYPE_CHAR = 9,
/**
* Notification that a context menu should be shown.
*
* This message will be sent when the user right-clicks or performs another
* OS-specific mouse command that should open a context menu. When this event
* is delivered depends on the system, on some systems (Mac) it will
* delivered after the mouse down event, and on others (Windows) it will be
* delivered after the mouse up event.
*
* You will always get the normal mouse events. For example, you may see
* MOUSEDOWN,CONTEXTMENU,MOUSEUP or MOUSEDOWN,MOUSEUP,CONTEXTMENU.
*
* The return value from the event handler determines if the context menu
* event will be passed to the page when you are using filtered input events
* (via RequestFilteringInputEvents()). In non-filtering mode the event will
* never be propagated and no context menu will be displayed. If you are
* handling mouse events in filtering mode, you may want to return true from
* this event even if you do not support a context menu to suppress the
* default one.
*
* Register for this event using the PP_INPUTEVENT_CLASS_MOUSE class.
*/
PP_INPUTEVENT_TYPE_CONTEXTMENU = 10,
/**
* Notification that an input method composition process has just started.
*
* Register for this event using the PP_INPUTEVENT_CLASS_IME class.
*/
PP_INPUTEVENT_TYPE_IME_COMPOSITION_START = 11,
/**
* Notification that the input method composition string is updated.
*
* Register for this event using the PP_INPUTEVENT_CLASS_IME class.
*/
PP_INPUTEVENT_TYPE_IME_COMPOSITION_UPDATE = 12,
/**
* Notification that an input method composition process has completed.
*
* Register for this event using the PP_INPUTEVENT_CLASS_IME class.
*/
PP_INPUTEVENT_TYPE_IME_COMPOSITION_END = 13,
/**
* Notification that an input method committed a string.
*
* Register for this event using the PP_INPUTEVENT_CLASS_IME class.
*/
PP_INPUTEVENT_TYPE_IME_TEXT = 14,
/**
* Notification that a finger was placed on a touch-enabled device.
*
* Register for this event using the PP_INPUTEVENT_CLASS_TOUCH class.
*/
PP_INPUTEVENT_TYPE_TOUCHSTART = 15,
/**
* Notification that a finger was moved on a touch-enabled device.
*
* Register for this event using the PP_INPUTEVENT_CLASS_TOUCH class.
*/
PP_INPUTEVENT_TYPE_TOUCHMOVE = 16,
/**
* Notification that a finger was released on a touch-enabled device.
*
* Register for this event using the PP_INPUTEVENT_CLASS_TOUCH class.
*/
PP_INPUTEVENT_TYPE_TOUCHEND = 17,
/**
* Notification that a touch event was canceled.
*
* Register for this event using the PP_INPUTEVENT_CLASS_TOUCH class.
*/
PP_INPUTEVENT_TYPE_TOUCHCANCEL = 18,
PP_INPUTEVENT_TYPE_LAST = PP_INPUTEVENT_TYPE_TOUCHCANCEL
};
/**
* This enumeration contains event modifier constants. Each modifier is one
* bit. Retrieve the modifiers from an input event using the GetEventModifiers
* function on PPB_InputEvent.
*/
[assert_size(4)]
enum PP_InputEvent_Modifier {
PP_INPUTEVENT_MODIFIER_SHIFTKEY = 1 << 0,
PP_INPUTEVENT_MODIFIER_CONTROLKEY = 1 << 1,
PP_INPUTEVENT_MODIFIER_ALTKEY = 1 << 2,
PP_INPUTEVENT_MODIFIER_METAKEY = 1 << 3,
PP_INPUTEVENT_MODIFIER_ISKEYPAD = 1 << 4,
PP_INPUTEVENT_MODIFIER_ISAUTOREPEAT = 1 << 5,
PP_INPUTEVENT_MODIFIER_LEFTBUTTONDOWN = 1 << 6,
PP_INPUTEVENT_MODIFIER_MIDDLEBUTTONDOWN = 1 << 7,
PP_INPUTEVENT_MODIFIER_RIGHTBUTTONDOWN = 1 << 8,
PP_INPUTEVENT_MODIFIER_CAPSLOCKKEY = 1 << 9,
PP_INPUTEVENT_MODIFIER_NUMLOCKKEY = 1 << 10,
PP_INPUTEVENT_MODIFIER_ISLEFT = 1 << 11,
PP_INPUTEVENT_MODIFIER_ISRIGHT = 1 << 12,
[version=1.3]
PP_INPUTEVENT_MODIFIER_ISPEN = 1 << 13,
[version=1.3]
PP_INPUTEVENT_MODIFIER_ISERASER = 1 << 14
};
/**
* This enumeration contains constants representing each mouse button. To get
* the mouse button for a mouse down or up event, use GetMouseButton on
* PPB_InputEvent.
*/
[assert_size(4)]
enum PP_InputEvent_MouseButton {
PP_INPUTEVENT_MOUSEBUTTON_NONE = -1,
PP_INPUTEVENT_MOUSEBUTTON_FIRST = PP_INPUTEVENT_MOUSEBUTTON_NONE,
PP_INPUTEVENT_MOUSEBUTTON_LEFT = 0,
PP_INPUTEVENT_MOUSEBUTTON_MIDDLE = 1,
PP_INPUTEVENT_MOUSEBUTTON_RIGHT = 2,
PP_INPUTEVENT_MOUSEBUTTON_LAST = PP_INPUTEVENT_MOUSEBUTTON_RIGHT
};
[assert_size(4)]
enum PP_InputEvent_Class {
/**
* Request mouse input events.
*
* Normally you will request mouse events by calling RequestInputEvents().
* The only use case for filtered events (via RequestFilteringInputEvents())
* is for instances that have irregular outlines and you want to perform hit
* testing, which is very uncommon. Requesting non-filtered mouse events will
* lead to higher performance.
*/
PP_INPUTEVENT_CLASS_MOUSE = 1 << 0,
/**
* Requests keyboard events. Often you will want to request filtered mode
* (via RequestFilteringInputEvents) for keyboard events so you can pass on
* events (by returning false) that you don't handle. For example, if you
* don't request filtered mode and the user pressed "Page Down" when your
* instance has focus, the page won't scroll which will be a poor experience.
*
* A small number of tab and window management commands like Alt-F4 are never
* sent to the page. You can not request these keyboard commands since it
* would allow pages to trap users on a page.
*/
PP_INPUTEVENT_CLASS_KEYBOARD = 1 << 1,
/**
* Identifies scroll wheel input event. Wheel events must be requested in
* filtering mode via RequestFilteringInputEvents(). This is because many
* wheel commands should be forwarded to the page.
*
* Most instances will not need this event. Consuming wheel events by
* returning true from your filtered event handler will prevent the user from
* scrolling the page when the mouse is over the instance which can be very
* annoying.
*
* If you handle wheel events (for example, you have a document viewer which
* the user can scroll), the recommended behavior is to return false only if
* the wheel event actually causes your document to scroll. When the user
* reaches the end of the document, return false to indicating that the event
* was not handled. This will then forward the event to the containing page
* for scrolling, producing the nested scrolling behavior users expect from
* frames in a page.
*/
PP_INPUTEVENT_CLASS_WHEEL = 1 << 2,
/**
* Identifies touch input events.
*
* Request touch events only if you intend to handle them. If the browser
* knows you do not need to handle touch events, it can handle them at a
* higher level and achieve higher performance. If the plugin does not
* register for touch-events, then it will receive synthetic mouse events that
* are generated from the touch events (e.g. mouse-down for touch-start,
* mouse-move for touch-move (with left-button down), and mouse-up for
* touch-end. If the plugin does register for touch events, then the synthetic
* mouse events are not created.
*/
PP_INPUTEVENT_CLASS_TOUCH = 1 << 3,
/**
* Identifies IME composition input events.
*
* Request this input event class if you allow on-the-spot IME input.
*/
PP_INPUTEVENT_CLASS_IME = 1 << 4,
/**
* Identifies coalesced touch input events.
*
* Touch events are coalesced for each frame. By default, the coalesced touch
* events will be dropped. Request this input event class if you intend to
* handle all the touch events.
*/
PP_INPUTEVENT_CLASS_COALESCED_TOUCH = 1 << 5
};
/**
* The <code>PPB_InputEvent</code> interface contains pointers to several
* functions related to generic input events on the browser.
*/
[version=1.0, macro="PPB_INPUT_EVENT_INTERFACE"]
interface PPB_InputEvent {
/**
* RequestInputEvent() requests that input events corresponding to the given
* input events are delivered to the instance.
*
* It's recommended that you use RequestFilteringInputEvents() for keyboard
* events instead of this function so that you don't interfere with normal
* browser accelerators.
*
* By default, no input events are delivered. Call this function with the
* classes of events you are interested in to have them be delivered to
* the instance. Calling this function will override any previous setting for
* each specified class of input events (for example, if you previously
* called RequestFilteringInputEvents(), this function will set those events
* to non-filtering mode).
*
* Input events may have high overhead, so you should only request input
* events that your plugin will actually handle. For example, the browser may
* do optimizations for scroll or touch events that can be processed
* substantially faster if it knows there are no non-default receivers for
* that message. Requesting that such messages be delivered, even if they are
* processed very quickly, may have a noticeable effect on the performance of
* the page.
*
* Note that synthetic mouse events will be generated from touch events if
* (and only if) you do not request touch events.
*
* When requesting input events through this function, the events will be
* delivered and <i>not</i> bubbled to the default handlers.
*
* <strong>Example:</strong>
* @code
* RequestInputEvents(instance, PP_INPUTEVENT_CLASS_MOUSE);
* RequestFilteringInputEvents(instance,
* PP_INPUTEVENT_CLASS_WHEEL | PP_INPUTEVENT_CLASS_KEYBOARD);
* @endcode
*
* @param instance The <code>PP_Instance</code> of the instance requesting
* the given events.
*
* @param event_classes A combination of flags from
* <code>PP_InputEvent_Class</code> that identifies the classes of events the
* instance is requesting. The flags are combined by logically ORing their
* values.
*
* @return <code>PP_OK</code> if the operation succeeded,
* <code>PP_ERROR_BADARGUMENT</code> if instance is invalid, or
* <code>PP_ERROR_NOTSUPPORTED</code> if one of the event class bits were
* illegal. In the case of an invalid bit, all valid bits will be applied
* and only the illegal bits will be ignored. The most common cause of a
* <code>PP_ERROR_NOTSUPPORTED</code> return value is requesting keyboard
* events, these must use RequestFilteringInputEvents().
*/
int32_t RequestInputEvents([in] PP_Instance instance,
[in] uint32_t event_classes);
/**
* RequestFilteringInputEvents() requests that input events corresponding to
* the given input events are delivered to the instance for filtering.
*
* By default, no input events are delivered. In most cases you would
* register to receive events by calling RequestInputEvents(). In some cases,
* however, you may wish to filter events such that they can be bubbled up
* to the default handlers. In this case, register for those classes of
* events using this function instead of RequestInputEvents().
*
* Filtering input events requires significantly more overhead than just
* delivering them to the instance. As such, you should only request
* filtering in those cases where it's absolutely necessary. The reason is
* that it requires the browser to stop and block for the instance to handle
* the input event, rather than sending the input event asynchronously. This
* can have significant overhead.
*
* <strong>Example:</strong>
* @code
* RequestInputEvents(instance, PP_INPUTEVENT_CLASS_MOUSE);
* RequestFilteringInputEvents(instance,
* PP_INPUTEVENT_CLASS_WHEEL | PP_INPUTEVENT_CLASS_KEYBOARD);
* @endcode
*
* @return <code>PP_OK</code> if the operation succeeded,
* <code>PP_ERROR_BADARGUMENT</code> if instance is invalid, or
* <code>PP_ERROR_NOTSUPPORTED</code> if one of the event class bits were
* illegal. In the case of an invalid bit, all valid bits will be applied
* and only the illegal bits will be ignored.
*/
int32_t RequestFilteringInputEvents([in] PP_Instance instance,
[in] uint32_t event_classes);
/**
* ClearInputEventRequest() requests that input events corresponding to the
* given input classes no longer be delivered to the instance.
*
* By default, no input events are delivered. If you have previously
* requested input events via RequestInputEvents() or
* RequestFilteringInputEvents(), this function will unregister handling
* for the given instance. This will allow greater browser performance for
* those events.
*
* Note that you may still get some input events after clearing the flag if
* they were dispatched before the request was cleared. For example, if
* there are 3 mouse move events waiting to be delivered, and you clear the
* mouse event class during the processing of the first one, you'll still
* receive the next two. You just won't get more events generated.
*
* @param instance The <code>PP_Instance</code> of the instance requesting
* to no longer receive the given events.
*
* @param event_classes A combination of flags from
* <code>PP_InputEvent_Class</code> that identify the classes of events the
* instance is no longer interested in.
*/
void ClearInputEventRequest([in] PP_Instance instance,
[in] uint32_t event_classes);
/**
* IsInputEvent() returns true if the given resource is a valid input event
* resource.
*
* @param[in] resource A <code>PP_Resource</code> corresponding to a generic
* resource.
*
* @return <code>PP_TRUE</code> if the given resource is a valid input event
* resource.
*/
PP_Bool IsInputEvent([in] PP_Resource resource);
/**
* GetType() returns the type of input event for the given input event
* resource.
*
* @param[in] resource A <code>PP_Resource</code> corresponding to an input
* event.
*
* @return A <code>PP_InputEvent_Type</code> if its a valid input event or
* <code>PP_INPUTEVENT_TYPE_UNDEFINED</code> if the resource is invalid.
*/
PP_InputEvent_Type GetType([in] PP_Resource event);
/**
* GetTimeStamp() Returns the time that the event was generated. This will be
* before the current time since processing and dispatching the event has
* some overhead. Use this value to compare the times the user generated two
* events without being sensitive to variable processing time.
*
* @param[in] resource A <code>PP_Resource</code> corresponding to the event.
*
* @return The return value is in time ticks, which is a monotonically
* increasing clock not related to the wall clock time. It will not change
* if the user changes their clock or daylight savings time starts, so can
* be reliably used to compare events. This means, however, that you can't
* correlate event times to a particular time of day on the system clock.
*/
PP_TimeTicks GetTimeStamp([in] PP_Resource event);
/**
* GetModifiers() returns a bitfield indicating which modifiers were down
* at the time of the event. This is a combination of the flags in the
* <code>PP_InputEvent_Modifier</code> enum.
*
* @param[in] resource A <code>PP_Resource</code> corresponding to an input
* event.
*
* @return The modifiers associated with the event, or 0 if the given
* resource is not a valid event resource.
*/
uint32_t GetModifiers([in] PP_Resource event);
};
/**
* The <code>PPB_MouseInputEvent</code> interface contains pointers to several
* functions related to mouse input events.
*/
[macro="PPB_MOUSE_INPUT_EVENT_INTERFACE"]
interface PPB_MouseInputEvent {
/**
* Create() creates a mouse input event with the given parameters. Normally
* you will get a mouse event passed through the
* <code>HandleInputEvent</code> and will not need to create them, but some
* applications may want to create their own for internal use. The type must
* be one of the mouse event types.
*
* @param[in] instance The instance for which this event occurred.
*
* @param[in] type A <code>PP_InputEvent_Type</code> identifying the type of
* input event.
*
* @param[in] time_stamp A <code>PP_TimeTicks</code> indicating the time
* when the event occurred.
*
* @param[in] modifiers A bit field combination of the
* <code>PP_InputEvent_Modifier</code> flags.
*
* @param[in] mouse_button The button that changed for mouse down or up
* events. This value will be <code>PP_EVENT_MOUSEBUTTON_NONE</code> for
* mouse move, enter, and leave events.
*
* @param[in] mouse_position A <code>Point</code> containing the x and y
* position of the mouse when the event occurred.
*
* @return A <code>PP_Resource</code> containing the new mouse input event.
*/
PP_Resource Create([in] PP_Instance instance,
[in] PP_InputEvent_Type type,
[in] PP_TimeTicks time_stamp,
[in] uint32_t modifiers,
[in] PP_InputEvent_MouseButton mouse_button,
[in] PP_Point mouse_position,
[in] int32_t click_count);
/**
* Create() creates a mouse input event with the given parameters. Normally
* you will get a mouse event passed through the
* <code>HandleInputEvent</code> and will not need to create them, but some
* applications may want to create their own for internal use. The type must
* be one of the mouse event types.
*
* @param[in] instance The instance for which this event occurred.
*
* @param[in] type A <code>PP_InputEvent_Type</code> identifying the type of
* input event.
*
* @param[in] time_stamp A <code>PP_TimeTicks</code> indicating the time
* when the event occurred.
*
* @param[in] modifiers A bit field combination of the
* <code>PP_InputEvent_Modifier</code> flags.
*
* @param[in] mouse_button The button that changed for mouse down or up
* events. This value will be <code>PP_EVENT_MOUSEBUTTON_NONE</code> for
* mouse move, enter, and leave events.
*
* @param[in] mouse_position A <code>Point</code> containing the x and y
* position of the mouse when the event occurred.
*
* @param[in] mouse_movement The change in position of the mouse.
*
* @return A <code>PP_Resource</code> containing the new mouse input event.
*/
[version=1.1]
PP_Resource Create([in] PP_Instance instance,
[in] PP_InputEvent_Type type,
[in] PP_TimeTicks time_stamp,
[in] uint32_t modifiers,
[in] PP_InputEvent_MouseButton mouse_button,
[in] PP_Point mouse_position,
[in] int32_t click_count,
[in] PP_Point mouse_movement);
/**
* IsMouseInputEvent() determines if a resource is a mouse event.
*
* @param[in] resource A <code>PP_Resource</code> corresponding to an event.
*
* @return <code>PP_TRUE</code> if the given resource is a valid mouse input
* event, otherwise <code>PP_FALSE</code>.
*/
PP_Bool IsMouseInputEvent([in] PP_Resource resource);
/**
* GetButton() returns the mouse button that generated a mouse down or up
* event.
*
* @param[in] mouse_event A <code>PP_Resource</code> corresponding to a
* mouse event.
*
* @return The mouse button associated with mouse down and up events. This
* value will be <code>PP_EVENT_MOUSEBUTTON_NONE</code> for mouse move,
* enter, and leave events, and for all non-mouse events.
*/
PP_InputEvent_MouseButton GetButton([in] PP_Resource mouse_event);
/**
* GetPosition() returns the pixel location of a mouse input event. When
* the mouse is locked, it returns the last known mouse position just as
* mouse lock was entered.
*
* @param[in] mouse_event A <code>PP_Resource</code> corresponding to a
* mouse event.
*
* @return The point associated with the mouse event, relative to the upper-
* left of the instance receiving the event. These values can be negative for
* mouse drags. The return value will be (0, 0) for non-mouse events.
*/
[returnByValue] PP_Point GetPosition([in] PP_Resource mouse_event);
int32_t GetClickCount([in] PP_Resource mouse_event);
/**
* Returns the change in position of the mouse. When the mouse is locked,
* although the mouse position doesn't actually change, this function
* still provides movement information, which indicates what the change in
* position would be had the mouse not been locked.
*
* @param[in] mouse_event A <code>PP_Resource</code> corresponding to a
* mouse event.
*
* @return The change in position of the mouse, relative to the previous
* position.
*/
[version=1.1]
PP_Point GetMovement([in] PP_Resource mouse_event);
};
/**
* The <code>PPB_WheelIputEvent</code> interface contains pointers to several
* functions related to wheel input events.
*/
[version=1.0, macro="PPB_WHEEL_INPUT_EVENT_INTERFACE"]
interface PPB_WheelInputEvent {
/**
* Create() creates a wheel input event with the given parameters. Normally
* you will get a wheel event passed through the
* <code>HandleInputEvent</code> and will not need to create them, but some
* applications may want to create their own for internal use.
*
* @param[in] instance The instance for which this event occurred.
*
* @param[in] time_stamp A <code>PP_TimeTicks</code> indicating the time
* when the event occurred.
*
* @param[in] modifiers A bit field combination of the
* <code>PP_InputEvent_Modifier</code> flags.
*
* @param[in] wheel_delta The scroll wheel's horizontal and vertical scroll
* amounts.
*
* @param[in] wheel_ticks The number of "clicks" of the scroll wheel that
* have produced the event.
*
* @param[in] scroll_by_page When true, the user is requesting to scroll
* by pages. When false, the user is requesting to scroll by lines.
*
* @return A <code>PP_Resource</code> containing the new wheel input event.
*/
PP_Resource Create([in] PP_Instance instance,
[in] PP_TimeTicks time_stamp,
[in] uint32_t modifiers,
[in] PP_FloatPoint wheel_delta,
[in] PP_FloatPoint wheel_ticks,
[in] PP_Bool scroll_by_page);
/**
* IsWheelInputEvent() determines if a resource is a wheel event.
*
* @param[in] wheel_event A <code>PP_Resource</code> corresponding to an
* event.
*
* @return <code>PP_TRUE</code> if the given resource is a valid wheel input
* event.
*/
PP_Bool IsWheelInputEvent([in] PP_Resource resource);
/**
* GetDelta() returns the amount vertically and horizontally the user has
* requested to scroll by with their mouse wheel. A scroll down or to the
* right (where the content moves up or left) is represented as positive
* values, and a scroll up or to the left (where the content moves down or
* right) is represented as negative values.
*
* This amount is system dependent and will take into account the user's
* preferred scroll sensitivity and potentially also nonlinear acceleration
* based on the speed of the scrolling.
*
* Devices will be of varying resolution. Some mice with large detents will
* only generate integer scroll amounts. But fractional values are also
* possible, for example, on some trackpads and newer mice that don't have
* "clicks".
*
* @param[in] wheel_event A <code>PP_Resource</code> corresponding to a wheel
* event.
*
* @return The vertical and horizontal scroll values. The units are either in
* pixels (when scroll_by_page is false) or pages (when scroll_by_page is
* true). For example, y = -3 means scroll up 3 pixels when scroll_by_page
* is false, and scroll up 3 pages when scroll_by_page is true.
*/
PP_FloatPoint GetDelta([in] PP_Resource wheel_event);
/**
* GetTicks() returns the number of "clicks" of the scroll wheel
* that have produced the event. The value may have system-specific
* acceleration applied to it, depending on the device. The positive and
* negative meanings are the same as for GetDelta().
*
* If you are scrolling, you probably want to use the delta values. These
* tick events can be useful if you aren't doing actual scrolling and don't
* want or pixel values. An example may be cycling between different items in
* a game.
*
* @param[in] wheel_event A <code>PP_Resource</code> corresponding to a wheel
* event.
*
* @return The number of "clicks" of the scroll wheel. You may receive
* fractional values for the wheel ticks if the mouse wheel is high
* resolution or doesn't have "clicks". If your program wants discrete
* events (as in the "picking items" example) you should accumulate
* fractional click values from multiple messages until the total value
* reaches positive or negative one. This should represent a similar amount
* of scrolling as for a mouse that has a discrete mouse wheel.
*/
PP_FloatPoint GetTicks([in] PP_Resource wheel_event);
/**
* GetScrollByPage() indicates if the scroll delta x/y indicates pages or
* lines to scroll by.
*
* @param[in] wheel_event A <code>PP_Resource</code> corresponding to a wheel
* event.
*
* @return <code>PP_TRUE</code> if the event is a wheel event and the user is
* scrolling by pages. <code>PP_FALSE</code> if not or if the resource is not
* a wheel event.
*/
PP_Bool GetScrollByPage([in] PP_Resource wheel_event);
};
/**
* The <code>PPB_KeyboardInputEvent</code> interface contains pointers to
* several functions related to keyboard input events.
*/
[version=1.0, macro="PPB_KEYBOARD_INPUT_EVENT_INTERFACE"]
interface PPB_KeyboardInputEvent {
/**
* Creates a keyboard input event with the given parameters. Normally you
* will get a keyboard event passed through the HandleInputEvent and will not
* need to create them, but some applications may want to create their own
* for internal use. The type must be one of the keyboard event types.
*
* @param[in] instance The instance for which this event occurred.
*
* @param[in] type A <code>PP_InputEvent_Type</code> identifying the type of
* input event.
*
* @param[in] time_stamp A <code>PP_TimeTicks</code> indicating the time
* when the event occurred.
*
* @param[in] modifiers A bit field combination of the
* <code>PP_InputEvent_Modifier</code> flags.
*
* @param[in] key_code This value reflects the DOM KeyboardEvent
* <code>keyCode</code> field, which is the Windows-style Virtual Key
* code of the key.
*
* @param[in] character_text This value represents the typed character as a
* UTF-8 string.
*
* @return A <code>PP_Resource</code> containing the new keyboard input
* event.
*/
[deprecate=1.2]
PP_Resource Create([in] PP_Instance instance,
[in] PP_InputEvent_Type type,
[in] PP_TimeTicks time_stamp,
[in] uint32_t modifiers,
[in] uint32_t key_code,
[in] PP_Var character_text);
/**
* Creates a keyboard input event with the given parameters. Normally you
* will get a keyboard event passed through the HandleInputEvent and will not
* need to create them, but some applications may want to create their own
* for internal use. The type must be one of the keyboard event types.
*
* @param[in] instance The instance for which this event occurred.
*
* @param[in] type A <code>PP_InputEvent_Type</code> identifying the type of
* input event.
*
* @param[in] time_stamp A <code>PP_TimeTicks</code> indicating the time
* when the event occurred.
*
* @param[in] modifiers A bit field combination of the
* <code>PP_InputEvent_Modifier</code> flags.
*
* @param[in] key_code This value reflects the DOM KeyboardEvent
* <code>keyCode</code> field, which is the Windows-style Virtual Key
* code of the key.
*
* @param[in] character_text This value represents the typed character as a
* UTF-8 string.
*
* @param[in] code This value represents the DOM3 |code| string that
* corresponds to the physical key being pressed.
*
* @return A <code>PP_Resource</code> containing the new keyboard input
* event.
*/
[version=1.2]
PP_Resource Create([in] PP_Instance instance,
[in] PP_InputEvent_Type type,
[in] PP_TimeTicks time_stamp,
[in] uint32_t modifiers,
[in] uint32_t key_code,
[in] PP_Var character_text,
[in] PP_Var code);
/**
* IsKeyboardInputEvent() determines if a resource is a keyboard event.
*
* @param[in] resource A <code>PP_Resource</code> corresponding to an event.
*
* @return <code>PP_TRUE</code> if the given resource is a valid input event.
*/
PP_Bool IsKeyboardInputEvent([in] PP_Resource resource);
/**
* GetKeyCode() returns the DOM keyCode field for the keyboard event.
* Chrome populates this with the Windows-style Virtual Key code of the key.
*
* @param[in] key_event A <code>PP_Resource</code> corresponding to a
* keyboard event.
*
* @return The DOM keyCode field for the keyboard event.
*/
uint32_t GetKeyCode([in] PP_Resource key_event);
/**
* GetCharacterText() returns the typed character as a UTF-8 string for the
* given character event.
*
* @param[in] character_event A <code>PP_Resource</code> corresponding to a
* keyboard event.
*
* @return A string var representing a single typed character for character
* input events. For non-character input events the return value will be an
* undefined var.
*/
PP_Var GetCharacterText([in] PP_Resource character_event);
/**
* GetCode() returns the DOM |code| field for this keyboard event, as
* defined in the DOM3 Events spec:
* http://www.w3.org/TR/DOM-Level-3-Events/
*
* @param[in] key_event The key event for which to return the key code.
*
* @return The string that contains the DOM |code| for the keyboard event.
*/
[version=1.2]
PP_Var GetCode([in] PP_Resource key_event);
};
[assert_size(4)]
enum PP_TouchListType {
/**
* The list of all TouchPoints which are currently down.
*/
PP_TOUCHLIST_TYPE_TOUCHES = 0,
/**
* The list of all TouchPoints whose state has changed since the last
* TouchInputEvent.
*/
PP_TOUCHLIST_TYPE_CHANGEDTOUCHES = 1,
/**
* The list of all TouchPoints which are targeting this plugin. This is a
* subset of Touches.
*/
PP_TOUCHLIST_TYPE_TARGETTOUCHES = 2
};
/**
* The <code>PPB_TouchInputEvent</code> interface contains pointers to several
* functions related to touch events.
*/
[version=1.0, macro="PPB_TOUCH_INPUT_EVENT_INTERFACE"]
interface PPB_TouchInputEvent {
/**
* Creates a touch input event with the given parameters. Normally you
* will get a touch event passed through the HandleInputEvent and will not
* need to create them, but some applications may want to create their own
* for internal use. The type must be one of the touch event types.
* This newly created touch input event does not have any touch point in any
* of the touch-point lists. <code>AddTouchPoint</code> should be called to
* add the touch-points.
*
* @param[in] instance The instance for which this event occurred.
*
* @param[in] type A <code>PP_InputEvent_Type</code> identifying the type of
* input event.
*
* @param[in] time_stamp A <code>PP_TimeTicks</code> indicating the time
* when the event occurred.
*
* @param[in] modifiers A bit field combination of the
* <code>PP_InputEvent_Modifier</code> flags.
*
* @return A <code>PP_Resource</code> containing the new touch input event.
*/
PP_Resource Create([in] PP_Instance instance,
[in] PP_InputEvent_Type type,
[in] PP_TimeTicks time_stamp,
[in] uint32_t modifiers);
/**
* Adds a touch point to the touch event in the specified touch-list.
*
* @param[in] touch_event A <code>PP_Resource</code> corresponding to a touch
* event.
*
* @param[in] list The list to add the touch point to.
*
* @param[in] point The point to add to the list.
*/
void AddTouchPoint([in] PP_Resource touch_event,
[in] PP_TouchListType list,
[in] PP_TouchPoint point);
/**
* IsTouchInputEvent() determines if a resource is a touch event.
*
* @param[in] resource A <code>PP_Resource</code> corresponding to an event.
*
* @return <code>PP_TRUE</code> if the given resource is a valid touch input
* event, otherwise <code>PP_FALSE</code>.
*/
PP_Bool IsTouchInputEvent([in] PP_Resource resource);
/**
* Returns the number of touch-points in the specified list.
*
* @param[in] resource A <code>PP_Resource</code> corresponding to a touch
* event.
*
* @param[in] list The list.
*
* @return The number of touch-points in the specified list.
*/
uint32_t GetTouchCount([in] PP_Resource resource,
[in] PP_TouchListType list);
/**
* Returns the touch-point at the specified index from the specified list.
*
* @param[in] resource A <code>PP_Resource</code> corresponding to a touch
* event.
*
* @param[in] list The list.
*
* @param[in] index The index.
*
* @return A <code>PP_TouchPoint</code> representing the touch-point.
*/
PP_TouchPoint GetTouchByIndex([in] PP_Resource resource,
[in] PP_TouchListType list,
[in] uint32_t index);
/**
* Returns the touch-point with the specified touch-id in the specified list.
*
* @param[in] resource A <code>PP_Resource</code> corresponding to a touch
* event.
*
* @param[in] list The list.
*
* @param[in] touch_id The id of the touch-point.
*
* @return A <code>PP_TouchPoint</code> representing the touch-point.
*/
PP_TouchPoint GetTouchById([in] PP_Resource resource,
[in] PP_TouchListType list,
[in] uint32_t touch_id);
/**
* Returns the touch-tilt with the specified index in the specified list.
*
* @param[in] resource A <code>PP_Resource</code> corresponding to a touch
* event.
*
* @param[in] list The list.
*
* @param[in] index The index.
*
* @return A <code>PP_FloatPoint</code> representing the tilt of the
* touch-point.
*/
[version=1.4]
PP_FloatPoint GetTouchTiltByIndex([in] PP_Resource resource,
[in] PP_TouchListType list,
[in] uint32_t index);
/**
* Returns the touch-tilt with the specified touch-id in the specified list.
*
* @param[in] resource A <code>PP_Resource</code> corresponding to a touch
* event.
*
* @param[in] list The list.
*
* @param[in] touch_id The id of the touch-point.
*
* @return A <code>PP_FloatPoint</code> representing the tilt of the
* touch-point.
*/
[version=1.4]
PP_FloatPoint GetTouchTiltById([in] PP_Resource resource,
[in] PP_TouchListType list,
[in] uint32_t touch_id);
};
[macro="PPB_IME_INPUT_EVENT_INTERFACE"]
interface PPB_IMEInputEvent {
/**
* Create() creates an IME input event with the given parameters. Normally
* you will get an IME event passed through the <code>HandleInputEvent</code>
* and will not need to create them, but some applications may want to create
* their own for internal use.
*
* @param[in] instance The instance for which this event occurred.
*
* @param[in] type A <code>PP_InputEvent_Type</code> identifying the type of
* input event. The type must be one of the IME event types.
*
* @param[in] time_stamp A <code>PP_TimeTicks</code> indicating the time
* when the event occurred.
*
* @param[in] text The string returned by <code>GetText</code>.
*
* @param[in] segment_number The number returned by
* <code>GetSegmentNumber</code>.
*
* @param[in] segment_offsets The array of numbers returned by
* <code>GetSegmentOffset</code>. If <code>segment_number</code> is zero,
* the number of elements of the array should be zero. If
* <code>segment_number</code> is non-zero, the length of the array must be
* <code>segment_number</code> + 1.
*
* @param[in] target_segment The number returned by
* <code>GetTargetSegment</code>.
*
* @param[in] selection_start The start index returned by
* <code>GetSelection</code>.
*
* @param[in] selection_end The end index returned by
* <code>GetSelection</code>.
*
* @return A <code>PP_Resource</code> containing the new IME input event.
*/
PP_Resource Create([in] PP_Instance instance,
[in] PP_InputEvent_Type type,
[in] PP_TimeTicks time_stamp,
[in] PP_Var text,
[in] uint32_t segment_number,
[in] uint32_t[] segment_offsets,
[in] int32_t target_segment,
[in] uint32_t selection_start,
[in] uint32_t selection_end);
/**
* IsIMEInputEvent() determines if a resource is an IME event.
*
* @param[in] resource A <code>PP_Resource</code> corresponding to an event.
*
* @return <code>PP_TRUE</code> if the given resource is a valid input event.
*/
PP_Bool IsIMEInputEvent([in] PP_Resource resource);
/**
* GetText() returns the composition text as a UTF-8 string for the given IME
* event.
*
* @param[in] ime_event A <code>PP_Resource</code> corresponding to an IME
* event.
*
* @return A string var representing the composition text. For non-IME input
* events the return value will be an undefined var.
*/
PP_Var GetText([in] PP_Resource ime_event);
/**
* GetSegmentNumber() returns the number of segments in the composition text.
*
* @param[in] ime_event A <code>PP_Resource</code> corresponding to an IME
* event.
*
* @return The number of segments. For events other than COMPOSITION_UPDATE,
* returns 0.
*/
uint32_t GetSegmentNumber([in] PP_Resource ime_event);
/**
* GetSegmentOffset() returns the position of the index-th segmentation point
* in the composition text. The position is given by a byte-offset (not a
* character-offset) of the string returned by GetText(). It always satisfies
* 0=GetSegmentOffset(0) < ... < GetSegmentOffset(i) < GetSegmentOffset(i+1)
* < ... < GetSegmentOffset(GetSegmentNumber())=(byte-length of GetText()).
* Note that [GetSegmentOffset(i), GetSegmentOffset(i+1)) represents the range
* of the i-th segment, and hence GetSegmentNumber() can be a valid argument
* to this function instead of an off-by-1 error.
*
* @param[in] ime_event A <code>PP_Resource</code> corresponding to an IME
* event.
*
* @param[in] index An integer indicating a segment.
*
* @return The byte-offset of the segmentation point. If the event is not
* COMPOSITION_UPDATE or index is out of range, returns 0.
*/
uint32_t GetSegmentOffset([in] PP_Resource ime_event,
[in] uint32_t index);
/**
* GetTargetSegment() returns the index of the current target segment of
* composition.
*
* @param[in] ime_event A <code>PP_Resource</code> corresponding to an IME
* event.
*
* @return An integer indicating the index of the target segment. When there
* is no active target segment, or the event is not COMPOSITION_UPDATE,
* returns -1.
*/
int32_t GetTargetSegment([in] PP_Resource ime_event);
/**
* GetSelection() returns the range selected by caret in the composition text.
*
* @param[in] ime_event A <code>PP_Resource</code> corresponding to an IME
* event.
*
* @param[out] start The start position of the current selection.
*
* @param[out] end The end position of the current selection.
*/
void GetSelection([in] PP_Resource ime_event,
[out] uint32_t start,
[out] uint32_t end);
};
|