implement issue #11: Remember color history between sessions

This commit is contained in:
Ronny Dobra committed 2017-06-25 20:15:03 +02:00
1 parent 4dd56a8c3c
commit 657f7594f1
4 files changed
+73 -13

No files matched your search

+24 -5
View File
@@ -123,10 +123,27 @@ namespace ColorPicker {
skeleton_box.margin_bottom = 0;
skeleton_box.pack_start (main_box);
skeleton_box.pack_start (format_box);
var content_box = get_content_area () as Gtk.Box;
content_box.pack_start (skeleton_box);
content_box.pack_start (skeleton_box);
// restore old state
var color_list = color_history.get_color_list ();
if (color_list != null && color_list.size >= 1) {
ext_active_color = (ExtRGBA) color_list.last ();
hex_label.set_markup (ext_active_color.to_uppercase_hex_string ());
color_area.set_color (ext_active_color);
color_area.queue_draw ();
int id = color_format_combobox.get_active ();
update_color_format_combobox_text (format_entry, id);
if (color_list.size >= 2) {
skeleton_box.pack_start (color_history_box);
color_history_box.show_all ();
}
}
var settings = new Settings ("com.github.ronnydo.colorpicker");
var window_x = settings.get_int ("window-x");
@@ -151,6 +168,7 @@ namespace ColorPicker {
mouse_position.cancelled.connect (() => {
color_area.set_color (ext_active_color);
color_area.queue_draw ();
hex_label.set_markup (ext_active_color.to_uppercase_hex_string ());
mouse_position.close ();
this.present ();
});
@@ -167,10 +185,10 @@ namespace ColorPicker {
color_history.add_color (ext_active_color);
var color_list = color_history.get_color_list ();
var c_list = color_history.get_color_list ();
if (color_history_box.get_parent () == null) {
if (color_list != null && color_list.size > 1) {
if (c_list != null && c_list.size >= 2) {
skeleton_box.pack_start (color_history_box);
color_history_box.show_all ();
}
@@ -207,7 +225,8 @@ namespace ColorPicker {
this.present ();
});
// trigger picker on startup
pick_color_button.clicked ();
}
+43 -7
View File
@@ -46,25 +46,62 @@ namespace ColorPicker {
set_size_request (100, 28);
add_events(Gdk.EventMask.BUTTON_PRESS_MASK | Gdk.EventMask.BUTTON_RELEASE_MASK | Gdk.EventMask.ENTER_NOTIFY_MASK);
color_list = new Gee.ArrayList<Gdk.RGBA?> ();
restore_colors ();
border_color.parse (border_color_string);
triangle_color.parse (triangle_color_string);
triangle_color.parse (triangle_color_string);
}
construct {
//get_window ().set_cursor (new Gdk.Cursor (Gdk.CursorType.HAND2));
get_window ().set_cursor (new Gdk.Cursor.for_display (Gdk.Display.get_default (), Gdk.CursorType.HAND2));
get_window ().set_cursor (new Gdk.Cursor.for_display (Gdk.Display.get_default (), Gdk.CursorType.HAND2));
}
private void restore_colors () {
var settings = new Settings ("com.github.ronnydo.colorpicker");
var color_array = settings.get_strv ("color-history");
if (color_array != null) {
// if more colors should be saved as allowed, drop the oldest ones.
if (max_colors < color_array.length) {
int offset = color_array.length - max_colors;
var sliced_array = color_array [offset:color_array.length];
color_array = sliced_array;
}
foreach (var color_value in color_array) {
Gdk.RGBA color = Gdk.RGBA();
color.parse(color_value);
color_list.add (color);
}
selected_color = color_list.size - 1;
}
}
private void store_colors () {
var c_list = get_color_list ();
string[] c_array = new string[c_list.size + 1];
for (int i = 0; i < c_list.size; i++) {
c_array[i] = c_list.get (i).to_string ();
}
var settings = new Settings ("com.github.ronnydo.colorpicker");
settings.set_strv ("color-history", c_array);
}
public void add_color (Gdk.RGBA color) {
if (color_list.size == max_colors) {
if (color_list.size >= max_colors) {
remove_oldest_color ();
}
color_list.add (color);
selected_color = get_color_list ().size - 1;
store_colors ();
selected_color = get_color_list ().size - 1;
}
public void remove_oldest_color () {
color_list.remove_at (0);
store_colors ();
}
public Gee.ArrayList<Gdk.RGBA?> get_color_list () {
@@ -74,7 +111,6 @@ namespace ColorPicker {
/* Widget is asked to draw itself */
public override bool draw (Cairo.Context ctx) {
int width = get_allocated_width (); // better element_width / amount
int height = get_allocated_height ();
@@ -89,7 +125,7 @@ namespace ColorPicker {
ctx.rel_line_to (-1 * width / color_list.size - 1, 0);
ctx.close_path ();
Gdk.cairo_set_source_rgba (ctx, color_list.get(i));
Gdk.cairo_set_source_rgba (ctx, color_list.get (i));
ctx.fill ();
}