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
4 changes: 0 additions & 4 deletions Loop.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,6 @@
A8BE09DB2B113FD700DBB242 /* KeycorderModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8BE09DA2B113FD700DBB242 /* KeycorderModel.swift */; };
A8D5A7D62A91384D004EA5BB /* DirectionSelectorSquareSegment.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8D5A7D52A91384D004EA5BB /* DirectionSelectorSquareSegment.swift */; };
A8D5A7D82A913862004EA5BB /* DirectionSelectorCircleSegment.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8D5A7D72A913862004EA5BB /* DirectionSelectorCircleSegment.swift */; };
A8D5A7DA2A913B4C004EA5BB /* RadialMenuDirectionSelectorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8D5A7D92A913B4C004EA5BB /* RadialMenuDirectionSelectorView.swift */; };
A8D6D2FF2B6C87F80061B11F /* PaddingConfigurationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8D6D2FE2B6C87F80061B11F /* PaddingConfigurationView.swift */; };
A8D6D3012B6C894C0061B11F /* PaddingModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8D6D3002B6C894C0061B11F /* PaddingModel.swift */; };
A8D6D3032B6C8D750061B11F /* PaddingPreviewView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8D6D3022B6C8D750061B11F /* PaddingPreviewView.swift */; };
Expand Down Expand Up @@ -160,7 +159,6 @@
A8BE09DA2B113FD700DBB242 /* KeycorderModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeycorderModel.swift; sourceTree = "<group>"; };
A8D5A7D52A91384D004EA5BB /* DirectionSelectorSquareSegment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DirectionSelectorSquareSegment.swift; sourceTree = "<group>"; };
A8D5A7D72A913862004EA5BB /* DirectionSelectorCircleSegment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DirectionSelectorCircleSegment.swift; sourceTree = "<group>"; };
A8D5A7D92A913B4C004EA5BB /* RadialMenuDirectionSelectorView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RadialMenuDirectionSelectorView.swift; sourceTree = "<group>"; };
A8D6D2FE2B6C87F80061B11F /* PaddingConfigurationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaddingConfigurationView.swift; sourceTree = "<group>"; };
A8D6D3002B6C894C0061B11F /* PaddingModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaddingModel.swift; sourceTree = "<group>"; };
A8D6D3022B6C8D750061B11F /* PaddingPreviewView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PaddingPreviewView.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -345,7 +343,6 @@
children = (
A8E59C49297F98670064D4BA /* RadialMenuController.swift */,
A8789F6629805B190040512E /* RadialMenuView.swift */,
A8D5A7D92A913B4C004EA5BB /* RadialMenuDirectionSelectorView.swift */,
A8D5A7D52A91384D004EA5BB /* DirectionSelectorSquareSegment.swift */,
A8D5A7D72A913862004EA5BB /* DirectionSelectorCircleSegment.swift */,
);
Expand Down Expand Up @@ -602,7 +599,6 @@
A8789F6929805B340040512E /* PreviewView.swift in Sources */,
A84497C92B393595003D4CF3 /* CustomKeybindView.swift in Sources */,
A882660829809F6F00BCB197 /* GeneralSettingsView.swift in Sources */,
A8D5A7DA2A913B4C004EA5BB /* RadialMenuDirectionSelectorView.swift in Sources */,
A8E59C50298045D90064D4BA /* PreviewController.swift in Sources */,
A81989062AC8EDB300EFF7A1 /* MenuBarHeaderText.swift in Sources */,
A86CB7332A3D22E7006A78F2 /* WindowEngine.swift in Sources */,
Expand Down
8 changes: 7 additions & 1 deletion Loop/Extensions/Angle+Extensions.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,18 @@

import SwiftUI

