From 4615dbd43394afef2a03c822fd2e9b671ec7a5a4 Mon Sep 17 00:00:00 2001 From: saint Date: Thu, 23 May 2024 10:51:50 -0400 Subject: [PATCH] buuld --- Fenestra.swift | 250 ++++++++++++++++++++-------------------- gloss/ContentView.swift | 6 - 2 files changed, 125 insertions(+), 131 deletions(-) diff --git a/Fenestra.swift b/Fenestra.swift index d663745..0bdb990 100644 --- a/Fenestra.swift +++ b/Fenestra.swift @@ -76,138 +76,138 @@ struct SegRow: View { } -// struct Pane: View { -// @State var paneConnector = PaneConnector() +struct Pane: View { + @State var paneConnector = PaneConnector() -// @State var segs: [SegDenorm] -// @State var selectedRibbon: [Ribbon] + @State var segs: [SegDenorm] + @State var selectedRibbon: [Ribbon] -// @State var dragOffset = CGFloat() + @State var dragOffset = CGFloat() -// @State var refresh: Bool = false + @State var refresh: Bool = false + + @State var vertSep = CGFloat(20) + + @Environment(\.appDatabase) private var appDatabase + + // var handleVisibilityChanged: (String, VisibilityChange, VisibilityTracker) -> Void + + var body: some View { + GeometryReader { geometry in + ScrollViewReader { proxy in + VisibilityTrackingScrollView(action: handleVisibilityChanged) { + LazyVStack { + ForEach(segs) { seg in + SegRow(seg: seg, + ribbonId: selectedRibbon[0].id!) + .id("\(seg.id)") + .offset(x: -dragOffset) + .padding(EdgeInsets(top: 10, leading: 20, bottom: 40, trailing: 20)) + .trackVisibility(id: "\(seg.id)") + } + } + .background(Color(red: 0.18, green: 0.18, blue: 0.18)) + } + + .onAppear { + goToRibbon(selectedRibbon: selectedRibbon[0], + destRibbon: selectedRibbon[0], + appDatabase: appDatabase, + paneConnector: $paneConnector, + loading: true) + } + .onChange(of: paneConnector.refresh) { _ in + + Task { + DispatchQueue.main.async { + let gTracker = paneConnector.visibilityTracker! + + Print("scroll Id target: \(paneConnector.scrollId)") + proxy.scrollTo(paneConnector.scrollId, anchor: .top) + + DispatchQueue.main.asyncAfter(deadline: .now() + 1) { + Print(" scroll id target", paneConnector.scrollId) + Print(" current id ", paneConnector.currentId) + Print(gTracker.sortedViewIDs) + if paneConnector.currentId != paneConnector.scrollId { + Print("NO MATCH") + } + + Print(" current offset ", gTracker.visibleViews[paneConnector.scrollId]) + var curOffset = gTracker.visibleViews[paneConnector.scrollId] + Print(" stats", gTracker.visibleViews) + if curOffset != nil { + paneConnector.setScrollOffset = CGFloat(Int(paneConnector.scrollOffset) - Int(curOffset!)) + // setScrollOffset = CGFloat(Int(paneConnector.scrollOffset) - Int(curOffset!)) + // setScrollOffset = CGFloat(Int(paneConnector.scrollOffset) - Int(curOffset!)) + Print("applying scroll offset \(paneConnector.setScrollOffset)") + + // paneConnector = paneConnector.copy() as! PaneConnector + self.refresh.toggle() + } else { + var adjust = (Int(paneConnector.scrollId)! - Int(paneConnector.currentId)!) * 200 + Print("adjusting \(adjust)") + + paneConnector.setScrollOffset = CGFloat(adjust) + refresh.toggle() + } + } + } + } + } + .introspect(.scrollView, on: .iOS(.v13, .v14, .v15, .v16, .v17)) { scrollView in + Print("introspect") + + // Weird hack for reactivity + if self.refresh { + let reactive = self.refresh + } + + // if self.paneConnector != nil { + // let reactive = self.paneConnector + // } + + if paneConnector.setScrollOffset != nil { + DispatchQueue.main.async { + scrollView.contentOffset.y = scrollView.contentOffset.y + paneConnector.setScrollOffset! + paneConnector.setScrollOffset = nil + + withAnimation(.easeIn(duration: 0.2)) { + paneConnector.showOverlay = false + self.refresh.toggle() + } + } + } + + Print("end introspect") + } + .listStyle(PlainListStyle()) + } + .zIndex(1) + .background(Color(red: 0.2, green: 0.2, blue: 0.2)) + .frame(width: geometry.size.width - 50, height: geometry.size.height / 2 - vertSep) + } + } + + func handleVisibilityChanged(_: String, change _: VisibilityChange, tracker: VisibilityTracker) { + // var printRate: Int64 = 10 + // gTracker = tracker + self.paneConnector.visibilityTracker = tracker -// // var handleVisibilityChanged: (String, VisibilityChange, VisibilityTracker) -> Void + let visibleViews2 = Array(tracker.visibleViews.keys) + if visibleViews2.count == 0 { + return + } -// var body: some View { -// ScrollViewReader { proxy in -// VisibilityTrackingScrollView(action: handleVisibilityChanged) { -// LazyVStack { -// ForEach(segs) { seg in -// SegRow(seg: seg, -// ribbonId: selectedRibbon[0].id!) -// .id("\(seg.id)") -// .offset(x: -dragOffset) -// .padding(EdgeInsets(top: 10, leading: 20, bottom: 40, trailing: 20)) -// .trackVisibility(id: "\(seg.id)") -// } -// } -// .background(Color(red: 0.18, green: 0.18, blue: 0.18)) -// } + // currentId = tracker.sortedViewIDs[tracker.sortedViewIDs.count - 1] + currentId = tracker.sortedViewIDs[0] + currentOffset = tracker.visibleViews[currentId!]! -// .onAppear { -// goToRibbon(selectedRibbon: selectedRibbon[0], -// destRibbon: selectedRibbon[0], -// scrollId: $scrollId, -// scrollOffset: $scrollOffset, -// refresh: $refresh, -// showOverlay: $showOverlay, -// appDatabase: appDatabase, -// paneConnector: $paneConnector, -// loading: true) -// } -// .onChange(of: paneConnector.refresh) { _ in - -// Task { -// DispatchQueue.main.async { -// let gTracker = paneConnector.visibilityTracker! - -// Print("scroll Id target: \(paneConnector.scrollId)") -// proxy.scrollTo(paneConnector.scrollId, anchor: .top) - -// DispatchQueue.main.asyncAfter(deadline: .now() + 1) { -// Print(" scroll id target", paneConnector.scrollId) -// Print(" current id ", paneConnector.currentId) -// Print(gTracker.sortedViewIDs) -// if paneConnector.currentId != paneConnector.scrollId { -// Print("NO MATCH") -// } - -// Print(" current offset ", gTracker.visibleViews[paneConnector.scrollId]) -// var curOffset = gTracker.visibleViews[paneConnector.scrollId] -// Print(" stats", gTracker.visibleViews) -// if curOffset != nil { -// paneConnector.setScrollOffset = CGFloat(Int(paneConnector.scrollOffset) - Int(curOffset!)) -// // setScrollOffset = CGFloat(Int(paneConnector.scrollOffset) - Int(curOffset!)) -// // setScrollOffset = CGFloat(Int(paneConnector.scrollOffset) - Int(curOffset!)) -// Print("applying scroll offset \(setScrollOffset)") -// Print("applying scroll offset \(paneConnector.setScrollOffset)") - -// // paneConnector = paneConnector.copy() as! PaneConnector -// self.refresh.toggle() -// } else { -// var adjust = (Int(paneConnector.scrollId)! - Int(paneConnector.currentId)!) * 200 -// Print("adjusting \(adjust)") - -// setScrollOffset = CGFloat(adjust) -// refresh.toggle() -// } -// } -// } -// } -// } -// .introspect(.scrollView, on: .iOS(.v13, .v14, .v15, .v16, .v17)) { scrollView in -// Print("introspect") - -// // Weird hack for reactivity -// if self.refresh { -// let reactive = self.refresh -// } - -// // if self.paneConnector != nil { -// // let reactive = self.paneConnector -// // } - -// if paneConnector.setScrollOffset != nil { -// DispatchQueue.main.async { -// scrollView.contentOffset.y = scrollView.contentOffset.y + paneConnector.setScrollOffset! -// paneConnector.setScrollOffset = nil - -// withAnimation(.easeIn(duration: 0.2)) { -// paneConnector.showOverlay = false -// self.refresh.toggle() -// } -// } -// } - -// Print("end introspect") -// } -// .listStyle(PlainListStyle()) -// } -// .zIndex(1) -// .background(Color(red: 0.2, green: 0.2, blue: 0.2)) -// .frame(width: geometry.size.width - 50, height: geometry.size.height / 2 - vertSep) -// } - -// func handleVisibilityChanged(_: String, change _: VisibilityChange, tracker: VisibilityTracker) { -// // var printRate: Int64 = 10 -// // gTracker = tracker -// self.paneConnector.visibilityTracker = tracker + self.paneConnector.currentId = tracker.sortedViewIDs[0] + self.paneConnector.currentOffset = tracker.visibleViews[currentId!]! + } -// let visibleViews2 = Array(tracker.visibleViews.keys) -// if visibleViews2.count == 0 { -// return -// } - -// // currentId = tracker.sortedViewIDs[tracker.sortedViewIDs.count - 1] -// currentId = tracker.sortedViewIDs[0] -// currentOffset = tracker.visibleViews[currentId!]! - -// self.paneConnector.currentId = tracker.sortedViewIDs[0] -// self.paneConnector.currentOffset = tracker.visibleViews[currentId!]! -// } - - -// } +} diff --git a/gloss/ContentView.swift b/gloss/ContentView.swift index 92e0ac7..cda3ac0 100644 --- a/gloss/ContentView.swift +++ b/gloss/ContentView.swift @@ -227,12 +227,6 @@ struct ContentView: View { @State var paneConnector = PaneConnector() - // scroll location of the main Pane - // @State var scrollId: String? - // @State var scrollOffset: CGFloat? - // @State var setScrollOffset: CGFloat? - // @State var showOverlay: Bool = false - @State var refresh: Bool = false @State var vertSep = CGFloat(20)