Skip to content

Commit 0b3284d

Browse files
committed
Support hiding circular widget
1 parent 67a86cd commit 0b3284d

File tree

3 files changed

+63
-21
lines changed

3 files changed

+63
-21
lines changed

Core/Sources/HostApp/GeneralView.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,8 @@ struct GeneralSettingsView: View {
222222
var widgetColorScheme
223223
@AppStorage(\.preferWidgetToStayInsideEditorWhenWidthGreaterThan)
224224
var preferWidgetToStayInsideEditorWhenWidthGreaterThan
225+
@AppStorage(\.hideCircularWidget)
226+
var hideCircularWidget
225227
}
226228

227229
@StateObject var settings = Settings()
@@ -283,6 +285,10 @@ struct GeneralSettingsView: View {
283285

284286
Text("pt")
285287
}
288+
289+
Toggle(isOn: $settings.hideCircularWidget) {
290+
Text("Hide circular widget")
291+
}
286292
}.padding()
287293
}
288294
}

Core/Sources/SuggestionWidget/WidgetPositionStrategy.swift

Lines changed: 46 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ enum UpdateLocationStrategy {
2020
mainScreen: NSScreen,
2121
activeScreen: NSScreen,
2222
editor: AXUIElement,
23+
hideCircularWidget: Bool = UserDefaults.shared.value(for: \.hideCircularWidget),
2324
preferredInsideEditorMinWidth: Double = UserDefaults.shared
2425
.value(for: \.preferWidgetToStayInsideEditorWhenWidthGreaterThan)
2526
) -> WidgetLocation {
@@ -33,7 +34,8 @@ enum UpdateLocationStrategy {
3334
return FixedToBottom().framesForWindows(
3435
editorFrame: editorFrame,
3536
mainScreen: mainScreen,
36-
activeScreen: activeScreen
37+
activeScreen: activeScreen,
38+
hideCircularWidget: hideCircularWidget
3739
)
3840
}
3941
var frame: CGRect = .zero
@@ -42,7 +44,8 @@ enum UpdateLocationStrategy {
4244
return FixedToBottom().framesForWindows(
4345
editorFrame: editorFrame,
4446
mainScreen: mainScreen,
45-
activeScreen: activeScreen
47+
activeScreen: activeScreen,
48+
hideCircularWidget: hideCircularWidget
4649
)
4750
}
4851
return HorizontalMovable().framesForWindows(
@@ -51,7 +54,8 @@ enum UpdateLocationStrategy {
5154
editorFrame: editorFrame,
5255
mainScreen: mainScreen,
5356
activeScreen: activeScreen,
54-
preferredInsideEditorMinWidth: preferredInsideEditorMinWidth
57+
preferredInsideEditorMinWidth: preferredInsideEditorMinWidth,
58+
hideCircularWidget: hideCircularWidget
5559
)
5660
}
5761
}
@@ -61,6 +65,7 @@ enum UpdateLocationStrategy {
6165
editorFrame: CGRect,
6266
mainScreen: NSScreen,
6367
activeScreen: NSScreen,
68+
hideCircularWidget: Bool = UserDefaults.shared.value(for: \.hideCircularWidget),
6469
preferredInsideEditorMinWidth: Double = UserDefaults.shared
6570
.value(for: \.preferWidgetToStayInsideEditorWhenWidthGreaterThan)
6671
) -> WidgetLocation {
@@ -70,7 +75,8 @@ enum UpdateLocationStrategy {
7075
editorFrame: editorFrame,
7176
mainScreen: mainScreen,
7277
activeScreen: activeScreen,
73-
preferredInsideEditorMinWidth: preferredInsideEditorMinWidth
78+
preferredInsideEditorMinWidth: preferredInsideEditorMinWidth,
79+
hideCircularWidget: hideCircularWidget
7480
)
7581
}
7682
}
@@ -82,7 +88,8 @@ enum UpdateLocationStrategy {
8288
editorFrame: CGRect,
8389
mainScreen: NSScreen,
8490
activeScreen: NSScreen,
85-
preferredInsideEditorMinWidth: Double
91+
preferredInsideEditorMinWidth: Double,
92+
hideCircularWidget: Bool = UserDefaults.shared.value(for: \.hideCircularWidget)
8693
) -> WidgetLocation {
8794
let maxY = max(
8895
y,
@@ -96,12 +103,23 @@ enum UpdateLocationStrategy {
96103
.widgetPadding
97104
)
98105

99-
let proposedAnchorFrameOnTheRightSide = CGRect(
100-
x: editorFrame.maxX - Style.widgetPadding - Style.widgetWidth,
101-
y: y,
102-
width: Style.widgetWidth,
103-
height: Style.widgetHeight
104-
)
106+
let proposedAnchorFrameOnTheRightSide = {
107+
if hideCircularWidget {
108+
return CGRect(
109+
x: editorFrame.maxX,
110+
y: y,
111+
width: 0,
112+
height: 0
113+
)
114+
} else {
115+
return CGRect(
116+
x: editorFrame.maxX - Style.widgetPadding - Style.widgetWidth,
117+
y: y,
118+
width: Style.widgetWidth,
119+
height: Style.widgetHeight
120+
)
121+
}
122+
}()
105123

106124
let proposedPanelX = proposedAnchorFrameOnTheRightSide.maxX + Style
107125
.widgetPadding * 2
@@ -139,12 +157,23 @@ enum UpdateLocationStrategy {
139157
suggestionPanelLocation: nil
140158
)
141159
} else {
142-
let proposedAnchorFrameOnTheLeftSide = CGRect(
143-
x: editorFrame.minX + Style.widgetPadding,
144-
y: proposedAnchorFrameOnTheRightSide.origin.y,
145-
width: Style.widgetWidth,
146-
height: Style.widgetHeight
147-
)
160+
let proposedAnchorFrameOnTheLeftSide = {
161+
if hideCircularWidget {
162+
return CGRect(
163+
x: editorFrame.minX,
164+
y: proposedAnchorFrameOnTheRightSide.origin.y,
165+
width: 0,
166+
height: 0
167+
)
168+
} else {
169+
return CGRect(
170+
x: editorFrame.minX + Style.widgetPadding,
171+
y: proposedAnchorFrameOnTheRightSide.origin.y,
172+
width: Style.widgetWidth,
173+
height: Style.widgetHeight
174+
)
175+
}
176+
}()
148177
let proposedPanelX = proposedAnchorFrameOnTheLeftSide.minX - Style
149178
.widgetPadding * 2 - Style.panelWidth
150179
let putAnchorToTheLeft = {

Tool/Sources/Preferences/Keys.swift

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ public protocol UserDefaultPreferenceKey {
99
public struct PreferenceKey<T>: UserDefaultPreferenceKey {
1010
public let defaultValue: T
1111
public let key: String
12-
12+
1313
public init(defaultValue: T, key: String) {
1414
self.defaultValue = defaultValue
1515
self.key = key
@@ -19,7 +19,7 @@ public struct PreferenceKey<T>: UserDefaultPreferenceKey {
1919
public struct FeatureFlag: UserDefaultPreferenceKey {
2020
public let defaultValue: Bool
2121
public let key: String
22-
22+
2323
public init(defaultValue: Bool, key: String) {
2424
self.defaultValue = defaultValue
2525
self.key = key
@@ -70,6 +70,13 @@ public struct UserDefaultPreferenceKeys {
7070
defaultValue: 1400 as Double,
7171
key: "PreferWidgetToStayInsideEditorWhenWidthGreaterThan"
7272
)
73+
74+
// MARK: Hide Circular Widget
75+
76+
public let hideCircularWidget = PreferenceKey(
77+
defaultValue: false,
78+
key: "HideCircularWidget"
79+
)
7380
}
7481

7582
// MARK: - OpenAI Account Settings
@@ -170,7 +177,7 @@ public extension UserDefaultPreferenceKeys {
170177
var runNodeWith: PreferenceKey<NodeRunner> {
171178
.init(defaultValue: .env, key: "RunNodeWith")
172179
}
173-
180+
174181
var gitHubCopilotIgnoreTrailingNewLines: PreferenceKey<Bool> {
175182
.init(defaultValue: false, key: "GitHubCopilotIgnoreTrailingNewLines")
176183
}
@@ -246,7 +253,7 @@ public extension UserDefaultPreferenceKeys {
246253
var chatFeatureProvider: PreferenceKey<ChatFeatureProvider> {
247254
.init(defaultValue: .openAI, key: "ChatFeatureProvider")
248255
}
249-
256+
250257
var embeddingFeatureProvider: PreferenceKey<EmbeddingFeatureProvider> {
251258
.init(defaultValue: .openAI, key: "EmbeddingFeatureProvider")
252259
}

0 commit comments

Comments
 (0)