From 8700488bb537a13daa04d1fc99b4dfc28c11aab3 Mon Sep 17 00:00:00 2001 From: Nihilazo Date: Sun, 19 Jul 2020 11:27:39 +0100 Subject: [PATCH] initial commit --- .gitignore | 2 ++ main.py | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 98 insertions(+) create mode 100644 .gitignore create mode 100644 main.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6bbcbdd --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*pyc +__pycache__/* diff --git a/main.py b/main.py new file mode 100644 index 0000000..dc048b2 --- /dev/null +++ b/main.py @@ -0,0 +1,96 @@ +import gi +import math +import cairo +import subprocess as sp +gi.require_version("Gtk","3.0") +gi.require_version("Gdk","3.0") +from gi.repository import Gtk +from gi.repository import Gdk + +width = 1920 +height = 1080 + +def point_on_circle(r, point, angle): + x = point[0] + r * math.cos(angle) + y = point[1] + r * math.sin(angle) + return [x,y] + +def gradient(x1,y1,x2,y2): + return y1-y2/x1-x2 + +class MenuWindow(Gtk.Window): + def __init__(self): + super().__init__() + self.set_title("PieMenu") + self.width = width/3 + self.height = height + self.options = [["Keyboard","onboard"], ["Terminal","termite"],["Launcher","rofi -show run"], ["Notes","echo \"hello world\""], ["Placeholder 1","echo \"p\""], ["A long option","echo \"long\""], ["Exit",None]] + self.selected = None + self.connect("destroy",Gtk.main_quit) + self.set_default_size(width/3,height) + self.move(width-self.width,0) + self.set_resizable(False) + self.set_decorated(False) + self.mouse_x = 0 + self.mouse_y = 0 + self.area = Gtk.DrawingArea() + self.area.add_events(Gdk.EventMask.BUTTON_RELEASE_MASK) + self.area.add_events(Gdk.EventMask.BUTTON_PRESS_MASK) + self.area.add_events(Gdk.EventMask.BUTTON_MOTION_MASK) + self.area.connect("draw",self.draw_area) + self.area.connect("button_release_event",self.click) + self.area.connect("motion_notify_event",self.on_move) + self.add(self.area) + + def click(self,widget,data): + if self.options[self.selected][1] != None: + sp.Popen(self.options[self.selected][1].split(" "),) + self.destroy() + + def on_move(self,widget,data): + self.area.queue_draw() + self.mouse_x = data.x + self.mouse_y = data.y + mouse_angle = -(math.atan2(self.mouse_x-self.center[0],self.mouse_y-self.center[1]) + (math.pi/2)) + current = 0 + for number, angle in enumerate(self.lines): + if mouse_angle < angle: + break + else: + current = number + self.selected = current + + def draw_area(self, widget, cr): + self.lines = [] + width = widget.get_allocated_width() + height = widget.get_allocated_height() + cr.translate(width,height/2) # All coordinates are relative to right center + cp = cr.get_current_point() + self.center = cr.user_to_device(cp[0],cp[1]) + cr.select_font_face("monospace",cairo.FontSlant.NORMAL,cairo.FontWeight.BOLD) + cr.set_line_width(4) + cr.set_font_size(20) + start_angle = (-math.pi/16)*(len(self.options)/2) + cr.rotate(start_angle) + angle = start_angle + cr.set_source_rgb(1,1,1) + for i, o in enumerate(self.options): + if self.selected != None: + if i == self.selected: + cr.set_source_rgb(0,0.4,0.4) + else: + cr.set_source_rgb(1,1,1) + extents = cr.text_extents(o[0]) + cr.rotate(math.pi/16) + angle += math.pi/16 + self.lines.append(angle) + cr.move_to(-width,0) + cp = cr.get_current_point() + cr.show_text(o[0]) + cr.move_to(-width+extents.width,-extents.height/4) + cr.line_to(0,0) + cr.stroke() + +win = MenuWindow() +win.show_all() +Gtk.main()