81 lines
2.5 KiB
Python
Executable file
81 lines
2.5 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
|
|
import gi, sys
|
|
gi.require_version("Gtk", "4.0")
|
|
gi.require_version("Adw", "1")
|
|
from gi.repository import Gtk, Adw, Gdk, Pango, Gio
|
|
|
|
class Cheatsheet(Adw.Application):
|
|
def __init__(self, path):
|
|
super().__init__(application_id="net.jeena.Cheatsheet")
|
|
self.path = path
|
|
|
|
def do_activate(self):
|
|
win = self.create_window()
|
|
container, label = self.create_cheatsheet_label(self.path)
|
|
self.apply_css(container, label)
|
|
win.set_content(container)
|
|
win.present()
|
|
|
|
def create_window(self):
|
|
win = Adw.ApplicationWindow(application=self)
|
|
win.set_title("Hyprland Cheatsheet")
|
|
win.set_default_size(980, 400)
|
|
win.set_resizable(True)
|
|
win.set_decorated(False)
|
|
win.set_opacity(0.7)
|
|
win.add_css_class("cheatsheet")
|
|
|
|
key_controller = Gtk.EventControllerKey()
|
|
key_controller.connect("key-pressed", self.on_key)
|
|
win.add_controller(key_controller)
|
|
return win
|
|
|
|
def create_cheatsheet_label(self, filepath):
|
|
container = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=0)
|
|
container.set_margin_top(10)
|
|
container.set_margin_bottom(10)
|
|
container.set_margin_start(10)
|
|
container.set_margin_end(10)
|
|
|
|
label = Gtk.Label()
|
|
label.set_xalign(0)
|
|
label.set_yalign(0)
|
|
label.set_wrap(True)
|
|
label.set_justify(Gtk.Justification.LEFT)
|
|
label.set_text(open(filepath).read().rstrip('\n'))
|
|
label.set_selectable(False)
|
|
|
|
container.append(label)
|
|
return container, label
|
|
|
|
def apply_css(self, container, label):
|
|
css_provider = Gtk.CssProvider()
|
|
css_provider.load_from_data(b"""
|
|
window.cheatsheet {
|
|
background-color: rgba(0,0,0,0.7);
|
|
border-radius: 10px;
|
|
}
|
|
|
|
window.cheatsheet label {
|
|
font-family: "JetBrains Mono Nerd Font";
|
|
font-size: 12pt;
|
|
font-weight: bold;
|
|
color: #ffffff;
|
|
}
|
|
""")
|
|
Gtk.StyleContext.add_provider_for_display(
|
|
Gdk.Display.get_default(),
|
|
css_provider,
|
|
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION
|
|
)
|
|
|
|
def on_key(self, controller, keyval, keycode, state):
|
|
key_name = Gdk.keyval_name(keyval)
|
|
if key_name == "Escape":
|
|
self.get_active_window().close()
|
|
return True
|
|
|
|
if __name__ == "__main__":
|
|
app = Cheatsheet(sys.argv[1])
|
|
app.run()
|