コード例 #1
0
        private void PickColor()
        {
            if (selectedEntry == null)
            {
                return;
            }

            var dlg = new ColorSelectionDialog("Pick a color");

            dlg.ColorSelection.HasOpacityControl = true;
            dlg.ColorSelection.CurrentColor      = new Gdk.Color(selectedEntry.Color.R, selectedEntry.Color.G, selectedEntry.Color.B);
            dlg.ColorSelection.CurrentAlpha      = ToGdkColor(selectedEntry.Color.A);
            dlg.Modal = true;

            dlg.Response += delegate(object o, ResponseArgs args)
            {
                if (args.ResponseId == ResponseType.Ok)
                {
                    var newColor = new Color(
                        FromGdkColor(dlg.ColorSelection.CurrentColor.Red),
                        FromGdkColor(dlg.ColorSelection.CurrentColor.Green),
                        FromGdkColor(dlg.ColorSelection.CurrentColor.Blue),
                        FromGdkColor(dlg.ColorSelection.CurrentAlpha));

                    selectedEntry = ReplaceEntry(selectedEntry, newColor);
                }
            };

            dlg.Run();
            dlg.Destroy();
        }
コード例 #2
0
        public ApplicationSprite()
        {
            var s = new Sprite().AttachTo(this);
            var g = s.graphics;

            var fill = new LinearGradient();

            var g1 = new GradientEntry {
                color = Color1, ratio = 0.00, alpha = 0
            };
            var g2 = new GradientEntry {
                color = Color2, ratio = 0.90, alpha = 1
            };

            fill.entries = new[] { g1, g2 };
            // rotation?
            fill.angle = 45;

            // Draw a box and fill it with the LinearGradient.
            g.moveTo(0, 0);

            fill.begin(g, new Rectangle {
                width = DefaultWidth, height = DefaultHeight
            }, new Point());

            g.lineTo(DefaultWidth, 0);
            g.lineTo(DefaultWidth, DefaultHeight);
            g.lineTo(0, DefaultHeight);
            g.lineTo(0, 0);

            fill.end(g);
        }
コード例 #3
0
        private bool RightMousePress(Vector2 position)
        {
            var m = new Menu();

            var entry = GetEntryAt(position);

            if (entry != null)
            {
                selectedEntry = entry;
                QueueDraw();
            }

            if (selectedEntry != null)
            {
                var currentEntry = selectedEntry;

                AddMenuEntry(m, "Choose Color...", Resources.IconColorWheel, delegate { PickColor(); });
                m.Add(new SeparatorMenuItem());
                AddMenuEntry(m, "Delete", Resources.IconDelete, delegate { RemoveEntry(currentEntry); });
            }

            AddMenuEntry(m, "Clear All", Resources.IconCancel, delegate { ClearCurve(); });

            m.ShowAll();
            m.Popup();

            return(true);
        }
コード例 #4
0
        private bool LeftMousePress(Vector2 position, bool doubleClick)
        {
            var   area  = Area;
            float value = FromScreen(position.X, area);

            if (doubleClick && selectedEntry != null)
            {
                PickColor();
                movingEntry = false;
                return(true);
            }

            if (!movingEntry)
            {
                selectedEntry = GetEntryAt(position);
                QueueDraw();

                if (selectedEntry != null)
                {
                    movingEntry = true;
                }
                else
                {
                    selectedEntry = CreateEntry(value);
                    movingEntry   = true;
                }
            }

            //if (movingEntry)
            //{
            //    UpdateEntryPosition(value);
            //}

            return(true);
        }
コード例 #5
0
        protected override bool OnMotionNotifyEvent(EventMotion evnt)
        {
            if (gradient == null)
            {
                return(true);
            }

            var   area     = Area;
            var   mousePos = new Vector2((float)evnt.X, (float)evnt.Y);
            float value    = FromScreen(mousePos.X, area);

            if (movingEntry)
            {
                UpdateEntryPosition(value);
            }
            else
            {
                var oldEntry = hoveredEntry;
                hoveredEntry = GetEntryAt(mousePos);

                if (hoveredEntry != oldEntry)
                {
                    QueueDraw();
                }
            }

            return(true);
        }
コード例 #6
0
ファイル: NameEnums.cs プロジェクト: Haruma-K/uPalette
 public static string ToEntryId(this GradientEntry entry)
 {
     switch (entry)
     {
     default:
         throw new ArgumentOutOfRangeException(nameof(entry), entry, null);
     }
 }
コード例 #7
0
        private GradientEntry ReplaceEntry(GradientEntry oldEntry, Color color)
        {
            var entry = new GradientEntry(oldEntry.Position, color);

            gradient.Remove(oldEntry);
            gradient.Add(entry);
            OnChange();
            return(entry);
        }
コード例 #8
0
        private GradientEntry CreateEntry(float position)
        {
            position = MathTools.ClampNormal(position);
            var entry = new GradientEntry(position, gradient.Evaluate(position));

            gradient.Add(entry);
            OnChange();
            return(entry);
        }
コード例 #9
0
        private void UpdateEntryPosition(float position)
        {
            if (selectedEntry == null)
            {
                return;
            }
            position = MathTools.ClampNormal(position);

            selectedEntry = ReplaceEntry(selectedEntry, position);
        }
コード例 #10
0
        private GradientEntry ReplaceEntry(GradientEntry oldEntry, float position)
        {
            position = MathTools.ClampNormal(position);

            var entry = new GradientEntry(position, oldEntry.Color);

            gradient.Remove(oldEntry);
            gradient.Add(entry);
            OnChange();
            return(entry);
        }
コード例 #11
0
        private static GradientEntry[] ReverseX(GradientEntry[] orig)
        {
            var retVal = new GradientEntry[orig.Length];

            int down = orig.Length - 1;

            for (int up = 0; up < orig.Length; up++)
            {
                retVal[up] = new GradientEntry(orig[up].Distance, orig[down].Percent);
                down--;
            }

            return(retVal);
        }
コード例 #12
0
        public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
        {
            if (value is string)
            {
                var      gradient = new Gradient();
                string[] entries  = ((string)value).Split(new[] { ListSeparator }, StringSplitOptions.None);
                foreach (var entryText in entries)
                {
                    var p = entryText.Split(new[] { EntrySeparator });

                    if (p.Length == 2)
                    {
                        var position = Convert.ToSingle(p[0], culture);
                        var color    = (Color)TypeDescriptor.GetConverter(typeof(Color)).ConvertFromString(context, culture, p[1]);
                        var entry    = new GradientEntry(position, color);
                        gradient.Add(entry);
                    }
                }

                return(gradient);
            }

            return(base.ConvertFrom(context, culture, value));
        }
コード例 #13
0
 private void RemoveEntry(GradientEntry entry)
 {
     gradient.Remove(entry);
     ClearState();
     OnChange();
 }
コード例 #14
0
 private void ClearState()
 {
     hoveredEntry  = null;
     selectedEntry = null;
     movingEntry   = false;
 }