mirror of
https://github.com/otaviocc/Triton.git
synced 2026-01-29 19:54:27 +00:00
Improve dropzone when dragging an image from Finder
This commit is contained in:
parent
f5a4bf476d
commit
d15f7a1be3
1 changed files with 44 additions and 37 deletions
|
|
@ -25,30 +25,21 @@ struct UploadView: View {
|
|||
// MARK: - Public
|
||||
|
||||
var body: some View {
|
||||
VStack {
|
||||
HStack(alignment: .top) {
|
||||
makeSidebarView()
|
||||
.frame(width: 200)
|
||||
|
||||
makeEditorView()
|
||||
makeContentView()
|
||||
.frame(minWidth: 400, idealWidth: 640, maxWidth: 640)
|
||||
.toolbar {
|
||||
makeToolbarContent()
|
||||
}
|
||||
|
||||
makeVisibilityView()
|
||||
}
|
||||
.frame(minWidth: 400, idealWidth: 640, maxWidth: 640)
|
||||
.toolbar {
|
||||
makeToolbarContent()
|
||||
}
|
||||
.navigationTitle("")
|
||||
.onChange(of: viewModel.shouldDismiss) { _, shouldDismiss in
|
||||
if shouldDismiss {
|
||||
dismiss()
|
||||
.navigationTitle("")
|
||||
.onChange(of: viewModel.shouldDismiss) { _, shouldDismiss in
|
||||
if shouldDismiss {
|
||||
dismiss()
|
||||
}
|
||||
}
|
||||
.padding()
|
||||
.onDrop(of: [.image], isTargeted: $viewModel.isDragging) { providers -> Bool in
|
||||
handleDrop(providers: providers)
|
||||
}
|
||||
}
|
||||
.padding()
|
||||
.onDrop(of: [.image], isTargeted: $viewModel.isDragging) { providers -> Bool in
|
||||
handleDrop(providers: providers)
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Private
|
||||
|
|
@ -62,26 +53,42 @@ struct UploadView: View {
|
|||
|
||||
@ViewBuilder
|
||||
private func makeSidebarView() -> some View {
|
||||
if viewModel.isDragging {
|
||||
makeDropPictureView()
|
||||
} else {
|
||||
VStack {
|
||||
makePictureView()
|
||||
makePicturePickerView()
|
||||
VStack {
|
||||
makePictureView()
|
||||
makePicturePickerView()
|
||||
}
|
||||
}
|
||||
|
||||
@ViewBuilder
|
||||
private func makeContentView() -> some View {
|
||||
ZStack {
|
||||
if viewModel.isDragging {
|
||||
makeDropZoneView()
|
||||
} else {
|
||||
VStack {
|
||||
HStack(alignment: .top) {
|
||||
makeSidebarView()
|
||||
.frame(width: 200)
|
||||
makeEditorView()
|
||||
}
|
||||
makeVisibilityView()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ViewBuilder
|
||||
private func makeDropPictureView() -> some View {
|
||||
VStack(alignment: .center, spacing: 8) {
|
||||
Image(systemName: "arrow.down.heart")
|
||||
.font(.largeTitle)
|
||||
|
||||
Text("Drop it here")
|
||||
}
|
||||
.frame(width: 100, height: 100)
|
||||
.card(.accentColor)
|
||||
private func makeDropZoneView() -> some View {
|
||||
RoundedRectangle(cornerRadius: 8)
|
||||
.fill(
|
||||
AnyShapeStyle(
|
||||
viewModel.isDragging ? Color.accentColor.opacity(0.1) : .clear
|
||||
)
|
||||
)
|
||||
.strokeBorder(
|
||||
viewModel.isDragging ? Color.accentColor : .secondary.opacity(0.3),
|
||||
style: StrokeStyle(lineWidth: 2, dash: [8, 4])
|
||||
)
|
||||
}
|
||||
|
||||
@ViewBuilder
|
||||
|
|
|
|||
Loading…
Reference in a new issue