Skip to content

Commit a2fc015

Browse files
authored
Merge pull request #660 from MyreMylar/overlap_theming
Add test 'border_overlap' theming to somewhat control overlapping of shapes and their borders
2 parents 94b1935 + 9db2a81 commit a2fc015

17 files changed

+65
-23
lines changed

pygame_gui/core/drawable_shapes/ellipse_drawable_shape.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,9 @@ def redraw_state(self, state_str: str, add_text: bool = True):
172172
text_colour_state_str = state_str + '_text'
173173
text_shadow_colour_state_str = state_str + '_text_shadow'
174174
image_state_str = state_str + '_image'
175+
border_overlap = 0
176+
if 'border_overlap' in self.theming:
177+
border_overlap = self.theming['border_overlap']
175178

176179
found_shape = None
177180
shape_id = None
@@ -214,25 +217,25 @@ def redraw_state(self, state_str: str, add_text: bool = True):
214217
if isinstance(self.theming[border_colour_state_str], ColourGradient):
215218
shape_surface = self.clear_and_create_shape_surface(bab_surface,
216219
self.border_rect,
217-
0, aa_amount=aa_amount,
220+
border_overlap, aa_amount=aa_amount,
218221
clear=False)
219222
self.theming[border_colour_state_str].apply_gradient_to_surface(shape_surface)
220223
else:
221224
shape_surface = self.clear_and_create_shape_surface(bab_surface,
222225
self.border_rect,
223-
0, aa_amount=aa_amount,
226+
border_overlap, aa_amount=aa_amount,
224227
clear=False)
225228
apply_colour_to_surface(self.theming[border_colour_state_str],
226229
shape_surface)
227230
basic_blit(bab_surface, shape_surface, self.border_rect)
228231
if isinstance(self.theming[bg_colour_state_str], ColourGradient):
229232
shape_surface = self.clear_and_create_shape_surface(bab_surface,
230-
self.background_rect, 1,
233+
self.background_rect, border_overlap,
231234
aa_amount=aa_amount)
232235
self.theming[bg_colour_state_str].apply_gradient_to_surface(shape_surface)
233236
else:
234237
shape_surface = self.clear_and_create_shape_surface(bab_surface,
235-
self.background_rect, 1,
238+
self.background_rect, border_overlap,
236239
aa_amount=aa_amount)
237240
apply_colour_to_surface(self.theming[bg_colour_state_str], shape_surface)
238241

pygame_gui/core/drawable_shapes/rounded_rect_drawable_shape.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,9 @@ def redraw_state(self, state_str: str, add_text: bool = True):
330330
text_shadow_colour_state_str = state_str + '_text_shadow'
331331
bg_col = self.theming[state_str + '_bg']
332332
border_col = self.theming[state_str + '_border']
333+
border_overlap = 0
334+
if 'border_overlap' in self.theming:
335+
border_overlap = self.theming['border_overlap']
333336

334337
found_shape = None
335338
shape_id = None
@@ -378,7 +381,7 @@ def redraw_state(self, state_str: str, add_text: bool = True):
378381
if self.border_width > 0:
379382
shape_surface = self.clear_and_create_shape_surface(bab_surface,
380383
self.border_rect,
381-
0,
384+
border_overlap,
382385
self.shape_corner_radius,
383386
aa_amount=aa_amount,
384387
clear=False)
@@ -391,7 +394,7 @@ def redraw_state(self, state_str: str, add_text: bool = True):
391394

392395
shape_surface = self.clear_and_create_shape_surface(bab_surface,
393396
self.background_rect,
394-
0,
397+
border_overlap,
395398
bg_corner_radii,
396399
aa_amount=aa_amount)
397400

