Esempio n. 1
0
        /// <summary>Returns the measurements of a ColourWheel that fits in the given width/height/orientation</summary>
        public static Measurements Measure(int width, int height, EParts parts, int slider_width, bool vertical)
        {
            bool drawv        = (parts & EParts.VSlider) != 0;
            bool drawa        = (parts & EParts.ASlider) != 0;
            int  slider_space = 0 + (drawv ? slider_width * 3 / 2 : 0) + (drawa ? slider_width * 3 / 2 : 0);

            int w   = Math.Max(0, width - (vertical ? 0 : slider_space));
            int h   = Math.Max(0, height - (vertical ? slider_space : 0));
            int min = Math.Min(w, h);

            var meas = new Measurements();

            meas.Width  = min + (vertical ? 0 : slider_space);
            meas.Height = min + (vertical ? slider_space : 0);

            meas.Radius = min * 0.5f;
            meas.Centre = new Point((int)Math.Ceiling(meas.Radius), (int)Math.Ceiling(meas.Radius));
            meas.Wheel  = new Rectangle(0, 0, meas.Centre.X * 2, meas.Centre.Y * 2);

            using (var bm = new Bitmap(1, 1))
                using (var gfx = Graphics.FromImage(bm))
                {
                    gfx.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
                    Func <Graphics, int, int, string, Rectangle> LabelBounds = (g, x, y, label) =>
                    {
                        var sz = g.MeasureString(label, SystemFonts.DefaultFont, slider_width / 2);
                        return(new Rectangle(
                                   (int)(x + (vertical ? 0f : (slider_width - sz.Width) * 0.5f)),
                                   (int)(y + (vertical ? (slider_width - sz.Height) * 0.5f : 0f)),
                                   (int)Math.Ceiling(sz.Width),
                                   (int)Math.Ceiling(sz.Height)));
                    };
                    Func <int, int, Rectangle, Rectangle> SliderBounds = (x, y, label_bounds) =>
                    {
                        return(new Rectangle(
                                   x + (vertical ? label_bounds.Width + 2 : 0),
                                   y + (vertical ? 0 : label_bounds.Height + 2),
                                   vertical ? meas.Width - label_bounds.Width - 2 : slider_width,
                                   vertical ? slider_width : meas.Height - label_bounds.Height - 2));
                    };

                    var ofs = (vertical ? meas.Wheel.Width : meas.Wheel.Height) + slider_width / 5;
                    if ((parts & EParts.VSlider) != 0)
                    {
                        meas.VLabel  = LabelBounds(gfx, vertical ? 0 : ofs, vertical ? ofs : 0, ValueLabel);
                        meas.VSlider = SliderBounds(vertical ? 0 : ofs, vertical ? ofs : 0, meas.VLabel);
                        ofs         += slider_width * 3 / 2;
                    }
                    if ((parts & EParts.ASlider) != 0)
                    {
                        meas.ALabel  = LabelBounds(gfx, vertical ? 0 : ofs, vertical ? ofs : 0, AlphaLabel);
                        meas.ASlider = SliderBounds(vertical ? 0 : ofs, vertical ? ofs : 0, meas.ALabel);
                    }
                    return(meas);
                }
        }
Esempio n. 2
0
        protected override void OnMouseUp(MouseEventArgs e)
        {
            base.OnMouseUp(e);
            Capture = false;
            switch (m_selected_part)
            {
            case EParts.Wheel:   SelectHueAndSaturation(e.X, e.Y); break;

            case EParts.VSlider: SelectBrightness(e.X, e.Y); break;

            case EParts.ASlider: SelectAlpha(e.X, e.Y); break;
            }
            RaiseColourSelection(e);
            m_selected_part = EParts.None;
        }
Esempio n. 3
0
        protected override void OnMouseDown(MouseEventArgs e)
        {
            base.OnMouseDown(e);
            if ((m_selected_part = PartHitTest(e.X, e.Y)) == EParts.None)
            {
                return;
            }
            RaiseColourSelection(e);
            switch (m_selected_part)
            {
            case EParts.Wheel:   SelectHueAndSaturation(e.X, e.Y); break;

            case EParts.VSlider: SelectBrightness(e.X, e.Y); break;

            case EParts.ASlider: SelectAlpha(e.X, e.Y); break;
            }
            Capture = true;
        }
Esempio n. 4
0
        protected override void OnMouseUp(MouseButtonEventArgs e)
        {
            base.OnMouseUp(e);

            var pt = e.GetPosition(this);

            ReleaseMouseCapture();
            switch (m_selected_part)
            {
            case EParts.Wheel: SelectHueAndSaturation(pt); break;

            case EParts.VSlider: SelectBrightness(pt); break;

            case EParts.ASlider: SelectAlpha(pt); break;
            }

            ColourSelection?.Invoke(this, e);
            m_selected_part = EParts.None;
        }
Esempio n. 5
0
        protected override void OnMouseDown(MouseButtonEventArgs e)
        {
            base.OnMouseDown(e);

            var pt = e.GetPosition(this);

            m_selected_part = PartHitTest(pt.X, pt.Y);
            if (m_selected_part == EParts.None)
            {
                return;
            }

            ColourSelection?.Invoke(this, e);
            switch (m_selected_part)
            {
            case EParts.Wheel: SelectHueAndSaturation(pt); break;

            case EParts.VSlider: SelectBrightness(pt); break;

            case EParts.ASlider: SelectAlpha(pt); break;
            }

            CaptureMouse();
        }