mirror of
https://github.com/servo/servo.git
synced 2025-06-06 00:25:37 +00:00
Auto merge of #12388 - kilobtye:textarea2, r=pcwalton
Let textarea wrap lines <!-- Please describe your changes on the following line: --> 1. Change textarea's style from white-space: pre to white-space: pre-wrap. 2. Display insertion point when a line is wrapped. --- <!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: --> - [X] `./mach build -d` does not report any errors - [X] `./mach test-tidy` does not report any errors - [X] These changes fix #10053 (github issue number if applicable). <!-- Either: --> - [ ] There are tests for these changes OR - [ ] These changes do not require tests because _____ <!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. --> <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/12388) <!-- Reviewable:end -->
This commit is contained in:
commit
a3e8199c97
4 changed files with 16 additions and 13 deletions
|
@ -29,7 +29,6 @@ use gfx::display_list::{LayeredItem, LayerInfo, LineDisplayItem, OpaqueNode};
|
||||||
use gfx::display_list::{SolidColorDisplayItem, StackingContext, StackingContextType};
|
use gfx::display_list::{SolidColorDisplayItem, StackingContext, StackingContextType};
|
||||||
use gfx::display_list::{TextDisplayItem, TextOrientation, WebRenderImageInfo};
|
use gfx::display_list::{TextDisplayItem, TextOrientation, WebRenderImageInfo};
|
||||||
use gfx::paint_thread::THREAD_TINT_COLORS;
|
use gfx::paint_thread::THREAD_TINT_COLORS;
|
||||||
use gfx::text::glyph::ByteIndex;
|
|
||||||
use gfx_traits::{color, ScrollPolicy, StackingContextId};
|
use gfx_traits::{color, ScrollPolicy, StackingContextId};
|
||||||
use inline::{FIRST_FRAGMENT_OF_ELEMENT, InlineFlow, LAST_FRAGMENT_OF_ELEMENT};
|
use inline::{FIRST_FRAGMENT_OF_ELEMENT, InlineFlow, LAST_FRAGMENT_OF_ELEMENT};
|
||||||
use ipc_channel::ipc;
|
use ipc_channel::ipc;
|
||||||
|
@ -970,7 +969,8 @@ impl FragmentDisplayListBuilding for Fragment {
|
||||||
Some(insertion_point_index) => insertion_point_index,
|
Some(insertion_point_index) => insertion_point_index,
|
||||||
None => return,
|
None => return,
|
||||||
};
|
};
|
||||||
let range = Range::new(ByteIndex(0), insertion_point_index);
|
let range = Range::new(scanned_text_fragment_info.range.begin(),
|
||||||
|
insertion_point_index - scanned_text_fragment_info.range.begin());
|
||||||
let advance = scanned_text_fragment_info.run.advance_for_range(&range);
|
let advance = scanned_text_fragment_info.run.advance_for_range(&range);
|
||||||
|
|
||||||
let insertion_point_bounds;
|
let insertion_point_bounds;
|
||||||
|
|
|
@ -882,16 +882,23 @@ impl Fragment {
|
||||||
let size = LogicalSize::new(self.style.writing_mode,
|
let size = LogicalSize::new(self.style.writing_mode,
|
||||||
split.inline_size,
|
split.inline_size,
|
||||||
self.border_box.size.block);
|
self.border_box.size.block);
|
||||||
let flags = match self.specific {
|
// Preserve the insertion point if it is in this fragment's range or it is at line end.
|
||||||
SpecificFragmentInfo::ScannedText(ref info) => info.flags,
|
let (flags, insertion_point) = match self.specific {
|
||||||
_ => ScannedTextFlags::empty()
|
SpecificFragmentInfo::ScannedText(ref info) => {
|
||||||
|
match info.insertion_point {
|
||||||
|
Some(index) if split.range.contains(index) => (info.flags, info.insertion_point),
|
||||||
|
Some(index) if index == ByteIndex(text_run.text.chars().count() as isize - 1) &&
|
||||||
|
index == split.range.end() => (info.flags, info.insertion_point),
|
||||||
|
_ => (info.flags, None)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
_ => (ScannedTextFlags::empty(), None)
|
||||||
};
|
};
|
||||||
// FIXME(pcwalton): This should modify the insertion point as necessary.
|
|
||||||
let info = box ScannedTextFragmentInfo::new(
|
let info = box ScannedTextFragmentInfo::new(
|
||||||
text_run,
|
text_run,
|
||||||
split.range,
|
split.range,
|
||||||
size,
|
size,
|
||||||
None,
|
insertion_point,
|
||||||
flags);
|
flags);
|
||||||
self.transform(size, SpecificFragmentInfo::ScannedText(info))
|
self.transform(size, SpecificFragmentInfo::ScannedText(info))
|
||||||
}
|
}
|
||||||
|
|
|
@ -2146,10 +2146,6 @@ pub fn modify_style_for_input_text(style: &mut Arc<ComputedValues>) {
|
||||||
margin_style.margin_right = computed::LengthOrPercentageOrAuto::Length(Au(0));
|
margin_style.margin_right = computed::LengthOrPercentageOrAuto::Length(Au(0));
|
||||||
margin_style.margin_bottom = computed::LengthOrPercentageOrAuto::Length(Au(0));
|
margin_style.margin_bottom = computed::LengthOrPercentageOrAuto::Length(Au(0));
|
||||||
margin_style.margin_left = computed::LengthOrPercentageOrAuto::Length(Au(0));
|
margin_style.margin_left = computed::LengthOrPercentageOrAuto::Length(Au(0));
|
||||||
|
|
||||||
// whitespace inside text input should not be collapsed
|
|
||||||
let inherited_text = Arc::make_mut(&mut style.inheritedtext);
|
|
||||||
inherited_text.white_space = longhands::white_space::computed_value::T::pre;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Adjusts the `clip` property so that an inline absolute hypothetical fragment doesn't clip its
|
/// Adjusts the `clip` property so that an inline absolute hypothetical fragment doesn't clip its
|
||||||
|
|
|
@ -9,7 +9,7 @@ input {
|
||||||
color: black;
|
color: black;
|
||||||
font-family: sans-serif;
|
font-family: sans-serif;
|
||||||
font-size: 0.8333em;
|
font-size: 0.8333em;
|
||||||
white-space: nowrap;
|
white-space: pre;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
line-height: 1.8;
|
line-height: 1.8;
|
||||||
}
|
}
|
||||||
|
@ -24,7 +24,7 @@ textarea {
|
||||||
color: black;
|
color: black;
|
||||||
font-family: sans-serif;
|
font-family: sans-serif;
|
||||||
font-size: 0.8333em;
|
font-size: 0.8333em;
|
||||||
white-space: pre;
|
white-space: pre-wrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
input::selection,
|
input::selection,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue