Commit 4253378a authored by dmMaze's avatar dmMaze
Browse files

support dark mode

parent 1f4e287c
Loading
Loading
Loading
Loading
+43 −33
Original line number Diff line number Diff line
QWidget {
    /* border-style: none; */
    color: #5d5d5f;

    color: @qwidgetForegroundColor;
    background-color: @qwidgetBackgroundColor;
}

SeparatorWidget {
    border-color: #b3b6bf;
    border-color: @borderColor;
}

Widget {
    background-color: #ebeef5;
    background-color: @widgetBackgroundColor;
}

CustomGV {
    background-color: #e6e9f0;
    border-color: #b3b6bf;
    background-color: @emptyContentBackgroundColor;
    border-color: @borderColor;
    border-style: solid;
    border-width: 1px;
}

ConfigTable {
    border-color: #b3b6bf;
    border-color: @borderColor;
    border-style: solid;
    border-width: 1px;
    background-color: #e1e4eb
    background-color: @emptyContentBackgroundColor
}

ConfigBlock {
    background-color: #e1e4eb
    background-color: @emptyContentBackgroundColor
}

ConfigSubBlock {
    background-color: #e1e4eb
    background-color: @emptyContentBackgroundColor
}

SearchResultTree {
    border-style: none;
    background-color: #ebeef5;
    background-color: @widgetBackgroundColor;
}

QSplitter:handle {
    background: #ebeef5;
    background: @widgetBackgroundColor;
}

