/// <summary> /// Constructs a listener for changes to the deck traversal /// </summary> /// <param name="sender">The event queue for handling updates</param> /// <param name="presentation">The presentation</param> /// <param name="traversal">The deck traversal we care about </param> public DeckTraversalWebService(SendingQueue sender, PresentationModel presentation, DeckTraversalModel traversal) { this.m_Sender = sender; this.m_Presentation = presentation; this.m_DeckTraversal = traversal; // Create the deck object string deckName = "Untitled Deck"; using (Synchronizer.Lock(this.m_DeckTraversal.SyncRoot)) { using (Synchronizer.Lock(this.m_DeckTraversal.Deck)) { deckName = this.m_DeckTraversal.Deck.HumanName; } } SimpleWebDeck deck = new SimpleWebDeck(); deck.Name = deckName; lock (WebService.Instance.GlobalModel) { WebService.Instance.GlobalModel.Decks.Add(deck); } WebService.Instance.UpdateModel(); this.m_DeckWebService = new DeckWebService(this.m_Sender, this.m_Presentation, this.m_DeckTraversal.Deck); this.m_CurrentChangedDispatcher = new EventQueue.PropertyEventDispatcher(this.m_Sender, new PropertyEventHandler(this.HandleCurrentChanged)); this.m_DeckTraversal.Changed["Current"].Add(this.m_CurrentChangedDispatcher.Dispatcher); }
protected SimpleWebSlide GetExistingWebSlide(SimpleWebDeck d, Guid id) { foreach (SimpleWebSlide s in d.Slides) { if (s.Id == id) { return(s); } } return(null); }
/// <summary> /// Helper class that is run on a different thread that converts the ink coordinates into pixel coordinates /// </summary> /// <param name="extracted">The strokes to convert and add to the model</param> private void HandleInkAddedHelper(Ink extracted) { // Adjust for differences in DPI if (ViewerStateModel.NonStandardDpi) { extracted.Strokes.Transform(ViewerStateModel.DpiNormalizationSendMatrix, true); } // Get the model object to add it to lock (WebService.Instance.GlobalModel) { SimpleWebDeck deck = (SimpleWebDeck)WebService.Instance.GlobalModel.Decks[WebService.Instance.GlobalModel.CurrentDeck]; SimpleWebSlide slide = (SimpleWebSlide)deck.Slides[WebService.Instance.GlobalModel.CurrentSlide - 1]; slide.Inks = new ArrayList(); // Extract each stroke foreach (Stroke s in extracted.Strokes) { // Get the points System.Drawing.Point[] pts = s.GetPoints(); // Convert and remove duplicates bool bFirst = true; ArrayList pts_new = new ArrayList(); System.Drawing.Point last = System.Drawing.Point.Empty; foreach (System.Drawing.Point p in pts) { System.Drawing.Point pNew = new System.Drawing.Point((int)Math.Round(p.X / 26.37f), (int)Math.Round(p.Y / 26.37f)); if (!bFirst && last == pNew) { continue; } bFirst = false; last = pNew; pts_new.Add(pNew); } // Add the points to the model SimpleWebInk stroke = new SimpleWebInk(); stroke.Pts = (System.Drawing.Point[])pts_new.ToArray(typeof(System.Drawing.Point)); stroke.R = s.DrawingAttributes.Color.R; stroke.G = s.DrawingAttributes.Color.G; stroke.B = s.DrawingAttributes.Color.B; stroke.Opacity = (s.DrawingAttributes.RasterOperation == RasterOperation.MaskPen) ? (byte)127 : (byte)255; stroke.Width = s.DrawingAttributes.Width / 26.37f; slide.Inks.Add(stroke); } } WebService.Instance.UpdateModel(); }
protected static string BuildDeckString(string prefix, int index, SimpleWebDeck deck) { string newPrefix = prefix + "_" + index; string result = ""; result += "\t\t<div id=\"" + newPrefix + "\">\n"; result += "\t\t\t<div id=\"" + newPrefix + "_Index\">" + index + "</div>\n"; result += "\t\t\t<div id=\"" + newPrefix + "_Name\">" + deck.Name + "</div>\n"; result += "\t\t\t<div id=\"" + newPrefix + "_Slides\">\n"; for (int i = 0; i < deck.Slides.Count; i++) { result += BuildSlideString(newPrefix, deck.Name, i, (SimpleWebSlide)deck.Slides[i]); } result += "\t\t\t</div>\n"; result += "\t\t</div>\n"; return(result); }