mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
af4dc39641
--HG-- rename : accessible/src/atk/ARIAGridAccessibleWrap.h => accessible/atk/ARIAGridAccessibleWrap.h rename : accessible/src/atk/AccessibleWrap.cpp => accessible/atk/AccessibleWrap.cpp rename : accessible/src/atk/AccessibleWrap.h => accessible/atk/AccessibleWrap.h rename : accessible/src/atk/ApplicationAccessibleWrap.cpp => accessible/atk/ApplicationAccessibleWrap.cpp rename : accessible/src/atk/ApplicationAccessibleWrap.h => accessible/atk/ApplicationAccessibleWrap.h rename : accessible/src/atk/AtkSocketAccessible.cpp => accessible/atk/AtkSocketAccessible.cpp rename : accessible/src/atk/AtkSocketAccessible.h => accessible/atk/AtkSocketAccessible.h rename : accessible/src/atk/DocAccessibleWrap.cpp => accessible/atk/DocAccessibleWrap.cpp rename : accessible/src/atk/DocAccessibleWrap.h => accessible/atk/DocAccessibleWrap.h rename : accessible/src/atk/HTMLTableAccessibleWrap.h => accessible/atk/HTMLTableAccessibleWrap.h rename : accessible/src/atk/HyperTextAccessibleWrap.h => accessible/atk/HyperTextAccessibleWrap.h rename : accessible/src/atk/ImageAccessibleWrap.h => accessible/atk/ImageAccessibleWrap.h rename : accessible/src/atk/InterfaceInitFuncs.h => accessible/atk/InterfaceInitFuncs.h rename : accessible/src/atk/Makefile.in => accessible/atk/Makefile.in rename : accessible/src/atk/Platform.cpp => accessible/atk/Platform.cpp rename : accessible/src/atk/RootAccessibleWrap.cpp => accessible/atk/RootAccessibleWrap.cpp rename : accessible/src/atk/RootAccessibleWrap.h => accessible/atk/RootAccessibleWrap.h rename : accessible/src/atk/TextLeafAccessibleWrap.h => accessible/atk/TextLeafAccessibleWrap.h rename : accessible/src/atk/UtilInterface.cpp => accessible/atk/UtilInterface.cpp rename : accessible/src/atk/XULListboxAccessibleWrap.h => accessible/atk/XULListboxAccessibleWrap.h rename : accessible/src/atk/XULMenuAccessibleWrap.h => accessible/atk/XULMenuAccessibleWrap.h rename : accessible/src/atk/XULTreeGridAccessibleWrap.h => accessible/atk/XULTreeGridAccessibleWrap.h rename : accessible/src/atk/moz.build => accessible/atk/moz.build rename : accessible/src/atk/nsMai.h => accessible/atk/nsMai.h rename : accessible/src/atk/nsMaiHyperlink.cpp => accessible/atk/nsMaiHyperlink.cpp rename : accessible/src/atk/nsMaiHyperlink.h => accessible/atk/nsMaiHyperlink.h rename : accessible/src/atk/nsMaiInterfaceAction.cpp => accessible/atk/nsMaiInterfaceAction.cpp rename : accessible/src/atk/nsMaiInterfaceComponent.cpp => accessible/atk/nsMaiInterfaceComponent.cpp rename : accessible/src/atk/nsMaiInterfaceDocument.cpp => accessible/atk/nsMaiInterfaceDocument.cpp rename : accessible/src/atk/nsMaiInterfaceEditableText.cpp => accessible/atk/nsMaiInterfaceEditableText.cpp rename : accessible/src/atk/nsMaiInterfaceHyperlinkImpl.cpp => accessible/atk/nsMaiInterfaceHyperlinkImpl.cpp rename : accessible/src/atk/nsMaiInterfaceHypertext.cpp => accessible/atk/nsMaiInterfaceHypertext.cpp rename : accessible/src/atk/nsMaiInterfaceImage.cpp => accessible/atk/nsMaiInterfaceImage.cpp rename : accessible/src/atk/nsMaiInterfaceSelection.cpp => accessible/atk/nsMaiInterfaceSelection.cpp rename : accessible/src/atk/nsMaiInterfaceTable.cpp => accessible/atk/nsMaiInterfaceTable.cpp rename : accessible/src/atk/nsMaiInterfaceText.cpp => accessible/atk/nsMaiInterfaceText.cpp rename : accessible/src/atk/nsMaiInterfaceValue.cpp => accessible/atk/nsMaiInterfaceValue.cpp rename : accessible/src/atk/nsStateMap.h => accessible/atk/nsStateMap.h rename : accessible/src/base/ARIAMap.cpp => accessible/base/ARIAMap.cpp rename : accessible/src/base/ARIAMap.h => accessible/base/ARIAMap.h rename : accessible/src/base/ARIAStateMap.cpp => accessible/base/ARIAStateMap.cpp rename : accessible/src/base/ARIAStateMap.h => accessible/base/ARIAStateMap.h rename : accessible/src/base/AccCollector.cpp => accessible/base/AccCollector.cpp rename : accessible/src/base/AccCollector.h => accessible/base/AccCollector.h rename : accessible/src/base/AccEvent.cpp => accessible/base/AccEvent.cpp rename : accessible/src/base/AccEvent.h => accessible/base/AccEvent.h rename : accessible/src/base/AccGroupInfo.cpp => accessible/base/AccGroupInfo.cpp rename : accessible/src/base/AccGroupInfo.h => accessible/base/AccGroupInfo.h rename : accessible/src/base/AccIterator.cpp => accessible/base/AccIterator.cpp rename : accessible/src/base/AccIterator.h => accessible/base/AccIterator.h rename : accessible/src/base/AccTypes.h => accessible/base/AccTypes.h rename : accessible/src/base/Asserts.cpp => accessible/base/Asserts.cpp rename : accessible/src/base/DocManager.cpp => accessible/base/DocManager.cpp rename : accessible/src/base/DocManager.h => accessible/base/DocManager.h rename : accessible/src/base/EventQueue.cpp => accessible/base/EventQueue.cpp rename : accessible/src/base/EventQueue.h => accessible/base/EventQueue.h rename : accessible/src/base/Filters.cpp => accessible/base/Filters.cpp rename : accessible/src/base/Filters.h => accessible/base/Filters.h rename : accessible/src/base/FocusManager.cpp => accessible/base/FocusManager.cpp rename : accessible/src/base/FocusManager.h => accessible/base/FocusManager.h rename : accessible/src/base/Logging.cpp => accessible/base/Logging.cpp rename : accessible/src/base/Logging.h => accessible/base/Logging.h rename : accessible/src/base/Makefile.in => accessible/base/Makefile.in rename : accessible/src/base/NotificationController.cpp => accessible/base/NotificationController.cpp rename : accessible/src/base/NotificationController.h => accessible/base/NotificationController.h rename : accessible/src/base/Platform.h => accessible/base/Platform.h rename : accessible/src/base/Relation.h => accessible/base/Relation.h rename : accessible/src/base/RelationType.h => accessible/base/RelationType.h rename : accessible/src/base/RelationTypeMap.h => accessible/base/RelationTypeMap.h rename : accessible/src/base/Role.h => accessible/base/Role.h rename : accessible/src/base/RoleMap.h => accessible/base/RoleMap.h rename : accessible/src/base/SelectionManager.cpp => accessible/base/SelectionManager.cpp rename : accessible/src/base/SelectionManager.h => accessible/base/SelectionManager.h rename : accessible/src/base/States.h => accessible/base/States.h rename : accessible/src/base/Statistics.h => accessible/base/Statistics.h rename : accessible/src/base/StyleInfo.cpp => accessible/base/StyleInfo.cpp rename : accessible/src/base/StyleInfo.h => accessible/base/StyleInfo.h rename : accessible/src/base/TextAttrs.cpp => accessible/base/TextAttrs.cpp rename : accessible/src/base/TextAttrs.h => accessible/base/TextAttrs.h rename : accessible/src/base/TextRange.cpp => accessible/base/TextRange.cpp rename : accessible/src/base/TextRange.h => accessible/base/TextRange.h rename : accessible/src/base/TextUpdater.cpp => accessible/base/TextUpdater.cpp rename : accessible/src/base/TextUpdater.h => accessible/base/TextUpdater.h rename : accessible/src/base/TreeWalker.cpp => accessible/base/TreeWalker.cpp rename : accessible/src/base/TreeWalker.h => accessible/base/TreeWalker.h rename : accessible/src/base/moz.build => accessible/base/moz.build rename : accessible/src/base/nsAccCache.h => accessible/base/nsAccCache.h rename : accessible/src/base/nsAccUtils.cpp => accessible/base/nsAccUtils.cpp rename : accessible/src/base/nsAccUtils.h => accessible/base/nsAccUtils.h rename : accessible/src/base/nsAccessibilityService.cpp => accessible/base/nsAccessibilityService.cpp rename : accessible/src/base/nsAccessibilityService.h => accessible/base/nsAccessibilityService.h rename : accessible/src/base/nsAccessiblePivot.cpp => accessible/base/nsAccessiblePivot.cpp rename : accessible/src/base/nsAccessiblePivot.h => accessible/base/nsAccessiblePivot.h rename : accessible/src/base/nsCoreUtils.cpp => accessible/base/nsCoreUtils.cpp rename : accessible/src/base/nsCoreUtils.h => accessible/base/nsCoreUtils.h rename : accessible/src/base/nsEventShell.cpp => accessible/base/nsEventShell.cpp rename : accessible/src/base/nsEventShell.h => accessible/base/nsEventShell.h rename : accessible/src/base/nsTextEquivUtils.cpp => accessible/base/nsTextEquivUtils.cpp rename : accessible/src/base/nsTextEquivUtils.h => accessible/base/nsTextEquivUtils.h rename : accessible/src/generic/ARIAGridAccessible-inl.h => accessible/generic/ARIAGridAccessible-inl.h rename : accessible/src/generic/ARIAGridAccessible.cpp => accessible/generic/ARIAGridAccessible.cpp rename : accessible/src/generic/ARIAGridAccessible.h => accessible/generic/ARIAGridAccessible.h rename : accessible/src/generic/Accessible-inl.h => accessible/generic/Accessible-inl.h rename : accessible/src/generic/Accessible.cpp => accessible/generic/Accessible.cpp rename : accessible/src/generic/Accessible.h => accessible/generic/Accessible.h rename : accessible/src/generic/ApplicationAccessible.cpp => accessible/generic/ApplicationAccessible.cpp rename : accessible/src/generic/ApplicationAccessible.h => accessible/generic/ApplicationAccessible.h rename : accessible/src/generic/BaseAccessibles.cpp => accessible/generic/BaseAccessibles.cpp rename : accessible/src/generic/BaseAccessibles.h => accessible/generic/BaseAccessibles.h rename : accessible/src/generic/DocAccessible-inl.h => accessible/generic/DocAccessible-inl.h rename : accessible/src/generic/DocAccessible.cpp => accessible/generic/DocAccessible.cpp rename : accessible/src/generic/DocAccessible.h => accessible/generic/DocAccessible.h rename : accessible/src/generic/FormControlAccessible.cpp => accessible/generic/FormControlAccessible.cpp rename : accessible/src/generic/FormControlAccessible.h => accessible/generic/FormControlAccessible.h rename : accessible/src/generic/HyperTextAccessible-inl.h => accessible/generic/HyperTextAccessible-inl.h rename : accessible/src/generic/HyperTextAccessible.cpp => accessible/generic/HyperTextAccessible.cpp rename : accessible/src/generic/HyperTextAccessible.h => accessible/generic/HyperTextAccessible.h rename : accessible/src/generic/ImageAccessible.cpp => accessible/generic/ImageAccessible.cpp rename : accessible/src/generic/ImageAccessible.h => accessible/generic/ImageAccessible.h rename : accessible/src/generic/OuterDocAccessible.cpp => accessible/generic/OuterDocAccessible.cpp rename : accessible/src/generic/OuterDocAccessible.h => accessible/generic/OuterDocAccessible.h rename : accessible/src/generic/RootAccessible.cpp => accessible/generic/RootAccessible.cpp rename : accessible/src/generic/RootAccessible.h => accessible/generic/RootAccessible.h rename : accessible/src/generic/TableAccessible.h => accessible/generic/TableAccessible.h rename : accessible/src/generic/TableCellAccessible.cpp => accessible/generic/TableCellAccessible.cpp rename : accessible/src/generic/TableCellAccessible.h => accessible/generic/TableCellAccessible.h rename : accessible/src/generic/TextLeafAccessible.cpp => accessible/generic/TextLeafAccessible.cpp rename : accessible/src/generic/TextLeafAccessible.h => accessible/generic/TextLeafAccessible.h rename : accessible/src/generic/moz.build => accessible/generic/moz.build rename : accessible/src/html/HTMLCanvasAccessible.cpp => accessible/html/HTMLCanvasAccessible.cpp rename : accessible/src/html/HTMLCanvasAccessible.h => accessible/html/HTMLCanvasAccessible.h rename : accessible/src/html/HTMLElementAccessibles.cpp => accessible/html/HTMLElementAccessibles.cpp rename : accessible/src/html/HTMLElementAccessibles.h => accessible/html/HTMLElementAccessibles.h rename : accessible/src/html/HTMLFormControlAccessible.cpp => accessible/html/HTMLFormControlAccessible.cpp rename : accessible/src/html/HTMLFormControlAccessible.h => accessible/html/HTMLFormControlAccessible.h rename : accessible/src/html/HTMLImageMapAccessible.cpp => accessible/html/HTMLImageMapAccessible.cpp rename : accessible/src/html/HTMLImageMapAccessible.h => accessible/html/HTMLImageMapAccessible.h rename : accessible/src/html/HTMLLinkAccessible.cpp => accessible/html/HTMLLinkAccessible.cpp rename : accessible/src/html/HTMLLinkAccessible.h => accessible/html/HTMLLinkAccessible.h rename : accessible/src/html/HTMLListAccessible.cpp => accessible/html/HTMLListAccessible.cpp rename : accessible/src/html/HTMLListAccessible.h => accessible/html/HTMLListAccessible.h rename : accessible/src/html/HTMLSelectAccessible.cpp => accessible/html/HTMLSelectAccessible.cpp rename : accessible/src/html/HTMLSelectAccessible.h => accessible/html/HTMLSelectAccessible.h rename : accessible/src/html/HTMLTableAccessible.cpp => accessible/html/HTMLTableAccessible.cpp rename : accessible/src/html/HTMLTableAccessible.h => accessible/html/HTMLTableAccessible.h rename : accessible/src/html/moz.build => accessible/html/moz.build rename : accessible/src/jsat/AccessFu.css => accessible/jsat/AccessFu.css rename : accessible/src/jsat/AccessFu.jsm => accessible/jsat/AccessFu.jsm rename : accessible/src/jsat/Constants.jsm => accessible/jsat/Constants.jsm rename : accessible/src/jsat/ContentControl.jsm => accessible/jsat/ContentControl.jsm rename : accessible/src/jsat/EventManager.jsm => accessible/jsat/EventManager.jsm rename : accessible/src/jsat/Gestures.jsm => accessible/jsat/Gestures.jsm rename : accessible/src/jsat/OutputGenerator.jsm => accessible/jsat/OutputGenerator.jsm rename : accessible/src/jsat/PointerAdapter.jsm => accessible/jsat/PointerAdapter.jsm rename : accessible/src/jsat/Presentation.jsm => accessible/jsat/Presentation.jsm rename : accessible/src/jsat/TraversalRules.jsm => accessible/jsat/TraversalRules.jsm rename : accessible/src/jsat/Utils.jsm => accessible/jsat/Utils.jsm rename : accessible/src/jsat/content-script.js => accessible/jsat/content-script.js rename : accessible/src/jsat/jar.mn => accessible/jsat/jar.mn rename : accessible/src/jsat/moz.build => accessible/jsat/moz.build rename : accessible/src/jsat/sounds/clicked.ogg => accessible/jsat/sounds/clicked.ogg rename : accessible/src/jsat/sounds/virtual_cursor_key.ogg => accessible/jsat/sounds/virtual_cursor_key.ogg rename : accessible/src/jsat/sounds/virtual_cursor_move.ogg => accessible/jsat/sounds/virtual_cursor_move.ogg rename : accessible/src/mac/ARIAGridAccessibleWrap.h => accessible/mac/ARIAGridAccessibleWrap.h rename : accessible/src/mac/AccessibleWrap.h => accessible/mac/AccessibleWrap.h rename : accessible/src/mac/AccessibleWrap.mm => accessible/mac/AccessibleWrap.mm rename : accessible/src/mac/ApplicationAccessibleWrap.h => accessible/mac/ApplicationAccessibleWrap.h rename : accessible/src/mac/DocAccessibleWrap.h => accessible/mac/DocAccessibleWrap.h rename : accessible/src/mac/DocAccessibleWrap.mm => accessible/mac/DocAccessibleWrap.mm rename : accessible/src/mac/HTMLTableAccessibleWrap.h => accessible/mac/HTMLTableAccessibleWrap.h rename : accessible/src/mac/HyperTextAccessibleWrap.h => accessible/mac/HyperTextAccessibleWrap.h rename : accessible/src/mac/ImageAccessibleWrap.h => accessible/mac/ImageAccessibleWrap.h rename : accessible/src/mac/MacUtils.h => accessible/mac/MacUtils.h rename : accessible/src/mac/MacUtils.mm => accessible/mac/MacUtils.mm rename : accessible/src/mac/Platform.mm => accessible/mac/Platform.mm rename : accessible/src/mac/RootAccessibleWrap.h => accessible/mac/RootAccessibleWrap.h rename : accessible/src/mac/RootAccessibleWrap.mm => accessible/mac/RootAccessibleWrap.mm rename : accessible/src/mac/TextLeafAccessibleWrap.h => accessible/mac/TextLeafAccessibleWrap.h rename : accessible/src/mac/XULListboxAccessibleWrap.h => accessible/mac/XULListboxAccessibleWrap.h rename : accessible/src/mac/XULMenuAccessibleWrap.h => accessible/mac/XULMenuAccessibleWrap.h rename : accessible/src/mac/XULTreeGridAccessibleWrap.h => accessible/mac/XULTreeGridAccessibleWrap.h rename : accessible/src/mac/moz.build => accessible/mac/moz.build rename : accessible/src/mac/mozAccessible.h => accessible/mac/mozAccessible.h rename : accessible/src/mac/mozAccessible.mm => accessible/mac/mozAccessible.mm rename : accessible/src/mac/mozAccessibleProtocol.h => accessible/mac/mozAccessibleProtocol.h rename : accessible/src/mac/mozActionElements.h => accessible/mac/mozActionElements.h rename : accessible/src/mac/mozActionElements.mm => accessible/mac/mozActionElements.mm rename : accessible/src/mac/mozDocAccessible.h => accessible/mac/mozDocAccessible.h rename : accessible/src/mac/mozDocAccessible.mm => accessible/mac/mozDocAccessible.mm rename : accessible/src/mac/mozHTMLAccessible.h => accessible/mac/mozHTMLAccessible.h rename : accessible/src/mac/mozHTMLAccessible.mm => accessible/mac/mozHTMLAccessible.mm rename : accessible/src/mac/mozTextAccessible.h => accessible/mac/mozTextAccessible.h rename : accessible/src/mac/mozTextAccessible.mm => accessible/mac/mozTextAccessible.mm rename : accessible/src/other/ARIAGridAccessibleWrap.h => accessible/other/ARIAGridAccessibleWrap.h rename : accessible/src/other/AccessibleWrap.cpp => accessible/other/AccessibleWrap.cpp rename : accessible/src/other/AccessibleWrap.h => accessible/other/AccessibleWrap.h rename : accessible/src/other/ApplicationAccessibleWrap.h => accessible/other/ApplicationAccessibleWrap.h rename : accessible/src/other/DocAccessibleWrap.h => accessible/other/DocAccessibleWrap.h rename : accessible/src/other/HTMLTableAccessibleWrap.h => accessible/other/HTMLTableAccessibleWrap.h rename : accessible/src/other/HyperTextAccessibleWrap.h => accessible/other/HyperTextAccessibleWrap.h rename : accessible/src/other/ImageAccessibleWrap.h => accessible/other/ImageAccessibleWrap.h rename : accessible/src/other/Platform.cpp => accessible/other/Platform.cpp rename : accessible/src/other/RootAccessibleWrap.h => accessible/other/RootAccessibleWrap.h rename : accessible/src/other/TextLeafAccessibleWrap.h => accessible/other/TextLeafAccessibleWrap.h rename : accessible/src/other/XULListboxAccessibleWrap.h => accessible/other/XULListboxAccessibleWrap.h rename : accessible/src/other/XULMenuAccessibleWrap.h => accessible/other/XULMenuAccessibleWrap.h rename : accessible/src/other/XULTreeGridAccessibleWrap.h => accessible/other/XULTreeGridAccessibleWrap.h rename : accessible/src/other/moz.build => accessible/other/moz.build rename : accessible/src/windows/ia2/Makefile.in => accessible/windows/ia2/Makefile.in rename : accessible/src/windows/ia2/ia2Accessible.cpp => accessible/windows/ia2/ia2Accessible.cpp rename : accessible/src/windows/ia2/ia2Accessible.h => accessible/windows/ia2/ia2Accessible.h rename : accessible/src/windows/ia2/ia2AccessibleAction.cpp => accessible/windows/ia2/ia2AccessibleAction.cpp rename : accessible/src/windows/ia2/ia2AccessibleAction.h => accessible/windows/ia2/ia2AccessibleAction.h rename : accessible/src/windows/ia2/ia2AccessibleComponent.cpp => accessible/windows/ia2/ia2AccessibleComponent.cpp rename : accessible/src/windows/ia2/ia2AccessibleComponent.h => accessible/windows/ia2/ia2AccessibleComponent.h rename : accessible/src/windows/ia2/ia2AccessibleEditableText.cpp => accessible/windows/ia2/ia2AccessibleEditableText.cpp rename : accessible/src/windows/ia2/ia2AccessibleEditableText.h => accessible/windows/ia2/ia2AccessibleEditableText.h rename : accessible/src/windows/ia2/ia2AccessibleHyperlink.cpp => accessible/windows/ia2/ia2AccessibleHyperlink.cpp rename : accessible/src/windows/ia2/ia2AccessibleHyperlink.h => accessible/windows/ia2/ia2AccessibleHyperlink.h rename : accessible/src/windows/ia2/ia2AccessibleHypertext.cpp => accessible/windows/ia2/ia2AccessibleHypertext.cpp rename : accessible/src/windows/ia2/ia2AccessibleHypertext.h => accessible/windows/ia2/ia2AccessibleHypertext.h rename : accessible/src/windows/ia2/ia2AccessibleImage.cpp => accessible/windows/ia2/ia2AccessibleImage.cpp rename : accessible/src/windows/ia2/ia2AccessibleImage.h => accessible/windows/ia2/ia2AccessibleImage.h rename : accessible/src/windows/ia2/ia2AccessibleRelation.cpp => accessible/windows/ia2/ia2AccessibleRelation.cpp rename : accessible/src/windows/ia2/ia2AccessibleRelation.h => accessible/windows/ia2/ia2AccessibleRelation.h rename : accessible/src/windows/ia2/ia2AccessibleTable.cpp => accessible/windows/ia2/ia2AccessibleTable.cpp rename : accessible/src/windows/ia2/ia2AccessibleTable.h => accessible/windows/ia2/ia2AccessibleTable.h rename : accessible/src/windows/ia2/ia2AccessibleTableCell.cpp => accessible/windows/ia2/ia2AccessibleTableCell.cpp rename : accessible/src/windows/ia2/ia2AccessibleTableCell.h => accessible/windows/ia2/ia2AccessibleTableCell.h rename : accessible/src/windows/ia2/ia2AccessibleText.cpp => accessible/windows/ia2/ia2AccessibleText.cpp rename : accessible/src/windows/ia2/ia2AccessibleText.h => accessible/windows/ia2/ia2AccessibleText.h rename : accessible/src/windows/ia2/ia2AccessibleValue.cpp => accessible/windows/ia2/ia2AccessibleValue.cpp rename : accessible/src/windows/ia2/ia2AccessibleValue.h => accessible/windows/ia2/ia2AccessibleValue.h rename : accessible/src/windows/ia2/moz.build => accessible/windows/ia2/moz.build rename : accessible/src/windows/moz.build => accessible/windows/moz.build rename : accessible/src/windows/msaa/ARIAGridAccessibleWrap.cpp => accessible/windows/msaa/ARIAGridAccessibleWrap.cpp rename : accessible/src/windows/msaa/ARIAGridAccessibleWrap.h => accessible/windows/msaa/ARIAGridAccessibleWrap.h rename : accessible/src/windows/msaa/AccessibleWrap.cpp => accessible/windows/msaa/AccessibleWrap.cpp rename : accessible/src/windows/msaa/AccessibleWrap.h => accessible/windows/msaa/AccessibleWrap.h rename : accessible/src/windows/msaa/ApplicationAccessibleWrap.cpp => accessible/windows/msaa/ApplicationAccessibleWrap.cpp rename : accessible/src/windows/msaa/ApplicationAccessibleWrap.h => accessible/windows/msaa/ApplicationAccessibleWrap.h rename : accessible/src/windows/msaa/Compatibility.cpp => accessible/windows/msaa/Compatibility.cpp rename : accessible/src/windows/msaa/Compatibility.h => accessible/windows/msaa/Compatibility.h rename : accessible/src/windows/msaa/DocAccessibleWrap.cpp => accessible/windows/msaa/DocAccessibleWrap.cpp rename : accessible/src/windows/msaa/DocAccessibleWrap.h => accessible/windows/msaa/DocAccessibleWrap.h rename : accessible/src/windows/msaa/EnumVariant.cpp => accessible/windows/msaa/EnumVariant.cpp rename : accessible/src/windows/msaa/EnumVariant.h => accessible/windows/msaa/EnumVariant.h rename : accessible/src/windows/msaa/HTMLTableAccessibleWrap.cpp => accessible/windows/msaa/HTMLTableAccessibleWrap.cpp rename : accessible/src/windows/msaa/HTMLTableAccessibleWrap.h => accessible/windows/msaa/HTMLTableAccessibleWrap.h rename : accessible/src/windows/msaa/HTMLWin32ObjectAccessible.cpp => accessible/windows/msaa/HTMLWin32ObjectAccessible.cpp rename : accessible/src/windows/msaa/HTMLWin32ObjectAccessible.h => accessible/windows/msaa/HTMLWin32ObjectAccessible.h rename : accessible/src/windows/msaa/HyperTextAccessibleWrap.cpp => accessible/windows/msaa/HyperTextAccessibleWrap.cpp rename : accessible/src/windows/msaa/HyperTextAccessibleWrap.h => accessible/windows/msaa/HyperTextAccessibleWrap.h rename : accessible/src/windows/msaa/IUnknownImpl.cpp => accessible/windows/msaa/IUnknownImpl.cpp rename : accessible/src/windows/msaa/IUnknownImpl.h => accessible/windows/msaa/IUnknownImpl.h rename : accessible/src/windows/msaa/ImageAccessibleWrap.cpp => accessible/windows/msaa/ImageAccessibleWrap.cpp rename : accessible/src/windows/msaa/ImageAccessibleWrap.h => accessible/windows/msaa/ImageAccessibleWrap.h rename : accessible/src/windows/msaa/Platform.cpp => accessible/windows/msaa/Platform.cpp rename : accessible/src/windows/msaa/RootAccessibleWrap.cpp => accessible/windows/msaa/RootAccessibleWrap.cpp rename : accessible/src/windows/msaa/RootAccessibleWrap.h => accessible/windows/msaa/RootAccessibleWrap.h rename : accessible/src/windows/msaa/ServiceProvider.cpp => accessible/windows/msaa/ServiceProvider.cpp rename : accessible/src/windows/msaa/ServiceProvider.h => accessible/windows/msaa/ServiceProvider.h rename : accessible/src/windows/msaa/TextLeafAccessibleWrap.cpp => accessible/windows/msaa/TextLeafAccessibleWrap.cpp rename : accessible/src/windows/msaa/TextLeafAccessibleWrap.h => accessible/windows/msaa/TextLeafAccessibleWrap.h rename : accessible/src/windows/msaa/XULListboxAccessibleWrap.cpp => accessible/windows/msaa/XULListboxAccessibleWrap.cpp rename : accessible/src/windows/msaa/XULListboxAccessibleWrap.h => accessible/windows/msaa/XULListboxAccessibleWrap.h rename : accessible/src/windows/msaa/XULMenuAccessibleWrap.cpp => accessible/windows/msaa/XULMenuAccessibleWrap.cpp rename : accessible/src/windows/msaa/XULMenuAccessibleWrap.h => accessible/windows/msaa/XULMenuAccessibleWrap.h rename : accessible/src/windows/msaa/XULTreeGridAccessibleWrap.cpp => accessible/windows/msaa/XULTreeGridAccessibleWrap.cpp rename : accessible/src/windows/msaa/XULTreeGridAccessibleWrap.h => accessible/windows/msaa/XULTreeGridAccessibleWrap.h rename : accessible/src/windows/msaa/moz.build => accessible/windows/msaa/moz.build rename : accessible/src/windows/msaa/nsEventMap.h => accessible/windows/msaa/nsEventMap.h rename : accessible/src/windows/msaa/nsWinUtils.cpp => accessible/windows/msaa/nsWinUtils.cpp rename : accessible/src/windows/msaa/nsWinUtils.h => accessible/windows/msaa/nsWinUtils.h rename : accessible/src/windows/sdn/moz.build => accessible/windows/sdn/moz.build rename : accessible/src/windows/sdn/sdnAccessible-inl.h => accessible/windows/sdn/sdnAccessible-inl.h rename : accessible/src/windows/sdn/sdnAccessible.cpp => accessible/windows/sdn/sdnAccessible.cpp rename : accessible/src/windows/sdn/sdnAccessible.h => accessible/windows/sdn/sdnAccessible.h rename : accessible/src/windows/sdn/sdnDocAccessible.cpp => accessible/windows/sdn/sdnDocAccessible.cpp rename : accessible/src/windows/sdn/sdnDocAccessible.h => accessible/windows/sdn/sdnDocAccessible.h rename : accessible/src/windows/sdn/sdnTextAccessible.cpp => accessible/windows/sdn/sdnTextAccessible.cpp rename : accessible/src/windows/sdn/sdnTextAccessible.h => accessible/windows/sdn/sdnTextAccessible.h rename : accessible/src/windows/uia/Makefile.in => accessible/windows/uia/Makefile.in rename : accessible/src/windows/uia/moz.build => accessible/windows/uia/moz.build rename : accessible/src/windows/uia/uiaRawElmProvider.cpp => accessible/windows/uia/uiaRawElmProvider.cpp rename : accessible/src/windows/uia/uiaRawElmProvider.h => accessible/windows/uia/uiaRawElmProvider.h rename : accessible/src/xpcom/AccEventGen.py => accessible/xpcom/AccEventGen.py rename : accessible/src/xpcom/AccEvents.conf => accessible/xpcom/AccEvents.conf rename : accessible/src/xpcom/Makefile.in => accessible/xpcom/Makefile.in rename : accessible/src/xpcom/moz.build => accessible/xpcom/moz.build rename : accessible/src/xpcom/nsAccessibleRelation.cpp => accessible/xpcom/nsAccessibleRelation.cpp rename : accessible/src/xpcom/nsAccessibleRelation.h => accessible/xpcom/nsAccessibleRelation.h rename : accessible/src/xpcom/xpcAccessibleHyperText.cpp => accessible/xpcom/xpcAccessibleHyperText.cpp rename : accessible/src/xpcom/xpcAccessibleHyperText.h => accessible/xpcom/xpcAccessibleHyperText.h rename : accessible/src/xpcom/xpcAccessibleSelectable.cpp => accessible/xpcom/xpcAccessibleSelectable.cpp rename : accessible/src/xpcom/xpcAccessibleSelectable.h => accessible/xpcom/xpcAccessibleSelectable.h rename : accessible/src/xpcom/xpcAccessibleTable.cpp => accessible/xpcom/xpcAccessibleTable.cpp rename : accessible/src/xpcom/xpcAccessibleTable.h => accessible/xpcom/xpcAccessibleTable.h rename : accessible/src/xpcom/xpcAccessibleTableCell.cpp => accessible/xpcom/xpcAccessibleTableCell.cpp rename : accessible/src/xpcom/xpcAccessibleTableCell.h => accessible/xpcom/xpcAccessibleTableCell.h rename : accessible/src/xpcom/xpcAccessibleTextRange.cpp => accessible/xpcom/xpcAccessibleTextRange.cpp rename : accessible/src/xpcom/xpcAccessibleTextRange.h => accessible/xpcom/xpcAccessibleTextRange.h rename : accessible/src/xpcom/xpcAccessibleValue.cpp => accessible/xpcom/xpcAccessibleValue.cpp rename : accessible/src/xpcom/xpcAccessibleValue.h => accessible/xpcom/xpcAccessibleValue.h rename : accessible/src/xul/XULAlertAccessible.cpp => accessible/xul/XULAlertAccessible.cpp rename : accessible/src/xul/XULAlertAccessible.h => accessible/xul/XULAlertAccessible.h rename : accessible/src/xul/XULColorPickerAccessible.cpp => accessible/xul/XULColorPickerAccessible.cpp rename : accessible/src/xul/XULColorPickerAccessible.h => accessible/xul/XULColorPickerAccessible.h rename : accessible/src/xul/XULComboboxAccessible.cpp => accessible/xul/XULComboboxAccessible.cpp rename : accessible/src/xul/XULComboboxAccessible.h => accessible/xul/XULComboboxAccessible.h rename : accessible/src/xul/XULElementAccessibles.cpp => accessible/xul/XULElementAccessibles.cpp rename : accessible/src/xul/XULElementAccessibles.h => accessible/xul/XULElementAccessibles.h rename : accessible/src/xul/XULFormControlAccessible.cpp => accessible/xul/XULFormControlAccessible.cpp rename : accessible/src/xul/XULFormControlAccessible.h => accessible/xul/XULFormControlAccessible.h rename : accessible/src/xul/XULListboxAccessible.cpp => accessible/xul/XULListboxAccessible.cpp rename : accessible/src/xul/XULListboxAccessible.h => accessible/xul/XULListboxAccessible.h rename : accessible/src/xul/XULMenuAccessible.cpp => accessible/xul/XULMenuAccessible.cpp rename : accessible/src/xul/XULMenuAccessible.h => accessible/xul/XULMenuAccessible.h rename : accessible/src/xul/XULSelectControlAccessible.cpp => accessible/xul/XULSelectControlAccessible.cpp rename : accessible/src/xul/XULSelectControlAccessible.h => accessible/xul/XULSelectControlAccessible.h rename : accessible/src/xul/XULSliderAccessible.cpp => accessible/xul/XULSliderAccessible.cpp rename : accessible/src/xul/XULSliderAccessible.h => accessible/xul/XULSliderAccessible.h rename : accessible/src/xul/XULTabAccessible.cpp => accessible/xul/XULTabAccessible.cpp rename : accessible/src/xul/XULTabAccessible.h => accessible/xul/XULTabAccessible.h rename : accessible/src/xul/XULTreeAccessible.cpp => accessible/xul/XULTreeAccessible.cpp rename : accessible/src/xul/XULTreeAccessible.h => accessible/xul/XULTreeAccessible.h rename : accessible/src/xul/XULTreeGridAccessible.cpp => accessible/xul/XULTreeGridAccessible.cpp rename : accessible/src/xul/XULTreeGridAccessible.h => accessible/xul/XULTreeGridAccessible.h rename : accessible/src/xul/moz.build => accessible/xul/moz.build
953 lines
31 KiB
JavaScript
953 lines
31 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
|
* You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
/* global Components, GestureSettings, XPCOMUtils, Utils, Promise, Logger */
|
|
/* exported GestureSettings, GestureTracker */
|
|
|
|
/******************************************************************************
|
|
All gestures have the following pathways when being resolved(v)/rejected(x):
|
|
Tap -> DoubleTap (v)
|
|
-> Dwell (x)
|
|
-> Swipe (x)
|
|
|
|
AndroidTap -> TripleTap (v)
|
|
-> TapHold (x)
|
|
-> Swipe (x)
|
|
|
|
DoubleTap -> TripleTap (v)
|
|
-> TapHold (x)
|
|
-> Explore (x)
|
|
|
|
TripleTap -> DoubleTapHold (x)
|
|
-> Explore (x)
|
|
|
|
Dwell -> DwellEnd (v)
|
|
|
|
Swipe -> Explore (x)
|
|
|
|
TapHold -> TapHoldEnd (v)
|
|
|
|
DoubleTapHold -> DoubleTapHoldEnd (v)
|
|
|
|
DwellEnd -> Explore (x)
|
|
|
|
TapHoldEnd -> Explore (x)
|
|
|
|
DoubleTapHoldEnd -> Explore (x)
|
|
|
|
ExploreEnd -> Explore (x)
|
|
|
|
Explore -> ExploreEnd (v)
|
|
******************************************************************************/
|
|
|
|
'use strict';
|
|
|
|
const Ci = Components.interfaces;
|
|
const Cu = Components.utils;
|
|
|
|
this.EXPORTED_SYMBOLS = ['GestureSettings', 'GestureTracker']; // jshint ignore:line
|
|
|
|
Cu.import('resource://gre/modules/XPCOMUtils.jsm');
|
|
|
|
XPCOMUtils.defineLazyModuleGetter(this, 'Utils', // jshint ignore:line
|
|
'resource://gre/modules/accessibility/Utils.jsm');
|
|
XPCOMUtils.defineLazyModuleGetter(this, 'Logger', // jshint ignore:line
|
|
'resource://gre/modules/accessibility/Utils.jsm');
|
|
XPCOMUtils.defineLazyModuleGetter(this, 'setTimeout', // jshint ignore:line
|
|
'resource://gre/modules/Timer.jsm');
|
|
XPCOMUtils.defineLazyModuleGetter(this, 'clearTimeout', // jshint ignore:line
|
|
'resource://gre/modules/Timer.jsm');
|
|
XPCOMUtils.defineLazyModuleGetter(this, 'Promise', // jshint ignore:line
|
|
'resource://gre/modules/Promise.jsm');
|
|
|
|
// Maximum amount of time allowed for a gesture to be considered a multitouch.
|
|
const MAX_MULTITOUCH = 250;
|
|
// Minimal swipe distance in inches
|
|
const SWIPE_MIN_DISTANCE = 0.4;
|
|
// Maximum distance the pointer could move during a tap in inches
|
|
const TAP_MAX_RADIUS = 0.2;
|
|
// Directness coefficient. It is based on the maximum 15 degree angle between
|
|
// consequent pointer move lines.
|
|
const DIRECTNESS_COEFF = 1.44;
|
|
// An android flag.
|
|
const IS_ANDROID = Utils.MozBuildApp === 'mobile/android' &&
|
|
Utils.AndroidSdkVersion >= 14;
|
|
// A single pointer down/up sequence periodically precedes the tripple swipe
|
|
// gesture on Android. This delay acounts for that.
|
|
const ANDROID_TRIPLE_SWIPE_DELAY = 50;
|
|
// The virtual touch ID generated by a mouse event.
|
|
const MOUSE_ID = 'mouse';
|
|
|
|
/**
|
|
* A point object containing distance travelled data.
|
|
* @param {Object} aPoint A point object that looks like: {
|
|
* x: x coordinate in pixels,
|
|
* y: y coordinate in pixels
|
|
* }
|
|
*/
|
|
function Point(aPoint) {
|
|
this.startX = this.x = aPoint.x;
|
|
this.startY = this.y = aPoint.y;
|
|
this.distanceTraveled = 0;
|
|
this.totalDistanceTraveled = 0;
|
|
}
|
|
|
|
Point.prototype = {
|
|
/**
|
|
* Update the current point coordiates.
|
|
* @param {Object} aPoint A new point coordinates.
|
|
*/
|
|
update: function Point_update(aPoint) {
|
|
let lastX = this.x;
|
|
let lastY = this.y;
|
|
this.x = aPoint.x;
|
|
this.y = aPoint.y;
|
|
this.distanceTraveled = this.getDistanceToCoord(lastX, lastY);
|
|
this.totalDistanceTraveled += this.distanceTraveled;
|
|
},
|
|
|
|
reset: function Point_reset() {
|
|
this.distanceTraveled = 0;
|
|
this.totalDistanceTraveled = 0;
|
|
},
|
|
|
|
/**
|
|
* Get distance between the current point coordinates and the given ones.
|
|
* @param {Number} aX A pixel value for the x coordinate.
|
|
* @param {Number} aY A pixel value for the y coordinate.
|
|
* @return {Number} A distance between point's current and the given
|
|
* coordinates.
|
|
*/
|
|
getDistanceToCoord: function Point_getDistanceToCoord(aX, aY) {
|
|
return Math.hypot(this.x - aX, this.y - aY);
|
|
},
|
|
|
|
/**
|
|
* Get the direct distance travelled by the point so far.
|
|
*/
|
|
get directDistanceTraveled() {
|
|
return this.getDistanceToCoord(this.startX, this.startY);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* An externally accessible collection of settings used in gesture resolition.
|
|
* @type {Object}
|
|
*/
|
|
this.GestureSettings = { // jshint ignore:line
|
|
/**
|
|
* Maximum duration of swipe
|
|
* @type {Number}
|
|
*/
|
|
swipeMaxDuration: 400,
|
|
|
|
/**
|
|
* Maximum consecutive pointer event timeout.
|
|
* @type {Number}
|
|
*/
|
|
maxConsecutiveGestureDelay: 400,
|
|
|
|
/**
|
|
* Delay before tap turns into dwell
|
|
* @type {Number}
|
|
*/
|
|
dwellThreshold: 500,
|
|
|
|
/**
|
|
* Minimum distance that needs to be travelled for the pointer move to be
|
|
* fired.
|
|
* @type {Number}
|
|
*/
|
|
travelThreshold: 0.025
|
|
};
|
|
|
|
/**
|
|
* An interface that handles the pointer events and calculates the appropriate
|
|
* gestures.
|
|
* @type {Object}
|
|
*/
|
|
this.GestureTracker = { // jshint ignore:line
|
|
/**
|
|
* Reset GestureTracker to its initial state.
|
|
* @return {[type]} [description]
|
|
*/
|
|
reset: function GestureTracker_reset() {
|
|
if (this.current) {
|
|
this.current.clearTimer();
|
|
}
|
|
delete this.current;
|
|
},
|
|
|
|
/**
|
|
* Create a new gesture object and attach resolution handler to it as well as
|
|
* handle the incoming pointer event.
|
|
* @param {Object} aDetail A new pointer event detail.
|
|
* @param {Number} aTimeStamp A new pointer event timeStamp.
|
|
* @param {Function} aGesture A gesture constructor (default: Tap).
|
|
*/
|
|
_init: function GestureTracker__init(aDetail, aTimeStamp, aGesture = Tap) {
|
|
// Only create a new gesture on |pointerdown| event.
|
|
if (aDetail.type !== 'pointerdown') {
|
|
return;
|
|
}
|
|
let points = aDetail.points;
|
|
let GestureConstructor = aGesture;
|
|
if (IS_ANDROID && GestureConstructor === Tap && points.length === 1 &&
|
|
points[0].identifier !== MOUSE_ID) {
|
|
// Handle Android events when EBT is enabled. Two finger gestures are
|
|
// translated to one.
|
|
GestureConstructor = AndroidTap;
|
|
}
|
|
this._create(GestureConstructor);
|
|
this._update(aDetail, aTimeStamp);
|
|
},
|
|
|
|
/**
|
|
* Handle the incoming pointer event with the existing gesture object(if
|
|
* present) or with the newly created one.
|
|
* @param {Object} aDetail A new pointer event detail.
|
|
* @param {Number} aTimeStamp A new pointer event timeStamp.
|
|
*/
|
|
handle: function GestureTracker_handle(aDetail, aTimeStamp) {
|
|
Logger.debug(() => {
|
|
return ['Pointer event', aDetail.type, 'at:', aTimeStamp,
|
|
JSON.stringify(aDetail.points)];
|
|
});
|
|
this[this.current ? '_update' : '_init'](aDetail, aTimeStamp);
|
|
},
|
|
|
|
/**
|
|
* Create a new gesture object and attach resolution handler to it.
|
|
* @param {Function} aGesture A gesture constructor.
|
|
* @param {Number} aTimeStamp An original pointer event timeStamp.
|
|
* @param {Array} aPoints All changed points associated with the new pointer
|
|
* event.
|
|
* @param {?String} aLastEvent Last pointer event type.
|
|
*/
|
|
_create: function GestureTracker__create(aGesture, aTimeStamp, aPoints, aLastEvent) {
|
|
this.current = new aGesture(aTimeStamp, aPoints, aLastEvent); /* A constructor name should start with an uppercase letter. */ // jshint ignore:line
|
|
this.current.then(this._onFulfill.bind(this));
|
|
},
|
|
|
|
/**
|
|
* Handle the incoming pointer event with the existing gesture object.
|
|
* @param {Object} aDetail A new pointer event detail.
|
|
* @param {Number} aTimeStamp A new pointer event timeStamp.
|
|
*/
|
|
_update: function GestureTracker_update(aDetail, aTimeStamp) {
|
|
this.current[aDetail.type](aDetail.points, aTimeStamp);
|
|
},
|
|
|
|
/**
|
|
* A resolution handler function for the current gesture promise.
|
|
* @param {Object} aResult A resolution payload with the relevant gesture id
|
|
* and an optional new gesture contructor.
|
|
*/
|
|
_onFulfill: function GestureTracker__onFulfill(aResult) {
|
|
let {id, gestureType} = aResult;
|
|
let current = this.current;
|
|
// Do nothing if there's no existing gesture or there's already a newer
|
|
// gesture.
|
|
if (!current || current.id !== id) {
|
|
return;
|
|
}
|
|
// Only create a gesture if we got a constructor.
|
|
if (gestureType) {
|
|
this._create(gestureType, current.startTime, current.points,
|
|
current.lastEvent);
|
|
} else {
|
|
delete this.current;
|
|
}
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Compile a mozAccessFuGesture detail structure.
|
|
* @param {String} aType A gesture type.
|
|
* @param {Object} aPoints Gesture's points.
|
|
* @param {String} xKey A default key for the x coordinate. Default is
|
|
* 'startX'.
|
|
* @param {String} yKey A default key for the y coordinate. Default is
|
|
* 'startY'.
|
|
* @return {Object} a mozAccessFuGesture detail structure.
|
|
*/
|
|
function compileDetail(aType, aPoints, keyMap = {x: 'startX', y: 'startY'}) {
|
|
let touches = [];
|
|
let maxDeltaX = 0;
|
|
let maxDeltaY = 0;
|
|
for (let identifier in aPoints) {
|
|
let point = aPoints[identifier];
|
|
let touch = {};
|
|
for (let key in keyMap) {
|
|
touch[key] = point[keyMap[key]];
|
|
}
|
|
touches.push(touch);
|
|
let deltaX = point.x - point.startX;
|
|
let deltaY = point.y - point.startY;
|
|
// Determine the maximum x and y travel intervals.
|
|
if (Math.abs(maxDeltaX) < Math.abs(deltaX)) {
|
|
maxDeltaX = deltaX;
|
|
}
|
|
if (Math.abs(maxDeltaY) < Math.abs(deltaY)) {
|
|
maxDeltaY = deltaY;
|
|
}
|
|
// Since the gesture is resolving, reset the points' distance information
|
|
// since they are passed to the next potential gesture.
|
|
point.reset();
|
|
}
|
|
return {
|
|
type: aType,
|
|
touches: touches,
|
|
deltaX: maxDeltaX,
|
|
deltaY: maxDeltaY
|
|
};
|
|
}
|
|
|
|
/**
|
|
* A general gesture object.
|
|
* @param {Number} aTimeStamp An original pointer event's timeStamp that started
|
|
* the gesture resolution sequence.
|
|
* @param {Object} aPoints An existing set of points (from previous events).
|
|
* Default is an empty object.
|
|
* @param {?String} aLastEvent Last pointer event type.
|
|
*/
|
|
function Gesture(aTimeStamp, aPoints = {}, aLastEvent = undefined) {
|
|
this.startTime = Date.now();
|
|
Logger.debug('Creating', this.id, 'gesture.');
|
|
this.points = aPoints;
|
|
this.lastEvent = aLastEvent;
|
|
this._deferred = Promise.defer();
|
|
// Call this._handleResolve or this._handleReject when the promise is
|
|
// fulfilled with either resolve or reject.
|
|
this.promise = this._deferred.promise.then(this._handleResolve.bind(this),
|
|
this._handleReject.bind(this));
|
|
this.startTimer(aTimeStamp);
|
|
}
|
|
|
|
Gesture.prototype = {
|
|
/**
|
|
* Get the gesture timeout delay.
|
|
* @return {Number}
|
|
*/
|
|
_getDelay: function Gesture__getDelay() {
|
|
// If nothing happens withing the
|
|
// GestureSettings.maxConsecutiveGestureDelay, we should not wait for any
|
|
// more pointer events and consider them the part of the same gesture -
|
|
// reject this gesture promise.
|
|
return GestureSettings.maxConsecutiveGestureDelay;
|
|
},
|
|
|
|
/**
|
|
* Clear the existing timer.
|
|
*/
|
|
clearTimer: function Gesture_clearTimer() {
|
|
clearTimeout(this._timer);
|
|
delete this._timer;
|
|
},
|
|
|
|
/**
|
|
* Start the timer for gesture timeout.
|
|
* @param {Number} aTimeStamp An original pointer event's timeStamp that
|
|
* started the gesture resolution sequence.
|
|
*/
|
|
startTimer: function Gesture_startTimer(aTimeStamp) {
|
|
this.clearTimer();
|
|
let delay = this._getDelay(aTimeStamp);
|
|
let handler = () => {
|
|
delete this._timer;
|
|
if (!this._inProgress) {
|
|
this._deferred.reject();
|
|
} else if (this._rejectToOnWait) {
|
|
this._deferred.reject(this._rejectToOnWait);
|
|
}
|
|
};
|
|
if (delay <= 0) {
|
|
handler();
|
|
} else {
|
|
this._timer = setTimeout(handler, delay);
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Add a gesture promise resolution callback.
|
|
* @param {Function} aCallback
|
|
*/
|
|
then: function Gesture_then(aCallback) {
|
|
this.promise.then(aCallback);
|
|
},
|
|
|
|
/**
|
|
* Update gesture's points. Test the points set with the optional gesture test
|
|
* function.
|
|
* @param {Array} aPoints An array with the changed points from the new
|
|
* pointer event.
|
|
* @param {String} aType Pointer event type.
|
|
* @param {Boolean} aCanCreate A flag that enables including the new points.
|
|
* Default is false.
|
|
* @param {Boolean} aNeedComplete A flag that indicates that the gesture is
|
|
* completing. Default is false.
|
|
* @return {Boolean} Indicates whether the gesture can be complete (it is
|
|
* set to true iff the aNeedComplete is true and there was a change to at
|
|
* least one point that belongs to the gesture).
|
|
*/
|
|
_update: function Gesture__update(aPoints, aType, aCanCreate = false, aNeedComplete = false) {
|
|
let complete;
|
|
let lastEvent;
|
|
for (let point of aPoints) {
|
|
let identifier = point.identifier;
|
|
let gesturePoint = this.points[identifier];
|
|
if (gesturePoint) {
|
|
gesturePoint.update(point);
|
|
if (aNeedComplete) {
|
|
// Since the gesture is completing and at least one of the gesture
|
|
// points is updated, set the return value to true.
|
|
complete = true;
|
|
}
|
|
lastEvent = lastEvent || aType;
|
|
} else if (aCanCreate) {
|
|
// Only create a new point if aCanCreate is true.
|
|
this.points[identifier] =
|
|
new Point(point);
|
|
lastEvent = lastEvent || aType;
|
|
}
|
|
}
|
|
this.lastEvent = lastEvent || this.lastEvent;
|
|
// If test function is defined test the points.
|
|
if (this.test) {
|
|
this.test(complete);
|
|
}
|
|
return complete;
|
|
},
|
|
|
|
/**
|
|
* Emit a mozAccessFuGesture (when the gesture is resolved).
|
|
* @param {Object} aDetail a compiled mozAccessFuGesture detail structure.
|
|
*/
|
|
_emit: function Gesture__emit(aDetail) {
|
|
let evt = new Utils.win.CustomEvent('mozAccessFuGesture', {
|
|
bubbles: true,
|
|
cancelable: true,
|
|
detail: aDetail
|
|
});
|
|
Utils.win.dispatchEvent(evt);
|
|
},
|
|
|
|
/**
|
|
* Handle the pointer down event.
|
|
* @param {Array} aPoints A new pointer down points.
|
|
* @param {Number} aTimeStamp A new pointer down timeStamp.
|
|
*/
|
|
pointerdown: function Gesture_pointerdown(aPoints, aTimeStamp) {
|
|
this._inProgress = true;
|
|
this._update(aPoints, 'pointerdown',
|
|
aTimeStamp - this.startTime < MAX_MULTITOUCH);
|
|
},
|
|
|
|
/**
|
|
* Handle the pointer move event.
|
|
* @param {Array} aPoints A new pointer move points.
|
|
*/
|
|
pointermove: function Gesture_pointermove(aPoints) {
|
|
this._update(aPoints, 'pointermove');
|
|
},
|
|
|
|
/**
|
|
* Handle the pointer up event.
|
|
* @param {Array} aPoints A new pointer up points.
|
|
*/
|
|
pointerup: function Gesture_pointerup(aPoints) {
|
|
let complete = this._update(aPoints, 'pointerup', false, true);
|
|
if (complete) {
|
|
this._deferred.resolve();
|
|
}
|
|
},
|
|
|
|
/**
|
|
* A subsequent gesture constructor to resolve the current one to. E.g.
|
|
* tap->doubletap, dwell->dwellend, etc.
|
|
* @type {Function}
|
|
*/
|
|
resolveTo: null,
|
|
|
|
/**
|
|
* A unique id for the gesture. Composed of the type + timeStamp.
|
|
*/
|
|
get id() {
|
|
delete this._id;
|
|
this._id = this.type + this.startTime;
|
|
return this._id;
|
|
},
|
|
|
|
/**
|
|
* A gesture promise resolve callback. Compile and emit the gesture.
|
|
* @return {Object} Returns a structure to the gesture handler that looks like
|
|
* this: {
|
|
* id: current gesture id,
|
|
* gestureType: an optional subsequent gesture constructor.
|
|
* }
|
|
*/
|
|
_handleResolve: function Gesture__handleResolve() {
|
|
if (this.isComplete) {
|
|
return;
|
|
}
|
|
Logger.debug('Resolving', this.id, 'gesture.');
|
|
this.isComplete = true;
|
|
let detail = this.compile();
|
|
if (detail) {
|
|
this._emit(detail);
|
|
}
|
|
return {
|
|
id: this.id,
|
|
gestureType: this.resolveTo
|
|
};
|
|
},
|
|
|
|
/**
|
|
* A gesture promise reject callback.
|
|
* @return {Object} Returns a structure to the gesture handler that looks like
|
|
* this: {
|
|
* id: current gesture id,
|
|
* gestureType: an optional subsequent gesture constructor.
|
|
* }
|
|
*/
|
|
_handleReject: function Gesture__handleReject(aRejectTo) {
|
|
if (this.isComplete) {
|
|
return;
|
|
}
|
|
Logger.debug('Rejecting', this.id, 'gesture.');
|
|
this.isComplete = true;
|
|
return {
|
|
id: this.id,
|
|
gestureType: aRejectTo
|
|
};
|
|
},
|
|
|
|
/**
|
|
* A default compilation function used to build the mozAccessFuGesture event
|
|
* detail. The detail always includes the type and the touches associated
|
|
* with the gesture.
|
|
* @return {Object} Gesture event detail.
|
|
*/
|
|
compile: function Gesture_compile() {
|
|
return compileDetail(this.type, this.points);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* A mixin for an explore related object.
|
|
*/
|
|
function ExploreGesture() {
|
|
this.compile = () => {
|
|
// Unlike most of other gestures explore based gestures compile using the
|
|
// current point position and not the start one.
|
|
return compileDetail(this.type, this.points, {x: 'x', y: 'y'});
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Check the in progress gesture for completion.
|
|
*/
|
|
function checkProgressGesture(aGesture) {
|
|
aGesture._inProgress = true;
|
|
if (aGesture.lastEvent === 'pointerup') {
|
|
if (aGesture.test) {
|
|
aGesture.test(true);
|
|
}
|
|
aGesture._deferred.resolve();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* A common travel gesture. When the travel gesture is created, all subsequent
|
|
* pointer events' points are tested for their total distance traveled. If that
|
|
* distance exceeds the _threshold distance, the gesture will be rejected to a
|
|
* _travelTo gesture.
|
|
* @param {Number} aTimeStamp An original pointer event's timeStamp that started
|
|
* the gesture resolution sequence.
|
|
* @param {Object} aPoints An existing set of points (from previous events).
|
|
* @param {?String} aLastEvent Last pointer event type.
|
|
* @param {Function} aTravelTo A contructor for the gesture to reject to when
|
|
* travelling (default: Explore).
|
|
* @param {Number} aThreshold Travel threshold (default:
|
|
* GestureSettings.travelThreshold).
|
|
*/
|
|
function TravelGesture(aTimeStamp, aPoints, aLastEvent, aTravelTo = Explore, aThreshold = GestureSettings.travelThreshold) {
|
|
Gesture.call(this, aTimeStamp, aPoints, aLastEvent);
|
|
this._travelTo = aTravelTo;
|
|
this._threshold = aThreshold;
|
|
}
|
|
|
|
TravelGesture.prototype = Object.create(Gesture.prototype);
|
|
|
|
/**
|
|
* Test the gesture points for travel. The gesture will be rejected to
|
|
* this._travelTo gesture iff at least one point crosses this._threshold.
|
|
*/
|
|
TravelGesture.prototype.test = function TravelGesture_test() {
|
|
for (let identifier in this.points) {
|
|
let point = this.points[identifier];
|
|
if (point.totalDistanceTraveled / Utils.dpi > this._threshold) {
|
|
this._deferred.reject(this._travelTo);
|
|
return;
|
|
}
|
|
}
|
|
};
|
|
|
|
/**
|
|
* DwellEnd gesture.
|
|
* @param {Number} aTimeStamp An original pointer event's timeStamp that started
|
|
* the gesture resolution sequence.
|
|
* @param {Object} aPoints An existing set of points (from previous events).
|
|
* @param {?String} aLastEvent Last pointer event type.
|
|
*/
|
|
function DwellEnd(aTimeStamp, aPoints, aLastEvent) {
|
|
this._inProgress = true;
|
|
// If the pointer travels, reject to Explore.
|
|
TravelGesture.call(this, aTimeStamp, aPoints, aLastEvent);
|
|
checkProgressGesture(this);
|
|
}
|
|
|
|
DwellEnd.prototype = Object.create(TravelGesture.prototype);
|
|
DwellEnd.prototype.type = 'dwellend';
|
|
|
|
/**
|
|
* TapHoldEnd gesture. This gesture can be represented as the following diagram:
|
|
* pointerdown-pointerup-pointerdown-*wait*-pointerup.
|
|
* @param {Number} aTimeStamp An original pointer event's timeStamp that started
|
|
* the gesture resolution sequence.
|
|
* @param {Object} aPoints An existing set of points (from previous events).
|
|
* @param {?String} aLastEvent Last pointer event type.
|
|
*/
|
|
function TapHoldEnd(aTimeStamp, aPoints, aLastEvent) {
|
|
this._inProgress = true;
|
|
// If the pointer travels, reject to Explore.
|
|
TravelGesture.call(this, aTimeStamp, aPoints, aLastEvent);
|
|
checkProgressGesture(this);
|
|
}
|
|
|
|
TapHoldEnd.prototype = Object.create(TravelGesture.prototype);
|
|
TapHoldEnd.prototype.type = 'tapholdend';
|
|
|
|
/**
|
|
* DoubleTapHoldEnd gesture. This gesture can be represented as the following
|
|
* diagram:
|
|
* pointerdown-pointerup-pointerdown-pointerup-pointerdown-*wait*-pointerup.
|
|
* @param {Number} aTimeStamp An original pointer event's timeStamp that started
|
|
* the gesture resolution sequence.
|
|
* @param {Object} aPoints An existing set of points (from previous events).
|
|
* @param {?String} aLastEvent Last pointer event type.
|
|
*/
|
|
function DoubleTapHoldEnd(aTimeStamp, aPoints, aLastEvent) {
|
|
this._inProgress = true;
|
|
// If the pointer travels, reject to Explore.
|
|
TravelGesture.call(this, aTimeStamp, aPoints, aLastEvent);
|
|
checkProgressGesture(this);
|
|
}
|
|
|
|
DoubleTapHoldEnd.prototype = Object.create(TravelGesture.prototype);
|
|
DoubleTapHoldEnd.prototype.type = 'doubletapholdend';
|
|
|
|
/**
|
|
* A common tap gesture object.
|
|
* @param {Number} aTimeStamp An original pointer event's timeStamp that started
|
|
* the gesture resolution sequence.
|
|
* @param {Object} aPoints An existing set of points (from previous events).
|
|
* @param {?String} aLastEvent Last pointer event type.
|
|
* @param {Function} aRejectTo A constructor for the next gesture to reject to
|
|
* in case no pointermove or pointerup happens within the
|
|
* GestureSettings.dwellThreshold.
|
|
* @param {Function} aTravelTo An optional constuctor for the next gesture to
|
|
* reject to in case the the TravelGesture test fails.
|
|
*/
|
|
function TapGesture(aTimeStamp, aPoints, aLastEvent, aRejectTo, aTravelTo) {
|
|
this._rejectToOnWait = aRejectTo;
|
|
// If the pointer travels, reject to aTravelTo.
|
|
TravelGesture.call(this, aTimeStamp, aPoints, aLastEvent, aTravelTo,
|
|
TAP_MAX_RADIUS);
|
|
}
|
|
|
|
TapGesture.prototype = Object.create(TravelGesture.prototype);
|
|
TapGesture.prototype._getDelay = function TapGesture__getDelay() {
|
|
// If, for TapGesture, no pointermove or pointerup happens within the
|
|
// GestureSettings.dwellThreshold, reject.
|
|
// Note: the original pointer event's timeStamp is irrelevant here.
|
|
return GestureSettings.dwellThreshold;
|
|
};
|
|
|
|
/**
|
|
* Tap gesture.
|
|
* @param {Number} aTimeStamp An original pointer event's timeStamp that started
|
|
* the gesture resolution sequence.
|
|
* @param {Object} aPoints An existing set of points (from previous events).
|
|
* @param {?String} aLastEvent Last pointer event type.
|
|
*/
|
|
function Tap(aTimeStamp, aPoints, aLastEvent) {
|
|
// If the pointer travels, reject to Swipe.
|
|
TapGesture.call(this, aTimeStamp, aPoints, aLastEvent, Dwell, Swipe);
|
|
}
|
|
|
|
Tap.prototype = Object.create(TapGesture.prototype);
|
|
Tap.prototype.type = 'tap';
|
|
Tap.prototype.resolveTo = DoubleTap;
|
|
|
|
/**
|
|
* Tap (multi) gesture on Android.
|
|
* @param {Number} aTimeStamp An original pointer event's timeStamp that started
|
|
* the gesture resolution sequence.
|
|
* @param {Object} aPoints An existing set of points (from previous events).
|
|
* @param {?String} aLastEvent Last pointer event type.
|
|
*/
|
|
function AndroidTap(aTimeStamp, aPoints, aLastEvent) {
|
|
// If the pointer travels, reject to Swipe. On dwell threshold reject to
|
|
// TapHold.
|
|
TapGesture.call(this, aTimeStamp, aPoints, aLastEvent, TapHold, Swipe);
|
|
}
|
|
AndroidTap.prototype = Object.create(TapGesture.prototype);
|
|
// Android double taps are translated to single taps.
|
|
AndroidTap.prototype.type = 'doubletap';
|
|
AndroidTap.prototype.resolveTo = TripleTap;
|
|
|
|
/**
|
|
* Clear the pointerup handler timer in case of the 3 pointer swipe.
|
|
*/
|
|
AndroidTap.prototype.clearThreeFingerSwipeTimer = function AndroidTap_clearThreeFingerSwipeTimer() {
|
|
clearTimeout(this._threeFingerSwipeTimer);
|
|
delete this._threeFingerSwipeTimer;
|
|
};
|
|
|
|
AndroidTap.prototype.pointerdown = function AndroidTap_pointerdown(aPoints, aTimeStamp) {
|
|
this.clearThreeFingerSwipeTimer();
|
|
TapGesture.prototype.pointerdown.call(this, aPoints, aTimeStamp);
|
|
};
|
|
|
|
AndroidTap.prototype.pointermove = function AndroidTap_pointermove(aPoints) {
|
|
this.clearThreeFingerSwipeTimer();
|
|
this._moved = true;
|
|
TapGesture.prototype.pointermove.call(this, aPoints);
|
|
};
|
|
|
|
AndroidTap.prototype.pointerup = function AndroidTap_pointerup(aPoints) {
|
|
if (this._moved) {
|
|
// If there was a pointer move - handle the real gesture.
|
|
TapGesture.prototype.pointerup.call(this, aPoints);
|
|
} else {
|
|
// Primptively delay the multi pointer gesture resolution, because Android
|
|
// sometimes fires a pointerdown/poitnerup sequence before the real events.
|
|
this._threeFingerSwipeTimer = setTimeout(() => {
|
|
delete this._threeFingerSwipeTimer;
|
|
TapGesture.prototype.pointerup.call(this, aPoints);
|
|
}, ANDROID_TRIPLE_SWIPE_DELAY);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Reject an android tap gesture.
|
|
* @param {?Function} aRejectTo An optional next gesture constructor.
|
|
* @return {Object} structure that looks like {
|
|
* id: gesture_id, // Current AndroidTap gesture id.
|
|
* gestureType: next_gesture // Optional
|
|
* }
|
|
*/
|
|
AndroidTap.prototype._handleReject = function AndroidTap__handleReject(aRejectTo) {
|
|
let keys = Object.keys(this.points);
|
|
if (aRejectTo === Swipe && keys.length === 1) {
|
|
let key = keys[0];
|
|
let point = this.points[key];
|
|
// Two finger swipe is translated into single swipe.
|
|
this.points[key + '-copy'] = point;
|
|
}
|
|
return TapGesture.prototype._handleReject.call(this, aRejectTo);
|
|
};
|
|
|
|
/**
|
|
* Double Tap gesture.
|
|
* @param {Number} aTimeStamp An original pointer event's timeStamp that started
|
|
* the gesture resolution sequence.
|
|
* @param {Object} aPoints An existing set of points (from previous events).
|
|
* @param {?String} aLastEvent Last pointer event type.
|
|
*/
|
|
function DoubleTap(aTimeStamp, aPoints, aLastEvent) {
|
|
TapGesture.call(this, aTimeStamp, aPoints, aLastEvent, TapHold);
|
|
}
|
|
|
|
DoubleTap.prototype = Object.create(TapGesture.prototype);
|
|
DoubleTap.prototype.type = 'doubletap';
|
|
DoubleTap.prototype.resolveTo = TripleTap;
|
|
|
|
/**
|
|
* Triple Tap gesture.
|
|
* @param {Number} aTimeStamp An original pointer event's timeStamp that started
|
|
* the gesture resolution sequence.
|
|
* @param {Object} aPoints An existing set of points (from previous events).
|
|
* @param {?String} aLastEvent Last pointer event type.
|
|
*/
|
|
function TripleTap(aTimeStamp, aPoints, aLastEvent) {
|
|
TapGesture.call(this, aTimeStamp, aPoints, aLastEvent, DoubleTapHold);
|
|
}
|
|
|
|
TripleTap.prototype = Object.create(TapGesture.prototype);
|
|
TripleTap.prototype.type = 'tripletap';
|
|
|
|
/**
|
|
* Common base object for gestures that are created as resolved.
|
|
* @param {Number} aTimeStamp An original pointer event's timeStamp that started
|
|
* the gesture resolution sequence.
|
|
* @param {Object} aPoints An existing set of points (from previous events).
|
|
* @param {?String} aLastEvent Last pointer event type.
|
|
*/
|
|
function ResolvedGesture(aTimeStamp, aPoints, aLastEvent) {
|
|
Gesture.call(this, aTimeStamp, aPoints, aLastEvent);
|
|
// Resolve the guesture right away.
|
|
this._deferred.resolve();
|
|
}
|
|
|
|
ResolvedGesture.prototype = Object.create(Gesture.prototype);
|
|
|
|
/**
|
|
* Dwell gesture
|
|
* @param {Number} aTimeStamp An original pointer event's timeStamp that started
|
|
* the gesture resolution sequence.
|
|
* @param {Object} aPoints An existing set of points (from previous events).
|
|
* @param {?String} aLastEvent Last pointer event type.
|
|
*/
|
|
function Dwell(aTimeStamp, aPoints, aLastEvent) {
|
|
ResolvedGesture.call(this, aTimeStamp, aPoints, aLastEvent);
|
|
}
|
|
|
|
Dwell.prototype = Object.create(ResolvedGesture.prototype);
|
|
Dwell.prototype.type = 'dwell';
|
|
Dwell.prototype.resolveTo = DwellEnd;
|
|
|
|
/**
|
|
* TapHold gesture
|
|
* @param {Number} aTimeStamp An original pointer event's timeStamp that started
|
|
* the gesture resolution sequence.
|
|
* @param {Object} aPoints An existing set of points (from previous events).
|
|
* @param {?String} aLastEvent Last pointer event type.
|
|
*/
|
|
function TapHold(aTimeStamp, aPoints, aLastEvent) {
|
|
ResolvedGesture.call(this, aTimeStamp, aPoints, aLastEvent);
|
|
}
|
|
|
|
TapHold.prototype = Object.create(ResolvedGesture.prototype);
|
|
TapHold.prototype.type = 'taphold';
|
|
TapHold.prototype.resolveTo = TapHoldEnd;
|
|
|
|
/**
|
|
* DoubleTapHold gesture
|
|
* @param {Number} aTimeStamp An original pointer event's timeStamp that started
|
|
* the gesture resolution sequence.
|
|
* @param {Object} aPoints An existing set of points (from previous events).
|
|
* @param {?String} aLastEvent Last pointer event type.
|
|
*/
|
|
function DoubleTapHold(aTimeStamp, aPoints, aLastEvent) {
|
|
ResolvedGesture.call(this, aTimeStamp, aPoints, aLastEvent);
|
|
}
|
|
|
|
DoubleTapHold.prototype = Object.create(ResolvedGesture.prototype);
|
|
DoubleTapHold.prototype.type = 'doubletaphold';
|
|
DoubleTapHold.prototype.resolveTo = DoubleTapHoldEnd;
|
|
|
|
/**
|
|
* Explore gesture
|
|
* @param {Number} aTimeStamp An original pointer event's timeStamp that started
|
|
* the gesture resolution sequence.
|
|
* @param {Object} aPoints An existing set of points (from previous events).
|
|
* @param {?String} aLastEvent Last pointer event type.
|
|
*/
|
|
function Explore(aTimeStamp, aPoints, aLastEvent) {
|
|
ExploreGesture.call(this);
|
|
ResolvedGesture.call(this, aTimeStamp, aPoints, aLastEvent);
|
|
}
|
|
|
|
Explore.prototype = Object.create(ResolvedGesture.prototype);
|
|
Explore.prototype.type = 'explore';
|
|
Explore.prototype.resolveTo = ExploreEnd;
|
|
|
|
/**
|
|
* ExploreEnd gesture.
|
|
* @param {Number} aTimeStamp An original pointer event's timeStamp that started
|
|
* the gesture resolution sequence.
|
|
* @param {Object} aPoints An existing set of points (from previous events).
|
|
* @param {?String} aLastEvent Last pointer event type.
|
|
*/
|
|
function ExploreEnd(aTimeStamp, aPoints, aLastEvent) {
|
|
this._inProgress = true;
|
|
ExploreGesture.call(this);
|
|
// If the pointer travels, reject to Explore.
|
|
TravelGesture.call(this, aTimeStamp, aPoints, aLastEvent);
|
|
checkProgressGesture(this);
|
|
}
|
|
|
|
ExploreEnd.prototype = Object.create(TravelGesture.prototype);
|
|
ExploreEnd.prototype.type = 'exploreend';
|
|
|
|
/**
|
|
* Swipe gesture.
|
|
* @param {Number} aTimeStamp An original pointer event's timeStamp that started
|
|
* the gesture resolution sequence.
|
|
* @param {Object} aPoints An existing set of points (from previous events).
|
|
* @param {?String} aLastEvent Last pointer event type.
|
|
*/
|
|
function Swipe(aTimeStamp, aPoints, aLastEvent) {
|
|
this._inProgress = true;
|
|
this._rejectToOnWait = Explore;
|
|
Gesture.call(this, aTimeStamp, aPoints, aLastEvent);
|
|
checkProgressGesture(this);
|
|
}
|
|
|
|
Swipe.prototype = Object.create(Gesture.prototype);
|
|
Swipe.prototype.type = 'swipe';
|
|
Swipe.prototype._getDelay = function Swipe__getDelay(aTimeStamp) {
|
|
// Swipe should be completed within the GestureSettings.swipeMaxDuration from
|
|
// the initial pointer down event.
|
|
return GestureSettings.swipeMaxDuration - this.startTime + aTimeStamp;
|
|
};
|
|
|
|
/**
|
|
* Determine wither the gesture was Swipe or Explore.
|
|
* @param {Booler} aComplete A flag that indicates whether the gesture is and
|
|
* will be complete after the test.
|
|
*/
|
|
Swipe.prototype.test = function Swipe_test(aComplete) {
|
|
if (!aComplete) {
|
|
// No need to test if the gesture is not completing or can't be complete.
|
|
return;
|
|
}
|
|
let reject = true;
|
|
// If at least one point travelled for more than SWIPE_MIN_DISTANCE and it was
|
|
// direct enough, consider it a Swipe.
|
|
for (let identifier in this.points) {
|
|
let point = this.points[identifier];
|
|
let directDistance = point.directDistanceTraveled;
|
|
if (directDistance / Utils.dpi >= SWIPE_MIN_DISTANCE ||
|
|
directDistance * DIRECTNESS_COEFF >= point.totalDistanceTraveled) {
|
|
reject = false;
|
|
}
|
|
}
|
|
if (reject) {
|
|
this._deferred.reject(Explore);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Compile a swipe related mozAccessFuGesture event detail.
|
|
* @return {Object} A mozAccessFuGesture detail object.
|
|
*/
|
|
Swipe.prototype.compile = function Swipe_compile() {
|
|
let type = this.type;
|
|
let detail = compileDetail(type, this.points,
|
|
{x1: 'startX', y1: 'startY', x2: 'x', y2: 'y'});
|
|
let deltaX = detail.deltaX;
|
|
let deltaY = detail.deltaY;
|
|
if (Math.abs(deltaX) > Math.abs(deltaY)) {
|
|
// Horizontal swipe.
|
|
detail.type = type + (deltaX > 0 ? 'right' : 'left');
|
|
} else {
|
|
// Vertival swipe.
|
|
detail.type = type + (deltaY > 0 ? 'down' : 'up');
|
|
}
|
|
return detail;
|
|
};
|