예제 #1
0
        /// <summary>
        /// Draws the content of the control filling in all color values with the provided Luminance or Brightness value.
        /// </summary>
        private void Draw_Style_Luminance(Gdk.Window win)
        {
            //hack: use CAIRO instead of Systme.Drawing bug
            Cairo.Context context = Gdk.CairoHelper.Create(win);


            GraphUtil.HSL hsl_start = new GraphUtil.HSL();
            GraphUtil.HSL hsl_end   = new GraphUtil.HSL();
            hsl_start.L = m_hsl.L;
            hsl_end.L   = m_hsl.L;
            hsl_start.S = 1.0;
            hsl_end.S   = 0.0;

            for (int i = 0; i < this.Allocation.Width - 4; i++)                         //	For each vertical line in the control:
            {
                hsl_start.H = (double)i / (this.Allocation.Width - 4);                  //	Calculate Hue at this line (Saturation and Luminance are constant)
                hsl_end.H   = hsl_start.H;

                Cairo.LinearGradient gradient = new Cairo.LinearGradient(2, 2, 1, this.Allocation.Height - 4);
                gradient.AddColorStop(0, CairoUtil.ColorFromRgb(GraphUtil.HSL_to_RGB(hsl_start)));
                gradient.AddColorStop(1, CairoUtil.ColorFromRgb(GraphUtil.HSL_to_RGB(hsl_end)));

                context.Rectangle(i + 2, 2, 1, this.Allocation.Height - 4);
                context.Pattern = gradient;

                context.Fill();
            }

            context.Stroke();
            ((IDisposable)context).Dispose();
        }
예제 #2
0
        /// <summary>
        /// Resets the controls color (both HSL and RGB variables) based on the current slider position
        /// </summary>
        private void ResetHSLRGB()
        {
            switch (m_eDrawStyle)
            {
            case eDrawStyle.Hue:
                m_hsl.H = 1.0 - (double)m_iMarker_Start_Y / (this.Allocation.Height - 9);
                m_rgb   = GraphUtil.HSL_to_RGB(m_hsl);
                break;

            case eDrawStyle.Saturation:
                m_hsl.S = 1.0 - (double)m_iMarker_Start_Y / (this.Allocation.Height - 9);
                m_rgb   = GraphUtil.HSL_to_RGB(m_hsl);
                break;

            case eDrawStyle.Brightness:
                m_hsl.L = 1.0 - (double)m_iMarker_Start_Y / (this.Allocation.Height - 9);
                m_rgb   = GraphUtil.HSL_to_RGB(m_hsl);
                break;

            case eDrawStyle.Red:
                m_rgb = Color.FromArgb(255 - Round(255 * (double)m_iMarker_Start_Y / (this.Allocation.Height - 9)), m_rgb.G, m_rgb.B);
                m_hsl = GraphUtil.RGB_to_HSL(m_rgb);
                break;

            case eDrawStyle.Green:
                m_rgb = Color.FromArgb(m_rgb.R, 255 - Round(255 * (double)m_iMarker_Start_Y / (this.Allocation.Height - 9)), m_rgb.B);
                m_hsl = GraphUtil.RGB_to_HSL(m_rgb);
                break;

            case eDrawStyle.Blue:
                m_rgb = Color.FromArgb(m_rgb.R, m_rgb.G, 255 - Round(255 * (double)m_iMarker_Start_Y / (this.Allocation.Height - 9)));
                m_hsl = GraphUtil.RGB_to_HSL(m_rgb);
                break;
            }
        }
        public VerticalColorSlider()
        {
            // This call is required by the Windows.Forms Form Designer.
            InitializeComponent();

            //	Initialize Colors
            m_hsl = new GraphUtil.HSL();
            m_hsl.H = 1.0;
            m_hsl.S = 1.0;
            m_hsl.L = 1.0;
            m_rgb = GraphUtil.HSL_to_RGB(m_hsl);
            m_eDrawStyle = eDrawStyle.Hue;
        }
예제 #4
0
        public VerticalColorSlider()
        {
            // This call is required by the Windows.Forms Form Designer.
            InitializeComponent();

            //	Initialize Colors
            m_hsl        = new GraphUtil.HSL();
            m_hsl.H      = 1.0;
            m_hsl.S      = 1.0;
            m_hsl.L      = 1.0;
            m_rgb        = GraphUtil.HSL_to_RGB(m_hsl);
            m_eDrawStyle = eDrawStyle.Hue;
        }
예제 #5
0
        public ColorPanel()
        {
            // This call is required by the Windows.Forms Form Designer.
            InitializeComponent();

            //	Initialize Colors
            m_hsl        = new GraphUtil.HSL();
            m_hsl.H      = 1.0;
            m_hsl.S      = 1.0;
            m_hsl.L      = 1.0;
            m_rgb        = GraphUtil.HSL_to_RGB(m_hsl);
            m_eDrawStyle = eDrawStyle.Hue;

            this.DoubleBuffered = false;
        }
예제 #6
0
        public ColorPanel()
        {
            // This call is required by the Windows.Forms Form Designer.
            InitializeComponent();

            //	Initialize Colors
            m_hsl   = new GraphUtil.HSL();
            m_hsl.H = 1.0;
            m_hsl.S = 1.0;
            m_hsl.L = 1.0;
            m_rgb   = GraphUtil.HSL_to_RGB(m_hsl);
            m_eDrawStyle = eDrawStyle.Hue;

            this.DoubleBuffered = false;
        }
