Commit d9e308ba authored by dmMaze's avatar dmMaze
Browse files

support #108

parent e04c1684
Loading
Loading
Loading
Loading
+28 −9
Original line number Diff line number Diff line
@@ -47,6 +47,7 @@ class TextBlock(object):
                 _bounding_rect: List = None,
                 accumulate_color = True,
                 default_stroke_width = 0.2,
                 stroke_decide_by_colordiff: bool = True,
                 font_weight = 50, 
                 _target_lang: str = "",
                 opacity: float = 1.,
@@ -94,6 +95,7 @@ class TextBlock(object):

        self._bounding_rect = _bounding_rect
        self.default_stroke_width = default_stroke_width
        self.stroke_decide_by_colordiff = stroke_decide_by_colordiff
        self.font_weight = font_weight
        self.accumulate_color = accumulate_color

@@ -276,13 +278,29 @@ class TextBlock(object):

        return text.strip()

    def set_font_colors(self, frgb, srgb, accumulate=True):
    def set_font_colors(self, frgb=None, srgb=None, accumulate=True):
        
        num_lines = max(1, len(self.lines))
        if self.accumulate_color != accumulate:
            if self.accumulate_color:
                mul = 1 / num_lines
            else:
                mul = num_lines
            if frgb is None:
                self.fg_r, self.fg_g, self.fg_b = int(self.fg_r * mul), int(self.fg_g * mul), int(self.fg_b * mul)
            if srgb is None:
                self.bg_r, self.bg_g, self.bg_b = int(self.bg_r * mul), int(self.bg_g * mul), int(self.bg_b * mul)
        
        self.accumulate_color = accumulate
        num_lines = len(self.lines) if accumulate and len(self.lines) > 0 else 1

        # set font color
        if frgb is not None:
            frgb = np.array(frgb) * num_lines
            self.fg_r, self.fg_g, self.fg_b = frgb

        # set stroke color  
        if srgb is not None:
            srgb = np.array(srgb) * num_lines
            self.bg_r, self.bg_g, self.bg_b = srgb

@@ -332,10 +350,11 @@ class TextBlock(object):

    @property
    def stroke_width(self):
        if self.stroke_decide_by_colordiff:
            diff = color_difference(*self.get_font_colors())
        if diff > 15:
            return self.default_stroke_width
            if diff < 15:
                return 0
        return self.default_stroke_width

    def adjust_pos(self, dx: int, dy: int):
        self.xyxy[0] += dx
+12 −4
Original line number Diff line number Diff line
@@ -341,14 +341,18 @@ class ConfigPanel(Widget):
        
        self.let_fntsize_combox, letblk_0 = generalConfigPanel.addCombobox([dec_program_str, use_global_str], self.tr('font size'))
        self.let_fntsize_combox.currentIndexChanged.connect(self.on_fntsize_flag_changed)
        self.let_fntstroke_combox, _ = generalConfigPanel.addCombobox([dec_program_str, use_global_str], self.tr('stroke'), target_block=letblk_0)
        self.let_fntstroke_combox, _ = generalConfigPanel.addCombobox([dec_program_str, use_global_str], self.tr('stroke size'), target_block=letblk_0)
        self.let_fntstroke_combox.currentIndexChanged.connect(self.on_fntstroke_flag_changed)
        self.let_fntcolor_combox, letblk_1 = generalConfigPanel.addCombobox([dec_program_str, use_global_str], self.tr('font & stroke color'))
        
        self.let_fntcolor_combox, letblk_1 = generalConfigPanel.addCombobox([dec_program_str, use_global_str], self.tr('font color'))
        self.let_fntcolor_combox.currentIndexChanged.connect(self.on_fontcolor_flag_changed)
        self.let_alignment_combox, _ = generalConfigPanel.addCombobox([dec_program_str, use_global_str], self.tr('alignment'), target_block=letblk_1)
        self.let_alignment_combox.currentIndexChanged.connect(self.on_alignment_flag_changed)
        self.let_fnt_scolor_combox, _ = generalConfigPanel.addCombobox([dec_program_str, use_global_str], self.tr('stroke color'), target_block=letblk_1)
        self.let_fnt_scolor_combox.currentIndexChanged.connect(self.on_font_scolor_flag_changed)

        self.let_effect_combox, letblk_2 = generalConfigPanel.addCombobox([dec_program_str, use_global_str], self.tr('effect'))
        self.let_effect_combox.currentIndexChanged.connect(self.on_effect_flag_changed)
        self.let_alignment_combox, _ = generalConfigPanel.addCombobox([dec_program_str, use_global_str], self.tr('alignment'), target_block=letblk_2)
        self.let_alignment_combox.currentIndexChanged.connect(self.on_alignment_flag_changed)

        self.let_autolayout_checker = generalConfigPanel.addCheckBox(self.tr('Auto layout'), 
                discription=self.tr('Split translation into multi-lines according to the extracted balloon region. The font size will be adaptively resized if it is set to \"decide by program.\"'))
