Пример #1
0
        /// <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);
            }
            }
        }