예제 #7
0
        //	The following functions do the real work of the control, drawing the primary content (the area between the slider)
        //

        /// <summary>
        /// Fills in the content of the control showing all values of Hue (from 0 to 360)
        /// </summary>
        private void Draw_Style_Hue(Gdk.Window g)
        {
            GraphUtil.HSL _hsl = new GraphUtil.HSL();
            _hsl.S = 1.0;                       //	S and L will both be at 100% for this DrawStyle
            _hsl.L = 1.0;

            for (int i = 0; i < this.Allocation.Height - 8; i++)                        //	i represents the current line of pixels we want to draw horizontally
            {
                _hsl.H = 1.0 - (double)i / (this.Allocation.Height - 8);                //	H (hue) is based on the current vertical position
                Color c = GraphUtil.HSL_to_RGB(_hsl);

                Gdk.GC gc = new Gdk.GC(g);
                gc.RgbFgColor = GraphUtil.gdkColorFromWinForms(c);

                g.DrawLine(gc, 11, i + 4, this.Allocation.Width - 11, i + 4);                         //	Draw the line and loop back for next line
            }
        }
예제 #8
0
        /// <summary>
        /// Resets the controls color (both HSL and RGB variables) based on the current marker position
        /// </summary>
        private void ResetHSLRGB( )
        {
            int red, green, blue;

            switch (m_eDrawStyle)
            {
            case eDrawStyle.Hue:
                m_hsl.S = (double)m_iMarker_X / (this.Allocation.Width - 4);
                m_hsl.L = 1.0 - (double)m_iMarker_Y / (this.Allocation.Height - 4);
                m_rgb   = GraphUtil.HSL_to_RGB(m_hsl);
                break;

            case eDrawStyle.Saturation:
                m_hsl.H = (double)m_iMarker_X / (this.Allocation.Width - 4);
                m_hsl.L = 1.0 - (double)m_iMarker_Y / (this.Allocation.Height - 4);
                m_rgb   = GraphUtil.HSL_to_RGB(m_hsl);
                break;

            case eDrawStyle.Brightness:
                m_hsl.H = (double)m_iMarker_X / (this.Allocation.Width - 4);
                m_hsl.S = 1.0 - (double)m_iMarker_Y / (this.Allocation.Height - 4);
                m_rgb   = GraphUtil.HSL_to_RGB(m_hsl);
                break;

            case eDrawStyle.Red:
                blue  = Round(255 * (double)m_iMarker_X / (this.Allocation.Width - 4));
                green = Round(255 * (1.0 - (double)m_iMarker_Y / (this.Allocation.Height - 4)));
                m_rgb = Color.FromArgb(m_rgb.R, green, blue);
                m_hsl = GraphUtil.RGB_to_HSL(m_rgb);
                break;

            case eDrawStyle.Green:
                blue  = Round(255 * (double)m_iMarker_X / (this.Allocation.Width - 4));
                red   = Round(255 * (1.0 - (double)m_iMarker_Y / (this.Allocation.Height - 4)));
                m_rgb = Color.FromArgb(red, m_rgb.G, blue);
                m_hsl = GraphUtil.RGB_to_HSL(m_rgb);
                break;

            case eDrawStyle.Blue:
                red   = Round(255 * (double)m_iMarker_X / (this.Allocation.Width - 4));
                green = Round(255 * (1.0 - (double)m_iMarker_Y / (this.Allocation.Height - 4)));
                m_rgb = Color.FromArgb(red, green, m_rgb.B);
                m_hsl = GraphUtil.RGB_to_HSL(m_rgb);
                break;
            }
        }
예제 #9
0
        /// <summary>
        /// Fills in the content of the control showing all values of Luminance (0 to 100%) for the given
        /// Hue and Saturation.
        /// </summary>
        private void Draw_Style_Luminance(Gdk.Window g)
        {
            GraphUtil.HSL _hsl = new GraphUtil.HSL();
            _hsl.H = m_hsl.H;                   //	Use the H and S values of the current color (m_hsl)
            _hsl.S = m_hsl.S;

            for (int i = 0; i < this.Allocation.Height - 8; i++)               //	i represents the current line of pixels we want to draw horizontally
            {
                _hsl.L = 1.0 - (double)i / (this.Allocation.Height - 8);       //	L (Luminance) is based on the current vertical position
                //	Get the Color for this line
                Color c = GraphUtil.HSL_to_RGB(_hsl);

                Gdk.GC gc = new Gdk.GC(g);
                gc.RgbFgColor = GraphUtil.gdkColorFromWinForms(c);
                g.DrawLine(gc, 11, i + 4, this.Allocation.Width - 11, i + 4);                  //	Draw the line and loop back for next line
            }
        }
예제 #10
0
        /// <summary>
        /// Draws the content of the control filling in all color values with the provided Hue value.
        /// </summary>
        private void Draw_Style_Hue(Gdk.Window win)
        {
            Graphics g = Gtk.DotNet.Graphics.FromDrawable(win);

            GraphUtil.HSL hsl_start = new GraphUtil.HSL();
            GraphUtil.HSL hsl_end   = new GraphUtil.HSL();
            hsl_start.H = m_hsl.H;
            hsl_end.H   = m_hsl.H;
            hsl_start.S = 0.0;
            hsl_end.S   = 1.0;

            for (int i = 0; i < this.Allocation.Height - 4; i++)                                //	For each horizontal line in the control:
            {
                hsl_start.L = 1.0 - (double)i / (this.Allocation.Height - 4);                   //	Calculate luminance at this line (Hue and Saturation are constant)
                hsl_end.L   = hsl_start.L;

                LinearGradientBrush br = new LinearGradientBrush(new Rectangle(2, 2, this.Allocation.Width - 4, 1), GraphUtil.HSL_to_RGB(hsl_start), GraphUtil.HSL_to_RGB(hsl_end), 0, false);
                g.FillRectangle(br, new Rectangle(2, i + 2, this.Allocation.Width - 4, 1));
            }
            g.Dispose();
        }
