public void PrepFontFit(GfxContext ctx, Dictionary <int, BibleVerse> verses, int startVerse, PresenterFont font) { Size nativeSize = DisplayEngine.NativeResolution.Size; ////////////////////////////////////////////////////////////////// // Format data BibleVerse bv1 = verses[1]; string bookname = Program.BibleDS.BibleLookUp.FindByVersionIdMappingBook(bv1.RefVersion, bv1.RefBook).DisplayBook; string title = bookname + " " + bv1.RefChapter; string data = ""; for (int i = startVerse; i <= verses.Count; i++) { data += verses[i].RefVerse + ". " + verses[i].Text + "\r\n"; } ////////////////////////////////////////////////////////////////// // Measure StringFormat sf = GetStringFormat(); int insideHeight = nativeSize.Height - paddingPixels * 2; int insideWidth = nativeSize.Width - paddingPixels * 2; int titleHeight = font.SizeInPoints * 2; RectangleF rTitle = new RectangleF(paddingPixels, paddingPixels, insideWidth, titleHeight); RectangleF rText = new RectangleF(paddingPixels, paddingPixels + titleHeight, insideWidth, insideHeight - titleHeight); ////////////////////////////////////////////////////////////////// // Build context ctx.destSize = DisplayEngine.NativeResolution.Size; ctx.textRegions.Clear(); // Title text GfxTextRegion trTitle = new GfxTextRegion(); ctx.textRegions.Add(trTitle); trTitle.font = (PresenterFont)font.Clone(); trTitle.font.SizeInPoints = (int)(trTitle.font.SizeInPoints * 1.5); trTitle.message = title; trTitle.bounds = rTitle; // Data GfxTextRegion trData = new GfxTextRegion(); ctx.textRegions.Add(trData); trData.font = (PresenterFont)font.Clone(); trData.font.VerticalAlignment = VerticalAlignment.Top; trData.font.HorizontalAlignment = HorizontalAlignment.Left; trData.fontClip = true; trData.message = data; trData.bounds = rText; }
public void PrepSlideSingleVerse(GfxContext ctx, VerseBreakDown data, int subIndex, PresenterFont font) { #region Format data string txt; string reference; if (data.bibleVerse.RefVersion != "") { reference = data.bibleVerse.ToString(); txt = data.primaryText[subIndex]; } else { reference = data.bibleVerse.ToString(true); txt = data.secondaryText[subIndex]; } #endregion Size nativeSize = DisplayEngine.NativeResolution.Size; #region Measure StringFormat sf = GetStringFormat(); int insideHeight = nativeSize.Height - paddingPixels * 2; int insideWidth = nativeSize.Width - paddingPixels * 2; Point anchorTop = new Point(paddingPixels, paddingPixels); Point anchorBottom = new Point(paddingPixels, paddingPixels + (int)((double)insideHeight / 2)); // Measure the reference blocks int refemSize = (int)(font.SizeInPoints * .9); // actual drawing size is smaller than usual int refBlockHeight = (int)(font.SizeInPoints * 1.2); #endregion #region Build context ctx.destSize = DisplayEngine.NativeResolution.Size; ctx.textRegions.Clear(); // Primary text GfxTextRegion rVerse = new GfxTextRegion(); ctx.textRegions.Add(rVerse); rVerse.font = font; rVerse.message = txt; RectangleF r1 = new RectangleF(paddingPixels, 0, insideWidth, InternalMeasureString(txt, font, insideWidth, sf).Height); if (font.VerticalStringAlignment == StringAlignment.Near) { r1.Y = paddingPixels; } else if (font.VerticalStringAlignment == StringAlignment.Center) { r1.Y = (float)(((double)insideHeight - r1.Height) / 2) + paddingPixels; } else { r1.Y = nativeSize.Height - r1.Height - refBlockHeight - paddingPixels * 2; } rVerse.bounds = r1; rVerse.bounds.Height += refBlockHeight; // give some slack // Reference GfxTextRegion rRef = new GfxTextRegion(); ctx.textRegions.Add(rRef); rRef.font = (PresenterFont)font.Clone(); SetRefFont(rRef.font); rRef.message = reference; r1.Y += r1.Height + refBlockHeight; // +refemSize; // relocate the box rRef.bounds = r1; rRef.bounds.Height = refBlockHeight; #endregion }
public bool PrepSlideDoubleVerse(GfxContext ctx, Dictionary <int, BibleVerse> bibVerses, int currentVerseNum, PresenterFont font) { #region Format data BibleVerse bva = bibVerses[currentVerseNum]; BibleVerse bvb = bibVerses[currentVerseNum + 1]; string firstText = bva.RefVerse + ". " + bva.Text; string secondText = bvb.RefVerse + ". " + bvb.Text; string reference = bva.ToString() + "-" + bvb.RefVerse; #endregion Size nativeSize = DisplayEngine.NativeResolution.Size; #region Measure StringFormat sf = GetStringFormat(); int insideHeight = nativeSize.Height - paddingPixels * 2; int insideWidth = nativeSize.Width - paddingPixels * 2; Point anchorTop = new Point(paddingPixels, paddingPixels); Point anchorBottom = new Point(paddingPixels, paddingPixels + (int)((double)insideHeight / 2)); // Measure the reference blocks int refemSize = (int)(font.SizeInPoints * .9); // actual drawing size is smaller than usual int refBlockHeight = (int)(font.SizeInPoints * 1.2); // Determine top of rectangle // Measure both strings RectangleF r = new RectangleF(paddingPixels, 0, insideWidth, InternalMeasureString(firstText, font, insideWidth, sf).Height); int h1 = (int)r.Height; // Get the size of the verse so we can fix the reference at the bottom int h2 = (int)InternalMeasureString(secondText, font, insideWidth, sf).Height; int offsetY = (int)(((double)insideHeight - h1 - h2 - refBlockHeight) / 2); if (font.VerticalAlignment == VerticalAlignment.Top) { r.Y = paddingPixels; } else if (font.VerticalAlignment == VerticalAlignment.Middle) { r.Y = offsetY; } else { r.Y = nativeSize.Height - paddingPixels * 2 - h1 - h2 - refBlockHeight; } // Size check int standardMax = (int)((double)insideHeight / 2); if (h1 + h2 + refBlockHeight > standardMax) { return(false); } #endregion #region Build context ctx.destSize = DisplayEngine.NativeResolution.Size; ctx.textRegions.Clear(); // Draw the first part GfxTextRegion rVerse = new GfxTextRegion(); ctx.textRegions.Add(rVerse); rVerse.font = font; rVerse.font.HorizontalAlignment = HorizontalAlignment.Left; rVerse.message = firstText; rVerse.bounds = r; GfxTextRegion rVerse2 = new GfxTextRegion(); ctx.textRegions.Add(rVerse2); rVerse2.font = font; rVerse2.message = secondText; r.Y += h1 + refemSize; r.Height = h2; rVerse2.bounds = r; // Reference GfxTextRegion rRef = new GfxTextRegion(); ctx.textRegions.Add(rRef); rRef.font = (PresenterFont)font.Clone(); SetRefFont(rRef.font); rRef.message = reference; r.Y += h2 + refBlockHeight - refemSize; // Move to the bottom of the rectangle rRef.bounds = r; rRef.bounds.Height = refBlockHeight; #endregion return(true); }
public bool PrepSlideMultiTranslation(GfxContext ctx, VerseBreakDown data, int subIndex, PresenterFont font) { // If only one version is available then fall back if (data.bibleVerse.RefVersion == "" || data.bibleVerse.SecondaryVersion == "" || data.bibleVerse.Text == "" || data.bibleVerse.SecondaryText == "") { return(false); } // Format data string primaryText = subIndex > data.primaryText.Count - 1 ? data.primaryText[data.primaryText.Count - 1] : data.primaryText[subIndex]; string secondaryText = subIndex > data.secondaryText.Count - 1 ? data.secondaryText[data.secondaryText.Count - 1] : data.secondaryText[subIndex]; string priRef = data.bibleVerse.ToString(); string secRef = data.bibleVerse.ToString(true); Size nativeSize = DisplayEngine.NativeResolution.Size; #region Measure StringFormat sf = GetStringFormat(); int insideHeight = nativeSize.Height - paddingPixels * 2; int insideWidth = nativeSize.Width - paddingPixels * 2; Point anchorTop = new Point(paddingPixels, paddingPixels); Point anchorBottom = new Point(paddingPixels, paddingPixels + (int)((double)insideHeight / 2)); // Measure the reference blocks int refemSize = (int)(font.SizeInPoints * .9); // actual drawing size is smaller than usual int refBlockHeight = (int)(font.SizeInPoints * 1.2); // Measure both strings RectangleF r1 = new RectangleF(anchorTop.X, anchorTop.Y, insideWidth, InternalMeasureString(primaryText, font, insideWidth, sf).Height); RectangleF r2 = new RectangleF(anchorBottom.X, anchorBottom.Y, insideWidth, InternalMeasureString(secondaryText, font, insideWidth, sf).Height); if (r1.Height + r2.Height + refBlockHeight * 2 > insideHeight) { return(false); } #endregion #region Build context ctx.destSize = DisplayEngine.NativeResolution.Size; ctx.textRegions.Clear(); // First part GfxTextRegion rVerse1 = new GfxTextRegion(); ctx.textRegions.Add(rVerse1); rVerse1.font = font; rVerse1.font.HorizontalAlignment = HorizontalAlignment.Left; rVerse1.font.VerticalAlignment = VerticalAlignment.Top; rVerse1.message = primaryText; // First reference GfxTextRegion rRef1 = new GfxTextRegion(); ctx.textRegions.Add(rRef1); rRef1.font = (PresenterFont)font.Clone(); SetRefFont(rRef1.font); rRef1.message = priRef; // Second part GfxTextRegion rVerse2 = new GfxTextRegion(); ctx.textRegions.Add(rVerse2); rVerse2.font = font; rVerse2.font.HorizontalAlignment = HorizontalAlignment.Left; rVerse2.font.VerticalAlignment = VerticalAlignment.Top; rVerse2.message = secondaryText; // Second reference GfxTextRegion rRef2 = new GfxTextRegion(); ctx.textRegions.Add(rRef2); rRef2.font = (PresenterFont)font.Clone(); SetRefFont(rRef2.font); rRef2.message = secRef; // Adjust bounds int standardMax = (int)((double)insideHeight / 2); if (r1.Height + refBlockHeight > standardMax || r2.Height + refBlockHeight > standardMax) { rVerse1.bounds = r1; // First part rVerse1.bounds.Height += refBlockHeight; // give some slack r1.Y += r1.Height; // First reference rRef1.bounds = r1; rRef1.bounds.Height = refBlockHeight; r1.Y += refBlockHeight; // Second part rVerse2.bounds = r1; rVerse2.bounds.Height += refBlockHeight; // give some slack r1.Y += r2.Height + refBlockHeight; // Second reference rRef2.bounds = r1; rRef2.bounds.Height = refBlockHeight; } else { rVerse1.bounds = r1; // First part rVerse1.bounds.Height += refBlockHeight; // give some slack r1.Y += r1.Height + refBlockHeight; // First reference rRef1.bounds = r1; rRef1.bounds.Height = refBlockHeight; r1.Y += refBlockHeight; // Second part rVerse2.bounds = r2; rVerse2.bounds.Height += refBlockHeight; // give some slack r2.Y += r2.Height + refBlockHeight; // Second reference rRef2.bounds = r2; rRef2.bounds.Height = refBlockHeight; } #endregion return(true); }