Exemple #1
0
        // Graphics prep
        private void PrepareForDisplay()
        {
            // This method will prepare the data for the graphics engine to make it faster
            // It take all the bible text and break it across multiple slides
            // Requirements: reload data on the fly (save state and start from where left off)

            // Clean up
            int currentVerseBackup = currentVerseNum; // back this up just in case

            this.slideData.Clear();

            // Init
            bibFont = PresenterFont.GetFontFromDatabase(-1); // Get the bib font from db

            /// Split each of the verses if necessary
            foreach (BibleVerse bvCurrent in this.bibVerses.Values)
            {
                // Calculate max block size
                Size   nativeSize   = DisplayEngine.NativeResolution.Size;
                int    transCount   = TranslationList().Count;
                double insideHeight = nativeSize.Height;
                insideHeight -= imageFactory.paddingPixels * 2;                // Top and bottom
                insideHeight -= imageFactory.paddingPixels * (transCount - 1); // Between translations
                insideHeight /= transCount;
                insideHeight -= bibFont.SizeInPoints * 1.5;                    // Space for verse labels
                int  maxh    = (int)insideHeight;
                Size maxSize = new Size(imageFactory.maxInsideWidth, maxh);

                VerseBreakDown d = new VerseBreakDown();
                d.bibleVerse    = bvCurrent;
                d.primaryText   = InternalBreakString(bvCurrent.RefVerse, bvCurrent.Text, maxSize);
                d.secondaryText = InternalBreakString(bvCurrent.SecondaryVerse, bvCurrent.SecondaryText, maxSize);
                d.tertiaryText  = InternalBreakString(bvCurrent.TertiaryVerse, bvCurrent.TertiaryText, maxSize);
                slideData.Add(bvCurrent.RefVerse, d);
            }

            // Read initial opacity
            EnsureBackground();
            UpdateOpacity(Program.ConfigHelper.BibleImageOpacity);

            // Reset the current location
            if (bibVerses.Count > 0 && currentVerseBackup < bibVerses.Count + 1 &&
                currentVerseBackup != -1)
            {
                currentVerseNum = currentVerseBackup;
            }
            else
            {
                currentVerseNum = 1;
            }
        }
Exemple #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
            }
Exemple #3
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);
            }