//============================================================ // <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); }
//============================================================ // <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); } } } } }
//============================================================ // <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)); }
//============================================================ // <T>增加一个子组件。</T> // // @param componment 子组件 //============================================================ public override void Push(FUiComponent componment) { base.Push(componment); FUiControl control = componment as FUiControl; if (control != null) { control.Context = _context; } }
//============================================================ // <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); }
//============================================================ // <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(); }
//============================================================ // <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); } }
//============================================================ // <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); } } } } }
//============================================================ // <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); }
//============================================================ // <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(); }
//============================================================ // <T>增加一个控件。</T> // // @param control 控件 //============================================================ public void Reset() { Control = null; _controls.Clear(); }
//============================================================ // <T>增加一个控件。</T> // // @param control 控件 //============================================================ public void Push(FUiControl control) { Control = control; _controls.Push(control); }