Example #1
0
        //用于向列表中添加一个操作并将 _redoItem 设为空
        //当确实向列表中添加了一个操作时返回 true
        //否则,如果要添加项为空或者要添加项与列表中最后一项的操作类型相同则返回 false
        //这样,拖拉同一个滑块时将只会向列表中添加一个操作
        public bool Add(ActionItem actionItem)
        {
            //添加一个新操作时先置空 redo
            _redoItem = null;
            ActionItem item = this.LastItem;

            //添加项不为空且与列表中最后一项操作类型相同时
            if (item != null && item.Action == actionItem.Action)
            {
                //检查操作是否只为颜色转换
                if (((item.Action == PhotoAction.ConvertSepia) ||
                     (item.Action == PhotoAction.ConvertGrayscale)))
                {
                    //  just return, don't want to reapply color conversion actions
                    return(false);
                }

                //如果只是以下类型的操作,则只需要重新设定操作后的值
                if (((item.Action == PhotoAction.Brightness) ||
                     ((item.Action == PhotoAction.Contrast) ||
                      ((item.Action == PhotoAction.Saturation) ||
                       (item.Action == PhotoAction.Gamma)))))
                {
                    // 更新当前操作的数值
                    item.Percent = actionItem.Percent;
                    // 更新滑块的值,以便于执行撤销操作时能够重置操作前的值
                    item.SetSliderValues(Global.SliderValues.Contrast,
                                         Global.SliderValues.Brightness,
                                         Global.SliderValues.Gamma,
                                         Global.SliderValues.Saturation);
                    return(false);
                }
            }
            //否则将新操作加入到列表中,并返回 true
            _list.Add(new ActionItem(actionItem));
            return(true);
        }