initial commit

This commit is contained in:
Nihilazo 2020-07-19 11:27:39 +01:00
commit 8700488bb5
2 changed files with 98 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
*pyc
__pycache__/*

96
main.py Normal file
View File

@ -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()