예제 #11
0
        /// <summary>
        /// Returns the graphed color at the x,y position on the control
        /// </summary>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <returns></returns>
        private GraphUtil.HSL GetColor(int x, int y)
        {
            GraphUtil.HSL _hsl = new GraphUtil.HSL();

            switch (m_eDrawStyle)
            {
            case eDrawStyle.Hue:
                _hsl.H = m_hsl.H;
                _hsl.S = (double)x / (this.Allocation.Width - 4);
                _hsl.L = 1.0 - (double)y / (this.Allocation.Height - 4);
                break;

            case eDrawStyle.Saturation:
                _hsl.S = m_hsl.S;
                _hsl.H = (double)x / (this.Allocation.Width - 4);
                _hsl.L = 1.0 - (double)y / (this.Allocation.Height - 4);
                break;

            case eDrawStyle.Brightness:
                _hsl.L = m_hsl.L;
                _hsl.H = (double)x / (this.Allocation.Width - 4);
                _hsl.S = 1.0 - (double)y / (this.Allocation.Height - 4);
                break;

            case eDrawStyle.Red:
                _hsl = GraphUtil.RGB_to_HSL(Color.FromArgb(m_rgb.R, Round(255 * (1.0 - (double)y / (this.Allocation.Height - 4))), Round(255 * (double)x / (this.Allocation.Width - 4))));
                break;

            case eDrawStyle.Green:
                _hsl = GraphUtil.RGB_to_HSL(Color.FromArgb(Round(255 * (1.0 - (double)y / (this.Allocation.Height - 4))), m_rgb.G, Round(255 * (double)x / (this.Allocation.Width - 4))));
                break;

            case eDrawStyle.Blue:
                _hsl = GraphUtil.RGB_to_HSL(Color.FromArgb(Round(255 * (double)x / (this.Allocation.Width - 4)), Round(255 * (1.0 - (double)y / (this.Allocation.Height - 4))), m_rgb.B));
                break;
            }

            return(_hsl);
        }
예제 #12
0
        /// <summary>
        /// Returns the graphed color at the x,y position on the control
        /// </summary>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <returns></returns>
        private GraphUtil.HSL GetColor(int x, int y)
        {
            GraphUtil.HSL _hsl = new GraphUtil.HSL();

            switch (m_eDrawStyle)
            {
                case eDrawStyle.Hue :
                    _hsl.H = m_hsl.H;
                    _hsl.S = (double)x/(this.Allocation.Width - 4);
                    _hsl.L = 1.0 - (double)y/(this.Allocation.Height - 4);
                    break;
                case eDrawStyle.Saturation :
                    _hsl.S = m_hsl.S;
                    _hsl.H = (double)x/(this.Allocation.Width - 4);
                    _hsl.L = 1.0 - (double)y/(this.Allocation.Height - 4);
                    break;
                case eDrawStyle.Brightness :
                    _hsl.L = m_hsl.L;
                    _hsl.H = (double)x/(this.Allocation.Width - 4);
                    _hsl.S = 1.0 - (double)y/(this.Allocation.Height - 4);
                    break;
                case eDrawStyle.Red :
                    _hsl = GraphUtil.RGB_to_HSL(Color.FromArgb(m_rgb.R, Round(255 * (1.0 - (double)y/(this.Allocation.Height - 4))), Round(255 * (double)x/(this.Allocation.Width - 4))));
                    break;
                case eDrawStyle.Green :
                    _hsl = GraphUtil.RGB_to_HSL(Color.FromArgb(Round(255 * (1.0 - (double)y/(this.Allocation.Height - 4))), m_rgb.G, Round(255 * (double)x/(this.Allocation.Width - 4))));
                    break;
                case eDrawStyle.Blue :
                    _hsl = GraphUtil.RGB_to_HSL(Color.FromArgb(Round(255 * (double)x/(this.Allocation.Width - 4)), Round(255 * (1.0 - (double)y/(this.Allocation.Height - 4))), m_rgb.B));
                    break;
            }

            return _hsl;
        }
 /// <summary>
 /// Resets the controls color (both HSL and RGB variables) based on the current slider position
 /// </summary>
 private void ResetHSLRGB()
 {
     switch (m_eDrawStyle)
     {
         case eDrawStyle.Hue :
             m_hsl.H = 1.0 - (double)m_iMarker_Start_Y/(this.Allocation.Height - 9);
             m_rgb = GraphUtil.HSL_to_RGB(m_hsl);
             break;
         case eDrawStyle.Saturation :
             m_hsl.S = 1.0 - (double)m_iMarker_Start_Y/(this.Allocation.Height - 9);
             m_rgb = GraphUtil.HSL_to_RGB(m_hsl);
             break;
         case eDrawStyle.Brightness :
             m_hsl.L = 1.0 - (double)m_iMarker_Start_Y/(this.Allocation.Height - 9);
             m_rgb = GraphUtil.HSL_to_RGB(m_hsl);
             break;
         case eDrawStyle.Red :
             m_rgb = Color.FromArgb(255 - Round( 255 * (double)m_iMarker_Start_Y/(this.Allocation.Height - 9) ), m_rgb.G, m_rgb.B);
             m_hsl = GraphUtil.RGB_to_HSL(m_rgb);
             break;
         case eDrawStyle.Green :
             m_rgb = Color.FromArgb(m_rgb.R, 255 - Round( 255 * (double)m_iMarker_Start_Y/(this.Allocation.Height - 9) ), m_rgb.B);
             m_hsl = GraphUtil.RGB_to_HSL(m_rgb);
             break;
         case eDrawStyle.Blue :
             m_rgb = Color.FromArgb(m_rgb.R, m_rgb.G, 255 - Round( 255 * (double)m_iMarker_Start_Y/(this.Allocation.Height - 9) ));
             m_hsl = GraphUtil.RGB_to_HSL(m_rgb);
             break;
     }
 }
        /// <summary>
        /// Fills in the content of the control showing all values of Saturation (0 to 100%) for the given
        /// Hue and Luminance.
        /// </summary>
        private void Draw_Style_Saturation(Gdk.Window g)
        {
            GraphUtil.HSL _hsl = new GraphUtil.HSL();
            _hsl.H = m_hsl.H;	//	Use the H and L values of the current color (m_hsl)
            _hsl.L = m_hsl.L;

            for ( int i = 0; i < this.Allocation.Height - 8; i++ ) //	i represents the current line of pixels we want to draw horizontally
            {
                _hsl.S = 1.0 - (double)i/(this.Allocation.Height - 8);			//	S (Saturation) is based on the current vertical position

                Color c = GraphUtil.HSL_to_RGB(_hsl);

                Gdk.GC gc     = new Gdk.GC( g );
                gc.RgbFgColor = GraphUtil.gdkColorFromWinForms( c );
                g.DrawLine( gc, 11, i + 4, this.Allocation.Width - 11, i + 4 );	//	Draw the line and loop back for next line
            }
        }
        //    The following functions do the real work of the control, drawing the primary content (the area between the slider)
        //    
        /// <summary>
        /// Fills in the content of the control showing all values of Hue (from 0 to 360)
        /// </summary>
        private void Draw_Style_Hue(Gdk.Window g)
        {
            GraphUtil.HSL _hsl = new GraphUtil.HSL();
                _hsl.S = 1.0;	//	S and L will both be at 100% for this DrawStyle
                _hsl.L = 1.0;

                for ( int i = 0; i < this.Allocation.Height - 8; i++ )	//	i represents the current line of pixels we want to draw horizontally
                {
                    _hsl.H = 1.0 - (double)i/(this.Allocation.Height - 8);			//	H (hue) is based on the current vertical position
                    Color c = GraphUtil.HSL_to_RGB(_hsl);

                    Gdk.GC gc     = new Gdk.GC( g );
                    gc.RgbFgColor = GraphUtil.gdkColorFromWinForms( c );

                    g.DrawLine( gc, 11, i + 4, this.Allocation.Width - 11, i +4 );//	Draw the line and loop back for next line
                }
        }
