Skip to content

Commit beda848

Browse files
committed
Don't fill the art area obscured by the bottom border and hide possible transparencies with a black background layer
1 parent 3c94d21 commit beda848

1 file changed

Lines changed: 54 additions & 3 deletions

File tree

py/borderless_showcase.py

Lines changed: 54 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,20 @@
77
from photoshop.api import SolidColor
88
from photoshop.api._artlayer import ArtLayer
99
from photoshop.api._layerSet import LayerSet
10-
from photoshop.api.enumerations import ElementPlacement
10+
from photoshop.api._selection import Selection
11+
from photoshop.api.enumerations import BlendMode, ElementPlacement, SelectionType
1112

1213
from src.cards import strip_reminder_text
1314
from src.enums.layers import LAYERS
1415
from src.enums.mtg import Rarity
1516
from src.enums.settings import BorderlessTextbox
17+
from src.helpers.adjustments import create_color_layer
1618
from src.helpers.bounds import (
1719
LayerDimensions,
1820
get_group_dimensions,
1921
get_layer_dimensions,
2022
)
21-
from src.helpers.colors import get_pinline_gradient, get_rgb
23+
from src.helpers.colors import get_pinline_gradient, get_rgb, rgb_black
2224
from src.helpers.effects import apply_fx
2325
from src.helpers.layers import get_reference_layer, getLayer, getLayerSet, select_layer
2426
from src.helpers.masks import apply_mask_to_layer_fx
@@ -483,6 +485,40 @@ def pre_render_methods(self) -> list[Callable[[], None]]:
483485

484486
# endregion Frame Details
485487

488+
# region Artwork
489+
490+
@cached_property
491+
def art_fill_selection_hook(
492+
self,
493+
) -> Callable[[ArtLayer, Selection], None] | None:
494+
if (
495+
self.bottom_border_type == "Full"
496+
and self.art_reference
497+
and self.art_reference.name.startswith("Full")
498+
and (overflow_ref := self.textbox_overflow_reference_base)
499+
):
500+
bounds = overflow_ref.bounds
501+
502+
def hook(art_layer: ArtLayer, selection: Selection) -> None:
503+
# Avoid unnecessary filling at edges if the image reaches that far
504+
selection.expand(1)
505+
selection.contract(1)
506+
507+
bounds_art_layer = art_layer.bounds
508+
top_padded = bounds[1] - 2
509+
area = (
510+
(bounds_art_layer[0], top_padded),
511+
(bounds_art_layer[2], top_padded),
512+
(bounds_art_layer[2], bounds[3]),
513+
(bounds_art_layer[0], bounds[3]),
514+
(bounds_art_layer[0], top_padded),
515+
)
516+
selection.select(area, selection_type=SelectionType.ExtendSelection)
517+
518+
return hook
519+
520+
# endregion Artwork
521+
486522
# region Backup
487523

488524
@property
@@ -692,10 +728,14 @@ def textbox_reference_base(self) -> ReferenceLayer | None:
692728
self.textbox_reference_group,
693729
)
694730

731+
@cached_property
732+
def textbox_overflow_reference_base(self) -> ArtLayer | None:
733+
return getLayer(LAYER_NAMES.OVERFLOW_REFERENCE, self.textbox_reference_group)
734+
695735
@cached_property
696736
def textbox_overflow_reference(self) -> ReferenceLayer | None:
697737
"""Text is not allowed to go below the top dimension of this shape."""
698-
ref = getLayer(LAYER_NAMES.OVERFLOW_REFERENCE, self.textbox_reference_group)
738+
ref = self.textbox_overflow_reference_base
699739
if self.is_mdfc and ref and self.mdfc_front_bottom_group:
700740
dims_mdfc = get_layer_dimensions_via_rasterization(
701741
self.mdfc_front_bottom_group
@@ -1937,6 +1977,7 @@ def post_text_methods(self) -> list[Callable[[], None]]:
19371977
def hooks(self) -> list[Callable[[], None]]:
19381978
hooks = super().hooks
19391979
hooks.append(self.hide_layer_effects_with_pinlines_mask)
1980+
hooks.append(self.hide_transparencies)
19401981
return hooks
19411982

19421983
def hide_layer_effects_with_pinlines_mask(self) -> None:
@@ -1945,6 +1986,16 @@ def hide_layer_effects_with_pinlines_mask(self) -> None:
19451986
# in order to ease creating pop-out effects.
19461987
apply_mask_to_layer_fx(self.pinlines_group)
19471988

1989+
def hide_transparencies(self) -> None:
1990+
if self.bottom_border_type == "Full" and self.art_layer:
1991+
# Create a black layer behind everything else in order
1992+
# to ensure that there's no transparency in the final image.
1993+
layer = self.docref.artLayers.add()
1994+
layer.move(self.art_layer, ElementPlacement.PlaceAfter)
1995+
create_color_layer(
1996+
rgb_black(), layer, self.docref, blend_mode=BlendMode.NormalBlend
1997+
)
1998+
19481999
# endregion Hooks
19492000

19502001
# region Transform

0 commit comments

Comments
 (0)