dpad improvements
This commit is contained in:
@@ -2626,7 +2626,7 @@
|
||||
</constraints>
|
||||
</view>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="z5Q-bW-WQ8" userLabel="widgetPanelStack" customClass="WidgetPanelStackView">
|
||||
<rect key="frame" x="325" y="156" width="650" height="1238"/>
|
||||
<rect key="frame" x="325" y="156" width="650" height="1313"/>
|
||||
<subviews>
|
||||
<label verifyAmbiguity="off" opaque="NO" userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Profile:" textAlignment="center" lineBreakMode="tailTruncation" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="iel-xl-xd9">
|
||||
<rect key="frame" x="0.0" y="0.0" width="650" height="37"/>
|
||||
@@ -2775,8 +2775,92 @@
|
||||
</slider>
|
||||
</subviews>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="z8w-zX-Xmc">
|
||||
<rect key="frame" x="0.0" y="397" width="650" height="31"/>
|
||||
<subviews>
|
||||
<label verifyAmbiguity="off" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Sprint key" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.60000002384185791" translatesAutoresizingMaskIntoConstraints="NO" id="5Uu-1K-ov7">
|
||||
<rect key="frame" x="0.0" y="0.0" width="101" height="31"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="101" id="jg9-JV-u9v"/>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<segmentedControl opaque="NO" alpha="0.76999998092651367" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="0" translatesAutoresizingMaskIntoConstraints="NO" id="3fM-1s-S0k">
|
||||
<rect key="frame" x="106" y="0.0" width="180" height="32"/>
|
||||
<color key="backgroundColor" white="0.33333333329999998" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="31" id="f1j-OZ-q3h"/>
|
||||
<constraint firstAttribute="width" constant="180" id="vXH-oV-uBC"/>
|
||||
</constraints>
|
||||
<segments>
|
||||
<segment title="hold"/>
|
||||
<segment title="toggle"/>
|
||||
</segments>
|
||||
<color key="tintColor" systemColor="systemGray3Color"/>
|
||||
<color key="selectedSegmentTintColor" red="0.23087820410000001" green="0.4576539993" blue="0.51765710119999997" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
|
||||
</segmentedControl>
|
||||
<label verifyAmbiguity="off" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Slide threshold" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="v4J-ot-qpz">
|
||||
<rect key="frame" x="291" y="0.0" width="150" height="31"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="150" id="hgO-wk-t09"/>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<slider verifyAmbiguity="off" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" minValue="0.0" maxValue="1" translatesAutoresizingMaskIntoConstraints="NO" id="SHS-fY-ty9">
|
||||
<rect key="frame" x="446" y="0.0" width="204" height="31"/>
|
||||
<color key="tintColor" red="0.18823529410000001" green="0.69019607839999997" blue="0.78039215689999997" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<color key="maximumTrackTintColor" white="0.66666666669999997" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
</slider>
|
||||
</subviews>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="3af-0X-kPi">
|
||||
<rect key="frame" x="0.0" y="433" width="650" height="34"/>
|
||||
<subviews>
|
||||
<label verifyAmbiguity="off" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Walk key" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.60000002384185791" translatesAutoresizingMaskIntoConstraints="NO" id="eRk-iM-nN4">
|
||||
<rect key="frame" x="0.0" y="0.0" width="101" height="34"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="101" id="Enr-gK-PgO"/>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<segmentedControl opaque="NO" alpha="0.76999998092651367" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="0" translatesAutoresizingMaskIntoConstraints="NO" id="csH-cx-ZWH">
|
||||
<rect key="frame" x="106" y="0.0" width="180" height="35"/>
|
||||
<color key="backgroundColor" white="0.33333333329999998" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="180" id="vQL-LV-c8B"/>
|
||||
<constraint firstAttribute="height" constant="31" id="vlF-XM-RGs"/>
|
||||
</constraints>
|
||||
<segments>
|
||||
<segment title="hold"/>
|
||||
<segment title="toggle"/>
|
||||
</segments>
|
||||
<color key="tintColor" systemColor="systemGray3Color"/>
|
||||
<color key="selectedSegmentTintColor" red="0.23087820410000001" green="0.4576539993" blue="0.51765710119999997" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
|
||||
</segmentedControl>
|
||||
<label verifyAmbiguity="off" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Slide threshold" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="kex-PV-gvq">
|
||||
<rect key="frame" x="291" y="0.0" width="150" height="34"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="150" id="0Ak-7J-S0R"/>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<slider verifyAmbiguity="off" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" minValue="0.0" maxValue="1" translatesAutoresizingMaskIntoConstraints="NO" id="iG0-3T-HsH">
|
||||
<rect key="frame" x="446" y="0.0" width="204" height="34"/>
|
||||
<color key="tintColor" red="0.18823529410000001" green="0.69019607839999997" blue="0.78039215689999997" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<color key="maximumTrackTintColor" white="0.66666666669999997" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
</slider>
|
||||
</subviews>
|
||||
</stackView>
|
||||
<stackView contentMode="scaleToFill" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="zfD-bd-GEN" userLabel="stickIndicatorOffsetStack">
|
||||
<rect key="frame" x="0.0" y="397" width="650" height="34"/>
|
||||
<rect key="frame" x="0.0" y="472" width="650" height="34"/>
|
||||
<subviews>
|
||||
<label verifyAmbiguity="off" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Stick Indicator" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.29999999999999999" translatesAutoresizingMaskIntoConstraints="NO" id="tG7-oX-P9b" userLabel="stickIndicatorOffsetLabel">
|
||||
<rect key="frame" x="0.0" y="0.0" width="160" height="34"/>
|
||||
@@ -2795,7 +2879,7 @@
|
||||
</subviews>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="80D-qe-E5D" userLabel="sensitivityFactorXStack">
|
||||
<rect key="frame" x="0.0" y="436" width="650" height="34"/>
|
||||
<rect key="frame" x="0.0" y="511" width="650" height="34"/>
|
||||
<subviews>
|
||||
<label verifyAmbiguity="off" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="SensitivityX" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="vJs-pg-hHe" userLabel="sensitivityFactorLabel">
|
||||
<rect key="frame" x="0.0" y="0.0" width="160" height="34"/>
|
||||
@@ -2814,7 +2898,7 @@
|
||||
</subviews>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="CT5-Ap-Gh0" userLabel="sensitivityFactorYStack">
|
||||
<rect key="frame" x="0.0" y="475" width="650" height="34"/>
|
||||
<rect key="frame" x="0.0" y="550" width="650" height="34"/>
|
||||
<subviews>
|
||||
<label verifyAmbiguity="off" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="SensitivityY" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="NZO-BM-nef" userLabel="sensitivityFactorYLabel">
|
||||
<rect key="frame" x="0.0" y="0.0" width="160" height="34"/>
|
||||
@@ -2833,7 +2917,7 @@
|
||||
</subviews>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="aPm-vW-MUe">
|
||||
<rect key="frame" x="0.0" y="514" width="650" height="34"/>
|
||||
<rect key="frame" x="0.0" y="589" width="650" height="34"/>
|
||||
<subviews>
|
||||
<label verifyAmbiguity="off" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Slide threshold" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="qx4-KQ-j2T">
|
||||
<rect key="frame" x="0.0" y="0.0" width="160" height="34"/>
|
||||
@@ -2852,7 +2936,7 @@
|
||||
</subviews>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="6eR-pT-3nu">
|
||||
<rect key="frame" x="0.0" y="553" width="650" height="34"/>
|
||||
<rect key="frame" x="0.0" y="628" width="650" height="34"/>
|
||||
<subviews>
|
||||
<label verifyAmbiguity="off" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Walkmode threshold" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Wil-pj-Gru">
|
||||
<rect key="frame" x="0.0" y="0.0" width="195" height="34"/>
|
||||
@@ -2871,7 +2955,7 @@
|
||||
</subviews>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Rsp-8X-8le">
|
||||
<rect key="frame" x="0.0" y="592" width="650" height="34"/>
|
||||
<rect key="frame" x="0.0" y="667" width="650" height="34"/>
|
||||
<subviews>
|
||||
<label verifyAmbiguity="off" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Minimum offset" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="F1n-T2-jX6">
|
||||
<rect key="frame" x="0.0" y="0.0" width="195" height="34"/>
|
||||
@@ -2890,7 +2974,7 @@
|
||||
</subviews>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="2KY-v5-YJv" userLabel="yawFactorStack">
|
||||
<rect key="frame" x="0.0" y="631" width="650" height="34"/>
|
||||
<rect key="frame" x="0.0" y="706" width="650" height="34"/>
|
||||
<subviews>
|
||||
<label verifyAmbiguity="off" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Yaw factor" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="iZc-Xt-NaK" userLabel="yawFactorLabel">
|
||||
<rect key="frame" x="0.0" y="0.0" width="160" height="34"/>
|
||||
@@ -2909,7 +2993,7 @@
|
||||
</subviews>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="JNt-eT-HCs" userLabel="pitchFactorStack">
|
||||
<rect key="frame" x="0.0" y="670" width="650" height="34"/>
|
||||
<rect key="frame" x="0.0" y="745" width="650" height="34"/>
|
||||
<subviews>
|
||||
<label verifyAmbiguity="off" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Pitch factor" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fq3-ie-8by" userLabel="pitchFactorLabel">
|
||||
<rect key="frame" x="0.0" y="0.0" width="160" height="34"/>
|
||||
@@ -2928,7 +3012,7 @@
|
||||
</subviews>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="zqk-Xa-Dku">
|
||||
<rect key="frame" x="0.0" y="709" width="650" height="34"/>
|
||||
<rect key="frame" x="0.0" y="784" width="650" height="34"/>
|
||||
<subviews>
|
||||
<label verifyAmbiguity="off" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Roll factor" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="x9i-JN-FSn">
|
||||
<rect key="frame" x="0.0" y="0.0" width="160" height="34"/>
|
||||
@@ -2947,7 +3031,7 @@
|
||||
</subviews>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="KXB-uJ-onx" userLabel="decelerationRateStack">
|
||||
<rect key="frame" x="0.0" y="748" width="650" height="34"/>
|
||||
<rect key="frame" x="0.0" y="823" width="650" height="34"/>
|
||||
<subviews>
|
||||
<label verifyAmbiguity="off" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="DecelerationRate" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Pbt-Tw-dnV" userLabel="decelerationRateLabel">
|
||||
<rect key="frame" x="0.0" y="0.0" width="160" height="34"/>
|
||||
@@ -2966,7 +3050,7 @@
|
||||
</subviews>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="GMQ-EQ-Hum" userLabel="mouseDownButtonStack">
|
||||
<rect key="frame" x="0.0" y="787" width="650" height="31"/>
|
||||
<rect key="frame" x="0.0" y="862" width="650" height="31"/>
|
||||
<subviews>
|
||||
<label verifyAmbiguity="off" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Down button" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="c1r-Hf-b7t" userLabel="mouseDownButtonLabel">
|
||||
<rect key="frame" x="0.0" y="0.0" width="130" height="31"/>
|
||||
@@ -2993,7 +3077,7 @@
|
||||
</subviews>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="LGW-oJ-5Zf" userLabel="buttonModeStack">
|
||||
<rect key="frame" x="0.0" y="823" width="650" height="31"/>
|
||||
<rect key="frame" x="0.0" y="898" width="650" height="31"/>
|
||||
<subviews>
|
||||
<label verifyAmbiguity="off" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Button mode" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="qNQ-fB-jhY" userLabel="uiLabel">
|
||||
<rect key="frame" x="0.0" y="0.0" width="130" height="31"/>
|
||||
@@ -3029,7 +3113,7 @@
|
||||
</subviews>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="KSh-xS-xfD">
|
||||
<rect key="frame" x="0.0" y="859" width="650" height="34"/>
|
||||
<rect key="frame" x="0.0" y="934" width="650" height="34"/>
|
||||
<subviews>
|
||||
<label verifyAmbiguity="off" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Alpha" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="yF0-Tu-L8X">
|
||||
<rect key="frame" x="0.0" y="0.0" width="160" height="34"/>
|
||||
@@ -3051,7 +3135,7 @@
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Wxc-0O-tca">
|
||||
<rect key="frame" x="0.0" y="898" width="650" height="34"/>
|
||||
<rect key="frame" x="0.0" y="973" width="650" height="34"/>
|
||||
<subviews>
|
||||
<label verifyAmbiguity="off" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Border width" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="wTH-1Z-Fgh">
|
||||
<rect key="frame" x="0.0" y="0.0" width="160" height="34"/>
|
||||
@@ -3073,7 +3157,7 @@
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="O0O-pZ-URe" userLabel="Bulk Label Alpha Stack">
|
||||
<rect key="frame" x="0.0" y="937" width="650" height="34"/>
|
||||
<rect key="frame" x="0.0" y="1012" width="650" height="34"/>
|
||||
<subviews>
|
||||
<label verifyAmbiguity="off" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label alpha" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="kSX-ci-kx5">
|
||||
<rect key="frame" x="0.0" y="0.0" width="160" height="34"/>
|
||||
@@ -3095,7 +3179,7 @@
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="rfr-nL-OCc">
|
||||
<rect key="frame" x="0.0" y="976" width="650" height="34"/>
|
||||
<rect key="frame" x="0.0" y="1051" width="650" height="34"/>
|
||||
<subviews>
|
||||
<label verifyAmbiguity="off" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Border alpha" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="sAF-Vy-ZzK">
|
||||
<rect key="frame" x="0.0" y="0.0" width="160" height="34"/>
|
||||
@@ -3117,7 +3201,7 @@
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="X7d-dV-lHa">
|
||||
<rect key="frame" x="0.0" y="1015" width="650" height="34"/>
|
||||
<rect key="frame" x="0.0" y="1090" width="650" height="34"/>
|
||||
<subviews>
|
||||
<label verifyAmbiguity="off" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Highlight alpha" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="1sF-08-aCr">
|
||||
<rect key="frame" x="0.0" y="0.0" width="160" height="34"/>
|
||||
@@ -3139,7 +3223,7 @@
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="nBA-Ii-jNy">
|
||||
<rect key="frame" x="0.0" y="1054" width="650" height="34"/>
|
||||
<rect key="frame" x="0.0" y="1129" width="650" height="34"/>
|
||||
<subviews>
|
||||
<label verifyAmbiguity="off" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Highlight size" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="hKK-ro-C5E">
|
||||
<rect key="frame" x="0.0" y="0.0" width="160" height="34"/>
|
||||
@@ -3161,7 +3245,7 @@
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ASP-yY-swx">
|
||||
<rect key="frame" x="0.0" y="1093" width="650" height="34"/>
|
||||
<rect key="frame" x="0.0" y="1168" width="650" height="34"/>
|
||||
<subviews>
|
||||
<label verifyAmbiguity="off" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Auto dock timer" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="KKW-Q7-0tg">
|
||||
<rect key="frame" x="0.0" y="0.0" width="160" height="34"/>
|
||||
@@ -3183,7 +3267,7 @@
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="3dC-9Z-wKV">
|
||||
<rect key="frame" x="0.0" y="1132" width="650" height="34"/>
|
||||
<rect key="frame" x="0.0" y="1207" width="650" height="34"/>
|
||||
<subviews>
|
||||
<label verifyAmbiguity="off" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Docked alpha" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="qFn-D7-7aD">
|
||||
<rect key="frame" x="0.0" y="0.0" width="160" height="34"/>
|
||||
@@ -3205,7 +3289,7 @@
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="FEI-wQ-Q3w">
|
||||
<rect key="frame" x="0.0" y="1171" width="650" height="31"/>
|
||||
<rect key="frame" x="0.0" y="1246" width="650" height="31"/>
|
||||
<subviews>
|
||||
<label verifyAmbiguity="off" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Collected widgets " textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.20000000000000001" translatesAutoresizingMaskIntoConstraints="NO" id="WLg-7a-5wu" userLabel="uiLabel">
|
||||
<rect key="frame" x="0.0" y="0.0" width="130" height="31"/>
|
||||
@@ -3254,7 +3338,7 @@
|
||||
</subviews>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="K9t-Ky-bWg">
|
||||
<rect key="frame" x="0.0" y="1207" width="650" height="31"/>
|
||||
<rect key="frame" x="0.0" y="1282" width="650" height="31"/>
|
||||
<subviews>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="aBW-x7-cFd">
|
||||
<rect key="frame" x="0.0" y="0.0" width="330" height="31"/>
|
||||
@@ -3513,6 +3597,10 @@
|
||||
<outlet property="slideThresholdLabel" destination="qx4-KQ-j2T" id="lV7-I8-HkJ"/>
|
||||
<outlet property="slideThresholdSlider" destination="2L3-5s-EQK" id="S7q-DZ-OLs"/>
|
||||
<outlet property="slideThresholdStack" destination="aPm-vW-MUe" id="ah5-4T-s06"/>
|
||||
<outlet property="sprintKeySelector" destination="3fM-1s-S0k" id="ogp-48-4oa"/>
|
||||
<outlet property="sprintKeyStack" destination="z8w-zX-Xmc" id="tZ1-Yu-rew"/>
|
||||
<outlet property="sprintKeyThresholdLabel" destination="v4J-ot-qpz" id="eww-w7-Zv0"/>
|
||||
<outlet property="sprintKeyThresholdSlider" destination="SHS-fY-ty9" id="IQa-Id-7cC"/>
|
||||
<outlet property="stickIndicatorOffsetLabel" destination="tG7-oX-P9b" id="jBx-ii-091"/>
|
||||
<outlet property="stickIndicatorOffsetSlider" destination="aPX-7o-N3l" id="gLv-c3-3JG"/>
|
||||
<outlet property="stickIndicatorOffsetStack" destination="zfD-bd-GEN" id="oeb-Vk-2mw"/>
|
||||
@@ -3523,6 +3611,10 @@
|
||||
<outlet property="toolbarTopConstraintiPad" destination="Ppb-J1-lXg" id="laN-Zh-lHm"/>
|
||||
<outlet property="trashCanButton" destination="qJs-n8-eV7" id="ubK-qm-Cox"/>
|
||||
<outlet property="undoButton" destination="F7X-l4-cl3" id="vAI-XQ-hZw"/>
|
||||
<outlet property="walkKeySelector" destination="csH-cx-ZWH" id="rSO-Db-nff"/>
|
||||
<outlet property="walkKeyStack" destination="3af-0X-kPi" id="bfG-hv-fYT"/>
|
||||
<outlet property="walkKeyThresholdLabel" destination="kex-PV-gvq" id="SNz-A0-vGT"/>
|
||||
<outlet property="walkKeyThresholdSlider" destination="iG0-3T-HsH" id="SoV-G8-bKE"/>
|
||||
<outlet property="walkModeThresholdLabel" destination="Wil-pj-Gru" id="Sc1-oq-R0y"/>
|
||||
<outlet property="walkModeThresholdSlider" destination="inm-e3-tvz" id="Qlz-15-hnm"/>
|
||||
<outlet property="walkModeThresholdStack" destination="6eR-pT-3nu" id="l0o-r6-5mG"/>
|
||||
|
||||
@@ -315,7 +315,7 @@
|
||||
</constraints>
|
||||
</view>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="7" translatesAutoresizingMaskIntoConstraints="NO" id="BVp-3O-vZ7" userLabel="widgetPanelStack" customClass="WidgetPanelStackView">
|
||||
<rect key="frame" x="375" y="132" width="550" height="1056"/>
|
||||
<rect key="frame" x="375" y="132" width="550" height="1110"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Profile:" textAlignment="center" lineBreakMode="tailTruncation" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="f46-Pt-0Pv">
|
||||
<rect key="frame" x="0.0" y="0.0" width="550" height="28"/>
|
||||
@@ -479,8 +479,98 @@
|
||||
<constraint firstAttribute="height" constant="20" id="kge-ua-7K0"/>
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView contentMode="scaleToFill" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="Ejp-Jq-phL" userLabel="stickIndicatorOffsetStack">
|
||||
<stackView opaque="NO" contentMode="scaleToFill" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="JyK-fC-beG">
|
||||
<rect key="frame" x="0.0" y="442" width="550" height="20"/>
|
||||
<subviews>
|
||||
<label verifyAmbiguity="off" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Sprint key" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.60000002384185791" translatesAutoresizingMaskIntoConstraints="NO" id="lJx-Tn-7we">
|
||||
<rect key="frame" x="0.0" y="0.0" width="80" height="20"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="80" id="6u9-v5-fjd"/>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<segmentedControl opaque="NO" alpha="0.76999998092651367" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="0" translatesAutoresizingMaskIntoConstraints="NO" id="TsJ-mx-pbL">
|
||||
<rect key="frame" x="85" y="0.0" width="140" height="21"/>
|
||||
<color key="backgroundColor" white="0.33333333329999998" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="140" id="JIa-bt-lzi"/>
|
||||
<constraint firstAttribute="height" constant="31" id="bGx-Lc-40g"/>
|
||||
</constraints>
|
||||
<segments>
|
||||
<segment title="hold"/>
|
||||
<segment title="toggle"/>
|
||||
</segments>
|
||||
<color key="tintColor" systemColor="systemGray3Color"/>
|
||||
<color key="selectedSegmentTintColor" red="0.23087820410000001" green="0.4576539993" blue="0.51765710119999997" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
|
||||
</segmentedControl>
|
||||
<label verifyAmbiguity="off" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Slide threshold" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="YQo-bc-mwR">
|
||||
<rect key="frame" x="230" y="0.0" width="130" height="20"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="130" id="Tns-fT-bGx"/>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<slider verifyAmbiguity="off" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" minValue="0.0" maxValue="1" translatesAutoresizingMaskIntoConstraints="NO" id="r6M-Kf-BXk">
|
||||
<rect key="frame" x="365" y="0.0" width="185" height="20"/>
|
||||
<color key="tintColor" red="0.18823529410000001" green="0.69019607839999997" blue="0.78039215689999997" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<color key="maximumTrackTintColor" white="0.66666666669999997" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
</slider>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="20" id="BtX-AL-mT3"/>
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="fWd-gR-fge">
|
||||
<rect key="frame" x="0.0" y="469" width="550" height="20"/>
|
||||
<subviews>
|
||||
<label verifyAmbiguity="off" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Walk key" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.60000002384185791" translatesAutoresizingMaskIntoConstraints="NO" id="KpH-R8-kny">
|
||||
<rect key="frame" x="0.0" y="0.0" width="80" height="20"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="80" id="lx7-Yg-yOD"/>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<segmentedControl opaque="NO" alpha="0.76999998092651367" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="0" translatesAutoresizingMaskIntoConstraints="NO" id="Jz7-vJ-mMl">
|
||||
<rect key="frame" x="85" y="0.0" width="140" height="21"/>
|
||||
<color key="backgroundColor" white="0.33333333329999998" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="31" id="HBa-29-uPi"/>
|
||||
<constraint firstAttribute="width" constant="140" id="xjz-R5-L1B"/>
|
||||
</constraints>
|
||||
<segments>
|
||||
<segment title="hold"/>
|
||||
<segment title="toggle"/>
|
||||
</segments>
|
||||
<color key="tintColor" systemColor="systemGray3Color"/>
|
||||
<color key="selectedSegmentTintColor" red="0.23087820410000001" green="0.4576539993" blue="0.51765710119999997" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
|
||||
</segmentedControl>
|
||||
<label verifyAmbiguity="off" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Slide threshold" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="sYb-ef-Vkq">
|
||||
<rect key="frame" x="230" y="0.0" width="130" height="20"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="130" id="ly9-Cl-fXN"/>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<slider verifyAmbiguity="off" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" minValue="0.0" maxValue="1" translatesAutoresizingMaskIntoConstraints="NO" id="ZW0-YT-J0m">
|
||||
<rect key="frame" x="365" y="0.0" width="185" height="20"/>
|
||||
<color key="tintColor" red="0.18823529410000001" green="0.69019607839999997" blue="0.78039215689999997" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<color key="maximumTrackTintColor" white="0.66666666669999997" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
</slider>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="20" id="Ygh-AN-0E1"/>
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView contentMode="scaleToFill" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="Ejp-Jq-phL" userLabel="stickIndicatorOffsetStack">
|
||||
<rect key="frame" x="0.0" y="496" width="550" height="20"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Stick indicator" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fcy-zp-LGa" userLabel="stickIndicatorOffsetLabel">
|
||||
<rect key="frame" x="0.0" y="0.0" width="160" height="20"/>
|
||||
@@ -502,7 +592,7 @@
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="fem-TG-vr3" userLabel="sensitivityFactorXStack">
|
||||
<rect key="frame" x="0.0" y="469" width="550" height="20"/>
|
||||
<rect key="frame" x="0.0" y="523" width="550" height="20"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="SensitivityX" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="dJh-Ck-ugh" userLabel="sensitivityFactorLabel">
|
||||
<rect key="frame" x="0.0" y="0.0" width="160" height="20"/>
|
||||
@@ -524,7 +614,7 @@
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="50h-xK-Lq0" userLabel="sensitivityFactorYStack">
|
||||
<rect key="frame" x="0.0" y="496" width="550" height="20"/>
|
||||
<rect key="frame" x="0.0" y="550" width="550" height="20"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="SensitivityY" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="R9C-JW-nkF" userLabel="sensitivityFactorYLabel">
|
||||
<rect key="frame" x="0.0" y="0.0" width="160" height="20"/>
|
||||
@@ -546,7 +636,7 @@
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Ioa-xW-Qno">
|
||||
<rect key="frame" x="0.0" y="523" width="550" height="20"/>
|
||||
<rect key="frame" x="0.0" y="577" width="550" height="20"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Slide threshold" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="6mJ-6V-XcK">
|
||||
<rect key="frame" x="0.0" y="0.0" width="160" height="20"/>
|
||||
@@ -568,7 +658,7 @@
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="rk5-VT-6j1">
|
||||
<rect key="frame" x="0.0" y="550" width="550" height="20"/>
|
||||
<rect key="frame" x="0.0" y="604" width="550" height="20"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Walkmode threshold" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Afv-Tt-8Fo">
|
||||
<rect key="frame" x="0.0" y="0.0" width="200" height="20"/>
|
||||
@@ -590,7 +680,7 @@
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="mZ2-SU-Aj2">
|
||||
<rect key="frame" x="0.0" y="577" width="550" height="20"/>
|
||||
<rect key="frame" x="0.0" y="631" width="550" height="20"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Minimum offset" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Mxv-HT-xeB">
|
||||
<rect key="frame" x="0.0" y="0.0" width="200" height="20"/>
|
||||
@@ -612,7 +702,7 @@
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="XYC-Ug-Pns">
|
||||
<rect key="frame" x="0.0" y="604" width="550" height="20"/>
|
||||
<rect key="frame" x="0.0" y="658" width="550" height="20"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Yaw factor" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="kzC-ut-7DI">
|
||||
<rect key="frame" x="0.0" y="0.0" width="160" height="20"/>
|
||||
@@ -634,7 +724,7 @@
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="gkc-td-lg4">
|
||||
<rect key="frame" x="0.0" y="631" width="550" height="20"/>
|
||||
<rect key="frame" x="0.0" y="685" width="550" height="20"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Pitch factor" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="dEy-ER-Mb3">
|
||||
<rect key="frame" x="0.0" y="0.0" width="160" height="20"/>
|
||||
@@ -656,7 +746,7 @@
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="7G4-Ms-mkR">
|
||||
<rect key="frame" x="0.0" y="658" width="550" height="20"/>
|
||||
<rect key="frame" x="0.0" y="712" width="550" height="20"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Roll factor" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="BNN-vq-Pve">
|
||||
<rect key="frame" x="0.0" y="0.0" width="160" height="20"/>
|
||||
@@ -678,7 +768,7 @@
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="3Bf-uN-nLa">
|
||||
<rect key="frame" x="0.0" y="685" width="550" height="20"/>
|
||||
<rect key="frame" x="0.0" y="739" width="550" height="20"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="DecelerationRate" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="znE-Lv-uWV">
|
||||
<rect key="frame" x="0.0" y="0.0" width="160" height="20"/>
|
||||
@@ -700,7 +790,7 @@
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="jE7-IB-GTS" userLabel="slidableStack">
|
||||
<rect key="frame" x="0.0" y="712" width="550" height="20"/>
|
||||
<rect key="frame" x="0.0" y="766" width="550" height="20"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Button mode" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="o9I-Gt-YRd" userLabel="uilabel">
|
||||
<rect key="frame" x="0.0" y="0.0" width="120" height="20"/>
|
||||
@@ -739,7 +829,7 @@
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="gsG-6n-BAb" userLabel="vibrationStyleStack">
|
||||
<rect key="frame" x="0.0" y="739" width="550" height="20"/>
|
||||
<rect key="frame" x="0.0" y="793" width="550" height="20"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Vibration style" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="u3w-Se-xzH" userLabel="sensitivityFactorLabel">
|
||||
<rect key="frame" x="0.0" y="0.0" width="130" height="20"/>
|
||||
@@ -770,7 +860,7 @@
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="lEZ-1a-89J" userLabel="mouseButtonDownStack">
|
||||
<rect key="frame" x="0.0" y="766" width="550" height="20"/>
|
||||
<rect key="frame" x="0.0" y="820" width="550" height="20"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Button down" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ozU-7C-qKE" userLabel="uilabel">
|
||||
<rect key="frame" x="0.0" y="0.0" width="120" height="20"/>
|
||||
@@ -800,7 +890,7 @@
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="t6L-J9-AMW">
|
||||
<rect key="frame" x="0.0" y="793" width="550" height="20"/>
|
||||
<rect key="frame" x="0.0" y="847" width="550" height="20"/>
|
||||
<subviews>
|
||||
<label verifyAmbiguity="off" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Alpha" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="MgK-KI-3y7">
|
||||
<rect key="frame" x="0.0" y="0.0" width="160" height="20"/>
|
||||
@@ -822,7 +912,7 @@
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="eem-2H-ekN">
|
||||
<rect key="frame" x="0.0" y="820" width="550" height="20"/>
|
||||
<rect key="frame" x="0.0" y="874" width="550" height="20"/>
|
||||
<subviews>
|
||||
<label verifyAmbiguity="off" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Border width" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="TFq-Un-O3H">
|
||||
<rect key="frame" x="0.0" y="0.0" width="160" height="20"/>
|
||||
@@ -844,7 +934,7 @@
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="YB4-fc-lM6">
|
||||
<rect key="frame" x="0.0" y="847" width="550" height="20"/>
|
||||
<rect key="frame" x="0.0" y="901" width="550" height="20"/>
|
||||
<subviews>
|
||||
<label verifyAmbiguity="off" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label alpha" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="9Dr-3c-z61">
|
||||
<rect key="frame" x="0.0" y="0.0" width="160" height="20"/>
|
||||
@@ -866,7 +956,7 @@
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="8tb-mS-WEu">
|
||||
<rect key="frame" x="0.0" y="874" width="550" height="20"/>
|
||||
<rect key="frame" x="0.0" y="928" width="550" height="20"/>
|
||||
<subviews>
|
||||
<label verifyAmbiguity="off" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Border alpha" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="eRy-My-vvU">
|
||||
<rect key="frame" x="0.0" y="0.0" width="160" height="20"/>
|
||||
@@ -888,7 +978,7 @@
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="cJk-PA-Lp0">
|
||||
<rect key="frame" x="0.0" y="901" width="550" height="20"/>
|
||||
<rect key="frame" x="0.0" y="955" width="550" height="20"/>
|
||||
<subviews>
|
||||
<label verifyAmbiguity="off" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Highlight alpha" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="4Kd-Cc-aYN">
|
||||
<rect key="frame" x="0.0" y="0.0" width="160" height="20"/>
|
||||
@@ -910,7 +1000,7 @@
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Sxm-3C-Jlo">
|
||||
<rect key="frame" x="0.0" y="928" width="550" height="20"/>
|
||||
<rect key="frame" x="0.0" y="982" width="550" height="20"/>
|
||||
<subviews>
|
||||
<label verifyAmbiguity="off" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Highlight size" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="hme-2d-8d6">
|
||||
<rect key="frame" x="0.0" y="0.0" width="160" height="20"/>
|
||||
@@ -932,7 +1022,7 @@
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="BBR-0E-XE9">
|
||||
<rect key="frame" x="0.0" y="955" width="550" height="20"/>
|
||||
<rect key="frame" x="0.0" y="1009" width="550" height="20"/>
|
||||
<subviews>
|
||||
<label verifyAmbiguity="off" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Auto dock timer" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="F8T-uC-SAR">
|
||||
<rect key="frame" x="0.0" y="0.0" width="160" height="20"/>
|
||||
@@ -954,7 +1044,7 @@
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="n71-jv-Ziw">
|
||||
<rect key="frame" x="0.0" y="982" width="550" height="20"/>
|
||||
<rect key="frame" x="0.0" y="1036" width="550" height="20"/>
|
||||
<subviews>
|
||||
<label verifyAmbiguity="off" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Docked alpha" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="kxI-bn-pRU">
|
||||
<rect key="frame" x="0.0" y="0.0" width="160" height="20"/>
|
||||
@@ -977,7 +1067,7 @@
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="weV-Li-Itz">
|
||||
<rect key="frame" x="0.0" y="1009" width="550" height="20"/>
|
||||
<rect key="frame" x="0.0" y="1063" width="550" height="20"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Collected Widgets " textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.10000000000000001" translatesAutoresizingMaskIntoConstraints="NO" id="kek-77-Kmg" userLabel="uilabel">
|
||||
<rect key="frame" x="0.0" y="0.0" width="120" height="20"/>
|
||||
@@ -1026,7 +1116,7 @@
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="IWg-XO-cff">
|
||||
<rect key="frame" x="0.0" y="1036" width="550" height="20"/>
|
||||
<rect key="frame" x="0.0" y="1090" width="550" height="20"/>
|
||||
<subviews>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="MZj-th-E9Z">
|
||||
<rect key="frame" x="0.0" y="0.0" width="284" height="20"/>
|
||||
@@ -1239,6 +1329,10 @@
|
||||
<outlet property="slideThresholdLabel" destination="6mJ-6V-XcK" id="lDL-Wv-cOS"/>
|
||||
<outlet property="slideThresholdSlider" destination="EDj-PN-7Vp" id="YWR-Nd-zoX"/>
|
||||
<outlet property="slideThresholdStack" destination="Ioa-xW-Qno" id="pNl-i7-KlA"/>
|
||||
<outlet property="sprintKeySelector" destination="TsJ-mx-pbL" id="z5T-2v-jvI"/>
|
||||
<outlet property="sprintKeyStack" destination="JyK-fC-beG" id="hai-ys-0aj"/>
|
||||
<outlet property="sprintKeyThresholdLabel" destination="YQo-bc-mwR" id="ujP-W9-Mtj"/>
|
||||
<outlet property="sprintKeyThresholdSlider" destination="r6M-Kf-BXk" id="qEK-7B-XRI"/>
|
||||
<outlet property="stickIndicatorOffsetLabel" destination="fcy-zp-LGa" id="lZP-Uv-mMH"/>
|
||||
<outlet property="stickIndicatorOffsetSlider" destination="DCr-vG-gM7" id="aYH-VM-p5l"/>
|
||||
<outlet property="stickIndicatorOffsetStack" destination="Ejp-Jq-phL" id="HNM-4A-VmN"/>
|
||||
@@ -1251,6 +1345,10 @@
|
||||
<outlet property="undoButton" destination="Pdg-l4-BvF" id="emD-GI-v2v"/>
|
||||
<outlet property="vibrationStyleSelector" destination="QRV-je-HEZ" id="cEF-HG-B4h"/>
|
||||
<outlet property="vibrationStyleStack" destination="gsG-6n-BAb" id="etn-BF-xqj"/>
|
||||
<outlet property="walkKeySelector" destination="Jz7-vJ-mMl" id="VdS-nY-J25"/>
|
||||
<outlet property="walkKeyStack" destination="fWd-gR-fge" id="B8l-MK-MHZ"/>
|
||||
<outlet property="walkKeyThresholdLabel" destination="sYb-ef-Vkq" id="TWO-YO-I6W"/>
|
||||
<outlet property="walkKeyThresholdSlider" destination="ZW0-YT-J0m" id="KLE-KS-7h4"/>
|
||||
<outlet property="walkModeThresholdLabel" destination="Afv-Tt-8Fo" id="Jbl-aw-U8o"/>
|
||||
<outlet property="walkModeThresholdSlider" destination="TC3-lM-oGw" id="47m-Mz-1Jd"/>
|
||||
<outlet property="walkModeThresholdStack" destination="rk5-VT-6j1" id="pUi-mk-N7I"/>
|
||||
@@ -3471,16 +3569,19 @@
|
||||
<image name="trash.fill" catalog="system" width="117" height="128"/>
|
||||
<image name="tray.full.fill" catalog="system" width="128" height="88"/>
|
||||
<systemColor name="linkColor">
|
||||
<color red="0.0" green="0.47843137250000001" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<color red="0.0" green="0.47843137254901963" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</systemColor>
|
||||
<systemColor name="systemBrownColor">
|
||||
<color red="0.63529411759999999" green="0.51764705879999995" blue="0.36862745099999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<color red="0.67450980392156867" green="0.49803921568627452" blue="0.36862745098039218" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</systemColor>
|
||||
<systemColor name="systemGray2Color">
|
||||
<color red="0.68235294120000001" green="0.68235294120000001" blue="0.69803921570000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<color red="0.68235294117647061" green="0.68235294117647061" blue="0.69803921568627447" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</systemColor>
|
||||
<systemColor name="systemGray3Color">
|
||||
<color red="0.7803921568627451" green="0.7803921568627451" blue="0.80000000000000004" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</systemColor>
|
||||
<systemColor name="systemTealColor">
|
||||
<color red="0.18823529410000001" green="0.69019607839999997" blue="0.78039215689999997" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<color red="0.0" green="0.76470588235294112" blue="0.81568627450980391" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</systemColor>
|
||||
</resources>
|
||||
</document>
|
||||
|
||||
@@ -78,31 +78,6 @@ import Foundation
|
||||
|
||||
// 单一 gamepad.valueChangedHandler
|
||||
gamepad.valueChangedHandler = { gamepad, element in
|
||||
/*
|
||||
navigationActionTriggeredPrivate = (gamepad.dpad.up.isPressed
|
||||
|| gamepad.dpad.down.isPressed
|
||||
|| gamepad.dpad.left.isPressed
|
||||
|| gamepad.dpad.right.isPressed
|
||||
|| gamepad.buttonA.isPressed
|
||||
|| gamepad.buttonB.isPressed
|
||||
|| gamepad.buttonX.isPressed
|
||||
|| gamepad.leftShoulder.isPressed
|
||||
|| gamepad.rightShoulder.isPressed
|
||||
|| gamepad.leftTrigger.value != 0
|
||||
|| gamepad.rightTrigger.value != 0
|
||||
|| gamepad.rightThumbstick.xAxis.value != 0
|
||||
|| gamepad.rightThumbstick.yAxis.value != 0
|
||||
|| gamepad.leftThumbstick.xAxis.value != 0
|
||||
|| gamepad.leftThumbstick.yAxis.value != 0)
|
||||
if navigationActionTriggeredPrivate { navigationActionTriggered = true}
|
||||
else {
|
||||
DispatchQueue.global().asyncAfter(deadline: .now() + 0.1) {
|
||||
if !navigationActionTriggeredPrivate {
|
||||
navigationActionTriggered = false
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
handler(buttonDict, gamepad, element)
|
||||
if #available(iOS 13.0, *) {
|
||||
if controller.playerIndex == .index1 {
|
||||
|
||||
@@ -478,7 +478,11 @@ static CGRect layoutViewBounds;
|
||||
buttonState.walkModeThreshold = widgetView.dWheelWalkModeThreshold;
|
||||
buttonState.minStickOffset = widgetView.minStickOffset;
|
||||
buttonState.buttonMode = widgetView.buttonMode;
|
||||
|
||||
buttonState.sprintKeyActionType = widgetView.sprintKeyActionType;
|
||||
buttonState.sprintKeyThreshold = widgetView.sprintKeyThreshold;
|
||||
buttonState.walkKeyActionType = widgetView.walkKeyActionType;
|
||||
buttonState.walkKeyThreshold = widgetView.walkKeyThreshold;
|
||||
|
||||
NSData *buttonStateEncoded = [NSKeyedArchiver archivedDataWithRootObject:buttonState requiringSecureCoding:YES error:nil];
|
||||
[buttonStatesEncoded addObject: buttonStateEncoded];
|
||||
}
|
||||
|
||||
@@ -65,6 +65,12 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
@property (nonatomic, assign) uint8_t mouseButtonAction;
|
||||
@property (nonatomic, assign) uint16_t autoTapInterval;
|
||||
|
||||
@property (nonatomic, assign) uint8_t walkKeyActionType;
|
||||
@property (nonatomic, assign) CGFloat walkKeyThreshold;
|
||||
@property (nonatomic, assign) uint8_t sprintKeyActionType;
|
||||
@property (nonatomic, assign) CGFloat sprintKeyThreshold;
|
||||
|
||||
|
||||
// @property (nonatomic, assign) BOOL hasValidPosition;
|
||||
|
||||
typedef NS_ENUM(NSInteger, OnScreenWidgetType) {
|
||||
|
||||
@@ -72,6 +72,10 @@
|
||||
[encoder encodeObject:self.widgetShape forKey:@"widgetShape"];
|
||||
[encoder encodeFloat:self.walkModeThreshold forKey:@"walkModeThreshold"];
|
||||
[encoder encodeFloat:self.minStickOffset forKey:@"minStickOffset"];
|
||||
[encoder encodeInt:self.sprintKeyActionType forKey:@"sprintKeyActionType"];
|
||||
[encoder encodeFloat:self.sprintKeyThreshold forKey:@"sprintKeyThreshold"];
|
||||
[encoder encodeInt:self.walkKeyActionType forKey:@"walkKeyActionType"];
|
||||
[encoder encodeFloat:self.walkKeyThreshold forKey:@"walkKeyThreshold"];
|
||||
}
|
||||
|
||||
- (id) initWithCoder:(NSCoder*)decoder {
|
||||
@@ -117,6 +121,12 @@
|
||||
self.widgetShape = [decoder decodeObjectForKey:@"widgetShape"];
|
||||
self.walkModeThreshold = [decoder containsValueForKey:@"walkModeThreshold"] ? [decoder decodeFloatForKey:@"walkModeThreshold"] : 16383;
|
||||
self.minStickOffset = [decoder decodeFloatForKey:@"minStickOffset"];
|
||||
|
||||
self.sprintKeyActionType = [decoder containsValueForKey:@"sprintKeyActionType"] ? [decoder decodeIntForKey:@"sprintKeyActionType"] : WalkSprintKeyActionTypeHold;
|
||||
self.sprintKeyThreshold = [decoder containsValueForKey:@"sprintKeyThreshold"] ? [decoder decodeFloatForKey:@"sprintKeyThreshold"] : 0.6;
|
||||
self.walkKeyActionType = [decoder containsValueForKey:@"walkKeyActionType"] ? [decoder decodeIntForKey:@"walkKeyActionType"] : WalkSprintKeyActionTypeHold;
|
||||
self.walkKeyThreshold = [decoder containsValueForKey:@"walkKeyThreshold"] ? [decoder decodeFloatForKey:@"walkKeyThreshold"] : 0.08;
|
||||
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
@@ -174,6 +174,7 @@ import ObjectiveC.runtime
|
||||
@objc public var isTapToToggleException: Bool = false
|
||||
@objc public var hasHapticFeedback: Bool = false
|
||||
@objc public var isDirectionPad: Bool = false
|
||||
@objc public var hasWalkSprintKeys: Bool = false
|
||||
@objc public var hasL3R3Indicator: Bool = false
|
||||
|
||||
@objc public var isStickWheel: Bool = false
|
||||
@@ -232,10 +233,24 @@ import ObjectiveC.runtime
|
||||
@objc public var stickIndicatorOffset: CGFloat = 120
|
||||
|
||||
// for all LRUD pads
|
||||
|
||||
@objc public enum WalkSprintKeyActionType: UInt8 {
|
||||
case hold
|
||||
case toggle
|
||||
}
|
||||
|
||||
@objc public var keyboardDpadThresholdRef: CGFloat = 300
|
||||
@objc public var walkKeyThreshold: CGFloat = 0.08
|
||||
@objc public var walkKeyActionType: WalkSprintKeyActionType = .hold
|
||||
@objc public var sprintKeyThreshold: CGFloat = 0.6
|
||||
@objc public var sprintKeyActionType: WalkSprintKeyActionType = .hold
|
||||
|
||||
@objc public var upIndicator = CAShapeLayer()
|
||||
@objc public var downIndicator = CAShapeLayer()
|
||||
@objc public var leftIndicator = CAShapeLayer()
|
||||
@objc public var rightIndicator = CAShapeLayer()
|
||||
@objc public var walkKeyThresholdPreviewLayer = CAShapeLayer()
|
||||
@objc public var sprintKeyThresholdPreviewLayer = CAShapeLayer()
|
||||
|
||||
// for DPAD LRUD pad
|
||||
@objc public var lrudIndicatorBall = CAShapeLayer()
|
||||
@@ -497,6 +512,8 @@ import ObjectiveC.runtime
|
||||
)
|
||||
self.hasHapticFeedback = !self.comboButtonStrings.isEmpty || CommandManager.directionPads.contains(self.touchPadString)
|
||||
self.isDirectionPad = self.widgetType == WidgetTypeEnum.touchPad && CommandManager.directionPads.contains(self.touchPadString)
|
||||
self.hasWalkSprintKeys = self.isDirectionPad && (self.touchPadString == "WASDPAD"
|
||||
|| self.touchPadString == "ARROWPAD")
|
||||
self.isStickWheel = self.widgetType == WidgetTypeEnum.touchPad && CommandManager.stickWheels.contains(self.touchPadString)
|
||||
self.isFolder = self.cmdString == "FOLDER"
|
||||
|
||||
@@ -635,6 +652,7 @@ import ObjectiveC.runtime
|
||||
|
||||
// Re-setup widgetView style
|
||||
setupView()
|
||||
updateMovementThresholdPreview()
|
||||
|
||||
CATransaction.commit()
|
||||
}
|
||||
@@ -669,6 +687,8 @@ import ObjectiveC.runtime
|
||||
self.downIndicator.borderColor = self.buttonDownVisualEffectLayer.borderColor
|
||||
self.leftIndicator.borderColor = self.buttonDownVisualEffectLayer.borderColor
|
||||
self.rightIndicator.borderColor = self.buttonDownVisualEffectLayer.borderColor
|
||||
self.walkKeyThresholdPreviewLayer.strokeColor = self.buttonDownVisualEffectLayer.borderColor
|
||||
self.sprintKeyThresholdPreviewLayer.strokeColor = self.buttonDownVisualEffectLayer.borderColor
|
||||
}
|
||||
|
||||
private func tweakAlpha(tweakBorderAlpha:Bool, tweakLabelAlpha:Bool = true){
|
||||
@@ -1352,10 +1372,64 @@ import ObjectiveC.runtime
|
||||
}
|
||||
}
|
||||
|
||||
private var previousWalkMode:Bool = false
|
||||
private var previousSprintMode:Bool = false
|
||||
private func handleLrudTouchMove(){
|
||||
CATransaction.begin()
|
||||
CATransaction.setDisableActions(true)
|
||||
|
||||
|
||||
|
||||
if self.hasWalkSprintKeys {
|
||||
let dist = hypot(self.offSetX, self.offSetY)
|
||||
let isInWalkMode = dist < self.walkKeyThreshold * keyboardDpadThresholdRef * 0.5
|
||||
let isInSprintMode = dist > self.sprintKeyThreshold * keyboardDpadThresholdRef * 0.5
|
||||
|
||||
if (isInSprintMode != previousSprintMode || directionPadTouchBegan)
|
||||
, self.comboButtonStrings.count>0 {
|
||||
switch sprintKeyActionType {
|
||||
case .hold:
|
||||
if isInSprintMode {sendComboButtonsDownEvent(comboStrings: [comboButtonStrings[0]])}
|
||||
else {sendComboButtonsUpEvent(comboStrings: [comboButtonStrings[0]])}
|
||||
case .toggle :
|
||||
if directionPadTouchBegan {break}
|
||||
sendComboButtonsDownEvent(comboStrings: [comboButtonStrings[0]])
|
||||
DispatchQueue.global().asyncAfter(deadline: .now() + 0.025) {
|
||||
self.sendComboButtonsUpEvent(comboStrings: [self.comboButtonStrings[0]])
|
||||
}
|
||||
}
|
||||
|
||||
if !directionPadTouchBegan, isInSprintMode, vibrationOn {
|
||||
vibrationGenerator.prepare()
|
||||
vibrationGenerator.impactOccurred()
|
||||
}
|
||||
}
|
||||
|
||||
if (isInWalkMode != previousWalkMode || directionPadTouchBegan)
|
||||
, self.comboButtonStrings.count>1 {
|
||||
switch walkKeyActionType {
|
||||
case .hold:
|
||||
if isInWalkMode {sendComboButtonsDownEvent(comboStrings: [comboButtonStrings[1]])}
|
||||
else {sendComboButtonsUpEvent(comboStrings: [comboButtonStrings[1]])}
|
||||
case .toggle :
|
||||
if directionPadTouchBegan {break}
|
||||
sendComboButtonsDownEvent(comboStrings: [comboButtonStrings[1]])
|
||||
DispatchQueue.global().asyncAfter(deadline: .now() + 0.025) {
|
||||
self.sendComboButtonsUpEvent(comboStrings: [self.comboButtonStrings[1]])
|
||||
}
|
||||
}
|
||||
|
||||
if !directionPadTouchBegan, isInWalkMode, vibrationOn {
|
||||
vibrationGenerator.prepare()
|
||||
vibrationGenerator.impactOccurred()
|
||||
}
|
||||
}
|
||||
|
||||
previousWalkMode = isInWalkMode
|
||||
previousSprintMode = isInSprintMode
|
||||
}
|
||||
|
||||
|
||||
let radians = atan2(-offSetY,offSetX)
|
||||
let degrees = radians * 180 / .pi
|
||||
|
||||
@@ -1649,9 +1723,55 @@ import ObjectiveC.runtime
|
||||
self.layer.addSublayer(self.stickWheelAxis)
|
||||
self.stickWheelAxis.isHidden = false
|
||||
}
|
||||
|
||||
setupMovementThresholdPreviewLayersIfNeeded()
|
||||
updateMovementThresholdPreview()
|
||||
|
||||
CATransaction.commit()
|
||||
}
|
||||
|
||||
private func setupMovementThresholdPreviewLayersIfNeeded() {
|
||||
for previewLayer in [sprintKeyThresholdPreviewLayer, walkKeyThresholdPreviewLayer] {
|
||||
previewLayer.fillColor = UIColor.clear.cgColor
|
||||
previewLayer.strokeColor = standardHighlightColor.cgColor
|
||||
previewLayer.lineWidth = 3
|
||||
previewLayer.lineDashPattern = [8, 6]
|
||||
previewLayer.isHidden = true
|
||||
if previewLayer.superlayer == nil {
|
||||
layer.insertSublayer(previewLayer, below: lrudIndicatorBall)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private func updateMovementThresholdPreview(layer: CAShapeLayer, threshold: CGFloat) {
|
||||
let clampedThreshold = max(0, min(1, threshold))
|
||||
let diameter: CGFloat = keyboardDpadThresholdRef * clampedThreshold
|
||||
let radius = max(diameter / 2, 1)
|
||||
layer.position = CGPoint(x: bounds.midX, y: bounds.midY)
|
||||
layer.path = UIBezierPath(
|
||||
arcCenter: .zero,
|
||||
radius: radius,
|
||||
startAngle: 0,
|
||||
endAngle: .pi * 2,
|
||||
clockwise: true
|
||||
).cgPath
|
||||
}
|
||||
|
||||
@objc public func updateMovementThresholdPreview() {
|
||||
guard isDirectionPad, touchPadString == "WASDPAD" || touchPadString == "ARROWPAD" else {
|
||||
walkKeyThresholdPreviewLayer.isHidden = true
|
||||
sprintKeyThresholdPreviewLayer.isHidden = true
|
||||
return
|
||||
}
|
||||
|
||||
setupMovementThresholdPreviewLayersIfNeeded()
|
||||
updateMovementThresholdPreview(layer: sprintKeyThresholdPreviewLayer, threshold: sprintKeyThreshold)
|
||||
if self.comboButtonStrings.count>1 {updateMovementThresholdPreview(layer: walkKeyThresholdPreviewLayer, threshold: walkKeyThreshold)}
|
||||
|
||||
let shouldShow = OnScreenWidgetView.editMode
|
||||
sprintKeyThresholdPreviewLayer.isHidden = !shouldShow
|
||||
walkKeyThresholdPreviewLayer.isHidden = !(shouldShow && self.comboButtonStrings.count>1)
|
||||
}
|
||||
|
||||
@objc public func hideAllHighlightLayersOfAllWidgets(selfIncluded:Bool) {
|
||||
self.forEachWidget(){ widget in
|
||||
@@ -1663,6 +1783,8 @@ import ObjectiveC.runtime
|
||||
widget.downIndicator.isHidden = true
|
||||
widget.leftIndicator.isHidden = true
|
||||
widget.rightIndicator.isHidden = true
|
||||
widget.walkKeyThresholdPreviewLayer.isHidden = true
|
||||
widget.sprintKeyThresholdPreviewLayer.isHidden = true
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1921,7 +2043,7 @@ import ObjectiveC.runtime
|
||||
self.getVector(touch: touch)
|
||||
self.handleLrudTouchMove()
|
||||
}
|
||||
if quickDoubleTapDetected {
|
||||
if quickDoubleTapDetected && self.touchPadString == "DPAD" {
|
||||
self.sendComboButtonsDownEvent(comboStrings: self.comboButtonStrings)
|
||||
DispatchQueue.global(qos: .userInteractive).async {
|
||||
usleep(100000)
|
||||
@@ -3445,7 +3567,13 @@ import ObjectiveC.runtime
|
||||
parentFolder?.sequenceSet.remove(widget.sequence)
|
||||
}
|
||||
widget.parentSequence = -1
|
||||
widget.sequenceSet.removeAll()
|
||||
if widget.isFolder {
|
||||
for sequence in widget.sequenceSet {
|
||||
guard let subWidget = OnScreenWidgetView.mapping[sequence] else {continue}
|
||||
subWidget.parentSequence = -1
|
||||
}
|
||||
widget.sequenceSet.removeAll()
|
||||
}
|
||||
}
|
||||
|
||||
@objc static func restoreFoldedStates(){
|
||||
|
||||
@@ -675,6 +675,11 @@ static const double X1_MOUSE_SPEED_DIVISOR = 2.5;
|
||||
widgetView.minStickOffset = buttonState.minStickOffset;
|
||||
widgetView.dWheelWalkModeThreshold = buttonState.walkModeThreshold;
|
||||
widgetView.buttonMode = buttonState.buttonMode;
|
||||
widgetView.sprintKeyActionType = buttonState.sprintKeyActionType;
|
||||
widgetView.sprintKeyThreshold = buttonState.sprintKeyThreshold;
|
||||
widgetView.walkKeyActionType = buttonState.walkKeyActionType;
|
||||
widgetView.walkKeyThreshold = buttonState.walkKeyThreshold;
|
||||
|
||||
// Add the widgetView to the view controller's view
|
||||
[self->_streamFrameTopLayerView addSubview:widgetView]; // add keyboard button to the stream frame view. must add it to the target view before setting location.
|
||||
buttonState.position = [self denormalizeWidgetPosition:buttonState.position];
|
||||
|
||||
@@ -47,6 +47,29 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
" Cmd: %@ Sprint: %@ Walk: %@ Parent: %@" : {
|
||||
"extractionState" : "manual",
|
||||
"localizations" : {
|
||||
"zh-Hans" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : " 命令: %@ 疾走: %@ 静步: %@ 收纳于: %@"
|
||||
}
|
||||
},
|
||||
"zh-Hant" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : " 命令: %@ 疾走: %@ 靜步: %@ 收納於: %@"
|
||||
}
|
||||
},
|
||||
"zh-HK" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : " 命令: %@ 疾走: %@ 靜步: %@ 收納於: %@"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
" disconnect " : {
|
||||
"extractionState" : "manual",
|
||||
"localizations" : {
|
||||
@@ -162,7 +185,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
" Profile: %@ Alias: %@ Cmd: %@ Parent:%@" : {
|
||||
" Profile: %@ Alias: %@ Cmd: %@ Parent: %@" : {
|
||||
"extractionState" : "manual",
|
||||
"localizations" : {
|
||||
"zh-Hans" : {
|
||||
@@ -300,6 +323,29 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
" Slide threshold: %0.2f " : {
|
||||
"extractionState" : "manual",
|
||||
"localizations" : {
|
||||
"zh-Hans" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : " 触发距离: %0.2f "
|
||||
}
|
||||
},
|
||||
"zh-Hant" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : " 觸發距離: %0.2f "
|
||||
}
|
||||
},
|
||||
"zh-HK" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : " 觸發距離: %0.2f "
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"!ML_TEST_RESULT_INCONCLUSIVE" : {
|
||||
"extractionState" : "manual",
|
||||
"localizations" : {
|
||||
@@ -8533,6 +8579,29 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"Please select a sprint key" : {
|
||||
"extractionState" : "manual",
|
||||
"localizations" : {
|
||||
"zh-Hans" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "请选择疾走键"
|
||||
}
|
||||
},
|
||||
"zh-Hant" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "請選擇疾走鍵"
|
||||
}
|
||||
},
|
||||
"zh-HK" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "請選擇疾走鍵"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Pofiles imported" : {
|
||||
"extractionState" : "manual",
|
||||
"localizations" : {
|
||||
@@ -10901,6 +10970,52 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"Sprint and walk keys are set" : {
|
||||
"extractionState" : "manual",
|
||||
"localizations" : {
|
||||
"zh-Hans" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "已设定疾走键和静步键"
|
||||
}
|
||||
},
|
||||
"zh-Hant" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "已設定疾走鍵和靜步鍵"
|
||||
}
|
||||
},
|
||||
"zh-HK" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "已設定疾走鍵和靜步鍵"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Sprint key set. Select a walk key (optional, you can skip and create)" : {
|
||||
"extractionState" : "manual",
|
||||
"localizations" : {
|
||||
"zh-Hans" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "已设定疾走键,请选择静步键(可跳过并创建)"
|
||||
}
|
||||
},
|
||||
"zh-Hant" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "已設定疾走鍵,請選擇靜步鍵(可跳過並建立)"
|
||||
}
|
||||
},
|
||||
"zh-HK" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "已設定疾走鍵,請選擇靜步鍵(可跳過並建立)"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Square" : {
|
||||
"extractionState" : "manual",
|
||||
"localizations" : {
|
||||
|
||||
+110
-3
@@ -165,6 +165,16 @@ final class LayoutOnScreenControlsViewController: UIViewController, OnScreenWidg
|
||||
@IBOutlet weak var dockedAlphaLabel: UILabel!
|
||||
@IBOutlet weak var dockedAlphaSlider: UISlider!
|
||||
|
||||
@IBOutlet weak var sprintKeyStack: UIStackView!
|
||||
@IBOutlet weak var sprintKeySelector: UISegmentedControl!
|
||||
@IBOutlet weak var sprintKeyThresholdLabel: UILabel!
|
||||
@IBOutlet weak var sprintKeyThresholdSlider: UISlider!
|
||||
|
||||
@IBOutlet weak var walkKeyStack: UIStackView!
|
||||
@IBOutlet weak var walkKeySelector: UISegmentedControl!
|
||||
@IBOutlet weak var walkKeyThresholdLabel: UILabel!
|
||||
@IBOutlet weak var walkKeyThresholdSlider: UISlider!
|
||||
|
||||
@IBOutlet weak var widgetPanelStack: UIStackView!
|
||||
|
||||
@IBOutlet private weak var toolbarTopConstraintiPhone: NSLayoutConstraint!
|
||||
@@ -293,6 +303,9 @@ final class LayoutOnScreenControlsViewController: UIViewController, OnScreenWidg
|
||||
override func viewWillDisappear(_ animated: Bool) {
|
||||
OnScreenWidgetView.editMode = false
|
||||
OnScreenWidgetView.isTweakingHighlight = false
|
||||
for case let widget as OnScreenWidgetView in onScreenWidgetViews {
|
||||
widget.updateMovementThresholdPreview()
|
||||
}
|
||||
super.viewWillDisappear(animated)
|
||||
NotificationCenter.default.post(name: Notification.Name("OscLayoutCloseNotification"), object: self)
|
||||
}
|
||||
@@ -388,6 +401,11 @@ final class LayoutOnScreenControlsViewController: UIViewController, OnScreenWidg
|
||||
widgetView.dWheelWalkModeThreshold = buttonState.walkModeThreshold
|
||||
widgetView.minStickOffset = buttonState.minStickOffset
|
||||
widgetView.buttonMode = ButtonMode(rawValue: Int(buttonState.buttonMode)) ?? .slideToToggle
|
||||
widgetView.sprintKeyActionType = OnScreenWidgetView.WalkSprintKeyActionType(rawValue: buttonState.sprintKeyActionType) ?? .hold
|
||||
widgetView.sprintKeyThreshold = buttonState.sprintKeyThreshold
|
||||
widgetView.walkKeyActionType = OnScreenWidgetView.WalkSprintKeyActionType(rawValue: buttonState.walkKeyActionType) ?? .hold
|
||||
widgetView.walkKeyThreshold = buttonState.walkKeyThreshold
|
||||
|
||||
self.view.insertSubview(widgetView, belowSubview: self.widgetPanelStack)
|
||||
buttonState.position = self.denormalizeWidgetPosition(buttonState.position)
|
||||
widgetView.setLocation(position: buttonState.position)
|
||||
@@ -717,7 +735,14 @@ final class LayoutOnScreenControlsViewController: UIViewController, OnScreenWidg
|
||||
|
||||
autoFitLabel(currentProfileLabel)
|
||||
currentProfileLabel.textAlignment = .left
|
||||
currentProfileLabel.text = LocalizationHelper.localizedString(forKey: " Profile: %@ Alias: %@ Cmd: %@ Parent:%@", profilesManager.getSelectedProfile().name, widgetView.widgetLabel, widgetView.cmdString, LocalizationHelper.localizedString(forKey:OnScreenWidgetView.mapping[widgetView.parentSequence]?.widgetLabel ?? "null"))
|
||||
currentProfileLabel.text = LocalizationHelper.localizedString(forKey: " Profile: %@ Alias: %@ Cmd: %@ Parent: %@", profilesManager.getSelectedProfile().name, widgetView.widgetLabel, widgetView.cmdString, LocalizationHelper.localizedString(forKey:OnScreenWidgetView.mapping[widgetView.parentSequence]?.widgetLabel ?? "null"))
|
||||
if selectedWidgetView?.hasWalkSprintKeys == true {
|
||||
let cmdCounts = widgetView.comboButtonStrings.count
|
||||
currentProfileLabel.text = LocalizationHelper.localizedString(forKey: " Cmd: %@ Sprint: %@ Walk: %@ Parent: %@",
|
||||
widgetView.cmdString, cmdCounts>0 ? widgetView.comboButtonStrings[0] : LocalizationHelper.localizedString(forKey: "null"),
|
||||
cmdCounts>1 ? widgetView.comboButtonStrings[1] : LocalizationHelper.localizedString(forKey: "null"), LocalizationHelper.localizedString(forKey:OnScreenWidgetView.mapping[widgetView.parentSequence]?.widgetLabel ?? "null"))
|
||||
}
|
||||
|
||||
undoButton.alpha = widgetView.layoutChanges.count > 1 ? 1.0 : 0.3
|
||||
|
||||
widgetView.accessWidgetAttributes()
|
||||
@@ -755,12 +780,37 @@ final class LayoutOnScreenControlsViewController: UIViewController, OnScreenWidg
|
||||
autoFitLabel(walkModeThresholdLabel)
|
||||
}
|
||||
|
||||
|
||||
sprintKeyStack.isHidden = !(widgetView.hasWalkSprintKeys && !widgetView.comboButtonStrings.isEmpty)
|
||||
walkKeyStack.isHidden = !(widgetView.hasWalkSprintKeys && widgetView.comboButtonStrings.count > 1)
|
||||
if widgetView.hasWalkSprintKeys {
|
||||
let clampedWalkThreshold = min(widgetView.walkKeyThreshold, widgetView.sprintKeyThreshold)
|
||||
if clampedWalkThreshold != widgetView.walkKeyThreshold {
|
||||
widgetView.walkKeyThreshold = clampedWalkThreshold
|
||||
}
|
||||
|
||||
sprintKeyThresholdSlider.value = Float(widgetView.sprintKeyThreshold)
|
||||
sprintKeyThresholdLabel.text = LocalizationHelper.localizedString(forKey: " Slide threshold: %0.2f ", sprintKeyThresholdSlider.value)
|
||||
autoFitLabel(sprintKeyThresholdLabel)
|
||||
sprintKeySelector.selectedSegmentIndex = Int(widgetView.sprintKeyActionType.rawValue)
|
||||
|
||||
walkKeyThresholdSlider.value = Float(widgetView.walkKeyThreshold)
|
||||
walkKeyThresholdLabel.text = LocalizationHelper.localizedString(forKey: " Slide threshold: %0.2f ", walkKeyThresholdSlider.value)
|
||||
walkKeySelector.selectedSegmentIndex = Int(widgetView.walkKeyActionType.rawValue)
|
||||
autoFitLabel(walkKeyThresholdLabel)
|
||||
|
||||
widgetView.updateMovementThresholdPreview()
|
||||
} else {
|
||||
widgetView.updateMovementThresholdPreview()
|
||||
}
|
||||
|
||||
|
||||
slideThresholdStack.isHidden = !widgetView.hasSlideThreshold
|
||||
if widgetView.hasSlideThreshold {
|
||||
slideThresholdSlider.minimumValue = Float(widgetView.slideThresholdMin)
|
||||
slideThresholdSlider.maximumValue = Float(widgetView.slideThresholdMax)
|
||||
slideThresholdSlider.value = Float(widgetView.slideThreshold)
|
||||
slideThresholdLabel.text = LocalizationHelper.localizedString(forKey: "Slide threshold: %.1f", widgetView.slideThreshold)
|
||||
slideThresholdLabel.text = LocalizationHelper.localizedString(forKey: " Slide threshold: %.1f ", widgetView.slideThreshold)
|
||||
autoFitLabel(slideThresholdLabel)
|
||||
}
|
||||
|
||||
@@ -833,7 +883,7 @@ final class LayoutOnScreenControlsViewController: UIViewController, OnScreenWidg
|
||||
|
||||
mouseDownButtonStack.isHidden = !widgetView.isMousePadWithButtonActions
|
||||
mouseButtonDownSelector.selectedSegmentIndex = Int(widgetView.mouseButtonAction.rawValue)
|
||||
|
||||
|
||||
|
||||
autoDockTimerStack.isHidden = !(widgetView.isFolder && widgetView.parentSequence == -1);
|
||||
autoDockTimerSlider.value = Float(widgetView.autoDockIdleDuration)
|
||||
@@ -900,6 +950,8 @@ final class LayoutOnScreenControlsViewController: UIViewController, OnScreenWidg
|
||||
stickIndicatorOffsetStack.isHidden = true
|
||||
sensitivityXStack.isHidden = true
|
||||
sensitivityYStack.isHidden = true
|
||||
sprintKeyStack.isHidden = true
|
||||
walkKeyStack.isHidden = true
|
||||
mouseDownButtonStack.isHidden = true
|
||||
decelerationRateStack.isHidden = true
|
||||
|
||||
@@ -1068,6 +1120,10 @@ final class LayoutOnScreenControlsViewController: UIViewController, OnScreenWidg
|
||||
newWidget.setVibration(style: Int(widget.vibrationStyle))
|
||||
newWidget.mouseButtonAction = widget.mouseButtonAction
|
||||
newWidget.buttonMode = widget.buttonMode
|
||||
newWidget.sprintKeyActionType = widget.sprintKeyActionType
|
||||
newWidget.sprintKeyThreshold = widget.sprintKeyThreshold
|
||||
newWidget.walkKeyActionType = widget.walkKeyActionType
|
||||
newWidget.walkKeyThreshold = widget.walkKeyThreshold
|
||||
|
||||
guard newWidget.widgetType == widget.widgetType else { return }
|
||||
view.insertSubview(newWidget, belowSubview: widgetPanelStack)
|
||||
@@ -1386,9 +1442,21 @@ final class LayoutOnScreenControlsViewController: UIViewController, OnScreenWidg
|
||||
sensitivityYSlider.addTarget(self, action: #selector(sensitivityYSliderMoved(_:)), for: .valueChanged)
|
||||
sensitivityYLabel.text = LocalizationHelper.localizedString(forKey: "SensitivityY")
|
||||
sensitivityYStack.isHidden = true
|
||||
|
||||
walkModeThresholdSlider.addTarget(self, action: #selector(walkModeThresholdSliderMoved(_:)), for: .valueChanged)
|
||||
walkModeThresholdLabel.text = LocalizationHelper.localizedString(forKey: "Walkmode threshold")
|
||||
walkModeThresholdStack.isHidden = true
|
||||
|
||||
sprintKeyThresholdSlider.addTarget(self, action: #selector(sprintKeyThresholdSliderMoved(_:)), for: .valueChanged)
|
||||
sprintKeyThresholdLabel.text = LocalizationHelper.localizedString(forKey: "Slide threshold")
|
||||
sprintKeySelector.addTarget(self, action: #selector(sprintKeyActionChanged(_:)), for: .valueChanged)
|
||||
sprintKeyStack.isHidden = true
|
||||
|
||||
walkKeyThresholdSlider.addTarget(self, action: #selector(walkKeyThresholdSliderMoved(_:)), for: .valueChanged)
|
||||
walkKeyThresholdLabel.text = LocalizationHelper.localizedString(forKey: "Slide threshold")
|
||||
walkKeySelector.addTarget(self, action: #selector(walkKeyActionChanged(_:)), for: .valueChanged)
|
||||
walkKeyStack.isHidden = true
|
||||
|
||||
minStickOffsetSlider.addTarget(self, action: #selector(minStickOffsetSliderMoved(_:)), for: .valueChanged)
|
||||
minStickOffsetLabel.text = LocalizationHelper.localizedString(forKey: "Minimum offset")
|
||||
minStickOffsetStack.isHidden = true
|
||||
@@ -1851,6 +1919,45 @@ final class LayoutOnScreenControlsViewController: UIViewController, OnScreenWidg
|
||||
slideThresholdLabel.text = LocalizationHelper.localizedString(forKey: "Slide threshold: %.1f", sender.value)
|
||||
selectedWidgetView?.slideThreshold = CGFloat(sender.value)
|
||||
}
|
||||
|
||||
@objc private func sprintKeyActionChanged(_ sender: UISegmentedControl) {
|
||||
selectedWidgetView?.sprintKeyActionType = OnScreenWidgetView.WalkSprintKeyActionType(rawValue: UInt8(sender.selectedSegmentIndex)) ?? .hold
|
||||
}
|
||||
|
||||
@objc private func sprintKeyThresholdSliderMoved(_ sender: UISlider) {
|
||||
sprintKeyThresholdLabel.text = LocalizationHelper.localizedString(forKey: " Slide threshold: %0.2f ", sender.value)
|
||||
autoFitLabel(sprintKeyThresholdLabel)
|
||||
|
||||
guard OnScreenWidgetView.editMode, let selectedWidgetView, widgetViewSelected else { return }
|
||||
|
||||
if sender.value < walkKeyThresholdSlider.value {
|
||||
walkKeyThresholdSlider.value = sender.value
|
||||
walkKeyThresholdLabel.text = LocalizationHelper.localizedString(forKey: " Slide threshold: %0.2f ", walkKeyThresholdSlider.value)
|
||||
autoFitLabel(walkKeyThresholdLabel)
|
||||
}
|
||||
|
||||
selectedWidgetView.sprintKeyThreshold = CGFloat(sender.value)
|
||||
selectedWidgetView.walkKeyThreshold = CGFloat(walkKeyThresholdSlider.value)
|
||||
selectedWidgetView.updateMovementThresholdPreview()
|
||||
}
|
||||
|
||||
@objc private func walkKeyActionChanged(_ sender: UISegmentedControl) {
|
||||
selectedWidgetView?.walkKeyActionType = OnScreenWidgetView.WalkSprintKeyActionType(rawValue: UInt8(sender.selectedSegmentIndex)) ?? .hold
|
||||
}
|
||||
|
||||
@objc private func walkKeyThresholdSliderMoved(_ sender: UISlider) {
|
||||
if sender.value > sprintKeyThresholdSlider.value {
|
||||
sender.value = sprintKeyThresholdSlider.value
|
||||
}
|
||||
|
||||
walkKeyThresholdLabel.text = LocalizationHelper.localizedString(forKey: " Slide threshold: %0.2f ", sender.value)
|
||||
autoFitLabel(walkKeyThresholdLabel)
|
||||
|
||||
guard OnScreenWidgetView.editMode, let selectedWidgetView, widgetViewSelected else { return }
|
||||
|
||||
selectedWidgetView.walkKeyThreshold = CGFloat(sender.value)
|
||||
selectedWidgetView.updateMovementThresholdPreview()
|
||||
}
|
||||
|
||||
@objc private func yawFactorSliderMoved(_ sender: UISlider) {
|
||||
yawFactorLabel.text = LocalizationHelper.localizedString(forKey: "Yaw factor: %.2f", sender.value)
|
||||
|
||||
@@ -187,6 +187,66 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"3fM-1s-S0k.segmentTitles[0]" : {
|
||||
"comment" : "Class = \"UISegmentedControl\"; 3fM-1s-S0k.segmentTitles[0] = \"hold\"; ObjectID = \"3fM-1s-S0k\";",
|
||||
"extractionState" : "extracted_with_value",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "new",
|
||||
"value" : "hold"
|
||||
}
|
||||
},
|
||||
"zh-Hans" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "保持"
|
||||
}
|
||||
},
|
||||
"zh-Hant" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "保持"
|
||||
}
|
||||
},
|
||||
"zh-HK" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "保持"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"3fM-1s-S0k.segmentTitles[1]" : {
|
||||
"comment" : "Class = \"UISegmentedControl\"; 3fM-1s-S0k.segmentTitles[1] = \"toggle\"; ObjectID = \"3fM-1s-S0k\";",
|
||||
"extractionState" : "extracted_with_value",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "new",
|
||||
"value" : "toggle"
|
||||
}
|
||||
},
|
||||
"zh-Hans" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "切换"
|
||||
}
|
||||
},
|
||||
"zh-Hant" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "切換"
|
||||
}
|
||||
},
|
||||
"zh-HK" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "切換"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"3rP-dh-TJi.text" : {
|
||||
"comment" : "Class = \"UILabel\"; text = \"Enable PiP\"; ObjectID = \"3rP-dh-TJi\";",
|
||||
"extractionState" : "extracted_with_value",
|
||||
@@ -427,6 +487,36 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"5Uu-1K-ov7.text" : {
|
||||
"comment" : "Class = \"UILabel\"; text = \"Sprint key\"; ObjectID = \"5Uu-1K-ov7\";",
|
||||
"extractionState" : "extracted_with_value",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "new",
|
||||
"value" : "Sprint key"
|
||||
}
|
||||
},
|
||||
"zh-Hans" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "疾走键"
|
||||
}
|
||||
},
|
||||
"zh-Hant" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "疾走鍵"
|
||||
}
|
||||
},
|
||||
"zh-HK" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "疾走鍵"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"6Cy-aH-DXp.text" : {
|
||||
"comment" : "Class = \"UILabel\"; text = \"Curve Exponent\"; ObjectID = \"6Cy-aH-DXp\";",
|
||||
"extractionState" : "extracted_with_value",
|
||||
@@ -2305,6 +2395,66 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"csH-cx-ZWH.segmentTitles[0]" : {
|
||||
"comment" : "Class = \"UISegmentedControl\"; csH-cx-ZWH.segmentTitles[0] = \"hold\"; ObjectID = \"csH-cx-ZWH\";",
|
||||
"extractionState" : "extracted_with_value",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "new",
|
||||
"value" : "hold"
|
||||
}
|
||||
},
|
||||
"zh-Hans" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "保持"
|
||||
}
|
||||
},
|
||||
"zh-Hant" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "保持"
|
||||
}
|
||||
},
|
||||
"zh-HK" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "保持"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"csH-cx-ZWH.segmentTitles[1]" : {
|
||||
"comment" : "Class = \"UISegmentedControl\"; csH-cx-ZWH.segmentTitles[1] = \"toggle\"; ObjectID = \"csH-cx-ZWH\";",
|
||||
"extractionState" : "extracted_with_value",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "new",
|
||||
"value" : "toggle"
|
||||
}
|
||||
},
|
||||
"zh-Hans" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "切换"
|
||||
}
|
||||
},
|
||||
"zh-Hant" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "切換"
|
||||
}
|
||||
},
|
||||
"zh-HK" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "切換"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"cyH-Fh-vW6.normalTitle" : {
|
||||
"comment" : "Class = \"UIButton\"; normalTitle = \"Button\"; ObjectID = \"cyH-Fh-vW6\";",
|
||||
"extractionState" : "extracted_with_value",
|
||||
@@ -2672,6 +2822,36 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"eRk-iM-nN4.text" : {
|
||||
"comment" : "Class = \"UILabel\"; text = \"Walk key\"; ObjectID = \"eRk-iM-nN4\";",
|
||||
"extractionState" : "extracted_with_value",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "new",
|
||||
"value" : "Walk key"
|
||||
}
|
||||
},
|
||||
"zh-Hans" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "静步键"
|
||||
}
|
||||
},
|
||||
"zh-Hant" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "靜步鍵"
|
||||
}
|
||||
},
|
||||
"zh-HK" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "靜步鍵"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"eTT-y7-oTM.configuration.title" : {
|
||||
"comment" : "Class = \"UIButton\"; configuration.title = \"9999999\"; ObjectID = \"eTT-y7-oTM\";",
|
||||
"extractionState" : "stale",
|
||||
@@ -3812,6 +3992,18 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"kex-PV-gvq.text" : {
|
||||
"comment" : "Class = \"UILabel\"; text = \"Slide threshold\"; ObjectID = \"kex-PV-gvq\";",
|
||||
"extractionState" : "extracted_with_value",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "new",
|
||||
"value" : "Slide threshold"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"kho-5R-daP.segmentTitles[0]" : {
|
||||
"comment" : "Class = \"UISegmentedControl\"; kho-5R-daP.segmentTitles[0] = \"3 Finger Tap\"; ObjectID = \"kho-5R-daP\";",
|
||||
"extractionState" : "extracted_with_value",
|
||||
@@ -5884,6 +6076,18 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"v4J-ot-qpz.text" : {
|
||||
"comment" : "Class = \"UILabel\"; text = \"Slide threshold\"; ObjectID = \"v4J-ot-qpz\";",
|
||||
"extractionState" : "extracted_with_value",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "new",
|
||||
"value" : "Slide threshold"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"v5f-j3-pEc.text" : {
|
||||
"comment" : "Class = \"UILabel\"; text = \"Custom Double Tap Keyboard Shortcut\"; ObjectID = \"v5f-j3-pEc\";",
|
||||
"extractionState" : "extracted_with_value",
|
||||
|
||||
@@ -2521,7 +2521,7 @@
|
||||
},
|
||||
"zh-Hans" : {
|
||||
"stringUnit" : {
|
||||
"state" : "needs_review",
|
||||
"state" : "translated",
|
||||
"value" : "内置陀螺仪映射为"
|
||||
}
|
||||
},
|
||||
@@ -2551,7 +2551,7 @@
|
||||
},
|
||||
"zh-Hans" : {
|
||||
"stringUnit" : {
|
||||
"state" : "needs_review",
|
||||
"state" : "translated",
|
||||
"value" : "指针速度"
|
||||
}
|
||||
},
|
||||
@@ -2995,6 +2995,66 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"Jz7-vJ-mMl.segmentTitles[0]" : {
|
||||
"comment" : "Class = \"UISegmentedControl\"; Jz7-vJ-mMl.segmentTitles[0] = \"hold\"; ObjectID = \"Jz7-vJ-mMl\";",
|
||||
"extractionState" : "extracted_with_value",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "new",
|
||||
"value" : "hold"
|
||||
}
|
||||
},
|
||||
"zh-Hans" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "保持"
|
||||
}
|
||||
},
|
||||
"zh-Hant" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "保持"
|
||||
}
|
||||
},
|
||||
"zh-HK" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "保持"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Jz7-vJ-mMl.segmentTitles[1]" : {
|
||||
"comment" : "Class = \"UISegmentedControl\"; Jz7-vJ-mMl.segmentTitles[1] = \"toggle\"; ObjectID = \"Jz7-vJ-mMl\";",
|
||||
"extractionState" : "extracted_with_value",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "new",
|
||||
"value" : "toggle"
|
||||
}
|
||||
},
|
||||
"zh-Hans" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "切换"
|
||||
}
|
||||
},
|
||||
"zh-Hant" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "切换"
|
||||
}
|
||||
},
|
||||
"zh-HK" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "切换"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"KbX-bp-pYg.text" : {
|
||||
"comment" : "Class = \"UILabel\"; text = \" \"; ObjectID = \"KbX-bp-pYg\";",
|
||||
"extractionState" : "extracted_with_value",
|
||||
@@ -3061,6 +3121,36 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"KpH-R8-kny.text" : {
|
||||
"comment" : "Class = \"UILabel\"; text = \"Walk key\"; ObjectID = \"KpH-R8-kny\";",
|
||||
"extractionState" : "extracted_with_value",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "new",
|
||||
"value" : "Walk key"
|
||||
}
|
||||
},
|
||||
"zh-Hans" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "静步键"
|
||||
}
|
||||
},
|
||||
"zh-Hant" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "靜步鍵"
|
||||
}
|
||||
},
|
||||
"zh-HK" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "靜步鍵"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"kva-gQ-CZh.text" : {
|
||||
"comment" : "Class = \"UILabel\"; text = \"Size\"; ObjectID = \"kva-gQ-CZh\";",
|
||||
"extractionState" : "extracted_with_value",
|
||||
@@ -3139,6 +3229,36 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"lJx-Tn-7we.text" : {
|
||||
"comment" : "Class = \"UILabel\"; text = \"Sprint key\"; ObjectID = \"lJx-Tn-7we\";",
|
||||
"extractionState" : "extracted_with_value",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "new",
|
||||
"value" : "Sprint key"
|
||||
}
|
||||
},
|
||||
"zh-Hans" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "疾走键"
|
||||
}
|
||||
},
|
||||
"zh-Hant" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "疾走鍵"
|
||||
}
|
||||
},
|
||||
"zh-HK" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "疾走鍵"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"LVq-7c-3zg.text" : {
|
||||
"comment" : "Class = \"UILabel\"; text = \"Performance Graph \"; ObjectID = \"LVq-7c-3zg\";",
|
||||
"extractionState" : "extracted_with_value",
|
||||
@@ -4009,7 +4129,7 @@
|
||||
},
|
||||
"zh-HK" : {
|
||||
"stringUnit" : {
|
||||
"state" : "needs_review",
|
||||
"state" : "translated",
|
||||
"value" : "滑出時鬆開"
|
||||
}
|
||||
}
|
||||
@@ -4039,7 +4159,7 @@
|
||||
},
|
||||
"zh-HK" : {
|
||||
"stringUnit" : {
|
||||
"state" : "needs_review",
|
||||
"state" : "translated",
|
||||
"value" : "滑動時按下"
|
||||
}
|
||||
}
|
||||
@@ -5119,6 +5239,18 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"sYb-ef-Vkq.text" : {
|
||||
"comment" : "Class = \"UILabel\"; text = \"Slide threshold\"; ObjectID = \"sYb-ef-Vkq\";",
|
||||
"extractionState" : "extracted_with_value",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "new",
|
||||
"value" : "Slide threshold"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"T0w-xM-ze7.text" : {
|
||||
"comment" : "Class = \"UILabel\"; text = \"Resolution \"; ObjectID = \"T0w-xM-ze7\";",
|
||||
"extractionState" : "extracted_with_value",
|
||||
@@ -5389,6 +5521,66 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"TsJ-mx-pbL.segmentTitles[0]" : {
|
||||
"comment" : "Class = \"UISegmentedControl\"; TsJ-mx-pbL.segmentTitles[0] = \"hold\"; ObjectID = \"TsJ-mx-pbL\";",
|
||||
"extractionState" : "extracted_with_value",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "new",
|
||||
"value" : "hold"
|
||||
}
|
||||
},
|
||||
"zh-Hans" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "保持"
|
||||
}
|
||||
},
|
||||
"zh-Hant" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "保持"
|
||||
}
|
||||
},
|
||||
"zh-HK" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "保持"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"TsJ-mx-pbL.segmentTitles[1]" : {
|
||||
"comment" : "Class = \"UISegmentedControl\"; TsJ-mx-pbL.segmentTitles[1] = \"toggle\"; ObjectID = \"TsJ-mx-pbL\";",
|
||||
"extractionState" : "extracted_with_value",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "new",
|
||||
"value" : "toggle"
|
||||
}
|
||||
},
|
||||
"zh-Hans" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "切换"
|
||||
}
|
||||
},
|
||||
"zh-Hant" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "切换"
|
||||
}
|
||||
},
|
||||
"zh-HK" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "切换"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"ttV-kY-jCi.text" : {
|
||||
"comment" : "Class = \"UILabel\"; text = \"The recommended value is 2. 1 frame provides the lowest latency, but may require an Ethernet connection.\"; ObjectID = \"ttV-kY-jCi\";",
|
||||
"extractionState" : "stale",
|
||||
@@ -6007,6 +6199,18 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"YQo-bc-mwR.text" : {
|
||||
"comment" : "Class = \"UILabel\"; text = \"Slide threshold\"; ObjectID = \"YQo-bc-mwR\";",
|
||||
"extractionState" : "extracted_with_value",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "new",
|
||||
"value" : "Slide threshold"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Z9M-yq-an2.title" : {
|
||||
"comment" : "Class = \"UIBarButtonItem\"; title = \"Import\"; ObjectID = \"Z9M-yq-an2\";",
|
||||
"extractionState" : "extracted_with_value",
|
||||
|
||||
@@ -612,9 +612,36 @@ struct WidgetPickerView: View {
|
||||
return isPad(firstItem) && !isPad(lastItem) && poolItems.contains(where: isPad) && poolItems.contains(where: { !isPad($0) })
|
||||
}
|
||||
|
||||
private var selectedMovementPadCommand: String? {
|
||||
poolItems.first(where: { $0.cmd == "WASDPAD" || $0.cmd == "ARROWPAD" })?.cmd
|
||||
}
|
||||
|
||||
private var movementPadSingleButtonCount: Int {
|
||||
guard selectedMovementPadCommand != nil else { return 0 }
|
||||
return poolItems.filter { !isPad($0) }.count
|
||||
}
|
||||
|
||||
private var movementPadNeedsWalkKeyTip: Bool {
|
||||
selectedMovementPadCommand != nil && movementPadSingleButtonCount == 0
|
||||
}
|
||||
|
||||
private var movementPadNeedsSprintKeyTip: Bool {
|
||||
selectedMovementPadCommand != nil && movementPadSingleButtonCount == 1
|
||||
}
|
||||
|
||||
private var movementPadHasReachedSingleKeyLimit: Bool {
|
||||
selectedMovementPadCommand != nil && movementPadSingleButtonCount >= 2
|
||||
}
|
||||
|
||||
private func updateTipMessageForCurrentPoolState() {
|
||||
if poolItems.isEmpty {
|
||||
resetTipMessage()
|
||||
} else if movementPadNeedsWalkKeyTip {
|
||||
setTipMessage(SwiftLocalizationHelper.localizedString(forKey: "Please select a sprint key"))
|
||||
} else if movementPadNeedsSprintKeyTip {
|
||||
setTipMessage(SwiftLocalizationHelper.localizedString(forKey: "Sprint key set. Select a walk key (optional, you can skip and create)"))
|
||||
} else if movementPadHasReachedSingleKeyLimit {
|
||||
setTipMessage(SwiftLocalizationHelper.localizedString(forKey: "Sprint and walk keys are set"))
|
||||
} else if hasButtonThenPadCombination {
|
||||
setTipMessage(SwiftLocalizationHelper.localizedString(forKey: "A button with touchpad functionality will be created"))
|
||||
} else if hasPadThenButtonCombination {
|
||||
@@ -1332,6 +1359,14 @@ struct WidgetPickerView: View {
|
||||
return false
|
||||
}
|
||||
|
||||
if movementPadHasReachedSingleKeyLimit {
|
||||
setTipMessage(
|
||||
SwiftLocalizationHelper.localizedString(forKey: "Walk and sprint keys are already set. No more keys can be added"),
|
||||
type: .error
|
||||
)
|
||||
return false
|
||||
}
|
||||
|
||||
let candidate = WidgetPoolItem(
|
||||
cmd: cmd,
|
||||
source: source,
|
||||
@@ -1774,11 +1809,19 @@ struct WidgetPickerView: View {
|
||||
keyboardPickerMode == .shortcutPicker
|
||||
}
|
||||
|
||||
private var containsMovementDirectionPad: Bool {
|
||||
poolItems.contains { $0.cmd == "WASDPAD" || $0.cmd == "ARROWPAD" }
|
||||
}
|
||||
|
||||
private var shouldBypassCreateWidgetSheet: Bool {
|
||||
if isShortcutPickerMode {
|
||||
return true
|
||||
}
|
||||
|
||||
if containsMovementDirectionPad {
|
||||
return true
|
||||
}
|
||||
|
||||
guard !poolItems.isEmpty else { return false }
|
||||
|
||||
let hasVisibleConfigurationSection =
|
||||
|
||||
Reference in New Issue
Block a user