Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from random import random
- from kivy.app import App
- from kivy.uix.widget import Widget
- from kivy.uix.togglebutton import ToggleButton
- from kivy.uix.button import Button
- from kivy.graphics import Color, Ellipse, Line
- from kivy.uix.boxlayout import BoxLayout
- from kivy.uix.gridlayout import GridLayout
- from kivy.core.window import Window
- from kivy.uix.screenmanager import ScreenManager, Screen
- from kivy.clock import Clock
- from kivy.uix.colorpicker import ColorPicker
- from kivy.uix.popup import Popup
- from kivy.uix.slider import Slider
- from kivy.uix.label import Label
- import platform
- import os
- eraserQ = False
- eraserC = (0,0,0,0)
- thickness = 5
- color = (1, 1, 1, 1)
- Black = (255,255,255,1)
- White = (0,0,0,255)
- class MyPaintWidget(Widget):
- def on_touch_down(self, touch):
- global eraserQ
- global eraserC
- with self.canvas:
- if eraserQ == False:
- Color(*color, mode='rgba')
- elif eraserQ == True:
- if eraserC == Black:
- Color(*Black, mode='rgba')
- elif eraserC == White:
- Color(*White, mode='rgba')
- touch.ud['line'] = Line(points=(touch.x, touch.y), width = thickness, cap='round', joint='round')
- def on_touch_move(self, touch):
- if 'line' in touch.ud:
- touch.ud['line'].points += [touch.x, touch.y]
- class MyPaintApp(App):
- def on_pause(self):
- return True
- def build(self):
- #Layouts
- w = Widget()
- b = BoxLayout()
- pb = BoxLayout()#For popup
- es_or_br = BoxLayout()#for brush/eraser
- savbox = BoxLayout(orientation="vertical")#For save popup
- sb = BoxLayout(orientation='vertical')#For slider
- g = GridLayout(cols=2)
- sm = ScreenManager()
- scrp = Screen(name=("Paint"))#Paint screen
- scrb = Screen(name=("Options"))#Options Screen
- scrs = Screen(name=("Start"))#Start Screen
- #Objects
- p = MyPaintWidget()
- cb = Button(text='Clear')
- svb = Button(text = "Save", halign = "center")
- op = Button(text = "Options", size=(120,120))
- cp = ColorPicker()
- bk = Button(text = "Back")
- es = ToggleButton(text = "Eraser", group="EB")
- br = ToggleButton(text = "Brush", group="EB", state='down')
- #Color Popup
- pope = Button(text="Done")
- pb.add_widget(pope)
- pb.add_widget(cp)
- pop = Popup(title="Change Color", content=pb)
- popb = Button(text="Change\nColor", halign = "center")
- #Slider Popup
- bs = Slider(max=60, min=1, value=5)
- spope = Button(text="Done")
- sb.add_widget(bs)
- sb.add_widget(spope)
- spop = Popup(title="Change Brush Size", content=sb)
- spopb = Button(text= "Change\nBrush Size", halign = "center")
- #Save Popup
- savback = Button(text="Back")
- savel = Label(text = "Saved in /sdcard/Pictures")
- savbox.add_widget(savel)
- savbox.add_widget(savback)
- savpop = Popup(title="Saved", content=savbox)
- #Back color POPUP
- w_or_b = BoxLayout()#for backround
- bb = ToggleButton(text='Black Backround', group='Backround Color')
- wb = ToggleButton(text='White Backround', group='Backround Color')
- white_or_blackpop = Popup(title="Backround Color", content=w_or_b)
- #Start Screen
- startbox = BoxLayout()
- n = Button(text="New", size=(120,120))
- NeonPaint = Label(text="Neon Paint")
- #Adding the objects
- sm.add_widget(scrs)
- scrs.add_widget(startbox)
- startbox.add_widget(NeonPaint)
- startbox.add_widget(n)
- sm.add_widget(scrp)
- scrp.add_widget(w)
- w.add_widget(p)
- w.add_widget(op)
- sm.add_widget(scrb)
- scrb.add_widget(g)
- g.add_widget(cb)
- g.add_widget(svb)
- g.add_widget(popb)
- g.add_widget(spopb)
- w_or_b.add_widget(wb)
- w_or_b.add_widget(bb)
- es_or_br.add_widget(es)
- es_or_br.add_widget(br)
- g.add_widget(es_or_br)
- g.add_widget(bk)
- #Assigning Jobs
- sm.current = "Start"
- def New(obj):
- sm.current = "Paint"
- white_or_blackpop.open()
- n.bind(on_release=New)
- def clear_canvas(obj):
- p.canvas.clear()
- sm.current = "Paint"
- cb.bind(on_release=clear_canvas)
- def doscreenshot(self,*largs):
- Window.screenshot(name='/sdcard/Pictures/screenshot{:04d}.png')
- def save(obj):
- sm.current = "Paint"
- Clock.schedule_once(doscreenshot, 0.7)
- Clock.schedule_once(savpop.open, 0.7)
- svb.bind(on_release=save)
- def options(obj):
- sm.current = "Options"
- op.bind(on_release=options)
- def on_color(instance, value):
- global color
- color = value
- cp.bind(color=on_color)
- def back(obj):
- sm.current = "Paint"
- bk.bind(on_release=back)
- def bpopup(obj):
- pop.open()
- popb.bind(on_release=bpopup)
- def bpopex(obj):
- pop.dismiss()
- pope.bind(on_release=bpopex)
- def spopup(obj):
- spop.open()
- spopb.bind(on_release=spopup)
- def spopex(obj):
- spop.dismiss()
- spope.bind(on_release=spopex)
- spope.bind(on_release=save)
- def thicknessslider(obj, value):
- global thickness
- thickness = bs.value
- bs.bind(on_touch_move=thicknessslider)
- def clearcolorblack(obj):
- Window.clearcolor = Black
- white_or_blackpop.dismiss()
- sm.current = "Paint"
- wb.bind(on_release=clearcolorblack)
- def clearcolorwhite(obj):
- Window.clearcolor = White
- white_or_blackpop.dismiss()
- sm.current = "Paint"
- bb.bind(on_release=clearcolorwhite)
- def eraser(obj):
- global eraserQ
- global eraserC
- if Window.clearcolor == White:
- eraserC = White
- elif Window.clearcolor == Black:
- eraserC = Black
- eraserQ = True
- es.bind(on_release=eraser)
- def brush(obj):
- global eraserQ
- eraserQ = False
- br.bind(on_release=brush)
- def saveback(obj):
- savpop.dismiss()
- savback.bind(on_release=saveback)
- return sm
- if __name__ == '__main__':
- MyPaintApp().run()
Advertisement
Add Comment
Please, Sign In to add comment