Commit 956c66cb authored by Kent Tamura's avatar Kent Tamura Committed by Commit Bot

Move LayoutFileUploadControl::ComputeIntrinsicLogicalWidths to LayoutBox.

This makes LayoutNG transition easier.
This CL has no behavior changes.

Bug: 1040828
Change-Id: Id11187b3ee0130a8552b77a682b8d96b12bfda99
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2071535Reviewed-by: default avatarKoji Ishii <kojii@chromium.org>
Commit-Queue: Kent Tamura <tkent@chromium.org>
Cr-Commit-Position: refs/heads/master@{#744158}
parent 35c0e780
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
#include "cc/input/scroll_snap_data.h" #include "cc/input/scroll_snap_data.h"
#include "third_party/blink/public/mojom/scroll/scroll_into_view_params.mojom-blink.h" #include "third_party/blink/public/mojom/scroll/scroll_into_view_params.mojom-blink.h"
#include "third_party/blink/public/platform/web_rect.h" #include "third_party/blink/public/platform/web_rect.h"
#include "third_party/blink/public/strings/grit/blink_strings.h"
#include "third_party/blink/renderer/core/dom/document.h" #include "third_party/blink/renderer/core/dom/document.h"
#include "third_party/blink/renderer/core/dom/node_computed_style.h" #include "third_party/blink/renderer/core/dom/node_computed_style.h"
#include "third_party/blink/renderer/core/editing/editing_utilities.h" #include "third_party/blink/renderer/core/editing/editing_utilities.h"
...@@ -41,6 +42,7 @@ ...@@ -41,6 +42,7 @@
#include "third_party/blink/renderer/core/frame/local_frame_view.h" #include "third_party/blink/renderer/core/frame/local_frame_view.h"
#include "third_party/blink/renderer/core/frame/settings.h" #include "third_party/blink/renderer/core/frame/settings.h"
#include "third_party/blink/renderer/core/frame/visual_viewport.h" #include "third_party/blink/renderer/core/frame/visual_viewport.h"
#include "third_party/blink/renderer/core/html/forms/html_input_element.h"
#include "third_party/blink/renderer/core/html/forms/html_opt_group_element.h" #include "third_party/blink/renderer/core/html/forms/html_opt_group_element.h"
#include "third_party/blink/renderer/core/html/forms/html_select_element.h" #include "third_party/blink/renderer/core/html/forms/html_select_element.h"
#include "third_party/blink/renderer/core/html/html_div_element.h" #include "third_party/blink/renderer/core/html/html_div_element.h"
...@@ -48,6 +50,7 @@ ...@@ -48,6 +50,7 @@
#include "third_party/blink/renderer/core/html/html_frame_element_base.h" #include "third_party/blink/renderer/core/html/html_frame_element_base.h"
#include "third_party/blink/renderer/core/html/html_frame_owner_element.h" #include "third_party/blink/renderer/core/html/html_frame_owner_element.h"
#include "third_party/blink/renderer/core/input/event_handler.h" #include "third_party/blink/renderer/core/input/event_handler.h"
#include "third_party/blink/renderer/core/input_type_names.h"
#include "third_party/blink/renderer/core/layout/api/line_layout_block_flow.h" #include "third_party/blink/renderer/core/layout/api/line_layout_block_flow.h"
#include "third_party/blink/renderer/core/layout/api/line_layout_box.h" #include "third_party/blink/renderer/core/layout/api/line_layout_box.h"
#include "third_party/blink/renderer/core/layout/box_layout_extra_input.h" #include "third_party/blink/renderer/core/layout/box_layout_extra_input.h"
...@@ -56,6 +59,7 @@ ...@@ -56,6 +59,7 @@
#include "third_party/blink/renderer/core/layout/layout_deprecated_flexible_box.h" #include "third_party/blink/renderer/core/layout/layout_deprecated_flexible_box.h"
#include "third_party/blink/renderer/core/layout/layout_embedded_content.h" #include "third_party/blink/renderer/core/layout/layout_embedded_content.h"
#include "third_party/blink/renderer/core/layout/layout_fieldset.h" #include "third_party/blink/renderer/core/layout/layout_fieldset.h"
#include "third_party/blink/renderer/core/layout/layout_file_upload_control.h"
#include "third_party/blink/renderer/core/layout/layout_flexible_box.h" #include "third_party/blink/renderer/core/layout/layout_flexible_box.h"
#include "third_party/blink/renderer/core/layout/layout_grid.h" #include "third_party/blink/renderer/core/layout/layout_grid.h"
#include "third_party/blink/renderer/core/layout/layout_inline.h" #include "third_party/blink/renderer/core/layout/layout_inline.h"
...@@ -95,6 +99,7 @@ ...@@ -95,6 +99,7 @@
#include "third_party/blink/renderer/platform/geometry/float_rounded_rect.h" #include "third_party/blink/renderer/platform/geometry/float_rounded_rect.h"
#include "third_party/blink/renderer/platform/geometry/length_functions.h" #include "third_party/blink/renderer/platform/geometry/length_functions.h"
#include "third_party/blink/renderer/platform/runtime_enabled_features.h" #include "third_party/blink/renderer/platform/runtime_enabled_features.h"
#include "third_party/blink/renderer/platform/text/platform_locale.h"
namespace blink { namespace blink {
...@@ -122,6 +127,33 @@ static_assert(sizeof(LayoutBox) == sizeof(SameSizeAsLayoutBox), ...@@ -122,6 +127,33 @@ static_assert(sizeof(LayoutBox) == sizeof(SameSizeAsLayoutBox),
namespace { namespace {
LayoutUnit FileUploadControlIntrinsicInlineSize(const HTMLInputElement& input,
const LayoutBox& box) {
// Figure out how big the filename space needs to be for a given number of
// characters (using "0" as the nominal character).
constexpr int kDefaultWidthNumChars = 34;
constexpr UChar kCharacter = '0';
const String character_as_string = String(&kCharacter, 1);
const Font& font = box.StyleRef().GetFont();
const float min_default_label_width =
kDefaultWidthNumChars *
font.Width(ConstructTextRun(font, character_as_string, box.StyleRef(),
TextRun::kAllowTrailingExpansion));
const String label =
input.GetLocale().QueryString(IDS_FORM_FILE_NO_FILE_LABEL);
float default_label_width = font.Width(ConstructTextRun(
font, label, box.StyleRef(), TextRun::kAllowTrailingExpansion));
if (HTMLInputElement* button = input.UploadButton()) {
if (LayoutObject* button_layout_object = button->GetLayoutObject()) {
default_label_width += button_layout_object->MaxPreferredLogicalWidth() +
LayoutFileUploadControl::kAfterButtonSpacing;
}
}
return LayoutUnit(
ceilf(std::max(min_default_label_width, default_label_width)));
}
LayoutUnit ListBoxDefaultItemHeight(const LayoutBox& box) { LayoutUnit ListBoxDefaultItemHeight(const LayoutBox& box) {
constexpr int kDefaultPaddingBottom = 1; constexpr int kDefaultPaddingBottom = 1;
...@@ -903,6 +935,9 @@ LayoutUnit LayoutBox::DefaultIntrinsicContentInlineSize() const { ...@@ -903,6 +935,9 @@ LayoutUnit LayoutBox::DefaultIntrinsicContentInlineSize() const {
if (UNLIKELY(select && select->UsesMenuList())) { if (UNLIKELY(select && select->UsesMenuList())) {
return MenuListIntrinsicInlineSize(*select, *this); return MenuListIntrinsicInlineSize(*select, *this);
} }
auto* input = DynamicTo<HTMLInputElement>(GetNode());
if (UNLIKELY(input && input->type() == input_type_names::kFile))
return FileUploadControlIntrinsicInlineSize(*input, *this);
return kIndefiniteSize; return kIndefiniteSize;
} }
......
...@@ -21,7 +21,6 @@ ...@@ -21,7 +21,6 @@
#include "third_party/blink/renderer/core/layout/layout_file_upload_control.h" #include "third_party/blink/renderer/core/layout/layout_file_upload_control.h"
#include <math.h> #include <math.h>
#include "third_party/blink/public/strings/grit/blink_strings.h"
#include "third_party/blink/renderer/core/dom/shadow_root.h" #include "third_party/blink/renderer/core/dom/shadow_root.h"
#include "third_party/blink/renderer/core/fileapi/file_list.h" #include "third_party/blink/renderer/core/fileapi/file_list.h"
#include "third_party/blink/renderer/core/html/forms/html_input_element.h" #include "third_party/blink/renderer/core/html/forms/html_input_element.h"
...@@ -30,12 +29,10 @@ ...@@ -30,12 +29,10 @@
#include "third_party/blink/renderer/core/paint/file_upload_control_painter.h" #include "third_party/blink/renderer/core/paint/file_upload_control_painter.h"
#include "third_party/blink/renderer/platform/fonts/font.h" #include "third_party/blink/renderer/platform/fonts/font.h"
#include "third_party/blink/renderer/platform/fonts/string_truncator.h" #include "third_party/blink/renderer/platform/fonts/string_truncator.h"
#include "third_party/blink/renderer/platform/text/platform_locale.h"
#include "third_party/blink/renderer/platform/text/text_run.h" #include "third_party/blink/renderer/platform/text/text_run.h"
namespace blink { namespace blink {
const int kDefaultWidthNumChars = 34;
const int kButtonShadowHeight = 2; const int kButtonShadowHeight = 2;
LayoutFileUploadControl::LayoutFileUploadControl(HTMLInputElement* input) LayoutFileUploadControl::LayoutFileUploadControl(HTMLInputElement* input)
...@@ -60,35 +57,6 @@ void LayoutFileUploadControl::PaintObject( ...@@ -60,35 +57,6 @@ void LayoutFileUploadControl::PaintObject(
FileUploadControlPainter(*this).PaintObject(paint_info, paint_offset); FileUploadControlPainter(*this).PaintObject(paint_info, paint_offset);
} }
void LayoutFileUploadControl::ComputeIntrinsicLogicalWidths(
LayoutUnit& min_logical_width,
LayoutUnit& max_logical_width) const {
// Figure out how big the filename space needs to be for a given number of
// characters (using "0" as the nominal character).
const UChar kCharacter = '0';
const String character_as_string = String(&kCharacter, 1);
const Font& font = StyleRef().GetFont();
float min_default_label_width =
kDefaultWidthNumChars *
font.Width(ConstructTextRun(font, character_as_string, StyleRef(),
TextRun::kAllowTrailingExpansion));
const String label = To<HTMLInputElement>(GetNode())->GetLocale().QueryString(
IDS_FORM_FILE_NO_FILE_LABEL);
float default_label_width = font.Width(ConstructTextRun(
font, label, StyleRef(), TextRun::kAllowTrailingExpansion));
if (HTMLInputElement* button = UploadButton()) {
if (LayoutObject* button_layout_object = button->GetLayoutObject())
default_label_width += button_layout_object->MaxPreferredLogicalWidth() +
kAfterButtonSpacing;
}
max_logical_width =
LayoutUnit(ceilf(std::max(min_default_label_width, default_label_width)));
if (!StyleRef().Width().IsPercentOrCalc())
min_logical_width = max_logical_width;
}
HTMLInputElement* LayoutFileUploadControl::UploadButton() const { HTMLInputElement* LayoutFileUploadControl::UploadButton() const {
return To<HTMLInputElement>(GetNode())->UploadButton(); return To<HTMLInputElement>(GetNode())->UploadButton();
} }
......
...@@ -58,9 +58,6 @@ class CORE_EXPORT LayoutFileUploadControl final : public LayoutBlockFlow { ...@@ -58,9 +58,6 @@ class CORE_EXPORT LayoutFileUploadControl final : public LayoutBlockFlow {
const char* GetName() const override { return "LayoutFileUploadControl"; } const char* GetName() const override { return "LayoutFileUploadControl"; }
private: private:
void ComputeIntrinsicLogicalWidths(
LayoutUnit& min_logical_width,
LayoutUnit& max_logical_width) const override;
void PaintObject(const PaintInfo&, void PaintObject(const PaintInfo&,
const PhysicalOffset& paint_offset) const override; const PhysicalOffset& paint_offset) const override;
......
...@@ -7,7 +7,9 @@ ...@@ -7,7 +7,9 @@
#include <memory> #include <memory>
#include "third_party/blink/renderer/core/frame/local_frame_view.h" #include "third_party/blink/renderer/core/frame/local_frame_view.h"
#include "third_party/blink/renderer/core/html/forms/html_input_element.h"
#include "third_party/blink/renderer/core/html/html_marquee_element.h" #include "third_party/blink/renderer/core/html/html_marquee_element.h"
#include "third_party/blink/renderer/core/input_type_names.h"
#include "third_party/blink/renderer/core/layout/box_layout_extra_input.h" #include "third_party/blink/renderer/core/layout/box_layout_extra_input.h"
#include "third_party/blink/renderer/core/layout/layout_block_flow.h" #include "third_party/blink/renderer/core/layout/layout_block_flow.h"
#include "third_party/blink/renderer/core/layout/layout_fieldset.h" #include "third_party/blink/renderer/core/layout/layout_fieldset.h"
...@@ -665,7 +667,10 @@ MinMaxSize NGBlockNode::ComputeMinMaxSize( ...@@ -665,7 +667,10 @@ MinMaxSize NGBlockNode::ComputeMinMaxSize(
auto* html_marquee_element = DynamicTo<HTMLMarqueeElement>(box_->GetNode()); auto* html_marquee_element = DynamicTo<HTMLMarqueeElement>(box_->GetNode());
if (UNLIKELY(html_marquee_element && html_marquee_element->IsHorizontal())) if (UNLIKELY(html_marquee_element && html_marquee_element->IsHorizontal()))
maybe_sizes->min_size = LayoutUnit(); maybe_sizes->min_size = LayoutUnit();
else if (UNLIKELY(IsA<HTMLSelectElement>(box_->GetNode())) && else if (UNLIKELY(IsA<HTMLSelectElement>(box_->GetNode()) ||
(IsA<HTMLInputElement>(box_->GetNode()) &&
To<HTMLInputElement>(box_->GetNode())->type() ==
input_type_names::kFile)) &&
Style().LogicalWidth().IsPercentOrCalc()) Style().LogicalWidth().IsPercentOrCalc())
maybe_sizes->min_size = LayoutUnit(); maybe_sizes->min_size = LayoutUnit();
return *maybe_sizes; return *maybe_sizes;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment