Reimplement wardrobe's color picker using last (csinc)

This commit is contained in:
Gouvernathor 2023-11-21 21:24:11 +01:00
parent a9bf2a637e
commit 0712f0e251
3 changed files with 49 additions and 44 deletions

View File

@ -323,11 +323,11 @@ init python:
return Transform(img, maxsize=maxsize, matrixcolor=SepiaMatrix(c, desat=average)*OpacityMatrix(c.alpha)) return Transform(img, maxsize=maxsize, matrixcolor=SepiaMatrix(c, desat=average)*OpacityMatrix(c.alpha))
except TypeError: except TypeError:
print(f"Item doesn't support colors but was supplied with a list; Try removing numbered files in its directory:\n{self.__repr__()}") print(f"Item doesn't support colors but was supplied with a list; Try removing numbered files in its directory:\n{self!r}")
d = At(Frame(Text("TypeErr", color="#ffff00"), tile=True), blink_repeat) d = At(Frame(Text("TypeErr", color="#ffff00"), tile=True), blink_repeat)
return Transform(AlphaMask(d, img)) return Transform(AlphaMask(d, img))
except IndexError: except IndexError:
print(f"Mismatched number of textures and colors; Try reducing number of supplied colours in item definition:\n{self.__repr__()}") print(f"Mismatched number of textures and colors; Try reducing number of supplied colours in item definition:\n{self!r}")
d = At(Frame(Text("IndxErr", color="#ff0000"), tile=True), blink_repeat) d = At(Frame(Text("IndxErr", color="#ff0000"), tile=True), blink_repeat)
return Transform(AlphaMask(d, img)) return Transform(AlphaMask(d, img))
@ -341,34 +341,13 @@ init python:
cp.start_replace(col) cp.start_replace(col)
cp.default_replace(dcol) cp.default_replace(dcol)
renpy.show_screen("colorpickerscreen", self) renpy.dynamic(
color_picker_n=n,
color_picker_item=self,
)
while True: call_screen_in_new_context("colorpickerscreen", self)
try:
action, value = ui.interact()
except:
print(f"{ui.interact()}")
break
if action == "layer":
n = value
col = self.color[value]
dcol = self.color_default[value]
cp.live_replace(col)
cp.start_replace(col)
cp.default_replace(dcol)
elif action == "released":
self.color[n] = value
self.is_stale()
elif action == "replace":
self.color[n] = value
cp.live_replace(value)
self.is_stale()
elif action == "finish":
break
renpy.hide_screen("colorpickerscreen")
elif isinstance(n, list): elif isinstance(n, list):
self.color = [Color( (tuple(x) if isinstance(x, list) else x) ) for x in n] self.color = [Color( (tuple(x) if isinstance(x, list) else x) ) for x in n]
self.is_stale() self.is_stale()

View File

@ -144,7 +144,8 @@ init python:
self.unfocus() self.unfocus()
self.apply() self.apply()
renpy.restart_interaction() renpy.restart_interaction()
return ["released", self.controller.live_color] __released(self.controller.live_color)
raise renpy.IgnoreEvent
if ev.type == pygame.MOUSEMOTION and ev.buttons[0]: if ev.type == pygame.MOUSEMOTION and ev.buttons[0]:
# Dragged # Dragged
@ -393,6 +394,33 @@ init python:
cp = ColorPicker() cp = ColorPicker()
class __Layer(Action):
def __init__(self, value):
self.value = value
def __call__(self):
global color_picker_n
color_picker_n = self.value
col = color_picker_item.color[color_picker_n]
dcol = color_picker_item.color_default[color_picker_n]
cp.live_replace(col)
cp.start_replace(col)
cp.default_replace(dcol)
def __released(value):
color_picker_item.color[color_picker_n] = value
color_picker_item.is_stale()
class __Replace(Action):
def __init__(self, value):
self.value = value
def __call__(self):
color_picker_item.color[color_picker_n] = self.value
cp.live_replace(self.value)
color_picker_item.is_stale()
default colorpicker.history = [] default colorpicker.history = []
default colorpicker.favorites = [Color((167, 77, 42)), Color((237, 179, 14)), Color((89, 116, 194)), Color((216, 163, 10)), Color((58, 115, 75)), Color((205, 205, 206)), Color((251, 198, 10)), Color((51, 43, 54))] + ([Color((255, 255, 255))] * 22) default colorpicker.favorites = [Color((167, 77, 42)), Color((237, 179, 14)), Color((89, 116, 194)), Color((216, 163, 10)), Color((58, 115, 75)), Color((205, 205, 206)), Color((251, 198, 10)), Color((51, 43, 54))] + ([Color((255, 255, 255))] * 22)
@ -426,8 +454,8 @@ screen colorpickerscreen(item=None):
xysize (32, 32) xysize (32, 32)
background col background col
foreground "cp_borders" foreground "cp_borders"
action Return(["layer", i]) action __Layer(i)
alternate Return(["replace", col]) alternate __Replace(col)
text str(i+1) style "colorpicker_innertext" text str(i+1) style "colorpicker_innertext"
hbox: hbox:
@ -461,13 +489,13 @@ screen colorpickerscreen(item=None):
button: button:
xysize (32, 32) xysize (32, 32)
background cp.start_color background cp.start_color
action Return(["replace", cp.start_color]) action __Replace(cp.start_color)
text "Old" style "colorpicker_innertext" size 8 text "Old" style "colorpicker_innertext" size 8
frame: frame:
button: button:
xysize (32, 32) xysize (32, 32)
background cp.default_color background cp.default_color
action Return(["replace", cp.default_color]) action __Replace(cp.default_color)
text "Org" style "colorpicker_innertext" size 8 text "Org" style "colorpicker_innertext" size 8
label "Swatches" label "Swatches"
@ -481,7 +509,7 @@ screen colorpickerscreen(item=None):
button: button:
xysize (12, 12) xysize (12, 12)
background col background col
action Return(["replace", col]) action __Replace(col)
alternate Function(cp.add_favorite, i, cp.live_color) alternate Function(cp.add_favorite, i, cp.live_color)
label "History" label "History"
@ -495,7 +523,7 @@ screen colorpickerscreen(item=None):
button: button:
xysize (12, 12) xysize (12, 12)
background col background col
action Return(["replace", col]) action __Replace(col)
hbox: hbox:
align (1.0, 1.0) align (1.0, 1.0)
@ -505,7 +533,7 @@ screen colorpickerscreen(item=None):
action [Function(item.reset_color), Function(cp.live_replace, cp.default_color)] action [Function(item.reset_color), Function(cp.live_replace, cp.default_color)]
textbutton "Finish": textbutton "Finish":
action Return(["finish", cp.live_color]) action Return()
keysym ["K_ESCAPE", "K_RETURN"] keysym ["K_ESCAPE", "K_RETURN"]
if config.developer: if config.developer:

View File

@ -55,9 +55,7 @@ init python:
if not settings.get("multithreading"): if not settings.get("multithreading"):
return icon return icon
lock = bool(DollThread._count) return gray_tint(icon) if DollThread._count else icon
return gray_tint(icon) if lock else icon
def randomise_wardrobe_color(cloth): def randomise_wardrobe_color(cloth):
@ -672,7 +670,7 @@ screen wardrobe_menu(xx, yy):
background lock_wardrobe_icon(icon) background lock_wardrobe_icon(icon)
activate_sound "sounds/scroll.ogg" activate_sound "sounds/scroll.ogg"
tooltip category tooltip category
sensitive (not bool(DollThread._count)) sensitive (not DollThread._count)
action Call("wardrobe_actions.category", category, from_current=True) action Call("wardrobe_actions.category", category, from_current=True)
if current_category == category: if current_category == category:
xoffset icon_xoffset xoffset icon_xoffset
@ -689,7 +687,7 @@ screen wardrobe_menu(xx, yy):
xysize (72, 72) xysize (72, 72)
background lock_wardrobe_icon(Fixed(icon_bg, Transform("interface/wardrobe/icons/categories/outfits.webp", zoom=0.45, anchor=(0.5, 0.5), align=(0.5, 0.5)), icon_frame)) background lock_wardrobe_icon(Fixed(icon_bg, Transform("interface/wardrobe/icons/categories/outfits.webp", zoom=0.45, anchor=(0.5, 0.5), align=(0.5, 0.5)), icon_frame))
tooltip "Outfits Manager" tooltip "Outfits Manager"
sensitive (not bool(DollThread._count)) sensitive (not DollThread._count)
action Call("wardrobe_actions.category", "outfit", from_current=True) action Call("wardrobe_actions.category", "outfit", from_current=True)
if current_category == "outfits": if current_category == "outfits":
yoffset icon_yoffset yoffset icon_yoffset
@ -808,7 +806,7 @@ screen wardrobe_menuitem(xx, yy):
selected_background Transform(icon, size=(72, 72), fit="contain", ) selected_background Transform(icon, size=(72, 72), fit="contain", )
selected (subcategory == current_subcategory) selected (subcategory == current_subcategory)
tooltip subcategory tooltip subcategory
sensitive (not bool(DollThread._count)) sensitive (not DollThread._count)
action Call("wardrobe_actions.subcategory", subcategory, from_current=True) action Call("wardrobe_actions.subcategory", subcategory, from_current=True)
# # Item icons # # Item icons
@ -865,7 +863,7 @@ screen wardrobe_outfit_menuitem(xx, yy):
background Transform(icon, alpha=0.65, xsize=72, fit="contain") background Transform(icon, alpha=0.65, xsize=72, fit="contain")
selected_background Transform(icon, xsize=72, fit="contain") selected_background Transform(icon, xsize=72, fit="contain")
selected (subcategory == current_subcategory) selected (subcategory == current_subcategory)
sensitive (not bool(DollThread._count)) sensitive (not DollThread._count)
tooltip subcategory tooltip subcategory
action action action action
@ -892,7 +890,7 @@ screen wardrobe_outfit_menuitem(xx, yy):
insensitive_background "#0000001A" insensitive_background "#0000001A"
idle_background "#00000033" idle_background "#00000033"
text_align (0.5, 0.5) text_align (0.5, 0.5)
sensitive (not bool(DollThread._count)) sensitive (not DollThread._count)
action WardrobeAddOutfit(None) action WardrobeAddOutfit(None)
if current_subcategory == "import": if current_subcategory == "import":