예제 #16
0
        /// <summary>
        /// Resets the controls color (both HSL and RGB variables) based on the current marker position
        /// </summary>
        private void ResetHSLRGB( )
        {
            int red, green, blue;

            switch (m_eDrawStyle)
            {
                case eDrawStyle.Hue :
                    m_hsl.S = (double)m_iMarker_X/(this.Allocation.Width - 4);
                    m_hsl.L = 1.0 - (double)m_iMarker_Y/(this.Allocation.Height - 4);
                    m_rgb = GraphUtil.HSL_to_RGB(m_hsl);
                    break;
                case eDrawStyle.Saturation :
                    m_hsl.H = (double)m_iMarker_X/(this.Allocation.Width - 4);
                    m_hsl.L = 1.0 - (double)m_iMarker_Y/(this.Allocation.Height - 4);
                    m_rgb = GraphUtil.HSL_to_RGB(m_hsl);
                    break;
                case eDrawStyle.Brightness :
                    m_hsl.H = (double)m_iMarker_X/(this.Allocation.Width - 4);
                    m_hsl.S = 1.0 - (double)m_iMarker_Y/(this.Allocation.Height - 4);
                    m_rgb = GraphUtil.HSL_to_RGB(m_hsl);
                    break;
                case eDrawStyle.Red :
                    blue = Round(255 * (double)m_iMarker_X/(this.Allocation.Width - 4));
                    green = Round(255 * (1.0 - (double)m_iMarker_Y/(this.Allocation.Height - 4)));
                    m_rgb = Color.FromArgb(m_rgb.R, green, blue);
                    m_hsl = GraphUtil.RGB_to_HSL(m_rgb);
                    break;
                case eDrawStyle.Green :
                    blue = Round(255 * (double)m_iMarker_X/(this.Allocation.Width - 4));
                    red = Round(255 * (1.0 - (double)m_iMarker_Y/(this.Allocation.Height - 4)));
                    m_rgb = Color.FromArgb(red, m_rgb.G, blue);
                    m_hsl = GraphUtil.RGB_to_HSL(m_rgb);
                    break;
                case eDrawStyle.Blue :
                    red = Round(255 * (double)m_iMarker_X/(this.Allocation.Width - 4));
                    green = Round(255 * (1.0 - (double)m_iMarker_Y/(this.Allocation.Height - 4)));
                    m_rgb = Color.FromArgb(red, green, m_rgb.B);
                    m_hsl = GraphUtil.RGB_to_HSL(m_rgb);
                    break;
            }
        }
