public EffectController(WrapPanel parent, Effects.Effect effect)
        {
            InitializeComponent();
            this.parent = parent;
            this.effect = effect;

            this.EfName.Text = effect.Name;

            if (this.effect.param == null || this.effect.param.Length == 0)
            {
                return;
            }

            int row = 1;

            for (int i = 0; i < this.effect.param.Length; i++)
            {
                Effects.Parameter prm = this.effect.param[i];
                GridView.RowDefinitions.Add(new RowDefinition());
                GridView.RowDefinitions.Add(new RowDefinition());
                GridView.RowDefinitions.Add(new RowDefinition());

                TextBlock block = new TextBlock();
                this.GridView.Children.Add(block);

                block.Text = $"{prm.Name} {(float)prm.Default}{prm.Suffix}";
                block.VerticalAlignment   = VerticalAlignment.Top;
                block.HorizontalAlignment = HorizontalAlignment.Left;
                block.Foreground          = EfName.Foreground;
                block.SetValue(Grid.RowProperty, row);

                row++;

                Slider slider = new Slider();
                this.GridView.Children.Add(slider);

                slider.IsSnapToTickEnabled = true;
                slider.TickFrequency       = (double)prm.Jump;
                slider.Minimum             = prm.Min;
                slider.Maximum             = prm.Max;
                slider.VerticalAlignment   = VerticalAlignment.Top;
                slider.SetValue(Grid.RowProperty, row);
                slider.Tag           = i;
                slider.ValueChanged += (s, e) =>
                {
                    this.effect.param[(int)slider.Tag].Value = (float)slider.Value;
                    block.Text = $"{prm.Name} {(float)slider.Value}{prm.Suffix}";
                    effect.Update();
                };
                slider.Value = prm.Default;
                this.sliders.Add(slider);

                row    += 2;
                this.h += block.Height * 2;
            }

            this.EnableEffect.Unchecked += (s, e) => this.effect.Enabled = false;
            this.EnableEffect.Checked   += (s, e) => this.effect.Enabled = true;
            this.effect.Enabled          = true;
        }
Ejemplo n.º 2
0
        public static void OutputEffectCpp(Effects.Effect effect, Formatter output)
        {
            OutputDataTypes.OutputLeadingComment(output);

            bool isInputSizeFixed = !EffectHasVariableNumberOfInputs(effect);
            int  inputsCount      = isInputSizeFixed ? effect.Inputs.InputsList.Count : 0;

            output.WriteLine("#include \"pch.h\"");
            output.WriteLine("#include \"" + effect.ClassName + ".h\"");
            output.WriteLine();
            output.WriteLine("namespace ABI { namespace Microsoft { namespace Graphics { namespace Canvas { namespace Effects");
            output.WriteLine("{");
            output.Indent();
            output.WriteLine(effect.ClassName + "::" + effect.ClassName + "()");
            output.WriteIndent();
            output.WriteLine(": CanvasEffect(CLSID_D2D1"
                             + EffectGenerator.FormatClassName(effect.Properties[0].Value) + ", "
                             + (effect.Properties.Count(p => !p.IsHandCoded) - 4) + ", "
                             + inputsCount + ", "
                             + isInputSizeFixed.ToString().ToLower() + ")");
            output.WriteLine("{");
            output.Indent();
            output.WriteLine("// Set default values");

            foreach (var property in effect.Properties)
            {
                WritePropertyInitialization(output, property);
            }
            output.Unindent();
            output.WriteLine("}");
            output.WriteLine();
            foreach (var property in effect.Properties)
            {
                WritePropertyImplementation(effect, output, property);
            }

            if (EffectHasVariableNumberOfInputs(effect))
            {
                output.WriteLine("IMPLEMENT_EFFECT_SOURCES_PROPERTY(" + effect.ClassName + ")");
                output.WriteLine();
            }
            else
            {
                for (int i = 0; i < effect.Inputs.InputsList.Count; ++i)
                {
                    var input = effect.Inputs.InputsList[i];
                    output.WriteLine("IMPLEMENT_EFFECT_SOURCE_PROPERTY(" + effect.ClassName + ",");
                    output.Indent();
                    output.WriteLine(input.Name + ",");
                    output.WriteLine(i.ToString() + ")");
                    output.Unindent();
                    output.WriteLine();
                }
            }

            output.WriteLine("ActivatableClass(" + effect.ClassName + ");");

            output.Unindent();
            output.WriteLine("}}}}}");
        }
