Пример #1
0
        //============================================================
        // <T>开始设计。</T>
        //
        // @param x 横坐标
        // @param y 纵坐标
        // @param modeEnable 模式切换
        // @param appendMode 追加模式
        // @param testArgs 测试参数
        //============================================================
        public void DesignBegin(int x, int y, bool modeEnable, bool appendMode, SUiTestArgs testArgs = null)
        {
            FUiControl focusControl = _selection.FocusControl;

            // 设置落点
            _mouseDownPoint.Set(x, y);
            // 更新游标
            UpdateCursor(x, y);
            // 设计模式
            switch ((ERcAlign)_aideAlignCd)
            {
            case ERcAlign.Center:
                if (modeEnable)
                {
                    _designMode = EUiDesignMode.Move;
                    _selection.BoundsStore();
                }
                break;

            case ERcAlign.Left:
            case ERcAlign.Right:
            case ERcAlign.Top:
            case ERcAlign.Bottom:
            case ERcAlign.LeftTop:
            case ERcAlign.RightBottom:
            case ERcAlign.RightTop:
            case ERcAlign.LeftBottom:
                if (modeEnable)
                {
                    _designMode = EUiDesignMode.Size;
                    _selection.BoundsStore();
                }
                break;

            case ERcAlign.None:
                _designMode = EUiDesignMode.None;
                // 选择控件
                SUiTestArgs args          = TestPoint(x, y, testArgs);
                FUiControl  selectControl = args.Control;
                if (appendMode && (selectControl != null) && _selection.HasSelectControl())
                {
                    // 追加模式下,只能增加同父亲的对象
                    if (selectControl.Parent == focusControl.Parent)
                    {
                        _selection.AddSelectControl(selectControl);
                    }
                }
                else
                {
                    _selection.FocusControl = selectControl;
                }
                break;
            }
        }
Пример #2
0
        //============================================================
        // <T>绘制处理。</T>
        //
        // @param args 参数
        //============================================================
        public override void Draw(SUiDrawArgs args)
        {
            // 设置数据
            bool       visible  = TestVisible();
            SIntPoint2 position = CalculatePosition();

            args.Position.Assign(position);
            // 计算数据
            _designLocation.Assign(CalculateDisplayPosition());
            _designSize.Assign(CalculateDisplaySize());
            // 开始层处理
            _deviceLayer.Begin(_designLocation.X, _designLocation.Y, _designSize.Width, _designSize.Height);
            // 检查可见性
            if (visible)
            {
                OnDrawBegin(args);
            }
            //............................................................
            // 子控件测试
            if (_activePage != null)
            {
                // 绘制分页
                _activePage.Draw(args);
                // 绘制节点
                if (_components != null)
                {
                    foreach (FUiComponent componment in _components)
                    {
                        FUiControl control = componment as FUiControl;
                        if (control == null)
                        {
                            continue;
                        }
                        if (control is FUiPage)
                        {
                            continue;
                        }
                        control.Draw(args);
                    }
                }
            }
            //............................................................
            // 结束绘制
            if (visible)
            {
                _context.Context.TransformLocation(_designLocation.X, _designLocation.Y);
                OnDrawAfter(args);
            }
            // 结束层处理
            _deviceLayer.End();
        }
Пример #3
0
        //============================================================
        // <T>测试处理。</T>
        //
        // @param args 参数
        //============================================================
        public override void Test(SUiTestArgs args)
        {
            // 检查有效性
            if (!PageControlResource.OptionValid)
            {
                return;
            }
            // 开始测试
            bool result = OnTest(args);

            // 子控件测试
            if (result)
            {
                if (_activePage != null)
                {
                    // 测试分页
                    _activePage.Test(args);
                    // 绘制节点
                    if (_components != null)
                    {
                        foreach (FUiComponent componment in _components)
                        {
                            FUiControl control = componment as FUiControl;
                            if (control == null)
                            {
                                continue;
                            }
                            if (control is FUiPage)
                            {
                                continue;
                            }
                            control.Test(args);
                        }
                    }
                }
            }
        }
