/* * Copyright 2019 faddenSoft * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ using System; using System.Collections.Generic; using System.Globalization; using System.Windows; using System.Windows.Media; namespace CommonWPF { /// /// Miscellaneous helper functions. /// public static class Helper { public static Color ZeroColor = Color.FromArgb(0, 0, 0, 0); /// /// Measures the size of a string when rendered with the specified parameters. Uses /// the current culture, left-to-right flow, and 1 pixel per DIP. /// /// /// The Graphics.MeasureString approach from WinForms doesn't work in WPF, but we can /// accomplish the same thing with the FormattedText class. /// /// /// Text to be displayed. /// Font family for Typeface. /// Font style for Typeface. /// Font weight for Typeface. /// Font stretch for Typeface. /// Font size. /// Width and height of rendered text. public static Size MeasureString(string str, FontFamily fontFamily, FontStyle fontStyle, FontWeight fontWeight, FontStretch fontStretch, double emSize) { FormattedText fmt = new FormattedText( str, CultureInfo.CurrentCulture, FlowDirection.LeftToRight, new Typeface(fontFamily, fontStyle, fontWeight, fontStretch), emSize, Brushes.Black, new NumberSubstitution(), 1.0); return new Size(fmt.Width, fmt.Height); } /// /// Measures the size of a string when rendered with the specified parameters. Uses /// the current culture, left-to-right flow, and 1 pixel per DIP. /// /// Text to be displayed. /// Font typeface to use. /// Font size. /// Width of rendered text. public static double MeasureStringWidth(string str, Typeface typeface, double emSize) { FormattedText fmt = new FormattedText( str, CultureInfo.CurrentCulture, FlowDirection.LeftToRight, typeface, emSize, Brushes.Black, new NumberSubstitution(), 1.0); return fmt.Width; } /// /// Converts a System.Windows.Media.Color value into 32-bit ARGB. /// public static int ColorToInt(Color color) { return (color.A << 24) | (color.R << 16) | (color.G << 8) | color.B; } /// /// Creates a System.Windows.Media.Color value from 32-bit ARGB. /// /// /// public static Color ColorFromInt(int colorInt) { return Color.FromArgb((byte)(colorInt >> 24), (byte)(colorInt >> 16), (byte)(colorInt >> 8), (byte)colorInt); } } }