Ejemplo n.º 3
0
        public override void Draw()
        {
            Entities.Effect_Entity EffectEntity = (Entities.Effect_Entity)mEntity;

            Effects.Effect effect = EffectEntity.GetEffect();

            UnityCard.transform.Find("Card").Find("CardName").gameObject.GetComponent <Text>().text = mEntity.Name;

            UnityEngine.Transform cardTextTransform = UnityCard.transform.Find("Card").Find("CardText");
            if (cardTextTransform != null)
            {
                UnityEngine.UI.Text cardText = cardTextTransform.gameObject.GetComponent <Text>();

                if (EffectEntity.IsPlaced)
                {
                    if (effect.GetEffectType() == Assets.GameCode.Cards.Effects.EffectType.Order ||
                        effect.GetEffectType() == Assets.GameCode.Cards.Effects.EffectType.OrderWithUses)
                    {
                        cardText.text = ((Effects.Orders.Order)effect).IsOrderUsed() ? "Order used this turn" :
                                        "Order not used this turn";
                    }
                    if (effect.GetEffectType() == Assets.GameCode.Cards.Effects.EffectType.OrderWithUses)
                    {
                        // TODO - Might need to worry about the action index?
                        // Just assume only zero for now.
                        cardText.text = cardText.text + "\nNumber of charges: " +
                                        ((Effects.Orders.OrderWithUses)effect).GetNumUses(0);
                    }
                }
                else
                {
                    cardText.text = "";
                }
            }
        }
Ejemplo n.º 4
0
 private static void EndVersionConditional(Effects.Effect effect, Formatter output)
 {
     if (effect.Overrides != null)
     {
         EndVersionConditional(effect.Overrides.WinVer, output);
     }
 }
Ejemplo n.º 5
0
        public static void OutputEffectHeader(Effects.Effect effect, Formatter output)
        {
            OutputDataTypes.OutputLeadingComment(output);

            output.WriteLine("#pragma once");
            output.WriteLine();
            output.WriteLine("namespace ABI { namespace Microsoft { namespace Graphics { namespace Canvas { namespace Effects ");
            output.WriteLine("{");
            output.Indent();
            output.WriteLine("using namespace ::Microsoft::WRL;");
            output.WriteLine("using namespace ABI::Microsoft::Graphics::Canvas;");
            output.WriteLine();
            output.WriteLine("class " + effect.ClassName + " : public RuntimeClass<");
            output.Indent();
            output.WriteLine(effect.InterfaceName + ",");
            output.WriteLine("MixIn<" + effect.ClassName + ", CanvasEffect>>,");
            output.WriteLine("public CanvasEffect");
            output.Unindent();
            output.WriteLine("{");
            output.Indent();
            output.WriteLine("InspectableClass(RuntimeClass_Microsoft_Graphics_Canvas_Effects_" + effect.ClassName + ", BaseTrust);");
            output.WriteLine();
            output.Unindent();
            output.WriteLine("public:");
            output.Indent();
            output.WriteLine(effect.ClassName + "();");
            output.WriteLine();

            foreach (var property in effect.Properties)
            {
                // Property with type string describes
                // name/author/category/description of effect but not input type
                if (property.Type == "string" || property.IsHidden)
                {
                    continue;
                }

                var propertyMacro = property.IsArray ? "EFFECT_ARRAY_PROPERTY" : "EFFECT_PROPERTY";

                output.WriteLine(propertyMacro + "(" + property.Name + ", " + property.TypeNameCpp + ");");
            }

            if (EffectHasVariableNumberOfInputs(effect))
            {
                output.WriteLine("EFFECT_SOURCES_PROPERTY();");
            }
            else
            {
                for (int i = 0; i < effect.Inputs.InputsList.Count; ++i)
                {
                    var input = effect.Inputs.InputsList[i];
                    output.WriteLine("EFFECT_PROPERTY(" + input.Name + ", IGraphicsEffectSource*);");
                }
            }
            output.Unindent();
            output.WriteLine("};");
            output.Unindent();
            output.WriteLine("}}}}}");
        }
Ejemplo n.º 6
0
 private void AvaiableEffects_MouseDoubleClick(object sender, System.Windows.Input.MouseButtonEventArgs e)
 {
     if (AvaiableEffects.SelectedIndex != -1)
     {
         AddEffect    = AssemblyHelper.GetEffect(AvaiableEffects.SelectedIndex);
         DialogResult = true;
     }
 }
