- Dynamic Label & its hiding mechanism

-
This commit is contained in:
TrueZhuanjia committed 2025-06-14 18:09:31 +08:00
1 parent e2bebbcc61
commit de5fb7a19b
10 files changed
+298 -203

No files matched your search

+43 -49
View File
@@ -66,7 +66,7 @@
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="7" translatesAutoresizingMaskIntoConstraints="NO" id="zpX-lo-MLA" userLabel="Resolutionstak"> <stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="7" translatesAutoresizingMaskIntoConstraints="NO" id="zpX-lo-MLA" userLabel="Resolutionstak">
<rect key="frame" x="16" y="57" width="380" height="96.5"/> <rect key="frame" x="16" y="57" width="380" height="96.5"/>
<subviews> <subviews>
<label opaque="NO" clearsContextBeforeDrawing="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Resolution " lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="pYZ-GR-EwO"> <label opaque="NO" clearsContextBeforeDrawing="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Resolution " lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="pYZ-GR-EwO">
<rect key="frame" x="0.0" y="0.0" width="380" height="20.5"/> <rect key="frame" x="0.0" y="0.0" width="380" height="20.5"/>
<fontDescription key="fontDescription" name=".AppleSystemUIFont" family=".AppleSystemUIFont" pointSize="17"/> <fontDescription key="fontDescription" name=".AppleSystemUIFont" family=".AppleSystemUIFont" pointSize="17"/>
<nil key="textColor"/> <nil key="textColor"/>
@@ -112,7 +112,7 @@
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="TuR-H8-e2H" userLabel="FPS Stack"> <stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="TuR-H8-e2H" userLabel="FPS Stack">
<rect key="frame" x="15" y="177" width="380" height="56.5"/> <rect key="frame" x="15" y="177" width="380" height="56.5"/>
<subviews> <subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Frame Rate " lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Aiv-r8-9k2"> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Frame Rate" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Aiv-r8-9k2">
<rect key="frame" x="0.0" y="0.0" width="380" height="20.5"/> <rect key="frame" x="0.0" y="0.0" width="380" height="20.5"/>
<color key="tintColor" red="0.81533776120000001" green="0.85979419950000002" blue="0.91372549020000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <color key="tintColor" red="0.81533776120000001" green="0.85979419950000002" blue="0.91372549020000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/> <fontDescription key="fontDescription" type="system" pointSize="17"/>
@@ -137,7 +137,7 @@
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="2cV-yC-0QL" userLabel="Bitrate Stack"> <stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="2cV-yC-0QL" userLabel="Bitrate Stack">
<rect key="frame" x="16" y="246" width="380" height="55.5"/> <rect key="frame" x="16" y="246" width="380" height="55.5"/>
<subviews> <subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Bitrate " lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" preferredMaxLayoutWidth="459" translatesAutoresizingMaskIntoConstraints="NO" id="lMt-4H-fkV"> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Bitrate" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" preferredMaxLayoutWidth="459" translatesAutoresizingMaskIntoConstraints="NO" id="lMt-4H-fkV">
<rect key="frame" x="0.0" y="0.0" width="380" height="20.5"/> <rect key="frame" x="0.0" y="0.0" width="380" height="20.5"/>
<color key="tintColor" red="0.81533776120000001" green="0.85979419950000002" blue="0.91372549020000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <color key="tintColor" red="0.81533776120000001" green="0.85979419950000002" blue="0.91372549020000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/> <fontDescription key="fontDescription" type="system" pointSize="17"/>
@@ -156,7 +156,7 @@
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="gWg-BF-yDI" userLabel="codec Stack"> <stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="gWg-BF-yDI" userLabel="codec Stack">
<rect key="frame" x="16" y="1618" width="380" height="56.5"/> <rect key="frame" x="16" y="1618" width="380" height="56.5"/>
<subviews> <subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Preferred Codec " textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="6w5-Md-NpV" userLabel="Preferred Codec"> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Preferred Codec" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="6w5-Md-NpV" userLabel="Preferred Codec">
<rect key="frame" x="0.0" y="0.0" width="380" height="20.5"/> <rect key="frame" x="0.0" y="0.0" width="380" height="20.5"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/> <fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.93902439019999995" green="0.9625305918" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <color key="textColor" red="0.93902439019999995" green="0.9625305918" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
@@ -201,7 +201,7 @@
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="9C2-td-rMV" userLabel="framepacing Stack"> <stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="9C2-td-rMV" userLabel="framepacing Stack">
<rect key="frame" x="15" y="1837" width="380" height="56.5"/> <rect key="frame" x="15" y="1837" width="380" height="56.5"/>
<subviews> <subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Frame Pacing Preference " textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ZWC-Gw-pSq"> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Frame Pacing Preference" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ZWC-Gw-pSq">
<rect key="frame" x="0.0" y="0.0" width="380" height="20.5"/> <rect key="frame" x="0.0" y="0.0" width="380" height="20.5"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/> <fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.93902439019999995" green="0.9625305918" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <color key="textColor" red="0.93902439019999995" green="0.9625305918" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
@@ -224,7 +224,7 @@
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="7" translatesAutoresizingMaskIntoConstraints="NO" id="M78-Pw-jWx" userLabel="touchMode Stack"> <stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="7" translatesAutoresizingMaskIntoConstraints="NO" id="M78-Pw-jWx" userLabel="touchMode Stack">
<rect key="frame" x="16" y="307" width="380" height="96.5"/> <rect key="frame" x="16" y="307" width="380" height="96.5"/>
<subviews> <subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Touch Mode " textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="MUY-2Y-bHi" userLabel="Touch Mode"> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Touch Mode" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="MUY-2Y-bHi" userLabel="Touch Mode">
<rect key="frame" x="0.0" y="0.0" width="380" height="20.5"/> <rect key="frame" x="0.0" y="0.0" width="380" height="20.5"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/> <fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.93902439019999995" green="0.9625305918" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <color key="textColor" red="0.93902439019999995" green="0.9625305918" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
@@ -243,7 +243,7 @@
<stackView opaque="NO" contentMode="scaleToFill" spacing="10" translatesAutoresizingMaskIntoConstraints="NO" id="SkS-ft-peB" userLabel="enableOswStack"> <stackView opaque="NO" contentMode="scaleToFill" spacing="10" translatesAutoresizingMaskIntoConstraints="NO" id="SkS-ft-peB" userLabel="enableOswStack">
<rect key="frame" x="0.0" y="65.5" width="380" height="31"/> <rect key="frame" x="0.0" y="65.5" width="380" height="31"/>
<subviews> <subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Enable On-Screen Widget &amp; Peripherals" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="AlL-fp-WCm"> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Enable On-Screen Widget &amp; Peripherals" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.65000000000000002" adjustsLetterSpacingToFitWidth="YES" translatesAutoresizingMaskIntoConstraints="NO" id="AlL-fp-WCm">
<rect key="frame" x="0.0" y="0.0" width="240" height="31"/> <rect key="frame" x="0.0" y="0.0" width="240" height="31"/>
<constraints> <constraints>
<constraint firstAttribute="width" constant="160" id="NeF-EE-h4c"/> <constraint firstAttribute="width" constant="160" id="NeF-EE-h4c"/>
@@ -288,10 +288,10 @@
<constraint firstAttribute="width" constant="380" id="q0h-IS-VR8"/> <constraint firstAttribute="width" constant="380" id="q0h-IS-VR8"/>
</constraints> </constraints>
</stackView> </stackView>
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="b1U-nD-gYE" userLabel="pointerVelocityDivider Stack"> <stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" distribution="equalCentering" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="b1U-nD-gYE" userLabel="pointerVelocityDivider Stack">
<rect key="frame" x="15" y="460" width="380" height="56.5"/> <rect key="frame" x="15" y="460" width="380" height="56.5"/>
<subviews> <subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Divider Position" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="DkI-w6-jku" userLabel="pointerVelocityModeDivider"> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Divider Position" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Qs9-iS-YoW" userLabel="touchPointerVelocityDividerPosition">
<rect key="frame" x="0.0" y="0.0" width="380" height="18.5"/> <rect key="frame" x="0.0" y="0.0" width="380" height="18.5"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<color key="tintColor" red="0.81533776120000001" green="0.85979419950000002" blue="0.91372549020000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <color key="tintColor" red="0.81533776120000001" green="0.85979419950000002" blue="0.91372549020000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
@@ -354,7 +354,7 @@
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="aQ8-4e-CQB" userLabel="mousePointerVelocity Stack"> <stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="aQ8-4e-CQB" userLabel="mousePointerVelocity Stack">
<rect key="frame" x="17" y="744" width="380" height="56.5"/> <rect key="frame" x="17" y="744" width="380" height="56.5"/>
<subviews> <subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Mouse Pointer Velocity " lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="oPM-G6-u5O" userLabel="mousePointerVelocityFactor"> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Mouse Pointer Velocity" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="oPM-G6-u5O">
<rect key="frame" x="0.0" y="0.0" width="380" height="18.5"/> <rect key="frame" x="0.0" y="0.0" width="380" height="18.5"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<color key="tintColor" red="0.81533776120000001" green="0.85979419950000002" blue="0.91372549020000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <color key="tintColor" red="0.81533776120000001" green="0.85979419950000002" blue="0.91372549020000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
@@ -375,7 +375,7 @@
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="ziJ-RC-xkP" userLabel="onScreenWidget Stack"> <stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="ziJ-RC-xkP" userLabel="onScreenWidget Stack">
<rect key="frame" x="16" y="808" width="380" height="56.5"/> <rect key="frame" x="16" y="808" width="380" height="56.5"/>
<subviews> <subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="On-Screen Widgets " lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="LGV-5y-piG"> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="On-Screen Widgets " lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="LGV-5y-piG">
<rect key="frame" x="0.0" y="0.0" width="380" height="20.5"/> <rect key="frame" x="0.0" y="0.0" width="380" height="20.5"/>
<color key="tintColor" red="0.81533776120000001" green="0.85979419950000002" blue="0.91372549020000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <color key="tintColor" red="0.81533776120000001" green="0.85979419950000002" blue="0.91372549020000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/> <fontDescription key="fontDescription" type="system" pointSize="17"/>
@@ -401,7 +401,7 @@
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="2GS-cX-u4i" userLabel="swapABXYButtons Stack"> <stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="2GS-cX-u4i" userLabel="swapABXYButtons Stack">
<rect key="frame" x="15" y="1471" width="380" height="56.5"/> <rect key="frame" x="15" y="1471" width="380" height="56.5"/>
<subviews> <subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Swap A/B and X/Y Buttons " textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Dll-7x-18l"> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Swap A/B and X/Y Buttons" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Dll-7x-18l">
<rect key="frame" x="0.0" y="0.0" width="380" height="20.5"/> <rect key="frame" x="0.0" y="0.0" width="380" height="20.5"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/> <fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.93902439019999995" green="0.9625305918" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <color key="textColor" red="0.93902439019999995" green="0.9625305918" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
@@ -611,10 +611,31 @@
<constraint firstAttribute="width" constant="380" id="S9G-oL-OV0"/> <constraint firstAttribute="width" constant="380" id="S9G-oL-OV0"/>
</constraints> </constraints>
</stackView> </stackView>
<stackView opaque="NO" contentMode="scaleToFill" spacing="20" id="gjX-s1-k61" userLabel="CitrixX1MouseStack">
<rect key="frame" x="20" y="1973" width="280" height="31"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Citrix X1 Mouse" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="5aI-Zx-dNf">
<rect key="frame" x="0.0" y="0.0" width="130" height="31"/>
<constraints>
<constraint firstAttribute="width" constant="130" id="jpP-y3-Vte"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" on="YES" translatesAutoresizingMaskIntoConstraints="NO" id="GQM-NR-WIO" userLabel="citrixX1MouseSwitch">
<rect key="frame" x="150" y="0.0" width="132" height="31"/>
<constraints>
<constraint firstAttribute="width" constant="130" id="MmP-8X-kG2"/>
</constraints>
</switch>
</subviews>
</stackView>
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="UcP-0b-nJD" userLabel="statsOverlay Stack"> <stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="UcP-0b-nJD" userLabel="statsOverlay Stack">
<rect key="frame" x="15" y="2063" width="380" height="56.5"/> <rect key="frame" x="15" y="2063" width="380" height="56.5"/>
<subviews> <subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Statistics Overlay " textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="s2i-ZL-Gz4" userLabel="Statistics Overlay"> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Statistics Overlay" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="s2i-ZL-Gz4" userLabel="Statistics Overlay">
<rect key="frame" x="0.0" y="0.0" width="380" height="20.5"/> <rect key="frame" x="0.0" y="0.0" width="380" height="20.5"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/> <fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.93902439019999995" green="0.9625305918" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <color key="textColor" red="0.93902439019999995" green="0.9625305918" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
@@ -635,33 +656,10 @@
<constraint firstAttribute="width" constant="380" id="7al-D7-HS5"/> <constraint firstAttribute="width" constant="380" id="7al-D7-HS5"/>
</constraints> </constraints>
</stackView> </stackView>
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="Vqp-65-BQP" userLabel="optimizeSettings Stack">
<rect key="frame" x="15" y="1327" width="380" height="56.5"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Optimize Game Settings " textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="WSI-9V-G6c">
<rect key="frame" x="0.0" y="0.0" width="380" height="20.5"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.93902439019999995" green="0.9625305918" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<segmentedControl opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="0" translatesAutoresizingMaskIntoConstraints="NO" id="Awc-Oh-s9n" userLabel="Optimize Settings Selector">
<rect key="frame" x="0.0" y="25.5" width="380" height="32"/>
<segments>
<segment title="No"/>
<segment title="Yes"/>
</segments>
<color key="tintColor" red="0.6716768742" green="0.61711704730000005" blue="0.99902987480000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<color key="selectedSegmentTintColor" systemColor="linkColor"/>
</segmentedControl>
</subviews>
<constraints>
<constraint firstAttribute="width" constant="380" id="0Aq-El-ROg"/>
</constraints>
</stackView>
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="bu9-4a-Uqc" userLabel="audioOnPC Stack"> <stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="bu9-4a-Uqc" userLabel="audioOnPC Stack">
<rect key="frame" x="15" y="1544" width="380" height="56.5"/> <rect key="frame" x="15" y="1544" width="380" height="56.5"/>
<subviews> <subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Play Audio on PC " textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fXq-oD-MrL"> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Play Audio on PC" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fXq-oD-MrL">
<rect key="frame" x="0.0" y="0.0" width="380" height="20.5"/> <rect key="frame" x="0.0" y="0.0" width="380" height="20.5"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/> <fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.93902439019999995" green="0.9625305918" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <color key="textColor" red="0.93902439019999995" green="0.9625305918" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
@@ -684,7 +682,7 @@
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="LhF-d1-2Qk" userLabel="multiController Stack"> <stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="LhF-d1-2Qk" userLabel="multiController Stack">
<rect key="frame" x="15" y="1400" width="380" height="56.5"/> <rect key="frame" x="15" y="1400" width="380" height="56.5"/>
<subviews> <subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Multi-Controller Mode " textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="bFD-Ng-abn"> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Multi-Controller Mode" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="bFD-Ng-abn">
<rect key="frame" x="0.0" y="0.0" width="380" height="20.5"/> <rect key="frame" x="0.0" y="0.0" width="380" height="20.5"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/> <fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.93902439019999995" green="0.9625305918" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <color key="textColor" red="0.93902439019999995" green="0.9625305918" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
@@ -772,23 +770,20 @@
</switch> </switch>
</subviews> </subviews>
</stackView> </stackView>
<stackView opaque="NO" contentMode="scaleToFill" spacing="20" id="gjX-s1-k61" userLabel="CitrixX1MouseStack"> <stackView opaque="NO" contentMode="scaleToFill" spacing="20" id="TvS-69-vcF" userLabel="optimizeGameSettingStack">
<rect key="frame" x="20" y="1973" width="280" height="31"/> <rect key="frame" x="20" y="2012" width="280" height="31"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews> <subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Citrix X1 Mouse" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="5aI-Zx-dNf"> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Optimize Game Settings" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.65000000000000002" adjustsLetterSpacingToFitWidth="YES" adjustsFontForContentSizeCategory="YES" translatesAutoresizingMaskIntoConstraints="NO" id="d1N-HH-Aq9" userLabel="Optimize Game Settings">
<rect key="frame" x="0.0" y="0.0" width="130" height="31"/> <rect key="frame" x="0.0" y="0.0" width="130" height="31"/>
<constraints>
<constraint firstAttribute="width" constant="130" id="jpP-y3-Vte"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="17"/> <fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/> <nil key="textColor"/>
<nil key="highlightedColor"/> <nil key="highlightedColor"/>
</label> </label>
<switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" on="YES" translatesAutoresizingMaskIntoConstraints="NO" id="GQM-NR-WIO" userLabel="citrixX1MouseSwitch"> <switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" on="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Sui-Ig-YxN" userLabel="optimizeSettingSwitch">
<rect key="frame" x="150" y="0.0" width="132" height="31"/> <rect key="frame" x="150" y="0.0" width="132" height="31"/>
<constraints> <constraints>
<constraint firstAttribute="width" constant="130" id="MmP-8X-kG2"/> <constraint firstAttribute="width" constant="130" id="Ywr-t1-umk"/>
</constraints> </constraints>
</switch> </switch>
</subviews> </subviews>
@@ -831,12 +826,11 @@
<outlet property="onScreenWidgetSelector" destination="qSU-wh-tqA" id="j8d-fB-Z2c"/> <outlet property="onScreenWidgetSelector" destination="qSU-wh-tqA" id="j8d-fB-Z2c"/>
<outlet property="onScreenWidgetStack" destination="ziJ-RC-xkP" id="4Me-0o-H65"/> <outlet property="onScreenWidgetStack" destination="ziJ-RC-xkP" id="4Me-0o-H65"/>
<outlet property="onscreenControllerLabel" destination="LGV-5y-piG" id="GsV-fS-lX9"/> <outlet property="onscreenControllerLabel" destination="LGV-5y-piG" id="GsV-fS-lX9"/>
<outlet property="optimizeSettingsSelector" destination="Awc-Oh-s9n" id="vXR-ae-Of6"/> <outlet property="optimizeGamesStack" destination="TvS-69-vcF" id="pm1-0c-dCR"/>
<outlet property="optimizeSettingsStack" destination="Vqp-65-BQP" id="m6Z-xn-RRW"/> <outlet property="optimizeGamesSwitch" destination="Sui-Ig-YxN" id="Lxu-si-ugy"/>
<outlet property="pointerVelocityDividerStack" destination="b1U-nD-gYE" id="ep1-K3-rKj"/> <outlet property="pointerVelocityDividerStack" destination="b1U-nD-gYE" id="ep1-K3-rKj"/>
<outlet property="pointerVelocityFactorStack" destination="vdk-mK-ztu" id="Cik-Rh-pGS"/> <outlet property="pointerVelocityFactorStack" destination="vdk-mK-ztu" id="Cik-Rh-pGS"/>
<outlet property="pointerVelocityModeDividerSlider" destination="AcZ-2i-GI4" id="dGf-ZU-w3S"/> <outlet property="pointerVelocityModeDividerSlider" destination="AcZ-2i-GI4" id="dGf-ZU-w3S"/>
<outlet property="pointerVelocityModeDividerUILabel" destination="DkI-w6-jku" id="edY-gX-2Cw"/>
<outlet property="resolutionSelector" destination="ckc-Dm-8ex" id="rl6-rx-wd3"/> <outlet property="resolutionSelector" destination="ckc-Dm-8ex" id="rl6-rx-wd3"/>
<outlet property="resolutionStack" destination="zpX-lo-MLA" id="9Hu-I9-hjH"/> <outlet property="resolutionStack" destination="zpX-lo-MLA" id="9Hu-I9-hjH"/>
<outlet property="reverseMouseWheelDirectionSelector" destination="mTM-NL-CcF" id="EYZ-Qg-OLu"/> <outlet property="reverseMouseWheelDirectionSelector" destination="mTM-NL-CcF" id="EYZ-Qg-OLu"/>
@@ -45,7 +45,7 @@
<attribute name="resolutionSelected" optional="YES" attributeType="Integer 16" defaultValueString="5" usesScalarValueType="NO" syncable="YES"/> <attribute name="resolutionSelected" optional="YES" attributeType="Integer 16" defaultValueString="5" usesScalarValueType="NO" syncable="YES"/>
<attribute name="reverseMouseWheelDirection" attributeType="Boolean" defaultValueString="YES" usesScalarValueType="YES" syncable="YES"/> <attribute name="reverseMouseWheelDirection" attributeType="Boolean" defaultValueString="YES" usesScalarValueType="YES" syncable="YES"/>
<attribute name="settingsMenuMode" optional="YES" attributeType="Integer 16" defaultValueString="0" usesScalarValueType="NO" syncable="YES"/> <attribute name="settingsMenuMode" optional="YES" attributeType="Integer 16" defaultValueString="0" usesScalarValueType="NO" syncable="YES"/>
<attribute name="settingsMenuWidth" attributeType="Float" defaultValueString="390" usesScalarValueType="NO" syncable="YES"/> <attribute name="settingsMenuWidth" attributeType="Float" defaultValueString="370" usesScalarValueType="NO" syncable="YES"/>
<attribute name="showKeyboardToolbar" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES" syncable="YES"/> <attribute name="showKeyboardToolbar" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES" syncable="YES"/>
<attribute name="slideToSettingsDistance" optional="YES" attributeType="Float" defaultValueString="0.25" usesScalarValueType="NO" syncable="YES"/> <attribute name="slideToSettingsDistance" optional="YES" attributeType="Float" defaultValueString="0.25" usesScalarValueType="NO" syncable="YES"/>
<attribute name="slideToSettingsScreenEdge" optional="YES" attributeType="Integer 32" defaultValueString="2" usesScalarValueType="NO" syncable="YES"/> <attribute name="slideToSettingsScreenEdge" optional="YES" attributeType="Integer 32" defaultValueString="2" usesScalarValueType="NO" syncable="YES"/>
+1 -1
View File
@@ -122,7 +122,7 @@
} }
} }
}, },
"%d finger tap gesture" : { "%d finger tap" : {
"extractionState" : "manual", "extractionState" : "manual",
"localizations" : { "localizations" : {
"zh-Hans" : { "zh-Hans" : {
+6
View File
@@ -10,6 +10,11 @@
#import <UIKit/UIKit.h> #import <UIKit/UIKit.h>
@protocol HideOverlappedDynamicLabelDelegate <NSObject>
- (void)hideOverlappedDynamicLabels;
@end
@interface MenuSectionView : UIView @interface MenuSectionView : UIView
// 外部可访问属性 // 外部可访问属性
@@ -22,6 +27,7 @@
@property (nonatomic, assign) CGFloat headerViewHeight; @property (nonatomic, assign) CGFloat headerViewHeight;
@property (nonatomic, assign) CGFloat headerViewVerticalSpacing; @property (nonatomic, assign) CGFloat headerViewVerticalSpacing;
@property (nonatomic, strong) NSMutableArray<UIStackView *> *subStackViews; @property (nonatomic, strong) NSMutableArray<UIStackView *> *subStackViews;
@property (nonatomic, weak) id<HideOverlappedDynamicLabelDelegate> delegate; // Delegate property
// 方法 // 方法
- (void)setSectionWithIcon:(UIImage *)icon andSize:(CGFloat)size; - (void)setSectionWithIcon:(UIImage *)icon andSize:(CGFloat)size;
+5 -1
View File
@@ -10,6 +10,7 @@
#import "MenuSectionView.h" #import "MenuSectionView.h"
#import "ThemeManager.h" #import "ThemeManager.h"
@interface MenuSectionView () @interface MenuSectionView ()
@property (nonatomic, strong) UIStackView *rootStackView; @property (nonatomic, strong) UIStackView *rootStackView;
@@ -21,7 +22,6 @@
@property (nonatomic, strong) UIView *headerView; @property (nonatomic, strong) UIView *headerView;
@property (nonatomic, strong) UIView *separatorLine; @property (nonatomic, strong) UIView *separatorLine;
@end @end
@implementation MenuSectionView @implementation MenuSectionView
@@ -345,6 +345,10 @@
[self layoutIfNeeded]; [self layoutIfNeeded];
}]; }];
} }
if ([self.delegate respondsToSelector:@selector(hideOverlappedDynamicLabels)]) {
[self.delegate hideOverlappedDynamicLabels];
}
} }
@end @end
@@ -70,6 +70,9 @@
bool _background; bool _background;
UIView* menuSeparator; UIView* menuSeparator;
UIView* snapshot; UIView* snapshot;
SettingsViewController* settingsViewController;
UINavigationBarAppearance *navBarAppearanceStandard; UINavigationBarAppearance *navBarAppearanceStandard;
UINavigationBarAppearance *navBarAppearanceScroll; UINavigationBarAppearance *navBarAppearanceScroll;
@@ -1102,7 +1105,7 @@ static NSMutableSet* hostList;
} }
- (void)revealController:(SWRevealViewController *)revealController willMoveToPosition:(FrontViewPosition)position { - (void)revealController:(SWRevealViewController *)revealController willMoveToPosition:(FrontViewPosition)position {
SettingsViewController* settingsViewController = (SettingsViewController*)[revealController rearViewController]; settingsViewController = (SettingsViewController*)[revealController rearViewController];
revealController.navBarMenuDelegate = settingsViewController; revealController.navBarMenuDelegate = settingsViewController;
if (position == FrontViewPositionLeft) { if (position == FrontViewPositionLeft) {
self.navigationItem.leftBarButtonItems = @[_settingsButton]; self.navigationItem.leftBarButtonItems = @[_settingsButton];
@@ -1122,7 +1125,7 @@ static NSMutableSet* hostList;
settingsViewController.fpsStack.hidden = self.settingsExpandedInStreamView; settingsViewController.fpsStack.hidden = self.settingsExpandedInStreamView;
[settingsViewController widget:settingsViewController.bitrateSlider setEnabled:!self.settingsExpandedInStreamView]; [settingsViewController widget:settingsViewController.bitrateSlider setEnabled:!self.settingsExpandedInStreamView];
//settingsViewController.bitrateStack.hidden = self.settingsExpandedInStreamView; //settingsViewController.bitrateStack.hidden = self.settingsExpandedInStreamView;
settingsViewController.optimizeSettingsStack.hidden = self.settingsExpandedInStreamView; settingsViewController.optimizeGamesStack.hidden = self.settingsExpandedInStreamView;
settingsViewController.audioOnPcStack.hidden = self.settingsExpandedInStreamView; settingsViewController.audioOnPcStack.hidden = self.settingsExpandedInStreamView;
settingsViewController.codecStack.hidden = self.settingsExpandedInStreamView; settingsViewController.codecStack.hidden = self.settingsExpandedInStreamView;
settingsViewController.yuv444Stack.hidden = self.settingsExpandedInStreamView; settingsViewController.yuv444Stack.hidden = self.settingsExpandedInStreamView;
@@ -2083,6 +2086,13 @@ static NSMutableSet* hostList;
Settings* settings = [dataMan retrieveSettings]; Settings* settings = [dataMan retrieveSettings];
settings.settingsMenuWidth = [NSNumber numberWithFloat:self.revealViewController.rearViewRevealWidth]; settings.settingsMenuWidth = [NSNumber numberWithFloat:self.revealViewController.rearViewRevealWidth];
[dataMan saveData]; [dataMan saveData];
double delayInSeconds = 0.02;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^{
[self->settingsViewController hideDynamicLabelsWhenOverlapped:self->settingsViewController.parentStack];
});
} }
} }
@@ -695,8 +695,10 @@ const int FrontViewPositionNone = 0xff;
DataManager* dataMan = [[DataManager alloc] init]; DataManager* dataMan = [[DataManager alloc] init];
TemporarySettings* currentSettings = [dataMan getSettings]; TemporarySettings* currentSettings = [dataMan getSettings];
_rearViewRevealWidth = currentSettings.settingsMenuWidth.floatValue; //mark: settingMenuLayout _rearViewRevealWidth = currentSettings.settingsMenuWidth.floatValue; //mark: settingMenuLayout
_rearViewRevealWidth = 390; //temp config for dev //uint32_t test = _rearViewRevealWidth;
//nil;
// _rearViewRevealWidth = 373; //temp config for dev
// _rearViewRevealOverdraw = 60.0f; // _rearViewRevealOverdraw = 60.0f;
_rearViewRevealOverdraw = 0.0f; _rearViewRevealOverdraw = 0.0f;
_rearViewRevealDisplacement = 40.0f; _rearViewRevealDisplacement = 40.0f;
@@ -14,15 +14,18 @@
#import "CustomOSCViewControl/LayoutOnScreenControlsViewController.h" #import "CustomOSCViewControl/LayoutOnScreenControlsViewController.h"
#import "MainFrameViewController.h" #import "MainFrameViewController.h"
#import "CustomEdgeSlideGestureRecognizer.h" #import "CustomEdgeSlideGestureRecognizer.h"
#import "MenuSectionView.h"
@interface SettingsViewController : UIViewController <RearNavigationBarMenuDelegate> @interface SettingsViewController : UIViewController <RearNavigationBarMenuDelegate, HideOverlappedDynamicLabelDelegate>
@property (strong, nonatomic) IBOutlet UINavigationBar *navigationBar; @property (strong, nonatomic) IBOutlet UINavigationBar *navigationBar;
@property (strong, nonatomic) UIStackView *parentStack;
@property (strong, nonatomic) IBOutlet UIStackView *resolutionStack; @property (strong, nonatomic) IBOutlet UIStackView *resolutionStack;
@property (strong, nonatomic) IBOutlet UIStackView *fpsStack; @property (strong, nonatomic) IBOutlet UIStackView *fpsStack;
@property (strong, nonatomic) IBOutlet UIStackView *bitrateStack; @property (strong, nonatomic) IBOutlet UIStackView *bitrateStack;
@property (strong, nonatomic) IBOutlet UIStackView *touchModeStack; @property (strong, nonatomic) IBOutlet UIStackView *touchModeStack;
@property (weak, nonatomic) IBOutlet UIStackView *enableOswSwitchStack; @property (weak, nonatomic) IBOutlet UIStackView *enableOswSwitchStack;
//@property (strong, nonatomic) IBOutlet UIStackView *asyncTouchStack; //@property (strong, nonatomic) IBOutlet UIStackView *asyncTouchStack;
@property (weak, nonatomic) IBOutlet UISwitch *optimizeGamesSwitch;
@property (strong, nonatomic) IBOutlet UIStackView *pointerVelocityDividerStack; @property (strong, nonatomic) IBOutlet UIStackView *pointerVelocityDividerStack;
@property (strong, nonatomic) IBOutlet UIStackView *pointerVelocityFactorStack; @property (strong, nonatomic) IBOutlet UIStackView *pointerVelocityFactorStack;
@property (strong, nonatomic) IBOutlet UIStackView *touchMoveEventIntervalStack; @property (strong, nonatomic) IBOutlet UIStackView *touchMoveEventIntervalStack;
@@ -35,7 +38,7 @@
@property (strong, nonatomic) IBOutlet UIStackView *slideToSettingsScreenEdgeStack; @property (strong, nonatomic) IBOutlet UIStackView *slideToSettingsScreenEdgeStack;
@property (strong, nonatomic) IBOutlet UIStackView *slideToToolboxScreenEdgeStack; @property (strong, nonatomic) IBOutlet UIStackView *slideToToolboxScreenEdgeStack;
@property (strong, nonatomic) IBOutlet UIStackView *slideToSettingsDistanceStack; @property (strong, nonatomic) IBOutlet UIStackView *slideToSettingsDistanceStack;
@property (strong, nonatomic) IBOutlet UIStackView *optimizeSettingsStack; @property (strong, nonatomic) IBOutlet UIStackView *optimizeGamesStack;
@property (strong, nonatomic) IBOutlet UIStackView *multiControllerStack; @property (strong, nonatomic) IBOutlet UIStackView *multiControllerStack;
@property (strong, nonatomic) IBOutlet UIStackView *swapAbaxyStack; @property (strong, nonatomic) IBOutlet UIStackView *swapAbaxyStack;
@property (strong, nonatomic) IBOutlet UIStackView *audioOnPcStack; @property (strong, nonatomic) IBOutlet UIStackView *audioOnPcStack;
@@ -62,7 +65,6 @@
@property (strong, nonatomic) IBOutlet UILabel *onscreenControllerLabel; @property (strong, nonatomic) IBOutlet UILabel *onscreenControllerLabel;
@property (strong, nonatomic) IBOutlet UISegmentedControl *onScreenWidgetSelector; @property (strong, nonatomic) IBOutlet UISegmentedControl *onScreenWidgetSelector;
//@property (strong, nonatomic) IBOutlet UISegmentedControl *asyncNativeTouchPrioritySelector; //@property (strong, nonatomic) IBOutlet UISegmentedControl *asyncNativeTouchPrioritySelector;
@property (strong, nonatomic) IBOutlet UISegmentedControl *optimizeSettingsSelector;
@property (strong, nonatomic) IBOutlet UISegmentedControl *multiControllerSelector; @property (strong, nonatomic) IBOutlet UISegmentedControl *multiControllerSelector;
@property (strong, nonatomic) IBOutlet UISegmentedControl *swapABXYButtonsSelector; @property (strong, nonatomic) IBOutlet UISegmentedControl *swapABXYButtonsSelector;
@property (strong, nonatomic) IBOutlet UISegmentedControl *audioOnPCSelector; @property (strong, nonatomic) IBOutlet UISegmentedControl *audioOnPCSelector;
@@ -109,6 +111,7 @@
- (void)updateResolutionTable; - (void)updateResolutionTable;
- (void)widget:(UISlider*)widget setEnabled:(bool)enabled; - (void)widget:(UISlider*)widget setEnabled:(bool)enabled;
- (void)updateTheme; - (void)updateTheme;
- (void)hideDynamicLabelsWhenOverlapped:(UIView* )view;
@end @end
@@ -12,7 +12,6 @@
#import "SettingsViewController.h" #import "SettingsViewController.h"
#import "TemporarySettings.h" #import "TemporarySettings.h"
#import "DataManager.h" #import "DataManager.h"
#import "MenuSectionView.h"
#import "ThemeManager.h" #import "ThemeManager.h"
#import <UIKit/UIGestureRecognizerSubclass.h> #import <UIKit/UIGestureRecognizerSubclass.h>
@@ -27,7 +26,6 @@
bool justEnteredSettingsViewDoNotOpenOscLayoutTool; bool justEnteredSettingsViewDoNotOpenOscLayoutTool;
uint16_t oswLayoutFingers; uint16_t oswLayoutFingers;
CustomEdgeSlideGestureRecognizer *slideToCloseSettingsViewRecognizer; CustomEdgeSlideGestureRecognizer *slideToCloseSettingsViewRecognizer;
UIStackView *parentStack;
NSMutableDictionary *_settingStackDict; NSMutableDictionary *_settingStackDict;
NSMutableArray *_favoriteSettingStackIdentifiers; NSMutableArray *_favoriteSettingStackIdentifiers;
bool settingStackWillBeRelocatedToLowestPosition; bool settingStackWillBeRelocatedToLowestPosition;
@@ -192,21 +190,7 @@ CGSize resolutionTable[RESOLUTION_TABLE_SIZE];
// Add a bit of padding so the view doesn't end right at the button of the display // Add a bit of padding so the view doesn't end right at the button of the display
self.scrollView.contentSize = CGSizeMake(self.scrollView.contentSize.width, self.scrollView.contentSize = CGSizeMake(self.scrollView.contentSize.width,
[self isIPhone] ? highestViewY + 20 : parentStack.frame.size.height + [self getStandardNavBarHeight] + 20); [self isIPhone] ? highestViewY + 20 : _parentStack.frame.size.height + [self getStandardNavBarHeight] + 20);
/*
self.scrollView.translatesAutoresizingMaskIntoConstraints = NO;
[NSLayoutConstraint activateConstraints:@[
// [self.scrollView.topAnchor constraintEqualToAnchor:],
[self.scrollView.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor],
[self.scrollView.trailingAnchor constraintEqualToAnchor:self.view.trailingAnchor],
[self.scrollView.topAnchor constraintEqualToAnchor:self.view.topAnchor],
[self.scrollView.bottomAnchor constraintEqualToAnchor:self.view.bottomAnchor],
]];
NSLog(@"settingsViewWidth: %f", self.view.bounds.size.width);
*/
double delayInSeconds = 3; double delayInSeconds = 3;
// Convert the delay into a dispatch_time_t value // Convert the delay into a dispatch_time_t value
@@ -387,16 +371,16 @@ BOOL isCustomResolution(CGSize res) {
]]; ]];
*/ */
parentStack = [[UIStackView alloc] init]; _parentStack = [[UIStackView alloc] init];
parentStack.axis = UILayoutConstraintAxisVertical; _parentStack.axis = UILayoutConstraintAxisVertical;
parentStack.spacing = 0; _parentStack.spacing = 0;
parentStack.translatesAutoresizingMaskIntoConstraints = NO; _parentStack.translatesAutoresizingMaskIntoConstraints = NO;
[self.scrollView addSubview:parentStack]; [self.scrollView addSubview:_parentStack];
[NSLayoutConstraint activateConstraints:@[ [NSLayoutConstraint activateConstraints:@[
[parentStack.topAnchor constraintEqualToAnchor:self.scrollView.contentLayoutGuide.topAnchor constant: [self getStandardNavBarHeight]], [_parentStack.topAnchor constraintEqualToAnchor:self.scrollView.contentLayoutGuide.topAnchor constant: [self getStandardNavBarHeight]],
[parentStack.bottomAnchor constraintEqualToAnchor:self.scrollView.contentLayoutGuide.bottomAnchor constant:-20], [_parentStack.bottomAnchor constraintEqualToAnchor:self.scrollView.contentLayoutGuide.bottomAnchor constant:-20],
[parentStack.centerXAnchor constraintEqualToAnchor:self.view.centerXAnchor constant: 0], //mark: settingMenuLayout [_parentStack.centerXAnchor constraintEqualToAnchor:self.view.centerXAnchor constant: 0], //mark: settingMenuLayout
[parentStack.widthAnchor constraintEqualToAnchor:self.view.widthAnchor constant:-20] // section width adjusted here //mark: settingMenuLayout [_parentStack.widthAnchor constraintEqualToAnchor:self.view.widthAnchor constant:-20] // section width adjusted here //mark: settingMenuLayout
]]; ]];
} }
@@ -416,6 +400,74 @@ BOOL isCustomResolution(CGSize res) {
return label; return label;
} }
- (void)hideOverlappedDynamicLabelWithinStack:(UIStackView* )stack{
UILabel* label1 = [self findDynamicLabelFromStack:stack];
for(UIView* view in stack.subviews){
if([view isKindOfClass:[UILabel class]] && view != label1){
UILabel* label2 = (UILabel* )view;
CGRect textRect1 = [label1 textRectForBounds:label1.bounds limitedToNumberOfLines:label1.numberOfLines];
CGRect textRect2 = [label2 textRectForBounds:label2.bounds limitedToNumberOfLines:label2.numberOfLines];
CGRect textRect1InLabel2 = [label2 convertRect:textRect1 fromView:label1];
if(CGRectIntersectsRect(textRect1InLabel2, textRect2)){
label1.hidden = YES;return;
}
}
}
label1.hidden = NO;
}
- (void)updateThemeForLabelsttt:(UIView *)view {
for (UIView *subview in view.subviews) {
if ([subview isKindOfClass:[UILabel class]]) {
UILabel *label = (UILabel *)subview;
if(label.accessibilityIdentifier != nil) break;
if (@available(iOS 13.0, *)) {
label.layer.filters = nil;
label.textColor = [ThemeManager textColor];
} else {
// Fallback on earlier versions
}
}
[self updateThemeForLabels:subview];
}
}
- (UIView *)findCommonSuperViewFor:(UIView *)view1 andView:(UIView *)view2 {
if (!view1 || !view2) return nil;
// 把 view1 的所有 superview 放入集合
NSMutableSet<UIView *> *superviewsOfView1 = [NSMutableSet set];
UIView *currentView = view1;
while (currentView) {
[superviewsOfView1 addObject:currentView];
currentView = currentView.superview;
}
// 向上遍历 view2,找到第一个也在 view1 superview 集合里的视图
currentView = view2;
while (currentView) {
if ([superviewsOfView1 containsObject:currentView]) {
return currentView;
}
currentView = currentView.superview;
}
return nil; // 没有共同父视图(一般不会发生,除非来自不同的视图层次结构)
}
- (void)hideOverlappedDynamicLabels{
[self hideDynamicLabelsWhenOverlapped:self.parentStack];
}
- (void)hideDynamicLabelsWhenOverlapped:(UIView* )view{
for (UIView *subview in view.subviews) {
if ([subview isKindOfClass:[UIStackView class]]) {
UIStackView *stack = (UIStackView *)subview;
if(stack.accessibilityIdentifier != nil) {
// NSLog(@"found stack: %@", stack.accessibilityIdentifier);
[self hideOverlappedDynamicLabelWithinStack:stack];
}
}
[self hideDynamicLabelsWhenOverlapped:subview];
}
}
- (void)addDynamicLabelForStack:(UIStackView* )stack{ - (void)addDynamicLabelForStack:(UIStackView* )stack{
UILabel* label = [self findDynamicLabelFromStack:stack]; UILabel* label = [self findDynamicLabelFromStack:stack];
@@ -461,6 +513,7 @@ BOOL isCustomResolution(CGSize res) {
MenuSectionView *videoSection = [[MenuSectionView alloc] init]; MenuSectionView *videoSection = [[MenuSectionView alloc] init];
videoSection.delegate = self;
videoSection.sectionTitle = [LocalizationHelper localizedStringForKey:@"Video"]; videoSection.sectionTitle = [LocalizationHelper localizedStringForKey:@"Video"];
if (@available(iOS 13.0, *)) { if (@available(iOS 13.0, *)) {
[videoSection setSectionWithIcon:[UIImage systemImageNamed:@"waveform"] andSize:20]; [videoSection setSectionWithIcon:[UIImage systemImageNamed:@"waveform"] andSize:20];
@@ -472,10 +525,11 @@ BOOL isCustomResolution(CGSize res) {
[self addSetting:self.codecStack ofId:@"codecStack" withInfoTag:NO withDynamicLabel:NO to:videoSection]; [self addSetting:self.codecStack ofId:@"codecStack" withInfoTag:NO withDynamicLabel:NO to:videoSection];
[self addSetting:self.HdrStack ofId:@"HdrStack" withInfoTag:NO withDynamicLabel:NO to:videoSection]; [self addSetting:self.HdrStack ofId:@"HdrStack" withInfoTag:NO withDynamicLabel:NO to:videoSection];
[self addSetting:self.yuv444Stack ofId:@"yuv444Stack" withInfoTag:YES withDynamicLabel:NO to:videoSection]; [self addSetting:self.yuv444Stack ofId:@"yuv444Stack" withInfoTag:YES withDynamicLabel:NO to:videoSection];
[videoSection addToParentStack:parentStack]; [videoSection addToParentStack:_parentStack];
[videoSection setExpanded:YES]; [videoSection setExpanded:YES];
touchControlSection = [[MenuSectionView alloc] init]; touchControlSection = [[MenuSectionView alloc] init];
touchControlSection.delegate = self;
touchControlSection.sectionTitle = [LocalizationHelper localizedStringForKey:@"Touch Control"]; touchControlSection.sectionTitle = [LocalizationHelper localizedStringForKey:@"Touch Control"];
if (@available(iOS 13.0, *)) { if (@available(iOS 13.0, *)) {
[touchControlSection setSectionWithIcon:[UIImage imageNamed:@"arcade.stick.console"] andSize:20.5]; [touchControlSection setSectionWithIcon:[UIImage imageNamed:@"arcade.stick.console"] andSize:20.5];
@@ -486,7 +540,7 @@ BOOL isCustomResolution(CGSize res) {
[self addSetting:self.mousePointerVelocityStack ofId:@"mousePointerVelocityStack" withInfoTag:NO withDynamicLabel:YES to:touchControlSection]; [self addSetting:self.mousePointerVelocityStack ofId:@"mousePointerVelocityStack" withInfoTag:NO withDynamicLabel:YES to:touchControlSection];
[self addSetting:self.onScreenWidgetStack ofId:@"onScreenWidgetStack" withInfoTag:YES withDynamicLabel:YES to:touchControlSection]; [self addSetting:self.onScreenWidgetStack ofId:@"onScreenWidgetStack" withInfoTag:YES withDynamicLabel:YES to:touchControlSection];
[self addSetting:self.swapAbaxyStack ofId:@"swapAbaxyStack" withInfoTag:NO withDynamicLabel:NO to:touchControlSection]; [self addSetting:self.swapAbaxyStack ofId:@"swapAbaxyStack" withInfoTag:NO withDynamicLabel:NO to:touchControlSection];
[touchControlSection addToParentStack:parentStack]; [touchControlSection addToParentStack:_parentStack];
[touchControlSection setExpanded:YES]; [touchControlSection setExpanded:YES];
@@ -495,6 +549,7 @@ BOOL isCustomResolution(CGSize res) {
MenuSectionView *gesturesSection = [[MenuSectionView alloc] init]; MenuSectionView *gesturesSection = [[MenuSectionView alloc] init];
gesturesSection.delegate = self;
gesturesSection.sectionTitle = [LocalizationHelper localizedStringForKey:@"Gestures"]; gesturesSection.sectionTitle = [LocalizationHelper localizedStringForKey:@"Gestures"];
if (@available(iOS 13.0, *)) { if (@available(iOS 13.0, *)) {
[gesturesSection setSectionWithIcon:[UIImage systemImageNamed:@"hand.draw"] andSize:23]; [gesturesSection setSectionWithIcon:[UIImage systemImageNamed:@"hand.draw"] andSize:23];
@@ -504,10 +559,11 @@ BOOL isCustomResolution(CGSize res) {
[self addSetting:self.slideToSettingsScreenEdgeStack ofId:@"slideToSettingsScreenEdgeStack" withInfoTag:NO withDynamicLabel:NO to:gesturesSection]; [self addSetting:self.slideToSettingsScreenEdgeStack ofId:@"slideToSettingsScreenEdgeStack" withInfoTag:NO withDynamicLabel:NO to:gesturesSection];
[self addSetting:self.slideToToolboxScreenEdgeStack ofId:@"slideToToolboxScreenEdgeStack" withInfoTag:NO withDynamicLabel:NO to:gesturesSection]; [self addSetting:self.slideToToolboxScreenEdgeStack ofId:@"slideToToolboxScreenEdgeStack" withInfoTag:NO withDynamicLabel:NO to:gesturesSection];
[self addSetting:self.slideToSettingsDistanceStack ofId:@"slideToSettingsDistanceStack" withInfoTag:YES withDynamicLabel:YES to:gesturesSection]; [self addSetting:self.slideToSettingsDistanceStack ofId:@"slideToSettingsDistanceStack" withInfoTag:YES withDynamicLabel:YES to:gesturesSection];
[gesturesSection addToParentStack:parentStack]; [gesturesSection addToParentStack:_parentStack];
[gesturesSection setExpanded:YES]; [gesturesSection setExpanded:YES];
MenuSectionView *peripheralSection = [[MenuSectionView alloc] init]; MenuSectionView *peripheralSection = [[MenuSectionView alloc] init];
peripheralSection.delegate = self;
peripheralSection.sectionTitle = [LocalizationHelper localizedStringForKey:@"Peripherals"]; peripheralSection.sectionTitle = [LocalizationHelper localizedStringForKey:@"Peripherals"];
if (@available(iOS 13.0, *)) { if (@available(iOS 13.0, *)) {
[peripheralSection setSectionWithIcon:[UIImage imageNamed:@"cable.connector.video"] andSize:20]; [peripheralSection setSectionWithIcon:[UIImage imageNamed:@"cable.connector.video"] andSize:20];
@@ -516,33 +572,35 @@ BOOL isCustomResolution(CGSize res) {
[self addSetting:self.localMousePointerModeStack ofId:@"localMousePointerModeStack" withInfoTag:YES withDynamicLabel:NO to:peripheralSection]; [self addSetting:self.localMousePointerModeStack ofId:@"localMousePointerModeStack" withInfoTag:YES withDynamicLabel:NO to:peripheralSection];
[self addSetting:self.reverseMouseWheelDirectionStack ofId:@"reverseMouseWheelDirectionStack" withInfoTag:NO withDynamicLabel:NO to:peripheralSection]; [self addSetting:self.reverseMouseWheelDirectionStack ofId:@"reverseMouseWheelDirectionStack" withInfoTag:NO withDynamicLabel:NO to:peripheralSection];
[self addSetting:self.citrixX1MouseStack ofId:@"citrixX1MouseStack" withInfoTag:NO withDynamicLabel:NO to:peripheralSection]; [self addSetting:self.citrixX1MouseStack ofId:@"citrixX1MouseStack" withInfoTag:NO withDynamicLabel:NO to:peripheralSection];
[peripheralSection addToParentStack:parentStack]; [peripheralSection addToParentStack:_parentStack];
[peripheralSection setExpanded:YES]; [peripheralSection setExpanded:YES];
MenuSectionView *otherSection = [[MenuSectionView alloc] init]; MenuSectionView *otherSection = [[MenuSectionView alloc] init];
otherSection.delegate = self;
otherSection.sectionTitle = [LocalizationHelper localizedStringForKey:@"Others"]; otherSection.sectionTitle = [LocalizationHelper localizedStringForKey:@"Others"];
if (@available(iOS 13.0, *)) { if (@available(iOS 13.0, *)) {
[otherSection setSectionWithIcon:[UIImage systemImageNamed:@"cube"] andSize:20.5]; [otherSection setSectionWithIcon:[UIImage systemImageNamed:@"cube"] andSize:20.5];
} }
[self addSetting:self.statsOverlayStack ofId:@"statsOverlayStack" withInfoTag:NO withDynamicLabel:NO to:otherSection]; [self addSetting:self.statsOverlayStack ofId:@"statsOverlayStack" withInfoTag:NO withDynamicLabel:NO to:otherSection];
[self addSetting:self.optimizeSettingsStack ofId:@"optimizeSettingsStack" withInfoTag:YES withDynamicLabel:NO to:otherSection]; [self addSetting:self.optimizeGamesStack ofId:@"optimizeGamesStack" withInfoTag:YES withDynamicLabel:NO to:otherSection];
[self addSetting:self.audioOnPcStack ofId:@"audioOnPcStack" withInfoTag:NO withDynamicLabel:NO to:otherSection]; [self addSetting:self.audioOnPcStack ofId:@"audioOnPcStack" withInfoTag:NO withDynamicLabel:NO to:otherSection];
[self addSetting:self.multiControllerStack ofId:@"multiControllerStack" withInfoTag:YES withDynamicLabel:NO to:otherSection]; [self addSetting:self.multiControllerStack ofId:@"multiControllerStack" withInfoTag:YES withDynamicLabel:NO to:otherSection];
[self addSetting:self.showKeyboardToolbarStack ofId:@"showKeyboardToolbarStack" withInfoTag:YES withDynamicLabel:NO to:otherSection]; [self addSetting:self.showKeyboardToolbarStack ofId:@"showKeyboardToolbarStack" withInfoTag:YES withDynamicLabel:NO to:otherSection];
[self addSetting:self.unlockDisplayOrientationStack ofId:@"unlockDisplayOrientationStack" withInfoTag:YES withDynamicLabel:NO to:otherSection]; [self addSetting:self.unlockDisplayOrientationStack ofId:@"unlockDisplayOrientationStack" withInfoTag:YES withDynamicLabel:NO to:otherSection];
[otherSection addToParentStack:parentStack]; [otherSection addToParentStack:_parentStack];
[otherSection setExpanded:YES]; [otherSection setExpanded:YES];
MenuSectionView *experimentalSection = [[MenuSectionView alloc] init]; MenuSectionView *experimentalSection = [[MenuSectionView alloc] init];
experimentalSection.delegate = self;
experimentalSection.sectionTitle = [LocalizationHelper localizedStringForKey:@"Experimental"]; experimentalSection.sectionTitle = [LocalizationHelper localizedStringForKey:@"Experimental"];
if (@available(iOS 13.0, *)) { if (@available(iOS 13.0, *)) {
[experimentalSection setSectionWithIcon:[UIImage imageNamed:@"flask"] andSize:20]; [experimentalSection setSectionWithIcon:[UIImage imageNamed:@"flask"] andSize:20];
} }
// [self addSetting:self.asyncTouchStack ofId:@"asyncTouchStack" withInfoTag:YES withDynamicLabel:NO to:experimentalSection]; // [self addSetting:self.asyncTouchStack ofId:@"asyncTouchStack" withInfoTag:YES withDynamicLabel:NO to:experimentalSection];
[self addSetting:self.touchMoveEventIntervalStack ofId:@"touchMoveEventIntervalStack" withInfoTag:YES withDynamicLabel:NO to:experimentalSection]; [self addSetting:self.touchMoveEventIntervalStack ofId:@"touchMoveEventIntervalStack" withInfoTag:YES withDynamicLabel:NO to:experimentalSection];
[experimentalSection addToParentStack:parentStack]; [experimentalSection addToParentStack:_parentStack];
[experimentalSection setExpanded:YES]; [experimentalSection setExpanded:YES];
} }
@@ -589,7 +647,7 @@ BOOL isCustomResolution(CGSize res) {
[parentStackTmp addArrangedSubview:self.slideToSettingsScreenEdgeStack]; [parentStackTmp addArrangedSubview:self.slideToSettingsScreenEdgeStack];
[parentStackTmp addArrangedSubview:self.slideToToolboxScreenEdgeStack]; [parentStackTmp addArrangedSubview:self.slideToToolboxScreenEdgeStack];
[parentStackTmp addArrangedSubview:self.slideToSettingsDistanceStack]; [parentStackTmp addArrangedSubview:self.slideToSettingsDistanceStack];
[parentStackTmp addArrangedSubview:self.optimizeSettingsStack]; [parentStackTmp addArrangedSubview:self.optimizeGamesStack];
[parentStackTmp addArrangedSubview:self.multiControllerStack]; [parentStackTmp addArrangedSubview:self.multiControllerStack];
[parentStackTmp addArrangedSubview:self.swapAbaxyStack]; [parentStackTmp addArrangedSubview:self.swapAbaxyStack];
[parentStackTmp addArrangedSubview:self.audioOnPcStack]; [parentStackTmp addArrangedSubview:self.audioOnPcStack];
@@ -708,8 +766,8 @@ BOOL isCustomResolution(CGSize res) {
- (NSInteger)parentStackIndexForLocation:(CGPoint)location { - (NSInteger)parentStackIndexForLocation:(CGPoint)location {
for (NSInteger i = parentStack.arrangedSubviews.count-1; i >=0; i--) { for (NSInteger i = _parentStack.arrangedSubviews.count-1; i >=0; i--) {
UIView *subview = parentStack.arrangedSubviews[i]; UIView *subview = _parentStack.arrangedSubviews[i];
// CGRect frame = [subview convertRect:subview.bounds toView:parentStack]; // CGRect frame = [subview convertRect:subview.bounds toView:parentStack];
CGFloat stackMinY = CGRectGetMinY(subview.frame); CGFloat stackMinY = CGRectGetMinY(subview.frame);
// NSLog(@" index: %ld, stackY: %f, touchY: %f", (long)i, CGRectGetMidY(subview.frame), location.y); // NSLog(@" index: %ld, stackY: %f, touchY: %f", (long)i, CGRectGetMidY(subview.frame), location.y);
@@ -721,12 +779,12 @@ BOOL isCustomResolution(CGSize res) {
- (void)updateRelocationIndicatorFor:(CGPoint)locationInParentStack{ - (void)updateRelocationIndicatorFor:(CGPoint)locationInParentStack{
uint16_t currentIndex = [self parentStackIndexForLocation:locationInParentStack]; uint16_t currentIndex = [self parentStackIndexForLocation:locationInParentStack];
UIStackView* currentStack; UIStackView* currentStack;
for (NSInteger i = parentStack.arrangedSubviews.count-1; i >=0; i--) { for (NSInteger i = _parentStack.arrangedSubviews.count-1; i >=0; i--) {
currentStack = parentStack.arrangedSubviews[i]; currentStack = _parentStack.arrangedSubviews[i];
if(currentIndex == i){ if(currentIndex == i){
settingStackWillBeRelocatedToLowestPosition = false; settingStackWillBeRelocatedToLowestPosition = false;
if(i == parentStack.arrangedSubviews.count-1 && locationInParentStack.y > CGRectGetMaxY(currentStack.frame)){ if(i == _parentStack.arrangedSubviews.count-1 && locationInParentStack.y > CGRectGetMaxY(currentStack.frame)){
snapshot.layer.cornerRadius = 6; snapshot.layer.cornerRadius = 6;
snapshot.layer.masksToBounds = YES; snapshot.layer.masksToBounds = YES;
snapshot.clipsToBounds = YES; snapshot.clipsToBounds = YES;
@@ -750,14 +808,14 @@ BOOL isCustomResolution(CGSize res) {
} }
- (void)clearRelocationIndicator{ - (void)clearRelocationIndicator{
for (UIView* view in parentStack.arrangedSubviews) { for (UIView* view in _parentStack.arrangedSubviews) {
view.layer.cornerRadius = 0; view.layer.cornerRadius = 0;
view.backgroundColor = [UIColor clearColor]; view.backgroundColor = [UIColor clearColor];
} }
} }
- (void)findCapturedStackByTouchLocation:(CGPoint)point{ - (void)findCapturedStackByTouchLocation:(CGPoint)point{
UIView *touchedView = [parentStack hitTest:point withEvent:nil]; UIView *touchedView = [_parentStack hitTest:point withEvent:nil];
while(touchedView){ while(touchedView){
if([touchedView isKindOfClass:[UIStackView class]] && touchedView.accessibilityIdentifier != nil){ if([touchedView isKindOfClass:[UIStackView class]] && touchedView.accessibilityIdentifier != nil){
capturedStack = (UIStackView *)touchedView; capturedStack = (UIStackView *)touchedView;
@@ -782,7 +840,7 @@ BOOL isCustomResolution(CGSize res) {
} }
- (void)handleLongPress:(UILongPressGestureRecognizer *)gesture { - (void)handleLongPress:(UILongPressGestureRecognizer *)gesture {
CGPoint locationInParentStack = [gesture locationInView:parentStack]; CGPoint locationInParentStack = [gesture locationInView:_parentStack];
CGPoint locationInRootView = [gesture locationInView:self.view.superview]; CGPoint locationInRootView = [gesture locationInView:self.view.superview];
if(currentSettingsMenuMode == AllSettings){ if(currentSettingsMenuMode == AllSettings){
if (gesture.state == UIGestureRecognizerStateBegan) { if (gesture.state == UIGestureRecognizerStateBegan) {
@@ -813,10 +871,10 @@ BOOL isCustomResolution(CGSize res) {
snapshot = [capturedStack snapshotViewAfterScreenUpdates:YES]; snapshot = [capturedStack snapshotViewAfterScreenUpdates:YES];
snapshot.center = capturedStack.center; snapshot.center = capturedStack.center;
[parentStack addSubview:snapshot]; [_parentStack addSubview:snapshot];
capturedStack.hidden = YES; capturedStack.hidden = YES;
originalCenter = capturedStack.center; originalCenter = capturedStack.center;
originalIndex = [parentStack.arrangedSubviews indexOfObject:capturedStack]; originalIndex = [_parentStack.arrangedSubviews indexOfObject:capturedStack];
break; break;
case UIGestureRecognizerStateChanged: case UIGestureRecognizerStateChanged:
@@ -836,7 +894,7 @@ BOOL isCustomResolution(CGSize res) {
// 计算新的插入位置 // 计算新的插入位置
NSInteger newIndex = [self parentStackIndexForLocation:locationInParentStack]; NSInteger newIndex = [self parentStackIndexForLocation:locationInParentStack];
[self clearRelocationIndicator]; [self clearRelocationIndicator];
NSInteger oldIndex = [parentStack.arrangedSubviews indexOfObject:capturedStack]; NSInteger oldIndex = [_parentStack.arrangedSubviews indexOfObject:capturedStack];
newIndex = newIndex > oldIndex ? newIndex - 1 : newIndex; newIndex = newIndex > oldIndex ? newIndex - 1 : newIndex;
//NSLog(@"newidx %ld, oldidx %ld", newIndex, oldIndex); //NSLog(@"newidx %ld, oldidx %ld", newIndex, oldIndex);
if(settingStackWillBeRelocatedToLowestPosition){ if(settingStackWillBeRelocatedToLowestPosition){
@@ -845,9 +903,9 @@ BOOL isCustomResolution(CGSize res) {
} }
if (newIndex != NSNotFound) { if (newIndex != NSNotFound) {
if(newIndex >= parentStack.arrangedSubviews.count) newIndex = parentStack.arrangedSubviews.count-1; if(newIndex >= _parentStack.arrangedSubviews.count) newIndex = _parentStack.arrangedSubviews.count-1;
[parentStack removeArrangedSubview:capturedStack]; [_parentStack removeArrangedSubview:capturedStack];
[parentStack insertArrangedSubview:capturedStack atIndex:newIndex]; [_parentStack insertArrangedSubview:capturedStack atIndex:newIndex];
// [parentStack addSubview:capturedStack]; // [parentStack addSubview:capturedStack];
originalIndex = newIndex; originalIndex = newIndex;
capturedStack.hidden = NO; capturedStack.hidden = NO;
@@ -949,8 +1007,9 @@ BOOL isCustomResolution(CGSize res) {
- (void)layoutSettingsView{ - (void)layoutSettingsView{
[self.view layoutSubviews]; [self.view layoutSubviews];
if(currentSettingsMenuMode == AllSettings){ if(currentSettingsMenuMode == AllSettings){
for(MenuSectionView* section in parentStack.arrangedSubviews) [section updateViewForFoldState]; for(MenuSectionView* section in _parentStack.arrangedSubviews) [section updateViewForFoldState];
} }
[self hideDynamicLabelsWhenOverlapped:self.parentStack];
} }
- (void)switchToFavoriteSettings{ - (void)switchToFavoriteSettings{
@@ -961,18 +1020,19 @@ BOOL isCustomResolution(CGSize res) {
currentSettings.settingsMenuMode = [NSNumber numberWithInteger:currentSettingsMenuMode]; currentSettings.settingsMenuMode = [NSNumber numberWithInteger:currentSettingsMenuMode];
[dataMan saveData]; [dataMan saveData];
for(UIView* view in parentStack.subviews){ for(UIView* view in _parentStack.subviews){
[view removeFromSuperview]; [view removeFromSuperview];
} }
parentStack.spacing = 15; _parentStack.spacing = 15;
[self loadFavoriteSettingStackIdentifiers]; [self loadFavoriteSettingStackIdentifiers];
for(NSString* settingIdentifier in _favoriteSettingStackIdentifiers){ for(NSString* settingIdentifier in _favoriteSettingStackIdentifiers){
[parentStack addArrangedSubview:_settingStackDict[settingIdentifier]]; [_parentStack addArrangedSubview:_settingStackDict[settingIdentifier]];
} }
[self hideDynamicLabelsWhenOverlapped:self.parentStack];
} }
- (void)switchToAllSettings{ - (void)switchToAllSettings{
for(UIView* view in parentStack.subviews){ for(UIView* view in _parentStack.subviews){
[view removeFromSuperview]; [view removeFromSuperview];
} }
[self initParentStack]; [self initParentStack];
@@ -989,7 +1049,7 @@ BOOL isCustomResolution(CGSize res) {
- (void)enterRemoveSettingItemMode{ - (void)enterRemoveSettingItemMode{
currentSettingsMenuMode = RemoveSettingItem; currentSettingsMenuMode = RemoveSettingItem;
for(UIStackView* stack in parentStack.arrangedSubviews){ for(UIStackView* stack in _parentStack.arrangedSubviews){
for(UIView* view in stack.subviews){ for(UIView* view in stack.subviews){
if([view.accessibilityIdentifier isEqualToString:@"infoButton"]) view.hidden = YES; if([view.accessibilityIdentifier isEqualToString:@"infoButton"]) view.hidden = YES;
// view.userInteractionEnabled = false; // view.userInteractionEnabled = false;
@@ -1001,7 +1061,7 @@ BOOL isCustomResolution(CGSize res) {
- (void)doneRemoveSettingItem{ - (void)doneRemoveSettingItem{
currentSettingsMenuMode = FavoriteSettings; currentSettingsMenuMode = FavoriteSettings;
for(UIStackView* stack in parentStack.arrangedSubviews){ for(UIStackView* stack in _parentStack.arrangedSubviews){
//stack.userInteractionEnabled = true; //stack.userInteractionEnabled = true;
for(UIView* view in stack.subviews){ for(UIView* view in stack.subviews){
//view. //view.
@@ -1016,8 +1076,8 @@ BOOL isCustomResolution(CGSize res) {
if(currentSettingsMenuMode != AllSettings){ if(currentSettingsMenuMode != AllSettings){
[_favoriteSettingStackIdentifiers removeAllObjects]; [_favoriteSettingStackIdentifiers removeAllObjects];
//for(NSInteger i = 0; i < parentStack.arrangedSubviews.count; i++){ //for(NSInteger i = 0; i < parentStack.arrangedSubviews.count; i++){
for(NSInteger i = 0; i < parentStack.arrangedSubviews.count; i++){ for(NSInteger i = 0; i < _parentStack.arrangedSubviews.count; i++){
[_favoriteSettingStackIdentifiers addObject:parentStack.arrangedSubviews[i].accessibilityIdentifier]; [_favoriteSettingStackIdentifiers addObject:_parentStack.arrangedSubviews[i].accessibilityIdentifier];
} }
} }
@@ -1205,7 +1265,7 @@ BOOL isCustomResolution(CGSize res) {
[self.yuv444Switch setOn:currentSettings.enableYUV444]; [self.yuv444Switch setOn:currentSettings.enableYUV444];
[self.statsOverlaySelector setSelectedSegmentIndex:currentSettings.statsOverlayLevel.intValue]; [self.statsOverlaySelector setSelectedSegmentIndex:currentSettings.statsOverlayLevel.intValue];
[self.citrixX1MouseSwitch setOn:currentSettings.btMouseSupport]; [self.citrixX1MouseSwitch setOn:currentSettings.btMouseSupport];
[self.optimizeSettingsSelector setSelectedSegmentIndex:currentSettings.optimizeGames ? 1 : 0]; [self.optimizeGamesSwitch setOn: currentSettings.optimizeGames];
[self.framePacingSelector setSelectedSegmentIndex:currentSettings.useFramePacing ? 1 : 0]; [self.framePacingSelector setSelectedSegmentIndex:currentSettings.useFramePacing ? 1 : 0];
[self.multiControllerSelector setSelectedSegmentIndex:currentSettings.multiController ? 1 : 0]; [self.multiControllerSelector setSelectedSegmentIndex:currentSettings.multiController ? 1 : 0];
[self.swapABXYButtonsSelector setSelectedSegmentIndex:currentSettings.swapABXYButtons ? 1 : 0]; [self.swapABXYButtonsSelector setSelectedSegmentIndex:currentSettings.swapABXYButtons ? 1 : 0];
@@ -1382,7 +1442,7 @@ BOOL isCustomResolution(CGSize res) {
[self invokeOscLayout]; // Don't open osc layout tool immediately during streaming [self invokeOscLayout]; // Don't open osc layout tool immediately during streaming
} }
[self findDynamicLabelFromStack:self.onScreenWidgetStack].text = [LocalizationHelper localizedStringForKey:@"%d finger tap gesture", self->oswLayoutFingers]; [self findDynamicLabelFromStack:self.onScreenWidgetStack].text = [LocalizationHelper localizedStringForKey:@"%d finger tap", self->oswLayoutFingers];
//markmark //markmark
[self handleOswGestureChange]; [self handleOswGestureChange];
}]; }];
@@ -1430,7 +1490,8 @@ BOOL isCustomResolution(CGSize res) {
bool customOscEnabled = [self isCustomOswEnabled]; bool customOscEnabled = [self isCustomOswEnabled];
UILabel* oswDynamicLabel = [self findDynamicLabelFromStack:self.onScreenWidgetStack]; UILabel* oswDynamicLabel = [self findDynamicLabelFromStack:self.onScreenWidgetStack];
oswDynamicLabel.text = [LocalizationHelper localizedStringForKey:@"%d finger tap gesture", self->oswLayoutFingers]; NSString* labelText = [LocalizationHelper localizedStringForKey:@"%d finger tap", self->oswLayoutFingers];
oswDynamicLabel.text = [NSString stringWithFormat:@" %@ ", labelText];
oswDynamicLabel.hidden = !customOscEnabled; oswDynamicLabel.hidden = !customOscEnabled;
[self handleOswGestureChange]; [self handleOswGestureChange];
if(customOscEnabled && !justEnteredSettingsViewDoNotOpenOscLayoutTool) { if(customOscEnabled && !justEnteredSettingsViewDoNotOpenOscLayoutTool) {
@@ -1450,11 +1511,11 @@ BOOL isCustomResolution(CGSize res) {
- (void) pointerVelocityModeDividerSliderMoved:(UISlider* )sender { - (void) pointerVelocityModeDividerSliderMoved:(UISlider* )sender {
[self findDynamicLabelFromStack:self.pointerVelocityDividerStack].text = [LocalizationHelper localizedStringForKey:@"| %d%% | %d%% |", (uint8_t)sender.value, 100-(uint8_t)sender.value]; [self findDynamicLabelFromStack:self.pointerVelocityDividerStack].text = [NSString stringWithFormat:@" | %d%% | %d%% | ", (uint8_t)sender.value, 100-(uint8_t)sender.value];
} }
- (void) touchPointerVelocityFactorSliderMoved:(UISlider* )sender { - (void) touchPointerVelocityFactorSliderMoved:(UISlider* )sender {
[self findDynamicLabelFromStack:self.pointerVelocityFactorStack].text = [NSString stringWithFormat:@"%d%%", [self map_velocFactorDisplay_fromSliderValue: self.touchPointerVelocityFactorSlider.value]]; // Update label display [self findDynamicLabelFromStack:self.pointerVelocityFactorStack].text = [NSString stringWithFormat:@" %d%% ", [self map_velocFactorDisplay_fromSliderValue: self.touchPointerVelocityFactorSlider.value]]; // Update label display
} }
@@ -1476,7 +1537,7 @@ BOOL isCustomResolution(CGSize res) {
} }
- (void) mousePointerVelocityFactorSliderMoved:(UISlider* )sender { - (void) mousePointerVelocityFactorSliderMoved:(UISlider* )sender {
[self findDynamicLabelFromStack:_mousePointerVelocityStack].text = [NSString stringWithFormat:@"%d%%", [self map_velocFactorDisplay_fromSliderValue:sender.value]]; [self findDynamicLabelFromStack:_mousePointerVelocityStack].text = [NSString stringWithFormat:@" %d%% ",[self map_velocFactorDisplay_fromSliderValue:sender.value]];
} }
- (uint32_t) getScreenEdgeFromSelector { - (uint32_t) getScreenEdgeFromSelector {
@@ -1715,7 +1776,10 @@ BOOL isCustomResolution(CGSize res) {
- (void) slideToMenuDistanceSliderMoved:(UISlider* )sender{ - (void) slideToMenuDistanceSliderMoved:(UISlider* )sender{
[self findDynamicLabelFromStack:_slideToSettingsDistanceStack].text = [LocalizationHelper localizedStringForKey:@"%d%% screen width", (uint8_t)(sender.value * 100)]; UILabel* displayLabel = [self findDynamicLabelFromStack:_slideToSettingsDistanceStack];
// displayLabel.font = [UIFont systemFontOfSize:12 weight:UIFontWeightMedium];
NSString* labelText = [LocalizationHelper localizedStringForKey:@"%d%% screen width", (uint8_t)(sender.value * 100)];
displayLabel.text = [NSString stringWithFormat:@" %@ ", labelText];
} }
- (void) bitrateSliderMoved { - (void) bitrateSliderMoved {
@@ -1727,7 +1791,7 @@ BOOL isCustomResolution(CGSize res) {
- (void) updateBitrateText { - (void) updateBitrateText {
// Display bitrate in Mbps // Display bitrate in Mbps
UILabel* label = [self findDynamicLabelFromStack:self.bitrateStack]; UILabel* label = [self findDynamicLabelFromStack:self.bitrateStack];
[label setText:[LocalizationHelper localizedStringForKey:@"%.1f Mbps", _bitrate / 1000.]]; [label setText:[LocalizationHelper localizedStringForKey:@" %.1f Mbps ", _bitrate / 1000.]];
} }
- (NSInteger) getChosenFrameRate { - (NSInteger) getChosenFrameRate {
@@ -1878,7 +1942,7 @@ BOOL isCustomResolution(CGSize res) {
//BOOL liftStreamViewForKeyboard = [self.liftStreamViewForKeyboardSelector selectedSegmentIndex] == 1; //BOOL liftStreamViewForKeyboard = [self.liftStreamViewForKeyboardSelector selectedSegmentIndex] == 1;
BOOL liftStreamViewForKeyboard = YES; // enable and hide this option BOOL liftStreamViewForKeyboard = YES; // enable and hide this option
BOOL showKeyboardToolbar = [self.showKeyboardToolbarSelector selectedSegmentIndex] == 1; BOOL showKeyboardToolbar = [self.showKeyboardToolbarSelector selectedSegmentIndex] == 1;
BOOL optimizeGames = [self.optimizeSettingsSelector selectedSegmentIndex] == 1; BOOL optimizeGames = self.optimizeGamesSwitch.isOn;
BOOL multiController = [self.multiControllerSelector selectedSegmentIndex] == 1; BOOL multiController = [self.multiControllerSelector selectedSegmentIndex] == 1;
BOOL swapABXYButtons = [self.swapABXYButtonsSelector selectedSegmentIndex] == 1; BOOL swapABXYButtons = [self.swapABXYButtonsSelector selectedSegmentIndex] == 1;
BOOL audioOnPC = [self.audioOnPCSelector selectedSegmentIndex] == 1; BOOL audioOnPC = [self.audioOnPCSelector selectedSegmentIndex] == 1;
+90 -78
View File
@@ -284,13 +284,13 @@
} }
}, },
"6w5-Md-NpV.text" : { "6w5-Md-NpV.text" : {
"comment" : "Class = \"UILabel\"; text = \"Preferred Codec \"; ObjectID = \"6w5-Md-NpV\";", "comment" : "Class = \"UILabel\"; text = \"Preferred Codec\"; ObjectID = \"6w5-Md-NpV\";",
"extractionState" : "extracted_with_value", "extractionState" : "extracted_with_value",
"localizations" : { "localizations" : {
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
"state" : "new", "state" : "new",
"value" : "Preferred Codec " "value" : "Preferred Codec"
} }
}, },
"zh-Hans" : { "zh-Hans" : {
@@ -301,13 +301,13 @@
}, },
"zh-Hant" : { "zh-Hant" : {
"stringUnit" : { "stringUnit" : {
"state" : "translated", "state" : "needs_review",
"value" : "视频编解码" "value" : "视频编解码"
} }
}, },
"zh-HK" : { "zh-HK" : {
"stringUnit" : { "stringUnit" : {
"state" : "translated", "state" : "needs_review",
"value" : "视频编解码" "value" : "视频编解码"
} }
} }
@@ -554,13 +554,13 @@
} }
}, },
"Aiv-r8-9k2.text" : { "Aiv-r8-9k2.text" : {
"comment" : "Class = \"UILabel\"; text = \"Frame Rate \"; ObjectID = \"Aiv-r8-9k2\";", "comment" : "Class = \"UILabel\"; text = \"Frame Rate\"; ObjectID = \"Aiv-r8-9k2\";",
"extractionState" : "extracted_with_value", "extractionState" : "extracted_with_value",
"localizations" : { "localizations" : {
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
"state" : "new", "state" : "new",
"value" : "Frame Rate " "value" : "Frame Rate"
} }
}, },
"zh-Hans" : { "zh-Hans" : {
@@ -571,13 +571,13 @@
}, },
"zh-Hant" : { "zh-Hant" : {
"stringUnit" : { "stringUnit" : {
"state" : "translated", "state" : "needs_review",
"value" : "串流帧率" "value" : "串流帧率"
} }
}, },
"zh-HK" : { "zh-HK" : {
"stringUnit" : { "stringUnit" : {
"state" : "translated", "state" : "needs_review",
"value" : "串流帧率" "value" : "串流帧率"
} }
} }
@@ -645,7 +645,7 @@
}, },
"Awc-Oh-s9n.segmentTitles[0]" : { "Awc-Oh-s9n.segmentTitles[0]" : {
"comment" : "Class = \"UISegmentedControl\"; Awc-Oh-s9n.segmentTitles[0] = \"No\"; ObjectID = \"Awc-Oh-s9n\";", "comment" : "Class = \"UISegmentedControl\"; Awc-Oh-s9n.segmentTitles[0] = \"No\"; ObjectID = \"Awc-Oh-s9n\";",
"extractionState" : "extracted_with_value", "extractionState" : "stale",
"localizations" : { "localizations" : {
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
@@ -675,7 +675,7 @@
}, },
"Awc-Oh-s9n.segmentTitles[1]" : { "Awc-Oh-s9n.segmentTitles[1]" : {
"comment" : "Class = \"UISegmentedControl\"; Awc-Oh-s9n.segmentTitles[1] = \"Yes\"; ObjectID = \"Awc-Oh-s9n\";", "comment" : "Class = \"UISegmentedControl\"; Awc-Oh-s9n.segmentTitles[1] = \"Yes\"; ObjectID = \"Awc-Oh-s9n\";",
"extractionState" : "extracted_with_value", "extractionState" : "stale",
"localizations" : { "localizations" : {
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
@@ -764,13 +764,13 @@
} }
}, },
"bFD-Ng-abn.text" : { "bFD-Ng-abn.text" : {
"comment" : "Class = \"UILabel\"; text = \"Multi-Controller Mode \"; ObjectID = \"bFD-Ng-abn\";", "comment" : "Class = \"UILabel\"; text = \"Multi-Controller Mode\"; ObjectID = \"bFD-Ng-abn\";",
"extractionState" : "extracted_with_value", "extractionState" : "extracted_with_value",
"localizations" : { "localizations" : {
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
"state" : "new", "state" : "new",
"value" : "Multi-Controller Mode " "value" : "Multi-Controller Mode"
} }
}, },
"zh-Hans" : { "zh-Hans" : {
@@ -781,13 +781,13 @@
}, },
"zh-Hant" : { "zh-Hant" : {
"stringUnit" : { "stringUnit" : {
"state" : "translated", "state" : "needs_review",
"value" : "多手柄模式" "value" : "多手柄模式"
} }
}, },
"zh-HK" : { "zh-HK" : {
"stringUnit" : { "stringUnit" : {
"state" : "translated", "state" : "needs_review",
"value" : "多手柄模式" "value" : "多手柄模式"
} }
} }
@@ -1261,6 +1261,18 @@
} }
} }
}, },
"d1N-HH-Aq9.text" : {
"comment" : "Class = \"UILabel\"; text = \"Optimize Game Settings\"; ObjectID = \"d1N-HH-Aq9\";",
"extractionState" : "extracted_with_value",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "Optimize Game Settings"
}
}
}
},
"D2u-4j-7kg.segmentTitles[0]" : { "D2u-4j-7kg.segmentTitles[0]" : {
"comment" : "Class = \"UISegmentedControl\"; D2u-4j-7kg.segmentTitles[0] = \"No\"; ObjectID = \"D2u-4j-7kg\";", "comment" : "Class = \"UISegmentedControl\"; D2u-4j-7kg.segmentTitles[0] = \"No\"; ObjectID = \"D2u-4j-7kg\";",
"extractionState" : "stale", "extractionState" : "stale",
@@ -1321,44 +1333,14 @@
} }
} }
}, },
"DkI-w6-jku.text" : {
"comment" : "Class = \"UILabel\"; text = \"Divider Position\"; ObjectID = \"DkI-w6-jku\";",
"extractionState" : "extracted_with_value",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "Divider Position"
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "needs_review",
"value" : "灵敏度分割位置"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "needs_review",
"value" : "灵敏度分割位置"
}
},
"zh-HK" : {
"stringUnit" : {
"state" : "needs_review",
"value" : "灵敏度分割位置"
}
}
}
},
"Dll-7x-18l.text" : { "Dll-7x-18l.text" : {
"comment" : "Class = \"UILabel\"; text = \"Swap A/B and X/Y Buttons \"; ObjectID = \"Dll-7x-18l\";", "comment" : "Class = \"UILabel\"; text = \"Swap A/B and X/Y Buttons\"; ObjectID = \"Dll-7x-18l\";",
"extractionState" : "extracted_with_value", "extractionState" : "extracted_with_value",
"localizations" : { "localizations" : {
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
"state" : "new", "state" : "new",
"value" : "Swap A/B and X/Y Buttons " "value" : "Swap A/B and X/Y Buttons"
} }
}, },
"zh-Hans" : { "zh-Hans" : {
@@ -1369,13 +1351,13 @@
}, },
"zh-Hant" : { "zh-Hant" : {
"stringUnit" : { "stringUnit" : {
"state" : "translated", "state" : "needs_review",
"value" : "交换A/B键、X/Y键位置" "value" : "交换A/B键、X/Y键位置"
} }
}, },
"zh-HK" : { "zh-HK" : {
"stringUnit" : { "stringUnit" : {
"state" : "translated", "state" : "needs_review",
"value" : "交换A/B键、X/Y键位置" "value" : "交换A/B键、X/Y键位置"
} }
} }
@@ -1646,13 +1628,13 @@
} }
}, },
"fXq-oD-MrL.text" : { "fXq-oD-MrL.text" : {
"comment" : "Class = \"UILabel\"; text = \"Play Audio on PC \"; ObjectID = \"fXq-oD-MrL\";", "comment" : "Class = \"UILabel\"; text = \"Play Audio on PC\"; ObjectID = \"fXq-oD-MrL\";",
"extractionState" : "extracted_with_value", "extractionState" : "extracted_with_value",
"localizations" : { "localizations" : {
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
"state" : "new", "state" : "new",
"value" : "Play Audio on PC " "value" : "Play Audio on PC"
} }
}, },
"zh-Hans" : { "zh-Hans" : {
@@ -1663,13 +1645,13 @@
}, },
"zh-Hant" : { "zh-Hant" : {
"stringUnit" : { "stringUnit" : {
"state" : "translated", "state" : "needs_review",
"value" : "播放主机端声音" "value" : "播放主机端声音"
} }
}, },
"zh-HK" : { "zh-HK" : {
"stringUnit" : { "stringUnit" : {
"state" : "translated", "state" : "needs_review",
"value" : "播放主机端声音" "value" : "播放主机端声音"
} }
} }
@@ -2528,13 +2510,13 @@
} }
}, },
"LGV-5y-piG.text" : { "LGV-5y-piG.text" : {
"comment" : "Class = \"UILabel\"; text = \"On-Screen Widgets \"; ObjectID = \"LGV-5y-piG\";", "comment" : "Class = \"UILabel\"; text = \"On-Screen Widgets \"; ObjectID = \"LGV-5y-piG\";",
"extractionState" : "extracted_with_value", "extractionState" : "extracted_with_value",
"localizations" : { "localizations" : {
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
"state" : "new", "state" : "new",
"value" : "On-Screen Widgets " "value" : "On-Screen Widgets "
} }
}, },
"zh-Hans" : { "zh-Hans" : {
@@ -2558,13 +2540,13 @@
} }
}, },
"lMt-4H-fkV.text" : { "lMt-4H-fkV.text" : {
"comment" : "Class = \"UILabel\"; text = \"Bitrate \"; ObjectID = \"lMt-4H-fkV\";", "comment" : "Class = \"UILabel\"; text = \"Bitrate\"; ObjectID = \"lMt-4H-fkV\";",
"extractionState" : "extracted_with_value", "extractionState" : "extracted_with_value",
"localizations" : { "localizations" : {
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
"state" : "new", "state" : "new",
"value" : "Bitrate " "value" : "Bitrate"
} }
}, },
"zh-Hans" : { "zh-Hans" : {
@@ -2840,18 +2822,18 @@
} }
}, },
"MUY-2Y-bHi.text" : { "MUY-2Y-bHi.text" : {
"comment" : "Class = \"UILabel\"; text = \"Touch Mode \"; ObjectID = \"MUY-2Y-bHi\";", "comment" : "Class = \"UILabel\"; text = \"Touch Mode\"; ObjectID = \"MUY-2Y-bHi\";",
"extractionState" : "extracted_with_value", "extractionState" : "extracted_with_value",
"localizations" : { "localizations" : {
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
"state" : "new", "state" : "new",
"value" : "Touch Mode " "value" : "Touch Mode"
} }
}, },
"zh-Hans" : { "zh-Hans" : {
"stringUnit" : { "stringUnit" : {
"state" : "translated", "state" : "needs_review",
"value" : "触控模式" "value" : "触控模式"
} }
} }
@@ -3158,13 +3140,13 @@
} }
}, },
"oPM-G6-u5O.text" : { "oPM-G6-u5O.text" : {
"comment" : "Class = \"UILabel\"; text = \"Mouse Pointer Velocity \"; ObjectID = \"oPM-G6-u5O\";", "comment" : "Class = \"UILabel\"; text = \"Mouse Pointer Velocity\"; ObjectID = \"oPM-G6-u5O\";",
"extractionState" : "extracted_with_value", "extractionState" : "extracted_with_value",
"localizations" : { "localizations" : {
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
"state" : "new", "state" : "new",
"value" : "Mouse Pointer Velocity " "value" : "Mouse Pointer Velocity"
} }
}, },
"zh-Hans" : { "zh-Hans" : {
@@ -3289,19 +3271,19 @@
}, },
"zh-Hans" : { "zh-Hans" : {
"stringUnit" : { "stringUnit" : {
"state" : "translated", "state" : "needs_review",
"value" : "手势滑动触发距离" "value" : "手势滑动触发距离"
} }
}, },
"zh-Hant" : { "zh-Hant" : {
"stringUnit" : { "stringUnit" : {
"state" : "translated", "state" : "needs_review",
"value" : "手势滑动触发距离" "value" : "手势滑动触发距离"
} }
}, },
"zh-HK" : { "zh-HK" : {
"stringUnit" : { "stringUnit" : {
"state" : "translated", "state" : "needs_review",
"value" : "手势滑动触发距离" "value" : "手势滑动触发距离"
} }
} }
@@ -3320,13 +3302,13 @@
} }
}, },
"pYZ-GR-EwO.text" : { "pYZ-GR-EwO.text" : {
"comment" : "Class = \"UILabel\"; text = \"Resolution \"; ObjectID = \"pYZ-GR-EwO\";", "comment" : "Class = \"UILabel\"; text = \"Resolution \"; ObjectID = \"pYZ-GR-EwO\";",
"extractionState" : "extracted_with_value", "extractionState" : "extracted_with_value",
"localizations" : { "localizations" : {
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
"state" : "new", "state" : "new",
"value" : "Resolution " "value" : "Resolution "
} }
}, },
"zh-Hans" : { "zh-Hans" : {
@@ -3337,13 +3319,13 @@
}, },
"zh-Hant" : { "zh-Hant" : {
"stringUnit" : { "stringUnit" : {
"state" : "translated", "state" : "needs_review",
"value" : "串流分辨率" "value" : "串流分辨率"
} }
}, },
"zh-HK" : { "zh-HK" : {
"stringUnit" : { "stringUnit" : {
"state" : "translated", "state" : "needs_review",
"value" : "串流分辨率" "value" : "串流分辨率"
} }
} }
@@ -3379,6 +3361,36 @@
} }
} }
}, },
"Qs9-iS-YoW.text" : {
"comment" : "Class = \"UILabel\"; text = \"Divider Position\"; ObjectID = \"Qs9-iS-YoW\";",
"extractionState" : "extracted_with_value",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "Divider Position"
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "needs_review",
"value" : "灵敏度分割位置"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "needs_review",
"value" : "灵敏度分割位置"
}
},
"zh-HK" : {
"stringUnit" : {
"state" : "needs_review",
"value" : "灵敏度分割位置"
}
}
}
},
"qSU-wh-tqA.segmentTitles[0]" : { "qSU-wh-tqA.segmentTitles[0]" : {
"comment" : "Class = \"UISegmentedControl\"; qSU-wh-tqA.segmentTitles[0] = \"Off\"; ObjectID = \"qSU-wh-tqA\";", "comment" : "Class = \"UISegmentedControl\"; qSU-wh-tqA.segmentTitles[0] = \"Off\"; ObjectID = \"qSU-wh-tqA\";",
"extractionState" : "extracted_with_value", "extractionState" : "extracted_with_value",
@@ -3632,13 +3644,13 @@
} }
}, },
"s2i-ZL-Gz4.text" : { "s2i-ZL-Gz4.text" : {
"comment" : "Class = \"UILabel\"; text = \"Statistics Overlay \"; ObjectID = \"s2i-ZL-Gz4\";", "comment" : "Class = \"UILabel\"; text = \"Statistics Overlay\"; ObjectID = \"s2i-ZL-Gz4\";",
"extractionState" : "extracted_with_value", "extractionState" : "extracted_with_value",
"localizations" : { "localizations" : {
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
"state" : "new", "state" : "new",
"value" : "Statistics Overlay " "value" : "Statistics Overlay"
} }
}, },
"zh-Hans" : { "zh-Hans" : {
@@ -3649,13 +3661,13 @@
}, },
"zh-Hant" : { "zh-Hant" : {
"stringUnit" : { "stringUnit" : {
"state" : "translated", "state" : "needs_review",
"value" : "性能数据叠加显示" "value" : "性能数据叠加显示"
} }
}, },
"zh-HK" : { "zh-HK" : {
"stringUnit" : { "stringUnit" : {
"state" : "translated", "state" : "needs_review",
"value" : "性能数据叠加显示" "value" : "性能数据叠加显示"
} }
} }
@@ -3999,7 +4011,7 @@
}, },
"WSI-9V-G6c.text" : { "WSI-9V-G6c.text" : {
"comment" : "Class = \"UILabel\"; text = \"Optimize Game Settings \"; ObjectID = \"WSI-9V-G6c\";", "comment" : "Class = \"UILabel\"; text = \"Optimize Game Settings \"; ObjectID = \"WSI-9V-G6c\";",
"extractionState" : "extracted_with_value", "extractionState" : "stale",
"localizations" : { "localizations" : {
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
@@ -4190,30 +4202,30 @@
} }
}, },
"ZWC-Gw-pSq.text" : { "ZWC-Gw-pSq.text" : {
"comment" : "Class = \"UILabel\"; text = \"Frame Pacing Preference \"; ObjectID = \"ZWC-Gw-pSq\";", "comment" : "Class = \"UILabel\"; text = \"Frame Pacing Preference\"; ObjectID = \"ZWC-Gw-pSq\";",
"extractionState" : "extracted_with_value", "extractionState" : "extracted_with_value",
"localizations" : { "localizations" : {
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
"state" : "new", "state" : "new",
"value" : "Frame Pacing Preference " "value" : "Frame Pacing Preference"
} }
}, },
"zh-Hans" : { "zh-Hans" : {
"stringUnit" : { "stringUnit" : {
"state" : "translated", "state" : "needs_review",
"value" : "帧步进控制" "value" : "帧步进控制"
} }
}, },
"zh-Hant" : { "zh-Hant" : {
"stringUnit" : { "stringUnit" : {
"state" : "translated", "state" : "needs_review",
"value" : "帧步进控制" "value" : "帧步进控制"
} }
}, },
"zh-HK" : { "zh-HK" : {
"stringUnit" : { "stringUnit" : {
"state" : "translated", "state" : "needs_review",
"value" : "帧步进控制" "value" : "帧步进控制"
} }
} }