From 46d9667492b46a4c31af7b07269cce1abaeba69c Mon Sep 17 00:00:00 2001 From: Rakuyo Date: Mon, 3 Jun 2024 15:31:18 +0800 Subject: [PATCH 1/3] Add event without `.move` When `style.event.states` does not contain `.move`, it allows adding events where the user long presses, instead of adding the event to the front. --- Sources/KVKCalendar/Timeline+Extension.swift | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Sources/KVKCalendar/Timeline+Extension.swift b/Sources/KVKCalendar/Timeline+Extension.swift index 73b47d63..58de3caf 100644 --- a/Sources/KVKCalendar/Timeline+Extension.swift +++ b/Sources/KVKCalendar/Timeline+Extension.swift @@ -415,6 +415,12 @@ extension TimelineView { } var point = gesture.location(in: scrollView) point.y = (point.y - eventPreviewYOffset) - style.timeline.offsetEvent - 6 + + if !style.event.states.contains(.move) { + let location = gesture.location(in: scrollView) + let offset = eventPreviewYOffset - style.timeline.offsetEvent - 6 + showChangingMinute(pointY: location.y, offset: offset) + } let time = movingMinuteLabel.time var newEvent = Event(ID: Event.idForNewEvent) newEvent.title = TextEvent(timeline: style.event.textForNewEvent) From 7b6b8998728f07cc92a5e2626f7551c441402930 Mon Sep 17 00:00:00 2001 From: Rakuyo Date: Mon, 3 Jun 2024 15:38:06 +0800 Subject: [PATCH 2/3] Reuse code --- Sources/KVKCalendar/Timeline+Extension.swift | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/Sources/KVKCalendar/Timeline+Extension.swift b/Sources/KVKCalendar/Timeline+Extension.swift index 58de3caf..6a3d9440 100644 --- a/Sources/KVKCalendar/Timeline+Extension.swift +++ b/Sources/KVKCalendar/Timeline+Extension.swift @@ -414,13 +414,12 @@ extension TimelineView { eventPreviewSize = getEventPreviewSize() } var point = gesture.location(in: scrollView) - point.y = (point.y - eventPreviewYOffset) - style.timeline.offsetEvent - 6 - if !style.event.states.contains(.move) { - let location = gesture.location(in: scrollView) let offset = eventPreviewYOffset - style.timeline.offsetEvent - 6 - showChangingMinute(pointY: location.y, offset: offset) + showChangingMinute(pointY: point.y, offset: offset) } + point.y = (point.y - eventPreviewYOffset) - style.timeline.offsetEvent - 6 + let time = movingMinuteLabel.time var newEvent = Event(ID: Event.idForNewEvent) newEvent.title = TextEvent(timeline: style.event.textForNewEvent) From 5b711ecc2fc09e5d2bd2f3b11abdfd3b52f365cf Mon Sep 17 00:00:00 2001 From: Rakuyo Date: Mon, 10 Jun 2024 17:23:42 +0800 Subject: [PATCH 3/3] Add `createEventAtTouch` for `TimelineStyle` --- Sources/KVKCalendar/Style.swift | 5 ++++- Sources/KVKCalendar/Timeline+Extension.swift | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Sources/KVKCalendar/Style.swift b/Sources/KVKCalendar/Style.swift index 02bf56b8..67371736 100644 --- a/Sources/KVKCalendar/Style.swift +++ b/Sources/KVKCalendar/Style.swift @@ -194,7 +194,9 @@ public struct TimelineStyle { public var scale: Scale? = Scale(min: 1, max: 6) public var useDefaultCorderHeader = false public var eventPreviewSize: CGSize? = CGSize(width: 150, height: 150) - + /// Takes effect when `style.event.states` does not contain `.move`. `true`: create a new event at the long press; `false`: create at the start time. + public var createEventAtTouch = false + public var allLeftOffset: CGFloat { widthTime + offsetTimeX + offsetLineLeft } @@ -889,6 +891,7 @@ extension TimelineStyle: Equatable { && compare(\.timeDividerColor) && compare(\.timeDividerFont) && compare(\.scale) + && compare(\.createEventAtTouch) } } diff --git a/Sources/KVKCalendar/Timeline+Extension.swift b/Sources/KVKCalendar/Timeline+Extension.swift index d5006dd3..4e392095 100644 --- a/Sources/KVKCalendar/Timeline+Extension.swift +++ b/Sources/KVKCalendar/Timeline+Extension.swift @@ -414,7 +414,7 @@ extension TimelineView { eventPreviewSize = getEventPreviewSize() } var point = gesture.location(in: scrollView) - if !style.event.states.contains(.move) { + if style.timeline.createEventAtTouch && !style.event.states.contains(.move) { let offset = eventPreviewYOffset - style.timeline.offsetEvent - 6 showChangingMinute(pointY: point.y, offset: offset) }