예제 #17
0
        /// <summary>
        /// Draws the content of the control filling in all color values with the provided Saturation value.
        /// </summary>
        private void Draw_Style_Saturation(Gdk.Window win)
        {
            //hack: use CAIRO instead of Systme.Drawing  bug
            Cairo.Context context = Gdk.CairoHelper.Create( win );

            GraphUtil.HSL hsl_start = new GraphUtil.HSL();
            GraphUtil.HSL hsl_end   = new GraphUtil.HSL();
            hsl_start.S = m_hsl.S;
            hsl_end.S   = m_hsl.S;
            hsl_start.L = 1.0;
            hsl_end.L   = 0.0;

            int width   = this.Allocation.Width;
            for ( int i = 0; i <  width - 4; i++ )		//	For each vertical line in the control:
            {
                hsl_start.H = (double)i/(width - 4);	//	Calculate Hue at this line (Saturation and Luminance are constant)
                hsl_end.H   = hsl_start.H;

                Cairo.LinearGradient gradient = new Cairo.LinearGradient( 2,2, 1, this.Allocation.Height - 4 );
                gradient.AddColorStop( 0, CairoUtil.ColorFromRgb( GraphUtil.HSL_to_RGB( hsl_start ) ) );
                gradient.AddColorStop( 1, CairoUtil.ColorFromRgb( GraphUtil.HSL_to_RGB( hsl_end   ) ) );

                //LinearGradientBrush br = new LinearGradientBrush( , , 90, false);

                context.Rectangle(i + 2, 2, 1, this.Allocation.Height - 4 );
                context.Pattern = gradient;

                context.Fill();

            }

            context.Stroke();
            ((IDisposable) context).Dispose ();
        }
예제 #18
0
        /// <summary>
        /// Draws the marker (circle) inside the box
        /// </summary>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <param name="Unconditional"></param>
        private void DrawMarker(Gdk.Window win, int x, int y, bool Unconditional)                               //	   *****
        {                                                                                                       //	  *  |  *
            if (x < 0)
            {
                x = 0;                                                                                                                  //	 *   |   *
            }
            if (x > this.Allocation.Width - 4)
            {
                x = this.Allocation.Width - 4;                                                                                  //	*    |    *
            }
            if (y < 0)
            {
                y = 0;                                                                                                                  //	*    |    *
            }
            if (y > this.Allocation.Height - 4)
            {
                y = this.Allocation.Height - 4;                                                                                 //	*----X----*
            }
            //	*    |    *
            if (m_iMarker_Y == y && m_iMarker_X == x && !Unconditional)                 //	*    |    *
            {
                return;                                                                 //	 *   |   *
            }
            //	  *  |  *
            ClearMarker(win);                                                                                                                   //	   *****

            m_iMarker_X = x;
            m_iMarker_Y = y;

            //Graphics g = Gtk.DotNet.Graphics.FromDrawable( win );

            //Pen pen;
            GraphUtil.HSL _hsl = GetColor(x, y);                //	The selected color determines the color of the marker drawn over
            //	it (black or white)
            Color color = Color.White;

            if (_hsl.L < (double)200 / 255)
            {
                color = Color.White;                                                                                    //	White marker if selected color is dark
            }
            else if (_hsl.H < (double)26 / 360 || _hsl.H > (double)200 / 360)
            {
                if (_hsl.S > (double)70 / 255)
                {
                    color = Color.White;
                }
                else
                {
                    color = Color.Black;                                                                                //	Else use a black marker for lighter colors
                }
            }
            else
            {
                color = Color.Black;
            }

            Gdk.GC gc = new Gdk.GC(win);
            gc.RgbFgColor = GraphUtil.gdkColorFromWinForms(color);
            win.DrawArc(gc, false, x - 3, y - 3, 10, 10, 0 * 64, 360 * 64);



            //DrawBorder(win);		//	Force the border to be redrawn, just in case the marker has been drawn over it.
        }
