Skip to content

Commit c7f1532

Browse files
committed
Make Gamepad.vibrationActuator work with the GameController framework
https://bugs.webkit.org/show_bug.cgi?id=250217 rdar://problem/103973520 Reviewed by Brady Eidson. Make Gamepad.vibrationActuator work with the GameController framework, so that the gamepad now actually vibrates on macOS 13+. This was tested manually using an XBox controller. * Source/WebCore/WebCore.xcodeproj/project.pbxproj: * Source/WebCore/platform/gamepad/cocoa/CoreHapticsSoftLink.h: Added. * Source/WebCore/platform/gamepad/cocoa/CoreHapticsSoftLink.mm: Added. * Source/WebCore/platform/gamepad/cocoa/GameControllerGamepad.h: * Source/WebCore/platform/gamepad/cocoa/GameControllerGamepad.mm: (WebCore::GameControllerGamepad::ensureHapticEngines): (WebCore::GameControllerGamepad::playEffect): (WebCore::GameControllerGamepad::stopEffects): (WebCore::GameControllerGamepad::noLongerHasAnyClient): * Source/WebCore/platform/gamepad/cocoa/GameControllerGamepadProvider.mm: (WebCore::GameControllerGamepadProvider::stopMonitoringGamepads): * Source/WebCore/platform/gamepad/cocoa/GameControllerHapticEffect.h: Copied from Source/WebCore/platform/gamepad/cocoa/GameControllerGamepad.h. * Source/WebCore/platform/gamepad/cocoa/GameControllerHapticEffect.mm: Added. (WebCore::GameControllerHapticEffect::create): (WebCore::GameControllerHapticEffect::GameControllerHapticEffect): (WebCore::GameControllerHapticEffect::~GameControllerHapticEffect): (WebCore::GameControllerHapticEffect::start): (WebCore::GameControllerHapticEffect::stop): (WebCore::GameControllerHapticEffect::strongEffectFinishedPlaying): (WebCore::GameControllerHapticEffect::weakEffectFinishedPlaying): * Source/WebCore/platform/gamepad/cocoa/GameControllerHapticEngines.h: Copied from Source/WebCore/platform/gamepad/cocoa/GameControllerGamepad.h. (WebCore::GameControllerHapticEngines::strongEngine): (WebCore::GameControllerHapticEngines::weakEngine): * Source/WebCore/platform/gamepad/cocoa/GameControllerHapticEngines.mm: Added. (WebCore::GameControllerHapticEngines::create): (WebCore::GameControllerHapticEngines::GameControllerHapticEngines): (WebCore::GameControllerHapticEngines::playEffect): (WebCore::GameControllerHapticEngines::stopEffects): (WebCore::GameControllerHapticEngines::ensureStarted): (WebCore::GameControllerHapticEngines::stop): Canonical link: https://commits.webkit.org/258674@main
1 parent 8217dce commit c7f1532

13 files changed

+567
-10
lines changed

Source/WebCore/Modules/gamepad/GamepadHapticEffectType.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333

