Browse Source

fix: `<datalist>` dropdown positioning (#36959)

fix: datalist dropdown positioning

Co-authored-by: Shelley Vohr <[email protected]>

Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: Shelley Vohr <[email protected]>
trop[bot] 2 years ago
parent
commit
1403a48add
1 changed files with 31 additions and 31 deletions
  1. 31 31
      shell/browser/ui/autofill_popup.cc

+ 31 - 31
shell/browser/ui/autofill_popup.cc

@@ -33,12 +33,14 @@
 
 namespace electron {
 
+namespace {
+
 void CalculatePopupXAndWidthHorizontallyCentered(
     int popup_preferred_width,
     const gfx::Rect& content_area_bounds,
     const gfx::Rect& element_bounds,
     bool is_rtl,
-    gfx::Rect* bubble_bounds) {
+    gfx::Rect* popup_bounds) {
   // The preferred horizontal starting point for the pop-up is at the horizontal
   // center of the field.
   int preferred_starting_point =
@@ -66,15 +68,15 @@ void CalculatePopupXAndWidthHorizontallyCentered(
   int amount_to_grow_in_unpreferred_direction =
       std::max(0, popup_width - space_to_grow_in_preferred_direction);
 
-  bubble_bounds->set_width(popup_width);
+  popup_bounds->set_width(popup_width);
   if (is_rtl) {
     // Note, in RTL the |pop_up_width| must be subtracted to achieve
     // right-alignment of the pop-up with the element.
-    bubble_bounds->set_x(preferred_starting_point - popup_width +
-                         amount_to_grow_in_unpreferred_direction);
+    popup_bounds->set_x(preferred_starting_point - popup_width +
+                        amount_to_grow_in_unpreferred_direction);
   } else {
-    bubble_bounds->set_x(preferred_starting_point -
-                         amount_to_grow_in_unpreferred_direction);
+    popup_bounds->set_x(preferred_starting_point -
+                        amount_to_grow_in_unpreferred_direction);
   }
 }
 
@@ -82,7 +84,7 @@ void CalculatePopupXAndWidth(int popup_preferred_width,
                              const gfx::Rect& content_area_bounds,
                              const gfx::Rect& element_bounds,
                              bool is_rtl,
-                             gfx::Rect* bubble_bounds) {
+                             gfx::Rect* popup_bounds) {
   int right_growth_start = base::clamp(
       element_bounds.x(), content_area_bounds.x(), content_area_bounds.right());
   int left_growth_end =
@@ -107,15 +109,15 @@ void CalculatePopupXAndWidth(int popup_preferred_width,
         right_available < popup_width && right_available < left_available;
   }
 
-  bubble_bounds->set_width(popup_width);
-  bubble_bounds->set_x(grow_left ? left_growth_end - popup_width
-                                 : right_growth_start);
+  popup_bounds->set_width(popup_width);
+  popup_bounds->set_x(grow_left ? left_growth_end - popup_width
+                                : right_growth_start);
 }
 
 void CalculatePopupYAndHeight(int popup_preferred_height,
                               const gfx::Rect& content_area_bounds,
                               const gfx::Rect& element_bounds,
-                              gfx::Rect* bubble_bounds) {
+                              gfx::Rect* popup_bounds) {
   int top_growth_end = base::clamp(element_bounds.y(), content_area_bounds.y(),
                                    content_area_bounds.bottom());
   int bottom_growth_start =
@@ -125,18 +127,18 @@ void CalculatePopupYAndHeight(int popup_preferred_height,
   int top_available = top_growth_end - content_area_bounds.y();
   int bottom_available = content_area_bounds.bottom() - bottom_growth_start;
 
-  bubble_bounds->set_height(popup_preferred_height);
-  bubble_bounds->set_y(top_growth_end);
+  popup_bounds->set_height(popup_preferred_height);
+  popup_bounds->set_y(top_growth_end);
 
   if (bottom_available >= popup_preferred_height ||
       bottom_available >= top_available) {
-    bubble_bounds->AdjustToFit(
-        gfx::Rect(bubble_bounds->x(), element_bounds.bottom(),
-                  bubble_bounds->width(), bottom_available));
+    popup_bounds->AdjustToFit(
+        gfx::Rect(popup_bounds->x(), element_bounds.bottom(),
+                  popup_bounds->width(), bottom_available));
   } else {
-    bubble_bounds->AdjustToFit(
-        gfx::Rect(bubble_bounds->x(), content_area_bounds.y(),
-                  bubble_bounds->width(), top_available));
+    popup_bounds->AdjustToFit(gfx::Rect(popup_bounds->x(),
+                                        content_area_bounds.y(),
+                                        popup_bounds->width(), top_available));
   }
 }
 
@@ -145,22 +147,24 @@ gfx::Rect CalculatePopupBounds(const gfx::Size& desired_size,
                                const gfx::Rect& element_bounds,
                                bool is_rtl,
                                bool horizontally_centered) {
-  gfx::Rect bubble_bounds;
+  gfx::Rect popup_bounds;
 
   if (horizontally_centered) {
     CalculatePopupXAndWidthHorizontallyCentered(
         desired_size.width(), content_area_bounds, element_bounds, is_rtl,
-        &bubble_bounds);
+        &popup_bounds);
   } else {
     CalculatePopupXAndWidth(desired_size.width(), content_area_bounds,
-                            element_bounds, is_rtl, &bubble_bounds);
+                            element_bounds, is_rtl, &popup_bounds);
   }
   CalculatePopupYAndHeight(desired_size.height(), content_area_bounds,
-                           element_bounds, &bubble_bounds);
+                           element_bounds, &popup_bounds);
 
-  return bubble_bounds;
+  return popup_bounds;
 }
 
+}  // namespace
+
 AutofillPopup::AutofillPopup() {
   bold_font_list_ = gfx::FontList().DeriveWithWeight(gfx::Font::Weight::BOLD);
   smaller_font_list_ =
@@ -242,16 +246,12 @@ void AutofillPopup::UpdatePopupBounds() {
   views::View::ConvertPointToScreen(parent_, &origin);
 
   gfx::Rect bounds(origin, element_bounds_.size());
-  gfx::Rect window_bounds = parent_->GetBoundsInScreen();
-
   gfx::Size preferred_size =
       gfx::Size(GetDesiredPopupWidth(), GetDesiredPopupHeight());
 
-  popup_bounds_ = CalculatePopupBounds(preferred_size, window_bounds, bounds,
-                                       base::i18n::IsRTL(), true);
-  CalculatePopupXAndWidthHorizontallyCentered(
-      preferred_size.width(), window_bounds, element_bounds_,
-      base::i18n::IsRTL(), &popup_bounds_);
+  popup_bounds_ =
+      CalculatePopupBounds(preferred_size, parent_->GetBoundsInScreen(), bounds,
+                           base::i18n::IsRTL(), false);
 }
 
 gfx::Rect AutofillPopup::popup_bounds_in_view() {