Exemple #1
0
        //============================================================
        // <T>计算显示坐标。</T>
        //
        // @return 显示坐标
        //============================================================
        public virtual FIntPoint2 CalculateDisplayPosition()
        {
            float      scale = _context.Scale;
            FIntPoint2 point = new FIntPoint2();
            FUiObject  find  = this;

            while (find != null)
            {
                FUiControl control = find as FUiControl;
                if (control != null)
                {
                    FRcControl controlResource = control.ControlResource;
                    if (control.DesignTop)
                    {
                        point.Add(control.Location);
                        point.X += (int)(controlResource.Margin.Left * scale);
                        point.Y += (int)(controlResource.Margin.Top * scale);
                    }
                    else
                    {
                        point.Add(control.Location, scale);
                        if (control != this)
                        {
                            point.X += (int)(controlResource.Margin.Left * scale);
                            point.Y += (int)(controlResource.Margin.Top * scale);
                        }
                        point.X += (int)(controlResource.Padding.Left * scale);
                        point.Y += (int)(controlResource.Padding.Top * scale);
                    }
                }
                find = find.Parent;
            }
            return(point);
        }
Exemple #2
0
        //============================================================
        // <T>测试处理。</T>
        //
        // @param args 参数
        //============================================================
        public virtual void Test(SUiTestArgs args)
        {
            // 检查有效性
            if (!ComponentResource.OptionValid)
            {
                return;
            }
            // 开始测试
            bool result = OnTest(args);

            // 子控件测试
            if (result)
            {
                if (_components != null)
                {
                    foreach (FUiComponent componment in _components)
                    {
                        FUiControl control = componment as FUiControl;
                        if (control != null)
                        {
                            control.Test(args);
                        }
                    }
                }
            }
        }
Exemple #3
0
        //============================================================
        // <T>计算全局坐标。</T>
        //
        // @param scale 缩放
        // @return 全局坐标
        //============================================================
        public virtual SIntRectangle CalculateRange()
        {
            // 获得最大范围
            int width  = ControlResource.Size.Width;
            int height = ControlResource.Size.Height;

            if (HasComponment())
            {
                foreach (FUiComponent component in _components)
                {
                    FUiControl control = component as FUiControl;
                    if (control != null)
                    {
                        int right = control.DesignRight;
                        if (right > width)
                        {
                            width = right;
                        }
                        int bottom = control.DesignBottom;
                        if (bottom > height)
                        {
                            height = bottom;
                        }
                    }
                }
            }
            return(new SIntRectangle(ControlResource.Location.X, ControlResource.Location.Y, width, height));
        }
Exemple #4
0
        //============================================================
        // <T>增加一个子组件。</T>
        //
        // @param componment 子组件
        //============================================================
        public override void Push(FUiComponent componment)
        {
            base.Push(componment);
            FUiControl control = componment as FUiControl;

            if (control != null)
            {
                control.Context = _context;
            }
        }
Exemple #5
0
        //============================================================
        // <T>计算全局坐标。</T>
        //
        // @param scale 缩放
        // @return 全局坐标
        //============================================================
        public virtual FIntPoint2 CalculatePosition()
        {
            FIntPoint2 point = new FIntPoint2();
            FUiObject  find  = this;

            while (find != null)
            {
                FUiControl control = find as FUiControl;
                if (control != null)
                {
                    point.Add(control.Location);
                }
                find = find.Parent;
            }
            return(point);
        }
Exemple #6
0
        //============================================================
        // <T>绘制处理。</T>
        //
        // @param args 参数
        //============================================================
        public virtual void Draw(SUiDrawArgs args)
        {
            // 检查有效性
            if (!ComponentResource.OptionValid)
            {
                return;
            }
            // 设置数据
            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 (_components != null)
            {
                foreach (FUiComponent componment in _components)
                {
                    FUiControl control = componment as FUiControl;
                    if (control != null)
                    {
                        control.Draw(args);
                    }
                }
            }
            //............................................................
            // 结束绘制
            if (visible)
            {
                _context.Context.TransformLocation(_designLocation.X, _designLocation.Y);
                OnDrawAfter(args);
            }
            // 结束层处理
            _deviceLayer.End();
        }
