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
14 changes: 14 additions & 0 deletions airsync-mac/Screens/HomeScreen/PhoneView/DeviceStatusView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
//

import SwiftUI
import AppKit

struct DeviceStatusView: View {
@ObservedObject var appState = AppState.shared
Expand Down Expand Up @@ -74,10 +75,23 @@ struct DeviceStatusView: View {
if !editing {
WebSocketServer.shared.setVolume(Int(tempVolume))
}
if editing {
NSHapticFeedbackManager.defaultPerformer.perform(.generic, performanceTime: .default)
} else {
NSHapticFeedbackManager.defaultPerformer.perform(.generic, performanceTime: .default)
}
isDragging = editing
}
)
.focusable(false)
.onChange(of: tempVolume) { oldValue, newValue in
guard isDragging else { return }
let lastTick = floor(oldValue / 5.0) * 5.0
let currentTick = floor(newValue / 5.0) * 5.0
if currentTick != lastTick {
NSHapticFeedbackManager.defaultPerformer.perform(.levelChange, performanceTime: .default)
}
}

Image(systemName: "speaker.wave.3.fill")
}
Expand Down
15 changes: 14 additions & 1 deletion airsync-mac/Screens/HomeScreen/PhoneView/MediaPlayerView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

import SwiftUI
import Combine
import AppKit

// MARK: - Seekbar sub-view

Expand All @@ -22,13 +23,25 @@ private struct MediaSeekbarView: View {
in: 0...max(music.duration, 1),
onEditingChanged: { editing in
appState.isDraggingMedia = editing
if !editing {
if editing {
NSHapticFeedbackManager.defaultPerformer.perform(.generic, performanceTime: .default)
} else {
NSHapticFeedbackManager.defaultPerformer.perform(.generic, performanceTime: .default)
appState.handleMediaSeek(to: appState.mediaPosition)
}
}
)
.accentColor(.primary)
.padding(.horizontal, 2)
.onChange(of: appState.mediaPosition) { oldValue, newValue in
guard appState.isDraggingMedia else { return }
let tickInterval: Double = 1.0
let lastTick = floor(oldValue / tickInterval) * tickInterval
let currentTick = floor(newValue / tickInterval) * tickInterval
if currentTick != lastTick {
NSHapticFeedbackManager.defaultPerformer.perform(.levelChange, performanceTime: .default)
}
}

// Time labels
HStack {
Expand Down
27 changes: 25 additions & 2 deletions airsync-mac/Screens/Settings/MenubarSettingsView.swift
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
import SwiftUI
import AppKit

struct MenubarSettingsView: View {
@ObservedObject var appState = AppState.shared
@State private var showingPlusPopover = false
@State private var plusPopoverMessage = ""
@State private var showMarqueeInfo = false
@State private var isDraggingFontSize = false
@State private var isDraggingTextLength = false

var body: some View {
ScrollView {
Expand All @@ -17,10 +20,20 @@ struct MenubarSettingsView: View {
Slider(
value: $appState.menubarFontSize,
in: 10...16,
step: 1
step: 1,
onEditingChanged: { editing in
isDraggingFontSize = editing
NSHapticFeedbackManager.defaultPerformer.perform(.generic, performanceTime: .default)
}
)
.frame(width: 150)
.controlSize(.small)
.onChange(of: appState.menubarFontSize) { oldValue, newValue in
guard isDraggingFontSize else { return }
if newValue != oldValue {
NSHapticFeedbackManager.defaultPerformer.perform(.levelChange, performanceTime: .default)
}
}

Text("\(Int(appState.menubarFontSize))")
.font(.system(size: 11, design: .monospaced))
Expand Down Expand Up @@ -53,10 +66,20 @@ struct MenubarSettingsView: View {
set: { appState.menubarTextMaxLength = Int($0) }
),
in: 50...300,
step: 10
step: 10,
onEditingChanged: { editing in
isDraggingTextLength = editing
NSHapticFeedbackManager.defaultPerformer.perform(.generic, performanceTime: .default)
}
)
.frame(width: 150)
.controlSize(.small)
.onChange(of: appState.menubarTextMaxLength) { oldValue, newValue in
guard isDraggingTextLength else { return }
if newValue != oldValue {
NSHapticFeedbackManager.defaultPerformer.perform(.levelChange, performanceTime: .default)
}
}

Text("\(appState.menubarTextMaxLength)pt")
.font(.system(size: 11, design: .monospaced))
Expand Down
27 changes: 27 additions & 0 deletions airsync-mac/Screens/Settings/MirroringSettingsView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
//

import SwiftUI
import AppKit

struct MirroringSettingsView: View {
@ObservedObject var appState = AppState.shared
Expand All @@ -21,6 +22,8 @@ struct MirroringSettingsView: View {
@State private var tempBitrate: Double = 4.00
@State private var tempResolution: Double = 1200.00
@State private var isDragging = false
@State private var isDraggingBitrate = false
@State private var isDraggingResolution = false
@State private var xCoords: String = "0"
@State private var yCoords: String = "0"

Expand Down Expand Up @@ -88,11 +91,23 @@ struct MirroringSettingsView: View {
if !editing {
AppState.shared.scrcpyBitrate = Int(tempBitrate)
}
if editing {
NSHapticFeedbackManager.defaultPerformer.perform(.generic, performanceTime: .default)
} else {
NSHapticFeedbackManager.defaultPerformer.perform(.generic, performanceTime: .default)
}
isDraggingBitrate = editing
isDragging = editing
}
)
.focusable(false)
.frame(maxWidth: 150)
.onChange(of: tempBitrate) { oldValue, newValue in
guard isDraggingBitrate else { return }
if newValue != oldValue {
NSHapticFeedbackManager.defaultPerformer.perform(.levelChange, performanceTime: .default)
}
}

Text(String(format: L("settings.mirroring.bitrateFormat"), AppState.shared.scrcpyBitrate))
.monospacedDigit()
Expand All @@ -112,11 +127,23 @@ struct MirroringSettingsView: View {
if !editing {
AppState.shared.scrcpyResolution = Int(tempResolution)
}
if editing {
NSHapticFeedbackManager.defaultPerformer.perform(.generic, performanceTime: .default)
} else {
NSHapticFeedbackManager.defaultPerformer.perform(.generic, performanceTime: .default)
}
isDraggingResolution = editing
isDragging = editing
}
)
.focusable(false)
.frame(maxWidth: 150)
.onChange(of: tempResolution) { oldValue, newValue in
guard isDraggingResolution else { return }
if newValue != oldValue {
NSHapticFeedbackManager.defaultPerformer.perform(.levelChange, performanceTime: .default)
}
}

Text("\(AppState.shared.scrcpyResolution)")
.monospacedDigit()
Expand Down