// Returns an Angle in the range 0° ..< 360°
extension Angle {
func normalized() -> Angle {
let degrees = (self.degrees.truncatingRemainder(dividingBy: 360) + 360)
.truncatingRemainder(dividingBy: 360)

return Angle(degrees: degrees)
}

func angleDifference(to angle2: Angle) -> Angle {
let angle1 = self.degrees
let angle2 = angle2.degrees
let diff: Double = ( angle2 - angle1 + 180.0 ).truncatingRemainder(dividingBy: 360.0) - 180.0
return Angle(degrees: diff < -180 ? diff + 360 : diff)
}
}
23 changes: 13 additions & 10 deletions Loop/Managers/LoopManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -110,13 +110,13 @@ class LoopManager: ObservableObject {
// If mouse over 50 points away, select half or quarter positions
if distanceToMouse > pow(50 - Defaults[.radialMenuThickness], 2) {
switch Int((angleToMouse.normalized().degrees + 22.5) / 45) {
case 0, 8: resizeDirection = .cycleRight
case 0, 8: resizeDirection = .rightHalf
case 1: resizeDirection = .bottomRightQuarter
case 2: resizeDirection = .cycleBottom
case 2: resizeDirection = .bottomHalf
case 3: resizeDirection = .bottomLeftQuarter
case 4: resizeDirection = .cycleLeft
case 4: resizeDirection = .leftHalf
case 5: resizeDirection = .topLeftQuarter
case 6: resizeDirection = .cycleTop
case 6: resizeDirection = .topHalf
case 7: resizeDirection = .topRightQuarter
default: resizeDirection = .noAction
}
Expand All @@ -126,7 +126,7 @@ class LoopManager: ObservableObject {
resizeDirection = .maximize
}

if resizeDirection != self.currentAction.direction.base {
if resizeDirection != self.currentAction.direction {
changeAction(.init(resizeDirection))
}
}
Expand All @@ -151,16 +151,19 @@ class LoopManager: ObservableObject {

var newAction = action

if newAction.direction.isPresetCyclable {
newAction = .init(newAction.direction.nextCyclingDirection(from: self.currentAction.direction))
}

if newAction.direction == .cycle {
guard let cycle = action.cycle else {
return
}

var nextIndex = (cycle.firstIndex(of: self.currentAction) ?? -1) + 1

if self.currentAction.direction != .custom {
nextIndex = (cycle.firstIndex(where: {
$0.direction == self.currentAction.direction
}) ?? -1) + 1
}

if nextIndex >= cycle.count {
nextIndex = 0
}
Expand Down Expand Up @@ -199,7 +202,7 @@ class LoopManager: ObservableObject {
Notification.Name.updateUIDirection.post(userInfo: ["action": self.currentAction])
}

if action.direction.isPresetCyclable || action.direction == .cycle {
if action.direction == .cycle {
self.currentAction = newAction
self.changeAction(action)
} else {
Expand Down
1 change: 0 additions & 1 deletion Loop/Preview Window/PreviewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,6 @@ class PreviewController {
guard
let windowController = previewWindowController,
let screen = self.screen,
!action.direction.isPresetCyclable,
!action.direction.willChangeScreen,
action.direction != .cycle
else {
Expand Down
9 changes: 6 additions & 3 deletions Loop/Preview Window/PreviewView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,12 @@ struct PreviewView: View {
GeometryReader { _ in
ZStack {
VisualEffectView(material: .hudWindow, blendingMode: .behindWindow)
.mask(RoundedRectangle(cornerRadius: previewCornerRadius).foregroundColor(.white))
// .shadow(radius: 10)
RoundedRectangle(cornerRadius: previewCornerRadius)
.mask {
RoundedRectangle(cornerRadius: previewCornerRadius, style: .continuous)
.foregroundColor(.white)
}

RoundedRectangle(cornerRadius: previewCornerRadius, style: .continuous)
.stroke(
LinearGradient(
gradient: Gradient(
Expand Down
56 changes: 25 additions & 31 deletions Loop/Radial Menu/DirectionSelectorCircleSegment.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,40 +7,34 @@

import SwiftUI

struct DirectionSelectorCircleSegment: View {
var startingAngle: Double = 0
let isActive: Bool
struct DirectionSelectorCircleSegment: Shape {

var angle: Double = .zero
let radialMenuSize: CGFloat

init(_ resizePosition: WindowDirection, _ activeResizePosition: WindowDirection, _ radialMenuSize: CGFloat) {
if let angle = resizePosition.radialMenuAngle {
self.startingAngle = angle - 90 - 22.5
}
if resizePosition == activeResizePosition {
isActive = true
} else {
isActive = false
}
self.radialMenuSize = radialMenuSize
var animatableData: Double {
get { self.angle }
set { self.angle = newValue }
}

var body: some View {
Path { path in
path.move(to:
CGPoint(
x: radialMenuSize/2,
y: radialMenuSize/2
)
)
path.addArc(
center: CGPoint(x: radialMenuSize/2,
y: radialMenuSize/2),
radius: radialMenuSize,
startAngle: .degrees(startingAngle),
endAngle: .degrees(startingAngle+45),
clockwise: false
)
}
.foregroundColor(isActive ? Color.black : Color.clear)
func path(in rect: CGRect) -> Path {
var path = Path()

path.move(to:
CGPoint(
x: radialMenuSize/2,
y: radialMenuSize/2
)
)
path.addArc(
center: CGPoint(x: radialMenuSize/2,
y: radialMenuSize/2),
radius: radialMenuSize,
startAngle: .degrees(angle - 22.5),
endAngle: .degrees(angle + 22.5),
clockwise: false
)

return path
}
}
32 changes: 19 additions & 13 deletions Loop/Radial Menu/DirectionSelectorSquareSegment.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,21 +8,27 @@
import SwiftUI

struct DirectionSelectorSquareSegment: View {
let isActive: Bool
let radialMenuSize: CGFloat

init(_ resizePosition: WindowDirection, _ activeResizePosition: WindowDirection, _ radialMenuSize: CGFloat) {
if resizePosition == activeResizePosition {
isActive = true
} else {
isActive = false
}
self.radialMenuSize = radialMenuSize
}
var angle: Double = .zero
let radialMenuCornerRadius: CGFloat
let radialMenuThickness: CGFloat

var body: some View {
Rectangle()
.foregroundColor(isActive ? Color.black : Color.clear)
.frame(width: radialMenuSize/3, height: radialMenuSize/3)
ZStack {
RoundedRectangle(cornerRadius: radialMenuCornerRadius, style: .continuous)
.trim(
from: (Angle(degrees: self.angle - 22.5).normalized().degrees / 360.0),
to: (Angle(degrees: self.angle + 22.5).normalized().degrees / 360.0)
)
.stroke(.white, lineWidth: radialMenuThickness * 2)

RoundedRectangle(cornerRadius: radialMenuCornerRadius, style: .continuous)
.trim(
from: (Angle(degrees: self.angle - 180 - 22.5).normalized().degrees / 360.0),
to: (Angle(degrees: self.angle - 180 + 22.5).normalized().degrees / 360.0)
)
.stroke(.white, lineWidth: radialMenuThickness * 2)
.rotationEffect(.degrees(180))
}
}
}
1 change: 1 addition & 0 deletions Loop/Radial Menu/RadialMenuController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ class RadialMenuController {
backing: .buffered,
defer: true,
screen: NSApp.keyWindow?.screen)

panel.collectionBehavior = .canJoinAllSpaces
panel.hasShadow = false
panel.backgroundColor = NSColor.white.withAlphaComponent(0.00001)
Expand Down
64 changes: 0 additions & 64 deletions Loop/Radial Menu/RadialMenuDirectionSelectorView.swift

This file was deleted.

Loading