コード例 #1
0
ファイル: RenderTreeTests.cs プロジェクト: Winster332/Quantum
        public CSSStyleDeclaration GetStyleDiff(CSSStyleDeclaration style1, CSSStyleDeclaration style2)
        {
            var type1 = style1.GetType();
            var type2 = style2.GetType();

            var fields1     = type1.GetProperties().ToDictionary(x => x.Name, x => x.GetValue(style1));
            var fields2     = type2.GetProperties().ToDictionary(x => x.Name, x => x.GetValue(style2));
            var resultStyle = style2.Clone() as CSSStyleDeclaration;

            foreach (var keyValuePair in fields1)
            {
                var fieldName   = keyValuePair.Key;
                var fieldValue1 = keyValuePair.Value;
                var fieldValue2 = fields2[fieldName];

                var jt1 = JsonConvert.SerializeObject(fieldValue1);
                var jt2 = JsonConvert.SerializeObject(fieldValue2);

                if (jt1 != jt2)
                {
                    resultStyle.GetType().GetProperty(fieldName).SetValue(resultStyle, fieldValue2);
                }
            }

            return(resultStyle);
        }
コード例 #2
0
ファイル: RenderTree.cs プロジェクト: Winster332/Quantum
        private CSSStyleDeclaration MergeStyle(CSSStyleDeclaration def1, CSSStyleDeclaration def2)
        {
            var result = def2.Clone() as CSSStyleDeclaration;

            foreach (var def1ChangedField in def1.ChangedFields)
            {
                var isDoubleChenge = def2.ChangedFields.FirstOrDefault(x => x == def1ChangedField);

                if (isDoubleChenge == null)
                {
                    var def1PropertyValue = def1.GetType().GetProperty(def1ChangedField).GetValue(def1);
                    result.GetType().GetProperty(def1ChangedField).SetValue(result, def1PropertyValue);
                }
            }

            return(result);
        }