Gradience/gradience/palette_shades.py

72 lines
2.7 KiB
Python
Raw Normal View History

# palette_shades.py
#
2022-08-11 08:16:44 +00:00
# Change the look of Adwaita, with ease
# Copyright (C) 2022 Gradience Team
#
2022-08-11 08:16:44 +00:00
# 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.
2022-08-11 16:39:52 +00:00
#
2022-08-11 08:16:44 +00:00
# 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.
2022-08-11 16:39:52 +00:00
#
2022-08-11 08:16:44 +00:00
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
2022-07-24 18:43:32 +00:00
from gi.repository import Gtk, Gdk, Adw
2022-08-13 10:27:59 +00:00
from .constants import rootdir
2022-08-11 16:39:52 +00:00
@Gtk.Template(resource_path=f"{rootdir}/ui/palette_shades.ui")
2022-08-19 19:14:05 +00:00
class GradiencePaletteShades(Adw.ActionRow):
__gtype_name__ = "GradiencePaletteShades"
def __init__(self, prefix, color_title, n_shades, **kwargs):
super().__init__(**kwargs)
self.prefix = prefix
self.set_name(prefix + "shades")
self.set_title(color_title)
self.set_subtitle("@" + prefix + "[1, " + str(n_shades) + "]")
self.color_pickers = {}
for i in range(1, n_shades + 1):
picker = Gtk.ColorButton()
picker.set_name(prefix + str(i))
picker.set_rgba(Gdk.RGBA(red=0, green=0, blue=0, alpha=0))
picker.set_valign(Gtk.Align.CENTER)
picker.connect("color-set", self.on_color_changed)
self.color_pickers[str(i)] = picker
self.add_suffix(picker)
def on_color_changed(self, *_args):
shades = {}
2022-07-24 18:43:32 +00:00
for picker_key, picker in self.color_pickers.items():
shades[picker_key] = picker.get_rgba().to_string()
self.update_shades(shades, update_from="color_value")
def update_shades(self, shades, **kwargs):
for i in range(1, len(shades) + 1):
new_rgba = Gdk.RGBA()
if new_rgba.parse(shades[str(i)]):
self.color_pickers[str(i)].set_rgba(new_rgba)
2022-07-24 17:46:37 +00:00
self.color_pickers[str(i)].set_tooltip_text(shades[str(i)])
2022-08-11 16:39:52 +00:00
if (
Gtk.Application.get_default().is_ready
and kwargs.get("update_from") == "color_value"
):
Gtk.Application.get_default().palette[self.prefix][str(i)] = shades[
str(i)
]
2022-08-11 16:39:52 +00:00
if (
Gtk.Application.get_default().is_ready
and kwargs.get("update_from") == "color_value"
):
2022-08-01 19:42:42 +00:00
Gtk.Application.get_default().mark_as_dirty()
Gtk.Application.get_default().reload_variables()