Exemple #7
0
 //============================================================
 // <T>设计绘制处理。</T>
 //
 // @param args 参数
 //============================================================
 public virtual void DrawDesign(SUiDrawArgs args)
 {
     // 子控件设计绘制处理
     if (_components != null)
     {
         foreach (FUiComponent componment in _components)
         {
             FUiControl control = componment as FUiControl;
             if (control != null)
             {
                 control.DrawDesign(args);
             }
         }
     }
     // 设计绘制处理
     if (_designer != null)
     {
         _designer.Draw(args);
     }
 }
Exemple #8
0
        //============================================================
        // <T>测试处理。</T>
        //
        // @param args 参数
        //============================================================
        public override void Test(SUiTestArgs args)
        {
            // 检查有效性
            if (!ComponentResource.OptionValid)
            {
                return;
            }
            // 开始测试
            bool result = OnTest(args);

            // 子控件测试
            if (result)
            {
                FUiScrollItem item = ActiveItem();
                if (item != null)
                {
                    // 测试分页
                    item.Test(args);
                    // 绘制节点
                    if (_components != null)
                    {
                        foreach (FUiComponent componment in _components)
                        {
                            FUiControl control = componment as FUiControl;
                            if (control == null)
                            {
                                continue;
                            }
                            //if (control is FUiBaseListItem) {
                            //   continue;
                            //}
                            control.Test(args);
                        }
                    }
                }
            }
        }
Exemple #9
0
 //============================================================
 // <T>测试是否焦点。</T>
 //
 // @return 是否焦点
 //============================================================
 public virtual bool TestFocus()
 {
     // 测试当前控件焦点
     if (_designer.DesignFocus)
     {
         return(true);
     }
     // 测试子节点焦点
     if (_components != null)
     {
         foreach (FUiComponent component in _components)
         {
             FUiControl control = component as FUiControl;
             if (control != null)
             {
                 if (control.TestFocus())
                 {
                     return(true);
                 }
             }
         }
     }
     return(false);
 }
Exemple #10
0
        //============================================================
        // <T>绘制处理。</T>
        //
        // @param args 参数
        //============================================================
        public override void Draw(SUiDrawArgs args)
        {
            // 检查有效性
            if (!ComponentResource.OptionValid)
            {
                return;
            }
            // 设置数据
            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 (_components != null)
            {
                // 绘制分页
                FUiScrollItem item = ActiveItem();
                if (item != null)
                {
                    ERcSpread spreadCd = ScrollViewResource.SpreadCd;
                    // 绘制多个
                    int itemWidth  = item.Size.Width + _horizontalSpace;
                    int itemHeight = item.Size.Height + _verticalSpace;
                    if ((spreadCd == ERcSpread.Horizontal) && (_verticalCount > 0))
                    {
                        for (int n = 0; n < _designItemCount; n++)
                        {
                            int cx = n % _verticalCount;
                            int cy = (int)(n / _verticalCount);
                            item.Location.Set(itemWidth * cx, itemHeight * cy);
                            item.Draw(args);
                        }
                    }
                    else if ((spreadCd == ERcSpread.Vertical) && (_horizontalCount > 0))
                    {
                        for (int n = 0; n < _designItemCount; n++)
                        {
                            int cx = n % _horizontalCount;
                            int cy = (int)(n / _horizontalCount);
                            item.Location.Set(itemWidth * cx, itemHeight * cy);
                            item.Draw(args);
                        }
                    }
                    // 恢复设置
                    item.Location.Set(0, 0);
                }
                // 绘制节点
                foreach (FUiComponent componment in _components)
                {
                    FUiControl control = componment as FUiControl;
                    if (control == null)
                    {
                        continue;
                    }
                    if (control is FUiScrollItem)
                    {
                        continue;
                    }
                    control.Draw(args);
                }
            }
            //............................................................
            // 结束绘制
            if (visible)
            {
                _context.Context.TransformLocation(_designLocation.X, _designLocation.Y);
                OnDrawAfter(args);
            }
            // 结束层处理
            _deviceLayer.End();
        }
Exemple #11
0
 //============================================================
 // <T>增加一个控件。</T>
 //
 // @param control 控件
 //============================================================
 public void Reset()
 {
     Control = null;
     _controls.Clear();
 }
Exemple #12
0
 //============================================================
 // <T>增加一个控件。</T>
 //
 // @param control 控件
 //============================================================
 public void Push(FUiControl control)
 {
     Control = control;
     _controls.Push(control);
 }