77from photoshop .api import SolidColor
88from photoshop .api ._artlayer import ArtLayer
99from 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
1213from src .cards import strip_reminder_text
1314from src .enums .layers import LAYERS
1415from src .enums .mtg import Rarity
1516from src .enums .settings import BorderlessTextbox
17+ from src .helpers .adjustments import create_color_layer
1618from 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
2224from src .helpers .effects import apply_fx
2325from src .helpers .layers import get_reference_layer , getLayer , getLayerSet , select_layer
2426from 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