KLingo Project Documentation 1.0.0
Unreal Engine 5.6 C++ Project Documentation
로딩중...
검색중...
일치하는것 없음
UPageScrollView.h
이 파일의 문서화 페이지로 가기
1// Copyright (c) 2025 Doppleddiggong. All rights reserved. Unauthorized copying, modification, or distribution of this file, via any medium is strictly prohibited. Proprietary and confidential.
2
3#pragma once
4
5#include "CoreMinimal.h"
6#include "Blueprint/UserWidget.h"
8#include "UPageScrollView.generated.h"
9
11DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnPageChanged, int32, PrevPage, int32, CurrentPage);
12
17UCLASS()
18class ONEPIECE_API UPageScrollView : public UUserWidget
19{
20 GENERATED_BODY()
21
22protected:
23 virtual void NativeConstruct() override;
24 virtual void NativeDestruct() override;
25
27 virtual FReply NativeOnMouseButtonDown(const FGeometry& InGeometry, const FPointerEvent& InMouseEvent) override;
28
30 virtual FReply NativeOnMouseButtonUp(const FGeometry& InGeometry, const FPointerEvent& InMouseEvent) override;
31
33 virtual FReply NativeOnMouseMove(const FGeometry& InGeometry, const FPointerEvent& InMouseEvent) override;
34
35public:
39 UFUNCTION(BlueprintCallable, Category = "PageScrollView")
40 void MovePage(int32 PageIndex, bool bAnimate = true);
41
44 UFUNCTION(BlueprintCallable, Category = "PageScrollView")
45 void SetNumberOfPages(int32 ItemCount);
46
48 UFUNCTION(BlueprintCallable, Category = "PageScrollView")
49 void NextPage();
50
52 UFUNCTION(BlueprintCallable, Category = "PageScrollView")
53 void PrevPage();
54
57 UFUNCTION(BlueprintCallable, BlueprintPure, Category = "PageScrollView")
58 int32 GetCurrentPage() const { return CurPageIndex; }
59
62 UFUNCTION(BlueprintCallable, BlueprintPure, Category = "PageScrollView")
63 int32 GetTotalPages() const { return pageItemList.Num(); }
64
68 UFUNCTION(BlueprintCallable, BlueprintPure, Category = "PageScrollView")
69 UPageScrollItem* GetPageAt(int32 Index) const
70 {
71 return pageItemList.IsValidIndex(Index) ? pageItemList[Index] : nullptr;
72 }
73
74private:
79 int32 CalculateTargetPage(FVector2D DragDelta, float Velocity) const;
80
82 void TickSnapAnimation();
83
85 void StopAnimation();
86
90 FVector2D GetPagePosition(int32 PageIndex) const;
91
94 FORCEINLINE float GetPageStride() const
95 {
96 return (ScrollDirection == EPageScrollDirection::Horizontal)
97 ? (PageSize.X + PageSpacing)
98 : (PageSize.Y + PageSpacing);
99 }
100
103 void SetContainerPosition(FVector2D Position);
104
106 void UpdatePageDotIndicator();
107
109 void UpdateItemScales();
110
112 void UpdateContainerPositionDuringDrag();
113
114public:
116 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "PageScrollView|Layout")
117 EPageScrollDirection ScrollDirection = EPageScrollDirection::Horizontal;
118
120 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "PageScrollView|Layout")
121 FVector2D PageSize = FVector2D(1920.0f, 1080.0f);
122
124 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "PageScrollView|Layout")
125 float PageSpacing = 0.0f;
126
128 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "PageScrollView|Behavior")
129 float FastSwipeThreshold = 500.0f;
130
132 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "PageScrollView|Behavior")
133 float SnapAnimationSpeed = 0.3f;
134
136 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "PageScrollView|Behavior")
137 bool bEnableScaleEffect = false;
138
140 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "PageScrollView|Behavior", meta=(EditCondition="bEnableScaleEffect"))
141 float FocusScale = 1.0f;
142
144 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "PageScrollView|Behavior", meta=(EditCondition="bEnableScaleEffect"))
145 float SideScale = 0.8f;
146
148 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "PageScrollView|Data")
149 TSubclassOf<class UPageScrollItem> PageItemClass;
150
152 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "PageScrollView|Data")
153 int32 DefaultPageIndex = 0;
154
156 UPROPERTY(BlueprintReadOnly, meta = (BindWidget))
157 TObjectPtr<class UCanvasPanel> PageContainer;
158
160 UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional))
161 TObjectPtr<class UPageScrollDot> PageDotIndicator;
162
164 UPROPERTY(BlueprintAssignable, Category = "PageScrollView|Events")
165 FOnPageChanged OnPageChanged;
166
167private:
169 int32 CurPageIndex = 0;
170
172 int32 PrevPageIndex = 0;
173
175 UPROPERTY()
176 TArray<TObjectPtr<class UPageScrollItem>> pageItemList;
177
179 bool bIsDragging = false;
180 FVector2D dragStartPosition = FVector2D::ZeroVector;
181 FVector2D dragCurrentPosition = FVector2D::ZeroVector;
182 float dragStartTime = 0.0f;
183
185 FTimerHandle snapAnimTimerHandle;
186 FVector2D animStartPosition = FVector2D::ZeroVector;
187 FVector2D animTargetPosition = FVector2D::ZeroVector;
188 float animElapsedTime = 0.0f;
189 bool bIsAnimating = false;
190
192 FVector2D ViewportSize = FVector2D::ZeroVector;
193};
EPageScrollDirection
페이지 스크롤 방향을 정의하는 열거형
DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnPageChanged, int32, PrevPage, int32, CurrentPage)
페이지 변경 이벤트 델리게이트
페이지 스크롤 뷰의 인디케이터 위젯 현재 페이지를 시각적으로 표시하는 도트 인디케이터입니다.
페이지 스크롤 뷰의 개별 페이지 아이템 UPageScrollView에 의해 동적으로 생성되며, 개별 페이지의 콘텐츠를 담는 컨테이너입니다.
페이지 단위 스크롤 뷰 위젯 드래그 기반 스크롤과 자동 스냅 기능을 제공하는 메인 컨트롤러 위젯입니다.
FORCEINLINE float GetPageStride() const
페이지 간 거리를 계산합니다.