@@ -176,8 +176,8 @@ fn combo_box(
176
176
) -> Response {
177
177
let popup_id = button_id. with ( "popup" ) ;
178
178
179
- let button_active = ui. memory ( ) . is_popup_open ( popup_id) ;
180
- let button_response = button_frame ( ui, button_id, button_active , Sense :: click ( ) , |ui| {
179
+ let is_popup_open = ui. memory ( ) . is_popup_open ( popup_id) ;
180
+ let button_response = button_frame ( ui, button_id, is_popup_open , Sense :: click ( ) , |ui| {
181
181
// We don't want to change width when user selects something new
182
182
let full_minimum_width = ui. spacing ( ) . slider_width ;
183
183
let icon_size = Vec2 :: splat ( ui. spacing ( ) . icon_width ) ;
@@ -193,10 +193,14 @@ fn combo_box(
193
193
let ( _, rect) = ui. allocate_space ( Vec2 :: new ( width, height) ) ;
194
194
let button_rect = ui. min_rect ( ) . expand2 ( ui. spacing ( ) . button_padding ) ;
195
195
let response = ui. interact ( button_rect, button_id, Sense :: click ( ) ) ;
196
- // response.active |= button_active ;
196
+ // response.active |= is_popup_open ;
197
197
198
198
let icon_rect = Align2 :: RIGHT_CENTER . align_size_within_rect ( icon_size, rect) ;
199
- let visuals = ui. style ( ) . interact ( & response) ;
199
+ let visuals = if is_popup_open {
200
+ & ui. visuals ( ) . widgets . open
201
+ } else {
202
+ ui. style ( ) . interact ( & response)
203
+ } ;
200
204
paint_icon ( ui. painter ( ) , icon_rect. expand ( visuals. expansion ) , visuals) ;
201
205
202
206
let text_rect = Align2 :: LEFT_CENTER . align_size_within_rect ( galley. size , rect) ;
@@ -207,9 +211,8 @@ fn combo_box(
207
211
if button_response. clicked ( ) {
208
212
ui. memory ( ) . toggle_popup ( popup_id) ;
209
213
}
210
- const MAX_COMBO_HEIGHT : f32 = 128.0 ;
211
214
crate :: popup:: popup_below_widget ( ui, popup_id, & button_response, |ui| {
212
- ScrollArea :: from_max_height ( MAX_COMBO_HEIGHT ) . show ( ui, menu_contents)
215
+ ScrollArea :: from_max_height ( ui . spacing ( ) . combo_height ) . show ( ui, menu_contents)
213
216
} ) ;
214
217
215
218
button_response
@@ -218,7 +221,7 @@ fn combo_box(
218
221
fn button_frame (
219
222
ui : & mut Ui ,
220
223
id : Id ,
221
- button_active : bool ,
224
+ is_popup_open : bool ,
222
225
sense : Sense ,
223
226
add_contents : impl FnOnce ( & mut Ui ) ,
224
227
) -> Response {
@@ -237,9 +240,12 @@ fn button_frame(
237
240
let mut outer_rect = content_ui. min_rect ( ) . expand2 ( margin) ;
238
241
outer_rect. set_height ( outer_rect. height ( ) . at_least ( interact_size. y ) ) ;
239
242
240
- let mut response = ui. interact ( outer_rect, id, sense) ;
241
- response. is_pointer_button_down_on |= button_active;
242
- let visuals = ui. style ( ) . interact ( & response) ;
243
+ let response = ui. interact ( outer_rect, id, sense) ;
244
+ let visuals = if is_popup_open {
245
+ & ui. visuals ( ) . widgets . open
246
+ } else {
247
+ ui. style ( ) . interact ( & response)
248
+ } ;
243
249
244
250
ui. painter ( ) . set (
245
251
where_to_put_background,
0 commit comments