OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2010, Google Inc. | 2 * Copyright 2010, Google Inc. |
3 * All rights reserved. | 3 * All rights reserved. |
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 are | 6 * modification, are permitted provided that the following conditions are |
7 * met: | 7 * met: |
8 * | 8 * |
9 * * Redistributions of source code must retain the above copyright | 9 * * Redistributions of source code must retain the above copyright |
10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
(...skipping 822 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
833 y = event.pageY - pos.y; | 833 y = event.pageY - pos.y; |
834 } | 834 } |
835 return { x: x, y: y }; | 835 return { x: x, y: y }; |
836 }; | 836 }; |
837 | 837 |
838 | 838 |
839 /** | 839 /** |
840 * Wraps a user's event callback with one that properly computes | 840 * Wraps a user's event callback with one that properly computes |
841 * relative coordinates for the event. | 841 * relative coordinates for the event. |
842 * @param {!o3d.EventCallback} handler Function to call on event. | 842 * @param {!o3d.EventCallback} handler Function to call on event. |
| 843 * @param {boolean} doCancelEvent If event should be canceled after callback. |
843 * @return {!o3d.EventCallback} Wrapped handler function. | 844 * @return {!o3d.EventCallback} Wrapped handler function. |
844 * @private | 845 * @private |
845 */ | 846 */ |
846 o3d.Client.wrapEventCallback_ = function(handler) { | 847 o3d.Client.wrapEventCallback_ = function(handler, doCancelEvent) { |
847 return function(event) { | 848 return function(event) { |
848 event = o3d.Client.getEvent_(event); | 849 event = o3d.Client.getEvent_(event); |
849 var info = o3d.Client.getEventInfo_(event); | 850 var info = o3d.Client.getEventInfo_(event); |
850 var relativeCoords = o3d.Client.getRelativeCoordinates_(info); | 851 var relativeCoords = o3d.Client.getRelativeCoordinates_(info); |
851 event.x = relativeCoords.x; | 852 event.x = relativeCoords.x; |
852 event.y = relativeCoords.y; | 853 event.y = relativeCoords.y; |
| 854 // Invert value to meet contract for deltaY. @see event.js. |
| 855 event.deltaY = -info.wheel; |
853 handler(event); | 856 handler(event); |
| 857 if (doCancelEvent) { |
| 858 o3djs.event.cancel(event); |
| 859 } |
854 }; | 860 }; |
855 }; | 861 }; |
856 | 862 |
857 | 863 |
858 /** | 864 /** |
859 * Sets a callback for a given event type. | 865 * Sets a callback for a given event type. |
860 * types. | 866 * types. |
861 * There can be only one callback for a given event type at a time; setting a | 867 * There can be only one callback for a given event type at a time; setting a |
862 * new one deletes the old one. | 868 * new one deletes the old one. |
863 * | 869 * |
864 * @param {string} type Type of event to set callback for. | 870 * @param {string} type Type of event to set callback for. |
865 * @param {!o3d.EventCallback} handler Function to call on event. | 871 * @param {!o3d.EventCallback} handler Function to call on event. |
866 */ | 872 */ |
867 o3d.Client.prototype.setEventCallback = | 873 o3d.Client.prototype.setEventCallback = |
868 function(type, handler) { | 874 function(type, handler) { |
869 var listener = this.gl.hack_canvas; | 875 var listener = this.gl.hack_canvas; |
870 // TODO(petersont): Figure out a way for a canvas to listen to a key event | 876 // TODO(petersont): Figure out a way for a canvas to listen to a key event |
871 // directly. | 877 // directly. |
| 878 |
| 879 var isWheelEvent = type == 'wheel'; |
872 var forKeyEvent = type.substr(0, 3) == 'key'; | 880 var forKeyEvent = type.substr(0, 3) == 'key'; |
873 if (forKeyEvent) { | 881 if (forKeyEvent) { |
874 listener = document; | 882 listener = document; |
875 } else { | 883 } else { |
876 handler = o3d.Client.wrapEventCallback_(handler); | 884 handler = o3d.Client.wrapEventCallback_(handler, isWheelEvent); |
877 } | 885 } |
878 listener.addEventListener(type, handler, true); | 886 if (isWheelEvent) { |
| 887 listener.addEventListener('DOMMouseScroll', handler, true); |
| 888 listener.addEventListener('mousewheel', handler, true); |
| 889 } else { |
| 890 listener.addEventListener(type, handler, true); |
| 891 } |
879 }; | 892 }; |
880 | 893 |
881 | 894 |
882 /** | 895 /** |
883 * Removes the previously-registered callback for an event of the given type. | 896 * Removes the previously-registered callback for an event of the given type. |
884 * @param {string} type Type of event to clear callback for. | 897 * @param {string} type Type of event to clear callback for. |
885 */ | 898 */ |
886 o3d.Client.prototype.clearEventCallback = | 899 o3d.Client.prototype.clearEventCallback = |
887 function(type) { | 900 function(type) { |
| 901 //TODO(petersont): Same as TODO in setEventCallback above. |
| 902 var listener = this.gl.hack_canvas; |
| 903 |
| 904 var isWheelEvent = type == 'wheel'; |
888 var forKeyEvent = type.substr(0, 3) == 'key'; | 905 var forKeyEvent = type.substr(0, 3) == 'key'; |
889 if (forKeyEvent) { | 906 if (forKeyEvent) { |
890 listener = document; | 907 listener = document; |
891 } | 908 } |
892 listener.removeEventListener(type); | 909 |
| 910 if (isWheelEvent) { |
| 911 listener.removeEventListener('DOMMouseScroll'); |
| 912 listener.removeEventListener('mousewheel'); |
| 913 } else { |
| 914 listener.removeEventListener(type); |
| 915 } |
893 }; | 916 }; |
894 | 917 |
895 | 918 |
896 /** | 919 /** |
897 * Sets the texture to use when a Texture or Sampler is missing while | 920 * Sets the texture to use when a Texture or Sampler is missing while |
898 * rendering. The default is a red texture with a yellow no symbol. | 921 * rendering. The default is a red texture with a yellow no symbol. |
899 * <span style="color:yellow; background-color: red;">Ø. | 922 * <span style="color:yellow; background-color: red;">Ø. |
900 * If you set it to null you'll get an error if you try to render something | 923 * If you set it to null you'll get an error if you try to render something |
901 * that is missing a needed Texture, Sampler or ParamSampler. | 924 * that is missing a needed Texture, Sampler or ParamSampler. |
902 * | 925 * |
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1110 o3d.Client.prototype.clientInfo = null; | 1133 o3d.Client.prototype.clientInfo = null; |
1111 | 1134 |
1112 | 1135 |
1113 /** | 1136 /** |
1114 * The canvas associated with this client. | 1137 * The canvas associated with this client. |
1115 * @type {Element} | 1138 * @type {Element} |
1116 */ | 1139 */ |
1117 o3d.Client.prototype.canvas = null; | 1140 o3d.Client.prototype.canvas = null; |
1118 | 1141 |
1119 | 1142 |
OLD | NEW |