- Dynamic Label & its hiding mechanism
-
This commit is contained in:
@@ -66,7 +66,7 @@
|
||||
<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"/>
|
||||
<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"/>
|
||||
<fontDescription key="fontDescription" name=".AppleSystemUIFont" family=".AppleSystemUIFont" pointSize="17"/>
|
||||
<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">
|
||||
<rect key="frame" x="15" y="177" width="380" height="56.5"/>
|
||||
<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"/>
|
||||
<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"/>
|
||||
@@ -137,7 +137,7 @@
|
||||
<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"/>
|
||||
<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"/>
|
||||
<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"/>
|
||||
@@ -156,7 +156,7 @@
|
||||
<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"/>
|
||||
<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"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<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">
|
||||
<rect key="frame" x="15" y="1837" width="380" height="56.5"/>
|
||||
<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"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<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">
|
||||
<rect key="frame" x="16" y="307" width="380" height="96.5"/>
|
||||
<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"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<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">
|
||||
<rect key="frame" x="0.0" y="65.5" width="380" height="31"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Enable On-Screen Widget & 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 & 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"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="160" id="NeF-EE-h4c"/>
|
||||
@@ -288,10 +288,10 @@
|
||||
<constraint firstAttribute="width" constant="380" id="q0h-IS-VR8"/>
|
||||
</constraints>
|
||||
</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"/>
|
||||
<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"/>
|
||||
<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"/>
|
||||
@@ -354,7 +354,7 @@
|
||||
<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"/>
|
||||
<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"/>
|
||||
<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"/>
|
||||
@@ -375,7 +375,7 @@
|
||||
<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"/>
|
||||
<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"/>
|
||||
<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"/>
|
||||
@@ -401,7 +401,7 @@
|
||||
<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"/>
|
||||
<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"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<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"/>
|
||||
</constraints>
|
||||
</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">
|
||||
<rect key="frame" x="15" y="2063" width="380" height="56.5"/>
|
||||
<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"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<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"/>
|
||||
</constraints>
|
||||
</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">
|
||||
<rect key="frame" x="15" y="1544" width="380" height="56.5"/>
|
||||
<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"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<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">
|
||||
<rect key="frame" x="15" y="1400" width="380" height="56.5"/>
|
||||
<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"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" red="0.93902439019999995" green="0.9625305918" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
@@ -772,23 +770,20 @@
|
||||
</switch>
|
||||
</subviews>
|
||||
</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"/>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" spacing="20" id="TvS-69-vcF" userLabel="optimizeGameSettingStack">
|
||||
<rect key="frame" x="20" y="2012" 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">
|
||||
<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"/>
|
||||
<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">
|
||||
<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"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="130" id="MmP-8X-kG2"/>
|
||||
<constraint firstAttribute="width" constant="130" id="Ywr-t1-umk"/>
|
||||
</constraints>
|
||||
</switch>
|
||||
</subviews>
|
||||
@@ -831,12 +826,11 @@
|
||||
<outlet property="onScreenWidgetSelector" destination="qSU-wh-tqA" id="j8d-fB-Z2c"/>
|
||||
<outlet property="onScreenWidgetStack" destination="ziJ-RC-xkP" id="4Me-0o-H65"/>
|
||||
<outlet property="onscreenControllerLabel" destination="LGV-5y-piG" id="GsV-fS-lX9"/>
|
||||
<outlet property="optimizeSettingsSelector" destination="Awc-Oh-s9n" id="vXR-ae-Of6"/>
|
||||
<outlet property="optimizeSettingsStack" destination="Vqp-65-BQP" id="m6Z-xn-RRW"/>
|
||||
<outlet property="optimizeGamesStack" destination="TvS-69-vcF" id="pm1-0c-dCR"/>
|
||||
<outlet property="optimizeGamesSwitch" destination="Sui-Ig-YxN" id="Lxu-si-ugy"/>
|
||||
<outlet property="pointerVelocityDividerStack" destination="b1U-nD-gYE" id="ep1-K3-rKj"/>
|
||||
<outlet property="pointerVelocityFactorStack" destination="vdk-mK-ztu" id="Cik-Rh-pGS"/>
|
||||
<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="resolutionStack" destination="zpX-lo-MLA" id="9Hu-I9-hjH"/>
|
||||
<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="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="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="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"/>
|
||||
|
||||
@@ -122,7 +122,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"%d finger tap gesture" : {
|
||||
"%d finger tap" : {
|
||||
"extractionState" : "manual",
|
||||
"localizations" : {
|
||||
"zh-Hans" : {
|
||||
|
||||
@@ -10,6 +10,11 @@
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
@protocol HideOverlappedDynamicLabelDelegate <NSObject>
|
||||
- (void)hideOverlappedDynamicLabels;
|
||||
@end
|
||||
|
||||
|
||||
@interface MenuSectionView : UIView
|
||||
|
||||
// 外部可访问属性
|
||||
@@ -22,6 +27,7 @@
|
||||
@property (nonatomic, assign) CGFloat headerViewHeight;
|
||||
@property (nonatomic, assign) CGFloat headerViewVerticalSpacing;
|
||||
@property (nonatomic, strong) NSMutableArray<UIStackView *> *subStackViews;
|
||||
@property (nonatomic, weak) id<HideOverlappedDynamicLabelDelegate> delegate; // Delegate property
|
||||
|
||||
// 方法
|
||||
- (void)setSectionWithIcon:(UIImage *)icon andSize:(CGFloat)size;
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
#import "MenuSectionView.h"
|
||||
#import "ThemeManager.h"
|
||||
|
||||
|
||||
@interface MenuSectionView ()
|
||||
|
||||
@property (nonatomic, strong) UIStackView *rootStackView;
|
||||
@@ -21,7 +22,6 @@
|
||||
@property (nonatomic, strong) UIView *headerView;
|
||||
@property (nonatomic, strong) UIView *separatorLine;
|
||||
|
||||
|
||||
@end
|
||||
|
||||
@implementation MenuSectionView
|
||||
@@ -345,6 +345,10 @@
|
||||
[self layoutIfNeeded];
|
||||
}];
|
||||
}
|
||||
|
||||
if ([self.delegate respondsToSelector:@selector(hideOverlappedDynamicLabels)]) {
|
||||
[self.delegate hideOverlappedDynamicLabels];
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@@ -70,6 +70,9 @@
|
||||
bool _background;
|
||||
UIView* menuSeparator;
|
||||
UIView* snapshot;
|
||||
|
||||
SettingsViewController* settingsViewController;
|
||||
|
||||
UINavigationBarAppearance *navBarAppearanceStandard;
|
||||
UINavigationBarAppearance *navBarAppearanceScroll;
|
||||
|
||||
@@ -1102,7 +1105,7 @@ static NSMutableSet* hostList;
|
||||
}
|
||||
|
||||
- (void)revealController:(SWRevealViewController *)revealController willMoveToPosition:(FrontViewPosition)position {
|
||||
SettingsViewController* settingsViewController = (SettingsViewController*)[revealController rearViewController];
|
||||
settingsViewController = (SettingsViewController*)[revealController rearViewController];
|
||||
revealController.navBarMenuDelegate = settingsViewController;
|
||||
if (position == FrontViewPositionLeft) {
|
||||
self.navigationItem.leftBarButtonItems = @[_settingsButton];
|
||||
@@ -1122,7 +1125,7 @@ static NSMutableSet* hostList;
|
||||
settingsViewController.fpsStack.hidden = self.settingsExpandedInStreamView;
|
||||
[settingsViewController widget:settingsViewController.bitrateSlider setEnabled:!self.settingsExpandedInStreamView];
|
||||
//settingsViewController.bitrateStack.hidden = self.settingsExpandedInStreamView;
|
||||
settingsViewController.optimizeSettingsStack.hidden = self.settingsExpandedInStreamView;
|
||||
settingsViewController.optimizeGamesStack.hidden = self.settingsExpandedInStreamView;
|
||||
settingsViewController.audioOnPcStack.hidden = self.settingsExpandedInStreamView;
|
||||
settingsViewController.codecStack.hidden = self.settingsExpandedInStreamView;
|
||||
settingsViewController.yuv444Stack.hidden = self.settingsExpandedInStreamView;
|
||||
@@ -2083,6 +2086,13 @@ static NSMutableSet* hostList;
|
||||
Settings* settings = [dataMan retrieveSettings];
|
||||
settings.settingsMenuWidth = [NSNumber numberWithFloat:self.revealViewController.rearViewRevealWidth];
|
||||
[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];
|
||||
TemporarySettings* currentSettings = [dataMan getSettings];
|
||||
_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 = 0.0f;
|
||||
_rearViewRevealDisplacement = 40.0f;
|
||||
|
||||
@@ -14,15 +14,18 @@
|
||||
#import "CustomOSCViewControl/LayoutOnScreenControlsViewController.h"
|
||||
#import "MainFrameViewController.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) UIStackView *parentStack;
|
||||
@property (strong, nonatomic) IBOutlet UIStackView *resolutionStack;
|
||||
@property (strong, nonatomic) IBOutlet UIStackView *fpsStack;
|
||||
@property (strong, nonatomic) IBOutlet UIStackView *bitrateStack;
|
||||
@property (strong, nonatomic) IBOutlet UIStackView *touchModeStack;
|
||||
@property (weak, nonatomic) IBOutlet UIStackView *enableOswSwitchStack;
|
||||
//@property (strong, nonatomic) IBOutlet UIStackView *asyncTouchStack;
|
||||
@property (weak, nonatomic) IBOutlet UISwitch *optimizeGamesSwitch;
|
||||
@property (strong, nonatomic) IBOutlet UIStackView *pointerVelocityDividerStack;
|
||||
@property (strong, nonatomic) IBOutlet UIStackView *pointerVelocityFactorStack;
|
||||
@property (strong, nonatomic) IBOutlet UIStackView *touchMoveEventIntervalStack;
|
||||
@@ -35,7 +38,7 @@
|
||||
@property (strong, nonatomic) IBOutlet UIStackView *slideToSettingsScreenEdgeStack;
|
||||
@property (strong, nonatomic) IBOutlet UIStackView *slideToToolboxScreenEdgeStack;
|
||||
@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 *swapAbaxyStack;
|
||||
@property (strong, nonatomic) IBOutlet UIStackView *audioOnPcStack;
|
||||
@@ -62,7 +65,6 @@
|
||||
@property (strong, nonatomic) IBOutlet UILabel *onscreenControllerLabel;
|
||||
@property (strong, nonatomic) IBOutlet UISegmentedControl *onScreenWidgetSelector;
|
||||
//@property (strong, nonatomic) IBOutlet UISegmentedControl *asyncNativeTouchPrioritySelector;
|
||||
@property (strong, nonatomic) IBOutlet UISegmentedControl *optimizeSettingsSelector;
|
||||
@property (strong, nonatomic) IBOutlet UISegmentedControl *multiControllerSelector;
|
||||
@property (strong, nonatomic) IBOutlet UISegmentedControl *swapABXYButtonsSelector;
|
||||
@property (strong, nonatomic) IBOutlet UISegmentedControl *audioOnPCSelector;
|
||||
@@ -109,6 +111,7 @@
|
||||
- (void)updateResolutionTable;
|
||||
- (void)widget:(UISlider*)widget setEnabled:(bool)enabled;
|
||||
- (void)updateTheme;
|
||||
- (void)hideDynamicLabelsWhenOverlapped:(UIView* )view;
|
||||
|
||||
|
||||
@end
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
#import "SettingsViewController.h"
|
||||
#import "TemporarySettings.h"
|
||||
#import "DataManager.h"
|
||||
#import "MenuSectionView.h"
|
||||
#import "ThemeManager.h"
|
||||
|
||||
#import <UIKit/UIGestureRecognizerSubclass.h>
|
||||
@@ -27,7 +26,6 @@
|
||||
bool justEnteredSettingsViewDoNotOpenOscLayoutTool;
|
||||
uint16_t oswLayoutFingers;
|
||||
CustomEdgeSlideGestureRecognizer *slideToCloseSettingsViewRecognizer;
|
||||
UIStackView *parentStack;
|
||||
NSMutableDictionary *_settingStackDict;
|
||||
NSMutableArray *_favoriteSettingStackIdentifiers;
|
||||
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
|
||||
self.scrollView.contentSize = CGSizeMake(self.scrollView.contentSize.width,
|
||||
[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);
|
||||
*/
|
||||
|
||||
|
||||
[self isIPhone] ? highestViewY + 20 : _parentStack.frame.size.height + [self getStandardNavBarHeight] + 20);
|
||||
|
||||
double delayInSeconds = 3;
|
||||
// Convert the delay into a dispatch_time_t value
|
||||
@@ -387,16 +371,16 @@ BOOL isCustomResolution(CGSize res) {
|
||||
]];
|
||||
*/
|
||||
|
||||
parentStack = [[UIStackView alloc] init];
|
||||
parentStack.axis = UILayoutConstraintAxisVertical;
|
||||
parentStack.spacing = 0;
|
||||
parentStack.translatesAutoresizingMaskIntoConstraints = NO;
|
||||
[self.scrollView addSubview:parentStack];
|
||||
_parentStack = [[UIStackView alloc] init];
|
||||
_parentStack.axis = UILayoutConstraintAxisVertical;
|
||||
_parentStack.spacing = 0;
|
||||
_parentStack.translatesAutoresizingMaskIntoConstraints = NO;
|
||||
[self.scrollView addSubview:_parentStack];
|
||||
[NSLayoutConstraint activateConstraints:@[
|
||||
[parentStack.topAnchor constraintEqualToAnchor:self.scrollView.contentLayoutGuide.topAnchor constant: [self getStandardNavBarHeight]],
|
||||
[parentStack.bottomAnchor constraintEqualToAnchor:self.scrollView.contentLayoutGuide.bottomAnchor constant:-20],
|
||||
[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.topAnchor constraintEqualToAnchor:self.scrollView.contentLayoutGuide.topAnchor constant: [self getStandardNavBarHeight]],
|
||||
[_parentStack.bottomAnchor constraintEqualToAnchor:self.scrollView.contentLayoutGuide.bottomAnchor constant:-20],
|
||||
[_parentStack.centerXAnchor constraintEqualToAnchor:self.view.centerXAnchor constant: 0], //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;
|
||||
}
|
||||
|
||||
- (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{
|
||||
UILabel* label = [self findDynamicLabelFromStack:stack];
|
||||
@@ -461,6 +513,7 @@ BOOL isCustomResolution(CGSize res) {
|
||||
|
||||
|
||||
MenuSectionView *videoSection = [[MenuSectionView alloc] init];
|
||||
videoSection.delegate = self;
|
||||
videoSection.sectionTitle = [LocalizationHelper localizedStringForKey:@"Video"];
|
||||
if (@available(iOS 13.0, *)) {
|
||||
[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.HdrStack ofId:@"HdrStack" withInfoTag:NO 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];
|
||||
|
||||
touchControlSection = [[MenuSectionView alloc] init];
|
||||
touchControlSection.delegate = self;
|
||||
touchControlSection.sectionTitle = [LocalizationHelper localizedStringForKey:@"Touch Control"];
|
||||
if (@available(iOS 13.0, *)) {
|
||||
[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.onScreenWidgetStack ofId:@"onScreenWidgetStack" withInfoTag:YES withDynamicLabel:YES to:touchControlSection];
|
||||
[self addSetting:self.swapAbaxyStack ofId:@"swapAbaxyStack" withInfoTag:NO withDynamicLabel:NO to:touchControlSection];
|
||||
[touchControlSection addToParentStack:parentStack];
|
||||
[touchControlSection addToParentStack:_parentStack];
|
||||
[touchControlSection setExpanded:YES];
|
||||
|
||||
|
||||
@@ -495,6 +549,7 @@ BOOL isCustomResolution(CGSize res) {
|
||||
|
||||
|
||||
MenuSectionView *gesturesSection = [[MenuSectionView alloc] init];
|
||||
gesturesSection.delegate = self;
|
||||
gesturesSection.sectionTitle = [LocalizationHelper localizedStringForKey:@"Gestures"];
|
||||
if (@available(iOS 13.0, *)) {
|
||||
[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.slideToToolboxScreenEdgeStack ofId:@"slideToToolboxScreenEdgeStack" withInfoTag:NO withDynamicLabel:NO to:gesturesSection];
|
||||
[self addSetting:self.slideToSettingsDistanceStack ofId:@"slideToSettingsDistanceStack" withInfoTag:YES withDynamicLabel:YES to:gesturesSection];
|
||||
[gesturesSection addToParentStack:parentStack];
|
||||
[gesturesSection addToParentStack:_parentStack];
|
||||
[gesturesSection setExpanded:YES];
|
||||
|
||||
MenuSectionView *peripheralSection = [[MenuSectionView alloc] init];
|
||||
peripheralSection.delegate = self;
|
||||
peripheralSection.sectionTitle = [LocalizationHelper localizedStringForKey:@"Peripherals"];
|
||||
if (@available(iOS 13.0, *)) {
|
||||
[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.reverseMouseWheelDirectionStack ofId:@"reverseMouseWheelDirectionStack" 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];
|
||||
|
||||
|
||||
MenuSectionView *otherSection = [[MenuSectionView alloc] init];
|
||||
otherSection.delegate = self;
|
||||
otherSection.sectionTitle = [LocalizationHelper localizedStringForKey:@"Others"];
|
||||
if (@available(iOS 13.0, *)) {
|
||||
[otherSection setSectionWithIcon:[UIImage systemImageNamed:@"cube"] andSize:20.5];
|
||||
}
|
||||
[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.multiControllerStack ofId:@"multiControllerStack" 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];
|
||||
[otherSection addToParentStack:parentStack];
|
||||
[otherSection addToParentStack:_parentStack];
|
||||
[otherSection setExpanded:YES];
|
||||
|
||||
|
||||
MenuSectionView *experimentalSection = [[MenuSectionView alloc] init];
|
||||
experimentalSection.delegate = self;
|
||||
experimentalSection.sectionTitle = [LocalizationHelper localizedStringForKey:@"Experimental"];
|
||||
if (@available(iOS 13.0, *)) {
|
||||
[experimentalSection setSectionWithIcon:[UIImage imageNamed:@"flask"] andSize:20];
|
||||
}
|
||||
// [self addSetting:self.asyncTouchStack ofId:@"asyncTouchStack" 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];
|
||||
}
|
||||
|
||||
@@ -589,7 +647,7 @@ BOOL isCustomResolution(CGSize res) {
|
||||
[parentStackTmp addArrangedSubview:self.slideToSettingsScreenEdgeStack];
|
||||
[parentStackTmp addArrangedSubview:self.slideToToolboxScreenEdgeStack];
|
||||
[parentStackTmp addArrangedSubview:self.slideToSettingsDistanceStack];
|
||||
[parentStackTmp addArrangedSubview:self.optimizeSettingsStack];
|
||||
[parentStackTmp addArrangedSubview:self.optimizeGamesStack];
|
||||
[parentStackTmp addArrangedSubview:self.multiControllerStack];
|
||||
[parentStackTmp addArrangedSubview:self.swapAbaxyStack];
|
||||
[parentStackTmp addArrangedSubview:self.audioOnPcStack];
|
||||
@@ -708,8 +766,8 @@ BOOL isCustomResolution(CGSize res) {
|
||||
|
||||
|
||||
- (NSInteger)parentStackIndexForLocation:(CGPoint)location {
|
||||
for (NSInteger i = parentStack.arrangedSubviews.count-1; i >=0; i--) {
|
||||
UIView *subview = parentStack.arrangedSubviews[i];
|
||||
for (NSInteger i = _parentStack.arrangedSubviews.count-1; i >=0; i--) {
|
||||
UIView *subview = _parentStack.arrangedSubviews[i];
|
||||
// CGRect frame = [subview convertRect:subview.bounds toView:parentStack];
|
||||
CGFloat stackMinY = CGRectGetMinY(subview.frame);
|
||||
// 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{
|
||||
uint16_t currentIndex = [self parentStackIndexForLocation:locationInParentStack];
|
||||
UIStackView* currentStack;
|
||||
for (NSInteger i = parentStack.arrangedSubviews.count-1; i >=0; i--) {
|
||||
currentStack = parentStack.arrangedSubviews[i];
|
||||
for (NSInteger i = _parentStack.arrangedSubviews.count-1; i >=0; i--) {
|
||||
currentStack = _parentStack.arrangedSubviews[i];
|
||||
|
||||
if(currentIndex == i){
|
||||
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.masksToBounds = YES;
|
||||
snapshot.clipsToBounds = YES;
|
||||
@@ -750,14 +808,14 @@ BOOL isCustomResolution(CGSize res) {
|
||||
}
|
||||
|
||||
- (void)clearRelocationIndicator{
|
||||
for (UIView* view in parentStack.arrangedSubviews) {
|
||||
for (UIView* view in _parentStack.arrangedSubviews) {
|
||||
view.layer.cornerRadius = 0;
|
||||
view.backgroundColor = [UIColor clearColor];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)findCapturedStackByTouchLocation:(CGPoint)point{
|
||||
UIView *touchedView = [parentStack hitTest:point withEvent:nil];
|
||||
UIView *touchedView = [_parentStack hitTest:point withEvent:nil];
|
||||
while(touchedView){
|
||||
if([touchedView isKindOfClass:[UIStackView class]] && touchedView.accessibilityIdentifier != nil){
|
||||
capturedStack = (UIStackView *)touchedView;
|
||||
@@ -782,7 +840,7 @@ BOOL isCustomResolution(CGSize res) {
|
||||
}
|
||||
|
||||
- (void)handleLongPress:(UILongPressGestureRecognizer *)gesture {
|
||||
CGPoint locationInParentStack = [gesture locationInView:parentStack];
|
||||
CGPoint locationInParentStack = [gesture locationInView:_parentStack];
|
||||
CGPoint locationInRootView = [gesture locationInView:self.view.superview];
|
||||
if(currentSettingsMenuMode == AllSettings){
|
||||
if (gesture.state == UIGestureRecognizerStateBegan) {
|
||||
@@ -813,10 +871,10 @@ BOOL isCustomResolution(CGSize res) {
|
||||
|
||||
snapshot = [capturedStack snapshotViewAfterScreenUpdates:YES];
|
||||
snapshot.center = capturedStack.center;
|
||||
[parentStack addSubview:snapshot];
|
||||
[_parentStack addSubview:snapshot];
|
||||
capturedStack.hidden = YES;
|
||||
originalCenter = capturedStack.center;
|
||||
originalIndex = [parentStack.arrangedSubviews indexOfObject:capturedStack];
|
||||
originalIndex = [_parentStack.arrangedSubviews indexOfObject:capturedStack];
|
||||
break;
|
||||
|
||||
case UIGestureRecognizerStateChanged:
|
||||
@@ -836,7 +894,7 @@ BOOL isCustomResolution(CGSize res) {
|
||||
// 计算新的插入位置
|
||||
NSInteger newIndex = [self parentStackIndexForLocation:locationInParentStack];
|
||||
[self clearRelocationIndicator];
|
||||
NSInteger oldIndex = [parentStack.arrangedSubviews indexOfObject:capturedStack];
|
||||
NSInteger oldIndex = [_parentStack.arrangedSubviews indexOfObject:capturedStack];
|
||||
newIndex = newIndex > oldIndex ? newIndex - 1 : newIndex;
|
||||
//NSLog(@"newidx %ld, oldidx %ld", newIndex, oldIndex);
|
||||
if(settingStackWillBeRelocatedToLowestPosition){
|
||||
@@ -845,9 +903,9 @@ BOOL isCustomResolution(CGSize res) {
|
||||
}
|
||||
|
||||
if (newIndex != NSNotFound) {
|
||||
if(newIndex >= parentStack.arrangedSubviews.count) newIndex = parentStack.arrangedSubviews.count-1;
|
||||
[parentStack removeArrangedSubview:capturedStack];
|
||||
[parentStack insertArrangedSubview:capturedStack atIndex:newIndex];
|
||||
if(newIndex >= _parentStack.arrangedSubviews.count) newIndex = _parentStack.arrangedSubviews.count-1;
|
||||
[_parentStack removeArrangedSubview:capturedStack];
|
||||
[_parentStack insertArrangedSubview:capturedStack atIndex:newIndex];
|
||||
// [parentStack addSubview:capturedStack];
|
||||
originalIndex = newIndex;
|
||||
capturedStack.hidden = NO;
|
||||
@@ -949,8 +1007,9 @@ BOOL isCustomResolution(CGSize res) {
|
||||
- (void)layoutSettingsView{
|
||||
[self.view layoutSubviews];
|
||||
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{
|
||||
@@ -961,18 +1020,19 @@ BOOL isCustomResolution(CGSize res) {
|
||||
currentSettings.settingsMenuMode = [NSNumber numberWithInteger:currentSettingsMenuMode];
|
||||
[dataMan saveData];
|
||||
|
||||
for(UIView* view in parentStack.subviews){
|
||||
for(UIView* view in _parentStack.subviews){
|
||||
[view removeFromSuperview];
|
||||
}
|
||||
parentStack.spacing = 15;
|
||||
_parentStack.spacing = 15;
|
||||
[self loadFavoriteSettingStackIdentifiers];
|
||||
for(NSString* settingIdentifier in _favoriteSettingStackIdentifiers){
|
||||
[parentStack addArrangedSubview:_settingStackDict[settingIdentifier]];
|
||||
[_parentStack addArrangedSubview:_settingStackDict[settingIdentifier]];
|
||||
}
|
||||
[self hideDynamicLabelsWhenOverlapped:self.parentStack];
|
||||
}
|
||||
|
||||
- (void)switchToAllSettings{
|
||||
for(UIView* view in parentStack.subviews){
|
||||
for(UIView* view in _parentStack.subviews){
|
||||
[view removeFromSuperview];
|
||||
}
|
||||
[self initParentStack];
|
||||
@@ -989,7 +1049,7 @@ BOOL isCustomResolution(CGSize res) {
|
||||
|
||||
- (void)enterRemoveSettingItemMode{
|
||||
currentSettingsMenuMode = RemoveSettingItem;
|
||||
for(UIStackView* stack in parentStack.arrangedSubviews){
|
||||
for(UIStackView* stack in _parentStack.arrangedSubviews){
|
||||
for(UIView* view in stack.subviews){
|
||||
if([view.accessibilityIdentifier isEqualToString:@"infoButton"]) view.hidden = YES;
|
||||
// view.userInteractionEnabled = false;
|
||||
@@ -1001,7 +1061,7 @@ BOOL isCustomResolution(CGSize res) {
|
||||
|
||||
- (void)doneRemoveSettingItem{
|
||||
currentSettingsMenuMode = FavoriteSettings;
|
||||
for(UIStackView* stack in parentStack.arrangedSubviews){
|
||||
for(UIStackView* stack in _parentStack.arrangedSubviews){
|
||||
//stack.userInteractionEnabled = true;
|
||||
for(UIView* view in stack.subviews){
|
||||
//view.
|
||||
@@ -1016,8 +1076,8 @@ BOOL isCustomResolution(CGSize res) {
|
||||
if(currentSettingsMenuMode != AllSettings){
|
||||
[_favoriteSettingStackIdentifiers removeAllObjects];
|
||||
//for(NSInteger i = 0; i < parentStack.arrangedSubviews.count; i++){
|
||||
for(NSInteger i = 0; i < parentStack.arrangedSubviews.count; i++){
|
||||
[_favoriteSettingStackIdentifiers addObject:parentStack.arrangedSubviews[i].accessibilityIdentifier];
|
||||
for(NSInteger i = 0; i < _parentStack.arrangedSubviews.count; i++){
|
||||
[_favoriteSettingStackIdentifiers addObject:_parentStack.arrangedSubviews[i].accessibilityIdentifier];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1205,7 +1265,7 @@ BOOL isCustomResolution(CGSize res) {
|
||||
[self.yuv444Switch setOn:currentSettings.enableYUV444];
|
||||
[self.statsOverlaySelector setSelectedSegmentIndex:currentSettings.statsOverlayLevel.intValue];
|
||||
[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.multiControllerSelector setSelectedSegmentIndex:currentSettings.multiController ? 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 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
|
||||
[self handleOswGestureChange];
|
||||
}];
|
||||
@@ -1430,7 +1490,8 @@ BOOL isCustomResolution(CGSize res) {
|
||||
|
||||
bool customOscEnabled = [self isCustomOswEnabled];
|
||||
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;
|
||||
[self handleOswGestureChange];
|
||||
if(customOscEnabled && !justEnteredSettingsViewDoNotOpenOscLayoutTool) {
|
||||
@@ -1450,11 +1511,11 @@ BOOL isCustomResolution(CGSize res) {
|
||||
|
||||
|
||||
- (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 {
|
||||
[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 {
|
||||
[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 {
|
||||
@@ -1715,7 +1776,10 @@ BOOL isCustomResolution(CGSize res) {
|
||||
|
||||
|
||||
- (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 {
|
||||
@@ -1727,7 +1791,7 @@ BOOL isCustomResolution(CGSize res) {
|
||||
- (void) updateBitrateText {
|
||||
// Display bitrate in Mbps
|
||||
UILabel* label = [self findDynamicLabelFromStack:self.bitrateStack];
|
||||
[label setText:[LocalizationHelper localizedStringForKey:@"%.1f Mbps", _bitrate / 1000.]];
|
||||
[label setText:[LocalizationHelper localizedStringForKey:@" %.1f Mbps ", _bitrate / 1000.]];
|
||||
}
|
||||
|
||||
- (NSInteger) getChosenFrameRate {
|
||||
@@ -1878,7 +1942,7 @@ BOOL isCustomResolution(CGSize res) {
|
||||
//BOOL liftStreamViewForKeyboard = [self.liftStreamViewForKeyboardSelector selectedSegmentIndex] == 1;
|
||||
BOOL liftStreamViewForKeyboard = YES; // enable and hide this option
|
||||
BOOL showKeyboardToolbar = [self.showKeyboardToolbarSelector selectedSegmentIndex] == 1;
|
||||
BOOL optimizeGames = [self.optimizeSettingsSelector selectedSegmentIndex] == 1;
|
||||
BOOL optimizeGames = self.optimizeGamesSwitch.isOn;
|
||||
BOOL multiController = [self.multiControllerSelector selectedSegmentIndex] == 1;
|
||||
BOOL swapABXYButtons = [self.swapABXYButtonsSelector selectedSegmentIndex] == 1;
|
||||
BOOL audioOnPC = [self.audioOnPCSelector selectedSegmentIndex] == 1;
|
||||
|
||||
@@ -284,13 +284,13 @@
|
||||
}
|
||||
},
|
||||
"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",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "new",
|
||||
"value" : "Preferred Codec "
|
||||
"value" : "Preferred Codec"
|
||||
}
|
||||
},
|
||||
"zh-Hans" : {
|
||||
@@ -301,13 +301,13 @@
|
||||
},
|
||||
"zh-Hant" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"state" : "needs_review",
|
||||
"value" : "视频编解码"
|
||||
}
|
||||
},
|
||||
"zh-HK" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"state" : "needs_review",
|
||||
"value" : "视频编解码"
|
||||
}
|
||||
}
|
||||
@@ -554,13 +554,13 @@
|
||||
}
|
||||
},
|
||||
"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",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "new",
|
||||
"value" : "Frame Rate "
|
||||
"value" : "Frame Rate"
|
||||
}
|
||||
},
|
||||
"zh-Hans" : {
|
||||
@@ -571,13 +571,13 @@
|
||||
},
|
||||
"zh-Hant" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"state" : "needs_review",
|
||||
"value" : "串流帧率"
|
||||
}
|
||||
},
|
||||
"zh-HK" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"state" : "needs_review",
|
||||
"value" : "串流帧率"
|
||||
}
|
||||
}
|
||||
@@ -645,7 +645,7 @@
|
||||
},
|
||||
"Awc-Oh-s9n.segmentTitles[0]" : {
|
||||
"comment" : "Class = \"UISegmentedControl\"; Awc-Oh-s9n.segmentTitles[0] = \"No\"; ObjectID = \"Awc-Oh-s9n\";",
|
||||
"extractionState" : "extracted_with_value",
|
||||
"extractionState" : "stale",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
@@ -675,7 +675,7 @@
|
||||
},
|
||||
"Awc-Oh-s9n.segmentTitles[1]" : {
|
||||
"comment" : "Class = \"UISegmentedControl\"; Awc-Oh-s9n.segmentTitles[1] = \"Yes\"; ObjectID = \"Awc-Oh-s9n\";",
|
||||
"extractionState" : "extracted_with_value",
|
||||
"extractionState" : "stale",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
@@ -764,13 +764,13 @@
|
||||
}
|
||||
},
|
||||
"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",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "new",
|
||||
"value" : "Multi-Controller Mode "
|
||||
"value" : "Multi-Controller Mode"
|
||||
}
|
||||
},
|
||||
"zh-Hans" : {
|
||||
@@ -781,13 +781,13 @@
|
||||
},
|
||||
"zh-Hant" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"state" : "needs_review",
|
||||
"value" : "多手柄模式"
|
||||
}
|
||||
},
|
||||
"zh-HK" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"state" : "needs_review",
|
||||
"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]" : {
|
||||
"comment" : "Class = \"UISegmentedControl\"; D2u-4j-7kg.segmentTitles[0] = \"No\"; ObjectID = \"D2u-4j-7kg\";",
|
||||
"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" : {
|
||||
"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",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "new",
|
||||
"value" : "Swap A/B and X/Y Buttons "
|
||||
"value" : "Swap A/B and X/Y Buttons"
|
||||
}
|
||||
},
|
||||
"zh-Hans" : {
|
||||
@@ -1369,13 +1351,13 @@
|
||||
},
|
||||
"zh-Hant" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"state" : "needs_review",
|
||||
"value" : "交换A/B键、X/Y键位置"
|
||||
}
|
||||
},
|
||||
"zh-HK" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"state" : "needs_review",
|
||||
"value" : "交换A/B键、X/Y键位置"
|
||||
}
|
||||
}
|
||||
@@ -1646,13 +1628,13 @@
|
||||
}
|
||||
},
|
||||
"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",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "new",
|
||||
"value" : "Play Audio on PC "
|
||||
"value" : "Play Audio on PC"
|
||||
}
|
||||
},
|
||||
"zh-Hans" : {
|
||||
@@ -1663,13 +1645,13 @@
|
||||
},
|
||||
"zh-Hant" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"state" : "needs_review",
|
||||
"value" : "播放主机端声音"
|
||||
}
|
||||
},
|
||||
"zh-HK" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"state" : "needs_review",
|
||||
"value" : "播放主机端声音"
|
||||
}
|
||||
}
|
||||
@@ -2528,13 +2510,13 @@
|
||||
}
|
||||
},
|
||||
"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",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "new",
|
||||
"value" : "On-Screen Widgets "
|
||||
"value" : "On-Screen Widgets "
|
||||
}
|
||||
},
|
||||
"zh-Hans" : {
|
||||
@@ -2558,13 +2540,13 @@
|
||||
}
|
||||
},
|
||||
"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",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "new",
|
||||
"value" : "Bitrate "
|
||||
"value" : "Bitrate"
|
||||
}
|
||||
},
|
||||
"zh-Hans" : {
|
||||
@@ -2840,18 +2822,18 @@
|
||||
}
|
||||
},
|
||||
"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",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "new",
|
||||
"value" : "Touch Mode "
|
||||
"value" : "Touch Mode"
|
||||
}
|
||||
},
|
||||
"zh-Hans" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"state" : "needs_review",
|
||||
"value" : "触控模式"
|
||||
}
|
||||
}
|
||||
@@ -3158,13 +3140,13 @@
|
||||
}
|
||||
},
|
||||
"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",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "new",
|
||||
"value" : "Mouse Pointer Velocity "
|
||||
"value" : "Mouse Pointer Velocity"
|
||||
}
|
||||
},
|
||||
"zh-Hans" : {
|
||||
@@ -3289,19 +3271,19 @@
|
||||
},
|
||||
"zh-Hans" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"state" : "needs_review",
|
||||
"value" : "手势滑动触发距离"
|
||||
}
|
||||
},
|
||||
"zh-Hant" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"state" : "needs_review",
|
||||
"value" : "手势滑动触发距离"
|
||||
}
|
||||
},
|
||||
"zh-HK" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"state" : "needs_review",
|
||||
"value" : "手势滑动触发距离"
|
||||
}
|
||||
}
|
||||
@@ -3320,13 +3302,13 @@
|
||||
}
|
||||
},
|
||||
"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",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "new",
|
||||
"value" : "Resolution "
|
||||
"value" : "Resolution "
|
||||
}
|
||||
},
|
||||
"zh-Hans" : {
|
||||
@@ -3337,13 +3319,13 @@
|
||||
},
|
||||
"zh-Hant" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"state" : "needs_review",
|
||||
"value" : "串流分辨率"
|
||||
}
|
||||
},
|
||||
"zh-HK" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"state" : "needs_review",
|
||||
"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]" : {
|
||||
"comment" : "Class = \"UISegmentedControl\"; qSU-wh-tqA.segmentTitles[0] = \"Off\"; ObjectID = \"qSU-wh-tqA\";",
|
||||
"extractionState" : "extracted_with_value",
|
||||
@@ -3632,13 +3644,13 @@
|
||||
}
|
||||
},
|
||||
"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",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "new",
|
||||
"value" : "Statistics Overlay "
|
||||
"value" : "Statistics Overlay"
|
||||
}
|
||||
},
|
||||
"zh-Hans" : {
|
||||
@@ -3649,13 +3661,13 @@
|
||||
},
|
||||
"zh-Hant" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"state" : "needs_review",
|
||||
"value" : "性能数据叠加显示"
|
||||
}
|
||||
},
|
||||
"zh-HK" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"state" : "needs_review",
|
||||
"value" : "性能数据叠加显示"
|
||||
}
|
||||
}
|
||||
@@ -3999,7 +4011,7 @@
|
||||
},
|
||||
"WSI-9V-G6c.text" : {
|
||||
"comment" : "Class = \"UILabel\"; text = \"Optimize Game Settings \"; ObjectID = \"WSI-9V-G6c\";",
|
||||
"extractionState" : "extracted_with_value",
|
||||
"extractionState" : "stale",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
@@ -4190,30 +4202,30 @@
|
||||
}
|
||||
},
|
||||
"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",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "new",
|
||||
"value" : "Frame Pacing Preference "
|
||||
"value" : "Frame Pacing Preference"
|
||||
}
|
||||
},
|
||||
"zh-Hans" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"state" : "needs_review",
|
||||
"value" : "帧步进控制"
|
||||
}
|
||||
},
|
||||
"zh-Hant" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"state" : "needs_review",
|
||||
"value" : "帧步进控制"
|
||||
}
|
||||
},
|
||||
"zh-HK" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"state" : "needs_review",
|
||||
"value" : "帧步进控制"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user