LayoutResult ILayoutManager.Layout(LayoutContext context) { CalendarContentRange content = context.ContentRange as CalendarContentRange; _continueVerticallyAttempts = 0; LayoutResult result; using (CalendarData calendarData = new CalendarData(_calendar)) { if (content == null) { content = new CalendarContentRange(_calendar, calendarData.GetFirstMonth(), calendarData.GetLastMonth()); } result = LayoutContentRange(content, calendarData, context); } return(result); }
LayoutResult ILayoutManager.Measure(LayoutContext context) { var content = (CalendarContentRange)context.ContentRange; LayoutResult result; using (var calendarData = new CalendarData(_calendar)) { // the first time run if (content == null) { content = new CalendarContentRange(_calendar, calendarData.GetFirstMonth(), calendarData.GetLastMonth()); } else if ((context.LayoutDirection & LayoutDirection.Vertical) != 0) // continue vertical run { // do we have anything else to render ? if (!calendarData.HasMonthAfter(content.MonthTo)) { return(new LayoutResult(null, LayoutStatus.NoContent | LayoutStatus.Complete, new SizeF())); } var continuedRange = content.StaticContentRange.ContinueRange(context); content = new CalendarContentRange(continuedRange, _calendar, calendarData.GetNextMonth(content.MonthTo), calendarData.GetLastMonth()); } else if ((context.LayoutDirection & LayoutDirection.Horizontal) != 0) // continue horizontal run { var continuedRange = content.StaticContentRange.ContinueRange(context); content = new CalendarContentRange(continuedRange, _calendar, content.MonthFrom, content.MonthTo); } result = MeasureContentRange(content, calendarData, context.AvailableSize); } return(result); }
public void CalendarRenderWithNoDataBound() { PageDocument report = TestHelper.GetReport("Calendar-NoData.rdlx"); TestingRenderingExtension rendererExt = new TestingRenderingExtension(); report.Render(rendererExt, null); CalendarDataRegion calendar = rendererExt.GetReportItem("Calendar1") as CalendarDataRegion; Assert.IsNotNull(calendar); CalendarData calendarData = new CalendarData(calendar); CalendarContentRange content = new CalendarContentRange(calendar, calendarData.GetFirstMonth(), calendarData.GetLastMonth()); // recalibrate graphics to twips RectangleF rect = new RectangleF(0, 0, 4000f, 4000f); CalendarDesigner.ScaleToTwipsGraphicsAndBound(GetGraphics(), ref rect); // create gdi canvas wrapper to use in renderer IDrawingCanvas canvas = GraphicsCanvasFactory.Create(GetGraphics()); // render calendar to canvas CalendarRenderer.Instance.Render(content, canvas, rect); }
private SizeF GetCompleteSize(CalendarData calendarData) { if (_completeSize == null) { CalendarContentRange content = new CalendarContentRange(_calendar, calendarData.GetFirstMonth(), calendarData.GetLastMonth()); LayoutResult result = MeasureContentRange(content, calendarData, new SizeF(float.MaxValue, float.MaxValue)); _completeSize = result.ActualSize; } return(_completeSize.Value); }
public void TestRenderingInMultiThreads() { var report = TestHelper.GetReport("Calendar.rdlx"); var rendererExt = new TestingRenderingExtension(); report.Render(rendererExt, null); var calendar = rendererExt.GetReportItem("Calendar1") as CalendarDataRegion; Assert.IsNotNull(calendar); var calendarData = new CalendarData(calendar); var content = new CalendarContentRange(calendar, calendarData.GetFirstMonth(), calendarData.GetLastMonth()); // recalibrate graphics to twips var rect = new RectangleF(0, 0, 4000f, 4000f); CalendarDesigner.ScaleToTwipsGraphicsAndBound(GetGraphics(), ref rect); // the action of rendering calendar to canvas System.Action render = () => { using (var graphics = Graphics.FromHwnd(IntPtr.Zero)) { var canvas = GraphicsCanvasFactory.Create(graphics); (calendar.GetRenderer <IGraphicsRenderer>() as CalendarRenderer) .Render(content, canvas, rect); } }; var isSuccess1 = false; var isSuccess2 = false; ThreadStart render1 = () => { render(); isSuccess1 = true; }; ThreadStart render2 = () => { render(); isSuccess2 = true; }; var thread1 = new Thread(render1); var thread2 = new Thread(render2); thread1.Start(); thread2.Start(); thread1.Join(); thread2.Join(); Assert.IsTrue(isSuccess1); Assert.IsTrue(isSuccess2); }