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 @@
#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/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/node_computed_style.h"
#include "third_party/blink/renderer/core/editing/editing_utilities.h"
......@@ -41,6 +42,7 @@
#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/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_select_element.h"
#include "third_party/blink/renderer/core/html/html_div_element.h"
......@@ -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_owner_element.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_box.h"
#include "third_party/blink/renderer/core/layout/box_layout_extra_input.h"
......@@ -56,6 +59,7 @@
#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_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_grid.h"
#include "third_party/blink/renderer/core/layout/layout_inline.h"
......@@ -95,6 +99,7 @@
#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/runtime_enabled_features.h"
#include "third_party/blink/renderer/platform/text/platform_locale.h"
namespace blink {
......@@ -122,6 +127,33 @@ static_assert(sizeof(LayoutBox) == sizeof(SameSizeAsLayoutBox),
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) {
constexpr int kDefaultPaddingBottom = 1;
......@@ -903,6 +935,9 @@ LayoutUnit LayoutBox::DefaultIntrinsicContentInlineSize() const {
if (UNLIKELY(select && select->UsesMenuList())) {
return MenuListIntrinsicInlineSize(*select, *this);
}
auto* input = DynamicTo<HTMLInputElement>(GetNode());
if (UNLIKELY(input && input->type() == input_type_names::kFile))
return FileUploadControlIntrinsicInlineSize(*input, *this);
return kIndefiniteSize;
}
......
......@@ -21,7 +21,6 @@
#include "third_party/blink/renderer/core/layout/layout_file_upload_control.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/fileapi/file_list.h"
#include "third_party/blink/renderer/core/html/forms/html_input_element.h"
......@@ -30,12 +29,10 @@
#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/string_truncator.h"
#include "third_party/blink/renderer/platform/text/platform_locale.h"
#include "third_party/blink/renderer/platform/text/text_run.h"
namespace blink {
const int kDefaultWidthNumChars = 34;
const int kButtonShadowHeight = 2;
LayoutFileUploadControl::LayoutFileUploadControl(HTMLInputElement* input)
......@@ -60,35 +57,6 @@ void LayoutFileUploadControl::PaintObject(
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 {
return To<HTMLInputElement>(GetNode())->UploadButton();
}
......
......@@ -58,9 +58,6 @@ class CORE_EXPORT LayoutFileUploadControl final : public LayoutBlockFlow {
const char* GetName() const override { return "LayoutFileUploadControl"; }
private:
void ComputeIntrinsicLogicalWidths(
LayoutUnit& min_logical_width,
LayoutUnit& max_logical_width) const override;
void PaintObject(const PaintInfo&,
const PhysicalOffset& paint_offset) const override;
......
......@@ -7,7 +7,9 @@
#include <memory>
#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/input_type_names.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_fieldset.h"
......@@ -665,7 +667,10 @@ MinMaxSize NGBlockNode::ComputeMinMaxSize(
auto* html_marquee_element = DynamicTo<HTMLMarqueeElement>(box_->GetNode());
if (UNLIKELY(html_marquee_element && html_marquee_element->IsHorizontal()))
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())
maybe_sizes->min_size = LayoutUnit();
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