style: Refactor media query serialization so it doesn't use an intermediate buffer.

I plan to move MediaType to ToCss soon.
This commit is contained in:
Emilio Cobos Álvarez 2016-12-26 22:25:46 +01:00
parent b4caebae69
commit 8120906a15
No known key found for this signature in database
GPG key ID: 056B727BB9C1027C

View file

@ -11,7 +11,7 @@ use app_units::Au;
use cssparser::{Delimiter, Parser, Token}; use cssparser::{Delimiter, Parser, Token};
use euclid::size::{Size2D, TypedSize2D}; use euclid::size::{Size2D, TypedSize2D};
use serialize_comma_separated_list; use serialize_comma_separated_list;
use std::fmt::{self, Write}; use std::fmt;
use style_traits::{ToCss, ViewportPx}; use style_traits::{ToCss, ViewportPx};
use values::computed::{self, ToComputedValue}; use values::computed::{self, ToComputedValue};
use values::specified; use values::specified;
@ -118,18 +118,21 @@ impl ToCss for MediaQuery {
try!(write!(dest, "not ")); try!(write!(dest, "not "));
} }
let mut type_ = String::new();
match self.media_type { match self.media_type {
MediaQueryType::All => try!(write!(type_, "all")), MediaQueryType::All => try!(write!(dest, "all")),
MediaQueryType::Known(MediaType::Screen) => try!(write!(type_, "screen")), MediaQueryType::Known(MediaType::Screen) => try!(write!(dest, "screen")),
MediaQueryType::Known(MediaType::Print) => try!(write!(type_, "print")), MediaQueryType::Known(MediaType::Print) => try!(write!(dest, "print")),
MediaQueryType::Unknown(ref desc) => try!(write!(type_, "{}", desc)), MediaQueryType::Unknown(ref desc) => try!(write!(dest, "{}", desc)),
}; };
if self.expressions.is_empty() { if self.expressions.is_empty() {
return write!(dest, "{}", type_) return Ok(());
} else if type_ != "all" || self.qualifier == Some(Qualifier::Not) {
try!(write!(dest, "{} and ", type_));
} }
if self.media_type != MediaQueryType::All || self.qualifier == Some(Qualifier::Not) {
try!(write!(dest, " and "));
}
for (i, &e) in self.expressions.iter().enumerate() { for (i, &e) in self.expressions.iter().enumerate() {
try!(write!(dest, "(")); try!(write!(dest, "("));
let (mm, l) = match e { let (mm, l) = match e {