public void AddCustomControlBox(CustomRenderBox ctrlBox) { _controlPoints.Add(ctrlBox); //important: don't forget to set parent link //this will route update graphics msg from client to parent CustomRenderBox.SetParentLink(ctrlBox, this); }
protected override void RenderClientContent(DrawBoard d, UpdateArea updateArea) { //1. save canvas origin, (don't forget to restore this) int enter_canvas_x = d.OriginX; int enter_canvas_y = d.OriginY; //d.FillRectangle(Color.FromArgb(100, Color.Yellow), // _approxRectBounds.Left, // _approxRectBounds.Top, // _approxRectBounds.Width, // _approxRectBounds.Height); foreach (CustomRenderBox renderE in _controlPoints) { int x = renderE.X; int y = renderE.Y; //2. set canvas origin d.SetCanvasOrigin(enter_canvas_x + x, enter_canvas_y + y); //3. offset update area (see opposite direction) updateArea.Offset(-x, -y); //4. RenderElement.Render(renderE, d, updateArea); //5. restore only update area back updateArea.Offset(x, y); } //restore enter canvas x, y d.SetCanvasOrigin(enter_canvas_x, enter_canvas_y); ////lets draw lines that link control points int j = _controlPoints.Count; float strokeW = d.StrokeWidth; Color strokeColor = d.StrokeColor; d.StrokeWidth = 2; d.StrokeColor = Color.Black; for (int i = 1; i < j; ++i) { CustomRenderBox b_0 = _controlPoints[i - 1]; CustomRenderBox b_1 = _controlPoints[i]; d.DrawLine(b_0.X, b_0.Y, b_1.X, b_1.Y); } { CustomRenderBox b_0 = _controlPoints[j - 1]; CustomRenderBox b_1 = _controlPoints[0]; d.DrawLine(b_0.X, b_0.Y, b_1.X, b_1.Y); } //and the last one d.StrokeColor = strokeColor; d.StrokeWidth = strokeW; }
protected override void OnStartDemo(SampleViewport viewport) { var bgRenderBox = new CustomRenderBox(viewport.Root, 800, 600); bgRenderBox.BackColor = Color.LightGray; viewport.AddContent(bgRenderBox); //--------------------------------------------------------------------- var miniAggg = new MyMiniAggCanvasRenderElement(viewport.Root, 400, 600); var lionFill = new PixelFarm.Agg.LionFillSprite(); miniAggg.AddSprite(lionFill); viewport.AddContent(miniAggg); }
//-------------------------------------------------------------------------- void CreateVScrollbarContent(RootGraphic rootgfx) { CustomRenderBox bgBox = new CustomRenderBox(rootgfx, this.Width, this.Height); bgBox.HasSpecificSize = true; bgBox.SetController(this); bgBox.SetLocation(this.Left, this.Top); //MinButton SetupMinButtonProperties(bgBox); //MaxButton SetupMaxButtonProperties(bgBox); //ScrollButton SetupVerticalScrollButtonProperties(bgBox); //-------------- this.mainBox = bgBox; }
//-------------------------------------------------------------------------- void CreateVScrollbarContent() { CustomRenderBox bgBox = new CustomRenderBox(this.Width, this.Height); //bgBox.HasSpecificWidthAndHeight = true; bgBox.SetController(this); bgBox.SetLocation(this.Left, this.Top); //MinButton SetupMinButtonProperties(bgBox); //MaxButton SetupMaxButtonProperties(bgBox); //ScrollButton SetupVerticalScrollButtonProperties(bgBox); //-------------- _mainBox = bgBox; }
public void UpdateRectBounds() { //find max bounds of this control var rectBoundsAcc = new RectBoundsAccum(); rectBoundsAcc.Init(); int j = _controlPoints.Count; for (int i = 0; i < j; ++i) { CustomRenderBox p = _controlPoints[i]; rectBoundsAcc.Update(p.X, p.Y); } // _approxRectBounds = rectBoundsAcc.ToRectF(); _approxRectBounds.Width += 10; _approxRectBounds.Height += 10; }
public override bool HasCustomHitTest => true; //set to true, CustomHitTest() will be called protected override bool CustomHitTest(HitChain hitChain) { if (_approxRectBounds.Contains(hitChain.TestPoint)) { //in rgn //check hit test on each child for (int i = _controlPoints.Count - 1; i >= 0; --i) { CustomRenderBox ctrlPoint = _controlPoints[i]; if (ctrlPoint.HitTestCore(hitChain)) { hitChain.AddHitObject(ctrlPoint); return(true); } } } return(false); }