Пример #4
0
        //============================================================
        // <T>更新设计。</T>
        //============================================================
        public void DesignUpdate(int x, int y)
        {
            float      scale        = _context.Scale;
            FUiControl focusControl = _selection.FocusControl;
            // 偏移位置
            int cx = x - _mouseDownPoint.X;
            int cy = y - _mouseDownPoint.Y;

            // 设计更新
            switch (_designMode)
            {
            case EUiDesignMode.None:
                UpdateCursor(x, y);
                break;

            case EUiDesignMode.Move: {
                int cleft = (int)(cx / scale) / _cellSize.Width * _cellSize.Width;
                int ctop  = (int)(cy / scale) / _cellSize.Height * _cellSize.Height;
                _selection.BoundsLocation(cleft, ctop);
                break;
            }

            case EUiDesignMode.Size: {
                int left   = 0;
                int top    = 0;
                int width  = 0;
                int height = 0;
                switch ((ERcAlign)_aideAlignCd)
                {
                case ERcAlign.Left:
                    left  += cx;
                    width -= cx;
                    break;

                case ERcAlign.LeftTop:
                    left   += cx;
                    width  -= cx;
                    top    += cy;
                    height -= cy;
                    break;

                case ERcAlign.Top:
                    top    += cy;
                    height -= cy;
                    break;

                case ERcAlign.RightTop:
                    top    += cy;
                    width  += cx;
                    height -= cy;
                    break;

                case ERcAlign.Right:
                    width += cx;
                    break;

                case ERcAlign.RightBottom:
                    width  += cx;
                    height += cy;
                    break;

                case ERcAlign.Bottom:
                    height += cy;
                    break;

                case ERcAlign.LeftBottom:
                    left   += cx;
                    width  -= cx;
                    height += cy;
                    break;
                }
                int cleft   = (int)(left / scale) / _cellSize.Width * _cellSize.Width;
                int ctop    = (int)(top / scale) / _cellSize.Height * _cellSize.Height;
                int cwidth  = (int)(width / scale) / _cellSize.Width * _cellSize.Width;
                int cheight = (int)(height / scale) / _cellSize.Height * _cellSize.Height;
                _selection.BoundsSet(cleft, ctop, cwidth, cheight);
                break;
            }
            }
            // 刷新处理
            Refresh();
        }
Пример #5
0
        //============================================================
        // <T>绘制辅助线。</T>
        //============================================================
        public bool DrawAidLines()
        {
            // 检查状态
            FUiControl focusControl = _selection.FocusControl;

            if (focusControl == null)
            {
                return(false);
            }
            FUiControl parent = focusControl.Parent as FUiControl;

            if (parent == null)
            {
                return(false);
            }
            // 获得环境
            float        scale   = _context.Scale;
            FDxContext2d context = _context.Context;

            context.TransformIdentity();
            // 绘制对齐线
            SIntPoint2 location = focusControl.CalculateDisplayPosition();
            SIntSize2  size     = focusControl.CalculateDisplaySize();

            foreach (FUiComponent component in parent.Components)
            {
                FUiControl control = component as FUiControl;
                // 检查变量
                if (control == null)
                {
                    continue;
                }
                if (control == focusControl)
                {
                    continue;
                }
                // 计算坐标
                SIntPoint2 findLocation = control.CalculateDisplayPosition();
                SIntSize2  findSize     = control.CalculateDisplaySize();
                // 左辅助线
                if (location.X == findLocation.X)
                {
                    context.DrawLineLayer(location.X, 0, location.X, _size.Height, _lineBackBrush, _lineForeBrush, _lineWidth, _lineForeStrokeStyle);
                }
                // 上辅助线
                if (location.Y == findLocation.Y)
                {
                    context.DrawLineLayer(0, location.Y, _size.Width, location.Y, _lineBackBrush, _lineForeBrush, _lineWidth, _lineForeStrokeStyle);
                }
                // 右辅助线
                int right = findLocation.X + findSize.Width;
                if (location.X + size.Width == right)
                {
                    context.DrawLineLayer(right, 0, right, _size.Height, _lineBackBrush, _lineForeBrush, _lineWidth, _lineForeStrokeStyle);
                }
                // 下辅助线
                int bottom = findLocation.Y + findSize.Height;
                if (location.Y + size.Height == bottom)
                {
                    context.DrawLineLayer(0, bottom, _size.Width, bottom, _lineBackBrush, _lineForeBrush, _lineWidth, _lineForeStrokeStyle);
                }
            }
            return(true);
        }