Ejemplo n.º 7
0
        private static void ApplyEffectOverrides(Effects.Effect effect, Overrides.XmlBindings.Effect effectOverride, Dictionary <string, QualifiableType> typeDictionary)
        {
            effect.Overrides = effectOverride;

            // Override the effect name?
            if (effectOverride.ProjectedNameOverride != null)
            {
                effect.ClassName = effectOverride.ProjectedNameOverride;
            }

            // Override input names?
            foreach (var inputOverride in effectOverride.Inputs)
            {
                var input = effect.Inputs.InputsList.Find(p => p.Name == inputOverride.Name);
                input.Name = inputOverride.ProjectedNameOverride;
            }

            foreach (var propertyOverride in effectOverride.Properties)
            {
                var property = effect.Properties.Find(p => p.Name == propertyOverride.Name);

                if (property != null)
                {
                    // Override settings of an existing property.
                    if (propertyOverride.ProjectedNameOverride != null)
                    {
                        property.Name = propertyOverride.ProjectedNameOverride;
                    }

                    if (propertyOverride.DefaultValueOverride != null)
                    {
                        var defaultProperty = property.Properties.Single(p => p.Name == "Default");
                        defaultProperty.Value = propertyOverride.DefaultValueOverride;
                    }

                    property.IsHidden = propertyOverride.IsHidden;
                    property.ConvertRadiansToDegrees = propertyOverride.ConvertRadiansToDegrees;
                }

                if (property == null || propertyOverride.IsHandCoded)
                {
                    // Add a custom property that is part of our API surface but not defined by D2D.
                    effect.Properties.Add(new Effects.Property
                    {
                        Name        = propertyOverride.ProjectedNameOverride ?? propertyOverride.Name,
                        TypeNameIdl = string.IsNullOrEmpty(propertyOverride.Type) ? property.TypeNameIdl : propertyOverride.Type,
                        IsHandCoded = true
                    });

                    // If we are masking a real D2D property with an alternative
                    // hand-coded version, mark the real D2D property as hidden.
                    if (property != null)
                    {
                        property.IsHidden = true;
                    }
                }
            }
        }
Ejemplo n.º 8
0
 private static string GetEffectCLSID(Effects.Effect effect)
 {
     if (effect.Overrides != null && !string.IsNullOrEmpty(effect.Overrides.CLSIDOverride))
     {
         return(effect.Overrides.CLSIDOverride);
     }
     else
     {
         return("CLSID_D2D1" + EffectGenerator.FormatClassName(effect.Properties[0].Value));
     }
 }
Ejemplo n.º 9
0
        private static bool HasStatics(Effects.Effect effect)
        {
            if (effect.Overrides == null)
            {
                return(false);
            }

            return(effect.Overrides.CustomStaticMethodIdl.Count > 0 ||
                   effect.Overrides.CustomStaticMethodDecl.Count > 0 ||
                   !string.IsNullOrEmpty(effect.Overrides.IsSupportedCheck));
        }
Ejemplo n.º 10
0
        public static bool IsEffectEnabled(Effects.Effect effect)
        {
            switch (effect.Properties[0].Value)
            {
            // TODO #2648: figure out how to project effects that output computation results rather than images.
            case "Histogram":
                return(false);

            default:
                return(true);
            }
        }
Ejemplo n.º 11
0
        private static Effects.Effect ParseEffectXML(string path)
        {
            Effects.Effect effect = null;

            XmlSerializer serializer = new XmlSerializer(typeof(Effects.Effect));

            using (StreamReader reader = new StreamReader(path))
            {
                effect = (Effects.Effect)serializer.Deserialize(reader);
            }

            return(effect);
        }
Ejemplo n.º 12
0
        private static void WritePropertyMapping(Effects.Effect effect, Formatter output)
        {
            var query = from property in effect.Properties
                        where IsGeneratablePropertyMapping(property)
                        select new
            {
                Name    = property.Name,
                Index   = property.NativePropertyName,
                Mapping = GetPropertyMapping(property)
            };

            var properties = query.ToList();

            if (properties.Any())
            {
                output.WriteLine("IMPLEMENT_EFFECT_PROPERTY_MAPPING(" + effect.ClassName + ",");
                output.Indent();

                int maxNameLength    = properties.Select(property => property.Name.Length).Max();
                int maxIndexLength   = properties.Select(property => property.Index.Length).Max();
                int maxMappingLength = properties.Select(property => property.Mapping.Length).Max();

                foreach (var property in properties)
                {
                    string nameAlignment    = new string(' ', maxNameLength - property.Name.Length);
                    string indexAlignment   = new string(' ', maxIndexLength - property.Index.Length);
                    string mappingAlignment = new string(' ', maxMappingLength - property.Mapping.Length);

                    string suffix = property.Equals(properties.Last()) ? ")" : ",";

                    output.WriteLine("{ L\"" + property.Name + "\", " + nameAlignment +
                                     property.Index + ", " + indexAlignment +
                                     property.Mapping + mappingAlignment + " }" + suffix);
                }

                output.Unindent();
                output.WriteLine();
            }
        }