QSplitter::handle:pressed {
@@ -48,20 +48,18 @@ QSplitter::handle:pressed {
}

ConfigSubBlock::hover {
    /* background-color: rgba(200, 215, 255, 50%); */
    background-color: rgba(30, 147, 229, 20%);
}

SourceTextEdit {
    font-size: 17px;
    background-color: #e1e4eb;
    background-color: @emptyContentBackgroundColor;
    border-radius: 7px;
    border-style: none;
}

TransTextEdit {
    font-size: 17px;
    /* background-color: #e1e4eb; */
    border-radius: 7px;
    background-color: whitesmoke;
}
@@ -70,7 +68,19 @@ QComboBox {
    height: 27px;
    font-size: 14px;
    padding-left: 8px;
    border: 1px solid whitesmoke;
    border: 1px solid @borderColor;
}

QLineEdit {
    border: 1px solid @borderColor;
}

QPlainTextEdit {
    border: 1px solid @borderColor;
}

QPlainTextEdit:focus {
    border: 1px solid rgb(30, 147, 229);
 }

QComboBox::drop-down {
@@ -78,7 +88,6 @@ QComboBox::drop-down {
}

QComboBox::hover {
    /* background-color: red; */
    border: 1px solid rgb(30, 147, 229);
}

@@ -95,7 +104,7 @@ QFontComboBox#FontFamilyBox {
    font-size: 14px;
    padding-right: 14px;
    padding-left: 6px;
    border-color: #b3b6bf;
    border-color: @borderColor;
}

QFontComboBox#FontFamilyBox::hover {
@@ -108,7 +117,7 @@ SizeComboBox {
    font-size: 13px;
    min-width: 43px;
    max-width: 43px;
    border-color: #b3b6bf;
    border-color: @borderColor;
}

SizeComboBox::hover {
@@ -144,7 +153,7 @@ ColorPicker {
    min-height: 25px;
    min-width: 25px;
    max-width: 25px;
    border: 2px solid #b3b6bf;
    border: 2px solid @borderColor;
}

ColorPicker::hover {
@@ -158,7 +167,7 @@ AlignmentChecker {
AlignmentChecker::indicator {
    height: 28px;
    width: 28px;
    border: 2px solid #b3b6bf;
    border: 2px solid @borderColor;
}

AlignmentChecker::indicator:checked {
@@ -259,8 +268,8 @@ TextEditListScrollArea {
}

QListWidget {
    background-color: #e1e4eb;
    border-color: #b3b6bf;
    background-color: @emptyContentBackgroundColor;
    border-color: @borderColor;
    border-style: solid;
    border-width: 1px;
}
@@ -270,7 +279,7 @@ QAction {
}

QMenu {
    background-color: #e1e4eb;
    background-color: @emptyContentBackgroundColor;
    margin: 0px; /* some spacing around the menu */
}

@@ -278,7 +287,7 @@ QMenu::item {
    height: 28px;
    width: 342px;
    margin: 0px;
    background-color: #e1e4eb;
    background-color: @emptyContentBackgroundColor;
    padding-left: 32px;
    padding-right: 32px;
}
@@ -291,7 +300,7 @@ QMenu::separator {
}

/* QMenu::item {
    background-color: #e1e4eb;
    background-color: @emptyContentBackgroundColor;
    min-height: 100px;
}*/

@@ -301,11 +310,11 @@ QMenu::item:selected {

QDialog {
    font-size: 7px;
    background-color: #ebeef5;
    background-color: @widgetBackgroundColor;
}

QGroupBox {
    background-color: #e1e4eb;
    background-color: @emptyContentBackgroundColor;
}

QPushButton {
@@ -494,7 +503,7 @@ OpenBtn::pressed {
}

QProgressBar {
    background-color: #e1e4eb;
    background-color: @emptyContentBackgroundColor;
    width: 450px;
    height: 45px;
    max-width: 450px;
@@ -545,6 +554,7 @@ StateChecker#ImgTransChecker::indicator:hover
StateChecker#ImgTransChecker::indicator:checked
{
    image: url(data/icons/leftbar_imgtrans_activate.svg);
    color: red;
}

StateChecker#ConfigChecker::indicator{
@@ -689,7 +699,7 @@ QScrollBar::add-line {

QLabel#TitleLabel {
    font-size: 13px;
    color: #5d5d5f;
    color: @qwidgetForegroundColor;
}

QLabel#angleLabel {
@@ -770,13 +780,13 @@ DrawToolCheckBox#DrawRectTool::indicator:checked {
}

GlobalSearchWidget {
    border-color: #b3b6bf;
    border-color: @borderColor;
    border-style: solid;
    border-width: 1px;
}

QScrollArea {
    border-color: #b3b6bf;
    border-color: @borderColor;
    border-style: solid;
    border-width: 1px;
}
@@ -871,7 +881,7 @@ TitleBarToolBtn {
    padding-right: 4px;
    border-style: none;
    font-size: 15px;
    color: #6d6d6f;
    color: @titleBarColor;
}

TitleBarToolBtn::hover {
+1 −0
Original line number Diff line number Diff line
@@ -8,6 +8,7 @@ PROGRAM_PATH = osp.dirname(UI_PATH)
LIBS_PATH = osp.join(PROGRAM_PATH, 'data/libs')

STYLESHEET_PATH = osp.join(PROGRAM_PATH, 'data/config/stylesheet.css')
THEME_PATH = osp.join(PROGRAM_PATH, 'data/config/themes.json')
CONFIG_PATH = osp.join(PROGRAM_PATH, 'data/config/config.json')

CONFIG_FONTSIZE_HEADER = 18
+15 −5
Original line number Diff line number Diff line
@@ -11,7 +11,7 @@ from utils.io_utils import json_dump_nested_obj
from utils.text_processing import is_cjk, full_len, half_len
from dl.textdetector import TextBlock

from .misc import pt2px
from .misc import pt2px, parse_stylesheet
from .imgtrans_proj import ProjImgTrans
from .canvas import Canvas
from .configpanel import ConfigPanel
@@ -27,7 +27,6 @@ from .constants import STYLESHEET_PATH, CONFIG_PATH
from .global_search_widget import GlobalSearchWidget
from . import constants as C
from .textedit_commands import GlobalRepalceAllCommand

from .framelesswindow import FramelessWindow

class PageListView(QListWidget):    
@@ -171,8 +170,8 @@ class MainWindow(FramelessWindow):
        self.comicTransSplitter.setStretchFactor(1, 10)

    def setupConfig(self):
        with open(STYLESHEET_PATH, "r", encoding='utf-8') as f:
            self.setStyleSheet(f.read())
        theme = 'eva-dark' if self.config.darkmode else 'eva-light'
        self.setStyleSheet(parse_stylesheet(theme))

        self.bottomBar.originalSlider.setValue(self.config.original_transparency * 100)
        self.drawingPanel.maskTransperancySlider.setValue(self.config.mask_transparency * 100)
@@ -204,6 +203,8 @@ class MainWindow(FramelessWindow):
        self.bottomBar.translatorStatusbtn.clicked.connect(self.translatorStatusBtnPressed)
        self.bottomBar.transTranspageBtn.run_target.connect(self.on_transpagebtn_pressed)

        self.titleBar.darkModeAction.setChecked(self.config.darkmode)

        self.drawingPanel.set_config(self.config.drawpanel)
        self.drawingPanel.initDLModule(dl_manager)

@@ -370,6 +371,7 @@ class MainWindow(FramelessWindow):
        self.titleBar.run_trigger.connect(self.leftBar.runImgtransBtn.click)
        self.titleBar.translate_page_trigger.connect(self.bottomBar.transTranspageBtn.click)
        self.titleBar.fontstyle_trigger.connect(self.show_fontstyle_presets)
        self.titleBar.darkmode_trigger.connect(self.on_darkmode_triggered)

        shortcutTextblock = QShortcut(QKeySequence("W"), self)
        shortcutTextblock.activated.connect(self.shortcutTextblock)
@@ -581,6 +583,8 @@ class MainWindow(FramelessWindow):
            self.saveCurrentPage(update_scene_text=True, restore_interface=True)

    def saveCurrentPage(self, update_scene_text=True, save_proj=True, restore_interface=False, save_rst_only=False):
        if not self.imgtrans_proj.img_valid:
            return
        if update_scene_text:
            self.st_manager.updateTextBlkList()

@@ -820,3 +824,9 @@ class MainWindow(FramelessWindow):
        )
        rt.sceneitem_list = None
        rt.background_list = None

    def on_darkmode_triggered(self):
        self.config.darkmode = self.titleBar.darkModeAction.isChecked()
        theme = 'eva-dark' if self.config.darkmode else 'eva-light'
        css = parse_stylesheet(theme=theme)
        self.setStyleSheet(css)
 No newline at end of file
+6 −0
Original line number Diff line number Diff line
@@ -338,15 +338,21 @@ class TitleBar(Widget):
        texteditAction = QAction(self.tr('Text Editor'), self)
        texteditAction.setShortcut(QKeySequence('T'))
        fontStylePresetAction = QAction(self.tr('Text Style Presets'), self)
        self.darkModeAction = darkModeAction = QAction(self.tr('Dark Mode'), self)
        darkModeAction.setCheckable(True)

        viewMenu = QMenu(self.viewToolBtn)
        viewMenu.addActions([drawBoardAction, texteditAction])
        viewMenu.addSeparator()
        viewMenu.addAction(fontStylePresetAction)
        viewMenu.addSeparator()
        viewMenu.addAction(darkModeAction)
        self.viewToolBtn.setMenu(viewMenu)
        self.viewToolBtn.setPopupMode(QToolButton.InstantPopup)
        self.textedit_trigger = texteditAction.triggered
        self.drawboard_trigger = drawBoardAction.triggered
        self.fontstyle_trigger = fontStylePresetAction.triggered
        self.darkmode_trigger = darkModeAction.triggered

        self.goToolBtn = TitleBarToolBtn(self)
        self.goToolBtn.setText(self.tr('Go'))
+18 −3
Original line number Diff line number Diff line
import cv2, re
import cv2, re, json
import numpy as np
import os.path as osp
from typing import Tuple, Union, List, Dict
from qtpy.QtGui import QPixmap,  QColor, QImage, QTextDocument, QTextCursor

from . import constants
from .constants import DEFAULT_FONT_FAMILY
from .constants import DEFAULT_FONT_FAMILY, STYLESHEET_PATH, THEME_PATH
from utils.io_utils import find_all_imgs, NumpyEncoder, imread, imwrite
from dl.textdetector.textblock import TextBlock

@@ -262,6 +262,7 @@ class ProgramConfig:
        gsearch_whole_word: bool = False,
        gsearch_regex: bool = False,
        gsearch_range: int = 0,
        darkmode: bool = False,
        **kwargs) -> None:

        if isinstance(dl, dict):
@@ -305,6 +306,7 @@ class ProgramConfig:
        self.gsearch_whole_word = gsearch_whole_word
        self.gsearch_regex = gsearch_regex
        self.gsearch_range = gsearch_range
        self.darkmode = darkmode

class LruIgnoreArg:

@@ -386,3 +388,16 @@ def doc_replace_no_shift(doc: QTextDocument, span_list: List, target: str):
        cursor.setPosition(span[1], QTextCursor.MoveMode.KeepAnchor)
        cursor.insertText(target)
    cursor.endEditBlock()

def parse_stylesheet(theme: str = '') -> str:
    with open(STYLESHEET_PATH, "r", encoding='utf-8') as f:
        stylesheet = f.read()
    with open(THEME_PATH, 'r', encoding='utf8') as f:
        theme_dict: Dict = json.loads(f.read())
    if not theme or theme not in theme_dict:
        tgt_theme: Dict = theme_dict[list(theme_dict.keys())[0]]
    else:
        tgt_theme: Dict = theme_dict[theme]
    for key, val in tgt_theme.items():
        stylesheet = stylesheet.replace(key, val)
    return stylesheet
 No newline at end of file