예제 #19
0
        /// <summary>
        /// Redraws only the content over the marker
        /// </summary>
        private void ClearMarker(Gdk.Window win)
        {
            //	Determine the area that needs to be redrawn
            Graphics g = Gtk.DotNet.Graphics.FromDrawable(win);
            int      start_x, start_y, end_x, end_y;
            int      red = 0; int green = 0; int blue = 0;

            GraphUtil.HSL hsl_start = new GraphUtil.HSL();
            GraphUtil.HSL hsl_end   = new GraphUtil.HSL();

            //	Find the markers corners
            start_x = m_iMarker_X - 5;
            start_y = m_iMarker_Y - 5;
            end_x   = m_iMarker_X + 5;
            end_y   = m_iMarker_Y + 5;
            //	Adjust the area if part of it hangs outside the content area
            if (start_x < 0)
            {
                start_x = 0;
            }
            if (start_y < 0)
            {
                start_y = 0;
            }
            if (end_x > this.Allocation.Width - 4)
            {
                end_x = this.Allocation.Width - 4;
            }
            if (end_y > this.Allocation.Height - 4)
            {
                end_y = this.Allocation.Height - 4;
            }

            //	Redraw the content based on the current draw style:
            //	The code get's a little messy from here
            switch (m_eDrawStyle)
            {
            //		  S=0,S=1,S=2,S=3.....S=100
            //	L=100
            //	L=99
            //	L=98		Drawstyle
            //	L=97		   Hue
            //	...
            //	L=0
            case eDrawStyle.Hue:

                hsl_start.H = m_hsl.H;  hsl_end.H = m_hsl.H;                            //	Hue is constant
                hsl_start.S = (double)start_x / (this.Allocation.Width - 4);            //	Because we're drawing horizontal lines, s will not change
                hsl_end.S   = (double)end_x / (this.Allocation.Width - 4);              //	from line to line

                for (int i = start_y; i <= end_y; i++)                                  //	For each horizontal line:
                {
                    hsl_start.L = 1.0 - (double)i / (this.Allocation.Height - 4);       //	Brightness (L) WILL change for each horizontal
                    hsl_end.L   = hsl_start.L;                                          //	line drawn

                    LinearGradientBrush br = new LinearGradientBrush(new Rectangle(start_x + 1, i + 2, end_x - start_x + 1, 1), GraphUtil.HSL_to_RGB(hsl_start), GraphUtil.HSL_to_RGB(hsl_end), 0, false);
                    g.FillRectangle(br, new Rectangle(start_x + 2, i + 2, end_x - start_x + 1, 1));
                }

                break;

            //		  H=0,H=1,H=2,H=3.....H=360
            //	L=100
            //	L=99
            //	L=98		Drawstyle
            //	L=97		Saturation
            //	...
            //	L=0
            case eDrawStyle.Saturation:

                hsl_start.S = m_hsl.S;  hsl_end.S = m_hsl.S;                                            //	Saturation is constant
                hsl_start.L = 1.0 - (double)start_y / (this.Allocation.Height - 4);                     //	Because we're drawing vertical lines, L will
                hsl_end.L   = 1.0 - (double)end_y / (this.Allocation.Height - 4);                       //	not change from line to line

                for (int i = start_x; i <= end_x; i++)                                                  //	For each vertical line:
                {
                    hsl_start.H = (double)i / (this.Allocation.Width - 4);                              //	Hue (H) WILL change for each vertical
                    hsl_end.H   = hsl_start.H;                                                          //	line drawn

                    LinearGradientBrush br = new LinearGradientBrush(new Rectangle(i + 2, start_y + 1, 1, end_y - start_y + 2), GraphUtil.HSL_to_RGB(hsl_start), GraphUtil.HSL_to_RGB(hsl_end), 90, false);
                    g.FillRectangle(br, new Rectangle(i + 2, start_y + 2, 1, end_y - start_y + 1));
                }
                break;

            //		  H=0,H=1,H=2,H=3.....H=360
            //	S=100
            //	S=99
            //	S=98		Drawstyle
            //	S=97		Brightness
            //	...
            //	S=0
            case eDrawStyle.Brightness:

                hsl_start.L = m_hsl.L;  hsl_end.L = m_hsl.L;                                            //	Luminance is constant
                hsl_start.S = 1.0 - (double)start_y / (this.Allocation.Height - 4);                     //	Because we're drawing vertical lines, S will
                hsl_end.S   = 1.0 - (double)end_y / (this.Allocation.Height - 4);                       //	not change from line to line

                for (int i = start_x; i <= end_x; i++)                                                  //	For each vertical line:
                {
                    hsl_start.H = (double)i / (this.Allocation.Width - 4);                              //	Hue (H) WILL change for each vertical
                    hsl_end.H   = hsl_start.H;                                                          //	line drawn

                    LinearGradientBrush br = new LinearGradientBrush(new Rectangle(i + 2, start_y + 1, 1, end_y - start_y + 2), GraphUtil.HSL_to_RGB(hsl_start), GraphUtil.HSL_to_RGB(hsl_end), 90, false);
                    g.FillRectangle(br, new Rectangle(i + 2, start_y + 2, 1, end_y - start_y + 1));
                }

                break;

            //		  B=0,B=1,B=2,B=3.....B=100
            //	G=100
            //	G=99
            //	G=98		Drawstyle
            //	G=97		   Red
            //	...
            //	G=0
            case eDrawStyle.Red:

                red = m_rgb.R;                                                                                  //	Red is constant
                int start_b = Round(255 * (double)start_x / (this.Allocation.Width - 4));                       //	Because we're drawing horizontal lines, B
                int end_b   = Round(255 * (double)end_x / (this.Allocation.Width - 4));                         //	will not change from line to line

                for (int i = start_y; i <= end_y; i++)                                                          //	For each horizontal line:
                {
                    green = Round(255 - (255 * (double)i / (this.Allocation.Height - 4)));                      //	green WILL change for each horizontal line drawn

                    LinearGradientBrush br = new LinearGradientBrush(new Rectangle(start_x + 1, i + 2, end_x - start_x + 1, 1), Color.FromArgb(red, green, start_b), Color.FromArgb(red, green, end_b), 0, false);
                    g.FillRectangle(br, new Rectangle(start_x + 2, i + 2, end_x - start_x + 1, 1));
                }

                break;

            //		  B=0,B=1,B=2,B=3.....B=100
            //	R=100
            //	R=99
            //	R=98		Drawstyle
            //	R=97		  Green
            //	...
            //	R=0
            case eDrawStyle.Green:

                green = m_rgb.G;;                                                                                       //	Green is constant
                int start_b2 = Round(255 * (double)start_x / (this.Allocation.Width - 4));                              //	Because we're drawing horizontal lines, B
                int end_b2   = Round(255 * (double)end_x / (this.Allocation.Width - 4));                                //	will not change from line to line

                for (int i = start_y; i <= end_y; i++)                                                                  //	For each horizontal line:
                {
                    red = Round(255 - (255 * (double)i / (this.Allocation.Height - 4)));                                //	red WILL change for each horizontal line drawn

                    LinearGradientBrush br = new LinearGradientBrush(new Rectangle(start_x + 1, i + 2, end_x - start_x + 1, 1), Color.FromArgb(red, green, start_b2), Color.FromArgb(red, green, end_b2), 0, false);
                    g.FillRectangle(br, new Rectangle(start_x + 2, i + 2, end_x - start_x + 1, 1));
                }

                break;

            //		  R=0,R=1,R=2,R=3.....R=100
            //	G=100
            //	G=99
            //	G=98		Drawstyle
            //	G=97		   Blue
            //	...
            //	G=0
            case eDrawStyle.Blue:

                blue = m_rgb.B;;                                                                                //	Blue is constant
                int start_r = Round(255 * (double)start_x / (this.Allocation.Width - 4));                       //	Because we're drawing horizontal lines, R
                int end_r   = Round(255 * (double)end_x / (this.Allocation.Width - 4));                         //	will not change from line to line

                for (int i = start_y; i <= end_y; i++)                                                          //	For each horizontal line:
                {
                    green = Round(255 - (255 * (double)i / (this.Allocation.Height - 4)));                      //	green WILL change for each horizontal line drawn

                    LinearGradientBrush br = new LinearGradientBrush(new Rectangle(start_x + 1, i + 2, end_x - start_x + 1, 1), Color.FromArgb(start_r, green, blue), Color.FromArgb(end_r, green, blue), 0, false);
                    g.FillRectangle(br, new Rectangle(start_x + 2, i + 2, end_x - start_x + 1, 1));
                }

                break;
            }
            g.Dispose();
        }