Ejemplo n.º 13
0
 static bool EffectHasVariableNumberOfInputs(Effects.Effect effect)
 {
     return(effect.Inputs.Maximum == "0xFFFFFFFF");
 }
Ejemplo n.º 14
0
        private static void WritePropertyImplementation(Effects.Effect effect, Formatter output, Effects.Property property)
        {
            // Property with type string describes
            // name/author/category/description of effect but not input type
            if (property.Type == "string" || property.IsHandCoded || property.IsHidden)
            {
                return;
            }

            var min = property.Properties.Find(internalProperty => internalProperty.Name == "Min");
            var max = property.Properties.Find(internalProperty => internalProperty.Name == "Max");

            bool isWithUnsupported = (property.ExcludedEnumIndexes != null) && (property.ExcludedEnumIndexes.Count != 0);

            string customConversion = null;

            if (property.ConvertRadiansToDegrees)
            {
                customConversion = "ConvertRadiansToDegrees";
            }
            else if (property.ConvertColorHdrToVector3)
            {
                customConversion = "ConvertColorHdrToVector3";
            }
            else if (property.Name == "AlphaMode")
            {
                customConversion = "ConvertAlphaMode";
            }

            bool isValidation = ((min != null) || (max != null) || isWithUnsupported) && (customConversion == null);

            string implementMacro = property.IsArray ? "IMPLEMENT_EFFECT_ARRAY_PROPERTY" : "IMPLEMENT_EFFECT_PROPERTY";

            if (isValidation)
            {
                implementMacro += "_WITH_VALIDATION";
            }

            output.WriteLine(implementMacro + "(" + effect.ClassName + ",");
            output.Indent();
            output.WriteLine(property.Name + ",");
            output.WriteLine((customConversion ?? property.TypeNameBoxed) + ",");

            if (!property.IsArray)
            {
                output.WriteLine(property.TypeNameCpp + ",");
            }

            if (isValidation)
            {
                output.WriteLine(property.NativePropertyName + ",");

                var validationChecks = new List <string>();

                if (min != null)
                {
                    AddValidationChecks(validationChecks, property, min.Value, ">=");
                }

                if (max != null)
                {
                    AddValidationChecks(validationChecks, property, max.Value, "<=");
                }

                if (isWithUnsupported)
                {
                    foreach (var index in property.ExcludedEnumIndexes)
                    {
                        validationChecks.Add("value != static_cast<" + property.TypeNameCpp + ">(" + index + ")");
                    }
                }

                output.WriteLine("(" + string.Join(") && (", validationChecks) + "))");
            }
            else
            {
                output.WriteLine(property.NativePropertyName + ")");
            }

            output.Unindent();
            output.WriteLine();
        }
