// We can emulate the styles - check if we need to...
DeviceElementCapability dec = deviceCapabilityManager.
getDeviceElementCapability("marquee", true);
boolean supportsDisplayKeyword;
final CSSVersion cssVersion = getCssVersion();
if (cssVersion == null) {
supportsDisplayKeyword = false;
} else {
CSSProperty display = cssVersion.getProperty(
StylePropertyDetails.DISPLAY);
// In for the marquee css properties to have an effect, the
// display must be set to marquee. If this keyword isn't
// supported, then all marquee properties must be emulated.
supportsDisplayKeyword = display.supportsKeyword(
DisplayKeywords.MCS_MARQUEE);
}
// The value of mcs-marquee-style determines if the other marquee
// styles apply. So, if the mcs-marquee-style property css isn't
// supported by the device, then we need to emulate all of the
// others in order to display the requested marquee effects.
boolean marqueeStyleCssSupported = supportsDisplayKeyword &&
cssVersion.getProperty(
StylePropertyDetails.MCS_MARQUEE_STYLE) != null;
boolean behaviourSupported = CapabilitySupportLevel.FULL.equals(
dec.getSupportType(DeviceCapabilityConstants.MARQUEE_BEHAVIOR_ATT));
// Emulate only if the css is not supported, and the attribute is.
if (!marqueeStyleCssSupported && behaviourSupported) {
// This renderer must be added before the other marquee
// renderers; it ensures there is a marquee element, and the
// others will not add attribute values to any other element
AttributeAndOrElementStyleEmulationPropertyRenderer renderer =
new AttributeAndOrElementStyleEmulationPropertyRenderer(
new MarqueeEmulationRenderer(
DeviceCapabilityConstants.MARQUEE_BEHAVIOR_ATT, false));
styleEmulationPropertyRendererSelector.register(
StylePropertyDetails.MCS_MARQUEE_STYLE, renderer);
// If we're going to be rendering this element, then need
// to support it when transforming...
fakePermittedChildren.add("marquee");
// The rest of the marquee styles must be emulated if the
// marquee style is emulated (and cannot be if it is not).
// Marquee repetition.
boolean marqueeLoopCssSupported = marqueeStyleCssSupported &&
(cssVersion.getProperty(
StylePropertyDetails.MCS_MARQUEE_REPETITION) != null);
boolean loopSupported = CapabilitySupportLevel.FULL.equals(
dec.getSupportType(DeviceCapabilityConstants.MARQUEE_LOOP_ATT));
if (!marqueeLoopCssSupported && loopSupported) {
AttributeAndOrElementStyleEmulationPropertyRenderer loopRenderer =
new AttributeAndOrElementStyleEmulationPropertyRenderer(
new MarqueeEmulationAttributePropertyRenderer(
DeviceCapabilityConstants.MARQUEE_LOOP_ATT, false));
styleEmulationPropertyRendererSelector.register(
StylePropertyDetails.MCS_MARQUEE_REPETITION,
loopRenderer);
}
// Marquee direction.
boolean marqueeDirCssSupported = marqueeStyleCssSupported &&
(cssVersion.getProperty(StylePropertyDetails.MCS_MARQUEE_DIRECTION) != null);
boolean directionSupported = CapabilitySupportLevel.FULL.equals(
dec.getSupportType(DeviceCapabilityConstants.MARQUEE_DIRECTION_ATT));
if (!marqueeDirCssSupported && directionSupported) {
AttributeAndOrElementStyleEmulationPropertyRenderer dirRenderer =