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