From 3899dc3eb18ba5aff63cdb9a0f98a68cf322cfb8 Mon Sep 17 00:00:00 2001 From: LupaDevStudio Date: Fri, 15 Dec 2023 10:43:55 +0100 Subject: [PATCH] add an act button class --- resources/images/star2.png | Bin 0 -> 19135 bytes resources/images/star3.png | Bin 0 -> 19371 bytes screens/custom_widgets/__init__.py | 5 +- screens/custom_widgets/act_button.kv | 43 +++++++++++++++ screens/custom_widgets/act_button.py | 67 +++++++++++++++++++++++ screens/custom_widgets/custom_buttons.py | 5 +- screens/custom_widgets/three_stars.kv | 26 ++++----- screens/custom_widgets/three_stars.py | 4 +- screens/free_mode.kv | 7 ++- tools/constants.py | 1 + 10 files changed, 138 insertions(+), 20 deletions(-) create mode 100644 resources/images/star2.png create mode 100644 resources/images/star3.png create mode 100644 screens/custom_widgets/act_button.kv create mode 100644 screens/custom_widgets/act_button.py diff --git a/resources/images/star2.png b/resources/images/star2.png new file mode 100644 index 0000000000000000000000000000000000000000..c03bb525382e46855d4bb04628a68bf3d1aa1c14 GIT binary patch literal 19135 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 literal 0 HcmV?d00001 diff --git a/resources/images/star3.png b/resources/images/star3.png new file mode 100644 index 0000000000000000000000000000000000000000..6097b8aeca6140b5f8a338614c3b6109517dc551 GIT binary patch literal 19371 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 aqaTnf: + + # Background + canvas.before: + Color: + rgba: self.background_color + RoundedRectangle: + pos:(0,0) + size:self.size + radius:[40,] + + # Act title + Label: + id: act_title_label + text: root.act_title + pos_hint: {"center_y":0.8, "center_x":0.5} + size: (1,0.5) + font_size: root.parent.font_ratio * root.font_size + font_name: root.text_font_name + halign: "center" + valign: "center" + color: (0,0,0,1) + + # Stars + ThreeStars: + id: three_stars + pos_hint: {"center_x":0.35, "center_y":0.25} + size_hint: (0.5,0.5) + stars_number: root.stars_number + + # Completion + Label: + id: completion_label + text: root.completion_text + pos_hint: {"center_x":0.8, "center_y":0.25} + size_hint: (0.3,0.5) + font_size: root.parent.font_ratio * root.font_size + font_name: root.text_font_name + halign: "center" + valign: "center" + color: (0,0,0,1) diff --git a/screens/custom_widgets/act_button.py b/screens/custom_widgets/act_button.py new file mode 100644 index 0000000..bb1cdf0 --- /dev/null +++ b/screens/custom_widgets/act_button.py @@ -0,0 +1,67 @@ +""" +Module to create the act button. +""" + +############### +### Imports ### +############### + +### Kivy imports ### +from kivy.uix.relativelayout import RelativeLayout +from kivy.uix.behaviors import ButtonBehavior +from kivy.properties import ( + StringProperty, + NumericProperty +) + +### Local imports ### +from tools.path import ( + PATH_TEXT_FONT +) +from tools.constants import ( + CUSTOM_BUTTON_BACKGROUND_COLOR, + MAIN_BUTTON_FONT_SIZE, + OPACITY_ON_BUTTON_PRESS +) + +############# +### Class ### +############# + + +class ActButton(ButtonBehavior, RelativeLayout): + """ + A custom button with a white round rectangle background. + """ + + background_color = CUSTOM_BUTTON_BACKGROUND_COLOR + act_title = StringProperty() + completion_text = StringProperty() + font_size = NumericProperty() + nb_levels = NumericProperty() + nb_completed_levels = NumericProperty() + stars_number = NumericProperty() + + def __init__( + self, + text_font_name=PATH_TEXT_FONT, + font_size=MAIN_BUTTON_FONT_SIZE, + release_function=lambda: 1 + 1, + **kwargs): + super().__init__(**kwargs) + self.release_function = release_function + self.always_release = True + self.text_font_name = text_font_name + self.font_size = font_size + self.bind(nb_completed_levels=self.update_nb_completed_levels) + + def update_nb_completed_levels(self, base_widget, value): + self.completion_text = str( + self.nb_completed_levels) + "/" + str(self.nb_levels) + + def on_press(self): + self.opacity = OPACITY_ON_BUTTON_PRESS + + def on_release(self): + self.release_function() + self.opacity = 1 diff --git a/screens/custom_widgets/custom_buttons.py b/screens/custom_widgets/custom_buttons.py index 37fcfb8..720398a 100644 --- a/screens/custom_widgets/custom_buttons.py +++ b/screens/custom_widgets/custom_buttons.py @@ -20,7 +20,8 @@ ) from tools.constants import ( CUSTOM_BUTTON_BACKGROUND_COLOR, - MAIN_BUTTON_FONT_SIZE + MAIN_BUTTON_FONT_SIZE, + OPACITY_ON_BUTTON_PRESS ) ############# @@ -55,7 +56,7 @@ def __init__( self.font_size = font_size def on_press(self): - self.opacity = 0.8 + self.opacity = OPACITY_ON_BUTTON_PRESS def on_release(self): self.release_function() diff --git a/screens/custom_widgets/three_stars.kv b/screens/custom_widgets/three_stars.kv index 1e95718..11dbeed 100644 --- a/screens/custom_widgets/three_stars.kv +++ b/screens/custom_widgets/three_stars.kv @@ -5,45 +5,45 @@ # Star one Image: - id: star_one_contour + id: star_one pos_hint: {"center_x":0.125,"center_y":0.5} size_hint: (0.25,1) - source: PATH_IMAGES + "star.png" + source: PATH_IMAGES + "star_full.png" fit_mode: "contain" + color: root.star_one_color Image: - id: star_one + id: star_one_contour pos_hint: {"center_x":0.125,"center_y":0.5} size_hint: (0.25,1) - source: PATH_IMAGES + "star_full.png" + source: PATH_IMAGES + "star3.png" fit_mode: "contain" - color: root.star_one_color # Star two Image: - id: star_two_contour + id: star_two pos_hint: {"center_x":0.5,"center_y":0.5} size_hint: (0.25,1) - source: PATH_IMAGES + "star.png" + source: PATH_IMAGES + "star_full.png" fit_mode: "contain" + color: root.star_two_color Image: - id: star_two + id: star_two_contour pos_hint: {"center_x":0.5,"center_y":0.5} size_hint: (0.25,1) - source: PATH_IMAGES + "star_full.png" + source: PATH_IMAGES + "star3.png" fit_mode: "contain" - color: root.star_two_color # Star three Image: id: star_three_contour pos_hint: {"center_x":0.875,"center_y":0.5} size_hint: (0.25,1) - source: PATH_IMAGES + "star.png" + source: PATH_IMAGES + "star_full.png" fit_mode: "contain" + color: root.star_three_color Image: id: star_three_contour pos_hint: {"center_x":0.875,"center_y":0.5} size_hint: (0.25,1) - source: PATH_IMAGES + "star_full.png" + source: PATH_IMAGES + "star3.png" fit_mode: "contain" - color: root.star_three_color diff --git a/screens/custom_widgets/three_stars.py b/screens/custom_widgets/three_stars.py index 8c2d0c4..a7574d3 100644 --- a/screens/custom_widgets/three_stars.py +++ b/screens/custom_widgets/three_stars.py @@ -7,7 +7,6 @@ ############### ### Kivy imports ### -from kivy.uix.widget import Widget from kivy.uix.relativelayout import RelativeLayout from kivy.properties import ( NumericProperty, @@ -20,6 +19,9 @@ class ThreeStars(RelativeLayout): + """ + Class to create a widget with three stars that can be turn on and off. + """ star_one_color = ListProperty([0.5, 0.5, 0.5, 1.]) star_two_color = ListProperty([0.5, 0.5, 0.5, 1.]) diff --git a/screens/free_mode.kv b/screens/free_mode.kv index 61de5ae..fded959 100644 --- a/screens/free_mode.kv +++ b/screens/free_mode.kv @@ -24,7 +24,10 @@ pos_hint: {"bottom":0,"left":0} selected: "home" - ThreeStars: + ActButton: size_hint: (0.7,0.15) pos_hint:{"center_x":0.5,"center_y":0.5} - stars_number: 2 \ No newline at end of file + stars_number: 2 + nb_levels: 10 + nb_completed_levels: 8 + act_title: "Act 1 - Tutorial" \ No newline at end of file diff --git a/tools/constants.py b/tools/constants.py index 5351fce..3961ce6 100644 --- a/tools/constants.py +++ b/tools/constants.py @@ -148,6 +148,7 @@ def __init__(self) -> None: MAIN_BUTTON_FONT_SIZE = 30 BOTTOM_BAR_HEIGHT = 0.12 CUSTOM_BUTTON_BACKGROUND_COLOR = (1, 1, 1, 0.7) +OPACITY_ON_BUTTON_PRESS = 0.8 ### Musics ###