Example #1
0
 protected byte[] RenderText(string text)
 {
     if (!Application.Current.Dispatcher.HasShutdownStarted)
     {
         return(Application.Current.Dispatcher.Invoke(() =>
         {
             TextBlock textBlock = new TextBlock();
             textBlock.BeginInit();
             textBlock.Text = text;
             textBlock.Width = double.IsNaN(Width) ? Width : Width - 10;
             textBlock.TextAlignment = TextAlignment;
             textBlock.TextWrapping = AutoSize ? TextWrapping.NoWrap : TextWrapping.Wrap;
             textBlock.TextTrimming = TextTrimming.CharacterEllipsis;
             textBlock.FontFamily = Font.Family;
             textBlock.FontSize = Font.Size;
             textBlock.FontWeight = Font.Weight;
             textBlock.FontStyle = Font.Style;
             textBlock.FontStretch = Font.Stretch;
             textBlock.EndInit();
             textBlock.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
             textBlock.Arrange(new Rect(textBlock.DesiredSize));
             textBlock.UpdateLayout();
             RenderTargetBitmap bmp = new RenderTargetBitmap(Convert.ToInt32(Math.Ceiling(textBlock.ActualWidth)), Convert.ToInt32(Math.Ceiling(textBlock.ActualHeight)), 96, 96, PixelFormats.Pbgra32);
             bmp.Render(textBlock);
             var encoder = new PngBitmapEncoder();
             encoder.Frames.Add(BitmapFrame.Create(bmp));
             using (var stream = new MemoryStream())
             {
                 encoder.Save(stream);
                 return stream.ToArray();
             }
         }));
     }
     return(new byte[0]);
 }
Example #2
0
        protected void UpdateTagDisplay()
        {
            if (m_flagsBlock != null)
            {
                Children.Remove(m_flagsBlock);
                m_flagsBlock = null;
            }

            if (!m_showMetadata)
            {
                return;                  // No metadata to be shown
            }
            string flagsText = m_title ?? string.Empty;

            if (m_tags != null && m_tags.Count > 0)
            {
                flagsText = string.Concat(flagsText, "\r\n", string.Join("\r\n", m_tags));
            }

            if (!string.IsNullOrEmpty(flagsText))
            {
                m_flagsBlock = new TextBlock();
                m_flagsBlock.BeginInit();
                m_flagsBlock.Text                = flagsText;
                m_flagsBlock.FontSize            = cTagsFontSize;
                m_flagsBlock.Foreground          = cTagsColor;
                m_flagsBlock.FontWeight          = FontWeights.Bold;
                m_flagsBlock.HorizontalAlignment = HorizontalAlignment.Right;
                m_flagsBlock.VerticalAlignment   = VerticalAlignment.Top;
                m_flagsBlock.EndInit();
                Children.Add(m_flagsBlock);
            }
        }
Example #3
0
        protected void UpdateMetadata()
        {
            // Remove any existing metadata block
            if (m_metadataBlock != null)
            {
                Children.Remove(m_metadataBlock);
                m_metadataBlock = null;
            }

            if (!m_showMetadata)
            {
                return;                  // No metadata to be shown
            }
            StringBuilder builder = new StringBuilder();

            if (m_uri != null)
            {
                string path = m_uri.OriginalString;

                SlideShow slideShow = Parent as SlideShow;
                if (slideShow != null)
                {
                    string rootPath = slideShow.RootPath;
                    if (path.StartsWith(rootPath, StringComparison.OrdinalIgnoreCase))
                    {
                        path = path.Substring(rootPath.Length);
                    }
                }

                string[] pathParts = path.Split(sPathSeparators, StringSplitOptions.RemoveEmptyEntries);

                foreach (string part in pathParts)
                {
                    builder.Append("\r\n");
                    builder.Append(part);
                }
            }

            if (m_dateTaken != null)
            {
                builder.Append("\r\n");
                builder.Append(m_dateTaken);
            }

            if (builder.Length > 0)
            {
                m_metadataBlock = new TextBlock();
                m_metadataBlock.BeginInit();
                m_metadataBlock.Text                = builder.ToString();
                m_metadataBlock.FontSize            = cMetadataFontSize;
                m_metadataBlock.Foreground          = cMetadataColor;
                m_metadataBlock.HorizontalAlignment = HorizontalAlignment.Right;
                m_metadataBlock.VerticalAlignment   = VerticalAlignment.Bottom;
                m_metadataBlock.TextAlignment       = TextAlignment.Right;
                m_metadataBlock.EndInit();
                Children.Add(m_metadataBlock);
            }

            UpdateTagDisplay();
        }
Example #4
0
        public void RenderText()
        {
            RenderTargetBitmap rtBitmap = new RenderTargetBitmap(_width, _height, 96.0, 96.0, PixelFormats.Pbgra32);

            Grid grid = new Grid();

            grid.BeginInit();
            grid.Background = new ImageBrush(_bmp);
            grid.Arrange(new Rect(new System.Windows.Size(_width, _height)));

            foreach (Label l in TextList)
            {
                TextBlock txtBlock = new TextBlock();
                txtBlock.BeginInit();
                txtBlock.FontSize            = 12;
                txtBlock.HorizontalAlignment = HorizontalAlignment.Center;
                txtBlock.Text = l.Text;
                txtBlock.Arrange(new Rect(l.X1, l.Y1, l.X2 - l.X1, l.Y2 - l.Y1));
                txtBlock.EndInit();

                grid.Children.Add(txtBlock);
            }

            grid.EndInit();

            rtBitmap.Render(grid);

            _bmp.Lock();
            rtBitmap.CopyPixels(new Int32Rect(0, 0, rtBitmap.PixelWidth, rtBitmap.PixelHeight), _bmp.BackBuffer, _bmp.BackBufferStride * _bmp.PixelHeight, _bmp.BackBufferStride);
            _bmp.AddDirtyRect(new Int32Rect(0, 0, _width, _height));
            _bmp.Unlock();

            TextList.Clear();
        }
Example #5
0
        private void OnLoadComplete()
        {
            try
            {
                if (m_bitmap != null)
                {
                    Image image = new Image();
                    image.BeginInit();
                    image.Source  = m_bitmap;
                    image.Stretch = Stretch.Uniform;
                    image.EndInit();
                    Children.Add(image);
                }
                else
                {
                    string message = (m_loadError != null)
                                                ? string.Concat("Failed to load image:\r\n", m_loadError.Message)
                                                : "Failed to load image.";
                    TextBlock label = new TextBlock();
                    label.BeginInit();
                    //label.Content = message;
                    //label.HorizontalContentAlignment = HorizontalAlignment.Center;
                    //label.VerticalContentAlignment = VerticalAlignment.Center;
                    label.Text         = message;
                    label.FontSize     = 20;
                    label.Foreground   = Brushes.White;
                    label.TextWrapping = TextWrapping.Wrap;
                    label.EndInit();
                    Children.Add(label);
                }

                UpdateMetadata();

                // Don't change the state if already displayed.
                if (PanelState == PanelState.Init)
                {
                    SetPanelState(PanelState.Ready);
                }
            }
            catch (Exception err)
            {
                Debug.WriteLine(err.ToString());
            }
        }
Example #6
0
 public void Message(string msg)
 {
     if (fMessage != null)
     {
         Children.Remove(fMessage);
         fMessage = null;
     }
     if (!string.IsNullOrEmpty(msg))
     {
         TextBlock txtblk = new TextBlock();
         txtblk.BeginInit();
         txtblk.Text                = msg;
         txtblk.FontSize            = 28;
         txtblk.Foreground          = Brushes.Crimson;
         txtblk.HorizontalAlignment = HorizontalAlignment.Left;
         txtblk.VerticalAlignment   = VerticalAlignment.Bottom;
         txtblk.EndInit();
         Children.Add(txtblk);
         fMessage        = txtblk;
         fClearMessageAt = Environment.TickCount + cMessageDisplayPeriod;
     }
 }