Longhorn風グラデーションのサンプル

実行画面


Longhornスクリーンショットを見ると真ん中が明るくて両端が暗いグラデーションが印象的。色がダークなメタリックで、都会的なクールな雰囲気を出しててカッコイイ。その上に載ってるアイコンが変で格好悪かったけど、最新のスクリーンショットではアイコンもスマートになった。

IT Pro
via 名無しさん♯ 2log.net

これを記念して(?)、Longhorn風グラデーションもどきのサンプル。

using System;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;

namespace Siokoshou
{
  /// <summary>Longhorn のグラデーションもどき</summary>
  public class LonghornGradient : System.Windows.Forms.UserControl
  {
    private Color startColor;
    private Color endColor;

    public LonghornGradient()
    {
      SetStyle( ControlStyles.ResizeRedraw | ControlStyles.DoubleBuffer | ControlStyles.UserPaint |
        ControlStyles.AllPaintingInWmPaint, true );

      startColor = Color.FromArgb( 68, 86, 136 );
      endColor   = Color.FromArgb( 98, 142, 203 );
    }

    [Description("Start color."), Category( "Appearance" ), DefaultValue( typeof(Color), "68, 86, 136" )]
    public Color StartColor
    {
      get { return startColor; }
      set
      {
        startColor = value;
        if ( this.IsHandleCreated && this.Visible )
          Invalidate();
      }
    }

    [Description("End color."), Category( "Appearance" ), DefaultValue( typeof(Color), "98, 142, 203" )]
    public Color EndColor
    {
      get { return endColor; }
      set
      {
        endColor = value;
        if ( this.IsHandleCreated && this.Visible )
          Invalidate();
      }
    }

    protected override void OnPaint( PaintEventArgs pe )
    {
      Graphics g = pe.Graphics;

      using ( LinearGradientBrush backgroundBrush = new LinearGradientBrush(
        this.ClientRectangle,
        startColor,
        endColor,
        LinearGradientMode.Horizontal ) )
      {
        backgroundBrush.SetSigmaBellShape( 0.5f, 1.0f );
        g.FillRectangle( backgroundBrush, this.ClientRectangle );
      }
    }
  }
}

カスタムコントロールとして作ったので、Formにでも貼り付けて遊んでください。
StartColorとEndColorでグラデーションの開始色と終了色を指定します。

肝は SetSigmaBellShape( 0.5f, 1.0f ) の部分。釣鐘型の曲線のグラデーションを作ってくれます。
Googleによると世界でも71件しか引っかからないレアな一品です。

これを書くためにColorのDefaultValueの指定方法を調べちゃった。typeof(Color)ってすればいいんですね。Fontなんかも同様にいけるみたい。

本物のLonghornは両端で急激に明るくなるけど、そこは再現してません。なのであくまでも「もどき」です。