/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim: set ts=8 sts=2 et sw=2 tw=80: */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
// align: enum const nsAttrValue* value = aBuilder.GetAttr(nsGkAtoms::align); if (value && value->Type() == nsAttrValue::eEnum) { // Map align attribute into auto side margins switch (StyleTextAlign(value->GetEnumValue())) { case StyleTextAlign::Left:
aBuilder.SetPixelValueIfUnset(eCSSProperty_margin_left, 0.0f);
aBuilder.SetAutoValueIfUnset(eCSSProperty_margin_right); break; case StyleTextAlign::Right:
aBuilder.SetAutoValueIfUnset(eCSSProperty_margin_left);
aBuilder.SetPixelValueIfUnset(eCSSProperty_margin_right, 0.0f); break; case StyleTextAlign::Center:
aBuilder.SetAutoValueIfUnset(eCSSProperty_margin_left);
aBuilder.SetAutoValueIfUnset(eCSSProperty_margin_right); break; default:
MOZ_ASSERT_UNREACHABLE("Unknown value"); break;
}
} if (!aBuilder.PropertyIsSet(eCSSProperty_height)) { // size: integer if (noshade) { // noshade case: size is set using the border
aBuilder.SetAutoValue(eCSSProperty_height);
} else { // normal case // the height includes the top and bottom borders that are initially 1px. // for size=1, html.css has a special case rule that makes this work by // removing all but the top border. const nsAttrValue* value = aBuilder.GetAttr(nsGkAtoms::size); if (value && value->Type() == nsAttrValue::eInteger) {
aBuilder.SetPixelValue(eCSSProperty_height,
(float)value->GetIntegerValue());
} // else use default value from html.css
}
}
// if not noshade, border styles are dealt with by html.css if (noshade) { // size: integer // if a size is set, use half of it per side, otherwise, use 1px per side float sizePerSide; bool allSides = true;
value = aBuilder.GetAttr(nsGkAtoms::size); if (value && value->Type() == nsAttrValue::eInteger) {
sizePerSide = (float)value->GetIntegerValue() / 2.0f; if (sizePerSide < 1.0f) { // XXX When the pixel bug is fixed, all the special casing for // subpixel borders should be removed. // In the meantime, this makes http://www.microsoft.com/ look right.
sizePerSide = 1.0f;
allSides = false;
}
} else {
sizePerSide = 1.0f; // default to a 2px high line
}
aBuilder.SetPixelValueIfUnset(eCSSProperty_border_top_width, sizePerSide); if (allSides) {
aBuilder.SetPixelValueIfUnset(eCSSProperty_border_right_width,
sizePerSide);
aBuilder.SetPixelValueIfUnset(eCSSProperty_border_bottom_width,
sizePerSide);
aBuilder.SetPixelValueIfUnset(eCSSProperty_border_left_width,
sizePerSide);
}
if (!aBuilder.PropertyIsSet(eCSSProperty_border_top_style)) {
aBuilder.SetKeywordValue(eCSSProperty_border_top_style,
StyleBorderStyle::Solid);
} if (allSides) {
aBuilder.SetKeywordValueIfUnset(eCSSProperty_border_right_style,
StyleBorderStyle::Solid);
aBuilder.SetKeywordValueIfUnset(eCSSProperty_border_bottom_style,
StyleBorderStyle::Solid);
aBuilder.SetKeywordValueIfUnset(eCSSProperty_border_left_style,
StyleBorderStyle::Solid);
// If it would be noticeable, set the border radius to // 10000px on all corners; this triggers the clamping to make // circular ends. This assumes the <hr> isn't larger than // that in *both* dimensions. for (const nsCSSPropertyID* props =
nsCSSProps::SubpropertyEntryFor(eCSSProperty_border_radius);
*props != eCSSProperty_UNKNOWN; ++props) {
aBuilder.SetPixelValueIfUnset(*props, 10000.0f);
}
}
} // color: a color // (we got the color attribute earlier) if (colorIsSet) {
aBuilder.SetColorValueIfUnset(eCSSProperty_color, color);
}
MapWidthAttributeInto(aBuilder);
MapCommonAttributesInto(aBuilder);
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.