Title: [264246] trunk/Source
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 *)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to