- Revision
- 264246
- Author
- beid...@apple.com
- Date
- 2020-07-10 16:34:44 -0700 (Fri, 10 Jul 2020)
Log Message
GameController.framework gamepads should support Home buttons.
<rdar://problem/63500696> and https://bugs.webkit.org/show_bug.cgi?id=212933
Reviewed by Tim Horton.
Source/WebCore:
No new tests (Cannot yet drive GameController framework directly in tests)
* platform/gamepad/cocoa/GameControllerGamepad.mm:
(WebCore::homeButtonFromExtendedGamepad): Try a few different techniques of extracting the home button
from a GCExtendedGamepad.
(WebCore::GameControllerGamepad::setupAsExtendedGamepad): If there's a home button, put it at button index 16,
defined by the spec as "Center button in center cluster"
* platform/gamepad/cocoa/GameControllerSoftLink.h:
* platform/gamepad/cocoa/GameControllerSoftLink.mm:
Source/WTF:
* wtf/PlatformHave.h:
Modified Paths
Diff
Modified: trunk/Source/WTF/ChangeLog (264245 => 264246)
--- trunk/Source/WTF/ChangeLog 2020-07-10 23:07:47 UTC (rev 264245)
+++ trunk/Source/WTF/ChangeLog 2020-07-10 23:34:44 UTC (rev 264246)
@@ -1,3 +1,12 @@
+2020-07-10 Brady Eidson <beid...@apple.com>
+
+ GameController.framework gamepads should support Home buttons.
+ <rdar://problem/63500696> and https://bugs.webkit.org/show_bug.cgi?id=212933
+
+ Reviewed by Tim Horton.
+
+ * wtf/PlatformHave.h:
+
2020-07-10 Xabier Rodriguez Calvar <calva...@igalia.com>
[GStreamer][EME][OpenCDM] Implement OpenCDM support
Modified: trunk/Source/WTF/wtf/PlatformHave.h (264245 => 264246)
--- trunk/Source/WTF/wtf/PlatformHave.h 2020-07-10 23:07:47 UTC (rev 264245)
+++ trunk/Source/WTF/wtf/PlatformHave.h 2020-07-10 23:34:44 UTC (rev 264246)
@@ -575,6 +575,10 @@
#endif
#if (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101600) || (PLATFORM(IOS_FAMILY) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 140000)
+#define HAVE_GCEXTENDEDGAMEPAD_HOME_BUTTON 1
+#endif
+
+#if (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101600) || (PLATFORM(IOS_FAMILY) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 140000)
#define HAVE_WEBP 1
#endif
Modified: trunk/Source/WebCore/ChangeLog (264245 => 264246)
--- trunk/Source/WebCore/ChangeLog 2020-07-10 23:07:47 UTC (rev 264245)
+++ trunk/Source/WebCore/ChangeLog 2020-07-10 23:34:44 UTC (rev 264246)
@@ -1,3 +1,20 @@
+2020-07-10 Brady Eidson <beid...@apple.com>
+
+ GameController.framework gamepads should support Home buttons.
+ <rdar://problem/63500696> and https://bugs.webkit.org/show_bug.cgi?id=212933
+
+ Reviewed by Tim Horton.
+
+ No new tests (Cannot yet drive GameController framework directly in tests)
+
+ * platform/gamepad/cocoa/GameControllerGamepad.mm:
+ (WebCore::homeButtonFromExtendedGamepad): Try a few different techniques of extracting the home button
+ from a GCExtendedGamepad.
+ (WebCore::GameControllerGamepad::setupAsExtendedGamepad): If there's a home button, put it at button index 16,
+ defined by the spec as "Center button in center cluster"
+ * platform/gamepad/cocoa/GameControllerSoftLink.h:
+ * platform/gamepad/cocoa/GameControllerSoftLink.mm:
+
2020-07-10 Chris Fleizach <cfleiz...@apple.com>
AX: Build failure for catalyst
Modified: trunk/Source/WebCore/platform/gamepad/cocoa/GameControllerGamepad.mm (264245 => 264246)
--- trunk/Source/WebCore/platform/gamepad/cocoa/GameControllerGamepad.mm 2020-07-10 23:07:47 UTC (rev 264245)
+++ trunk/Source/WebCore/platform/gamepad/cocoa/GameControllerGamepad.mm 2020-07-10 23:34:44 UTC (rev 264246)
@@ -27,6 +27,7 @@
#if ENABLE(GAMEPAD)
#import "GameControllerGamepadProvider.h"
+#import "GameControllerSoftLink.h"
#import <GameController/GameController.h>
namespace WebCore {
@@ -53,6 +54,20 @@
setupAsGamepad();
}
+static GCControllerButtonInput *homeButtonFromExtendedGamepad(GCExtendedGamepad *gamepad)
+{
+#if HAVE(GCEXTENDEDGAMEPAD_HOME_BUTTON)
+ if (gamepad.buttonHome)
+ return gamepad.buttonHome;
+#endif
+
+ id potentialButton = [gamepad valueForKey:@"_buttonHome"];
+ if (potentialButton && [potentialButton isKindOfClass:getGCControllerButtonInputClass()])
+ return potentialButton;
+
+ return nil;
+}
+
void GameControllerGamepad::setupAsExtendedGamepad()
{
ASSERT(m_extendedGamepad);
@@ -60,6 +75,9 @@
m_id = makeString(String(m_gcController.get().vendorName), " Extended Gamepad"_s);
m_mapping = String("standard");
+ auto *homeButton = homeButtonFromExtendedGamepad(m_extendedGamepad.get());
+ m_buttonValues.resize(homeButton ? 17 : 16);
+
m_extendedGamepad.get().valueChangedHandler = ^(GCExtendedGamepad *, GCControllerElement *) {
m_lastUpdateTime = MonotonicTime::now();
GameControllerGamepadProvider::singleton().gamepadHadInput(*this, m_hadButtonPresses);
@@ -66,8 +84,6 @@
m_hadButtonPresses = false;
};
- m_buttonValues.resize(16);
-
auto bindButton = ^(GCControllerButtonInput *button, size_t idx) {
m_buttonValues[idx] = button.value;
button.valueChangedHandler = ^(GCControllerButtonInput *, float value, BOOL pressed) {
@@ -95,6 +111,9 @@
bindButton(m_extendedGamepad.get().dpad.left, 14);
bindButton(m_extendedGamepad.get().dpad.right, 15);
+ if (homeButton)
+ bindButton(homeButton, 16);
+
// Select, Start
#if HAVE(GCEXTENDEDGAMEPAD_BUTTONS_OPTIONS_MENU)
bindButton(m_extendedGamepad.get().buttonOptions, 8);
Modified: trunk/Source/WebCore/platform/gamepad/cocoa/GameControllerSoftLink.h (264245 => 264246)
--- trunk/Source/WebCore/platform/gamepad/cocoa/GameControllerSoftLink.h 2020-07-10 23:07:47 UTC (rev 264245)
+++ trunk/Source/WebCore/platform/gamepad/cocoa/GameControllerSoftLink.h 2020-07-10 23:34:44 UTC (rev 264246)
@@ -32,6 +32,7 @@
SOFT_LINK_FRAMEWORK_FOR_HEADER(WebCore, GameController)
SOFT_LINK_CLASS_FOR_HEADER(WebCore, GCController)
+SOFT_LINK_CLASS_FOR_HEADER(WebCore, GCControllerButtonInput)
SOFT_LINK_CONSTANT_MAY_FAIL_FOR_HEADER(WebCore, GameController, GCControllerDidConnectNotification, NSString *)
SOFT_LINK_CONSTANT_MAY_FAIL_FOR_HEADER(WebCore, GameController, GCControllerDidDisconnectNotification, NSString *)
Modified: trunk/Source/WebCore/platform/gamepad/cocoa/GameControllerSoftLink.mm (264245 => 264246)
--- trunk/Source/WebCore/platform/gamepad/cocoa/GameControllerSoftLink.mm 2020-07-10 23:07:47 UTC (rev 264245)
+++ trunk/Source/WebCore/platform/gamepad/cocoa/GameControllerSoftLink.mm 2020-07-10 23:34:44 UTC (rev 264246)
@@ -32,6 +32,7 @@
SOFT_LINK_FRAMEWORK_FOR_SOURCE(WebCore, GameController)
SOFT_LINK_CLASS_FOR_SOURCE_OPTIONAL(WebCore, GameController, GCController)
+SOFT_LINK_CLASS_FOR_SOURCE_OPTIONAL(WebCore, GameController, GCControllerButtonInput)
SOFT_LINK_CONSTANT_MAY_FAIL_FOR_SOURCE(WebCore, GameController, GCControllerDidConnectNotification, NSString *)
SOFT_LINK_CONSTANT_MAY_FAIL_FOR_SOURCE(WebCore, GameController, GCControllerDidDisconnectNotification, NSString *)