1
1
use floem:: {
2
- event:: { Event , EventListener , EventPropagation } ,
2
+ event:: EventListener ,
3
3
prelude:: * ,
4
- style:: CursorStyle ,
5
- taffy:: Position ,
4
+ style:: { CustomStylable , CustomStyle } ,
6
5
} ;
7
6
8
- const SIDEBAR_WIDTH : f64 = 100.0 ;
9
-
10
7
pub fn draggable_sidebar_view ( ) -> impl IntoView {
11
- let sidebar_width = create_rw_signal ( SIDEBAR_WIDTH ) ;
12
- let is_sidebar_dragging = create_rw_signal ( false ) ;
13
-
14
8
let side_bar = VirtualStack :: with_view (
15
9
|| 0 ..100 ,
16
10
move |item| {
@@ -20,18 +14,17 @@ pub fn draggable_sidebar_view() -> impl IntoView {
20
14
. padding ( 10.0 )
21
15
. padding_top ( 3.0 )
22
16
. padding_bottom ( 3.0 )
23
- . width ( sidebar_width . get ( ) )
17
+ . width_full ( )
24
18
. items_start ( )
25
19
. border_bottom ( 1.0 )
26
20
. border_color ( Color :: from_rgb8 ( 205 , 205 , 205 ) )
27
21
} )
28
22
} ,
29
23
)
30
- . style ( move |s| s. flex_col ( ) . width ( sidebar_width . get ( ) - 1.0 ) )
24
+ . style ( move |s| s. flex_col ( ) . width_full ( ) )
31
25
. scroll ( )
32
26
. style ( move |s| {
33
- s. width ( sidebar_width. get ( ) )
34
- . border_right ( 1.0 )
27
+ s. border_right ( 1.0 )
35
28
. border_top ( 1.0 )
36
29
. border_color ( Color :: from_rgb8 ( 205 , 205 , 205 ) )
37
30
} ) ;
@@ -52,52 +45,15 @@ pub fn draggable_sidebar_view() -> impl IntoView {
52
45
. border_color ( Color :: from_rgb8 ( 205 , 205 , 205 ) )
53
46
} ) ;
54
47
55
- let dragger = ""
56
- . style ( move |s| {
57
- s. position ( Position :: Absolute )
58
- . inset_top ( 0 )
59
- . inset_bottom ( 0 )
60
- . inset_left ( sidebar_width. get ( ) )
61
- . width ( 10 )
62
- . border_left ( 1 )
63
- . border_color ( Color :: from_rgb8 ( 205 , 205 , 205 ) )
64
- . hover ( |s| {
65
- s. border_left ( 2 )
66
- . border_color ( Color :: from_rgb8 ( 41 , 98 , 218 ) )
67
- . cursor ( CursorStyle :: ColResize )
68
- } )
69
- . apply_if ( is_sidebar_dragging. get ( ) , |s| {
70
- s. border_left ( 2 ) . border_color ( Color :: from_rgb8 ( 41 , 98 , 218 ) )
71
- } )
72
- } )
73
- . draggable ( )
74
- . dragging_style ( |s| s. border_color ( palette:: css:: TRANSPARENT ) )
75
- . on_event ( EventListener :: DragStart , move |_| {
76
- is_sidebar_dragging. set ( true ) ;
77
- EventPropagation :: Continue
78
- } )
79
- . on_event ( EventListener :: DragEnd , move |_| {
80
- is_sidebar_dragging. set ( false ) ;
81
- EventPropagation :: Continue
82
- } )
83
- . on_event ( EventListener :: DoubleClick , move |_| {
84
- sidebar_width. set ( SIDEBAR_WIDTH ) ;
85
- EventPropagation :: Continue
86
- } ) ;
87
-
88
- let view = h_stack ( ( side_bar, main_window, dragger) )
89
- . on_event ( EventListener :: PointerMove , move |event| {
90
- let pos = match event {
91
- Event :: PointerMove ( p) => p. pos ,
92
- _ => ( 0.0 , 0.0 ) . into ( ) ,
93
- } ;
48
+ let dragger_color = Color :: from_rgb8 ( 205 , 205 , 205 ) ;
49
+ let active_dragger_color = Color :: from_rgb8 ( 41 , 98 , 218 ) ;
94
50
95
- if is_sidebar_dragging . get ( ) {
96
- sidebar_width . set ( pos . x ) ;
97
- }
98
- EventPropagation :: Continue
99
- } )
100
- . style ( |s| s . width_full ( ) . height_full ( ) ) ;
51
+ let view = resizable :: resizable ( ( side_bar , main_window ) )
52
+ . style ( |s| s . width_full ( ) . height_full ( ) )
53
+ . custom_style ( move |s| {
54
+ s . handle_color ( dragger_color )
55
+ . active ( |s| s . handle_color ( active_dragger_color ) )
56
+ } ) ;
101
57
102
58
let id = view. id ( ) ;
103
59
view. on_event_stop ( EventListener :: KeyUp , move |e| {
0 commit comments