From d48d5d11ec5092ea9e92bed378f203e064f6630b Mon Sep 17 00:00:00 2001 From: NicklasVraa Date: Tue, 25 Jul 2023 22:13:37 +0200 Subject: [PATCH] Finished GUI --- gui.py | 105 +++++++++++++++++++++++++++++++++ readme.md | 8 ++- resources/gui.png | Bin 0 -> 26303 bytes icon.svg => resources/icon.svg | 0 4 files changed, 111 insertions(+), 2 deletions(-) create mode 100644 gui.py create mode 100644 resources/gui.png rename icon.svg => resources/icon.svg (100%) diff --git a/gui.py b/gui.py new file mode 100644 index 00000000..447a5b39 --- /dev/null +++ b/gui.py @@ -0,0 +1,105 @@ +import gi +gi.require_version("Gtk", "3.0") +from gi.repository import Gtk +import os, subprocess + +class ColorManagerGUI(Gtk.Window): + def __init__(self): + super().__init__(title="Color Manager") + + # Window setup. + self.set_default_size(300, 200) + self.set_position(Gtk.WindowPosition.CENTER) + + # Top container setup. + container = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) + self.add(container) + pages = Gtk.Notebook() + container.add(pages) + + # Monochromatic page. + mono_page = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10) + pages.append_page(mono_page, Gtk.Label(label="Monochromatic", hexpand=True)) + mono_container = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10) + mono_container.set_border_width(10) + mono_page.add(mono_container) + label = Gtk.Label(label="Choose a single color that will serve as the base color for your monochromatic icon pack variant.") + label.set_alignment(0,0) + label.set_line_wrap(True) + mono_container.add(label) + + mono_color = Gtk.ColorButton() + mono_container.add(mono_color) + + # Multichromatic page. + multi_page = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10) + pages.append_page(multi_page, Gtk.Label(label="Multichromatic", hexpand=True)) + + multi_container = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10) + multi_container.set_border_width(10) + multi_page.add(multi_container) + label = Gtk.Label(label="Choose a palette file containing a list of colors. Only these will occur in the new pack.") + label.set_alignment(0,0) + label.set_line_wrap(True) + multi_container.add(label) + + palette_button = Gtk.FileChooserButton() + palette_button.set_title("Choose palette file") + multi_container.add(palette_button) + + # About page. + about_page = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10) + pages.append_page(about_page, Gtk.Label(label="About", hexpand=True)) + about_container = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10) + about_container.set_border_width(10) + about_page.add(about_container) + label = Gtk.Label() + label.set_markup("Color Manager is a program for recoloring existing svg-based icon packs as well as themes. The program is designed for NovaOS.\n\nCheck for updates on the project's repository.") + label.set_alignment(0,0) + label.set_line_wrap(True) + about_container.add(label) + + # Shared container setup. + shared = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10) + shared.set_border_width(10) + container.add(shared) + + # Input-output area. + io_area = Gtk.Box(spacing=10) + io_area.set_homogeneous(True) + + dest_area = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10) + label = Gtk.Label(label="Name your pack:") + label.set_alignment(0,0) + dest_area.add(label) + dest_entry = Gtk.Entry() + dest_area.add(dest_entry) + io_area.add(dest_area) + + src_area = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10) + label = Gtk.Label(label="Choose source pack:") + label.set_alignment(0,0) + src_area.add(label) + src_button = Gtk.FileChooserButton() + src_button.set_title("Choose source pack") + src_area.add(src_button) + io_area.add(src_area) + shared.add(io_area) + + # Progress bar. + progress_bar = Gtk.ProgressBar() + shared.add(progress_bar) + + gen_area = Gtk.Box(spacing=10) + button = Gtk.Button(label="Generate") + gen_area.add(button) + status = Gtk.Label(label="Status:") + status.set_alignment(0,0) + status.set_line_wrap(True) + gen_area.add(status) + shared.add(gen_area) + +win = ColorManagerGUI() +win.connect("destroy", Gtk.main_quit) +win.show_all() +Gtk.main() diff --git a/readme.md b/readme.md index 25193226..742ca5e5 100644 --- a/readme.md +++ b/readme.md @@ -1,4 +1,4 @@ -# Color Manager +# Color Manager [Roadmap](#roadmap) | [Features](#features) | [Packs](#packs) | [Requests](#requests) @@ -10,7 +10,7 @@ In the meantime, this repository will act as a preview and be home to recoloring - [x] Basic framework for manipulating icon packs. - [x] Grayscale, monochromatic and multichromatic recoloring functions. - [x] Command-line interface. -- [ ] Graphical user interface based on the GTK framework. +- [x] Graphical user interface based on the GTK framework. - [ ] Basic framework for manipulating GTK, Cinnamon and Metacity themes. - [ ] Intelligent color inversion function. - [ ] Python pip package. @@ -26,6 +26,10 @@ Currently, three types of recoloring operations are supported: Speeds were recorded with an Intel i7-4770K CPU. Any svg-based icon pack can serve as the base for any color palette or monotone. For the best result when doing monochromatic recoloring, a pack where all icons have the same average saturation and lightness is recommended. +A simple GUI is included with the program, but it is also possible to interact with it from a command line. The GUI will adopt your active theme. + +![GUI](resources/gui.png) + ## Pack Previews Click sections to expand.
diff --git a/resources/gui.png b/resources/gui.png new file mode 100644 index 0000000000000000000000000000000000000000..5a1e4fa660896406c03301ce404425c2d975ac8f GIT binary patch literal 26303 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 vT}&