3434
namespace WebCore {
3535

36-
enum class GamepadHapticEffectType : uint8_t { DualRumble };
36+
enum class GamepadHapticEffectType : uint8_t { DualRumble, TriggerRumble };
3737

3838
using GamepadHapticEffectTypeSet = HashSet<GamepadHapticEffectType, IntHash<GamepadHapticEffectType>, WTF::StrongEnumHashTraits<GamepadHapticEffectType>>;
3939

Source/WebCore/Modules/gamepad/GamepadHapticEffectType.idl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,5 +26,6 @@
2626
[
2727
Conditional=GAMEPAD
2828
] enum GamepadHapticEffectType {
29-
"dual-rumble"
29+
"dual-rumble",
30+
"trigger-rumble", // Not in the specification but supported by Blink.
3031
};

Source/WebCore/WebCore.xcodeproj/project.pbxproj

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1401,6 +1401,8 @@
14011401
462E4C502616A811003A2C67 /* ScriptBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 462E4C4D2616A801003A2C67 /* ScriptBuffer.h */; settings = {ATTRIBUTES = (Private, ); }; };
14021402
4634C72C2757DAB20026A815 /* WebLockManagerSnapshot.h in Headers */ = {isa = PBXBuildFile; fileRef = 467802B02747117B00DA9FB6 /* WebLockManagerSnapshot.h */; settings = {ATTRIBUTES = (Private, ); }; };
14031403
463521AD2081092A00C28922 /* WindowProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 463521AA2081090B00C28922 /* WindowProxy.h */; settings = {ATTRIBUTES = (Private, ); }; };
1404+
463642A629687D4C003D43F2 /* CoreHapticsSoftLink.h in Headers */ = {isa = PBXBuildFile; fileRef = 463642A329687D47003D43F2 /* CoreHapticsSoftLink.h */; };
1405+
463642A729687D53003D43F2 /* CoreHapticsSoftLink.mm in Sources */ = {isa = PBXBuildFile; fileRef = 463642A429687D48003D43F2 /* CoreHapticsSoftLink.mm */; };
14041406
463EB6231B8789E00096ED51 /* TagCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = 463EB6211B8789CB0096ED51 /* TagCollection.h */; };
14051407
463EF33E293941E200069115 /* HashMapStylePropertyMapReadOnly.h in Headers */ = {isa = PBXBuildFile; fileRef = 463EF33C2939417A00069115 /* HashMapStylePropertyMapReadOnly.h */; };
14061408
4644F7F7272A1C1B0055599E /* WebLockMode.h in Headers */ = {isa = PBXBuildFile; fileRef = 4644F7EB272A1C160055599E /* WebLockMode.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -1417,6 +1419,8 @@
14171419
4664D1A72964FCF0006FE0C5 /* GamepadEffectParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = 4664D1A42964FCD5006FE0C5 /* GamepadEffectParameters.h */; settings = {ATTRIBUTES = (Private, ); }; };
14181420
4664D1A82964FCF7006FE0C5 /* GamepadHapticActuator.h in Headers */ = {isa = PBXBuildFile; fileRef = 4664D1A12964FCD4006FE0C5 /* GamepadHapticActuator.h */; };
14191421
46658DC91FA24B8700F7DD54 /* SWContextManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 4672413B1FA24B140088BD6D /* SWContextManager.h */; settings = {ATTRIBUTES = (Private, ); }; };
1422+
4667EA3E2968D9DA00BAB1E2 /* GameControllerHapticEffect.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4667EA3C2968D9D900BAB1E2 /* GameControllerHapticEffect.mm */; };
1423+
4667EA3F2968D9DA00BAB1E2 /* GameControllerHapticEffect.h in Headers */ = {isa = PBXBuildFile; fileRef = 4667EA3D2968D9DA00BAB1E2 /* GameControllerHapticEffect.h */; };
14201424
4668A0B627AB601B00C720BC /* SharedWorkerObjectConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 4668A0B127AB600B00C720BC /* SharedWorkerObjectConnection.h */; settings = {ATTRIBUTES = (Private, ); }; };
14211425
4668A0B727AB602100C720BC /* SharedWorkerProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 4668A0B527AB600C00C720BC /* SharedWorkerProvider.h */; settings = {ATTRIBUTES = (Private, ); }; };
14221426
466C2DAD26C73AFC00651931 /* PolicyContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 466C2DAB26C73AFB00651931 /* PolicyContainer.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -1503,6 +1507,8 @@
15031507
46F9E4DA28EB874200A84782 /* ScreenOrientationProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 46F9E4D928EB873900A84782 /* ScreenOrientationProvider.h */; settings = {ATTRIBUTES = (Private, ); }; };
15041508
46FC422A29084F4B00773DD5 /* MainThreadStylePropertyMapReadOnly.h in Headers */ = {isa = PBXBuildFile; fileRef = 46FC422929084F4400773DD5 /* MainThreadStylePropertyMapReadOnly.h */; };
15051509
46FCB6181A70820E00C5A21E /* DiagnosticLoggingKeys.h in Headers */ = {isa = PBXBuildFile; fileRef = CD37B37515C1A7E1006DC898 /* DiagnosticLoggingKeys.h */; settings = {ATTRIBUTES = (Private, ); }; };
1510+
46FE73D22968E52000B8064C /* GameControllerHapticEngines.h in Headers */ = {isa = PBXBuildFile; fileRef = 46FE73D02968E51F00B8064C /* GameControllerHapticEngines.h */; };
1511+
46FE73D32968E52000B8064C /* GameControllerHapticEngines.mm in Sources */ = {isa = PBXBuildFile; fileRef = 46FE73D12968E51F00B8064C /* GameControllerHapticEngines.mm */; };
15061512
46FEFBC826DD67A200B0C488 /* StructuredSerializeOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 46FEFBC626DD678200B0C488 /* StructuredSerializeOptions.h */; settings = {ATTRIBUTES = (Private, ); }; };
15071513
475C89A42650AC3C00F3B456 /* FormattingGeometry.h in Headers */ = {isa = PBXBuildFile; fileRef = 475C89A32650AC3B00F3B456 /* FormattingGeometry.h */; settings = {ATTRIBUTES = (Private, ); }; };
15081514
4786356526507A3800C5E2E0 /* BlockFormattingGeometry.h in Headers */ = {isa = PBXBuildFile; fileRef = 4786356426507A3700C5E2E0 /* BlockFormattingGeometry.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -9627,6 +9633,8 @@
96279633
4634592B1AC2271000ECB71C /* PowerObserverMac.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PowerObserverMac.cpp; sourceTree = "<group>"; };
96289634
463521AA2081090B00C28922 /* WindowProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WindowProxy.h; sourceTree = "<group>"; };
96299635
463521AC2081090E00C28922 /* WindowProxy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WindowProxy.cpp; sourceTree = "<group>"; };
9636+
463642A329687D47003D43F2 /* CoreHapticsSoftLink.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CoreHapticsSoftLink.h; sourceTree = "<group>"; };
9637+
463642A429687D48003D43F2 /* CoreHapticsSoftLink.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = CoreHapticsSoftLink.mm; sourceTree = "<group>"; };
96309638
463EB6201B8789CB0096ED51 /* TagCollection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TagCollection.cpp; sourceTree = "<group>"; };
96319639
463EB6211B8789CB0096ED51 /* TagCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TagCollection.h; sourceTree = "<group>"; };
96329640
463EF33B2939417900069115 /* HashMapStylePropertyMapReadOnly.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = HashMapStylePropertyMapReadOnly.cpp; sourceTree = "<group>"; };
@@ -9663,6 +9671,8 @@
96639671
4664D1A42964FCD5006FE0C5 /* GamepadEffectParameters.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GamepadEffectParameters.h; sourceTree = "<group>"; };
96649672
4664D1A52964FCD5006FE0C5 /* GamepadEffectParameters.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = GamepadEffectParameters.idl; sourceTree = "<group>"; };
96659673
466536FA264C8DD100AAD1D7 /* JSAudioNodeCustom.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = JSAudioNodeCustom.cpp; sourceTree = "<group>"; };
9674+
4667EA3C2968D9D900BAB1E2 /* GameControllerHapticEffect.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = GameControllerHapticEffect.mm; sourceTree = "<group>"; };
9675+
4667EA3D2968D9DA00BAB1E2 /* GameControllerHapticEffect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GameControllerHapticEffect.h; sourceTree = "<group>"; };
96669676
4668A0B127AB600B00C720BC /* SharedWorkerObjectConnection.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SharedWorkerObjectConnection.h; sourceTree = "<group>"; };
96679677
4668A0B327AB600B00C720BC /* SharedWorkerObjectConnection.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SharedWorkerObjectConnection.cpp; sourceTree = "<group>"; };
96689678
4668A0B427AB600C00C720BC /* SharedWorkerProvider.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SharedWorkerProvider.cpp; sourceTree = "<group>"; };
@@ -9840,6 +9850,8 @@
98409850
46F9E4DB28EB875400A84782 /* ScreenOrientationProviderIOS.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ScreenOrientationProviderIOS.mm; sourceTree = "<group>"; };
98419851
46FC422829084F4400773DD5 /* MainThreadStylePropertyMapReadOnly.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MainThreadStylePropertyMapReadOnly.cpp; sourceTree = "<group>"; };
98429852
46FC422929084F4400773DD5 /* MainThreadStylePropertyMapReadOnly.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MainThreadStylePropertyMapReadOnly.h; sourceTree = "<group>"; };
9853+
46FE73D02968E51F00B8064C /* GameControllerHapticEngines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GameControllerHapticEngines.h; sourceTree = "<group>"; };
9854+
46FE73D12968E51F00B8064C /* GameControllerHapticEngines.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = GameControllerHapticEngines.mm; sourceTree = "<group>"; };
98439855
46FEFBC626DD678200B0C488 /* StructuredSerializeOptions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = StructuredSerializeOptions.h; sourceTree = "<group>"; };
98449856
46FEFBC726DD678300B0C488 /* StructuredSerializeOptions.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = StructuredSerializeOptions.idl; sourceTree = "<group>"; };
98459857
475C89A32650AC3B00F3B456 /* FormattingGeometry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FormattingGeometry.h; sourceTree = "<group>"; };
@@ -23460,10 +23472,16 @@
2346023472
51AEA4BF1D6E3C2300E0269D /* cocoa */ = {
2346123473
isa = PBXGroup;
2346223474
children = (
23475+
463642A329687D47003D43F2 /* CoreHapticsSoftLink.h */,
23476+
463642A429687D48003D43F2 /* CoreHapticsSoftLink.mm */,
2346323477
51E398FC1D6E474B009C8831 /* GameControllerGamepad.h */,
2346423478
51E398FD1D6E474B009C8831 /* GameControllerGamepad.mm */,
2346523479
51E398FE1D6E474B009C8831 /* GameControllerGamepadProvider.h */,
2346623480
51E398FF1D6E474B009C8831 /* GameControllerGamepadProvider.mm */,
23481+
4667EA3D2968D9DA00BAB1E2 /* GameControllerHapticEffect.h */,
23482+
4667EA3C2968D9D900BAB1E2 /* GameControllerHapticEffect.mm */,
23483+
46FE73D02968E51F00B8064C /* GameControllerHapticEngines.h */,
23484+
46FE73D12968E51F00B8064C /* GameControllerHapticEngines.mm */,
2346723485
5130F2F224AEA60200E1D0A0 /* GameControllerSoftLink.h */,
2346823486
5130F2F424AEA60300E1D0A0 /* GameControllerSoftLink.mm */,
2346923487
5130F2F524AEA60300E1D0A0 /* GameControllerSPI.h */,
@@ -35529,6 +35547,7 @@
3552935547
41FCCC3B2746675600892AD6 /* CoreAudioCaptureSource.h in Headers */,
3553035548
07AFF4221EFB144900B545B3 /* CoreAudioCaptureSourceIOS.h in Headers */,
3553135549
412F59B6288ECFB3007BD290 /* CoreAudioSharedUnit.h in Headers */,
35550+
463642A629687D4C003D43F2 /* CoreHapticsSoftLink.h in Headers */,
3553235551
4688E98027B6B45000567CD2 /* CoreLocationGeolocationProvider.h in Headers */,
3553335552
CD7D33481C7A16BF00041293 /* CoreVideoSoftLink.h in Headers */,
3553435553
46C3C1FE28CBCB9400C3DA78 /* CORPViolationReportBody.h in Headers */,
@@ -36309,6 +36328,8 @@
3630936328
83745D0224D899D300FBDCC4 /* GainOptions.h in Headers */,
3631036329
51E399001D6E4750009C8831 /* GameControllerGamepad.h in Headers */,
3631136330
51E399021D6E4750009C8831 /* GameControllerGamepadProvider.h in Headers */,
36331+
4667EA3F2968D9DA00BAB1E2 /* GameControllerHapticEffect.h in Headers */,
36332+
46FE73D22968E52000B8064C /* GameControllerHapticEngines.h in Headers */,
3631236333
51A644B5292895C9001A6691 /* GameControllerSoftLink.h in Headers */,
3631336334
51A644B629296E44001A6691 /* GameControllerSPI.h in Headers */,
3631436335
510A91FD24D3C16200BFD89C /* GamepadConstants.h in Headers */,
@@ -40491,12 +40512,15 @@
4049140512
CDC224281F756966005F077B /* CDMInstanceFairPlayStreamingAVFObjC.mm in Sources */,
4049240513
5150B5DF27CDF499004FC81E /* CMUtilities.mm in Sources */,
4049340514
A14090FB1AA51E1D0091191A /* ContentFilterUnblockHandlerCocoa.mm in Sources */,
40515+
463642A729687D53003D43F2 /* CoreHapticsSoftLink.mm in Sources */,
4049440516
46C696CC1E7205FC00597937 /* CPUMonitor.cpp in Sources */,
4049540517
1ABA76CA11D20E50004C201C /* CSSPropertyNames.cpp in Sources */,
4049640518
2D22830323A8470700364B7E /* CursorMac.mm in Sources */,
4049740519
5CBD59592280E926002B22AA /* CustomHeaderFields.cpp in Sources */,
4049840520
329C0C2528BD96EB00F187D2 /* ElementName.cpp in Sources */,
4049940521
7CE6CBFD187F394900D46BF5 /* FormatConverter.cpp in Sources */,
40522+
4667EA3E2968D9DA00BAB1E2 /* GameControllerHapticEffect.mm in Sources */,
40523+
46FE73D32968E52000B8064C /* GameControllerHapticEngines.mm in Sources */,
4050040524
5130F2F624AEA60A00E1D0A0 /* GameControllerSoftLink.mm in Sources */,
4050140525
51A4BB0A1954D61600FA5C2E /* Gamepad.cpp in Sources */,
4050240526
518F4FF6194CA4E60081BAAE /* GamepadButton.cpp in Sources */,
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
/*
2+
* Copyright (C) 2023 Apple Inc. All rights reserved.
3+
*
4+
* Redistribution and use in source and binary forms, with or without
5+
* modification, are permitted provided that the following conditions
6+
* are met:
7+
* 1. Redistributions of source code must retain the above copyright
8+
* notice, this list of conditions and the following disclaimer.
9+
* 2. Redistributions in binary form must reproduce the above copyright
10+
* notice, this list of conditions and the following disclaimer in the
11+
* documentation and/or other materials provided with the distribution.
12+
*
13+
* THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14+
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15+
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16+
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17+
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18+
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19+
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20+
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21+
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22+
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23+
* THE POSSIBILITY OF SUCH DAMAGE.
24+
*/
25+
26+
#pragma once
27+
28+
#if ENABLE(GAMEPAD) && PLATFORM(COCOA)
29+
30+
#import <CoreHaptics/CoreHaptics.h>
31+
#import <wtf/SoftLinking.h>
32+
33+
SOFT_LINK_FRAMEWORK_FOR_HEADER(WebCore, CoreHaptics)
34+
35+
SOFT_LINK_CLASS_FOR_HEADER(WebCore, CHHapticEngine)
36+
SOFT_LINK_CLASS_FOR_HEADER(WebCore, CHHapticPattern)
37+
38+
SOFT_LINK_CONSTANT_FOR_HEADER(WebCore, CoreHaptics, CHHapticPatternKeyEvent, NSString *);
39+
#define CHHapticPatternKeyEvent WebCore::get_CoreHaptics_CHHapticPatternKeyEvent()
40+
SOFT_LINK_CONSTANT_FOR_HEADER(WebCore, CoreHaptics, CHHapticPatternKeyEventType, NSString *);
41+
#define CHHapticPatternKeyEventType WebCore::get_CoreHaptics_CHHapticPatternKeyEventType()
42+
SOFT_LINK_CONSTANT_FOR_HEADER(WebCore, CoreHaptics, CHHapticEventTypeHapticTransient, NSString *);
43+
#define CHHapticEventTypeHapticTransient WebCore::get_CoreHaptics_CHHapticEventTypeHapticTransient()
44+
SOFT_LINK_CONSTANT_FOR_HEADER(WebCore, CoreHaptics, CHHapticEventTypeHapticContinuous, NSString *);
45+
#define CHHapticEventTypeHapticContinuous WebCore::get_CoreHaptics_CHHapticEventTypeHapticContinuous()
46+
SOFT_LINK_CONSTANT_FOR_HEADER(WebCore, CoreHaptics, CHHapticPatternKeyTime, NSString *);
47+
#define CHHapticPatternKeyTime WebCore::get_CoreHaptics_CHHapticPatternKeyTime()
48+
SOFT_LINK_CONSTANT_FOR_HEADER(WebCore, CoreHaptics, CHHapticPatternKeyEventParameters, NSString *);
49+
#define CHHapticPatternKeyEventParameters WebCore::get_CoreHaptics_CHHapticPatternKeyEventParameters()
50+
SOFT_LINK_CONSTANT_FOR_HEADER(WebCore, CoreHaptics, CHHapticPatternKeyParameterID, NSString *);
51+
#define CHHapticPatternKeyParameterID WebCore::get_CoreHaptics_CHHapticPatternKeyParameterID()
52+
SOFT_LINK_CONSTANT_FOR_HEADER(WebCore, CoreHaptics, CHHapticPatternKeyParameterValue, NSString *);
53+
#define CHHapticPatternKeyParameterValue WebCore::get_CoreHaptics_CHHapticPatternKeyParameterValue()
54+
SOFT_LINK_CONSTANT_FOR_HEADER(WebCore, CoreHaptics, CHHapticEventParameterIDHapticIntensity, NSString *);
55+
#define CHHapticEventParameterIDHapticIntensity WebCore::get_CoreHaptics_CHHapticEventParameterIDHapticIntensity()
56+
SOFT_LINK_CONSTANT_FOR_HEADER(WebCore, CoreHaptics, CHHapticPatternKeyEventDuration, NSString *);
57+
#define CHHapticPatternKeyEventDuration WebCore::get_CoreHaptics_CHHapticPatternKeyEventDuration()
58+
SOFT_LINK_CONSTANT_FOR_HEADER(WebCore, CoreHaptics, CHHapticPatternKeyPattern, NSString *);
59+
#define CHHapticPatternKeyPattern WebCore::get_CoreHaptics_CHHapticPatternKeyPattern()
60+
61+
#endif // ENABLE(GAMEPAD) && PLATFORM(COCOA)
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
/*
2+
* Copyright (C) 2023 Apple Inc. All rights reserved.
3+
*
4+
* Redistribution and use in source and binary forms, with or without
5+
* modification, are permitted provided that the following conditions
6+
* are met:
7+
* 1. Redistributions of source code must retain the above copyright
8+
* notice, this list of conditions and the following disclaimer.
9+
* 2. Redistributions in binary form must reproduce the above copyright
10+
* notice, this list of conditions and the following disclaimer in the
11+
* documentation and/or other materials provided with the distribution.
12+
*
13+
* THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14+
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15+
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16+
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17+
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18+
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19+
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20+
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21+
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22+
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23+
* THE POSSIBILITY OF SUCH DAMAGE.
24+
*/
25+
26+
#import "config.h"
27+
28+
#if ENABLE(GAMEPAD) && PLATFORM(COCOA)
29+
#import <wtf/SoftLinking.h>
30+
31+
SOFT_LINK_FRAMEWORK_FOR_SOURCE(WebCore, CoreHaptics)
32+
33+
SOFT_LINK_CLASS_FOR_SOURCE(WebCore, CoreHaptics, CHHapticEngine)
34+
SOFT_LINK_CLASS_FOR_SOURCE(WebCore, CoreHaptics, CHHapticPattern)
35+
36+
SOFT_LINK_CONSTANT_FOR_SOURCE(WebCore, CoreHaptics, CHHapticPatternKeyEvent, NSString *)
37+
SOFT_LINK_CONSTANT_FOR_SOURCE(WebCore, CoreHaptics, CHHapticPatternKeyEventType, NSString *)
38+
SOFT_LINK_CONSTANT_FOR_SOURCE(WebCore, CoreHaptics, CHHapticEventTypeHapticTransient, NSString *)
39+
SOFT_LINK_CONSTANT_FOR_SOURCE(WebCore, CoreHaptics, CHHapticEventTypeHapticContinuous, NSString *)
40+
SOFT_LINK_CONSTANT_FOR_SOURCE(WebCore, CoreHaptics, CHHapticPatternKeyTime, NSString *)
41+
SOFT_LINK_CONSTANT_FOR_SOURCE(WebCore, CoreHaptics, CHHapticPatternKeyEventParameters, NSString *)
42+
SOFT_LINK_CONSTANT_FOR_SOURCE(WebCore, CoreHaptics, CHHapticEventParameterIDHapticIntensity, NSString *)
43+
SOFT_LINK_CONSTANT_FOR_SOURCE(WebCore, CoreHaptics, CHHapticPatternKeyEventDuration, NSString *)
44+
SOFT_LINK_CONSTANT_FOR_SOURCE(WebCore, CoreHaptics, CHHapticPatternKeyPattern, NSString *)
45+
SOFT_LINK_CONSTANT_FOR_SOURCE(WebCore, CoreHaptics, CHHapticPatternKeyParameterID, NSString *)
46+
SOFT_LINK_CONSTANT_FOR_SOURCE(WebCore, CoreHaptics, CHHapticPatternKeyParameterValue, NSString *)
47+
48+
#endif // ENABLE(GAMEPAD) && PLATFORM(COCOA)

Source/WebCore/platform/gamepad/cocoa/GameControllerGamepad.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ OBJC_CLASS GCControllerElement;
3737

3838
namespace WebCore {
3939

40+
class GameControllerHapticEngines;
41+
4042
class GameControllerGamepad : public PlatformGamepad {
4143
WTF_MAKE_NONCOPYABLE(GameControllerGamepad);
4244
public:
@@ -49,13 +51,17 @@ class GameControllerGamepad : public PlatformGamepad {
4951

5052
const char* source() const final { return "GameController"_s; }
5153

54+
void noLongerHasAnyClient();
55+
5256
private:
5357
void setupElements();
58+
GameControllerHapticEngines& ensureHapticEngines();
5459

5560
RetainPtr<GCController> m_gcController;
5661

5762
Vector<SharedGamepadValue> m_axisValues;
5863
Vector<SharedGamepadValue> m_buttonValues;
64+
std::unique_ptr<GameControllerHapticEngines> m_hapticEngines;
5965
};
6066

6167

0 commit comments

Comments
 (0)