Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Flow container #413

Merged
merged 18 commits into from
Dec 28, 2024
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
18 changes: 17 additions & 1 deletion DockDoor.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,8 @@
BB4ED9072C3C75CA00BBDD16 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = BB4ED9062C3C75CA00BBDD16 /* Localizable.xcstrings */; };
BB4ED9092C3CD97400BBDD16 /* Traffic Light Buttons.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB4ED9082C3CD96D00BBDD16 /* Traffic Light Buttons.swift */; };
BB52EDF02C5BEFE3006A64A4 /* HiddenModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB52EDEF2C5BEFE3006A64A4 /* HiddenModifier.swift */; };
BB6021D02D1E60EA00D47C86 /* Flow Container Calculations.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB6021CF2D1E60E100D47C86 /* Flow Container Calculations.swift */; };
BB6021D22D1E613800D47C86 /* Window Image Sizing Calculations.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB6021D12D1E613100D47C86 /* Window Image Sizing Calculations.swift */; };
BB6A4F1C2C1CFCFF00CB4C9E /* PermissionsSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB6A4F1B2C1CFCFF00CB4C9E /* PermissionsSettingsView.swift */; };
BB7CA33D2C31F1B00012E303 /* WindowManipulationObservers.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB7CA33C2C31F1B00012E303 /* WindowManipulationObservers.swift */; };
BB918BB52CF7613400931236 /* CGRect.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB918BB42CF7613200931236 /* CGRect.swift */; };
Expand Down Expand Up @@ -152,6 +154,8 @@
BB4ED9062C3C75CA00BBDD16 /* Localizable.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = Localizable.xcstrings; sourceTree = "<group>"; };
BB4ED9082C3CD96D00BBDD16 /* Traffic Light Buttons.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Traffic Light Buttons.swift"; sourceTree = "<group>"; };
BB52EDEF2C5BEFE3006A64A4 /* HiddenModifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HiddenModifier.swift; sourceTree = "<group>"; };
BB6021CF2D1E60E100D47C86 /* Flow Container Calculations.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Flow Container Calculations.swift"; sourceTree = "<group>"; };
BB6021D12D1E613100D47C86 /* Window Image Sizing Calculations.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Window Image Sizing Calculations.swift"; sourceTree = "<group>"; };
BB6A4F1B2C1CFCFF00CB4C9E /* PermissionsSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PermissionsSettingsView.swift; sourceTree = "<group>"; };
BB7CA33C2C31F1B00012E303 /* WindowManipulationObservers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WindowManipulationObservers.swift; sourceTree = "<group>"; };
BB8247782C2889B20098A440 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
Expand Down Expand Up @@ -369,8 +373,8 @@
BB4B44492C372A42006680DC /* Hover Window */ = {
isa = PBXGroup;
children = (
BB6021CE2D1E60C700D47C86 /* WindowPreview Supporting */,
BB1A85F62D08E52A00326297 /* DragPreviewCoordinator.swift */,
BB3D6EAD2C82E4AE00FFE584 /* WindowDismissalContainer.swift */,
BBF413932C40977F00AA6733 /* WindowPreviewHoverContainer.swift */,
BB4B444A2C372A4C006680DC /* WindowPreview.swift */,
BBF413912C40618800AA6733 /* FullSizePreviewView.swift */,
Expand All @@ -380,6 +384,16 @@
path = "Hover Window";
sourceTree = "<group>";
};
BB6021CE2D1E60C700D47C86 /* WindowPreview Supporting */ = {
isa = PBXGroup;
children = (
BB3D6EAD2C82E4AE00FFE584 /* WindowDismissalContainer.swift */,
BB6021D12D1E613100D47C86 /* Window Image Sizing Calculations.swift */,
BB6021CF2D1E60E100D47C86 /* Flow Container Calculations.swift */,
);
path = "WindowPreview Supporting";
sourceTree = "<group>";
};
BB750D232C8E939A00245E3E /* FluidGradient */ = {
isa = PBXGroup;
children = (
Expand Down Expand Up @@ -565,6 +579,7 @@
BB6A4F1C2C1CFCFF00CB4C9E /* PermissionsSettingsView.swift in Sources */,
BB3D6EB02C84E58400FFE584 /* NSScreen.swift in Sources */,
BB3D6EAE2C82E4B400FFE584 /* WindowDismissalContainer.swift in Sources */,
BB6021D02D1E60EA00D47C86 /* Flow Container Calculations.swift in Sources */,
3A1622BA2C8C0FF100D318EE /* NoBtnStyle.swift in Sources */,
BB3967FD2C291D5A004F1AB6 /* StackedShadow.swift in Sources */,
3A1622CE2C8D5F8500D318EE /* FirstTimeCongratsTabView.swift in Sources */,
Expand Down Expand Up @@ -601,6 +616,7 @@
BBA153FA2C11FFD500119C02 /* consts.swift in Sources */,
BBA153F62C115DDA00119C02 /* AppDelegate.swift in Sources */,
BB918BB52CF7613400931236 /* CGRect.swift in Sources */,
BB6021D22D1E613800D47C86 /* Window Image Sizing Calculations.swift in Sources */,
3A1622CA2C8D5E4600D318EE /* FirstTimeIntroTabView.swift in Sources */,
BB15E1F72C8FC05A002ECFB9 /* UniformCardView.swift in Sources */,
BBA153F82C11604400119C02 /* SharedPreviewWindowCoordinator.swift in Sources */,
Expand Down
20 changes: 18 additions & 2 deletions DockDoor/Components/DynStack.swift
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,32 @@ import SwiftUI
struct DynStack<C: View>: View {
var direction: Axis
var spacing: Double
var alignment: Alignment
@ViewBuilder var content: () -> C

init(
direction: Axis,
spacing: Double = 0,
alignment: Alignment = .topLeading,
@ViewBuilder content: @escaping () -> C
) {
self.direction = direction
self.spacing = spacing
self.alignment = alignment
self.content = content
}

var body: some View {
if direction == .vertical {
VStack(spacing: spacing) {
VStack(alignment: .leading, spacing: spacing) {
content()
}
.frame(alignment: alignment)
} else {
HStack(spacing: spacing) {
HStack(alignment: .top, spacing: spacing) {
content()
}
.frame(alignment: alignment)
}
}
}
6 changes: 3 additions & 3 deletions DockDoor/Extensions/Button Styles/AccentButton.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ struct AccentButtonStyle: ButtonStyle {
@State private var hovering = false
func makeBody(configuration: Self.Configuration) -> some View {
configuration.label
.padding(.horizontal, small ? 12 : 16)
.padding(.vertical, small ? 6 : 8)
.padding(.horizontal, small ? 8 : 16)
.padding(.vertical, small ? 4 : 8)
.background(
color.lighter(by: hovering && !configuration.isPressed ? 0.05 : 0),
in: RoundedRectangle(cornerRadius: 12, style: .continuous)
Expand All @@ -18,6 +18,6 @@ struct AccentButtonStyle: ButtonStyle {
hovering = newHovering
}
.foregroundStyle(.white)
.font(.system(size: small ? 13 : 14, weight: .medium))
.font(.system(size: small ? 10 : 14, weight: .medium))
}
}
23 changes: 23 additions & 0 deletions DockDoor/Extensions/NSScreen.swift
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,26 @@ extension NSScreen {
return CGPoint(x: flippedPoint.x - frame.minX, y: flippedPoint.y - frame.minY)
}
}

extension NSScreen {
// Generate a unique identifier string for a screen
func uniqueIdentifier() -> String {
// Combine multiple properties to create a reliable hash
let components = [
deviceDescription[NSDeviceDescriptionKey("NSScreenNumber")] as? NSNumber as Any,
frame.width,
frame.height,
deviceDescription[NSDeviceDescriptionKey("NSDeviceBitsPerSample")] as? NSNumber as Any,
deviceDescription[NSDeviceDescriptionKey("NSDeviceColorSpaceName")] as? String as Any,
].compactMap { String(describing: $0) }

return components.joined(separator: "-")
}

// Look up a screen using a saved identifier
static func findScreen(byIdentifier identifier: String) -> NSScreen? {
NSScreen.screens.first { screen in
screen.uniqueIdentifier() == identifier
}
}
}
Loading
Loading