Esempio n. 1
0
            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;
            }
Esempio n. 2
0
            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
            }
Esempio n. 3
0
            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);
            }
Esempio n. 4
0
            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);
            }