/// <summary> /// Tries to match a /// <see cref="MediaDeviceDescription"/>. /// </summary> /// <param name="deviceDescription">the device description</param> /// <returns>true, if successful</returns> public virtual bool Matches(MediaDeviceDescription deviceDescription) { switch (feature) { case MediaFeature.COLOR: { int?val = CssUtils.ParseInteger(value); if (minPrefix) { return(val != null && deviceDescription.GetBitsPerComponent() >= val); } else { if (maxPrefix) { return(val != null && deviceDescription.GetBitsPerComponent() <= val); } else { return(val == null?deviceDescription.GetBitsPerComponent() != 0 : val == deviceDescription.GetBitsPerComponent ()); } } goto case MediaFeature.COLOR_INDEX; } case MediaFeature.COLOR_INDEX: { int?val = CssUtils.ParseInteger(value); if (minPrefix) { return(val != null && deviceDescription.GetColorIndex() >= val); } else { if (maxPrefix) { return(val != null && deviceDescription.GetColorIndex() <= val); } else { return(val == null?deviceDescription.GetColorIndex() != 0 : val == deviceDescription.GetColorIndex()); } } goto case MediaFeature.ASPECT_RATIO; } case MediaFeature.ASPECT_RATIO: { int[] aspectRatio = CssUtils.ParseAspectRatio(value); if (minPrefix) { return(aspectRatio != null && aspectRatio[0] * deviceDescription.GetHeight() >= aspectRatio[1] * deviceDescription .GetWidth()); } else { if (maxPrefix) { return(aspectRatio != null && aspectRatio[0] * deviceDescription.GetHeight() <= aspectRatio[1] * deviceDescription .GetWidth()); } else { return(aspectRatio != null && CssUtils.CompareFloats(aspectRatio[0] * deviceDescription.GetHeight(), aspectRatio [1] * deviceDescription.GetWidth())); } } goto case MediaFeature.GRID; } case MediaFeature.GRID: { int?val = CssUtils.ParseInteger(value); return(val != null && val == 0 && !deviceDescription.IsGrid() || deviceDescription.IsGrid()); } case MediaFeature.SCAN: { return(Object.Equals(value, deviceDescription.GetScan())); } case MediaFeature.ORIENTATION: { return(Object.Equals(value, deviceDescription.GetOrientation())); } case MediaFeature.MONOCHROME: { int?val = CssUtils.ParseInteger(value); if (minPrefix) { return(val != null && deviceDescription.GetMonochrome() >= val); } else { if (maxPrefix) { return(val != null && deviceDescription.GetMonochrome() <= val); } else { return(val == null?deviceDescription.GetMonochrome() > 0 : val == deviceDescription.GetMonochrome()); } } goto case MediaFeature.HEIGHT; } case MediaFeature.HEIGHT: { float val = ParseAbsoluteLength(value); if (minPrefix) { return(deviceDescription.GetHeight() >= val); } else { if (maxPrefix) { return(deviceDescription.GetHeight() <= val); } else { return(deviceDescription.GetHeight() > 0); } } goto case MediaFeature.WIDTH; } case MediaFeature.WIDTH: { float val = ParseAbsoluteLength(value); if (minPrefix) { return(deviceDescription.GetWidth() >= val); } else { if (maxPrefix) { return(deviceDescription.GetWidth() <= val); } else { return(deviceDescription.GetWidth() > 0); } } goto case MediaFeature.RESOLUTION; } case MediaFeature.RESOLUTION: { float val = CssUtils.ParseResolution(value); if (minPrefix) { return(deviceDescription.GetResolution() >= val); } else { if (maxPrefix) { return(deviceDescription.GetResolution() <= val); } else { return(deviceDescription.GetResolution() > 0); } } goto default; } default: { return(false); } } }