Ejemplo n.º 15
0
        public static void OutputEffectCpp(Effects.Effect effect, Formatter output)
        {
            OutputDataTypes.OutputLeadingComment(output);

            bool isInputSizeFixed = !EffectHasVariableNumberOfInputs(effect);
            int  inputsCount      = isInputSizeFixed ? effect.Inputs.InputsList.Count : 0;

            output.WriteLine("#include \"pch.h\"");
            output.WriteLine("#include \"" + effect.ClassName + ".h\"");
            output.WriteLine();

            OutputVersionConditional(effect, output);

            output.WriteLine("namespace ABI { namespace Microsoft { namespace Graphics { namespace Canvas { namespace Effects");
            output.WriteLine("{");
            output.Indent();
            output.WriteLine(effect.ClassName + "::" + effect.ClassName + "(ICanvasDevice* device, ID2D1Effect* effect)");
            output.WriteIndent();
            output.WriteLine(": CanvasEffect(EffectId(), "
                             + (effect.Properties.Count(p => (!p.IsHandCoded && !p.IsHdrAlias)) - 4) + ", "
                             + inputsCount + ", "
                             + isInputSizeFixed.ToString().ToLower() + ", "
                             + "device, effect, static_cast<" + effect.InterfaceName + "*>(this))");
            output.WriteLine("{");
            output.Indent();
            output.WriteLine("if (!effect)");
            output.WriteLine("{");
            output.Indent();
            output.WriteLine("// Set default values");

            foreach (var property in effect.Properties)
            {
                WritePropertyInitialization(output, property);
            }
            output.Unindent();
            output.WriteLine("}");
            output.Unindent();
            output.WriteLine("}");
            output.WriteLine();
            foreach (var property in effect.Properties)
            {
                WritePropertyImplementation(effect, output, property);
            }

            if (EffectHasVariableNumberOfInputs(effect))
            {
                output.WriteLine("IMPLEMENT_EFFECT_SOURCES_PROPERTY(" + effect.ClassName + ")");
                output.WriteLine();
            }
            else
            {
                for (int i = 0; i < effect.Inputs.InputsList.Count; ++i)
                {
                    var input = effect.Inputs.InputsList[i];
                    output.WriteLine("IMPLEMENT_EFFECT_SOURCE_PROPERTY(" + effect.ClassName + ",");
                    output.Indent();
                    output.WriteLine(input.Name + ",");
                    output.WriteLine(i.ToString() + ")");
                    output.Unindent();
                    output.WriteLine();
                }
            }

            WritePropertyMapping(effect, output);

            if (effect.Overrides == null || !effect.Overrides.HasStatics)
            {
                output.WriteLine("ActivatableClass(" + effect.ClassName + ");");
            }

            output.Unindent();
            output.WriteLine("}}}}}");

            EndVersionConditional(effect, output);
        }
Ejemplo n.º 16
0
        public static void OutputEffectHeader(Effects.Effect effect, Formatter output)
        {
            OutputDataTypes.OutputLeadingComment(output);

            output.WriteLine("#pragma once");
            output.WriteLine();

            OutputVersionConditional(effect, output);

            output.WriteLine("namespace ABI { namespace Microsoft { namespace Graphics { namespace Canvas { namespace Effects ");
            output.WriteLine("{");
            output.Indent();
            output.WriteLine("using namespace ::Microsoft::WRL;");
            output.WriteLine("using namespace ABI::Microsoft::Graphics::Canvas;");
            output.WriteLine();
            output.WriteLine("class " + effect.ClassName + " : public RuntimeClass<");
            output.Indent();
            output.WriteLine(effect.InterfaceName + ",");
            output.WriteLine("MixIn<" + effect.ClassName + ", CanvasEffect>>,");
            output.WriteLine("public CanvasEffect");
            output.Unindent();
            output.WriteLine("{");
            output.Indent();
            output.WriteLine("InspectableClass(RuntimeClass_Microsoft_Graphics_Canvas_Effects_" + effect.ClassName + ", BaseTrust);");
            output.WriteLine();
            output.Unindent();
            output.WriteLine("public:");
            output.Indent();
            output.WriteLine(effect.ClassName + "(ICanvasDevice* device = nullptr, ID2D1Effect* effect = nullptr);");
            output.WriteLine();
            output.WriteLine("static IID const& EffectId() { return " + GetEffectCLSID(effect) + "; }");
            output.WriteLine();

            foreach (var property in effect.Properties)
            {
                // Property with type string describes
                // name/author/category/description of effect but not input type
                if (property.Type == "string" || property.IsHidden)
                {
                    continue;
                }

                var propertyMacro = property.IsArray ? "EFFECT_ARRAY_PROPERTY" : "EFFECT_PROPERTY";

                output.WriteLine(propertyMacro + "(" + property.Name + ", " + property.TypeNameCpp + ");");
            }

            if (EffectHasVariableNumberOfInputs(effect))
            {
                output.WriteLine("EFFECT_SOURCES_PROPERTY();");
            }
            else
            {
                for (int i = 0; i < effect.Inputs.InputsList.Count; ++i)
                {
                    var input = effect.Inputs.InputsList[i];
                    output.WriteLine("EFFECT_PROPERTY(" + input.Name + ", IGraphicsEffectSource*);");
                }
            }

            bool hasPropertyMapping          = effect.Properties.Any(IsGeneratablePropertyMapping);
            bool hasHandCodedPropertyMapping = effect.Properties.Any(p => p.IsHandCoded);

            if (hasPropertyMapping || hasHandCodedPropertyMapping)
            {
                output.WriteLine();

                if (hasPropertyMapping)
                {
                    output.WriteLine("EFFECT_PROPERTY_MAPPING();");
                }

                if (hasHandCodedPropertyMapping)
                {
                    output.WriteLine("EFFECT_PROPERTY_MAPPING_HANDCODED();");
                }
            }

            output.Unindent();
            output.WriteLine("};");
            output.Unindent();
            output.WriteLine("}}}}}");

            EndVersionConditional(effect, output);
        }
