diff --git a/.dimmer_all_monitors.txt b/.dimmer_all_monitors.txt new file mode 100644 index 0000000..56a6051 --- /dev/null +++ b/.dimmer_all_monitors.txt @@ -0,0 +1 @@ +1 \ No newline at end of file diff --git a/data/Application.css b/data/Application.css new file mode 100644 index 0000000..07817f8 --- /dev/null +++ b/data/Application.css @@ -0,0 +1,46 @@ +window { + background-image:linear-gradient(#eef0f2, #a7b3c1); +} +.flat { + background-color: #eef0f2; +} +.knob-socket-graphic { + background-image:linear-gradient(alpha(#56626f, 0.5), alpha(#aebac6, 0.5), alpha(#fff, 0.5)); + border-radius: 50%; + margin-left: -2px; + margin-top: -2px; + margin-right: 2px; + margin-bottom: 2px +} +.knob-cover-graphic { + background-image:linear-gradient(#e6eaed, #abb8c4); + border: 1px solid #56626f; + box-shadow: inset 0 1px 0 alpha(#fff, 0.7), inset 0 -1px 0 alpha(#56626f, 0.9), + 0 2px 4px alpha(#000, 0.5), 0 -3px 4px alpha(#fff, 1.0); + border-radius: 50%; + margin: 6px +} +.knob-meter-graphic { + background-image:url("resource://com/github/watsonprojects/sundown/images/knob_meter.svg"); + background-size: 132px; + background-position: center center; +} +.knob-meter-label { + font-size: 0.8rem; + margin-bottom: 4px; + color: #677892; + font-weight: 700; + text-shadow: 0 1px alpha(#fff, 0.5); +} +.knob-rim { + border: 1px solid shade(@accent_color, 1.3); + box-shadow: 0 0 4px @accent_color, 0 0 0 1px alpha(@accent_color, 0.2), inset 0 0 1px 1px @accent_color; + border-radius: 50%; + margin: 6px; + opacity: 1; + transition: opacity 1s ease; +} + +.knob-rim-hidden { + opacity: 0; +} diff --git a/data/com.github.watsonprojects.sundown.gresource.xml b/data/com.github.watsonprojects.sundown.gresource.xml new file mode 100644 index 0000000..d7c6a16 --- /dev/null +++ b/data/com.github.watsonprojects.sundown.gresource.xml @@ -0,0 +1,9 @@ + + + + Application.css + + + images/knob_meter.svg + + diff --git a/data/com.github.watsonprojects.sundown.gschema.xml b/data/com.github.watsonprojects.sundown.gschema.xml new file mode 100644 index 0000000..eca2fc0 --- /dev/null +++ b/data/com.github.watsonprojects.sundown.gschema.xml @@ -0,0 +1,27 @@ + + + + + + 0.54666666666666686 + Brightness settings of all monitors + + + 0.54666666666666686 + Brightness settings for specific monitor + + + 0.54666666666666686 + Brightness settings for specific monitor + + + 0.54666666666666686 + Brightness settings for specific monitor + + + 0.54666666666666686 + Brightness settings for specific monitor + + + diff --git a/data/images/knob_meter.svg b/data/images/knob_meter.svg new file mode 100644 index 0000000..0f3a6c0 --- /dev/null +++ b/data/images/knob_meter.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/meson.build b/data/meson.build index c41d03a..b4999f6 100644 --- a/data/meson.build +++ b/data/meson.build @@ -30,3 +30,9 @@ i18n.merge_file ( install: true, install_dir: join_paths (get_option ('datadir'), 'metainfo') ) + +install_data( + 'com.github.watsonprojects.sundown.gschema.xml', + rename: meson.project_name() + '.gschema.xml', + install_dir: get_option('datadir') / 'glib-2.0' / 'schemas' +) diff --git a/meson.build b/meson.build index 5f7a424..9004825 100644 --- a/meson.build +++ b/meson.build @@ -8,6 +8,9 @@ project ( # Translation module i18n = import ('i18n') +# GNOME module +gnome = import ('gnome') + # Project arguments add_project_arguments ( '-DGETTEXT_PACKAGE="@0@"'.format (meson.project_name ()), @@ -23,12 +26,23 @@ add_project_arguments( # Listing dependencies dependencies = [ dependency('gtk+-3.0'), - dependency('gee-0.8') + dependency('gee-0.8'), + meson.get_compiler ('c').find_library ('m', required : false) ] +# Compiling resources +asresources = gnome.compile_resources ( + 'as-resources', + 'data/' + meson.project_name () + '.gresource.xml', + source_dir: 'data', + c_name: 'as' +) + # Executable executable ( meson.project_name (), + asresources, + 'src/Knob.vala', 'src/Sundown.vala', dependencies: dependencies, install: true @@ -37,4 +51,4 @@ executable ( subdir ('data') subdir ('po') -meson.add_install_script ('meson/post_install.py') \ No newline at end of file +meson.add_install_script ('meson/post_install.py') diff --git a/src/Knob.vala b/src/Knob.vala new file mode 100644 index 0000000..75afaf3 --- /dev/null +++ b/src/Knob.vala @@ -0,0 +1,202 @@ +/*- + * Copyright (c) 2021-2022 Subhadeep Jasu + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * Authored by: Subhadeep Jasu + */ + +public class Knob : Gtk.Overlay { + public string tooltip; + public bool dragging; + private double dragging_direction_x; + private double dragging_direction_y; + bool locked; + + public double value = 27; + public int drag_force = 0; + protected Gtk.Box knob_socket_graphic; + protected Gtk.Box knob_cover; + protected Gtk.Box knob_background; + protected Gtk.Box knob_rim; + protected Gtk.Fixed fixed; + protected int center; + + private Gtk.Label knob_label_dark; + private Gtk.Label knob_label_light; + + protected const double RADIUS = 20; + + public signal void change_value (double value); + + public Knob () { + center = 42; + knob_socket_graphic = new Gtk.Box (Gtk.Orientation.HORIZONTAL, 0); + knob_socket_graphic.width_request = 20; + knob_socket_graphic.height_request = 20; + knob_socket_graphic.get_style_context ().add_class ("knob-socket-graphic"); + + knob_cover = new Gtk.Box (Gtk.Orientation.HORIZONTAL, 0); + knob_cover.get_style_context ().add_class ("knob-cover-graphic"); + knob_cover.halign = Gtk.Align.START; + knob_cover.valign = Gtk.Align.START; + knob_cover.margin = 14; + knob_cover.width_request = 100; + knob_cover.height_request = 100; + + fixed = new Gtk.Fixed (); + fixed.halign = Gtk.Align.START; + fixed.valign = Gtk.Align.START; + fixed.width_request = 100; + fixed.height_request = 100; + fixed.margin = 14; + double px = RADIUS * GLib.Math.cos (value / Math.PI); + double py = RADIUS * GLib.Math.sin (value / Math.PI); + fixed.put (knob_socket_graphic, (int)(px + center), (int)(py + center)); + + knob_background = new Gtk.Box (Gtk.Orientation.HORIZONTAL, 0); + knob_background.get_style_context ().add_class ("knob-meter-graphic"); + knob_background.halign = Gtk.Align.START; + knob_background.valign = Gtk.Align.START; + knob_background.width_request = 128; + knob_background.height_request = 128; + + knob_label_dark = new Gtk.Label (_("DARK")); + knob_label_dark.halign = Gtk.Align.START; + knob_label_dark.valign = Gtk.Align.END; + knob_label_dark.get_style_context ().add_class ("knob-meter-label"); + + knob_label_light = new Gtk.Label (_("LIGHT")); + knob_label_light.halign = Gtk.Align.END; + knob_label_light.valign = Gtk.Align.END; + knob_label_light.get_style_context ().add_class ("knob-meter-label"); + + knob_background.pack_start (knob_label_dark, true); + knob_background.pack_end (knob_label_light, true); + + knob_rim = new Gtk.Box (Gtk.Orientation.HORIZONTAL, 0); + knob_rim.get_style_context ().add_class ("knob-rim"); + knob_rim.halign = Gtk.Align.START; + knob_rim.valign = Gtk.Align.START; + knob_rim.margin = 14; + knob_rim.width_request = 100; + knob_rim.height_request = 100; + + var event_box = new Gtk.EventBox (); + event_box.event.connect (handle_event); + event_box.hexpand = true; + event_box.vexpand = true; + + add_overlay (knob_background); + add_overlay (knob_cover); + add_overlay (fixed); + add_overlay (knob_rim); + add_overlay (event_box); + + this.hexpand = false; + this.vexpand = true; + this.width_request = 128; + this.height_request = 128; + } + + public void rotate_dial (double value) { + double px = RADIUS * GLib.Math.cos (value / Math.PI); + double py = RADIUS * GLib.Math.sin (value / Math.PI); + fixed.move (knob_socket_graphic, (int)(px + center), (int)(py + center)); + change_value ((value - 27.0) / 15.0); + } + + public void set_value (double _value) { + value = 15 * _value + 27; + double px = RADIUS * GLib.Math.cos (value / Math.PI); + double py = RADIUS * GLib.Math.sin (value / Math.PI); + if (value == 35.2) { + knob_rim.get_style_context ().add_class ("knob-rim-hidden"); + } + fixed.move (knob_socket_graphic, (int)(px + center), (int)(py + center)); + } + + public bool handle_event (Gdk.Event event) { + // if (event.type == Gdk.EventType.ENTER_NOTIFY) { + // this.get_toplevel.set_cursor (Gdk.CursorType.HAND1)); + // } + // if (event.type == Gdk.EventType.LEAVE_NOTIFY) { + // fixed.set_cursor (Gdk.CursorType.ARROW); + // } + if (event.type == Gdk.EventType.BUTTON_PRESS) { + dragging = true; + drag_force = 0; + } + if (event.type == Gdk.EventType.BUTTON_RELEASE) { + dragging = false; + dragging_direction_x = 0; + dragging_direction_y = 0; + } + + if (event.type == Gdk.EventType.MOTION_NOTIFY && dragging) { + if (dragging_direction_x == 0) { + dragging_direction_x = event.motion.x; + } + if (dragging_direction_y == 0) { + dragging_direction_y = event.motion.y; + } + double delta = 0.0; + if (dragging_direction_x > event.motion.x || event.motion.x_root == 0) { + delta -= 0.1 * (dragging_direction_x - event.motion.x); + if (locked) { + drag_force += 1; + } + dragging_direction_x = event.motion.x; + } else { + delta += 0.1 * (event.motion.x - dragging_direction_x); + if (locked) { + drag_force -= 1; + } + dragging_direction_x = event.motion.x; + } + if (dragging_direction_y > event.motion.y || event.motion.y_root == 0) { + delta += 0.1 * (dragging_direction_y - event.motion.y); + if (locked) { + drag_force += 1; + } + dragging_direction_y = event.motion.y; + } else { + delta -= 0.1 * (event.motion.y - dragging_direction_y); + if (locked) { + drag_force -= 1; + } + dragging_direction_y = event.motion.y; + } + value += delta; + if (value < 27) { + value = 27; + } + if (value > 42) { + value = 42; + } + if (value > 33.5 && value < 36.5 && !locked) { + value = 35.2; + locked = true; + knob_rim.get_style_context ().add_class ("knob-rim-hidden"); + } else { + knob_rim.get_style_context ().remove_class ("knob-rim-hidden"); + } + if (drag_force < -1 || drag_force > 1) { + locked = false; + } + rotate_dial (value); + } + return false; + } +} diff --git a/src/Sundown.vala b/src/Sundown.vala index ded353f..83f977d 100644 --- a/src/Sundown.vala +++ b/src/Sundown.vala @@ -6,13 +6,21 @@ using Gtk; using Gee; +GLib.Settings settings; public class Sundown : Gtk.Application { - public static Gtk.Scale slider; - public static Gtk.Scale slider1; - public static Gtk.Scale slider2; - public static Gtk.Scale slider3; - public static Gtk.Scale slider4; + Gtk.CssProvider css_provider; + // public static Gtk.Scale slider; + // public static Gtk.Scale slider1; + // public static Gtk.Scale slider2; + // public static Gtk.Scale slider3; + // public static Gtk.Scale slider4; + + public static Knob knob; + public static Knob knob1; + public static Knob knob2; + public static Knob knob3; + public static Knob knob4; public static Label label1; public static Label label2; @@ -32,19 +40,40 @@ public class Sundown : Gtk.Application { } protected override void activate () { + settings = new GLib.Settings ("com.github.watsonprojects.sundown"); + init_theme (); + Gtk.Settings gsettings = Gtk.Settings.get_default (); + gsettings.gtk_application_prefer_dark_theme = false; + var header_bar = new Gtk.HeaderBar (); + header_bar.set_show_close_button (true); + header_bar.get_style_context ().add_class (Gtk.STYLE_CLASS_FLAT); + header_bar.get_style_context ().add_class ("default-decoration"); + header_bar.set_title ("Sundown"); + if (css_provider == null) { + css_provider = new Gtk.CssProvider (); + css_provider.load_from_resource ("/com/github/watsonprojects/sundown/Application.css"); + // CSS Provider + Gtk.StyleContext.add_provider_for_screen ( + Gdk.Screen.get_default (), + css_provider, + Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION + ); + } Window window = new Gtk.ApplicationWindow (this); - window.title = "Sundown"; + window.set_titlebar (header_bar); window.window_position = WindowPosition.CENTER; window.set_decorated (true); window.set_deletable (true); window.set_resizable (false); window.destroy.connect (Gtk.main_quit); window.border_width = 20; + window.width_request = 268; + window.get_style_context ().add_class ("rounded"); var vbox_main = new Box (Orientation.VERTICAL, 0); vbox_main.homogeneous = false; - var vbox_ind = new Box (Orientation.VERTICAL, 0); + var vbox_ind = new Box (Orientation.HORIZONTAL, 0); vbox_ind.homogeneous = false; string current_brightness, /*currentGm,*/ names; @@ -69,9 +98,10 @@ public class Sundown : Gtk.Application { for (int i = 0; i < temp_lines.length; i++) if (temp_lines[i] != "") lines.add (temp_lines[i]); - //this is my main slider - slider = new Scale.with_range (Orientation.HORIZONTAL, 40, 150, 1); - slider.set_size_request (380, 50); + //this is my main knob + // slider = new Scale.with_range (Orientation.HORIZONTAL, 40, 150, 1); + // slider.set_size_request (380, 50); + knob = new Knob (); if (lines.size > 1) { var hbox_all = new Box (Orientation.HORIZONTAL, 0); @@ -85,14 +115,16 @@ public class Sundown : Gtk.Application { switcher.active = true; switcher.state_flags_changed.connect (() => { if (switcher.active == true) { - slider.visible = true; + // slider.visible = true; + knob.visible = true; vbox_ind.visible = false; //initialization set_value_for_all (); } else { - slider.visible = false; + // slider.visible = false; + knob.visible = false; vbox_ind.visible = true; //initialization @@ -116,136 +148,129 @@ public class Sundown : Gtk.Application { for (int i = 0; i < lines.size; i++) monitors[i] = lines.get (i); if (lines.size > 1) { - //slider1 + //knob1 label1 = new Label (monitors[0]); label1.halign = Align.START; - slider1 = new Scale.with_range (Orientation.HORIZONTAL, 40, 150, 1); - slider1.set_size_request (380, 30); - slider1.adjustment.value_changed.connect (() => { - try { - string edited = (slider1.adjustment.value / 100).to_string (); - - //if ((slider1.adjustment.value / 100) >= 1.0) { - //GLib.Process.spawn_command_line_async("xrandr --output " + monitors[0] + " --gamma " + edited + ":" + edited + ":" + edited); - //} - //else - GLib.Process.spawn_command_line_async ("xrandr --output " + monitors[0] + " --brightness " + edited); - - save_value (".dimmer_" + monitors[0] + ".txt", edited); - - if ((slider1.adjustment.value / 100) > 1.2) slider1.tooltip_text = "Too Bright"; - else if ((slider1.adjustment.value / 100) < 0.6) slider1.tooltip_text = "Too Dark"; - else slider1.tooltip_text = ""; - } catch (SpawnError se) {} + knob1 = new Knob (); + knob1.change_value.connect ((value) => { + double val = (int)(40 + (110.0 * value)) / 100.0; + //print ("%lf\n", val); + Idle.add (() => { + try { + GLib.Process.spawn_command_line_async ("xrandr --output " + monitors[0] + " --brightness " + val.to_string ()); + settings.set_double ("monitors-1-brightness", value); + if (val > 1.2) knob.tooltip_text = "Too Bright"; + else if (val < 0.6) knob.tooltip_text = "Too Dark"; + else knob.tooltip_text = ""; + } catch (SpawnError se) {} + return false; + }); }); - slider1.set_margin_bottom (30); - - //slider2 + //knob2 label2 = new Label (monitors[1]); label2.halign = Align.START; - slider2 = new Scale.with_range (Orientation.HORIZONTAL, 40, 150, 1); - slider2.set_size_request (380, 30); - slider2.adjustment.value_changed.connect (() => { - try { - string edited = (slider2.adjustment.value / 100).to_string (); - - GLib.Process.spawn_command_line_async ("xrandr --output " + monitors[1] + " --brightness " + edited); - - save_value (".dimmer_" + monitors[1] + ".txt", edited); - - if ((slider2.adjustment.value / 100) > 1.2) slider2.tooltip_text = "Too Bright"; - else if ((slider2.adjustment.value / 100) < 0.6) slider2.tooltip_text = "Too Dark"; - else slider2.tooltip_text = ""; - } catch (SpawnError se) {} + knob2 = new Knob (); + knob2.change_value.connect ((value) => { + double val = (int)(40 + (110.0 * value)) / 100.0; + //print ("%lf\n", val); + Idle.add (() => { + try { + GLib.Process.spawn_command_line_async ("xrandr --output " + monitors[1] + " --brightness " + val.to_string ()); + settings.set_double ("monitors-2-brightness", value); + if (val > 1.2) knob.tooltip_text = "Too Bright"; + else if (val < 0.6) knob.tooltip_text = "Too Dark"; + else knob.tooltip_text = ""; + } catch (SpawnError se) {} + return false; + }); }); - slider2.set_margin_bottom (30); - //slider3 + //knob3 label3 = new Label (monitors[2]); label3.halign = Align.START; - slider3 = new Scale.with_range (Orientation.HORIZONTAL, 40, 150, 1); - slider3.set_size_request (380, 30); - slider3.adjustment.value_changed.connect (() => { - try { - string edited = (slider3.adjustment.value / 100).to_string (); - - GLib.Process.spawn_command_line_async ("xrandr --output " + monitors[2] + " --brightness " + edited); - - save_value (".dimmer_" + monitors[2] + ".txt", edited); - - if ((slider3.adjustment.value / 100) > 1.2) slider3.tooltip_text = "Too Bright"; - else if ((slider3.adjustment.value / 100) < 0.6) slider3.tooltip_text = "Too Dark"; - else slider3.tooltip_text = ""; - } catch (SpawnError se) {} + knob3 = new Knob (); + knob3.change_value.connect ((value) => { + double val = (int)(40 + (110.0 * value)) / 100.0; + //print ("%lf\n", val); + Idle.add (() => { + try { + GLib.Process.spawn_command_line_async ("xrandr --output " + monitors[2] + " --brightness " + val.to_string ()); + settings.set_double ("monitors-3-brightness", value); + if (val > 1.2) knob.tooltip_text = "Too Bright"; + else if (val < 0.6) knob.tooltip_text = "Too Dark"; + else knob.tooltip_text = ""; + } catch (SpawnError se) {} + return false; + }); }); - slider3.set_margin_bottom (30); - //slider4 + //knob4 label4 = new Label (monitors[3]); label4.halign = Align.START; - slider4 = new Scale.with_range (Orientation.HORIZONTAL, 40, 150, 1); - slider4.set_size_request (380, 30); - slider4.adjustment.value_changed.connect (() => { - try { - string edited = (slider4.adjustment.value / 100).to_string (); - - GLib.Process.spawn_command_line_async ("xrandr --output " + monitors[3] + " --brightness " + edited); - - save_value (".dimmer_" + monitors[3] + ".txt", edited); - - if ((slider4.adjustment.value / 100) > 1.2) slider4.tooltip_text = "Too Bright"; - else if ((slider4.adjustment.value / 100) < 0.6) slider4.tooltip_text = "Too Dark"; - else slider4.tooltip_text = ""; - } catch (SpawnError se) {} + knob4 = new Knob (); + knob4.change_value.connect ((value) => { + double val = (int)(40 + (110.0 * value)) / 100.0; + //print ("%lf\n", val); + Idle.add (() => { + try { + GLib.Process.spawn_command_line_async ("xrandr --output " + monitors[3] + " --brightness " + val.to_string ()); + settings.set_double ("monitors-4-brightness", value); + if (val > 1.2) knob.tooltip_text = "Too Bright"; + else if (val < 0.6) knob.tooltip_text = "Too Dark"; + else knob.tooltip_text = ""; + } catch (SpawnError se) {} + return false; + }); }); //set the values at start (when more than 1 exists) set_values_for_every_monitor (); - if (slider1.get_value () != slider2.get_value ()) { + if (knob1.value != knob2.value) { switcher.set_active (false); } } - //action for main slider - slider.adjustment.value_changed.connect (() => { - try { - string edited = (slider.adjustment.value / 100).to_string (); - - for (int i = 0; i < lines.size; i++) GLib.Process.spawn_command_line_async ("xrandr --output " + lines.get (i) + " --brightness " + edited); - - save_value (".dimmer_all_monitors.txt", edited); - - if ((slider.adjustment.value / 100) > 1.2) slider.tooltip_text = "Too Bright"; - else if ((slider.adjustment.value / 100) < 0.6) slider.tooltip_text = "Too Dark"; - else slider.tooltip_text = ""; - } catch (SpawnError se) {} + //action for main knob + knob.change_value.connect ((value) => { + double val = (int)(40 + (110.0 * value)) / 100.0; + //print ("%lf\n", val); + Idle.add (() => { + try { + for (int i = 0; i < lines.size; i++) GLib.Process.spawn_command_line_async ("xrandr --output " + lines.get (i) + " --brightness " + val.to_string ()); + settings.set_double ("all-monitors-brightness", value); + if (val > 1.2) knob.tooltip_text = "Too Bright"; + else if (val < 0.6) knob.tooltip_text = "Too Dark"; + else knob.tooltip_text = ""; + } catch (SpawnError se) {} + return false; + }); }); //.v.positioning - vbox_main.add (slider); + vbox_main.add (knob); if (lines.size > 1) { for (int i = 0; i < lines.size; i++) { if (i == 0) { vbox_ind.add (label1); - vbox_ind.add (slider1); + vbox_ind.add (knob1); } else if (i == 1) { vbox_ind.add (label2); - vbox_ind.add (slider2); + vbox_ind.add (knob2); } else if (i == 2) { vbox_ind.add (label3); - vbox_ind.add (slider3); + vbox_ind.add (knob3); } else if (i == 3) { vbox_ind.add (label4); - vbox_ind.add (slider4); + vbox_ind.add (knob4); } } } @@ -259,28 +284,15 @@ public class Sundown : Gtk.Application { //also, if only 1 monitor exists private static void set_value_for_all () { - string prev_value; + double value = settings.get_double ("all-monitors-brightness"); + double prev_value = (int)(40 + (110.0 * value)) / 100.0; - if (FileUtils.test (".dimmer_all_monitors.txt", GLib.FileTest.EXISTS) == true) { - try { - FileUtils.get_contents (".dimmer_all_monitors.txt", out prev_value); - } - catch (Error e) { - prev_value = "1.00"; - stderr.printf ("Error: %s\n", e.message); - } - } - else { - prev_value = "1.00"; //default - } + if (prev_value < 0.4) prev_value = 0.4; + if (prev_value > 1.5) prev_value = 1.5; - double dprev_value = double.parse (prev_value); - if (dprev_value < 0.4) dprev_value = 0.4; - if (dprev_value > 1.5) dprev_value = 1.5; + knob.set_value (value); - slider.adjustment.value = dprev_value * 100; - - string edited = dprev_value.to_string (); + string edited = prev_value.to_string (); try { for (int i = 0; i < lines.size; i++) GLib.Process.spawn_command_line_async ("xrandr --output " + lines.get (i) + " --brightness " + edited); @@ -290,32 +302,20 @@ public class Sundown : Gtk.Application { //if more than 1 monitor exists private static void set_values_for_every_monitor () { for (int i = 0; i < lines.size; i++) { - string prev_value; if (monitors[i] != "") { - if (FileUtils.test (".dimmer_" + monitors[i] + ".txt", GLib.FileTest.EXISTS) == true) { - try { - FileUtils.get_contents (".dimmer_" + monitors[i] + ".txt", out prev_value); - } - catch (Error e) { - prev_value = "1.00"; - stderr.printf ("Error: %s\n", e.message); - } - } - else { - prev_value = "1.00"; //default - } + double value = settings.get_double ("all-monitors-brightness"); + double prev_value = (int)(40 + (110.0 * value)) / 100.0; - double dprev_value = double.parse (prev_value); - if (dprev_value < 0.4) dprev_value = 0.4; - if (dprev_value > 1.5) dprev_value = 1.5; + if (prev_value < 0.4) prev_value = 0.4; + if (prev_value > 1.5) prev_value = 1.5; - if (i == 0) slider1.adjustment.value = dprev_value * 100; - else if (i == 1) slider2.adjustment.value = dprev_value * 100; - else if (i == 2) slider3.adjustment.value = dprev_value * 100; - else if (i == 3) slider4.adjustment.value = dprev_value * 100; + if (i == 0) knob1.set_value (value); + else if (i == 1) knob2.set_value (value); + else if (i == 2) knob3.set_value (value); + else if (i == 3) knob4.set_value (value); - string edited = dprev_value.to_string (); + string edited = prev_value.to_string (); try { GLib.Process.spawn_command_line_async ("xrandr --output " + monitors[i] + " --brightness " + edited); @@ -324,12 +324,21 @@ public class Sundown : Gtk.Application { } } - private static void save_value (string filename, string value_to_save) { - try { - FileUtils.set_contents (filename, value_to_save); - } - catch (Error e) { - stderr.printf ("Error: %s\n", e.message); + // private static void save_value (string filename, string value_to_save) { + // try { + // FileUtils.set_contents (filename, value_to_save); + // } + // catch (Error e) { + // stderr.printf ("Error: %s\n", e.message); + // } + // } + + private void init_theme () { + GLib.Value value = GLib.Value (GLib.Type.STRING); + Gtk.Settings.get_default ().get_property ("gtk-theme-name", ref value); + if (!value.get_string ().has_prefix ("io.elementary.")) { + Gtk.Settings.get_default ().set_property ("gtk-icon-theme-name", "elementary"); + Gtk.Settings.get_default ().set_property ("gtk-theme-name", "io.elementary.stylesheet.blueberry"); } } diff --git a/src/svg.svg b/src/svg.svg new file mode 100644 index 0000000..5f007d5 --- /dev/null +++ b/src/svg.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + +