@@ -38,74 +38,84 @@ Length Length::percentage_of(Percentage const& percentage) const
3838}
3939
4040CSSPixels Length::font_relative_length_to_px (Length::FontMetrics const & font_metrics, Length::FontMetrics const & root_font_metrics) const
41+ {
42+ return CSSPixels::nearest_value_for (font_relative_length_to_px_without_rounding (font_metrics, root_font_metrics));
43+ }
44+
45+ double Length::font_relative_length_to_px_without_rounding (Length::FontMetrics const & font_metrics, Length::FontMetrics const & root_font_metrics) const
4146{
4247 switch (m_unit) {
4348 case LengthUnit::Em:
44- return CSSPixels::nearest_value_for ( m_value * font_metrics.font_size .to_double () );
49+ return m_value * font_metrics.font_size .to_double ();
4550 case LengthUnit::Rem:
46- return CSSPixels::nearest_value_for ( m_value * root_font_metrics.font_size .to_double () );
51+ return m_value * root_font_metrics.font_size .to_double ();
4752 case LengthUnit::Ex:
48- return CSSPixels::nearest_value_for ( m_value * font_metrics.x_height .to_double () );
53+ return m_value * font_metrics.x_height .to_double ();
4954 case LengthUnit::Rex:
50- return CSSPixels::nearest_value_for ( m_value * root_font_metrics.x_height .to_double () );
55+ return m_value * root_font_metrics.x_height .to_double ();
5156 case LengthUnit::Cap:
52- return CSSPixels::nearest_value_for ( m_value * font_metrics.cap_height .to_double () );
57+ return m_value * font_metrics.cap_height .to_double ();
5358 case LengthUnit::Rcap:
54- return CSSPixels::nearest_value_for ( m_value * root_font_metrics.cap_height .to_double () );
59+ return m_value * root_font_metrics.cap_height .to_double ();
5560 case LengthUnit::Ch:
56- return CSSPixels::nearest_value_for ( m_value * font_metrics.zero_advance .to_double () );
61+ return m_value * font_metrics.zero_advance .to_double ();
5762 case LengthUnit::Rch:
58- return CSSPixels::nearest_value_for ( m_value * root_font_metrics.zero_advance .to_double () );
63+ return m_value * root_font_metrics.zero_advance .to_double ();
5964 case LengthUnit::Ic:
6065 // FIXME: Use the "advance measure of the “水” (CJK water ideograph, U+6C34) glyph"
61- return CSSPixels::nearest_value_for ( m_value * font_metrics.font_size .to_double () );
66+ return m_value * font_metrics.font_size .to_double ();
6267 case LengthUnit::Ric:
6368 // FIXME: Use the "advance measure of the “水” (CJK water ideograph, U+6C34) glyph"
64- return CSSPixels::nearest_value_for ( m_value * root_font_metrics.font_size .to_double () );
69+ return m_value * root_font_metrics.font_size .to_double ();
6570 case LengthUnit::Lh:
66- return CSSPixels::nearest_value_for ( m_value * font_metrics.line_height .to_double () );
71+ return m_value * font_metrics.line_height .to_double ();
6772 case LengthUnit::Rlh:
68- return CSSPixels::nearest_value_for ( m_value * root_font_metrics.line_height .to_double () );
73+ return m_value * root_font_metrics.line_height .to_double ();
6974 default :
7075 VERIFY_NOT_REACHED ();
7176 }
7277}
7378
7479CSSPixels Length::viewport_relative_length_to_px (CSSPixelRect const & viewport_rect) const
80+ {
81+ return CSSPixels::nearest_value_for (viewport_relative_length_to_px_without_rounding (viewport_rect));
82+ }
83+
84+ double Length::viewport_relative_length_to_px_without_rounding (CSSPixelRect const & viewport_rect) const
7585{
7686 switch (m_unit) {
7787 case LengthUnit::Vw:
7888 case LengthUnit::Svw:
7989 case LengthUnit::Lvw:
8090 case LengthUnit::Dvw:
81- return viewport_rect.width () * ( CSSPixels::nearest_value_for ( m_value) / 100 ) ;
91+ return viewport_rect.width () * m_value / 100 ;
8292 case LengthUnit::Vh:
8393 case LengthUnit::Svh:
8494 case LengthUnit::Lvh:
8595 case LengthUnit::Dvh:
86- return viewport_rect.height () * ( CSSPixels::nearest_value_for ( m_value) / 100 ) ;
96+ return viewport_rect.height () * m_value / 100 ;
8797 case LengthUnit::Vi:
8898 case LengthUnit::Svi:
8999 case LengthUnit::Lvi:
90100 case LengthUnit::Dvi:
91101 // FIXME: Select the width or height based on which is the inline axis.
92- return viewport_rect.width () * ( CSSPixels::nearest_value_for ( m_value) / 100 ) ;
102+ return viewport_rect.width () * m_value / 100 ;
93103 case LengthUnit::Vb:
94104 case LengthUnit::Svb:
95105 case LengthUnit::Lvb:
96106 case LengthUnit::Dvb:
97107 // FIXME: Select the width or height based on which is the block axis.
98- return viewport_rect.height () * ( CSSPixels::nearest_value_for ( m_value) / 100 ) ;
108+ return viewport_rect.height () * m_value / 100 ;
99109 case LengthUnit::Vmin:
100110 case LengthUnit::Svmin:
101111 case LengthUnit::Lvmin:
102112 case LengthUnit::Dvmin:
103- return min (viewport_rect.width (), viewport_rect.height ()) * ( CSSPixels::nearest_value_for ( m_value) / 100 ) ;
113+ return min (viewport_rect.width (), viewport_rect.height ()) * m_value / 100 ;
104114 case LengthUnit::Vmax:
105115 case LengthUnit::Svmax:
106116 case LengthUnit::Lvmax:
107117 case LengthUnit::Dvmax:
108- return max (viewport_rect.width (), viewport_rect.height ()) * ( CSSPixels::nearest_value_for ( m_value) / 100 ) ;
118+ return max (viewport_rect.width (), viewport_rect.height ()) * m_value / 100 ;
109119 default :
110120 VERIFY_NOT_REACHED ();
111121 }
0 commit comments