diff --git a/Limelight/Base.lproj/iPad.storyboard b/Limelight/Base.lproj/iPad.storyboard
index 821403a1..b9b03632 100644
--- a/Limelight/Base.lproj/iPad.storyboard
+++ b/Limelight/Base.lproj/iPad.storyboard
@@ -867,24 +867,30 @@ ICAgICAgICAgICAgICA
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -905,17 +917,19 @@ ICAgICAgICAgICAgICA
-
-
-
+
+
+
+
+
diff --git a/Limelight/Base.lproj/iPhone.storyboard b/Limelight/Base.lproj/iPhone.storyboard
index 5bea4d51..912e0526 100644
--- a/Limelight/Base.lproj/iPhone.storyboard
+++ b/Limelight/Base.lproj/iPhone.storyboard
@@ -907,9 +907,6 @@ ICAgICAgICAgICAgIA
-
-
-
@@ -918,6 +915,9 @@ ICAgICAgICAgICAgIA
+
+
+
diff --git a/Limelight/Input/CommandManager.swift b/Limelight/Input/CommandManager.swift
index cb712418..a547c438 100644
--- a/Limelight/Input/CommandManager.swift
+++ b/Limelight/Input/CommandManager.swift
@@ -75,7 +75,9 @@ import UIKit
"OSCR2" : 0]
@objc public static let touchPadCmds: [String] = ["LSVPAD", "RSVPAD", "LSPAD", "RSPAD", "MOUSEPAD", "DPAD", "WASDPAD", "ARROWPAD"]
-
+ @objc public static let stickTouchPads: [String] = ["LSVPAD", "RSVPAD", "LSPAD", "RSPAD"]
+ @objc public static let nonVectorStickPads: [String] = ["LSPAD", "RSPAD"]
+
static let keyboardButtonMappings: [String: Int16] = [
// Windows Key Codes
"CTRL": 0x11, // VK_CONTROL
diff --git a/Limelight/Input/CustomOSC/OnScreenButtonState.h b/Limelight/Input/CustomOSC/OnScreenButtonState.h
index e1767933..bcf50f1e 100644
--- a/Limelight/Input/CustomOSC/OnScreenButtonState.h
+++ b/Limelight/Input/CustomOSC/OnScreenButtonState.h
@@ -27,6 +27,8 @@ NS_ASSUME_NONNULL_BEGIN
@property (nonatomic, assign) NSTimeInterval timestamp;
@property (nonatomic, assign) CGFloat widthFactor; // for OnScreenButtonView
@property (nonatomic, assign) CGFloat heightFactor; // for OnScreenButtonView
+@property (nonatomic, assign) CGFloat velocityFactor; // for OnScreenButtonView
+
@property (nonatomic, assign) CGFloat oscLayerSizeFactor; // for OnScreenController CALayer
@property (nonatomic, assign) CGFloat backgroundAlpha; // for OnScreenController CALayer
diff --git a/Limelight/Input/CustomOSC/OnScreenButtonState.m b/Limelight/Input/CustomOSC/OnScreenButtonState.m
index 08bf808e..dbbed24e 100644
--- a/Limelight/Input/CustomOSC/OnScreenButtonState.m
+++ b/Limelight/Input/CustomOSC/OnScreenButtonState.m
@@ -35,6 +35,7 @@
[encoder encodeBool:self.isHidden forKey:@"isHidden"];
[encoder encodeFloat:self.widthFactor forKey:@"widthFactor"];
[encoder encodeFloat:self.heightFactor forKey:@"heightFactor"];
+ [encoder encodeFloat:self.velocityFactor forKey:@"velocityFactor"];
[encoder encodeFloat:self.oscLayerSizeFactor forKey:@"oscLayerSizeFactor"];
[encoder encodeFloat:self.backgroundAlpha forKey:@"backgroundAlpha"];
}
@@ -49,6 +50,7 @@
self.isHidden = [decoder decodeBoolForKey:@"isHidden"];
self.widthFactor = [decoder decodeFloatForKey:@"widthFactor"];
self.heightFactor = [decoder decodeFloatForKey:@"heightFactor"];
+ self.velocityFactor = [decoder decodeFloatForKey:@"velocityFactor"];
self.oscLayerSizeFactor = [decoder decodeFloatForKey:@"oscLayerSizeFactor"];
self.backgroundAlpha = [decoder decodeFloatForKey:@"backgroundAlpha"];
}
diff --git a/Limelight/Input/OnScreenButtonView.swift b/Limelight/Input/OnScreenButtonView.swift
index 99afd0ce..393d9d60 100644
--- a/Limelight/Input/OnScreenButtonView.swift
+++ b/Limelight/Input/OnScreenButtonView.swift
@@ -8,7 +8,6 @@
import UIKit
-
@objc class OnScreenButtonView: UIView, InstanceProviderDelegate {
// receiving the OnScreenControls instance from delegate
@objc func getOnScreenControlsInstance(_ sender: Any) {
@@ -26,16 +25,17 @@ import UIKit
@objc public var keyString: String
@objc public var timestamp: TimeInterval
@objc public var pressed: Bool
- @objc public var widthFactor: CGFloat
- @objc public var heightFactor: CGFloat
- @objc public var backgroundAlpha: CGFloat
+ @objc public var widthFactor: CGFloat = 1.0
+ @objc public var heightFactor: CGFloat = 1.0
+ @objc public var backgroundAlpha: CGFloat = 0.5
@objc public var latestTouchLocation: CGPoint
+ @objc public var selfViewOnTheRight: Bool = false
private let appWindow: UIView
private var touchLockedForMoveEvent: UITouch
-
+
// for LSVPAD, RSVPAD
@objc public var deltaX: CGFloat
@objc public var deltaY: CGFloat
@@ -43,21 +43,25 @@ import UIKit
// for LSPAD, RSPAD
@objc public var offSetX: CGFloat
@objc public var offSetY: CGFloat
+
+ // this is for all stick pads and mouse Pad
+ @objc public var sensitivityFactor: CGFloat = 1.0
+
// for LSVPAD, RSVPAD, LSPAD, RSPAD
private let crossMarkColor: CGColor = UIColor(white: 1, alpha: 0.7).cgColor
private let stickBallColor: CGColor = UIColor(white: 1, alpha: 0.75).cgColor
- private var stickInputScale: CGFloat = 30
+ private var stickInputScale: CGFloat = 35
private var l3r3Indicator = CAShapeLayer()
- private var crossMarkLayer = CAShapeLayer()
- private var stickBallLayer = CAShapeLayer()
- @objc public var stickIndicatorXOffset: CGFloat = 120
+ @objc public var crossMarkLayer = CAShapeLayer()
+ @objc public var stickBallLayer = CAShapeLayer()
// check quick double tap:
private var quickDoubleTapDetected: Bool
private var touchTapTimeInterval: TimeInterval
private var touchTapTimeStamp: TimeInterval
private let QUICK_TAP_TIME_INTERVAL = 0.2
+ @objc public var stickIndicatorXOffset: CGFloat = 120
// for all LRUD pads
private var upIndicator = CAShapeLayer()
@@ -75,7 +79,7 @@ import UIKit
private let label: UILabel
// first touch location within the button or pad view (self)
- private var touchBeganLocation: CGPoint = .zero
+ @objc public var touchBeganLocation: CGPoint = .zero
// for mousePad
private var mousePointerMoved: Bool
@@ -97,9 +101,11 @@ import UIKit
// self.originalBackgroundColor = UIColor(white: 0.2, alpha: 0.7)
self.timestamp = 0
self.pressed = false
- self.widthFactor = 1.0
- self.heightFactor = 1.0
- self.backgroundAlpha = 0.5
+ // self.widthFactor = 1.0
+ // self.heightFactor = 1.0
+ // self.backgroundAlpha = 0.5
+ // self.velocityFactor = 1.0
+
self.latestTouchLocation = CGPoint(x: 0, y: 0)
self.deltaX = 0
self.deltaY = 0
@@ -294,19 +300,21 @@ import UIKit
//================================================================================================
- //Indicator overlay for on-screen game controller left or right sticks (non-velocity mode)
+ //Indicator overlay for on-screen game controller left or right sticks (non-vector mode)
// create stick indicator: the crossMark & stickBall:
- private func showStickIndicator(){
+ @objc public func showStickIndicator(){
// tell if the self button is located on the left or right
- if(self.storedLocation.x + self.frame.width/2 > self.appWindow.frame.width*0.5){
- self.stickIndicatorXOffset = -abs(self.stickIndicatorXOffset)
+ self.selfViewOnTheRight = (self.storedLocation.x + self.frame.width/2 > self.appWindow.frame.width*0.5)
+ let offsetSign = selfViewOnTheRight ? -1 : 1
+ let stickMarkerRelativeLocation:CGPoint
+ if !OnScreenButtonView.editMode {
+ stickMarkerRelativeLocation = CGPointMake(touchBeganLocation.x + CGFloat(offsetSign) * self.stickIndicatorXOffset, touchBeganLocation.y)
}
else{
- self.stickIndicatorXOffset = abs(self.stickIndicatorXOffset)
+ stickMarkerRelativeLocation = CGPointMake(touchBeganLocation.x, touchBeganLocation.y)
}
- let stickMarkerRelativeLocation = CGPointMake(touchBeganLocation.x + self.stickIndicatorXOffset, touchBeganLocation.y)
self.crossMarkLayer = createAndShowCrossMarkOnTouchPoint(at: stickMarkerRelativeLocation)
self.stickBallLayer = createAndShowStickBall(at: stickMarkerRelativeLocation)
}
@@ -365,11 +373,19 @@ import UIKit
return stickBallLayer
}
- private func updateStickBallPosition(){
+ @objc public func updateStickBallPosition(){
CATransaction.begin()
CATransaction.setDisableActions(true)
self.stickBallLayer.removeAllAnimations()
- self.stickBallLayer.position = CGPointMake(CGRectGetMidX(self.crossMarkLayer.frame) + touchInputToStickBallCoord(input: offSetX), CGRectGetMinY(self.crossMarkLayer.frame) + touchInputToStickBallCoord(input: offSetY))
+ if !OnScreenButtonView.editMode {
+ self.stickBallLayer.position = CGPointMake(CGRectGetMidX(self.crossMarkLayer.frame) + touchInputToStickBallCoord(input: offSetX), CGRectGetMinY(self.crossMarkLayer.frame) + touchInputToStickBallCoord(input: offSetY))
+ }
+ else{
+ // illustrate offset distance in edit mode
+ let offsetSign = self.selfViewOnTheRight ? -1 : 1
+ let illlustrationPoint = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMaxY(self.frame)/4)
+ self.stickBallLayer.position = CGPointMake(CGRectGetMidX(self.crossMarkLayer.frame) + CGFloat(offsetSign) * stickIndicatorXOffset, CGRectGetMinY(self.crossMarkLayer.frame))
+ }
CATransaction.commit()
}
@@ -775,6 +791,11 @@ import UIKit
center = CGPoint(x: center.x + offsetX, y: center.y + offsetY)
//NSLog("x coord: %f, y coord: %f", self.frame.origin.x, self.frame.origin.y)
storedLocation = currentLocation // Update initial center for next movement
+ }
+
+ if CommandManager.nonVectorStickPads.contains(self.keyString) {
+ self.stickBallLayer.removeFromSuperlayer()
+ self.crossMarkLayer.removeFromSuperlayer()
}
}
}
@@ -791,18 +812,18 @@ import UIKit
switch self.keyString{
case "MOUSEPAD":
- LiSendMouseMoveEvent(Int16(truncatingIfNeeded: Int(deltaX)), Int16(truncatingIfNeeded: Int(deltaY)))
+ LiSendMouseMoveEvent(Int16(truncatingIfNeeded: Int(deltaX * 1.7 * sensitivityFactor)), Int16(truncatingIfNeeded: Int(deltaY * 1.7 * sensitivityFactor)))
break
case "LSPAD":
- self.sendLeftStickTouchPadEvent(inputX: offSetX, inputY: offSetY)
+ self.sendLeftStickTouchPadEvent(inputX: offSetX * sensitivityFactor, inputY: offSetY*sensitivityFactor)
updateStickBallPosition()
case "RSPAD":
- self.sendRightStickTouchPadEvent(inputX: offSetX, inputY: offSetY);
+ self.sendRightStickTouchPadEvent(inputX: offSetX * sensitivityFactor, inputY: offSetY * sensitivityFactor);
updateStickBallPosition()
case "LSVPAD":
- self.sendLeftStickTouchPadEvent(inputX: deltaX, inputY: deltaY)
+ self.sendLeftStickTouchPadEvent(inputX: deltaX*1.5167*sensitivityFactor, inputY: deltaY*1.5167*sensitivityFactor)
case "RSVPAD":
- self.sendRightStickTouchPadEvent(inputX: deltaX, inputY: deltaY);
+ self.sendRightStickTouchPadEvent(inputX: deltaX*1.5167*sensitivityFactor, inputY: deltaY*1.5167*sensitivityFactor);
case "DPAD", "WASDPAD", "ARROWPAD":
handleLrudTouchMove()
default:
@@ -917,6 +938,11 @@ import UIKit
superview.layoutIfNeeded()
setupView(); //re-setup buttonView style
+
+ if CommandManager.nonVectorStickPads.contains(self.keyString) {
+ self.crossMarkLayer.removeFromSuperlayer()
+ self.stickBallLayer.removeFromSuperlayer()
+ self.showStickIndicator()}
}
}
}
diff --git a/Limelight/ViewControllers/CustomOSCViewControl/LayoutOnScreenControlsViewController.h b/Limelight/ViewControllers/CustomOSCViewControl/LayoutOnScreenControlsViewController.h
index c1d49583..83621485 100644
--- a/Limelight/ViewControllers/CustomOSCViewControl/LayoutOnScreenControlsViewController.h
+++ b/Limelight/ViewControllers/CustomOSCViewControl/LayoutOnScreenControlsViewController.h
@@ -37,9 +37,12 @@ NS_ASSUME_NONNULL_BEGIN
@property (strong, nonatomic) OSCProfilesTableViewController *oscProfilesTableViewController;
@property (nonatomic, assign) NSString *currentProfileName;
@property (strong, nonatomic) IBOutlet UILabel *currentProfileLabel;
-@property (strong, nonatomic) IBOutlet UISlider *buttonAndControllerSizeSlider;
-@property (strong, nonatomic) IBOutlet UISlider *buttonAndControllerHeightSlider;
-@property (strong, nonatomic) IBOutlet UISlider *buttonAndControllerAlphaSlider;
+@property (strong, nonatomic) IBOutlet UISlider *widgetSizeSlider;
+@property (strong, nonatomic) IBOutlet UISlider *widgetHeightSlider;
+@property (strong, nonatomic) IBOutlet UISlider *widgetAlphaSlider;
+@property (strong, nonatomic) IBOutlet UISlider *sensitivityFactorSlider;
+@property (strong, nonatomic) IBOutlet UISlider *stickIndicatorOffsetSlider;
+
@end
diff --git a/Limelight/ViewControllers/CustomOSCViewControl/LayoutOnScreenControlsViewController.m b/Limelight/ViewControllers/CustomOSCViewControl/LayoutOnScreenControlsViewController.m
index 85101f31..76e607d1 100644
--- a/Limelight/ViewControllers/CustomOSCViewControl/LayoutOnScreenControlsViewController.m
+++ b/Limelight/ViewControllers/CustomOSCViewControl/LayoutOnScreenControlsViewController.m
@@ -29,10 +29,12 @@
bool controllerLayerSelected;
__weak IBOutlet NSLayoutConstraint *toolbarTopConstraintiPhone;
__weak IBOutlet NSLayoutConstraint *toolbarTopConstraintiPad;
- UILabel *buttonSizeSliderLabel;
- UILabel *buttonHeightSliderLabel;
- UILabel *buttonAlphaSliderLabel;
-
+ UILabel *widgetSizeSliderLabel;
+ UILabel *widgetHeightSliderLabel;
+ UILabel *widgetAlphaSliderLabel;
+ UILabel *sensitivitySliderLabel;
+ UILabel *stickIndicatorOffsetSliderLabel;
+ UILabel *stickIndicatorOffsetExplain;
}
@synthesize trashCanButton;
@@ -92,9 +94,12 @@
isToolbarHidden = NO; // keeps track if the toolbar is hidden up above the screen so that we know whether to hide or show it when the user taps the toolbar's hide/show button
- buttonSizeSliderLabel = [[UILabel alloc] init];
- buttonHeightSliderLabel = [[UILabel alloc] init];
- buttonAlphaSliderLabel = [[UILabel alloc] init];
+ widgetSizeSliderLabel = [[UILabel alloc] init];
+ widgetHeightSliderLabel = [[UILabel alloc] init];
+ widgetAlphaSliderLabel = [[UILabel alloc] init];
+ sensitivitySliderLabel = [[UILabel alloc] init];
+ stickIndicatorOffsetSliderLabel = [[UILabel alloc] init];
+ stickIndicatorOffsetExplain = [[UILabel alloc] init];
/* add curve to bottom of chevron tab view */
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.chevronView.bounds byRoundingCorners:(UIRectCornerBottomLeft | UIRectCornerBottomRight) cornerRadii:CGSizeMake(10.0, 10.0)];
@@ -138,7 +143,7 @@
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
- selector:@selector(setButtonViewSliderValues:)
+ selector:@selector(buttonViewSelected:)
name:@"OnScreenButtonViewSelected"
object:nil];
@@ -375,21 +380,37 @@
}
}
-- (void)setButtonViewSliderValues: (NSNotification *)notification{
+- (void)buttonViewSelected: (NSNotification *)notification{
// receive the selected buttonView obj passed from the notification
OnScreenButtonView* buttonView = (OnScreenButtonView* )notification.object;
self->buttonViewSelected = true;
self->controllerLayerSelected = false;
self->selectedButtonView = buttonView;
// setup slider values
- [self.buttonAndControllerSizeSlider setValue: self->selectedButtonView.widthFactor];
- [self.buttonAndControllerHeightSlider setValue: self->selectedButtonView.heightFactor];
- [self.buttonAndControllerAlphaSlider setValue: self->selectedButtonView.backgroundAlpha];
+ [self.widgetSizeSlider setValue: self->selectedButtonView.widthFactor];
+ [self.widgetHeightSlider setValue: self->selectedButtonView.heightFactor];
+ [self.widgetAlphaSlider setValue: self->selectedButtonView.backgroundAlpha];
- [buttonSizeSliderLabel setText:[LocalizationHelper localizedStringForKey:@"Widget Size: %.2f", self->selectedButtonView.widthFactor]];
- [buttonHeightSliderLabel setText:[LocalizationHelper localizedStringForKey:@"Widget Height: %.2f", self->selectedButtonView.heightFactor]];
- [buttonAlphaSliderLabel setText:[LocalizationHelper localizedStringForKey:@"Widget Alpha: %.2f", self->selectedButtonView.backgroundAlpha]];
+ NSSet *stickAndMouseTouchpads = [NSSet setWithObjects:@"LSPAD", @"RSPAD", @"LSVPAD", @"RSVPAD", @"MOUSEPAD", nil];
+ NSSet *nonVectorStickPads = [NSSet setWithObjects:@"LSPAD", @"RSPAD", nil];
+
+ bool showSensitivityFactorSlider = [stickAndMouseTouchpads containsObject:self->selectedButtonView.keyString];
+ bool showStickIndicatorOffsetSlider = [nonVectorStickPads containsObject:self->selectedButtonView.keyString];
+ self.sensitivityFactorSlider.hidden = self->sensitivitySliderLabel.hidden = !showSensitivityFactorSlider;
+ self.stickIndicatorOffsetSlider.hidden = self->stickIndicatorOffsetExplain.hidden = self->stickIndicatorOffsetSliderLabel.hidden = !showStickIndicatorOffsetSlider;
+ if(showSensitivityFactorSlider) [sensitivitySliderLabel setText:[LocalizationHelper localizedStringForKey:@"Sensitivity: %.2f", self->selectedButtonView.sensitivityFactor]];
+ if(showStickIndicatorOffsetSlider){
+ // illustrating the indicator offset,
+ [selectedButtonView.stickBallLayer removeFromSuperlayer];
+ [selectedButtonView.crossMarkLayer removeFromSuperlayer];
+ selectedButtonView.touchBeganLocation = CGPointMake(CGRectGetWidth(selectedButtonView.frame)/2, CGRectGetHeight(selectedButtonView.frame)/4);
+ [selectedButtonView showStickIndicator];// this will create the indicator CAShapeLayers
+ [stickIndicatorOffsetSliderLabel setText:[LocalizationHelper localizedStringForKey:@"Indicator Offset: %.2f \n", self->selectedButtonView.stickIndicatorXOffset]];
+ }
+ [widgetSizeSliderLabel setText:[LocalizationHelper localizedStringForKey:@"Widget Size: %.2f", self->selectedButtonView.widthFactor]];
+ [widgetHeightSliderLabel setText:[LocalizationHelper localizedStringForKey:@"Widget Height: %.2f", self->selectedButtonView.heightFactor]];
+ [widgetAlphaSliderLabel setText:[LocalizationHelper localizedStringForKey:@"Widget Alpha: %.2f", self->selectedButtonView.backgroundAlpha]];
}
- (void)setControllerCALayerSliderValues: (NSNotification *)notification{
@@ -402,58 +423,78 @@
// setup slider values
CGFloat sizeFactor = [OnScreenControls getControllerLayerSizeFactor:controllerLayer]; // calculated sizeFactor from loaded layer bounds.
- [self.buttonAndControllerSizeSlider setValue:sizeFactor];
- [self.buttonAndControllerHeightSlider setValue:sizeFactor];
+ [self.widgetSizeSlider setValue:sizeFactor];
+ [self.widgetHeightSlider setValue:sizeFactor];
CGFloat alpha = [self.layoutOSC getControllerLayerOpacity:controllerLayer];
- [self.buttonAndControllerAlphaSlider setValue:alpha];
+ [self.widgetAlphaSlider setValue:alpha];
- [buttonSizeSliderLabel setText:[LocalizationHelper localizedStringForKey:@"Widget Size: %.2f", sizeFactor]];
- [buttonHeightSliderLabel setText:[LocalizationHelper localizedStringForKey:@"Widget Height: %.2f", sizeFactor]];
- [buttonAlphaSliderLabel setText:[LocalizationHelper localizedStringForKey:@"Widget Alpha: %.2f", alpha]];
+ [widgetSizeSliderLabel setText:[LocalizationHelper localizedStringForKey:@"Widget Size: %.2f", sizeFactor]];
+ [widgetHeightSliderLabel setText:[LocalizationHelper localizedStringForKey:@"Widget Height: %.2f", sizeFactor]];
+ [widgetAlphaSliderLabel setText:[LocalizationHelper localizedStringForKey:@"Widget Alpha: %.2f", alpha]];
}
-- (void)buttonAndControllerSizeSliderMoved{
- [buttonSizeSliderLabel setText:[LocalizationHelper localizedStringForKey:@"Widget Size: %.2f", self.buttonAndControllerSizeSlider.value]];
- [buttonHeightSliderLabel setText:[LocalizationHelper localizedStringForKey:@"Widget Height: %.2f", self.buttonAndControllerSizeSlider.value]]; // resizing the whole button
- [self.buttonAndControllerHeightSlider setValue: self.buttonAndControllerSizeSlider.value];
+- (void)widgetSizeSliderMoved{
+ [widgetSizeSliderLabel setText:[LocalizationHelper localizedStringForKey:@"Widget Size: %.2f", self.widgetSizeSlider.value]];
+ [widgetHeightSliderLabel setText:[LocalizationHelper localizedStringForKey:@"Widget Height: %.2f", self.widgetSizeSlider.value]]; // resizing the whole button
+ [self.widgetHeightSlider setValue: self.widgetSizeSlider.value];
if(self->selectedButtonView != nil && self->buttonViewSelected){
self->selectedButtonView.translatesAutoresizingMaskIntoConstraints = true; // this is mandatory to prevent unexpected key view location change
// when adjusting width, the buttonView height will be syncronized
- self->selectedButtonView.widthFactor = self->selectedButtonView.heightFactor = self.buttonAndControllerSizeSlider.value;
+ self->selectedButtonView.widthFactor = self->selectedButtonView.heightFactor = self.widgetSizeSlider.value;
[self->selectedButtonView resizeButtonView];
}
if(self->selectedControllerLayer != nil && self->controllerLayerSelected){
- [self.layoutOSC resizeControllerLayerWith:self->selectedControllerLayer and:self.buttonAndControllerSizeSlider.value];
+ [self.layoutOSC resizeControllerLayerWith:self->selectedControllerLayer and:self.widgetSizeSlider.value];
}
}
-- (void)buttonAndControllerHeightSliderMoved{
- [buttonHeightSliderLabel setText:[LocalizationHelper localizedStringForKey:@"Widget Height: %.2f", self.buttonAndControllerHeightSlider.value]];
+- (void)widgetHeightSliderMoved{
+ [widgetHeightSliderLabel setText:[LocalizationHelper localizedStringForKey:@"Widget Height: %.2f", self.widgetHeightSlider.value]];
if(self->selectedButtonView != nil && self->buttonViewSelected){
self->selectedButtonView.translatesAutoresizingMaskIntoConstraints = true; // this is mandatory to prevent unexpected key view location change
- self->selectedButtonView.heightFactor = self.buttonAndControllerHeightSlider.value;
+ self->selectedButtonView.heightFactor = self.widgetHeightSlider.value;
[self->selectedButtonView resizeButtonView];
}
}
-- (void)buttonAndControllerAlphaSliderMoved{
- [buttonAlphaSliderLabel setText:[LocalizationHelper localizedStringForKey:@"Widget Alpha: %.2f", self.buttonAndControllerAlphaSlider.value]];
+- (void)widgetAlphaSliderMoved{
+ [widgetAlphaSliderLabel setText:[LocalizationHelper localizedStringForKey:@"Widget Alpha: %.2f", self.widgetAlphaSlider.value]];
if(self->selectedButtonView != nil && self->buttonViewSelected){
- [self->selectedButtonView adjustButtonTransparencyWithAlpha:self.buttonAndControllerAlphaSlider.value];
+ [self->selectedButtonView adjustButtonTransparencyWithAlpha:self.widgetAlphaSlider.value];
}
if(self->selectedControllerLayer != nil && self->controllerLayerSelected){
- [self.layoutOSC adjustControllerLayerOpacityWith:self->selectedControllerLayer and:self.buttonAndControllerAlphaSlider.value];
+ [self.layoutOSC adjustControllerLayerOpacityWith:self->selectedControllerLayer and:self.widgetAlphaSlider.value];
}
return;
}
+- (void)sensitivitySliderMoved{
+ [sensitivitySliderLabel setText:[LocalizationHelper localizedStringForKey:@"Sensitivity: %.2f", self.sensitivityFactorSlider.value]];
+ if(self->selectedButtonView != nil && self->buttonViewSelected) self->selectedButtonView.sensitivityFactor = self.sensitivityFactorSlider.value;
+ return;
+}
+
+- (void)stickIndicatorOffsetSliderMoved{
+ [stickIndicatorOffsetSliderLabel setText:[LocalizationHelper localizedStringForKey:@"Indicator Offset: %.2f", self.stickIndicatorOffsetSlider.value]];
+ if(self->selectedButtonView != nil && self->buttonViewSelected){
+ self->selectedButtonView.stickIndicatorXOffset = self.stickIndicatorOffsetSlider.value;
+ [self->selectedButtonView updateStickBallPosition];
+ }
+ return;
+}
+
+- (void)showIndicatorOffset{
+ selectedButtonView.touchBeganLocation = CGPointMake(CGRectGetWidth(selectedButtonView.frame)/2, CGRectGetHeight(selectedButtonView.frame)/4);
+ [selectedButtonView showStickIndicator];
+}
+
- (void)setupProfileLableAndSliders{
// self.currentProfileLabel.frame = CGRectMake(0, 0, 180, 35);
// CGFloat profileLabelXPosition = self.view.bounds.size.width - self.currentProfileLabel.frame.size.width - 20;
- CGFloat sliderXPosition = (self.view.bounds.size.width - self.buttonAndControllerSizeSlider.frame.size.width)/2 ;
- CGFloat profileLabelXPosition = self.view.bounds.size.width/2 + (self.buttonAndControllerSizeSlider.frame.size.width)/2 + 8;
+ CGFloat sliderXPosition = (self.view.bounds.size.width - self.widgetSizeSlider.frame.size.width)/2 ;
+ CGFloat profileLabelXPosition = self.view.bounds.size.width/2 + (self.widgetSizeSlider.frame.size.width)/2 + 8;
// Set the label's frame with the calculated x-position
self.currentProfileLabel.frame = CGRectMake(profileLabelXPosition, self.currentProfileLabel.frame.origin.y, self.currentProfileLabel.frame.size.width, self.currentProfileLabel.frame.size.height);
@@ -467,68 +508,117 @@
[self.currentProfileLabel setText:[LocalizationHelper localizedStringForKey:@"Profile: %@",[profilesManager getSelectedProfile].name]]; // display current profile name when profile is being refreshed.
// button size sliders
- self.buttonAndControllerSizeSlider.hidden = NO;
- self.buttonAndControllerSizeSlider.frame = CGRectMake(sliderXPosition, self.buttonAndControllerSizeSlider.frame.origin.y, self.buttonAndControllerSizeSlider.frame.size.width, self.buttonAndControllerSizeSlider.frame.size.height);
- [self.buttonAndControllerSizeSlider addTarget:self action:@selector(buttonAndControllerSizeSliderMoved) forControlEvents:(UIControlEventValueChanged)];
- buttonSizeSliderLabel.text = [LocalizationHelper localizedStringForKey:@"Widget Size"];
- buttonSizeSliderLabel.font = [UIFont systemFontOfSize:23];
- buttonSizeSliderLabel.textColor = [UIColor whiteColor];
- buttonSizeSliderLabel.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5];
- buttonSizeSliderLabel.translatesAutoresizingMaskIntoConstraints = NO; // Disable autoresizing mask for Auto Layout
+ self.widgetSizeSlider.hidden = NO;
+ self.widgetSizeSlider.frame = CGRectMake(sliderXPosition, self.widgetSizeSlider.frame.origin.y, self.widgetSizeSlider.frame.size.width, self.widgetSizeSlider.frame.size.height);
+ [self.widgetSizeSlider addTarget:self action:@selector(widgetSizeSliderMoved) forControlEvents:(UIControlEventValueChanged)];
+ widgetSizeSliderLabel.text = [LocalizationHelper localizedStringForKey:@"Widget Size"];
+ widgetSizeSliderLabel.font = [UIFont systemFontOfSize:18];
+ widgetSizeSliderLabel.textColor = [UIColor whiteColor];
+ widgetSizeSliderLabel.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5];
+ widgetSizeSliderLabel.translatesAutoresizingMaskIntoConstraints = NO; // Disable autoresizing mask for Auto Layout
// Add slider and label to the view
- [self.view addSubview:buttonSizeSliderLabel];
+ [self.view addSubview:widgetSizeSliderLabel];
// Use Auto Layout to position the label relative to the slider
[NSLayoutConstraint activateConstraints:@[
// Position the label to the left of the slider
- [buttonSizeSliderLabel.trailingAnchor constraintEqualToAnchor:self.buttonAndControllerSizeSlider.leadingAnchor constant:-10],
+ [widgetSizeSliderLabel.trailingAnchor constraintEqualToAnchor:self.widgetSizeSlider.leadingAnchor constant:-10],
// Align vertically with the slider
- [buttonSizeSliderLabel.centerYAnchor constraintEqualToAnchor:self.buttonAndControllerSizeSlider.centerYAnchor]
+ [widgetSizeSliderLabel.centerYAnchor constraintEqualToAnchor:self.widgetSizeSlider.centerYAnchor]
]];
- buttonSizeSliderLabel.hidden = NO;
+ widgetSizeSliderLabel.hidden = NO;
// button height sliders
- self.buttonAndControllerHeightSlider.hidden = NO;
- self.buttonAndControllerHeightSlider.frame = CGRectMake(sliderXPosition, self.buttonAndControllerHeightSlider.frame.origin.y, self.buttonAndControllerHeightSlider.frame.size.width, self.buttonAndControllerHeightSlider.frame.size.height);
- [self.buttonAndControllerHeightSlider addTarget:self action:@selector(buttonAndControllerHeightSliderMoved) forControlEvents:(UIControlEventValueChanged)];
+ self.widgetHeightSlider.hidden = NO;
+ self.widgetHeightSlider.frame = CGRectMake(sliderXPosition, self.widgetHeightSlider.frame.origin.y, self.widgetHeightSlider.frame.size.width, self.widgetHeightSlider.frame.size.height);
+ [self.widgetHeightSlider addTarget:self action:@selector(widgetHeightSliderMoved) forControlEvents:(UIControlEventValueChanged)];
// button height label
- buttonHeightSliderLabel.text = [LocalizationHelper localizedStringForKey:@"Widget Height"];
- buttonHeightSliderLabel.font = [UIFont systemFontOfSize:23];
- buttonHeightSliderLabel.textColor = [UIColor whiteColor];
- buttonHeightSliderLabel.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5];
- buttonHeightSliderLabel.translatesAutoresizingMaskIntoConstraints = NO; // Disable autoresizing mask for Auto Layout
+ widgetHeightSliderLabel.text = [LocalizationHelper localizedStringForKey:@"Widget Height"];
+ widgetHeightSliderLabel.font = [UIFont systemFontOfSize:18];
+ widgetHeightSliderLabel.textColor = [UIColor whiteColor];
+ widgetHeightSliderLabel.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5];
+ widgetHeightSliderLabel.translatesAutoresizingMaskIntoConstraints = NO; // Disable autoresizing mask for Auto Layout
// Add slider and label to the view
- [self.view addSubview:buttonHeightSliderLabel];
+ [self.view addSubview:widgetHeightSliderLabel];
// Use Auto Layout to position the label relative to the slider
[NSLayoutConstraint activateConstraints:@[
// Position the label to the left of the slider
- [buttonHeightSliderLabel.trailingAnchor constraintEqualToAnchor:self.buttonAndControllerHeightSlider.leadingAnchor constant:-10],
+ [widgetHeightSliderLabel.trailingAnchor constraintEqualToAnchor:self.widgetHeightSlider.leadingAnchor constant:-10],
// Align vertically with the slider
- [buttonHeightSliderLabel.centerYAnchor constraintEqualToAnchor:self.buttonAndControllerHeightSlider.centerYAnchor]
+ [widgetHeightSliderLabel.centerYAnchor constraintEqualToAnchor:self.widgetHeightSlider.centerYAnchor]
]];
- buttonHeightSliderLabel.hidden = NO;
+ widgetHeightSliderLabel.hidden = NO;
-
- self.buttonAndControllerAlphaSlider.hidden = NO;
- self.buttonAndControllerAlphaSlider.frame = CGRectMake(sliderXPosition, self.buttonAndControllerAlphaSlider.frame.origin.y, self.buttonAndControllerAlphaSlider.frame.size.width, self.buttonAndControllerAlphaSlider.frame.size.height);
- [self.buttonAndControllerAlphaSlider addTarget:self action:@selector(buttonAndControllerAlphaSliderMoved) forControlEvents:(UIControlEventValueChanged)];
-
// button alpha label
-
- buttonAlphaSliderLabel.text = [LocalizationHelper localizedStringForKey:@"Widget Alpha"];
- buttonAlphaSliderLabel.font = [UIFont systemFontOfSize:23];
- buttonAlphaSliderLabel.textColor = [UIColor whiteColor];
- buttonAlphaSliderLabel.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5];
- buttonAlphaSliderLabel.translatesAutoresizingMaskIntoConstraints = NO; // Disable autoresizing mask for Auto Layout
+ self.widgetAlphaSlider.hidden = NO;
+ self.widgetAlphaSlider.frame = CGRectMake(sliderXPosition, self.widgetAlphaSlider.frame.origin.y, self.widgetAlphaSlider.frame.size.width, self.widgetAlphaSlider.frame.size.height);
+ [self.widgetAlphaSlider addTarget:self action:@selector(widgetAlphaSliderMoved) forControlEvents:(UIControlEventValueChanged)];
+ widgetAlphaSliderLabel.text = [LocalizationHelper localizedStringForKey:@"Widget Alpha"];
+ widgetAlphaSliderLabel.font = [UIFont systemFontOfSize:18];
+ widgetAlphaSliderLabel.textColor = [UIColor whiteColor];
+ widgetAlphaSliderLabel.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5];
+ widgetAlphaSliderLabel.translatesAutoresizingMaskIntoConstraints = NO; // Disable autoresizing mask for Auto Layout
// Add slider and label to the view
- [self.view addSubview:buttonAlphaSliderLabel];
+ [self.view addSubview:widgetAlphaSliderLabel];
// Use Auto Layout to position the label relative to the slider
[NSLayoutConstraint activateConstraints:@[
// Position the label to the left of the slider
- [buttonAlphaSliderLabel.trailingAnchor constraintEqualToAnchor:self.buttonAndControllerAlphaSlider.leadingAnchor constant:-10],
+ [widgetAlphaSliderLabel.trailingAnchor constraintEqualToAnchor:self.widgetAlphaSlider.leadingAnchor constant:-10],
// Align vertically with the slider
- [buttonAlphaSliderLabel.centerYAnchor constraintEqualToAnchor:self.buttonAndControllerAlphaSlider.centerYAnchor]
+ [widgetAlphaSliderLabel.centerYAnchor constraintEqualToAnchor:self.widgetAlphaSlider.centerYAnchor]
]];
- buttonAlphaSliderLabel.hidden = NO;
+ widgetAlphaSliderLabel.hidden = NO;
+
+
+ // sensivity slider
+ self.sensitivityFactorSlider.hidden = YES;
+ self.sensitivityFactorSlider.frame = CGRectMake(sliderXPosition, self.sensitivityFactorSlider.frame.origin.y, self.sensitivityFactorSlider.frame.size.width, self.sensitivityFactorSlider.frame.size.height);
+ [self.sensitivityFactorSlider addTarget:self action:@selector(sensitivitySliderMoved) forControlEvents:(UIControlEventValueChanged)];
+ sensitivitySliderLabel.text = [LocalizationHelper localizedStringForKey:@"Sensitivity"];
+ sensitivitySliderLabel.font = [UIFont systemFontOfSize:18];
+ sensitivitySliderLabel.textColor = [UIColor whiteColor];
+ sensitivitySliderLabel.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5];
+ sensitivitySliderLabel.translatesAutoresizingMaskIntoConstraints = NO; // Disable autoresizing mask for Auto Layout
+ // Add slider and label to the view
+ [self.view addSubview:sensitivitySliderLabel];
+ // Use Auto Layout to position the label relative to the slider
+ [NSLayoutConstraint activateConstraints:@[
+ // Position the label to the left of the slider
+ [sensitivitySliderLabel.trailingAnchor constraintEqualToAnchor:self.sensitivityFactorSlider.leadingAnchor constant:-10],
+ // Align vertically with the slider
+ [sensitivitySliderLabel.centerYAnchor constraintEqualToAnchor:self.sensitivityFactorSlider.centerYAnchor]
+ ]];
+ sensitivitySliderLabel.hidden = self.sensitivityFactorSlider.hidden;
+
+ // stick indicator offset slider
+ self.stickIndicatorOffsetSlider.hidden = YES;
+ self.stickIndicatorOffsetSlider.frame = CGRectMake(sliderXPosition, self.stickIndicatorOffsetSlider.frame.origin.y, self.stickIndicatorOffsetSlider.frame.size.width, self.stickIndicatorOffsetSlider.frame.size.height); // make this label bigger to show some tips
+ [self.stickIndicatorOffsetSlider addTarget:self action:@selector(stickIndicatorOffsetSliderMoved) forControlEvents:(UIControlEventValueChanged)];
+ stickIndicatorOffsetSliderLabel.text = [LocalizationHelper localizedStringForKey:@"Indicator Offset"];
+ stickIndicatorOffsetSliderLabel.font = [UIFont systemFontOfSize:18];
+ stickIndicatorOffsetSliderLabel.textColor = [UIColor whiteColor];
+ stickIndicatorOffsetSliderLabel.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5];
+ stickIndicatorOffsetSliderLabel.translatesAutoresizingMaskIntoConstraints = NO; // Disable autoresizing mask for Auto Layout
+ // tips for stick indicator
+ stickIndicatorOffsetExplain.text = [LocalizationHelper localizedStringForKey:@"Cross: assumed touch point. Ball: indicator location"];
+ //stickIndicatorOffsetExplain.frame = CGRectMake(sliderXPosition, self.stickIndicatorOffsetSlider.frame.origin.y + self.stickIndicatorOffsetSlider.frame.size.height, self.stickIndicatorOffsetSlider.frame.size.width, self.stickIndicatorOffsetSlider.frame.size.height); // label bigger show some tips
+ stickIndicatorOffsetExplain.font = [UIFont systemFontOfSize:18];
+ stickIndicatorOffsetExplain.textColor = [UIColor whiteColor];
+ stickIndicatorOffsetExplain.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5];
+ stickIndicatorOffsetExplain.translatesAutoresizingMaskIntoConstraints = NO; // Disable autoresizing mask for Auto Layout
+ // Add slider and label to the view
+ [self.view addSubview:stickIndicatorOffsetSliderLabel];
+ [self.view addSubview:stickIndicatorOffsetExplain];
+ // Use Auto Layout to position the label relative to the slider
+ [NSLayoutConstraint activateConstraints:@[
+ // Position the label to the left of the slider
+ [stickIndicatorOffsetSliderLabel.trailingAnchor constraintEqualToAnchor:self.stickIndicatorOffsetSlider.leadingAnchor constant:-10],
+ // Align vertically with the slider
+ [stickIndicatorOffsetSliderLabel.centerYAnchor constraintEqualToAnchor:self.stickIndicatorOffsetSlider.centerYAnchor],
+ // Position the explain label
+ [stickIndicatorOffsetExplain.centerXAnchor constraintEqualToAnchor:self.stickIndicatorOffsetSlider.leadingAnchor constant:-10],
+ [stickIndicatorOffsetExplain.topAnchor constraintEqualToAnchor:self.stickIndicatorOffsetSlider.bottomAnchor]
+ ]];
+ stickIndicatorOffsetSliderLabel.hidden = stickIndicatorOffsetExplain.hidden = self.stickIndicatorOffsetSlider.hidden;
}
@@ -590,12 +680,12 @@
[self OSCLayoutChanged]; // fades the 'Undo Button' out
};
self.currentProfileLabel.hidden = YES; // Hide Current Profile display before entering the profile table view
- self.buttonAndControllerSizeSlider.hidden = YES;
- self.buttonAndControllerHeightSlider.hidden = YES;
- self.buttonAndControllerAlphaSlider.hidden = YES;
- buttonSizeSliderLabel.hidden = YES;
- buttonHeightSliderLabel.hidden = YES;
- buttonAlphaSliderLabel.hidden = YES;
+ self.widgetSizeSlider.hidden = YES;
+ self.widgetHeightSlider.hidden = YES;
+ self.widgetAlphaSlider.hidden = YES;
+ widgetSizeSliderLabel.hidden = YES;
+ widgetHeightSliderLabel.hidden = YES;
+ widgetAlphaSliderLabel.hidden = YES;
_oscProfilesTableViewController.currentOSCButtonLayers = self.layoutOSC.OSCButtonLayers;
[self presentViewController:_oscProfilesTableViewController animated:YES completion:nil];
}
diff --git a/Limelight/mul.lproj/iPhone.xcstrings b/Limelight/mul.lproj/iPhone.xcstrings
index 0c5a4d50..5a8fb16c 100644
--- a/Limelight/mul.lproj/iPhone.xcstrings
+++ b/Limelight/mul.lproj/iPhone.xcstrings
@@ -2552,30 +2552,30 @@
}
},
"yJC-bq-EOU.text" : {
- "comment" : "Class = \"UILabel\"; text = \"Current Profile:\"; ObjectID = \"yJC-bq-EOU\";",
+ "comment" : "Class = \"UILabel\"; text = \"Profile:\"; ObjectID = \"yJC-bq-EOU\";",
"extractionState" : "extracted_with_value",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "new",
- "value" : "Current Profile:"
+ "value" : "Profile:"
}
},
"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" : "当前布局:"
}
}