/// <summary> /// Override the OnPaint to render the template /// </summary> protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); using (BackgroundTemplateRenderer render = new BackgroundTemplateRenderer(this.m_Form.m_Template)) { render.DrawAll(e.Graphics, this.ClientRectangle); } }
// TODO: Correctly Draw the Slide Annotation private void DrawSlide(DeckTraversalModel traversal, int index, System.Drawing.Rectangle rect, System.Drawing.Graphics buffer) { // Save the old state System.Drawing.Drawing2D.GraphicsState oldState; using (Synchronizer.Lock(traversal.SyncRoot)) { using (Synchronizer.Lock(traversal.Deck.SyncRoot)) { using (Synchronizer.Lock(traversal.Deck.TableOfContents.SyncRoot)) { TableOfContentsModel.Entry entry = traversal.Deck.TableOfContents.Entries[index]; using (Synchronizer.Lock(entry.Slide.SyncRoot)) { //Draw the background color //First see if there is a Slide BG, if not, try the Deck. Otherwise, use transparent. if (entry.Slide.BackgroundColor != Color.Empty) { buffer.FillRectangle(new System.Drawing.SolidBrush(entry.Slide.BackgroundColor), rect); } else if (traversal.Deck.DeckBackgroundColor != Color.Empty) { buffer.FillRectangle(new System.Drawing.SolidBrush(traversal.Deck.DeckBackgroundColor), rect); } else { buffer.FillRectangle(new System.Drawing.SolidBrush(Color.Transparent), rect); } //Draw the background Template if (entry.Slide.BackgroundTemplate != null) { using (BackgroundTemplateRenderer render = new BackgroundTemplateRenderer(entry.Slide.BackgroundTemplate)) { render.Zoom = entry.Slide.Zoom; render.DrawAll(buffer, rect); } } //Get the Slide content and draw it oldState = buffer.Save(); Model.Presentation.SlideModel.SheetCollection sheets = entry.Slide.ContentSheets; for (int i = 0; i < sheets.Count; i++) { SlideDisplayModel display = new SlideDisplayModel(buffer, null); Rectangle slide = rect; float zoom = 1f; if (entry.Slide != null) { slide = entry.Slide.Bounds; zoom = entry.Slide.Zoom; } System.Drawing.Drawing2D.Matrix pixel, ink; display.FitSlideToBounds(System.Windows.Forms.DockStyle.Fill, rect, zoom, ref slide, out pixel, out ink); using (Synchronizer.Lock(display.SyncRoot)) { display.Bounds = slide; display.PixelTransform = pixel; display.InkTransform = ink; } Viewer.Slides.SheetRenderer r = Viewer.Slides.SheetRenderer.ForStaticSheet(display, sheets[i]); r.Paint(new System.Windows.Forms.PaintEventArgs(buffer, rect)); r.Dispose(); } //Restore the Old State buffer.Restore(oldState); oldState = buffer.Save(); //Get the Annotation content and draw it sheets = entry.Slide.AnnotationSheets; for (int i = 0; i < sheets.Count; i++) { SlideDisplayModel display = new SlideDisplayModel(buffer, null); Rectangle slide = rect; float zoom = 1f; if (entry.Slide != null) { slide = entry.Slide.Bounds; zoom = entry.Slide.Zoom; } System.Drawing.Drawing2D.Matrix pixel, ink; display.FitSlideToBounds(System.Windows.Forms.DockStyle.Fill, rect, zoom, ref slide, out pixel, out ink); using (Synchronizer.Lock(display.SyncRoot)) { display.Bounds = slide; display.PixelTransform = pixel; display.InkTransform = ink; } Viewer.Slides.SheetRenderer r = Viewer.Slides.SheetRenderer.ForStaticSheet(display, sheets[i]); if (r is Viewer.Slides.InkSheetRenderer) { ((Viewer.Slides.InkSheetRenderer)r).Paint(buffer, rect); } else { r.Paint(new System.Windows.Forms.PaintEventArgs(buffer, rect)); } r.Dispose(); } //Restore the Old State buffer.Restore(oldState); /* * Microsoft.Ink.Renderer renderer = new Microsoft.Ink.Renderer(); * for( int i = 0; i < sheets.Count; i++ ) { * SheetModel sm = sheets[i]; * if( sm is InkSheetModel ) { * InkSheetModel ism = sm as InkSheetModel; * using( Synchronizer.Lock( ism.SyncRoot ) ) { * foreach( Microsoft.Ink.Stroke stroke in ism.Ink.Strokes ) { * renderer.Draw( buffer, stroke ); * } * } * } else if( sm is TextSheetModel ) { * TextSheetModel tsm = sm as TextSheetModel; * using( Synchronizer.Lock( tsm.SyncRoot ) ) { * buffer.DrawString( tsm.Text, tsm.Font, new SolidBrush( tsm.Color ), tsm.Bounds ); * } * } else if( sm is ImageSheetModel ) { * //add any images in the AnnotationSheets * ImageSheetModel image_sheet_model = (ImageSheetModel)sm; * using( Synchronizer.Lock( image_sheet_model.SyncRoot ) ) { * buffer.DrawImage( image_sheet_model.Image, image_sheet_model.Bounds ); * } * } else { * //Unknown, skip it * continue; * } * } */ } } } } }
protected override void OnPaint(PaintEventArgs args) { if (this.Slide == null) //Don't paint before the slide is set { return; } Color bkgColor; // Set the filmstrip background color BackgroundTemplate bkgTemplate; float slideZoom = 1f; RoleModel role; using (Synchronizer.Lock(PresenterModel.TheInstance.Participant.SyncRoot)) { role = PresenterModel.TheInstance.Participant.Role; } LinkedDeckTraversalModel.NavigationSelector studentNavigationType; using (Synchronizer.Lock(PresenterModel.TheInstance.ViewerState.SyncRoot)) { studentNavigationType = PresenterModel.TheInstance.ViewerState.StudentNavigationType; } using (Synchronizer.Lock(this.Slide.SyncRoot)) { bkgColor = (!this.Slide.BackgroundColor.IsEmpty) ? this.Slide.BackgroundColor : this.DefaultDeckBGColor; // For student role, paint unvisited slides gray. if (role is StudentModel && (!this.Slide.Visited) && studentNavigationType == LinkedDeckTraversalModel.NavigationSelector.Visited) { bkgColor = SystemColors.Control; } bkgTemplate = (this.Slide.BackgroundTemplate != null) ? this.Slide.BackgroundTemplate : this.DefaultDeckBGTemplate; slideZoom = this.Slide.Zoom; } args.Graphics.Clear(bkgColor); if (bkgTemplate != null) { BackgroundTemplateRenderer render = new BackgroundTemplateRenderer(bkgTemplate); render.Zoom = slideZoom; render.DrawAll(args.Graphics, this.ClientRectangle); } base.OnPaint(args); // If the entry is selected, draw a thick border just inside of the 3D border. if (this.m_IsCurrentEntry) { Rectangle highlight = this.ClientRectangle; if (this.m_IsCurrentDeckTraversal) { using (Pen pen = new Pen(HIGHLIGHT_COLOR, HIGHLIGHT_BORDER_WIDTH)) { args.Graphics.DrawRectangle(pen, highlight); } } else { using (Pen pen = new Pen(HIGHLIGHT_COLOR, HIGHLIGHT_BORDER_WIDTH)) { pen.DashStyle = DashStyle.Dot; args.Graphics.DrawRectangle(pen, highlight); } } } }