Ejemplo n.º 17
0
        public static void OutputEffectIdl(Effects.Effect effect, Formatter output)
        {
            OutputDataTypes.OutputLeadingComment(output);

            OutputVersionConditional(effect, output);

            output.WriteLine("namespace Microsoft.Graphics.Canvas.Effects");
            output.WriteLine("{");
            output.Indent();

            // Output all enums specific to this effect
            foreach (var property in effect.Properties)
            {
                if (property.Type == "enum" &&
                    property.EnumFields.Usage == Effects.EnumValues.UsageType.UsedByOneEffect &&
                    property.ShouldProject)
                {
                    OutputEnum(property, output);
                    output.WriteLine();
                }
            }

            output.WriteLine("runtimeclass " + effect.ClassName + ";");
            output.WriteLine();
            output.WriteLine("[version(VERSION), uuid(" + effect.Uuid + "), exclusiveto(" + effect.ClassName + ")]");
            output.WriteLine("interface " + effect.InterfaceName + " : IInspectable");
            output.WriteIndent();
            output.WriteLine("requires ICanvasEffect");
            output.WriteLine("{");
            output.Indent();

            foreach (var property in effect.Properties)
            {
                // Property with type string describes
                // name/author/category/description of effect but not input type
                if (property.Type == "string" || property.IsHidden)
                {
                    continue;
                }

                output.WriteLine("[propget]");
                if (property.IsArray)
                {
                    output.WriteLine("HRESULT " + property.Name + "([out] UINT32* valueCount, [out, size_is(, *valueCount), retval] " + property.TypeNameIdl + "** valueElements);");
                }
                else
                {
                    output.WriteLine("HRESULT " + property.Name + "([out, retval] " + property.TypeNameIdl + "* value);");
                }
                output.WriteLine();

                output.WriteLine("[propput]");
                if (property.IsArray)
                {
                    output.WriteLine("HRESULT " + property.Name + "([in] UINT32 valueCount, [in, size_is(valueCount)] " + property.TypeNameIdl + "* valueElements);");
                }
                else
                {
                    output.WriteLine("HRESULT " + property.Name + "([in] " + property.TypeNameIdl + " value);");
                }
                output.WriteLine();
            }

            if (EffectHasVariableNumberOfInputs(effect))
            {
                output.WriteLine("[propget]");
                output.WriteLine("HRESULT Sources([out, retval] Windows.Foundation.Collections.IVector<IGRAPHICSEFFECTSOURCE*>** value);");
                output.WriteLine();
            }
            else
            {
                for (int i = 0; i < effect.Inputs.InputsList.Count; ++i)
                {
                    var input = effect.Inputs.InputsList[i];

                    output.WriteLine("[propget]");
                    output.WriteLine("HRESULT " + input.Name + "([out, retval] IGRAPHICSEFFECTSOURCE** source);");
                    output.WriteLine();

                    output.WriteLine("[propput]");
                    output.WriteLine("HRESULT " + input.Name + "([in] IGRAPHICSEFFECTSOURCE* source);");
                    output.WriteLine();
                }
            }

            output.Unindent();
            output.WriteLine("};");
            output.WriteLine();

            string statics = "";

            if (effect.Overrides != null && effect.Overrides.HasStatics)
            {
                statics = ", static(" + effect.InterfaceName + "Statics, VERSION)";
            }

            output.WriteLine("[version(VERSION), activatable(VERSION)" + statics + "]");

            output.WriteLine("runtimeclass " + effect.ClassName);
            output.WriteLine("{");
            output.Indent();
            output.WriteLine("[default] interface " + effect.InterfaceName + ";");
            output.Unindent();
            output.WriteLine("}");
            output.Unindent();
            output.WriteLine("}");

            EndVersionConditional(effect, output);
        }
Ejemplo n.º 18
0
 protected override void EmitEffect(Effects.Effect effect)
 {
     Writer.AppendLine(effect.ToString());
 }
