From 72bb975a608f14c21aed8cea4cde9e2a29584f8d Mon Sep 17 00:00:00 2001 From: KingOnTheStar Date: Mon, 3 May 2021 15:06:03 +0800 Subject: [PATCH 1/7] Make it more readable --- .gitignore | 3 + Colors.py | 43 +++++ Colours.py | 38 ---- Functions.py | 23 +-- GameData.py | 41 ++++- Paint.py | 452 +++--------------------------------------------- StartPainter.py | 58 +++++++ Widgets.py | 263 ++++++++++++++++++++++++++++ 8 files changed, 432 insertions(+), 489 deletions(-) create mode 100644 .gitignore create mode 100644 Colors.py delete mode 100755 Colours.py create mode 100644 StartPainter.py create mode 100644 Widgets.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2e5195d --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +.idea + +__pycache__ \ No newline at end of file diff --git a/Colors.py b/Colors.py new file mode 100644 index 0000000..024ce5a --- /dev/null +++ b/Colors.py @@ -0,0 +1,43 @@ + + +class Colors: + coolgrey = (52, 73, 94) + pick = (103, 128, 159) + silver = (189, 195, 199) + spacecol = (70, 70, 70) + white = (255, 255, 255) + black = (0, 0, 0) + red = (255, 0, 0) + blue = (0, 0, 255) + green = (0, 255, 0) + coolred = (231, 76, 60) + darkred = (201, 46, 30) + + coolpurple = (142, 68, 173) + + coolblue = (52, 152, 219) + darkblue = (22, 122, 189) + + coolyellow = (244, 208, 63) + darkyellow = (214, 178, 33) + + hyperlapse = (103, 128, 159) + coolgreen = (27, 188, 155) + darkgreen = (16, 68, 40) + carrot = (230, 126, 34) + cloud = (236, 240, 241) + brown = (139, 69, 19) + yellow = (255, 255, 0) + + def __init__(self): + return + + +def tupadd(tup, howmuch): + listify = list(tup) + + for i in range(len(listify)): + if 0 < (listify[i] + howmuch) < 255: + listify[i] += howmuch + + return listify diff --git a/Colours.py b/Colours.py deleted file mode 100755 index 563d207..0000000 --- a/Colours.py +++ /dev/null @@ -1,38 +0,0 @@ -import pygame - -coolgrey = (52, 73, 94) -pick=(103, 128, 159) -silver = (189, 195, 199) -spacecol = (70,70,70) -white = (255,255,255) -black = (0,0,0) -red = (255,0,0) -blue = (0,0,255) -green = (0,255,0) -coolred = (231, 76, 60) -darkred = (201, 46, 30) - -coolpurple = (142, 68, 173) - -coolblue = (52, 152, 219) -darkblue = (22, 122, 189) - -coolyellow = (244, 208, 63) -darkyellow = (214 , 178 , 33) - -hyperlapse= (103, 128, 159) -coolgreen = (27, 188, 155) -darkgreen = (16,68,40) -carrot =(230, 126, 34) -cloud = (236, 240, 241) -brown = (139,69,19) -yellow = (255,255,0) - -def tupadd(tup,howmuch): - listify=list(tup) - - for i in range(len(listify)): - if 0<(listify[i]+howmuch)<255: - listify[i]+=howmuch - - return listify diff --git a/Functions.py b/Functions.py index 0efaaf3..1b5ba63 100644 --- a/Functions.py +++ b/Functions.py @@ -1,22 +1,13 @@ -from Colours import * +import pygame +from Colors import * -w_width = 1000 -w_height = 800 -def fullquit(): +def full_quit(): pygame.quit() quit() -def message_to_screen(window,msg,colour=cloud,x=0,y=0,fontsize=25,bold=False,italic = False ): - message_font = pygame.font.SysFont("Century Gothic",fontsize,bold,italic) - screen_text = message_font.render(msg,True,colour) - window.blit(screen_text,[x,y]) - - - - - - - - +def message_to_screen(window, msg, colour=Colors.cloud, x=0, y=0, fontsize=25, bold=False, italic=False): + message_font = pygame.font.SysFont("Century Gothic", fontsize, bold, italic) + screen_text = message_font.render(msg, True, colour) + window.blit(screen_text, [x, y]) diff --git a/GameData.py b/GameData.py index 23dd002..7d415e4 100755 --- a/GameData.py +++ b/GameData.py @@ -1,18 +1,43 @@ import pygame import math -from Colours import * +from Colors import * from Functions import * +class BaseGame: + def __init__(self): + pygame.init() -pygame.init() + # Window + self.window_width = 900 + self.window_height = 700 + self.window_size = (self.window_width, self.window_height) + self.window = pygame.display.set_mode(self.window_size) # pygame.NOFRAME -window_size = window_width , window_height = 1000,800 -window = pygame.display.set_mode(window_size)#, pygame.NOFRAME ) + # Game info + pygame.display.set_caption("Map Painter") -pygame.display.set_caption("Project MAN") + self.clock = pygame.time.Clock() + self.FPS = 1000 + self.font = pygame.font.SysFont("Century Gothic", 25) -clock = pygame.time.Clock() -FPS = 1000 + # Border + self.border_width = 10 -font = pygame.font.SysFont( "Century Gothic" , 25 ) + # Toolbar + self.toolbar_x = self.border_width + self.toolbar_y = self.border_width + self.toolbar_w = 250 + self.toolbar_h = self.window_height - 2 * self.border_width + + # Canvas + self.canvas_x = self.border_width + self.toolbar_w + self.border_width + self.canvas_y = self.border_width + self.canvas_w = self.window_width - self.canvas_x - self.border_width + self.canvas_h = self.window_height - 2 * self.border_width + + # Info box + self.infobox_w = self.toolbar_w - 2 * self.border_width + self.infobox_h = 50 + self.infobox_x = 2 * self.border_width + self.infobox_y = self.window_height - 2 * self.border_width - self.infobox_h diff --git a/Paint.py b/Paint.py index d925331..9527340 100755 --- a/Paint.py +++ b/Paint.py @@ -1,386 +1,31 @@ -from GameData import * -import os +from Widgets import * -class MyButton(): - def __init__( self , image , x , y , size , grow , name = 'NONE' , detail = ['Description'] , colour = coolblue , function = None): - self.file = pygame.image.load(image) - self.size = size - self.grow = grow - self.colour = colour - self.name = name - self.detail = detail +def display_list(output, painting): + print("Executed") + # clear Screen + output.blit_background() - self.image = pygame.transform.scale(pygame.image.load(image),(self.size,self.size)) - self.image.set_alpha(25) - - - self.rect = self.image.get_rect() - self.rect.x = x - self.rect.y = y - - - self.function = function - self.beingClicked = False - - - - def displayButton(self): - self.mouse= pygame.mouse.get_pos() - self.clicked= pygame.mouse.get_pressed() - - - - - if self.rect.x0: - self.draw_list.pop() - - - - output.blitBackground() - output.blitMenu() - - for i in self.draw_list: - pygame.draw.circle( window , i[1] , i[0] , i[2]) - - - - def cleanlist( self ): - self.cleaned_list = [] - - #Removing Duplicates - for i in self.draw_list: - if i not in self.cleaned_list: - - self.cleaned_list.append(i) - - - print len(self.draw_list) - print len( self.cleaned_list ) - -class PaintData: - def __init__( self ): - self.selected = None - self.b_size = 10 - self.b_darkness = 0 - - self.primecolour = red - self.setColour() - - - - - def performFunctions( self ): - self.blitDefault() - - - if self.selected!=None: - if self.selected.beingClicked == True: - - if self.selected.name == 'Brush Size +' and self.selected.name != 'Pencil': - self.b_size+=0.1 - - elif self.selected.name == 'Brush Size -' and self.selected.name != 'Pencil': - if self.b_size>0: - self.b_size-=0.1 - - if self.selected.name == 'Lighten Brush': - if self.b_darkness < 200: - self.b_darkness+=1 - self.setColour() - - elif self.selected.name == 'Darken Brush': - if self.b_darkness > -200: - self.b_darkness-=1 - self.setColour() - - elif self.selected.name == 'Pencil': - self.colour = silver - self.b_size = 2 - - if self.selected.name == 'Brush': - self.colour = red - self.b_size = 10 - - elif self.selected.name == 'Eraser': - self.colour = output.bordercolour - - - elif self.selected.name == 'Clear': - - self.b_size = 10 - output.blitBackground() - painting.draw_list = [] - - def setColour(self): - self.colour = tupadd( self.primecolour , int(self.b_darkness) ) - - def blitDefault(self): #Blitting stuff like brushsize - - message_to_screen( window , "Shade : "+str(int(self.b_darkness*-1)) , coolyellow , 80 , 455 , 20 ) #BrushDarkness - message_to_screen( window , "Size : "+str(int(self.b_size)) , coolgreen , 80 , 515 , 20 ) #BrushSize - - pygame.draw.circle( window , black , (135 , 630) , int(paintData.b_size)+2 ) #Outline - pygame.draw.circle( window , paintData.colour , (135 , 630) , int(paintData.b_size)) #How the brushlooks - - - - - - - - - - - - - - -output = Output( (24, 39, 53) , coolblue ) #The Background -painting = Painting() -paintData = PaintData() - -brush = MyButton(os.path.join("Resources","brush.png") , 25 , 33 , 100 , 120 , 'Brush' , [ '*PAINT COLOURS*' , ' ' , 'Current Size : '] , coolred ) -pencil = MyButton(os.path.join("Resources","color_pencil.png") , 130 , 39 , 100 , 120 , 'Pencil' , [ '*DRAW*' , ' ' , 'Current Size : '] , carrot ) -eraser = MyButton(os.path.join("Resources","eraser.png"), 30 , 176 , 100 , 120 , 'Eraser' , [ '*CLEARS SELECTED*' , ' ' , 'Current Size : '] , coolblue ) -rbin = MyButton(os.path.join("Resources","bin.png"), 135 , 176 , 100 , 120 , 'Clear' , [ '*CLEARS ALL*' , ' ' , 'Current Size : '] , cloud ) -#colour = MyButton('Resources/colour.png' , 82 , 320 , 100 , 120 , 'Colour' , [ '*CLEARS ALL*' , ' ' , 'Current Size : '] , cloud ) - -bplus = MyButton(os.path.join("Resources","plus.png") , 31 , 510 , 35 , 45 , 'Brush Size +' , [ '**INCREASE SIZE**' , 'Current Size : '] , coolred ) -bminus = MyButton(os.path.join("Resources","minus.png"), 200 , 510 , 35 , 50 , 'Brush Size -' , [ '**DECREASE SIZE**' , 'Current Size : '] , coolblue ) - -cplus = MyButton(os.path.join("Resources","plus.png"), 31 , 450 , 35 , 45 , 'Darken Brush' , [ '**INCREASE SIZE**' , 'Current Size : '] , coolred ) -cminus = MyButton(os.path.join("Resources","minus.png"), 200 , 450 , 35 , 50 , 'Lighten Brush' , [ '**DECREASE SIZE**' , 'Current Size : '] , coolblue ) - -black_b = ColourButton( black , 150 , 330 , 40 , 50 , 'Black' ) -white_b = ColourButton( white , 190 , 330 , 40 , 50 , 'White' ) - -red_b = ColourButton( red , 50 , 330 , 20 , 25 , 'Red' ) -cred_b = ColourButton( coolred , 50 , 350 , 20 , 25 , 'Red' ) - -yellow_b = ColourButton( yellow , 70 , 330 , 20 , 25 , 'Yellow' ) -cyellow_b = ColourButton( coolyellow , 70 , 350 , 20 , 25 , 'Yellow' ) - -blue_b = ColourButton( blue , 90 , 330 , 20 , 25 , 'Blue' ) -cblue_b = ColourButton( coolblue , 90 , 350 , 20 , 25 , 'Blue' ) - -green_b = ColourButton( green , 110 , 330 , 20 , 25 , 'Green' ) -cgreen_b = ColourButton( coolgreen , 110 , 350 , 20 , 25 , 'Green' ) - -# - -skin_b = ColourButton( (255,160,122) , 50 , 370 , 20 , 25 , 'Skin' ) -pink_b = ColourButton( (255,105,180) , 70 , 370 , 20 , 25 , 'Yellow' ) -brown_b = ColourButton( (139,69,19) , 90 , 370 , 20 , 25 , 'Blue' ) -grey_b = ColourButton( (169,169,169) , 110 , 370 , 20 , 25 , 'Green' ) - -def diplay_list(): - print "Executed" - #clear Screen - output.blitBackground() - - #Draw + # Draw for i in painting.cleaned_list: - pygame.draw.circle( window , i[1] , i[0] , i[2]) - - - - -##green = Planet('Images/PlanetScreen/Green Planet.png' , 300 , 300 , 150 , 200 , 'level_Green' , 'Artemis' , ['Knowledge Center','Has Quizes and can keep track of financial situations'] , coolgreen ) -##red = Planet('Images/PlanetScreen/Red Planet.png' , 500 , 300 , 150 , 200 , 'level_Red' , 'Zeus' , ['Home','Place where you review all your progress'] , coolred) -##yellow = Planet('Images/PlanetScreen/Black Planet.png' , 700 , 300 , 150 , 200 , 'level_Black' , 'Hades ' , ['The Mystery Planet','Planet that is in complete mystery'] , tupadd(silver,-70) ) + pygame.draw.circle(output.base.window, i[1], i[0], i[2]) - -def Paint(): - output.blitBackground() +def paint_loop(output, painting, buttons, color_buttons): + output.blit_background() while True: - for event in pygame.event.get() : + for event in pygame.event.get(): if event.type == pygame.QUIT: - fullquit() + full_quit() if event.type == pygame.KEYDOWN: - if event.key==pygame.K_ESCAPE: - run.blue_planet() + if event.key == pygame.K_ESCAPE: + full_quit() - if event.key==pygame.K_RETURN: + if event.key == pygame.K_RETURN: painting.cleanlist() - print painting.cleaned_list + print(painting.cleaned_list) if event.key == pygame.K_BACKSPACE: painting.undo_mode = True @@ -390,72 +35,25 @@ def Paint(): if event.key == pygame.K_BACKSPACE: painting.undo_mode = False + # Draw Everything + # output.blitBackground() + output.blit_menu() + for button in buttons: + button.display_button() - # Draw Everythin - - - - - #output.blitBackground() - output.blitMenu() - - pencil.displayButton() - brush.displayButton() - eraser.displayButton() - rbin.displayButton() - #colour.displayButton() - - bplus.displayButton() - bminus.displayButton() - - cplus.displayButton() - cminus.displayButton() - - # # # - black_b.displayColour() - white_b.displayColour() - - red_b.displayColour() - yellow_b.displayColour() - blue_b.displayColour() - green_b.displayColour() - cred_b.displayColour() - cyellow_b.displayColour() - cblue_b.displayColour() - cgreen_b.displayColour() - - skin_b.displayColour() - pink_b.displayColour() - brown_b.displayColour() - grey_b.displayColour() - - #printCOOD( window , 0, 0 ) + for button in color_buttons: + button.display_color() # Update Function - paintData.performFunctions() + painting.perform_functions() painting.get_position() - # Logic Testing - - - - - - - - - - - - # Delay framerate - clock.tick (FPS) - # Update Screen + output.base.clock.tick(output.base.FPS) + # Update Screen pygame.display.update() - -Paint() diff --git a/StartPainter.py b/StartPainter.py new file mode 100644 index 0000000..e128156 --- /dev/null +++ b/StartPainter.py @@ -0,0 +1,58 @@ +import os +from Widgets import * +from Paint import * + + +def main(): + base = BaseGame() + output = Output(base, Colors.white, (24, 39, 53), Colors.coolblue) # The Background + paint_data = PaintData() + painting = Painting(output, paint_data) + + brush = MyButton(output, paint_data, os.path.join("Resources", "brush.png"), 25, 33, 100, 120, 'Brush', + ['*PAINT COLORS*', ' ', 'Current Size : '], Colors.coolred) + pencil = MyButton(output, paint_data, os.path.join("Resources", "color_pencil.png"), 130, 39, 100, 120, 'Pencil', + ['*DRAW*', ' ', 'Current Size : '], Colors.carrot) + eraser = MyButton(output, paint_data, os.path.join("Resources", "eraser.png"), 30, 176, 100, 120, 'Eraser', + ['*CLEARS SELECTED*', ' ', 'Current Size : '], Colors.coolblue) + rbin = MyButton(output, paint_data, os.path.join("Resources", "bin.png"), 135, 176, 100, 120, 'Clear', + ['*CLEARS ALL*', ' ', 'Current Size : '], Colors.cloud) + bplus = MyButton(output, paint_data, os.path.join("Resources", "plus.png"), 31, 510, 35, 45, 'Brush Size +', + ['**INCREASE SIZE**', 'Current Size : '], Colors.coolred) + bminus = MyButton(output, paint_data, os.path.join("Resources", "minus.png"), 200, 510, 35, 50, 'Brush Size -', + ['**DECREASE SIZE**', 'Current Size : '], Colors.coolblue) + cplus = MyButton(output, paint_data, os.path.join("Resources", "plus.png"), 31, 450, 35, 45, 'Darken Brush', + ['**INCREASE SIZE**', 'Current Size : '], Colors.coolred) + cminus = MyButton(output, paint_data, os.path.join("Resources", "minus.png"), 200, 450, 35, 50, 'Lighten Brush', + ['**DECREASE SIZE**', 'Current Size : '], Colors.coolblue) + + buttons = [brush, pencil, eraser, rbin, + bplus, bminus, cplus, cminus] + + black_b = ColorButton(output, paint_data, Colors.black, 150, 330, 40, 50, 'Black') + white_b = ColorButton(output, paint_data, Colors.white, 190, 330, 40, 50, 'White') + red_b = ColorButton(output, paint_data, Colors.red, 50, 330, 20, 25, 'Red') + cred_b = ColorButton(output, paint_data, Colors.coolred, 50, 350, 20, 25, 'Red') + yellow_b = ColorButton(output, paint_data, Colors.yellow, 70, 330, 20, 25, 'Yellow') + cyellow_b = ColorButton(output, paint_data, Colors.coolyellow, 70, 350, 20, 25, 'Yellow') + blue_b = ColorButton(output, paint_data, Colors.blue, 90, 330, 20, 25, 'Blue') + cblue_b = ColorButton(output, paint_data, Colors.coolblue, 90, 350, 20, 25, 'Blue') + green_b = ColorButton(output, paint_data, Colors.green, 110, 330, 20, 25, 'Green') + cgreen_b = ColorButton(output, paint_data, Colors.coolgreen, 110, 350, 20, 25, 'Green') + skin_b = ColorButton(output, paint_data, (255, 160, 122), 50, 370, 20, 25, 'Skin') + pink_b = ColorButton(output, paint_data, (255, 105, 180), 70, 370, 20, 25, 'Yellow') + brown_b = ColorButton(output, paint_data, (139, 69, 19), 90, 370, 20, 25, 'Blue') + grey_b = ColorButton(output, paint_data, (169, 169, 169), 110, 370, 20, 25, 'Green') + + color_buttons = [black_b, white_b, red_b, cred_b, + yellow_b, cyellow_b, blue_b, cblue_b, + green_b, cgreen_b, skin_b, pink_b, + brown_b, grey_b] + + paint_loop(output, painting, buttons, color_buttons) + + return + + +if __name__ == '__main__': + main() diff --git a/Widgets.py b/Widgets.py new file mode 100644 index 0000000..63e7fdd --- /dev/null +++ b/Widgets.py @@ -0,0 +1,263 @@ +from GameData import * + + +class Output: + def __init__(self, base, canvas_color, bg_color, tool_space): + self.base = base + self.bg_color = bg_color + self.tool_space = tool_space + self.canvas_color = canvas_color + + self.canvas = pygame.Surface((self.base.canvas_w, self.base.canvas_h)) + self.canvas.fill(self.canvas_color) + + self.menu_box = pygame.Surface((self.base.toolbar_w, self.base.toolbar_h)) # menuBox + self.set_alpha(self.menu_box, 80) + self.menu_box.fill(self.tool_space) + + # Used as background for the menu box + self.menu_box_bg = pygame.Surface((self.base.toolbar_w, self.base.toolbar_h)) + self.menu_box_bg.fill(self.bg_color) + + self.ialpha = 150 # For the infobox + self.info_box = pygame.Surface((self.base.infobox_w, self.base.infobox_h)) + self.set_alpha(self.info_box, self.ialpha) + self.info_box.fill(self.bg_color) + + def blit_background(self): + self.base.window.fill(self.bg_color) + self.base.window.blit(self.canvas, (self.base.canvas_x, self.base.canvas_y)) + + def blit_menu(self): + self.base.window.blit(self.menu_box_bg, (self.base.toolbar_x, self.base.toolbar_y)) + + self.base.window.blit(self.menu_box, (self.base.toolbar_x, self.base.toolbar_y)) + self.base.window.blit(self.info_box, (self.base.infobox_x, self.base.infobox_y)) + + def set_alpha(self, rectangle, alpha_val=100): + rectangle.set_alpha(alpha_val) + + +class PaintData: + def __init__(self): + self.b_size = 10 + self.b_darkness = 0 + + self.prime_color = Colors.red + self.color = None + self.set_color() + + def set_color(self): + self.color = tupadd(self.prime_color, int(self.b_darkness)) + + +class Painting: # THE OUTPUT + def __init__(self, output, paint_data): + self.output = output + self.paint_data = paint_data + + self.selected = None + self.draw_list = [] + self.i = -1 # used for deletion + self.cleaned_list = [] + + self.undo_mode = False + + self.mouse = None + self.clicked = None + + def get_position(self): + self.mouse = pygame.mouse.get_pos() + self.clicked = pygame.mouse.get_pressed() + if self.clicked == (1, 0, 0): + # print str(self.mouse[0]) , " , "+str(self.mouse[1]) + + # if 290 < [self.mouse][0][0] < 967 and 25 < [self.mouse][0][1] < 763: # Inisde the border + if 290 < [self.mouse][0][0] < 867 and 25 < [self.mouse][0][1] < 663: # Inisde the border + mouseCOD = [self.mouse] + self.draw_list.append([self.mouse, self.paint_data.color, int(self.paint_data.b_size)]) + self.blit(mouseCOD) + + if self.undo_mode: + self.undo() + + def perform_functions(self): + self.blit_default() + + if self.selected is not None: + if self.selected.beingClicked: + + if self.selected.name == 'Brush Size +' and self.selected.name != 'Pencil': + self.b_size += 0.1 + + elif self.selected.name == 'Brush Size -' and self.selected.name != 'Pencil': + if self.b_size > 0: + self.b_size -= 0.1 + + if self.selected.name == 'Lighten Brush': + if self.paint_data.b_darkness < 200: + self.paint_data.b_darkness += 1 + self.paint_data.set_color() + + elif self.selected.name == 'Darken Brush': + if self.paint_data.b_darkness > -200: + self.paint_data.b_darkness -= 1 + self.paint_data.set_color() + + elif self.selected.name == 'Pencil': + self.paint_data.color = Colors.silver + self.paint_data.b_size = 2 + + if self.selected.name == 'Brush': + self.color = Colors.red + self.b_size = 10 + + elif self.selected.name == 'Eraser': + self.paint_data.color = self.output.canvas_color + + elif self.selected.name == 'Clear': + self.b_size = 10 + self.output.blitBackground() + self.draw_list = [] + + def blit_default(self): # Blitting stuff like brushsize + message_to_screen(self.output.base.window, "Shade : " + str(int(self.paint_data.b_darkness * -1)), + Colors.coolyellow, 80, 455, 20) # BrushDarkness + message_to_screen(self.output.base.window, "Size : " + str(int(self.paint_data.b_size)), Colors.coolgreen, 80, + 515, 20) # BrushSize + + pygame.draw.circle(self.output.base.window, Colors.black, (135, 630), + int(self.paint_data.b_size) + 2) # Outline + pygame.draw.circle(self.output.base.window, self.paint_data.color, (135, 630), + int(self.paint_data.b_size)) # How the brushlooks + + def blit(self, cood): + pygame.draw.circle(self.output.base.window, self.paint_data.color, cood[0], int(self.paint_data.b_size)) + + def undo(self): + if len(self.draw_list) > 0: + self.draw_list.pop() + + self.output.blitBackground() + self.output.blitMenu() + + for i in self.draw_list: + pygame.draw.circle(self.output.base.window, i[1], i[0], i[2]) + + def clean_list(self): + self.cleaned_list = [] + + # Removing Duplicates + for i in self.draw_list: + if i not in self.cleaned_list: + self.cleaned_list.append(i) + + print(len(self.draw_list)) + print(len(self.cleaned_list)) + + +class MyButton: + def __init__(self, output, paint_data, image, x, y, size, grow, name='NONE', detail='Description', + color=Colors.coolblue, function=None): + self.output = output + self.paint_data = paint_data + + self.file = pygame.image.load(image) + self.size = size + self.grow = grow + self.color = color + self.name = name + self.detail = [detail] + + self.image = pygame.transform.scale(pygame.image.load(image), (self.size, self.size)) + self.image.set_alpha(25) + + self.rect = self.image.get_rect() + self.rect.x = x + self.rect.y = y + + self.function = function + self.beingClicked = False + + def display_button(self): + self.mouse = pygame.mouse.get_pos() + self.clicked = pygame.mouse.get_pressed() + + if self.rect.x < self.mouse[0] < self.rect.x + self.size and self.rect.y < self.mouse[ + 1] < self.rect.y + self.size: + + self.image = pygame.transform.scale(self.file, (self.grow, self.grow)) + self.output.base.window.blit(self.image, + (self.rect.x - (self.grow - self.size) * 0.5, + self.rect.y - (self.grow - self.size) * 0.5)) + + message_to_screen(self.output.base.window, self.name, self.color, 30, 733, 30, True) # The Title + + self.output.set_alpha(self.output.info_box, 200) # MAKES THE INFO BOX DARKER + + if self.clicked == (1, 0, 0): + self.paint_data.selected = self + self.beingClicked = True + else: + self.beingClicked = False + + else: + self.image = pygame.transform.scale(self.file, (self.size, self.size)) # Change image to the original size + self.output.base.window.blit(self.image, (self.rect.x, self.rect.y)) # Display the icon + + self.output.set_alpha(self.output.info_box, self.output.ialpha) # makes the info box to the original color + + +class ColorButton: # Buttons + def __init__(self, output, paint_data, color, x, y, size, grow, name): + self.output = output + self.paint_data = paint_data + + self.size = size + self.grow = grow + self.color = color + self.name = name + + self.box = pygame.Surface((self.size, self.size)) + self.box.fill(self.color) + + self.rect = self.box.get_rect() + self.rect.x = x + self.rect.y = y + + self.beingClicked = False + + self.mouse = None + self.clicked = None + + def display_color(self): + self.mouse = pygame.mouse.get_pos() + self.clicked = pygame.mouse.get_pressed() + + if self.rect.x < self.mouse[0] < self.rect.x + self.size and self.rect.y < self.mouse[ + 1] < self.rect.y + self.size: + + self.box = pygame.Surface((self.grow, self.grow)) + self.box.fill(self.color) + + self.output.base.window.blit(self.box, + (self.rect.x - (self.grow - self.size) * 0.5, + self.rect.y - (self.grow - self.size) * 0.5)) + message_to_screen(self.output.base.window, self.name, self.color, 30, 733, 30, True) # The Title + + if self.clicked == (1, 0, 0): + self.paint_data.prime_color = self.color + self.paint_data.b_darkness = 0 + + self.paint_data.set_color() + + self.beingClicked = True + + else: + self.beingClicked = False + + else: + self.box = pygame.Surface((self.size, self.size)) # Change image to the original size + self.box.fill(self.color) + + self.output.base.window.blit(self.box, (self.rect.x, self.rect.y)) # Display the icon From d02c80c6333f1cbfed874869cdf380edc9c9cc01 Mon Sep 17 00:00:00 2001 From: KingOnTheStar Date: Mon, 3 May 2021 15:07:28 +0800 Subject: [PATCH 2/7] Modify readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 66c3205..0b70726 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ A Paint tool made using Python Pygame. # To run -`python Paint.py` +`python StartPainter.py` # Requires From 1ca44b5d1b3712cf418d42d5387d4d2bad23426f Mon Sep 17 00:00:00 2001 From: KingOnTheStar Date: Mon, 3 May 2021 15:36:11 +0800 Subject: [PATCH 3/7] Fix bug: Info box cannot show button name --- Paint.py | 4 +-- StartPainter.py | 44 ++++++++++++++++---------------- Widgets.py | 67 ++++++++++++++++++++++++++----------------------- 3 files changed, 60 insertions(+), 55 deletions(-) diff --git a/Paint.py b/Paint.py index 9527340..3100e09 100755 --- a/Paint.py +++ b/Paint.py @@ -43,8 +43,8 @@ def paint_loop(output, painting, buttons, color_buttons): for button in buttons: button.display_button() - for button in color_buttons: - button.display_color() + for color_button in color_buttons: + color_button.display_color() # Update Function painting.perform_functions() diff --git a/StartPainter.py b/StartPainter.py index e128156..9e9a175 100644 --- a/StartPainter.py +++ b/StartPainter.py @@ -9,40 +9,40 @@ def main(): paint_data = PaintData() painting = Painting(output, paint_data) - brush = MyButton(output, paint_data, os.path.join("Resources", "brush.png"), 25, 33, 100, 120, 'Brush', + brush = MyButton(output, painting, os.path.join("Resources", "brush.png"), 25, 33, 100, 120, 'Brush', ['*PAINT COLORS*', ' ', 'Current Size : '], Colors.coolred) - pencil = MyButton(output, paint_data, os.path.join("Resources", "color_pencil.png"), 130, 39, 100, 120, 'Pencil', + pencil = MyButton(output, painting, os.path.join("Resources", "color_pencil.png"), 130, 39, 100, 120, 'Pencil', ['*DRAW*', ' ', 'Current Size : '], Colors.carrot) - eraser = MyButton(output, paint_data, os.path.join("Resources", "eraser.png"), 30, 176, 100, 120, 'Eraser', + eraser = MyButton(output, painting, os.path.join("Resources", "eraser.png"), 30, 176, 100, 120, 'Eraser', ['*CLEARS SELECTED*', ' ', 'Current Size : '], Colors.coolblue) - rbin = MyButton(output, paint_data, os.path.join("Resources", "bin.png"), 135, 176, 100, 120, 'Clear', + rbin = MyButton(output, painting, os.path.join("Resources", "bin.png"), 135, 176, 100, 120, 'Clear', ['*CLEARS ALL*', ' ', 'Current Size : '], Colors.cloud) - bplus = MyButton(output, paint_data, os.path.join("Resources", "plus.png"), 31, 510, 35, 45, 'Brush Size +', + bplus = MyButton(output, painting, os.path.join("Resources", "plus.png"), 31, 510, 35, 45, 'Brush Size +', ['**INCREASE SIZE**', 'Current Size : '], Colors.coolred) - bminus = MyButton(output, paint_data, os.path.join("Resources", "minus.png"), 200, 510, 35, 50, 'Brush Size -', + bminus = MyButton(output, painting, os.path.join("Resources", "minus.png"), 200, 510, 35, 50, 'Brush Size -', ['**DECREASE SIZE**', 'Current Size : '], Colors.coolblue) - cplus = MyButton(output, paint_data, os.path.join("Resources", "plus.png"), 31, 450, 35, 45, 'Darken Brush', + cplus = MyButton(output, painting, os.path.join("Resources", "plus.png"), 31, 450, 35, 45, 'Darken Brush', ['**INCREASE SIZE**', 'Current Size : '], Colors.coolred) - cminus = MyButton(output, paint_data, os.path.join("Resources", "minus.png"), 200, 450, 35, 50, 'Lighten Brush', + cminus = MyButton(output, painting, os.path.join("Resources", "minus.png"), 200, 450, 35, 50, 'Lighten Brush', ['**DECREASE SIZE**', 'Current Size : '], Colors.coolblue) buttons = [brush, pencil, eraser, rbin, bplus, bminus, cplus, cminus] - black_b = ColorButton(output, paint_data, Colors.black, 150, 330, 40, 50, 'Black') - white_b = ColorButton(output, paint_data, Colors.white, 190, 330, 40, 50, 'White') - red_b = ColorButton(output, paint_data, Colors.red, 50, 330, 20, 25, 'Red') - cred_b = ColorButton(output, paint_data, Colors.coolred, 50, 350, 20, 25, 'Red') - yellow_b = ColorButton(output, paint_data, Colors.yellow, 70, 330, 20, 25, 'Yellow') - cyellow_b = ColorButton(output, paint_data, Colors.coolyellow, 70, 350, 20, 25, 'Yellow') - blue_b = ColorButton(output, paint_data, Colors.blue, 90, 330, 20, 25, 'Blue') - cblue_b = ColorButton(output, paint_data, Colors.coolblue, 90, 350, 20, 25, 'Blue') - green_b = ColorButton(output, paint_data, Colors.green, 110, 330, 20, 25, 'Green') - cgreen_b = ColorButton(output, paint_data, Colors.coolgreen, 110, 350, 20, 25, 'Green') - skin_b = ColorButton(output, paint_data, (255, 160, 122), 50, 370, 20, 25, 'Skin') - pink_b = ColorButton(output, paint_data, (255, 105, 180), 70, 370, 20, 25, 'Yellow') - brown_b = ColorButton(output, paint_data, (139, 69, 19), 90, 370, 20, 25, 'Blue') - grey_b = ColorButton(output, paint_data, (169, 169, 169), 110, 370, 20, 25, 'Green') + black_b = ColorButton(output, painting, Colors.black, 150, 330, 40, 50, 'Black') + white_b = ColorButton(output, painting, Colors.white, 190, 330, 40, 50, 'White') + red_b = ColorButton(output, painting, Colors.red, 50, 330, 20, 25, 'Red') + cred_b = ColorButton(output, painting, Colors.coolred, 50, 350, 20, 25, 'Red') + yellow_b = ColorButton(output, painting, Colors.yellow, 70, 330, 20, 25, 'Yellow') + cyellow_b = ColorButton(output, painting, Colors.coolyellow, 70, 350, 20, 25, 'Yellow') + blue_b = ColorButton(output, painting, Colors.blue, 90, 330, 20, 25, 'Blue') + cblue_b = ColorButton(output, painting, Colors.coolblue, 90, 350, 20, 25, 'Blue') + green_b = ColorButton(output, painting, Colors.green, 110, 330, 20, 25, 'Green') + cgreen_b = ColorButton(output, painting, Colors.coolgreen, 110, 350, 20, 25, 'Green') + skin_b = ColorButton(output, painting, (255, 160, 122), 50, 370, 20, 25, 'Skin') + pink_b = ColorButton(output, painting, (255, 105, 180), 70, 370, 20, 25, 'Yellow') + brown_b = ColorButton(output, painting, (139, 69, 19), 90, 370, 20, 25, 'Blue') + grey_b = ColorButton(output, painting, (169, 169, 169), 110, 370, 20, 25, 'Green') color_buttons = [black_b, white_b, red_b, cred_b, yellow_b, cyellow_b, blue_b, cblue_b, diff --git a/Widgets.py b/Widgets.py index 63e7fdd..17f162a 100644 --- a/Widgets.py +++ b/Widgets.py @@ -34,6 +34,8 @@ def blit_menu(self): self.base.window.blit(self.menu_box, (self.base.toolbar_x, self.base.toolbar_y)) self.base.window.blit(self.info_box, (self.base.infobox_x, self.base.infobox_y)) + self.info_box.fill(self.bg_color) + def set_alpha(self, rectangle, alpha_val=100): rectangle.set_alpha(alpha_val) @@ -85,14 +87,13 @@ def perform_functions(self): self.blit_default() if self.selected is not None: - if self.selected.beingClicked: - + if self.selected.being_clicked: if self.selected.name == 'Brush Size +' and self.selected.name != 'Pencil': - self.b_size += 0.1 + self.paint_data.b_size += 0.1 elif self.selected.name == 'Brush Size -' and self.selected.name != 'Pencil': - if self.b_size > 0: - self.b_size -= 0.1 + if self.paint_data.b_size > 0: + self.paint_data.b_size -= 0.1 if self.selected.name == 'Lighten Brush': if self.paint_data.b_darkness < 200: @@ -109,15 +110,15 @@ def perform_functions(self): self.paint_data.b_size = 2 if self.selected.name == 'Brush': - self.color = Colors.red - self.b_size = 10 + self.paint_data.color = Colors.red + self.paint_data.b_size = 10 elif self.selected.name == 'Eraser': self.paint_data.color = self.output.canvas_color elif self.selected.name == 'Clear': - self.b_size = 10 - self.output.blitBackground() + self.paint_data.b_size = 10 + self.output.blit_background() self.draw_list = [] def blit_default(self): # Blitting stuff like brushsize @@ -157,10 +158,10 @@ def clean_list(self): class MyButton: - def __init__(self, output, paint_data, image, x, y, size, grow, name='NONE', detail='Description', + def __init__(self, output, painting, image, x, y, size, grow, name='NONE', detail='Description', color=Colors.coolblue, function=None): self.output = output - self.paint_data = paint_data + self.painting = painting self.file = pygame.image.load(image) self.size = size @@ -177,29 +178,32 @@ def __init__(self, output, paint_data, image, x, y, size, grow, name='NONE', det self.rect.y = y self.function = function - self.beingClicked = False + self.being_clicked = False + + self.mouse = None + self.clicked = None def display_button(self): self.mouse = pygame.mouse.get_pos() self.clicked = pygame.mouse.get_pressed() - if self.rect.x < self.mouse[0] < self.rect.x + self.size and self.rect.y < self.mouse[ - 1] < self.rect.y + self.size: - + if self.rect.x < self.mouse[0] < self.rect.x + self.size \ + and self.rect.y < self.mouse[1] < self.rect.y + self.size: self.image = pygame.transform.scale(self.file, (self.grow, self.grow)) self.output.base.window.blit(self.image, (self.rect.x - (self.grow - self.size) * 0.5, self.rect.y - (self.grow - self.size) * 0.5)) - message_to_screen(self.output.base.window, self.name, self.color, 30, 733, 30, True) # The Title + message_to_screen(self.output.info_box, self.name, self.color, + 0, 0.25 * self.output.base.infobox_h, 30, True) self.output.set_alpha(self.output.info_box, 200) # MAKES THE INFO BOX DARKER if self.clicked == (1, 0, 0): - self.paint_data.selected = self - self.beingClicked = True + self.painting.selected = self + self.being_clicked = True else: - self.beingClicked = False + self.being_clicked = False else: self.image = pygame.transform.scale(self.file, (self.size, self.size)) # Change image to the original size @@ -209,9 +213,9 @@ def display_button(self): class ColorButton: # Buttons - def __init__(self, output, paint_data, color, x, y, size, grow, name): + def __init__(self, output, painting, color, x, y, size, grow, name): self.output = output - self.paint_data = paint_data + self.painting = painting self.size = size self.grow = grow @@ -225,7 +229,7 @@ def __init__(self, output, paint_data, color, x, y, size, grow, name): self.rect.x = x self.rect.y = y - self.beingClicked = False + self.being_clicked = False self.mouse = None self.clicked = None @@ -234,27 +238,28 @@ def display_color(self): self.mouse = pygame.mouse.get_pos() self.clicked = pygame.mouse.get_pressed() - if self.rect.x < self.mouse[0] < self.rect.x + self.size and self.rect.y < self.mouse[ - 1] < self.rect.y + self.size: - + if self.rect.x < self.mouse[0] < self.rect.x + self.size \ + and self.rect.y < self.mouse[1] < self.rect.y + self.size: self.box = pygame.Surface((self.grow, self.grow)) self.box.fill(self.color) self.output.base.window.blit(self.box, (self.rect.x - (self.grow - self.size) * 0.5, self.rect.y - (self.grow - self.size) * 0.5)) - message_to_screen(self.output.base.window, self.name, self.color, 30, 733, 30, True) # The Title + + message_to_screen(self.output.info_box, self.name, self.color, + 0, 0.25 * self.output.base.infobox_h, 30, True) if self.clicked == (1, 0, 0): - self.paint_data.prime_color = self.color - self.paint_data.b_darkness = 0 + self.painting.paint_data.prime_color = self.color + self.painting.paint_data.b_darkness = 0 - self.paint_data.set_color() + self.painting.paint_data.set_color() - self.beingClicked = True + self.being_clicked = True else: - self.beingClicked = False + self.being_clicked = False else: self.box = pygame.Surface((self.size, self.size)) # Change image to the original size From 7599f4cd26d2ea1bc4df28a70ba8d55b89e2d180 Mon Sep 17 00:00:00 2001 From: KingOnTheStar Date: Mon, 3 May 2021 16:12:21 +0800 Subject: [PATCH 4/7] Draw in canvas rather than in window --- Paint.py | 4 +--- Widgets.py | 34 ++++++++++++++++++++++++---------- 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/Paint.py b/Paint.py index 3100e09..3f7a05d 100755 --- a/Paint.py +++ b/Paint.py @@ -3,7 +3,7 @@ def display_list(output, painting): print("Executed") - # clear Screen + # Clear Screen output.blit_background() # Draw @@ -36,8 +36,6 @@ def paint_loop(output, painting, buttons, color_buttons): painting.undo_mode = False # Draw Everything - - # output.blitBackground() output.blit_menu() for button in buttons: diff --git a/Widgets.py b/Widgets.py index 17f162a..4915752 100644 --- a/Widgets.py +++ b/Widgets.py @@ -24,9 +24,16 @@ def __init__(self, base, canvas_color, bg_color, tool_space): self.set_alpha(self.info_box, self.ialpha) self.info_box.fill(self.bg_color) + def blit_canvas(self): + self.base.window.blit(self.canvas, (self.base.canvas_x, self.base.canvas_y)) + + def clear_canvas(self): + self.canvas.fill(self.canvas_color) + def blit_background(self): self.base.window.fill(self.bg_color) - self.base.window.blit(self.canvas, (self.base.canvas_x, self.base.canvas_y)) + self.clear_canvas() + self.blit_canvas() def blit_menu(self): self.base.window.blit(self.menu_box_bg, (self.base.toolbar_x, self.base.toolbar_y)) @@ -72,10 +79,12 @@ def get_position(self): self.mouse = pygame.mouse.get_pos() self.clicked = pygame.mouse.get_pressed() if self.clicked == (1, 0, 0): - # print str(self.mouse[0]) , " , "+str(self.mouse[1]) - - # if 290 < [self.mouse][0][0] < 967 and 25 < [self.mouse][0][1] < 763: # Inisde the border - if 290 < [self.mouse][0][0] < 867 and 25 < [self.mouse][0][1] < 663: # Inisde the border + canvas_x_min = self.output.base.canvas_x + canvas_x_max = self.output.base.canvas_x + self.output.base.canvas_w + canvas_y_min = self.output.base.canvas_y + canvas_y_max = self.output.base.canvas_y + self.output.base.canvas_h + if canvas_x_min < [self.mouse][0][0] < canvas_x_max \ + and canvas_y_min < [self.mouse][0][1] < canvas_y_max: # Inside the canvas mouseCOD = [self.mouse] self.draw_list.append([self.mouse, self.paint_data.color, int(self.paint_data.b_size)]) self.blit(mouseCOD) @@ -118,7 +127,8 @@ def perform_functions(self): elif self.selected.name == 'Clear': self.paint_data.b_size = 10 - self.output.blit_background() + self.output.clear_canvas() + self.output.blit_canvas() self.draw_list = [] def blit_default(self): # Blitting stuff like brushsize @@ -133,17 +143,21 @@ def blit_default(self): # Blitting stuff like brushsize int(self.paint_data.b_size)) # How the brushlooks def blit(self, cood): - pygame.draw.circle(self.output.base.window, self.paint_data.color, cood[0], int(self.paint_data.b_size)) + canvas_cood = (cood[0][0] - self.output.base.canvas_x, cood[0][1] - self.output.base.canvas_y) + pygame.draw.circle(self.output.canvas, self.paint_data.color, canvas_cood, int(self.paint_data.b_size)) + self.output.blit_canvas() def undo(self): if len(self.draw_list) > 0: self.draw_list.pop() - self.output.blitBackground() - self.output.blitMenu() + self.output.clear_canvas() for i in self.draw_list: - pygame.draw.circle(self.output.base.window, i[1], i[0], i[2]) + canvas_cood = (i[0][0] - self.output.base.canvas_x, i[0][1] - self.output.base.canvas_y) + pygame.draw.circle(self.output.canvas, i[1], canvas_cood, i[2]) + + self.output.blit_canvas() def clean_list(self): self.cleaned_list = [] From c9e91f7a470262c6f3809a38c0f274a79176b5de Mon Sep 17 00:00:00 2001 From: KingOnTheStar Date: Mon, 3 May 2021 17:31:40 +0800 Subject: [PATCH 5/7] Add point interpolation --- Functions.py | 14 +++++++++++ GameData.py | 2 ++ Paint.py | 5 ++-- Widgets.py | 68 ++++++++++++++++++++++++++++++++++++++++++++-------- 4 files changed, 76 insertions(+), 13 deletions(-) diff --git a/Functions.py b/Functions.py index 1b5ba63..d8d7053 100644 --- a/Functions.py +++ b/Functions.py @@ -1,4 +1,5 @@ import pygame +import math from Colors import * @@ -11,3 +12,16 @@ def message_to_screen(window, msg, colour=Colors.cloud, x=0, y=0, fontsize=25, b message_font = pygame.font.SysFont("Century Gothic", fontsize, bold, italic) screen_text = message_font.render(msg, True, colour) window.blit(screen_text, [x, y]) + return + + +def mouse_pos_distance(vec_a, vec_b): + return math.sqrt(math.pow(vec_a[0] - vec_b[0], 2) + math.pow(vec_a[1] - vec_b[1], 2)) + + +def forward_a_step(vec_a, vec_b, v_size): + vec_diff = [vec_b[0] - vec_a[0], vec_b[1] - vec_a[1]] + vec_diff_m = math.sqrt(math.pow(vec_diff[0], 2) + math.pow(vec_diff[1], 2)) + vec_diff_n = [vec_diff[0] / vec_diff_m, vec_diff[1] / vec_diff_m] + ret = [vec_a[0] + vec_diff_n[0] * v_size, vec_a[1] + vec_diff_n[1] * v_size] + return ret diff --git a/GameData.py b/GameData.py index 7d415e4..44f7d2d 100755 --- a/GameData.py +++ b/GameData.py @@ -41,3 +41,5 @@ def __init__(self): self.infobox_h = 50 self.infobox_x = 2 * self.border_width self.infobox_y = self.window_height - 2 * self.border_width - self.infobox_h + + return diff --git a/Paint.py b/Paint.py index 3f7a05d..974d6cd 100755 --- a/Paint.py +++ b/Paint.py @@ -9,6 +9,7 @@ def display_list(output, painting): # Draw for i in painting.cleaned_list: pygame.draw.circle(output.base.window, i[1], i[0], i[2]) + return def paint_loop(output, painting, buttons, color_buttons): @@ -46,9 +47,7 @@ def paint_loop(output, painting, buttons, color_buttons): # Update Function painting.perform_functions() - painting.get_position() - - # Logic Testing + painting.mouse_actions() # Delay framerate output.base.clock.tick(output.base.FPS) diff --git a/Widgets.py b/Widgets.py index 4915752..750dee6 100644 --- a/Widgets.py +++ b/Widgets.py @@ -23,17 +23,21 @@ def __init__(self, base, canvas_color, bg_color, tool_space): self.info_box = pygame.Surface((self.base.infobox_w, self.base.infobox_h)) self.set_alpha(self.info_box, self.ialpha) self.info_box.fill(self.bg_color) + return def blit_canvas(self): self.base.window.blit(self.canvas, (self.base.canvas_x, self.base.canvas_y)) + return def clear_canvas(self): self.canvas.fill(self.canvas_color) + return def blit_background(self): self.base.window.fill(self.bg_color) self.clear_canvas() self.blit_canvas() + return def blit_menu(self): self.base.window.blit(self.menu_box_bg, (self.base.toolbar_x, self.base.toolbar_y)) @@ -42,9 +46,11 @@ def blit_menu(self): self.base.window.blit(self.info_box, (self.base.infobox_x, self.base.infobox_y)) self.info_box.fill(self.bg_color) + return def set_alpha(self, rectangle, alpha_val=100): rectangle.set_alpha(alpha_val) + return class PaintData: @@ -55,9 +61,11 @@ def __init__(self): self.prime_color = Colors.red self.color = None self.set_color() + return def set_color(self): self.color = tupadd(self.prime_color, int(self.b_darkness)) + return class Painting: # THE OUTPUT @@ -72,10 +80,26 @@ def __init__(self, output, paint_data): self.undo_mode = False + self.drawing = False + self.last_mouse_pos = None + self.mouse = None self.clicked = None + return + + def insert_draw_list(self, mouse_pos, color, b_size): + ret = [] + if self.drawing and self.last_mouse_pos is not None: + while mouse_pos_distance(mouse_pos, self.last_mouse_pos) >= b_size: + self.last_mouse_pos = forward_a_step(self.last_mouse_pos, mouse_pos, b_size * 0.5) + ret.append([self.last_mouse_pos, color, b_size]) + ret.append([mouse_pos, color, b_size]) + else: + ret.append([mouse_pos, color, b_size]) + self.last_mouse_pos = mouse_pos + return ret - def get_position(self): + def mouse_actions(self): self.mouse = pygame.mouse.get_pos() self.clicked = pygame.mouse.get_pressed() if self.clicked == (1, 0, 0): @@ -83,14 +107,20 @@ def get_position(self): canvas_x_max = self.output.base.canvas_x + self.output.base.canvas_w canvas_y_min = self.output.base.canvas_y canvas_y_max = self.output.base.canvas_y + self.output.base.canvas_h - if canvas_x_min < [self.mouse][0][0] < canvas_x_max \ - and canvas_y_min < [self.mouse][0][1] < canvas_y_max: # Inside the canvas - mouseCOD = [self.mouse] - self.draw_list.append([self.mouse, self.paint_data.color, int(self.paint_data.b_size)]) - self.blit(mouseCOD) + if canvas_x_min < self.mouse[0] < canvas_x_max \ + and canvas_y_min < self.mouse[1] < canvas_y_max: # Inside the canvas + point_list = self.insert_draw_list(self.mouse, self.paint_data.color, int(self.paint_data.b_size)) + self.blit_list(point_list) + self.draw_list.extend(point_list) + self.drawing = True + else: + self.drawing = False + else: + self.drawing = False if self.undo_mode: self.undo() + return def perform_functions(self): self.blit_default() @@ -130,6 +160,7 @@ def perform_functions(self): self.output.clear_canvas() self.output.blit_canvas() self.draw_list = [] + return def blit_default(self): # Blitting stuff like brushsize message_to_screen(self.output.base.window, "Shade : " + str(int(self.paint_data.b_darkness * -1)), @@ -141,11 +172,21 @@ def blit_default(self): # Blitting stuff like brushsize int(self.paint_data.b_size) + 2) # Outline pygame.draw.circle(self.output.base.window, self.paint_data.color, (135, 630), int(self.paint_data.b_size)) # How the brushlooks + return + + def blit_list(self, points): + for point in points: + cood = point[0] + canvas_cood = (cood[0] - self.output.base.canvas_x, cood[1] - self.output.base.canvas_y) + pygame.draw.circle(self.output.canvas, self.paint_data.color, canvas_cood, int(self.paint_data.b_size)) + self.output.blit_canvas() + return def blit(self, cood): - canvas_cood = (cood[0][0] - self.output.base.canvas_x, cood[0][1] - self.output.base.canvas_y) + canvas_cood = (cood[0] - self.output.base.canvas_x, cood[1] - self.output.base.canvas_y) pygame.draw.circle(self.output.canvas, self.paint_data.color, canvas_cood, int(self.paint_data.b_size)) self.output.blit_canvas() + return def undo(self): if len(self.draw_list) > 0: @@ -153,11 +194,13 @@ def undo(self): self.output.clear_canvas() - for i in self.draw_list: - canvas_cood = (i[0][0] - self.output.base.canvas_x, i[0][1] - self.output.base.canvas_y) - pygame.draw.circle(self.output.canvas, i[1], canvas_cood, i[2]) + for point in self.draw_list: + mouse_pos = point[0] + canvas_cood = (mouse_pos[0] - self.output.base.canvas_x, mouse_pos[1] - self.output.base.canvas_y) + pygame.draw.circle(self.output.canvas, point[1], canvas_cood, point[2]) self.output.blit_canvas() + return def clean_list(self): self.cleaned_list = [] @@ -169,6 +212,7 @@ def clean_list(self): print(len(self.draw_list)) print(len(self.cleaned_list)) + return class MyButton: @@ -196,6 +240,7 @@ def __init__(self, output, painting, image, x, y, size, grow, name='NONE', detai self.mouse = None self.clicked = None + return def display_button(self): self.mouse = pygame.mouse.get_pos() @@ -224,6 +269,7 @@ def display_button(self): self.output.base.window.blit(self.image, (self.rect.x, self.rect.y)) # Display the icon self.output.set_alpha(self.output.info_box, self.output.ialpha) # makes the info box to the original color + return class ColorButton: # Buttons @@ -247,6 +293,7 @@ def __init__(self, output, painting, color, x, y, size, grow, name): self.mouse = None self.clicked = None + return def display_color(self): self.mouse = pygame.mouse.get_pos() @@ -280,3 +327,4 @@ def display_color(self): self.box.fill(self.color) self.output.base.window.blit(self.box, (self.rect.x, self.rect.y)) # Display the icon + return From 43944bbe445c06794051a5a6d0e47475ff0b077f Mon Sep 17 00:00:00 2001 From: KingOnTheStar Date: Tue, 4 May 2021 18:13:00 +0800 Subject: [PATCH 6/7] Auto read img --- ButtonUI.py | 50 +++++++++++++++++++++++++++++++++ Colors.py | 6 ++++ FileSystem.py | 44 +++++++++++++++++++++++++++++ Functions.py | 2 +- GameData.py | 2 +- Paint.py | 25 ++++++++++++++++- StartPainter.py | 61 +++++++++++++--------------------------- Widgets.py | 74 +++++++++++++++++++++++++++++++++++++++---------- 8 files changed, 204 insertions(+), 60 deletions(-) create mode 100644 ButtonUI.py create mode 100644 FileSystem.py diff --git a/ButtonUI.py b/ButtonUI.py new file mode 100644 index 0000000..74ab8f2 --- /dev/null +++ b/ButtonUI.py @@ -0,0 +1,50 @@ +import os +from Widgets import * + + +def create_buttons(output, painting): + brush = MyButton(output, painting, os.path.join("Resources", "brush.png"), 25, 33, 100, 120, 'Brush', + ['*PAINT COLORS*', ' ', 'Current Size : '], Colors.coolred) + pencil = MyButton(output, painting, os.path.join("Resources", "color_pencil.png"), 130, 39, 100, 120, 'Pencil', + ['*DRAW*', ' ', 'Current Size : '], Colors.carrot) + eraser = MyButton(output, painting, os.path.join("Resources", "eraser.png"), 30, 176, 100, 120, 'Eraser', + ['*CLEARS SELECTED*', ' ', 'Current Size : '], Colors.coolblue) + rbin = MyButton(output, painting, os.path.join("Resources", "bin.png"), 135, 176, 100, 120, 'Clear', + ['*CLEARS ALL*', ' ', 'Current Size : '], Colors.cloud) + bplus = MyButton(output, painting, os.path.join("Resources", "plus.png"), 31, 510, 35, 45, 'Brush Size +', + ['**INCREASE SIZE**', 'Current Size : '], Colors.coolred) + bminus = MyButton(output, painting, os.path.join("Resources", "minus.png"), 200, 510, 35, 50, 'Brush Size -', + ['**DECREASE SIZE**', 'Current Size : '], Colors.coolblue) + cplus = MyButton(output, painting, os.path.join("Resources", "plus.png"), 31, 450, 35, 45, 'Darken Brush', + ['**INCREASE SIZE**', 'Current Size : '], Colors.coolred) + cminus = MyButton(output, painting, os.path.join("Resources", "minus.png"), 200, 450, 35, 50, 'Lighten Brush', + ['**DECREASE SIZE**', 'Current Size : '], Colors.coolblue) + + buttons = [brush, pencil, eraser, rbin, + bplus, bminus, cplus, cminus] + + return buttons + + +def create_color_button(output, painting): + black_b = ColorButton(output, painting, Colors.black, 150, 330, 40, 50, 'Black') + white_b = ColorButton(output, painting, Colors.white, 190, 330, 40, 50, 'White') + red_b = ColorButton(output, painting, Colors.road_1, 50, 330, 20, 25, 'Road_1') + cred_b = ColorButton(output, painting, Colors.coolred, 50, 350, 20, 25, 'Red') + yellow_b = ColorButton(output, painting, Colors.yellow, 70, 330, 20, 25, 'Yellow') + cyellow_b = ColorButton(output, painting, Colors.coolyellow, 70, 350, 20, 25, 'Yellow') + blue_b = ColorButton(output, painting, Colors.blue, 90, 330, 20, 25, 'Blue') + cblue_b = ColorButton(output, painting, Colors.coolblue, 90, 350, 20, 25, 'Blue') + green_b = ColorButton(output, painting, Colors.green, 110, 330, 20, 25, 'Green') + cgreen_b = ColorButton(output, painting, Colors.coolgreen, 110, 350, 20, 25, 'Green') + skin_b = ColorButton(output, painting, (255, 160, 122), 50, 370, 20, 25, 'Skin') + pink_b = ColorButton(output, painting, (255, 105, 180), 70, 370, 20, 25, 'Yellow') + brown_b = ColorButton(output, painting, (139, 69, 19), 90, 370, 20, 25, 'Blue') + grey_b = ColorButton(output, painting, Colors.red, 110, 370, 20, 25, 'Red') + + color_buttons = [black_b, white_b, red_b, cred_b, + yellow_b, cyellow_b, blue_b, cblue_b, + green_b, cgreen_b, skin_b, pink_b, + brown_b, grey_b] + + return color_buttons diff --git a/Colors.py b/Colors.py index 024ce5a..9d12a9f 100644 --- a/Colors.py +++ b/Colors.py @@ -29,6 +29,12 @@ class Colors: brown = (139, 69, 19) yellow = (255, 255, 0) + water = (178, 206, 254) + mountain = (244, 244, 244) + + road_0 = (255, 255, 255) + road_1 = (255, 240, 187) + def __init__(self): return diff --git a/FileSystem.py b/FileSystem.py new file mode 100644 index 0000000..f81a69f --- /dev/null +++ b/FileSystem.py @@ -0,0 +1,44 @@ +import os +import pygame + + +class FileSystem: + def __init__(self, start_name, input_dir, output_dir, blank=False): + self.start_name = start_name + self.input_dir = input_dir + self.output_dir = output_dir + self.blank = blank + + if self.blank: + self.file_names = ['output.png'] + self.idx = 0 + self.cur_img = None + else: + self.file_names = os.listdir(input_dir) + self.idx = self.file_names.index(start_name) + self.cur_img = None + self.read_cur() + return + + def read_cur(self): + if self.blank: + return self.cur_img + file_name = os.path.join(self.input_dir, self.file_names[self.idx]) + self.cur_img = pygame.image.load(file_name) + return + + def get_cur(self): + return self.cur_img + + def get_next(self): + if self.idx + 1 >= len(self.file_names): + return None + else: + self.idx += 1 + self.read_cur() + return self.get_cur() + + def save_img(self, canvas): + file_name = os.path.join(self.output_dir, self.file_names[self.idx]) + pygame.image.save(canvas, file_name) + return diff --git a/Functions.py b/Functions.py index d8d7053..c38f621 100644 --- a/Functions.py +++ b/Functions.py @@ -21,7 +21,7 @@ def mouse_pos_distance(vec_a, vec_b): def forward_a_step(vec_a, vec_b, v_size): vec_diff = [vec_b[0] - vec_a[0], vec_b[1] - vec_a[1]] - vec_diff_m = math.sqrt(math.pow(vec_diff[0], 2) + math.pow(vec_diff[1], 2)) + vec_diff_m = math.sqrt(math.pow(vec_diff[0], 2) + math.pow(vec_diff[1], 2)) + 1e-20 vec_diff_n = [vec_diff[0] / vec_diff_m, vec_diff[1] / vec_diff_m] ret = [vec_a[0] + vec_diff_n[0] * v_size, vec_a[1] + vec_diff_n[1] * v_size] return ret diff --git a/GameData.py b/GameData.py index 44f7d2d..1d52b0e 100755 --- a/GameData.py +++ b/GameData.py @@ -9,7 +9,7 @@ def __init__(self): pygame.init() # Window - self.window_width = 900 + self.window_width = 960 self.window_height = 700 self.window_size = (self.window_width, self.window_height) self.window = pygame.display.set_mode(self.window_size) # pygame.NOFRAME diff --git a/Paint.py b/Paint.py index 974d6cd..2a17eb1 100755 --- a/Paint.py +++ b/Paint.py @@ -12,8 +12,27 @@ def display_list(output, painting): return -def paint_loop(output, painting, buttons, color_buttons): +def show_cur_canvas(output, painting, file_system): + img = file_system.get_cur() + if img is not None: + painting.clear() + output.set_bg_canvas(img) + output.blit_background() + return + + +def show_next_canvas(output, painting, file_system): + img = file_system.get_next() + if img is not None: + painting.clear() + output.set_bg_canvas(img) + output.blit_background() + return + + +def paint_loop(output, painting, file_system, buttons, color_buttons): output.blit_background() + show_cur_canvas(output, painting, file_system) while True: for event in pygame.event.get(): @@ -36,6 +55,10 @@ def paint_loop(output, painting, buttons, color_buttons): if event.key == pygame.K_BACKSPACE: painting.undo_mode = False + if event.key == pygame.K_s: + file_system.save_img(output.paint_canvas) + show_next_canvas(output, painting, file_system) + # Draw Everything output.blit_menu() diff --git a/StartPainter.py b/StartPainter.py index 9e9a175..b0a52b7 100644 --- a/StartPainter.py +++ b/StartPainter.py @@ -1,55 +1,32 @@ import os +import argparse from Widgets import * from Paint import * +from ButtonUI import * +from FileSystem import * def main(): + parser = argparse.ArgumentParser(description='Map Painter') + parser.add_argument('--startName', action='store', type=str, default='N30.300E115.005N30.310E115.015.png', + help='The file which is processed firstly') + parser.add_argument('--inputDir', action='store', type=str, default='D:/Data/MapDatabase/StreetMaps', + help='Street map input directory') + parser.add_argument('--outputDir', action='store', type=str, default='D:/Data/SketchMap', + help='Street map output directory') + arg = parser.parse_args() + base = BaseGame() - output = Output(base, Colors.white, (24, 39, 53), Colors.coolblue) # The Background + file_system = FileSystem(arg.startName, arg.inputDir, arg.outputDir, blank=False) + output = Output(base, Colors.mountain, (24, 39, 53), Colors.coolblue) # The Background paint_data = PaintData() painting = Painting(output, paint_data) - brush = MyButton(output, painting, os.path.join("Resources", "brush.png"), 25, 33, 100, 120, 'Brush', - ['*PAINT COLORS*', ' ', 'Current Size : '], Colors.coolred) - pencil = MyButton(output, painting, os.path.join("Resources", "color_pencil.png"), 130, 39, 100, 120, 'Pencil', - ['*DRAW*', ' ', 'Current Size : '], Colors.carrot) - eraser = MyButton(output, painting, os.path.join("Resources", "eraser.png"), 30, 176, 100, 120, 'Eraser', - ['*CLEARS SELECTED*', ' ', 'Current Size : '], Colors.coolblue) - rbin = MyButton(output, painting, os.path.join("Resources", "bin.png"), 135, 176, 100, 120, 'Clear', - ['*CLEARS ALL*', ' ', 'Current Size : '], Colors.cloud) - bplus = MyButton(output, painting, os.path.join("Resources", "plus.png"), 31, 510, 35, 45, 'Brush Size +', - ['**INCREASE SIZE**', 'Current Size : '], Colors.coolred) - bminus = MyButton(output, painting, os.path.join("Resources", "minus.png"), 200, 510, 35, 50, 'Brush Size -', - ['**DECREASE SIZE**', 'Current Size : '], Colors.coolblue) - cplus = MyButton(output, painting, os.path.join("Resources", "plus.png"), 31, 450, 35, 45, 'Darken Brush', - ['**INCREASE SIZE**', 'Current Size : '], Colors.coolred) - cminus = MyButton(output, painting, os.path.join("Resources", "minus.png"), 200, 450, 35, 50, 'Lighten Brush', - ['**DECREASE SIZE**', 'Current Size : '], Colors.coolblue) - - buttons = [brush, pencil, eraser, rbin, - bplus, bminus, cplus, cminus] - - black_b = ColorButton(output, painting, Colors.black, 150, 330, 40, 50, 'Black') - white_b = ColorButton(output, painting, Colors.white, 190, 330, 40, 50, 'White') - red_b = ColorButton(output, painting, Colors.red, 50, 330, 20, 25, 'Red') - cred_b = ColorButton(output, painting, Colors.coolred, 50, 350, 20, 25, 'Red') - yellow_b = ColorButton(output, painting, Colors.yellow, 70, 330, 20, 25, 'Yellow') - cyellow_b = ColorButton(output, painting, Colors.coolyellow, 70, 350, 20, 25, 'Yellow') - blue_b = ColorButton(output, painting, Colors.blue, 90, 330, 20, 25, 'Blue') - cblue_b = ColorButton(output, painting, Colors.coolblue, 90, 350, 20, 25, 'Blue') - green_b = ColorButton(output, painting, Colors.green, 110, 330, 20, 25, 'Green') - cgreen_b = ColorButton(output, painting, Colors.coolgreen, 110, 350, 20, 25, 'Green') - skin_b = ColorButton(output, painting, (255, 160, 122), 50, 370, 20, 25, 'Skin') - pink_b = ColorButton(output, painting, (255, 105, 180), 70, 370, 20, 25, 'Yellow') - brown_b = ColorButton(output, painting, (139, 69, 19), 90, 370, 20, 25, 'Blue') - grey_b = ColorButton(output, painting, (169, 169, 169), 110, 370, 20, 25, 'Green') - - color_buttons = [black_b, white_b, red_b, cred_b, - yellow_b, cyellow_b, blue_b, cblue_b, - green_b, cgreen_b, skin_b, pink_b, - brown_b, grey_b] - - paint_loop(output, painting, buttons, color_buttons) + buttons = create_buttons(output, painting) + + color_buttons = create_color_button(output, painting) + + paint_loop(output, painting, file_system, buttons, color_buttons) return diff --git a/Widgets.py b/Widgets.py index 750dee6..bf9f913 100644 --- a/Widgets.py +++ b/Widgets.py @@ -8,8 +8,13 @@ def __init__(self, base, canvas_color, bg_color, tool_space): self.tool_space = tool_space self.canvas_color = canvas_color - self.canvas = pygame.Surface((self.base.canvas_w, self.base.canvas_h)) - self.canvas.fill(self.canvas_color) + self.paint_canvas = pygame.Surface((self.base.canvas_w, self.base.canvas_h)) + self.paint_canvas.fill(self.canvas_color) + + self.bg_canvas = pygame.Surface((self.base.canvas_w, self.base.canvas_h)) + self.bg_canvas.fill(self.canvas_color) + self.set_alpha(self.bg_canvas, 80) + self.bg_canvas_img = None self.menu_box = pygame.Surface((self.base.toolbar_w, self.base.toolbar_h)) # menuBox self.set_alpha(self.menu_box, 80) @@ -26,11 +31,35 @@ def __init__(self, base, canvas_color, bg_color, tool_space): return def blit_canvas(self): - self.base.window.blit(self.canvas, (self.base.canvas_x, self.base.canvas_y)) + self.blit_paint_canvas() + self.blit_bg_canvas() return def clear_canvas(self): - self.canvas.fill(self.canvas_color) + self.clear_paint_canvas() + self.clear_bg_canvas() + return + + def blit_paint_canvas(self): + self.base.window.blit(self.paint_canvas, (self.base.canvas_x, self.base.canvas_y)) + return + + def clear_paint_canvas(self): + self.paint_canvas.fill(self.canvas_color) + return + + def blit_bg_canvas(self): + if self.bg_canvas_img is not None: + self.bg_canvas.blit(self.bg_canvas_img, (0, 0)) + self.base.window.blit(self.bg_canvas, (self.base.canvas_x, self.base.canvas_y)) + return + + def clear_bg_canvas(self): + self.bg_canvas.fill(self.canvas_color) + return + + def set_bg_canvas(self, img): + self.bg_canvas_img = pygame.transform.scale(img, (self.base.canvas_w, self.base.canvas_h)) return def blit_background(self): @@ -58,7 +87,7 @@ def __init__(self): self.b_size = 10 self.b_darkness = 0 - self.prime_color = Colors.red + self.prime_color = Colors.water self.color = None self.set_color() return @@ -144,12 +173,12 @@ def perform_functions(self): self.paint_data.b_darkness -= 1 self.paint_data.set_color() - elif self.selected.name == 'Pencil': - self.paint_data.color = Colors.silver + if self.selected.name == 'Pencil': + self.paint_data.color = Colors.road_0 self.paint_data.b_size = 2 - if self.selected.name == 'Brush': - self.paint_data.color = Colors.red + elif self.selected.name == 'Brush': + self.paint_data.color = Colors.water self.paint_data.b_size = 10 elif self.selected.name == 'Eraser': @@ -178,13 +207,13 @@ def blit_list(self, points): for point in points: cood = point[0] canvas_cood = (cood[0] - self.output.base.canvas_x, cood[1] - self.output.base.canvas_y) - pygame.draw.circle(self.output.canvas, self.paint_data.color, canvas_cood, int(self.paint_data.b_size)) + pygame.draw.circle(self.output.paint_canvas, self.paint_data.color, canvas_cood, int(self.paint_data.b_size)) self.output.blit_canvas() return def blit(self, cood): canvas_cood = (cood[0] - self.output.base.canvas_x, cood[1] - self.output.base.canvas_y) - pygame.draw.circle(self.output.canvas, self.paint_data.color, canvas_cood, int(self.paint_data.b_size)) + pygame.draw.circle(self.output.paint_canvas, self.paint_data.color, canvas_cood, int(self.paint_data.b_size)) self.output.blit_canvas() return @@ -197,11 +226,15 @@ def undo(self): for point in self.draw_list: mouse_pos = point[0] canvas_cood = (mouse_pos[0] - self.output.base.canvas_x, mouse_pos[1] - self.output.base.canvas_y) - pygame.draw.circle(self.output.canvas, point[1], canvas_cood, point[2]) + pygame.draw.circle(self.output.paint_canvas, point[1], canvas_cood, point[2]) self.output.blit_canvas() return + def clear(self): + self.draw_list = [] + return + def clean_list(self): self.cleaned_list = [] @@ -237,6 +270,7 @@ def __init__(self, output, painting, image, x, y, size, grow, name='NONE', detai self.function = function self.being_clicked = False + self.hovering = False self.mouse = None self.clicked = None @@ -258,13 +292,18 @@ def display_button(self): self.output.set_alpha(self.output.info_box, 200) # MAKES THE INFO BOX DARKER - if self.clicked == (1, 0, 0): + if self.clicked != (1, 0, 0): + self.hovering = True + self.being_clicked = False + elif self.clicked == (1, 0, 0) and self.hovering: self.painting.selected = self self.being_clicked = True else: self.being_clicked = False else: + self.hovering = False + self.image = pygame.transform.scale(self.file, (self.size, self.size)) # Change image to the original size self.output.base.window.blit(self.image, (self.rect.x, self.rect.y)) # Display the icon @@ -290,6 +329,7 @@ def __init__(self, output, painting, color, x, y, size, grow, name): self.rect.y = y self.being_clicked = False + self.hovering = False self.mouse = None self.clicked = None @@ -311,18 +351,22 @@ def display_color(self): message_to_screen(self.output.info_box, self.name, self.color, 0, 0.25 * self.output.base.infobox_h, 30, True) - if self.clicked == (1, 0, 0): + if self.clicked != (1, 0, 0): + self.hovering = True + self.being_clicked = False + elif self.clicked == (1, 0, 0) and self.hovering: self.painting.paint_data.prime_color = self.color self.painting.paint_data.b_darkness = 0 self.painting.paint_data.set_color() self.being_clicked = True - else: self.being_clicked = False else: + self.hovering = False + self.box = pygame.Surface((self.size, self.size)) # Change image to the original size self.box.fill(self.color) From 954facb8711d2a6f661ccff59882eacb12ed8a43 Mon Sep 17 00:00:00 2001 From: KingOnTheStar Date: Sun, 16 May 2021 14:43:09 +0800 Subject: [PATCH 7/7] Adjust to adopt street map generation --- ButtonUI.py | 102 +++++++++++++++++++++++-------- Colors.py | 9 ++- FileSystem.py | 5 +- Functions.py | 6 +- Resources/brush_culture.png | Bin 0 -> 27268 bytes Resources/brush_neighborhood.png | Bin 0 -> 27268 bytes Resources/brush_vegetation.png | Bin 0 -> 27269 bytes Resources/brush_water.png | Bin 0 -> 27290 bytes Resources/pencil_road0.png | Bin 0 -> 17180 bytes Resources/pencil_road1.png | Bin 0 -> 17184 bytes Resources/pencil_road2.png | Bin 0 -> 17189 bytes Resources/pencil_road3.png | Bin 0 -> 17191 bytes StartPainter.py | 10 ++- Widgets.py | 35 ++++++----- 14 files changed, 116 insertions(+), 51 deletions(-) create mode 100644 Resources/brush_culture.png create mode 100644 Resources/brush_neighborhood.png create mode 100644 Resources/brush_vegetation.png create mode 100644 Resources/brush_water.png create mode 100644 Resources/pencil_road0.png create mode 100644 Resources/pencil_road1.png create mode 100644 Resources/pencil_road2.png create mode 100644 Resources/pencil_road3.png diff --git a/ButtonUI.py b/ButtonUI.py index 74ab8f2..dcda1e4 100644 --- a/ButtonUI.py +++ b/ButtonUI.py @@ -3,44 +3,94 @@ def create_buttons(output, painting): - brush = MyButton(output, painting, os.path.join("Resources", "brush.png"), 25, 33, 100, 120, 'Brush', - ['*PAINT COLORS*', ' ', 'Current Size : '], Colors.coolred) - pencil = MyButton(output, painting, os.path.join("Resources", "color_pencil.png"), 130, 39, 100, 120, 'Pencil', - ['*DRAW*', ' ', 'Current Size : '], Colors.carrot) - eraser = MyButton(output, painting, os.path.join("Resources", "eraser.png"), 30, 176, 100, 120, 'Eraser', + brush_water = MyButton(output, painting, os.path.join("Resources", "brush_water.png"), + 25, 33, 50, 60, + ButtonData('normal_button', 15, Colors.water), '水域', + ['*PAINT COLORS*', ' ', 'Current Size : '], Colors.coolred) + brush_neighborhood = MyButton(output, painting, os.path.join("Resources", "brush_neighborhood.png"), + 80, 33, 50, 60, + ButtonData('normal_button', 15, Colors.neighborhood), '街区', + ['*PAINT COLORS*', ' ', 'Current Size : '], Colors.coolred) + brush_culture = MyButton(output, painting, os.path.join("Resources", "brush_culture.png"), + 135, 33, 50, 60, + ButtonData('normal_button', 15, Colors.culture), '文化区', + ['*PAINT COLORS*', ' ', 'Current Size : '], Colors.coolred) + brush_vegetation = MyButton(output, painting, os.path.join("Resources", "brush_vegetation.png"), + 190, 33, 50, 60, + ButtonData('normal_button', 15, Colors.vegetation), '绿化区', + ['*PAINT COLORS*', ' ', 'Current Size : '], Colors.coolred) + + pencil_road0 = MyButton(output, painting, os.path.join("Resources", "pencil_road0.png"), 25, 95, 50, 60, + ButtonData('normal_button', 2, Colors.road_0), '小道', + ['*DRAW*', ' ', 'Current Size : '], Colors.carrot) + pencil_road1 = MyButton(output, painting, os.path.join("Resources", "pencil_road1.png"), 80, 95, 50, 60, + ButtonData('normal_button', 8, Colors.road_1), '公路', + ['*DRAW*', ' ', 'Current Size : '], Colors.carrot) + pencil_road2 = MyButton(output, painting, os.path.join("Resources", "pencil_road2.png"), 135, 95, 50, 60, + ButtonData('normal_button', 12, Colors.road_2), '高速公路', + ['*DRAW*', ' ', 'Current Size : '], Colors.carrot) + pencil_road3 = MyButton(output, painting, os.path.join("Resources", "pencil_road3.png"), 190, 95, 50, 60, + ButtonData('normal_button', 12, Colors.road_3), '在建道路与其它道路', + ['*DRAW*', ' ', 'Current Size : '], Colors.carrot) + # pencil_road1 = MyButton(output, painting, os.path.join("Resources", "pencil_road1.png"), 25, 150, 50, 60, + # ButtonData('normal_button', 2, Colors.road_0), 'Pencil', + # ['*DRAW*', ' ', 'Current Size : '], Colors.carrot) + + eraser = MyButton(output, painting, os.path.join("Resources", "eraser.png"), 30, 230, 50, 60, + ButtonData('function_button', None, None), 'Eraser', ['*CLEARS SELECTED*', ' ', 'Current Size : '], Colors.coolblue) - rbin = MyButton(output, painting, os.path.join("Resources", "bin.png"), 135, 176, 100, 120, 'Clear', + rbin = MyButton(output, painting, os.path.join("Resources", "bin.png"), 135, 230, 50, 60, + ButtonData('function_button', None, None), 'Clear', ['*CLEARS ALL*', ' ', 'Current Size : '], Colors.cloud) - bplus = MyButton(output, painting, os.path.join("Resources", "plus.png"), 31, 510, 35, 45, 'Brush Size +', + bplus = MyButton(output, painting, os.path.join("Resources", "plus.png"), 31, 510, 35, 45, + ButtonData('function_button', None, None), 'Brush Size +', ['**INCREASE SIZE**', 'Current Size : '], Colors.coolred) - bminus = MyButton(output, painting, os.path.join("Resources", "minus.png"), 200, 510, 35, 50, 'Brush Size -', + bminus = MyButton(output, painting, os.path.join("Resources", "minus.png"), 200, 510, 35, 50, + ButtonData('function_button', None, None), 'Brush Size -', ['**DECREASE SIZE**', 'Current Size : '], Colors.coolblue) - cplus = MyButton(output, painting, os.path.join("Resources", "plus.png"), 31, 450, 35, 45, 'Darken Brush', + cplus = MyButton(output, painting, os.path.join("Resources", "plus.png"), 31, 450, 35, 45, + ButtonData('function_button', None, None), 'Darken Brush', ['**INCREASE SIZE**', 'Current Size : '], Colors.coolred) - cminus = MyButton(output, painting, os.path.join("Resources", "minus.png"), 200, 450, 35, 50, 'Lighten Brush', + cminus = MyButton(output, painting, os.path.join("Resources", "minus.png"), 200, 450, 35, 50, + ButtonData('function_button', None, None), 'Lighten Brush', ['**DECREASE SIZE**', 'Current Size : '], Colors.coolblue) - buttons = [brush, pencil, eraser, rbin, - bplus, bminus, cplus, cminus] + buttons = [brush_water, brush_neighborhood, brush_culture, brush_vegetation, + pencil_road0, pencil_road1, pencil_road2, pencil_road3, + eraser, rbin, bplus, bminus, cplus, cminus] return buttons def create_color_button(output, painting): - black_b = ColorButton(output, painting, Colors.black, 150, 330, 40, 50, 'Black') - white_b = ColorButton(output, painting, Colors.white, 190, 330, 40, 50, 'White') - red_b = ColorButton(output, painting, Colors.road_1, 50, 330, 20, 25, 'Road_1') - cred_b = ColorButton(output, painting, Colors.coolred, 50, 350, 20, 25, 'Red') - yellow_b = ColorButton(output, painting, Colors.yellow, 70, 330, 20, 25, 'Yellow') - cyellow_b = ColorButton(output, painting, Colors.coolyellow, 70, 350, 20, 25, 'Yellow') - blue_b = ColorButton(output, painting, Colors.blue, 90, 330, 20, 25, 'Blue') - cblue_b = ColorButton(output, painting, Colors.coolblue, 90, 350, 20, 25, 'Blue') - green_b = ColorButton(output, painting, Colors.green, 110, 330, 20, 25, 'Green') - cgreen_b = ColorButton(output, painting, Colors.coolgreen, 110, 350, 20, 25, 'Green') - skin_b = ColorButton(output, painting, (255, 160, 122), 50, 370, 20, 25, 'Skin') - pink_b = ColorButton(output, painting, (255, 105, 180), 70, 370, 20, 25, 'Yellow') - brown_b = ColorButton(output, painting, (139, 69, 19), 90, 370, 20, 25, 'Blue') - grey_b = ColorButton(output, painting, Colors.red, 110, 370, 20, 25, 'Red') + black_b = ColorButton(output, painting, Colors.black, 150, 330, 40, 50, + ButtonData('color_button', None, None), 'Black') + white_b = ColorButton(output, painting, Colors.white, 190, 330, 40, 50, + ButtonData('color_button', None, None), 'White') + red_b = ColorButton(output, painting, Colors.road_1, 50, 330, 20, 25, + ButtonData('color_button', None, None), 'Road_1') + cred_b = ColorButton(output, painting, Colors.coolred, 50, 350, 20, 25, + ButtonData('color_button', None, None), 'Red') + yellow_b = ColorButton(output, painting, Colors.yellow, 70, 330, 20, 25, + ButtonData('color_button', None, None), 'Yellow') + cyellow_b = ColorButton(output, painting, Colors.coolyellow, 70, 350, 20, 25, + ButtonData('color_button', None, None), 'Yellow') + blue_b = ColorButton(output, painting, Colors.blue, 90, 330, 20, 25, + ButtonData('color_button', None, None), 'Blue') + cblue_b = ColorButton(output, painting, Colors.coolblue, 90, 350, 20, 25, + ButtonData('color_button', None, None), 'Blue') + green_b = ColorButton(output, painting, Colors.green, 110, 330, 20, 25, + ButtonData('color_button', None, None), 'Green') + cgreen_b = ColorButton(output, painting, Colors.coolgreen, 110, 350, 20, 25, + ButtonData('color_button', None, None), 'Green') + skin_b = ColorButton(output, painting, (255, 160, 122), 50, 370, 20, 25, + ButtonData('color_button', None, None), 'Skin') + pink_b = ColorButton(output, painting, (255, 105, 180), 70, 370, 20, 25, + ButtonData('color_button', None, None), 'Yellow') + brown_b = ColorButton(output, painting, (139, 69, 19), 90, 370, 20, 25, + ButtonData('color_button', None, None), 'Blue') + grey_b = ColorButton(output, painting, Colors.red, 110, 370, 20, 25, + ButtonData('color_button', None, None), 'Red') color_buttons = [black_b, white_b, red_b, cred_b, yellow_b, cyellow_b, blue_b, cblue_b, diff --git a/Colors.py b/Colors.py index 9d12a9f..11953bc 100644 --- a/Colors.py +++ b/Colors.py @@ -1,5 +1,3 @@ - - class Colors: coolgrey = (52, 73, 94) pick = (103, 128, 159) @@ -29,11 +27,16 @@ class Colors: brown = (139, 69, 19) yellow = (255, 255, 0) - water = (178, 206, 254) mountain = (244, 244, 244) + water = (178, 206, 254) + neighborhood = (210, 232, 245) + culture = (255, 130, 130) + vegetation = (180, 235, 175) road_0 = (255, 255, 255) road_1 = (255, 240, 187) + road_2 = (255, 172, 77) + road_3 = (227, 227, 227) def __init__(self): return diff --git a/FileSystem.py b/FileSystem.py index f81a69f..08d897d 100644 --- a/FileSystem.py +++ b/FileSystem.py @@ -3,14 +3,15 @@ class FileSystem: - def __init__(self, start_name, input_dir, output_dir, blank=False): + def __init__(self, start_name, input_dir, output_dir, output_name, blank=False): self.start_name = start_name self.input_dir = input_dir self.output_dir = output_dir + self.output_name = output_name self.blank = blank if self.blank: - self.file_names = ['output.png'] + self.file_names = [self.output_name] self.idx = 0 self.cur_img = None else: diff --git a/Functions.py b/Functions.py index c38f621..0022cd9 100644 --- a/Functions.py +++ b/Functions.py @@ -8,9 +8,9 @@ def full_quit(): quit() -def message_to_screen(window, msg, colour=Colors.cloud, x=0, y=0, fontsize=25, bold=False, italic=False): - message_font = pygame.font.SysFont("Century Gothic", fontsize, bold, italic) - screen_text = message_font.render(msg, True, colour) +def message_to_screen(window, msg, color=Colors.cloud, x=0, y=0, fontsize=20, bold=False, italic=False): + message_font = pygame.font.SysFont("SimHei", fontsize, bold, italic) + screen_text = message_font.render(msg, True, color) window.blit(screen_text, [x, y]) return diff --git a/Resources/brush_culture.png b/Resources/brush_culture.png new file mode 100644 index 0000000000000000000000000000000000000000..96f8fa0a38d1e49ab89a24f85147bd12c3a562fa GIT binary patch literal 27268 zcmXt9bwJZ^&?lv(LqR%3kOonN2@(=I1Qeu32uMhGY@~FFgrszrAPpm=M7q1AWAw&Y zyyN%2?_b+r-+S)vbDz8C?w&~PH)>Sm_sQ|_@Tk;ZDeK_j;p6_|Un1#wv(h~>HCNvtDr~i#i{bId16~Ws;5Z5cj=XvVWEtB`LKTpujmdzP-l>A zLdKFn>etW&0XEkxC0EWtH}46@ru7$r2`rRNX2yLfl`F-ckbkSNm_}u%h4Ot;W%CkG?&3st4eU|hq=6=BMwY(lP1uqXvx1nl1jb0(V zCG3>eQBRyt1{I}v{=rV@YH(oa#;&MD<{|cK ztRCQdRVR(p%#6%jEGPdO-L41QDeFEMXfQkQ(05LU{3|UMm-IAbeNHqB*E$~};EoQ* zNA1Nc=x*XsQl^kjlwhwNI6bZG34~@VdRsIbyQ=k^Pa*~0rf2N*5O?my;#_zX`_ zG&b|J{;0#g)%jcFo6%b0j;N9f9U$J&cMW=>`BJiB)tzd|fvGOvQWp77_f;N^ry*>p zg+5Rz6aTC5=nVubApi3ApiF`|3=QL93Um1z8jwsaB=6V13RS;g`yv}~@$gH|GWDy$ zVTGv!^o69AP-tu>66*44ff_O)DfORN3$dKm3~q?pw4EK5u){(fg^)~@TBUIpqVC2S zxmz1Xo1IjCm9UYOyBMeaqb#K7#ebH_!eoFJ{GQ9@9HJe-d zi!oV=wm;iHN)G)f7I|5Z{aYPm_lE25+QG|73}g?9eRzu^16~|pX9y6*+no!^)rJGr zyFCr8RfOM^tUT|kK~7}<)YUoEm%TYr=ZJiRqHQ5pd>^a3k2TItz6C%uUdZ)QIUeeB zhSRTxX<>(@rxCwGfP-2B>UXqkL0?Mb_ zSg{2LbrCCT99|n(@*aQA{|0KFJN;=i){#f8*c^PFNXrH}ROdBM6FDxaztU&BR58RR z(LdbcW;i?XlPh-ezlk|ytT%xnWo@ECy>n& z{M9aZQgqY~5qXjGdh5kgp|`^)1F**I(K_+lXd^JgS^j$rw5PFU!Jf(Y&U=fUN+{lU z-V#R5G+Ad-%bUBM8q#u%BNp(&oL*ZdZ5PIPm{no*9}e=c@38Knm+@Tk6R#T?V{`MH$|vT-R;k<%ldr`+&KSOMuqx51RIJj! z6sfqdJ7+fDIbaX;B)`a-d}?}tMVxx&nl$pCt2K%fP_)
^ifcC5I9VAL)fI+#1C#0%sJDf`v(= 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 p!S?|(7aw>(_i50e!HodG{{zd;tIe literal 0 HcmV?d00001 diff --git a/Resources/brush_neighborhood.png b/Resources/brush_neighborhood.png new file mode 100644 index 0000000000000000000000000000000000000000..af71d4989560aff2b6e6bb3cec35ac6d5acd4d25 GIT binary patch literal 27268 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 Y0HS@9ynl=e#Q*>R07*qoM6N<$g3qpTF8}}l literal 0 HcmV?d00001 diff --git a/Resources/brush_vegetation.png b/Resources/brush_vegetation.png new file mode 100644 index 0000000000000000000000000000000000000000..527da87c1632de09c34bbbd2c0988041d6c69852 GIT binary patch literal 27269 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 Eg7S)CZU6uP literal 0 HcmV?d00001 diff --git a/Resources/pencil_road0.png b/Resources/pencil_road0.png new file mode 100644 index 0000000000000000000000000000000000000000..e7a8f4c1bf268e4fc22b4b731c352895da12dbab GIT binary patch literal 17180 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 PFBm*s{an^LB{Ts58Ykj6 literal 0 HcmV?d00001 diff --git a/Resources/pencil_road1.png b/Resources/pencil_road1.png new file mode 100644 index 0000000000000000000000000000000000000000..ab0dbf6468032c542e582e8050b69902e8f19eb5 GIT binary patch literal 17184 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 YYwI_bTh~~D$6qjby85}Sb4q9e0D|%c6#xJL literal 0 HcmV?d00001 diff --git a/Resources/pencil_road3.png b/Resources/pencil_road3.png new file mode 100644 index 0000000000000000000000000000000000000000..2dba234aa4c1d4720bbfc12126d0c95361fe118a GIT binary patch literal 17191 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 B|Iq*d literal 0 HcmV?d00001 diff --git a/StartPainter.py b/StartPainter.py index b0a52b7..4e0d25c 100644 --- a/StartPainter.py +++ b/StartPainter.py @@ -8,16 +8,20 @@ def main(): parser = argparse.ArgumentParser(description='Map Painter') - parser.add_argument('--startName', action='store', type=str, default='N30.300E115.005N30.310E115.015.png', + parser.add_argument('--startName', action='store', type=str, default='N30.500E116.390N30.510E116.400.png', help='The file which is processed firstly') parser.add_argument('--inputDir', action='store', type=str, default='D:/Data/MapDatabase/StreetMaps', help='Street map input directory') - parser.add_argument('--outputDir', action='store', type=str, default='D:/Data/SketchMap', + parser.add_argument('--outputDir', action='store', type=str, default='D:/Data/MapDatabase/SketchMap', help='Street map output directory') + parser.add_argument('--outputName', action='store', type=str, default='OutputMap.png', + help='The name of output image') + parser.add_argument('--blank', action='store_true', default=False, + help='Draw from a blank background') arg = parser.parse_args() base = BaseGame() - file_system = FileSystem(arg.startName, arg.inputDir, arg.outputDir, blank=False) + file_system = FileSystem(arg.startName, arg.inputDir, arg.outputDir, arg.outputName, blank=arg.blank) output = Output(base, Colors.mountain, (24, 39, 53), Colors.coolblue) # The Background paint_data = PaintData() painting = Painting(output, paint_data) diff --git a/Widgets.py b/Widgets.py index bf9f913..9063abd 100644 --- a/Widgets.py +++ b/Widgets.py @@ -84,7 +84,7 @@ def set_alpha(self, rectangle, alpha_val=100): class PaintData: def __init__(self): - self.b_size = 10 + self.b_size = 15 self.b_darkness = 0 self.prime_color = Colors.water @@ -173,22 +173,19 @@ def perform_functions(self): self.paint_data.b_darkness -= 1 self.paint_data.set_color() - if self.selected.name == 'Pencil': - self.paint_data.color = Colors.road_0 - self.paint_data.b_size = 2 - - elif self.selected.name == 'Brush': - self.paint_data.color = Colors.water - self.paint_data.b_size = 10 - - elif self.selected.name == 'Eraser': + if self.selected.name == 'Eraser': self.paint_data.color = self.output.canvas_color + self.paint_data.b_size = 10 elif self.selected.name == 'Clear': self.paint_data.b_size = 10 self.output.clear_canvas() self.output.blit_canvas() self.draw_list = [] + + if self.selected.button_data.b_type == 'normal_button': + self.paint_data.color = self.selected.button_data.color + self.paint_data.b_size = self.selected.button_data.b_size return def blit_default(self): # Blitting stuff like brushsize @@ -248,11 +245,20 @@ def clean_list(self): return +class ButtonData: + def __init__(self, b_type, b_size, color): + self.b_type = b_type + self.b_size = b_size + self.color = color + return + + class MyButton: - def __init__(self, output, painting, image, x, y, size, grow, name='NONE', detail='Description', + def __init__(self, output, painting, image, x, y, size, grow, button_data, name='NONE', detail='Description', color=Colors.coolblue, function=None): self.output = output self.painting = painting + self.button_data = button_data self.file = pygame.image.load(image) self.size = size @@ -288,7 +294,7 @@ def display_button(self): self.rect.y - (self.grow - self.size) * 0.5)) message_to_screen(self.output.info_box, self.name, self.color, - 0, 0.25 * self.output.base.infobox_h, 30, True) + 0, 0.25 * self.output.base.infobox_h, 20, True) self.output.set_alpha(self.output.info_box, 200) # MAKES THE INFO BOX DARKER @@ -312,9 +318,10 @@ def display_button(self): class ColorButton: # Buttons - def __init__(self, output, painting, color, x, y, size, grow, name): + def __init__(self, output, painting, color, x, y, size, grow, button_data, name): self.output = output self.painting = painting + self.button_data = button_data self.size = size self.grow = grow @@ -349,7 +356,7 @@ def display_color(self): self.rect.y - (self.grow - self.size) * 0.5)) message_to_screen(self.output.info_box, self.name, self.color, - 0, 0.25 * self.output.base.infobox_h, 30, True) + 0, 0.25 * self.output.base.infobox_h, 20, True) if self.clicked != (1, 0, 0): self.hovering = True