👍️[Update] Model : overlayのUIの動作に連動するようにCallbackを設定(未検証)
This commit is contained in:
@@ -103,9 +103,9 @@ def sendMicMessage(message):
|
||||
|
||||
# if config.ENABLE_OVERLAY_SMALL_LOG is True:
|
||||
# overlay_image = model.createOverlayImageShort(message, translation)
|
||||
# model.setOverlayImage(overlay_image)
|
||||
# model.updateOverlay(overlay_image)
|
||||
# overlay_image = model.createOverlayImageLong("send", message, translation)
|
||||
# model.setOverlayImage(overlay_image)
|
||||
# model.updateOverlay(overlay_image)
|
||||
|
||||
def startTranscriptionSendMessage():
|
||||
model.startMicTranscript(sendMicMessage, view.printToTextbox_TranscriptionSendNoDeviceError)
|
||||
@@ -166,9 +166,9 @@ def receiveSpeakerMessage(message):
|
||||
|
||||
if config.ENABLE_OVERLAY_SMALL_LOG is True:
|
||||
overlay_image = model.createOverlayImageShort(message, translation)
|
||||
model.setOverlayImage(overlay_image)
|
||||
model.updateOverlay(overlay_image)
|
||||
# overlay_image = model.createOverlayImageLong("receive", message, translation)
|
||||
# model.setOverlayImage(overlay_image)
|
||||
# model.updateOverlay(overlay_image)
|
||||
|
||||
# ------------Speaker2Chatbox------------
|
||||
if config.ENABLE_SPEAKER2CHATBOX is True:
|
||||
@@ -247,9 +247,9 @@ def sendChatMessage(message):
|
||||
|
||||
# if config.ENABLE_OVERLAY_SMALL_LOG is True:
|
||||
# overlay_image = model.createOverlayImageShort(message, translation)
|
||||
# model.setOverlayImage(overlay_image)
|
||||
# model.updateOverlay(overlay_image)
|
||||
# overlay_image = model.createOverlayImageLong("send", message, translation)
|
||||
# model.setOverlayImage(overlay_image)
|
||||
# model.updateOverlay(overlay_image)
|
||||
|
||||
# update textbox message log (Sent)
|
||||
view.printToTextbox_SentMessage(message, translation)
|
||||
@@ -866,11 +866,9 @@ def callbackSetOverlaySettings(value, set_type:str):
|
||||
config.OVERLAY_SETTINGS = pre_settings
|
||||
match (set_type):
|
||||
case "opacity":
|
||||
pass
|
||||
# update?
|
||||
model.updateOverlayImageOpacity()
|
||||
case "ui_scaling":
|
||||
pass
|
||||
# update?
|
||||
model.updateOverlayImageUiScaling()
|
||||
|
||||
def callbackSetEnableOverlaySmallLog(value):
|
||||
print("callbackSetEnableOverlaySmallLog", value)
|
||||
@@ -887,14 +885,11 @@ def callbackSetOverlaySmallLogSettings(value, set_type:str):
|
||||
case "y_pos":
|
||||
model.updateOverlayPosition()
|
||||
case "depth":
|
||||
pass
|
||||
# update?
|
||||
model.updateOverlayPosition()
|
||||
case "display_duration":
|
||||
pass
|
||||
# update?
|
||||
model.updateOverlayTimes()
|
||||
case "fadeout_duration":
|
||||
pass
|
||||
# update?
|
||||
model.updateOverlayTimes()
|
||||
|
||||
# Others Tab
|
||||
def callbackSetEnableAutoClearMessageBox(value):
|
||||
|
||||
67
model.py
67
model.py
@@ -72,8 +72,18 @@ class Model:
|
||||
self.previous_receive_message = ""
|
||||
self.translator = Translator()
|
||||
self.keyword_processor = KeywordProcessor()
|
||||
self.overlay = Overlay()
|
||||
self.overlay_image = OverlayImage()
|
||||
self.overlay = Overlay(
|
||||
config.OVERLAY_SMALL_LOG_SETTINGS["x_pos"],
|
||||
config.OVERLAY_SMALL_LOG_SETTINGS["y_pos"],
|
||||
config.OVERLAY_SMALL_LOG_SETTINGS["depth"],
|
||||
config.OVERLAY_SMALL_LOG_SETTINGS["display_duration"],
|
||||
config.OVERLAY_SMALL_LOG_SETTINGS["fadeout_duration"],
|
||||
)
|
||||
self.overlay_image = OverlayImage(
|
||||
config.OVERLAY_SETTINGS["opacity"],
|
||||
config.OVERLAY_SETTINGS["ui_scaling"],
|
||||
)
|
||||
self.pre_overlay_message = None
|
||||
self.th_overlay = None
|
||||
|
||||
def checkCTranslatorCTranslate2ModelWeight(self):
|
||||
@@ -563,6 +573,13 @@ class Model:
|
||||
your_language = config.TARGET_LANGUAGE
|
||||
target_language = config.SOURCE_LANGUAGE
|
||||
ui_type = config.OVERLAY_UI_TYPE
|
||||
self.pre_overlay_message = {
|
||||
"message" : message,
|
||||
"your_language" : your_language,
|
||||
"translation" : translation,
|
||||
"target_language" : target_language,
|
||||
"ui_type" : ui_type,
|
||||
}
|
||||
return self.overlay_image.createOverlayImageShort(message, your_language, translation, target_language, ui_type)
|
||||
|
||||
# def createOverlayImageLong(self, message_type, message, translation):
|
||||
@@ -571,6 +588,10 @@ class Model:
|
||||
# return self.overlay_image.create_overlay_image_long(message_type, message, your_language, translation, target_language)
|
||||
|
||||
def setOverlayImage(self, img):
|
||||
if self.overlay.initFlag is True:
|
||||
self.overlay.uiManager.setImage(img)
|
||||
|
||||
def updateOverlay(self, img):
|
||||
if self.overlay.initFlag is True:
|
||||
self.overlay.uiManager.uiUpdate(img)
|
||||
|
||||
@@ -588,8 +609,46 @@ class Model:
|
||||
self.th_overlay = None
|
||||
|
||||
def updateOverlayPosition(self):
|
||||
pos = (config.OVERLAY_SMALL_LOG_SETTINGS["x_pos"], config.OVERLAY_SMALL_LOG_SETTINGS["y_pos"])
|
||||
if self.overlay.initFlag is True:
|
||||
self.overlay.uiManager.posUpdate(pos)
|
||||
pos = (config.OVERLAY_SMALL_LOG_SETTINGS["x_pos"], config.OVERLAY_SMALL_LOG_SETTINGS["y_pos"])
|
||||
self.overlay.uiManager.setPosition(pos)
|
||||
depth = config.OVERLAY_SMALL_LOG_SETTINGS["depth"]
|
||||
self.overlay.uiManager.setDepth(depth)
|
||||
self.overlay.uiManager.posUpdate()
|
||||
|
||||
def updateOverlayTimes(self):
|
||||
if self.overlay.initFlag is True:
|
||||
display_duration = config.OVERLAY_SMALL_LOG_SETTINGS["display_duration"]
|
||||
self.overlay.uiManager.setFadeTime(display_duration)
|
||||
fadeout_duration = config.OVERLAY_SMALL_LOG_SETTINGS["fadeout_duration"]
|
||||
self.overlay.uiManager.setFadeInterval(fadeout_duration)
|
||||
self.overlay.uiManager.update()
|
||||
|
||||
def updateOverlayImageOpacity(self):
|
||||
if self.overlay.initFlag is True:
|
||||
opacity = config.OVERLAY_SETTINGS["opacity"]
|
||||
self.overlay_image.setOpacity(opacity)
|
||||
if self.pre_overlay_message is not None:
|
||||
img = self.overlay_image.createOverlayImageShort(
|
||||
self.pre_overlay_message["message"],
|
||||
self.pre_overlay_message["your_language"],
|
||||
self.pre_overlay_message["translation"],
|
||||
self.pre_overlay_message["target_language"],
|
||||
self.pre_overlay_message["ui_type"]
|
||||
)
|
||||
self.overlay.uiManager.setImage(img)
|
||||
|
||||
def updateOverlayImageUiScaling(self):
|
||||
if self.overlay.initFlag is True:
|
||||
ui_scaling = config.OVERLAY_SETTINGS["ui_scaling"]
|
||||
self.overlay_image.setUiScaling(ui_scaling)
|
||||
if self.pre_overlay_message is not None:
|
||||
img = self.overlay_image.createOverlayImageShort(
|
||||
self.pre_overlay_message["message"],
|
||||
self.pre_overlay_message["your_language"],
|
||||
self.pre_overlay_message["translation"],
|
||||
self.pre_overlay_message["target_language"],
|
||||
self.pre_overlay_message["ui_type"]
|
||||
)
|
||||
self.overlay.uiManager.setImage(img)
|
||||
model = Model()
|
||||
@@ -59,7 +59,7 @@ class UIElement:
|
||||
def setTransparency(self, a):
|
||||
self.overlay.setOverlayAlpha(self.handle, a)
|
||||
|
||||
def setPosition(self, pos):
|
||||
def updatePosition(self, pos):
|
||||
"""
|
||||
pos is a 2-tuple representing normalized (x, y)
|
||||
"""
|
||||
@@ -76,6 +76,13 @@ class UIElement:
|
||||
self.transform
|
||||
)
|
||||
|
||||
def setPosition(self, pos):
|
||||
self.settings["Normalized_icon_X_position"] = pos[0]
|
||||
self.settings["Normalized_icon_Y_position"] = pos[1]
|
||||
|
||||
def setDepth(self, depth):
|
||||
self.settings["Icon_plane_depth"] = depth
|
||||
|
||||
class UIManager:
|
||||
def __init__(self, overlay_key, overlay_name, settings):
|
||||
self.overlay = openvr.IVROverlay()
|
||||
@@ -93,8 +100,11 @@ class UIManager:
|
||||
if self.settings['Fade_interval'] != 0:
|
||||
self.evaluateTransparencyFade(self.overlayUI, self.lastUpdate, currTime)
|
||||
|
||||
def uiUpdate(self, img):
|
||||
def setImage(self, img):
|
||||
self.overlayUI.setImage(img)
|
||||
|
||||
def uiUpdate(self, img):
|
||||
self.setImage(img)
|
||||
self.overlayUI.setTransparency(self.settings['Transparency'])
|
||||
self.lastUpdate = time.monotonic()
|
||||
|
||||
@@ -107,21 +117,33 @@ class UIManager:
|
||||
|
||||
ui.setTransparency(fadeRatio * self.settings['Transparency'])
|
||||
|
||||
def posUpdate(self, pos):
|
||||
def posUpdate(self):
|
||||
self.overlayUI.updatePosition()
|
||||
|
||||
def setPosition(self, pos):
|
||||
self.overlayUI.setPosition(pos)
|
||||
|
||||
def setDepth(self, depth):
|
||||
self.overlayUI.setDepth(depth)
|
||||
|
||||
def setFadeTime(self, fade_time):
|
||||
self.settings["Fade_time"] = fade_time
|
||||
|
||||
def setFadeInterval(self, fade_interval):
|
||||
self.settings["Fade_interval"] = fade_interval
|
||||
|
||||
class Overlay:
|
||||
def __init__(self):
|
||||
def __init__(self, x, y , depth, fade_time, fade_interval):
|
||||
self.initFlag = False
|
||||
settings = {
|
||||
"Color": [1, 1, 1],
|
||||
"Transparency": 1,
|
||||
"Normalized_icon_X_position": 0.0,
|
||||
"Normalized_icon_Y_position": -0.41,
|
||||
"Icon_plane_depth": 1,
|
||||
"Normalized_icon_X_position": x,
|
||||
"Normalized_icon_Y_position": y,
|
||||
"Icon_plane_depth": depth,
|
||||
"Normalized_icon_width": 1,
|
||||
"Fade_time": 5,
|
||||
"Fade_interval": 2,
|
||||
"Fade_time": fade_time,
|
||||
"Fade_interval": fade_interval,
|
||||
}
|
||||
self.settings = settings
|
||||
|
||||
|
||||
@@ -4,10 +4,6 @@ from typing import Tuple
|
||||
from PIL import Image, ImageDraw, ImageFont
|
||||
|
||||
class OverlayImage:
|
||||
WIDTH = 1920//2
|
||||
HEIGHT = 46//2
|
||||
FONT_SIZE_SHORT = HEIGHT
|
||||
|
||||
# TEXT_COLOR_LARGE = (223, 223, 223)
|
||||
# TEXT_COLOR_SMALL = (190, 190, 190)
|
||||
# TEXT_COLOR_SEND = (70, 161, 146)
|
||||
@@ -22,8 +18,9 @@ class OverlayImage:
|
||||
"Chinese Traditional": "NotoSansTC-Regular",
|
||||
}
|
||||
|
||||
def __init__(self):
|
||||
self.log_data = []
|
||||
def __init__(self, opacity, ui_scaling):
|
||||
self.opacity = int(opacity*255)
|
||||
self.ui_scaling = ui_scaling
|
||||
|
||||
@staticmethod
|
||||
def concatenateImagesVertically(img1: Image, img2: Image) -> Image:
|
||||
@@ -142,23 +139,29 @@ class OverlayImage:
|
||||
# img = Image.alpha_composite(background, img)
|
||||
# return img
|
||||
|
||||
def setOpacity(self, opacity):
|
||||
self.opacity = int(opacity*255)
|
||||
|
||||
def setUiScaling(self, ui_scaling):
|
||||
self.ui_scaling = ui_scaling
|
||||
|
||||
def getUiSize(self):
|
||||
return {
|
||||
"width": 960,
|
||||
"height": 23,
|
||||
"font_size": 23,
|
||||
"width": int(960*self.ui_scaling),
|
||||
"height": int(23*self.ui_scaling),
|
||||
"font_size": int(23*self.ui_scaling),
|
||||
}
|
||||
|
||||
def getUiColors(self, ui_type):
|
||||
match ui_type:
|
||||
case "default":
|
||||
background_color = (41, 42, 45, 240)
|
||||
background_outline_color = (41, 42, 45, 240)
|
||||
text_color = (223, 223, 223)
|
||||
background_color = (41, 42, 45, self.opacity)
|
||||
background_outline_color = (41, 42, 45, self.opacity)
|
||||
text_color = (223, 223, 223, self.opacity)
|
||||
case "sakura":
|
||||
background_color = (225, 40, 30, 80)
|
||||
background_outline_color = (255, 255, 255, 200)
|
||||
text_color = (223, 223, 223)
|
||||
background_color = (225, 40, 30, self.opacity)
|
||||
background_outline_color = (255, 255, 255, self.opacity)
|
||||
text_color = (223, 223, 223, self.opacity)
|
||||
return {
|
||||
"background_color": background_color,
|
||||
"background_outline_color": background_outline_color,
|
||||
|
||||
Reference in New Issue
Block a user