Ejemplo n.º 19
0
 /// <summary>
 /// Constructs EffectNote
 /// </summary>
 /// <param name="time"></param>
 /// <param name="effect"></param>
 /// <param name="length"></param>
 public EffectNote(double time, Effects.Effect effect, double length) : base(time)
 {
     Effect = effect;
     Length = length;
 }
Ejemplo n.º 20
0
        public static void OutputEffectIdl(Effects.Effect effect, Formatter output)
        {
            OutputDataTypes.OutputLeadingComment(output);

            output.WriteLine("namespace Microsoft.Graphics.Canvas.Effects");
            output.WriteLine("{");
            output.Indent();

            // Output all enums specific to this effect
            foreach (var property in effect.Properties)
            {
                if (property.Type == "enum" &&
                    property.EnumFields.Usage == Effects.EnumValues.UsageType.UsedByOneEffect &&
                    property.ShouldProject)
                {
                    OutputEnum(property, output);
                    output.WriteLine();
                }
            }

            output.WriteLine("runtimeclass " + effect.ClassName + ";");
            output.WriteLine();
            output.WriteLine("[version(VERSION), uuid(" + effect.Uuid + "), exclusiveto(" + effect.ClassName + ")]");
            output.WriteLine("interface " + effect.InterfaceName + " : IInspectable");
            output.WriteIndent();
            output.WriteLine("requires Microsoft.Graphics.Canvas.ICanvasImage");
            output.WriteLine("{");
            output.Indent();

            foreach (var property in effect.Properties)
            {
                // Property with type string describes
                // name/author/category/description of effect but not input type
                if (property.Type == "string" || property.IsHidden)
                {
                    continue;
                }

                output.WriteLine("[propget]");
                if (property.IsArray)
                {
                    output.WriteLine("HRESULT " + property.Name + "([out] UINT32* valueCount, [out, size_is(, *valueCount), retval] " + property.TypeNameIdl + "** valueElements);");
                }
                else
                {
                    output.WriteLine("HRESULT " + property.Name + "([out, retval] " + property.TypeNameIdl + "* value);");
                }
                output.WriteLine();

                output.WriteLine("[propput]");
                if (property.IsArray)
                {
                    output.WriteLine("HRESULT " + property.Name + "([in] UINT32 valueCount, [in, size_is(valueCount)] " + property.TypeNameIdl + "* valueElements);");
                }
                else
                {
                    output.WriteLine("HRESULT " + property.Name + "([in] " + property.TypeNameIdl + " value);");
                }
                output.WriteLine();
            }

            // Check if inputs specify maximum attribute in xml and if it is marked as unlimited
            if (!(effect.Inputs.Maximum != null && effect.Inputs.Maximum == "0xFFFFFFFF"))
            {
                for (int i = 0; i < effect.Inputs.InputsList.Count; ++i)
                {
                    var input = effect.Inputs.InputsList[i];

                    output.WriteLine("[propget]");
                    output.WriteLine("HRESULT " + input.Name + "([out, retval] IEffectInput** input);");
                    output.WriteLine();

                    output.WriteLine("[propput]");
                    output.WriteLine("HRESULT " + input.Name + "([in] IEffectInput* input);");
                    output.WriteLine();
                }
            }

            output.Unindent();
            output.WriteLine("};");
            output.WriteLine();

            output.WriteLine("[version(VERSION), activatable(VERSION)]");
            output.WriteLine("runtimeclass " + effect.ClassName);
            output.WriteLine("{");
            output.Indent();
            output.WriteLine("[default] interface " + effect.InterfaceName + ";");
            output.WriteLine("interface IEffect;");
            output.Unindent();
            output.WriteLine("}");
            output.Unindent();
            output.WriteLine("}");
        }
