Пример #1
0
        public static MediaDefinition Lookup(EMediaFeatureName Name)
        {
            if (CssDefinitions.MediaDefinitions.TryGetValue(Name, out MediaDefinition def))
            {
                return(def);
            }

            return(null);
        }
Пример #2
0
        // private bool IsNegated = false;
        #endregion

        #region Constructors
        /// <summary>
        /// Creates a new 'boolean' type media feature
        /// </summary>
        /// <param name="name"></param>
        public MediaFeature(EMediaFeatureName Name)
        {
            Context = EMediaFeatureContext.Boolean;

            MediaDefinition def = MediaDefinition.Lookup(Name);

            if (def != null)
            {
                IsValid = true;
                /* if an allowed type is keywords and 'none' is an option then we match it against that keyword */
                if (0 != (def.AllowedTypes & ECssValueTypes.KEYWORD) && def.KeywordWhitelist.Contains("none"))
                {
                    Values = new CssValue[] { CssValue.From(Name), CssValue.None };
                }
                else if (0 != (def.AllowedTypes & ECssValueTypes.INTEGER))
                {
                    Values = new CssValue[] { CssValue.From(Name), CssValue.From(0) };
                }
                else if (0 != (def.AllowedTypes & ECssValueTypes.DIMENSION))
                {
                    Values = new CssValue[] { CssValue.From(Name), CssValue.From(0, ECssUnit.PX) };
                }
                else if (0 != (def.AllowedTypes & ECssValueTypes.RESOLUTION))
                {
                    Values = new CssValue[] { CssValue.From(Name), CssValue.From(0, ECssUnit.DPPX) };
                }
            }
            else
            {
                /* This isnt a supported feature, therefore it should always evaluate to false */
                IsValid = false;
            }

            /* For sanity just catch the case where we dont have values to compare here */
            if (Values.Length <= 0)
            {
                IsValid = false;
            }
        }
Пример #3
0
        static object Resolve_Media_Name_Value(Document document, EMediaFeatureName Name)
        {
            Screen screen = document.defaultView.screen;

            switch (Name)
            {
            case EMediaFeatureName.AspectRatio:
            case EMediaFeatureName.Min_AspectRatio:
            case EMediaFeatureName.Max_AspectRatio:
            {
                return(screen.width / (double)screen.height);
            }

            case EMediaFeatureName.Width:
            case EMediaFeatureName.Min_Width:
            case EMediaFeatureName.Max_Width:
            {
                return(screen.width);
            }

            case EMediaFeatureName.Height:
            case EMediaFeatureName.Min_Height:
            case EMediaFeatureName.Max_Height:
            {
                return(screen.height);
            }

            case EMediaFeatureName.Color:
            case EMediaFeatureName.Min_Color:
            case EMediaFeatureName.Max_Color:
            {
                return(screen.colorDepth);
            }

            case EMediaFeatureName.Monochrome:
            case EMediaFeatureName.Min_Monochrome:
            case EMediaFeatureName.Max_Monochrome:
            {
                return(screen.monochromeDepth);
            }

            case EMediaFeatureName.ColorIndex:
            case EMediaFeatureName.Min_ColorIndex:
            case EMediaFeatureName.Max_ColorIndex:
            {
                return(screen.colorIndex);
            }

            case EMediaFeatureName.Grid:
            {
                return(screen.isGrid);
            }

            case EMediaFeatureName.Update:
            {
                return(screen.refreshRate);
            }

            default:
            {
                throw new NotImplementedException($"Media feature \"{Enum.GetName(typeof(EMediaFeatureName), Name)}\" is not implemented");
            }
            }
        }
Пример #4
0
        bool Compare_Keyword(Document document, EMediaFeatureName Name, string keyword)
        {
            switch (Name)
            {
            case EMediaFeatureName.Orientation:
            {
                if (Lookup.TryEnum(keyword, out EMediaOrientation outOrientation))
                {
                    double width  = (double)Resolve_Media_Name_Value(document, EMediaFeatureName.Width);
                    double height = (double)Resolve_Media_Name_Value(document, EMediaFeatureName.Height);

                    return((outOrientation == EMediaOrientation.Landscape) ? width >= height: height >= width);
                }
            }
            break;

            case EMediaFeatureName.Update:
            {
                if (Lookup.TryEnum(keyword, out EMediaUpdate outUpdateRate))
                {
                    double refreshRate = (double)Resolve_Media_Name_Value(document, Name);
                    switch (outUpdateRate)
                    {
                    case EMediaUpdate.None:
                    {
                        return(0 == refreshRate);
                    }

                    case EMediaUpdate.Slow:
                    {
                        return(refreshRate < 20);
                    }

                    case EMediaUpdate.Fast:
                    {
                        return(refreshRate > 20);
                    }
                    }
                }
            }
            break;

            case EMediaFeatureName.Color:
            case EMediaFeatureName.Min_Color:
            case EMediaFeatureName.Max_Color:
            {
                return((ulong)Resolve_Media_Name_Value(document, Name) > 0);
            }

            case EMediaFeatureName.Monochrome:
            case EMediaFeatureName.Min_Monochrome:
            case EMediaFeatureName.Max_Monochrome:
            {
                return((ulong)Resolve_Media_Name_Value(document, Name) > 0);
            }

            case EMediaFeatureName.ColorIndex:
            case EMediaFeatureName.Min_ColorIndex:
            case EMediaFeatureName.Max_ColorIndex:
            {
                return((ulong)Resolve_Media_Name_Value(document, Name) > 0);
            }

            case EMediaFeatureName.Grid:
            {
                return((ulong)Resolve_Media_Name_Value(document, Name) > 0);
            }

            case EMediaFeatureName.Width:
            case EMediaFeatureName.Min_Width:
            case EMediaFeatureName.Max_Width:
            {
                return((long)Resolve_Media_Name_Value(document, Name) > 0);
            }

            case EMediaFeatureName.Height:
            case EMediaFeatureName.Min_Height:
            case EMediaFeatureName.Max_Height:
            {
                return((long)Resolve_Media_Name_Value(document, Name) > 0);
            }

            case EMediaFeatureName.AspectRatio:
            case EMediaFeatureName.Min_AspectRatio:
            case EMediaFeatureName.Max_AspectRatio:
            {
                return((double)Resolve_Media_Name_Value(document, Name) > 0);
            }
            }

            return(false);
        }