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(); }
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); }
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); }
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); }
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); }
public static string ToEntryId(this GradientEntry entry) { switch (entry) { default: throw new ArgumentOutOfRangeException(nameof(entry), entry, null); } }
private GradientEntry ReplaceEntry(GradientEntry oldEntry, Color color) { var entry = new GradientEntry(oldEntry.Position, color); gradient.Remove(oldEntry); gradient.Add(entry); OnChange(); return(entry); }
private GradientEntry CreateEntry(float position) { position = MathTools.ClampNormal(position); var entry = new GradientEntry(position, gradient.Evaluate(position)); gradient.Add(entry); OnChange(); return(entry); }
private void UpdateEntryPosition(float position) { if (selectedEntry == null) { return; } position = MathTools.ClampNormal(position); selectedEntry = ReplaceEntry(selectedEntry, position); }
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); }
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); }
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)); }
private void RemoveEntry(GradientEntry entry) { gradient.Remove(entry); ClearState(); OnChange(); }
private void ClearState() { hoveredEntry = null; selectedEntry = null; movingEntry = false; }