Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ extension DisplaysSettingsPane {
let anchor: KeyboardVisualizerAnchor
let placementMode: KeyboardVisualizerSettings.PlacementMode
let stackAxis: KeyboardVisualizerStackAxis
let keyboardScale: Double
let windowPadding: Double
let customPositionNormalizedX: Double
let customPositionNormalizedY: Double
Expand Down Expand Up @@ -113,10 +114,15 @@ private extension DisplaysSettingsPane.PreviewCard {
func markerSize(in displaySize: CGSize) -> CGSize {
let maximumSize = self.maximumMarkerSize
let scale = self.markerScale(in: displaySize, maximumSize: maximumSize)
let keyboardScale = CGFloat(self.keyboardScale).clamped(to: 0.5...2.0)
let scaledSize = CGSize(
width: maximumSize.width * scale * keyboardScale,
height: maximumSize.height * scale * keyboardScale
)

return CGSize(
width: maximumSize.width * scale,
height: maximumSize.height * scale
width: min(scaledSize.width, max(displaySize.width - Spacing.xs * 2, Spacing.xs)),
height: min(scaledSize.height, max(displaySize.height - Spacing.xs * 2, Spacing.xs))
)
}

Expand Down Expand Up @@ -173,9 +179,16 @@ private extension DisplaysSettingsPane.PreviewCard {
}

func customPositionOffset(in size: CGSize, markerSize: CGSize) -> CGSize {
CGSize(
width: size.width * CGFloat(self.customPositionNormalizedX) - size.width / 2,
height: size.height / 2 - size.height * CGFloat(self.customPositionNormalizedY)
let halfMarkerWidth = markerSize.width / 2
let halfMarkerHeight = markerSize.height / 2
let x = (size.width * CGFloat(self.customPositionNormalizedX) - size.width / 2)
.clamped(minimum: -size.width / 2 + halfMarkerWidth, maximum: size.width / 2 - halfMarkerWidth)
let y = (size.height / 2 - size.height * CGFloat(self.customPositionNormalizedY))
.clamped(minimum: -size.height / 2 + halfMarkerHeight, maximum: size.height / 2 - halfMarkerHeight)

return CGSize(
width: x,
height: y
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ struct DisplaysSettingsPane: View {
anchor: self.model.selectedAnchor,
placementMode: self.model.placementMode,
stackAxis: self.model.stackAxis,
keyboardScale: self.model.scale,
windowPadding: self.model.windowPadding,
customPositionNormalizedX: self.model.customPositionNormalizedX,
customPositionNormalizedY: self.model.customPositionNormalizedY,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,8 @@ final class DisplaysSettingsPaneViewModel: ObservableObject {
didSet { self.keyboardVisualizerSettings.customPositionNormalizedY = CGFloat(self.customPositionNormalizedY) }
}

var stackAxis: KeyboardVisualizerStackAxis {
self.keyboardVisualizerSettings.stackAxis
}
@Published private(set) var stackAxis: KeyboardVisualizerStackAxis
@Published private(set) var scale: Double

var isCustomPlacement: Bool {
self.placementMode == .custom
Expand Down Expand Up @@ -109,6 +108,8 @@ final class DisplaysSettingsPaneViewModel: ObservableObject {
self.windowPadding = Double(keyboardVisualizerSettings.windowPadding)
self.customPositionNormalizedX = Double(keyboardVisualizerSettings.customPositionNormalizedX)
self.customPositionNormalizedY = Double(keyboardVisualizerSettings.customPositionNormalizedY)
self.stackAxis = keyboardVisualizerSettings.stackAxis
self.scale = Double(keyboardVisualizerSettings.scale)

self.screensService.screensDidChange
.receive(on: RunLoop.main)
Expand All @@ -118,6 +119,15 @@ final class DisplaysSettingsPaneViewModel: ObservableObject {
self.selectedScreen = self.resolveSelectedScreen(for: self.keyboardVisualizerSettings.screenID)
}
.store(in: &self.cancellables)

self.keyboardVisualizerSettings.placementChanges
.receive(on: RunLoop.main)
.sink { [weak self, weak keyboardVisualizerSettings] in
guard let self, let keyboardVisualizerSettings else { return }
self.stackAxis = keyboardVisualizerSettings.stackAxis
self.scale = Double(keyboardVisualizerSettings.scale)
}
.store(in: &self.cancellables)
}

func toggleCustomPositionSetting() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,7 @@ final class KeyboardVisualizerSettings: KeyboardVisualizerSettingsProtocol, HasS
}
set {
self.storedScale = min(max(newValue, 0.5), 2.0)
self.placementChangesSubject.send(())
}
}

Expand Down
Loading