| File: System\Windows\Forms\Controls\ProgressBar\ProgressBarRenderer.cs | Web Access |
| Project: src\winforms\src\System.Windows.Forms\System.Windows.Forms.csproj (System.Windows.Forms) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Drawing; using System.Windows.Forms.VisualStyles; namespace System.Windows.Forms; /// <summary> /// This is a rendering class for the ProgressBar control. /// </summary> public static class ProgressBarRenderer { // Make this per-thread, so that different threads can safely use these methods. [ThreadStatic] private static VisualStyleRenderer? t_visualStyleRenderer; /// <summary> /// Returns true if this class is supported for the current OS and user/application settings, /// otherwise returns false. /// </summary> public static bool IsSupported => VisualStyleRenderer.IsSupported; // no downlevel support /// <summary> /// Renders a horizontal bar. /// </summary> public static void DrawHorizontalBar(Graphics g, Rectangle bounds) { InitializeRenderer(VisualStyleElement.ProgressBar.Bar.Normal); t_visualStyleRenderer.DrawBackground(g, bounds); } /// <summary> /// Renders a vertical bar. /// </summary> public static void DrawVerticalBar(Graphics g, Rectangle bounds) { InitializeRenderer(VisualStyleElement.ProgressBar.BarVertical.Normal); t_visualStyleRenderer.DrawBackground(g, bounds); } /// <summary> /// Renders a number of constant size horizontal chunks in the given bounds. /// </summary> public static void DrawHorizontalChunks(Graphics g, Rectangle bounds) { InitializeRenderer(VisualStyleElement.ProgressBar.Chunk.Normal); t_visualStyleRenderer.DrawBackground(g, bounds); } /// <summary> /// Renders a number of constant size vertical chunks in the given bounds. /// </summary> public static void DrawVerticalChunks(Graphics g, Rectangle bounds) { InitializeRenderer(VisualStyleElement.ProgressBar.ChunkVertical.Normal); t_visualStyleRenderer.DrawBackground(g, bounds); } /// <summary> /// Returns the width/height of a single horizontal/vertical progress bar chunk. /// </summary> public static int ChunkThickness { get { InitializeRenderer(VisualStyleElement.ProgressBar.Chunk.Normal); return t_visualStyleRenderer.GetInteger(IntegerProperty.ProgressChunkSize); } } /// <summary> /// Returns the width/height of the space between horizontal/vertical progress bar chunks. /// </summary> public static int ChunkSpaceThickness { get { InitializeRenderer(VisualStyleElement.ProgressBar.Chunk.Normal); return t_visualStyleRenderer.GetInteger(IntegerProperty.ProgressSpaceSize); } } [MemberNotNull(nameof(t_visualStyleRenderer))] private static void InitializeRenderer(VisualStyleElement element) { if (t_visualStyleRenderer is null) { t_visualStyleRenderer = new VisualStyleRenderer(element); } else { t_visualStyleRenderer.SetParameters(element); } } }