Ejemplo n.º 21
0
        public static void OutputEffectCpp(Effects.Effect effect, Formatter output)
        {
            OutputDataTypes.OutputLeadingComment(output);

            bool isInputSizeFixed = !EffectHasVariableNumberOfInputs(effect);
            int  inputsCount      = isInputSizeFixed ? effect.Inputs.InputsList.Count : 0;

            output.WriteLine("#include \"pch.h\"");
            output.WriteLine("#include \"" + effect.ClassName + ".h\"");
            output.WriteLine();

            OutputVersionConditional(effect, output);

            output.WriteLine("namespace ABI { namespace Microsoft { namespace Graphics { namespace Canvas { namespace Effects");
            output.WriteLine("{");
            output.Indent();
            output.WriteLine(effect.ClassName + "::" + effect.ClassName + "(ICanvasDevice* device, ID2D1Effect* effect)");
            output.WriteIndent();
            output.WriteLine(": CanvasEffect(EffectId(), "
                             + (effect.Properties.Count(p => (!p.IsHandCoded && !p.IsHdrAlias)) - 4) + ", "
                             + inputsCount + ", "
                             + isInputSizeFixed.ToString().ToLower() + ", "
                             + "device, effect, static_cast<" + effect.InterfaceName + "*>(this))");
            output.WriteLine("{");
            output.Indent();

            if (effect.Overrides != null && !string.IsNullOrEmpty(effect.Overrides.IsSupportedCheck))
            {
                output.WriteLine("if (!SharedDeviceState::GetInstance()->Is" + effect.Overrides.IsSupportedCheck + "Supported())");
                output.Indent();
                output.WriteLine("ThrowHR(E_NOTIMPL, Strings::NotSupportedOnThisVersionOfWindows);");
                output.Unindent();
                output.WriteLine();
            }

            output.WriteLine("if (!effect)");
            output.WriteLine("{");
            output.Indent();
            output.WriteLine("// Set default values");

            foreach (var property in effect.Properties)
            {
                WritePropertyInitialization(output, property);
            }
            output.Unindent();
            output.WriteLine("}");
            output.Unindent();
            output.WriteLine("}");
            output.WriteLine();
            foreach (var property in effect.Properties)
            {
                WritePropertyImplementation(effect, output, property);
            }

            if (EffectHasVariableNumberOfInputs(effect))
            {
                output.WriteLine("IMPLEMENT_EFFECT_SOURCES_PROPERTY(" + effect.ClassName + ")");
                output.WriteLine();
            }
            else
            {
                for (int i = 0; i < effect.Inputs.InputsList.Count; ++i)
                {
                    var input = effect.Inputs.InputsList[i];
                    output.WriteLine("IMPLEMENT_EFFECT_SOURCE_PROPERTY(" + effect.ClassName + ",");
                    output.Indent();
                    output.WriteLine(input.Name + ",");
                    output.WriteLine(i.ToString() + ")");
                    output.Unindent();
                    output.WriteLine();
                }
            }

            WritePropertyMapping(effect, output);

            if (HasStatics(effect))
            {
                output.WriteLine("IFACEMETHODIMP " + effect.ClassName + "Factory::ActivateInstance(IInspectable** instance)");
                output.WriteLine("{");
                output.Indent();
                output.WriteLine("return ExceptionBoundary([&]");
                output.WriteLine("{");
                output.Indent();
                output.WriteLine("auto effect = Make<" + effect.ClassName + ">();");
                output.WriteLine("CheckMakeResult(effect);");
                output.WriteLine();
                output.WriteLine("ThrowIfFailed(effect.CopyTo(instance));");
                output.Unindent();
                output.WriteLine("});");
                output.Unindent();
                output.WriteLine("}");
                output.WriteLine();

                if (!string.IsNullOrEmpty(effect.Overrides.IsSupportedCheck))
                {
                    output.WriteLine("IFACEMETHODIMP " + effect.ClassName + "Factory::get_IsSupported(_Out_ boolean* result)");
                    output.WriteLine("{");
                    output.Indent();
                    output.WriteLine("return ExceptionBoundary([&]");
                    output.WriteLine("{");
                    output.Indent();
                    output.WriteLine("CheckInPointer(result);");
                    output.WriteLine("*result = SharedDeviceState::GetInstance()->Is" + effect.Overrides.IsSupportedCheck + "Supported();");
                    output.Unindent();
                    output.WriteLine("});");
                    output.Unindent();
                    output.WriteLine("}");
                    output.WriteLine();
                }

                output.WriteLine("ActivatableClassWithFactory(" + effect.ClassName + ", " + effect.ClassName + "Factory);");
            }
            else
            {
                output.WriteLine("ActivatableClassWithFactory(" + effect.ClassName + ", SimpleAgileActivationFactory<" + effect.ClassName + ">);");
            }

            output.Unindent();
            output.WriteLine("}}}}}");

            EndVersionConditional(effect, output);
        }
Ejemplo n.º 22
0
 public RemovedLink(Entities.Entity Parent, Effects.Effect LinkedEffect)
 {
     this.Parent   = (Entities.Unit)Parent;
     mLinkedEffect = LinkedEffect;
 }
Ejemplo n.º 23
0
 public static int IndexOf(Effects.Effect effect)
 {
     return(GetEffects().ToList().IndexOf(effect.GetType()));
 }