public LayoutEventArgs(ProjectLayout zLayout, Deck zDeck) : this(zLayout, zDeck, false) { }
public static void DrawFormattedText(Graphics zGraphics, Deck zDeck, ProjectLayoutElement zElement, string sInput, Brush zBrush, Font zFont, Color colorFont) { // check the cache for this item var zDataFormattedCache = zDeck.GetCachedMarkup(zElement.name); if (null == zDataFormattedCache) { if (null == zFont) // default to something! { // font will show up in red if it's not yet set zFont = s_zDefaultFont; zBrush = Brushes.Red; } if (255 != zElement.opacity) { zBrush = new SolidBrush(Color.FromArgb(zElement.opacity, colorFont)); } zDataFormattedCache = new FormattedTextDataCache(); var zFormattedData = new FormattedTextData(GetMarkups(sInput)); var zProcessData = new FormattedTextProcessData(); // set the initial font zProcessData.FontBrush = zBrush; zProcessData.SetFont(zFont, zGraphics); var listPassMarkups = new List<MarkupBase>(); // only contains the markups that will be actively drawn (for caching) // Pass 1: // - Create rectangles // - Configure per-markup settings based on state of markup stack // - Generate list of markups to continue to process (those that are used in the next pass) // - Specify Markup rectanlges // - Generate markup rows int nIdx; MarkupBase zMarkup; for (nIdx = 0; nIdx < zFormattedData.AllMarkups.Count; nIdx++) { zMarkup = zFormattedData.AllMarkups[nIdx]; if (zMarkup.ProcessMarkup(zElement, zFormattedData, zProcessData, zGraphics)) { zMarkup.LineNumber = zProcessData.CurrentLine; listPassMarkups.Add(zMarkup); } } // Pass 2: // - Trim spaces from line endings if (listPassMarkups.Count > 0) { nIdx = listPassMarkups.Count - 1; zMarkup = listPassMarkups[nIdx]; var currentLineNumber = zMarkup.LineNumber; var bFindNextLine = false; while (nIdx > -1) { zMarkup = listPassMarkups[nIdx]; if (zMarkup.LineNumber != currentLineNumber) { currentLineNumber = zMarkup.LineNumber; bFindNextLine = false; } if (!bFindNextLine && zMarkup is SpaceMarkup && ((SpaceMarkup) zMarkup).Optional) { listPassMarkups.RemoveAt(nIdx); } else { bFindNextLine = true; } nIdx--; } } // Pass 3: // - Align lines (horizontal/vertical) // Reprocess for align (before backgroundcolor is configured) UpdateAlignment(zElement, listPassMarkups); // Pass 4: process the remaining items nIdx = 0; while (nIdx < listPassMarkups.Count) { zMarkup = listPassMarkups[nIdx]; if (!zMarkup.PostProcessMarkupRectangle(zElement, listPassMarkups, nIdx)) { listPassMarkups.RemoveAt(nIdx); nIdx--; } else { zDataFormattedCache.AddMarkup(zMarkup); } nIdx++; } // update the cache zDeck.AddCachedMarkup(zElement.name, zDataFormattedCache); } zDataFormattedCache.Render(zElement, zGraphics); }
public static void DrawElement(Graphics zGraphics, Deck zDeck, ProjectLayoutElement zElement, ElementType eType, int nX, int nY, string sInput) { switch (eType) { case ElementType.Graphic: case ElementType.Shape: sInput = sInput.Trim(); break; } Font zFont = null; Brush zBrush = null; Pen zBorderPen = null; Color colorFont = Color.Black; if (0 != zElement.borderthickness) { zBorderPen = 255 != zElement.opacity ? new Pen(Color.FromArgb(zElement.opacity, zElement.GetElementBorderColor()), zElement.borderthickness) : new Pen(zElement.GetElementBorderColor(), zElement.borderthickness); } // Setup switch (eType) { case ElementType.Text: case ElementType.FormattedText: zFont = zElement.GetElementFont(); colorFont = zElement.GetElementColor(); zBrush = new SolidBrush(colorFont); break; case ElementType.Graphic: case ElementType.Shape: break; default: return; } // NOTE: this is the first transform if (0 != zElement.rotation) { // center the internal element then rotate and restore zGraphics.TranslateTransform(zElement.x + nX + (zElement.width >> 1), zElement.y + nY + (zElement.height >> 1)); zGraphics.RotateTransform(zElement.rotation); zGraphics.TranslateTransform(-(zElement.width >> 1), -(zElement.height >> 1)); } else { zGraphics.TranslateTransform(zElement.x + nX, zElement.y + nY); } // TODO: an interface for all these would be more appropriate // Draw switch (eType) { case ElementType.Text: DrawText(zGraphics, zElement, sInput, zBrush, zFont, colorFont); break; case ElementType.FormattedText: DrawFormattedText(zGraphics, zDeck, zElement, sInput, zBrush, zFont, colorFont); break; case ElementType.Graphic: DrawGraphic(zGraphics, sInput, zElement); break; case ElementType.Shape: ShapeManager.HandleShapeRender(zGraphics, sInput.ToLower(), zElement); break; } if (null != zBorderPen) { // note that the border is inclusive in the width/height consuming 2 pixels (0 to total-1) zGraphics.DrawRectangle(zBorderPen, 0,0,zElement.width - 1, zElement.height - 1); } zGraphics.ResetTransform(); }
public LayoutEventArgs(ProjectLayout zLayout, Deck zDeck, bool bDataChange) { Layout = zLayout; Deck = zDeck; DataChange = bDataChange; }
public DeckChangeEventArgs(Deck zDeck) : this(zDeck, -1) { }
public DeckChangeEventArgs(Deck zDeck, int nIndex) { Deck = zDeck; Index = nIndex; }
public void Reset(Deck zDeck) { m_zCardRenderer.CurrentDeck = zDeck; UpdateSize(); Invalidate(); }
/// <summary> /// Refreshes the Deck assocaited with the current Layout (and fires the LayoutLoaded event) /// </summary> public void InitializeActiveLayout() { if (null != ActiveLayout) { ActiveDeck = new Deck(); ActiveDeck.SetAndLoadLayout(ActiveLayout, false); } if (null != LayoutLoaded) { LayoutLoaded(this, new LayoutEventArgs(ActiveLayout, ActiveDeck)); } }
public void Draw(Graphics zGraphics, Deck zDeck, ProjectLayoutElement zElement, string sInput) { var zFont = zElement.GetElementFont(); var colorFont = zElement.GetElementColor(); // check the cache for this item var zDataFormattedCache = zDeck.GetCachedMarkup(zElement.name); // cached, render and exit if (null != zDataFormattedCache) { zDataFormattedCache.Render(zElement, zGraphics); return; } if (null == zFont) // default to something! { // font will show up in red if it's not yet set zFont = FontLoader.DefaultFont; } var zBrush = 255 == zElement.opacity ? new SolidBrush(colorFont) : new SolidBrush(Color.FromArgb(zElement.opacity, colorFont)); zDataFormattedCache = new FormattedTextDataCache(); var zFormattedData = new FormattedTextData(FormattedTextParser.GetMarkups(sInput)); var zProcessData = new FormattedTextProcessData { FontBrush = zBrush, CurrentLineHeight = zElement.lineheight, CurrentStringAlignment = zElement.GetHorizontalAlignment() }; // set the initial font zProcessData.SetFont(zFont, zGraphics); var listPassMarkups = new List <MarkupBase>(); // only contains the markups that will be actively drawn (for caching) // Pass 1: // - Create rectangles // - Configure per-markup settings based on state of markup stack // - Generate list of markups to continue to process (those that are used in the next pass) // - Specify Markup rectanlges // - Generate markup rows (LineNumber is usable AFTER this process) int nIdx; MarkupBase zMarkup; for (nIdx = 0; nIdx < zFormattedData.AllMarkups.Count; nIdx++) { zMarkup = zFormattedData.AllMarkups[nIdx]; if (zMarkup.ProcessMarkup(zElement, zFormattedData, zProcessData, zGraphics)) { zMarkup.LineNumber = zProcessData.CurrentLine; listPassMarkups.Add(zMarkup); } } // Pass 2: // - Trim spaces from line endings if (listPassMarkups.Count > 0) { nIdx = listPassMarkups.Count - 1; zMarkup = listPassMarkups[nIdx]; var currentLineNumber = zMarkup.LineNumber; var bFindNextLine = false; while (nIdx > -1) { zMarkup = listPassMarkups[nIdx]; if (zMarkup.LineNumber != currentLineNumber) { currentLineNumber = zMarkup.LineNumber; bFindNextLine = false; } if (!bFindNextLine && zMarkup is SpaceMarkup && ((SpaceMarkup)zMarkup).Optional) { listPassMarkups.RemoveAt(nIdx); } else { bFindNextLine = true; } nIdx--; } } // Pass 3: // - Align lines (horizontal/vertical) // Reprocess for align (before backgroundcolor is configured) AlignmentController.UpdateAlignment(zElement, listPassMarkups); // Pass 4: process the remaining items nIdx = 0; while (nIdx < listPassMarkups.Count) { zMarkup = listPassMarkups[nIdx]; if (!zMarkup.PostProcessMarkupRectangle(zElement, listPassMarkups, nIdx)) { listPassMarkups.RemoveAt(nIdx); nIdx--; } else { zDataFormattedCache.AddMarkup(zMarkup); } nIdx++; } // update the cache zDeck.AddCachedMarkup(zElement.name, zDataFormattedCache); // render! zDataFormattedCache.Render(zElement, zGraphics); }