/// <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);
     }
 }
Exemple #2
0
        // 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;
 *                              }
 *                          }
 */
                        }
                    }
                }
            }
        }
Exemple #3
0
        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);
                    }
                }
            }
        }