@@ -436,6 +440,9 @@ class ConfigPanel(Widget):
    def on_fontcolor_flag_changed(self):
        self.config.let_fntcolor_flag = self.let_fntcolor_combox.currentIndex()

    def on_font_scolor_flag_changed(self):
        self.config.let_fnt_scolor_flag = self.let_fnt_scolor_combox.currentIndex()

    def on_alignment_flag_changed(self):
        self.config.let_alignment_flag = self.let_alignment_combox.currentIndex()

@@ -482,6 +489,7 @@ class ConfigPanel(Widget):
        self.let_fntsize_combox.setCurrentIndex(config.let_fntsize_flag)
        self.let_fntstroke_combox.setCurrentIndex(config.let_fntstroke_flag)
        self.let_fntcolor_combox.setCurrentIndex(config.let_fntcolor_flag)
        self.let_fnt_scolor_combox.setCurrentIndex(config.let_fnt_scolor_flag)
        self.let_alignment_combox.setCurrentIndex(config.let_alignment_flag)
        self.let_autolayout_checker.setChecked(config.let_autolayout_flag)
        self.selectext_minimenu_checker.setChecked(config.textselect_mini_menu)
+5 −1
Original line number Diff line number Diff line
@@ -873,6 +873,7 @@ class MainWindow(FramelessWindow):
        override_fnt_size = self.config.let_fntsize_flag == 1
        override_fnt_stroke = self.config.let_fntstroke_flag == 1
        override_fnt_color = self.config.let_fntcolor_flag == 1
        override_fnt_scolor = self.config.let_fnt_scolor_flag == 1
        override_alignment = self.config.let_alignment_flag == 1
        override_effect = self.config.let_fnteffect_flag == 1
        gf = self.textPanel.formatpanel.global_format
@@ -882,8 +883,11 @@ class MainWindow(FramelessWindow):
                blk.font_size = pt2px(gf.size)
            if override_fnt_stroke:
                blk.default_stroke_width = gf.stroke_width
                blk.stroke_decide_by_colordiff = False
            if override_fnt_color:
                blk.set_font_colors(gf.frgb, gf.srgb, accumulate=False)
                blk.set_font_colors(frgb=gf.frgb, accumulate=False)
            if override_fnt_scolor:
                blk.set_font_colors(srgb=gf.srgb, accumulate=False)
            if override_alignment:
                blk._alignment = gf.alignment
            if override_effect:
+2 −0
Original line number Diff line number Diff line
@@ -259,6 +259,7 @@ class ProgramConfig:
        let_fntsize_flag: int = 0,
        let_fntstroke_flag: int = 0,
        let_fntcolor_flag: int = 0,
        let_fnt_scolor_flag: int = 0,
        let_fnteffect_flag: int = 1,
        let_alignment_flag: int = 0,
        let_autolayout_flag: bool = True,
@@ -311,6 +312,7 @@ class ProgramConfig:
        self.let_fntsize_flag = let_fntsize_flag
        self.let_fntstroke_flag = let_fntstroke_flag
        self.let_fntcolor_flag = let_fntcolor_flag
        self.let_fnt_scolor_flag = let_fnt_scolor_flag
        self.let_fnteffect_flag = let_fnteffect_flag
        self.let_alignment_flag = let_alignment_flag
        self.let_autolayout_flag = let_autolayout_flag