예제 #20
0
        /// <summary>
        /// Redraws only the content over the marker
        /// </summary>
        private void ClearMarker( Gdk.Window win )
        {
            //	Determine the area that needs to be redrawn
            Graphics g = Gtk.DotNet.Graphics.FromDrawable( win );
            int start_x, start_y, end_x, end_y;
            int red = 0; int green = 0; int blue = 0;
            GraphUtil.HSL hsl_start = new GraphUtil.HSL();
            GraphUtil.HSL hsl_end   = new GraphUtil.HSL();

            //	Find the markers corners
            start_x = m_iMarker_X - 5;
            start_y = m_iMarker_Y - 5;
            end_x = m_iMarker_X + 5;
            end_y = m_iMarker_Y + 5;
            //	Adjust the area if part of it hangs outside the content area
            if ( start_x < 0 ) start_x = 0;
            if ( start_y < 0 ) start_y = 0;
            if ( end_x > this.Allocation.Width - 4 ) end_x = this.Allocation.Width - 4;
            if ( end_y > this.Allocation.Height - 4 ) end_y = this.Allocation.Height - 4;

            //	Redraw the content based on the current draw style:
            //	The code get's a little messy from here
            switch (m_eDrawStyle)
            {
                    //		  S=0,S=1,S=2,S=3.....S=100
                    //	L=100
                    //	L=99
                    //	L=98		Drawstyle
                    //	L=97		   Hue
                    //	...
                    //	L=0
                case eDrawStyle.Hue :

                    hsl_start.H = m_hsl.H;	hsl_end.H = m_hsl.H;	//	Hue is constant
                    hsl_start.S = (double)start_x/(this.Allocation.Width - 4);	//	Because we're drawing horizontal lines, s will not change
                    hsl_end.S = (double)end_x/(this.Allocation.Width - 4);		//	from line to line

                    for ( int i = start_y; i <= end_y; i++ )		//	For each horizontal line:
                    {
                        hsl_start.L = 1.0 - (double)i/(this.Allocation.Height - 4);	//	Brightness (L) WILL change for each horizontal
                        hsl_end.L = hsl_start.L;							//	line drawn

                        LinearGradientBrush br = new LinearGradientBrush(new Rectangle(start_x + 1,i + 2, end_x - start_x + 1, 1), GraphUtil.HSL_to_RGB(hsl_start), GraphUtil.HSL_to_RGB(hsl_end), 0, false);
                        g.FillRectangle(br,new Rectangle(start_x + 2,i + 2, end_x - start_x + 1 , 1));
                    }

                    break;
                    //		  H=0,H=1,H=2,H=3.....H=360
                    //	L=100
                    //	L=99
                    //	L=98		Drawstyle
                    //	L=97		Saturation
                    //	...
                    //	L=0
                case eDrawStyle.Saturation :

                    hsl_start.S = m_hsl.S;	hsl_end.S = m_hsl.S;			//	Saturation is constant
                    hsl_start.L = 1.0 - (double)start_y/(this.Allocation.Height - 4);	//	Because we're drawing vertical lines, L will
                    hsl_end.L = 1.0 - (double)end_y/(this.Allocation.Height - 4);		//	not change from line to line

                    for ( int i = start_x; i <= end_x; i++ )				//	For each vertical line:
                    {
                        hsl_start.H = (double)i/(this.Allocation.Width - 4);			//	Hue (H) WILL change for each vertical
                        hsl_end.H = hsl_start.H;							//	line drawn

                        LinearGradientBrush br = new LinearGradientBrush(new Rectangle(i + 2,start_y + 1, 1, end_y - start_y + 2), GraphUtil.HSL_to_RGB(hsl_start), GraphUtil.HSL_to_RGB(hsl_end), 90, false);
                        g.FillRectangle(br,new Rectangle(i + 2, start_y + 2, 1, end_y - start_y + 1));
                    }
                    break;
                    //		  H=0,H=1,H=2,H=3.....H=360
                    //	S=100
                    //	S=99
                    //	S=98		Drawstyle
                    //	S=97		Brightness
                    //	...
                    //	S=0
                case eDrawStyle.Brightness :

                    hsl_start.L = m_hsl.L;	hsl_end.L = m_hsl.L;			//	Luminance is constant
                    hsl_start.S = 1.0 - (double)start_y/(this.Allocation.Height - 4);	//	Because we're drawing vertical lines, S will
                    hsl_end.S = 1.0 - (double)end_y/(this.Allocation.Height - 4);		//	not change from line to line

                    for ( int i = start_x; i <= end_x; i++ )				//	For each vertical line:
                    {
                        hsl_start.H = (double)i/(this.Allocation.Width - 4);			//	Hue (H) WILL change for each vertical
                        hsl_end.H = hsl_start.H;							//	line drawn

                        LinearGradientBrush br = new LinearGradientBrush(new Rectangle(i + 2,start_y + 1, 1, end_y - start_y + 2), GraphUtil.HSL_to_RGB(hsl_start), GraphUtil.HSL_to_RGB(hsl_end), 90, false);
                        g.FillRectangle(br,new Rectangle(i + 2, start_y + 2, 1, end_y - start_y + 1));
                    }

                    break;
                    //		  B=0,B=1,B=2,B=3.....B=100
                    //	G=100
                    //	G=99
                    //	G=98		Drawstyle
                    //	G=97		   Red
                    //	...
                    //	G=0
                case eDrawStyle.Red :

                    red = m_rgb.R;													//	Red is constant
                    int start_b = Round(255 * (double)start_x/(this.Allocation.Width - 4));	//	Because we're drawing horizontal lines, B
                    int end_b = Round(255 * (double)end_x/(this.Allocation.Width - 4));		//	will not change from line to line

                    for ( int i = start_y; i <= end_y; i++ )						//	For each horizontal line:
                    {
                        green = Round(255 - (255 * (double)i/(this.Allocation.Height - 4)));	//	green WILL change for each horizontal line drawn

                        LinearGradientBrush br = new LinearGradientBrush(new Rectangle(start_x + 1,i + 2, end_x - start_x + 1, 1), Color.FromArgb(red, green, start_b), Color.FromArgb(red, green, end_b), 0, false);
                        g.FillRectangle(br,new Rectangle(start_x + 2,i + 2, end_x - start_x + 1 , 1));
                    }

                    break;
                    //		  B=0,B=1,B=2,B=3.....B=100
                    //	R=100
                    //	R=99
                    //	R=98		Drawstyle
                    //	R=97		  Green
                    //	...
                    //	R=0
                case eDrawStyle.Green :

                    green = m_rgb.G;;												//	Green is constant
                    int start_b2 = Round(255 * (double)start_x/(this.Allocation.Width - 4));	//	Because we're drawing horizontal lines, B
                    int end_b2 = Round(255 * (double)end_x/(this.Allocation.Width - 4));		//	will not change from line to line

                    for ( int i = start_y; i <= end_y; i++ )						//	For each horizontal line:
                    {
                        red = Round(255 - (255 * (double)i/(this.Allocation.Height - 4)));		//	red WILL change for each horizontal line drawn

                        LinearGradientBrush br = new LinearGradientBrush(new Rectangle(start_x + 1,i + 2, end_x - start_x + 1, 1), Color.FromArgb(red, green, start_b2), Color.FromArgb(red, green, end_b2), 0, false);
                        g.FillRectangle(br,new Rectangle(start_x + 2,i + 2, end_x - start_x + 1 , 1));
                    }

                    break;
                    //		  R=0,R=1,R=2,R=3.....R=100
                    //	G=100
                    //	G=99
                    //	G=98		Drawstyle
                    //	G=97		   Blue
                    //	...
                    //	G=0
                case eDrawStyle.Blue :

                    blue = m_rgb.B;;												//	Blue is constant
                    int start_r = Round(255 * (double)start_x/(this.Allocation.Width - 4));	//	Because we're drawing horizontal lines, R
                    int end_r = Round(255 * (double)end_x/(this.Allocation.Width - 4));		//	will not change from line to line

                    for ( int i = start_y; i <= end_y; i++ )						//	For each horizontal line:
                    {
                        green = Round(255 - (255 * (double)i/(this.Allocation.Height - 4)));	//	green WILL change for each horizontal line drawn

                        LinearGradientBrush br = new LinearGradientBrush(new Rectangle(start_x + 1,i + 2, end_x - start_x + 1, 1), Color.FromArgb(start_r, green, blue), Color.FromArgb(end_r, green, blue), 0, false);
                        g.FillRectangle(br,new Rectangle(start_x + 2,i + 2, end_x - start_x + 1 , 1));
                    }

                    break;
            }
            g.Dispose();
        }