@@ -545,7 +548,8 @@ def create_subtract_surface(self,
545548
self.temp_subtractive_shape = pygame.surface.Surface(subtract_size,
546549
flags=pygame.SRCALPHA,
547550
depth=32)
548-
self.temp_subtractive_shape.fill(pygame.Color('#00000000'))
551+
clear_colour = '#00000000'
552+
self.temp_subtractive_shape.fill(pygame.Color(clear_colour))
549553
RoundedRectangleShape.draw_colourless_rounded_rectangle(corner_radii,
550554
self.temp_subtractive_shape,
551555
int(aa_amount / 2))

pygame_gui/core/ui_element.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ def __init__(self, relative_rect: RectLike,
7979
# Themed parameters
8080
self.shadow_width = None # type: Union[None, int]
8181
self.border_width = None # type: Union[None, int]
82+
self.border_overlap = None # type: Union[None, int]
8283
self.shape_corner_radius: Optional[List[int]] = None
8384

8485
self.tool_tip_text = None
@@ -113,6 +114,7 @@ def __init__(self, relative_rect: RectLike,
113114
# need to expand our rect by the shadow size and adjust position by it as well.
114115
self._check_shape_theming_changed(defaults={'border_width': 1,
115116
'shadow_width': 2,
117+
'border_overlap': 1,
116118
'shape_corner_radius': [2, 2, 2, 2]})
117119
self.relative_rect.width += self.shadow_width * 2
118120
self.relative_rect.height += self.shadow_width * 2
@@ -1308,6 +1310,9 @@ def _check_shape_theming_changed(self, defaults: Dict[str, Any]) -> bool:
13081310
if self._check_misc_theme_data_changed('shadow_width', defaults['shadow_width'], int):
13091311
has_any_changed = True
13101312

1313+
if self._check_misc_theme_data_changed('border_overlap', defaults['border_overlap'], int):
1314+
has_any_changed = True
1315+
13111316
# corner radius
13121317
temp_corner_radius = [0, 0, 0, 0]
13131318
try:

pygame_gui/elements/ui_2d_slider.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,8 @@ def rebuild(self):
156156
"disabled_border": self.disabled_border_colour,
157157
"border_width": self.border_width,
158158
"shadow_width": self.shadow_width,
159-
"shape_corner_radius": self.shape_corner_radius}
159+
"shape_corner_radius": self.shape_corner_radius,
160+
'border_overlap': self.border_overlap}
160161

161162
if self.shape == "rectangle":
162163
self.drawable_shape = RectDrawableShape(self.rect, theming_parameters,
@@ -355,6 +356,7 @@ def rebuild_from_changed_theme_data(self) -> None:
355356

356357
if self._check_shape_theming_changed(defaults={"border_width": 1,
357358
"shadow_width": 2,
359+
"border_overlap": 1,
358360
"shape_corner_radius": [2, 2, 2, 2]}):
359361
has_any_changed = True
360362

pygame_gui/elements/ui_button.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -623,6 +623,7 @@ def rebuild_from_changed_theme_data(self):
623623

624624
if self._check_shape_theming_changed(defaults={'border_width': 1,
625625
'shadow_width': 2,
626+
'border_overlap': 1,
626627
'shape_corner_radius': [2, 2, 2, 2]}):
627628
has_any_changed = True
628629

@@ -747,7 +748,8 @@ def rebuild(self):
747748
'text_horiz_alignment_method': self.text_horiz_alignment_method,
748749
'text_vert_alignment_padding': self.text_vert_alignment_padding,
749750
'shape_corner_radius': self.shape_corner_radius,
750-
'transitions': self.state_transitions}
751+
'transitions': self.state_transitions,
752+
'border_overlap': self.border_overlap}
751753

752754
drawable_shape_rect = self.rect.copy()
753755
if self.dynamic_width:

pygame_gui/elements/ui_drop_down_menu.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,8 @@ def rebuild(self):
8484
'normal_border': self.drop_down_menu_ui.border_colour,
8585
'border_width': self.drop_down_menu_ui.border_width,
8686
'shadow_width': self.drop_down_menu_ui.shadow_width,
87-
'shape_corner_radius': self.drop_down_menu_ui.shape_corner_radius}
87+
'shape_corner_radius': self.drop_down_menu_ui.shape_corner_radius,
88+
'border_overlap': self.drop_down_menu_ui.border_overlap}
8889

8990
shape_rect = self.drop_down_menu_ui.relative_rect
9091
if self.drop_down_menu_ui.shape == 'rectangle':
@@ -457,7 +458,8 @@ def rebuild(self):
457458
'disabled_border': self.drop_down_menu_ui.disabled_border_colour,
458459
'border_width': self.drop_down_menu_ui.border_width,
459460
'shadow_width': self.drop_down_menu_ui.shadow_width,
460-
'shape_corner_radius': self.drop_down_menu_ui.shape_corner_radius}
461+
'shape_corner_radius': self.drop_down_menu_ui.shape_corner_radius,
462+
'border_overlap': self.drop_down_menu_ui.border_overlap}
461463

