paarthri

App

Sep 29th, 2014
348
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.69 KB | None | 0 0
  1. from random import random
  2. from kivy.app import App
  3. from kivy.uix.widget import Widget
  4. from kivy.uix.togglebutton import ToggleButton
  5. from kivy.uix.button import Button
  6. from kivy.graphics import Color, Ellipse, Line
  7. from kivy.uix.boxlayout import BoxLayout
  8. from kivy.uix.gridlayout import GridLayout
  9. from kivy.core.window import Window
  10. from kivy.uix.screenmanager import ScreenManager, Screen
  11. from kivy.clock import Clock
  12. from kivy.uix.colorpicker import ColorPicker
  13. from kivy.uix.popup import Popup
  14. from kivy.uix.slider import Slider
  15. from kivy.uix.label import Label
  16. import platform
  17. import os
  18.  
  19.  
  20.  
  21. eraserQ = False
  22. eraserC = (0,0,0,0)
  23. thickness = 5
  24. color = (1, 1, 1, 1)
  25. Black = (255,255,255,1)
  26. White = (0,0,0,255)
  27.  
  28.  
  29. class MyPaintWidget(Widget):
  30.  
  31.    
  32.    
  33.     def on_touch_down(self, touch):
  34.         global eraserQ
  35.         global eraserC
  36.         with self.canvas:
  37.             if eraserQ == False:
  38.                 Color(*color, mode='rgba')
  39.             elif eraserQ == True:
  40.                 if eraserC == Black:
  41.                     Color(*Black, mode='rgba')
  42.                 elif eraserC == White:
  43.                     Color(*White, mode='rgba')
  44.             touch.ud['line'] = Line(points=(touch.x, touch.y), width = thickness, cap='round', joint='round')
  45.  
  46.     def on_touch_move(self, touch):
  47.         if 'line' in touch.ud:
  48.             touch.ud['line'].points += [touch.x, touch.y]
  49.  
  50.    
  51.    
  52.            
  53.    
  54.  
  55.  
  56. class MyPaintApp(App):
  57.  
  58.     def on_pause(self):
  59.         return True
  60.    
  61.     def build(self):
  62.  
  63.         #Layouts
  64.         w = Widget()
  65.         b = BoxLayout()
  66.         pb = BoxLayout()#For popup
  67.         es_or_br = BoxLayout()#for brush/eraser
  68.         savbox = BoxLayout(orientation="vertical")#For save popup
  69.         sb = BoxLayout(orientation='vertical')#For slider
  70.         g = GridLayout(cols=2)
  71.         sm = ScreenManager()
  72.         scrp = Screen(name=("Paint"))#Paint screen
  73.         scrb = Screen(name=("Options"))#Options Screen
  74.         scrs = Screen(name=("Start"))#Start Screen
  75.        
  76.         #Objects
  77.         p = MyPaintWidget()
  78.         cb = Button(text='Clear')
  79.         svb = Button(text = "Save", halign = "center")
  80.         op = Button(text = "Options", size=(120,120))
  81.         cp = ColorPicker()
  82.         bk = Button(text = "Back")
  83.         es = ToggleButton(text = "Eraser", group="EB")
  84.         br = ToggleButton(text = "Brush", group="EB", state='down')
  85.         #Color Popup
  86.         pope = Button(text="Done")
  87.         pb.add_widget(pope)
  88.         pb.add_widget(cp)
  89.         pop = Popup(title="Change Color", content=pb)
  90.         popb = Button(text="Change\nColor", halign = "center")
  91.         #Slider Popup
  92.         bs = Slider(max=60, min=1, value=5)
  93.         spope = Button(text="Done")
  94.         sb.add_widget(bs)
  95.         sb.add_widget(spope)
  96.         spop = Popup(title="Change Brush Size", content=sb)
  97.         spopb = Button(text= "Change\nBrush Size", halign = "center")
  98.         #Save Popup
  99.         savback = Button(text="Back")
  100.         savel = Label(text = "Saved in /sdcard/Pictures")
  101.         savbox.add_widget(savel)
  102.         savbox.add_widget(savback)
  103.         savpop = Popup(title="Saved", content=savbox)
  104.         #Back color POPUP
  105.         w_or_b = BoxLayout()#for backround
  106.         bb = ToggleButton(text='Black Backround', group='Backround Color')
  107.         wb = ToggleButton(text='White Backround', group='Backround Color')
  108.         white_or_blackpop = Popup(title="Backround Color", content=w_or_b)
  109.         #Start Screen
  110.         startbox = BoxLayout()
  111.         n = Button(text="New", size=(120,120))
  112.         NeonPaint = Label(text="Neon Paint")
  113.  
  114.  
  115.  
  116.        
  117.         #Adding the objects
  118.         sm.add_widget(scrs)
  119.         scrs.add_widget(startbox)
  120.         startbox.add_widget(NeonPaint)
  121.         startbox.add_widget(n)
  122.         sm.add_widget(scrp)
  123.         scrp.add_widget(w)
  124.         w.add_widget(p)
  125.         w.add_widget(op)
  126.         sm.add_widget(scrb)
  127.         scrb.add_widget(g)
  128.         g.add_widget(cb)
  129.         g.add_widget(svb)
  130.         g.add_widget(popb)
  131.         g.add_widget(spopb)
  132.         w_or_b.add_widget(wb)
  133.         w_or_b.add_widget(bb)
  134.         es_or_br.add_widget(es)
  135.         es_or_br.add_widget(br)
  136.         g.add_widget(es_or_br)
  137.         g.add_widget(bk)
  138.  
  139.  
  140.         #Assigning Jobs
  141.         sm.current = "Start"
  142.  
  143.         def New(obj):
  144.             sm.current = "Paint"
  145.             white_or_blackpop.open()
  146.        
  147.         n.bind(on_release=New)
  148.  
  149.  
  150.         def clear_canvas(obj):
  151.             p.canvas.clear()
  152.             sm.current = "Paint"
  153.        
  154.         cb.bind(on_release=clear_canvas)
  155.        
  156.        
  157.         def doscreenshot(self,*largs):
  158.             Window.screenshot(name='/sdcard/Pictures/screenshot{:04d}.png')
  159.            
  160.        
  161.         def save(obj):
  162.             sm.current = "Paint"
  163.             Clock.schedule_once(doscreenshot, 0.7)
  164.             Clock.schedule_once(savpop.open, 0.7)
  165.         svb.bind(on_release=save)
  166.        
  167.        
  168.         def options(obj):
  169.             sm.current = "Options"
  170.        
  171.         op.bind(on_release=options)
  172.        
  173.        
  174.         def on_color(instance, value):
  175.             global color
  176.             color = value
  177.        
  178.         cp.bind(color=on_color)
  179.        
  180.        
  181.         def back(obj):
  182.             sm.current = "Paint"
  183.        
  184.         bk.bind(on_release=back)
  185.        
  186.        
  187.         def bpopup(obj):
  188.             pop.open()
  189.        
  190.         popb.bind(on_release=bpopup)
  191.        
  192.        
  193.         def bpopex(obj):
  194.             pop.dismiss()
  195.        
  196.         pope.bind(on_release=bpopex)
  197.  
  198.  
  199.         def spopup(obj):
  200.             spop.open()
  201.  
  202.         spopb.bind(on_release=spopup)
  203.  
  204.  
  205.         def spopex(obj):
  206.             spop.dismiss()
  207.  
  208.         spope.bind(on_release=spopex)
  209.         spope.bind(on_release=save)
  210.  
  211.  
  212.         def thicknessslider(obj, value):
  213.             global thickness
  214.             thickness = bs.value
  215.  
  216.         bs.bind(on_touch_move=thicknessslider)
  217.  
  218.  
  219.         def clearcolorblack(obj):
  220.             Window.clearcolor = Black
  221.             white_or_blackpop.dismiss()
  222.             sm.current = "Paint"
  223.  
  224.         wb.bind(on_release=clearcolorblack)
  225.  
  226.  
  227.         def clearcolorwhite(obj):
  228.             Window.clearcolor = White
  229.             white_or_blackpop.dismiss()
  230.             sm.current = "Paint"
  231.  
  232.         bb.bind(on_release=clearcolorwhite)
  233.  
  234.  
  235.         def eraser(obj):
  236.             global eraserQ
  237.             global eraserC
  238.             if Window.clearcolor == White:
  239.                 eraserC = White
  240.             elif Window.clearcolor == Black:
  241.                 eraserC = Black
  242.             eraserQ = True
  243.  
  244.         es.bind(on_release=eraser)
  245.  
  246.  
  247.         def brush(obj):
  248.             global eraserQ
  249.             eraserQ = False
  250.  
  251.         br.bind(on_release=brush)
  252.  
  253.  
  254.         def saveback(obj):
  255.             savpop.dismiss()
  256.  
  257.         savback.bind(on_release=saveback)
  258.  
  259.  
  260.        
  261.        
  262.        
  263.         return sm
  264.        
  265.        
  266.  
  267.  
  268. if __name__ == '__main__':
  269.     MyPaintApp().run()
Advertisement
Add Comment
Please, Sign In to add comment