예제 #21
0
        /// <summary>
        /// Draws the content of the control filling in all color values with the provided Hue value.
        /// </summary>
        private void Draw_Style_Hue(Gdk.Window win)
        {
            Graphics g = Gtk.DotNet.Graphics.FromDrawable(win);

            GraphUtil.HSL hsl_start = new GraphUtil.HSL();
            GraphUtil.HSL hsl_end = new GraphUtil.HSL();
            hsl_start.H = m_hsl.H;
            hsl_end.H = m_hsl.H;
            hsl_start.S = 0.0;
            hsl_end.S = 1.0;

            for ( int i = 0; i < this.Allocation.Height - 4; i++ )				//	For each horizontal line in the control:
            {
                hsl_start.L = 1.0 - (double)i/(this.Allocation.Height - 4);	//	Calculate luminance at this line (Hue and Saturation are constant)
                hsl_end.L = hsl_start.L;

                LinearGradientBrush br = new LinearGradientBrush(new Rectangle(2,2, this.Allocation.Width - 4, 1), GraphUtil.HSL_to_RGB(hsl_start), GraphUtil.HSL_to_RGB(hsl_end), 0, false);
                g.FillRectangle(br,new Rectangle(2,i + 2, this.Allocation.Width - 4, 1));
            }
            g.Dispose();
        }