462464
if self.drop_down_menu_ui.shape == 'rectangle':
463465
self.drop_down_menu_ui.drawable_shape = RectDrawableShape(self.drop_down_menu_ui.rect,
@@ -888,6 +890,7 @@ def rebuild_from_changed_theme_data(self):
888890

889891
if self._check_shape_theming_changed(defaults={'border_width': 1,
890892
'shadow_width': 2,
893+
'border_overlap': 1,
891894
'shape_corner_radius': [2, 2, 2, 2]}):
892895
has_any_changed = True
893896

pygame_gui/elements/ui_form.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,7 @@ def rebuild_from_changed_theme_data(self) -> None:
213213

214214
if self._check_shape_theming_changed(defaults={"border_width": 1,
215215
"shadow_width": 2,
216+
'border_overlap': 1,
216217
"shape_corner_radius": 2}):
217218
has_any_changed = True
218219

@@ -301,7 +302,8 @@ def rebuild(self) -> None:
301302
"normal_image": self.background_image,
302303
"border_width": self.border_width,
303304
"shadow_width": self.shadow_width,
304-
"shape_corner_radius": self.shape_corner_radius}
305+
"shape_corner_radius": self.shape_corner_radius,
306+
'border_overlap': self.border_overlap}
305307

306308
if self.shape == "rectangle":
307309
self.drawable_shape = RectDrawableShape(self.rect, theming_parameters,
@@ -784,6 +786,7 @@ def rebuild_from_changed_theme_data(self) -> None:
784786

785787
if self._check_shape_theming_changed(defaults={"border_width": 1,
786788
"shadow_width": 2,
789+
'border_overlap': 1,
787790
"shape_corner_radius": 2}):
788791
has_any_changed = True
789792

@@ -1025,7 +1028,8 @@ def rebuild(self) -> None:
10251028
"normal_image": self.background_image,
10261029
"border_width": self.border_width,
10271030
"shadow_width": self.shadow_width,
1028-
"shape_corner_radius": self.shape_corner_radius}
1031+
"shape_corner_radius": self.shape_corner_radius,
1032+
'border_overlap': self.border_overlap}
10291033

10301034
if self.shape == "rectangle":
10311035
self.drawable_shape = RectDrawableShape(self.rect, theming_parameters,

pygame_gui/elements/ui_horizontal_scroll_bar.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,8 @@ def rebuild(self):
151151
'disabled_border': self.disabled_border_colour,
152152
'border_width': self.border_width,
153153
'shadow_width': self.shadow_width,
154-
'shape_corner_radius': self.shape_corner_radius}
154+
'shape_corner_radius': self.shape_corner_radius,
155+
'border_overlap': self.border_overlap}
155156

156157
if self.shape == 'rectangle':
157158
self.drawable_shape = RectDrawableShape(self.rect, theming_parameters,
@@ -472,6 +473,7 @@ def rebuild_from_changed_theme_data(self):
472473

473474
if self._check_shape_theming_changed(defaults={'border_width': 1,
474475
'shadow_width': 2,
476+
'border_overlap': 1,
475477
'shape_corner_radius': [2, 2, 2, 2]}):
476478
has_any_changed = True
477479

pygame_gui/elements/ui_horizontal_slider.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,8 @@ def rebuild(self):
154154
'disabled_border': self.disabled_border_colour,
155155
'border_width': self.border_width,
156156
'shadow_width': self.shadow_width,
157-
'shape_corner_radius': self.shape_corner_radius}
157+
'shape_corner_radius': self.shape_corner_radius,
158+
'border_overlap': self.border_overlap}
158159

159160
if self.shape == 'rectangle':
160161
self.drawable_shape = RectDrawableShape(self.rect, theming_parameters,
@@ -414,6 +415,7 @@ def rebuild_from_changed_theme_data(self):
414415

415416
if self._check_shape_theming_changed(defaults={'border_width': 1,
416417
'shadow_width': 2,
418+
'border_overlap': 1,
417419
'shape_corner_radius': [2, 2, 2, 2]}):
418420
has_any_changed = True
419421

pygame_gui/elements/ui_label.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,8 @@ def rebuild(self):
154154
'text_horiz_alignment': self.text_horiz_alignment,
155155
'text_vert_alignment': self.text_vert_alignment,
156156
'text_horiz_alignment_padding': self.text_horiz_alignment_padding,
157-
'text_vert_alignment_padding': self.text_vert_alignment_padding}
157+
'text_vert_alignment_padding': self.text_vert_alignment_padding,
158+
'border_overlap': self.border_overlap}
158159

159160
drawable_shape_rect = self.rect.copy()
160161
if self.dynamic_width:

0 commit comments

Comments
 (0)