implement issue #11: Remember color history between sessions
This commit is contained in:
1 parent
4dd56a8c3c
commit
657f7594f1
4 files changed
+73
-13
No files matched your search
@@ -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 ();
|
||||
}
|
||||
|
||||
@@ -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 ();
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user