Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 10 additions & 8 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -66,13 +66,14 @@ jobs:
run: |
sudo apt-get update
sudo apt-get install -y libunarr-dev libgl-dev libgles2-mesa-dev \
libfontconfig1-dev libfreetype-dev libxkbcommon-dev libpoppler-qt6-dev
libfontconfig1-dev libfreetype-dev libxkbcommon-dev libpoppler-qt6-dev \
libspeechd-dev

- name: Install Qt
uses: jurplel/install-qt-action@v4
with:
version: '6.9.3'
modules: 'qt5compat qtmultimedia qtimageformats qtshadertools'
modules: 'qt5compat qtmultimedia qtimageformats qtshadertools qtspeech'
cache: true

- name: Build
Expand All @@ -98,13 +99,14 @@ jobs:
run: |
sudo apt-get update
sudo apt-get install -y libgl-dev libgles2-mesa-dev \
libfontconfig1-dev libfreetype-dev libxkbcommon-dev libpoppler-qt6-dev
libfontconfig1-dev libfreetype-dev libxkbcommon-dev libpoppler-qt6-dev \
libspeechd-dev

- name: Install Qt
uses: jurplel/install-qt-action@v4
with:
version: '6.9.3'
modules: 'qt5compat qtmultimedia qtimageformats qtshadertools'
modules: 'qt5compat qtmultimedia qtimageformats qtshadertools qtspeech'
cache: true

- name: Build
Expand Down Expand Up @@ -134,7 +136,7 @@ jobs:
- name: Install dependencies
run: |
pip3 install --break-system-packages aqtinstall
python3 -m aqt install-qt mac desktop 6.9.3 -m qt5compat qtmultimedia qtimageformats qtshadertools
python3 -m aqt install-qt mac desktop 6.9.3 -m qt5compat qtmultimedia qtimageformats qtshadertools qtspeech
echo "${{ github.workspace }}/6.9.3/macos/bin" >> $GITHUB_PATH
npm install -g appdmg

Expand Down Expand Up @@ -189,7 +191,7 @@ jobs:
pip install -U pip
pip install aqtinstall
mkdir C:\Qt
python -m aqt install-qt windows desktop 6.9.3 win64_msvc2022_64 -O c:\Qt -m qt5compat qtmultimedia qtimageformats qtshadertools
python -m aqt install-qt windows desktop 6.9.3 win64_msvc2022_64 -O c:\Qt -m qt5compat qtmultimedia qtimageformats qtshadertools qtspeech
dir C:\Qt\6.9.3\msvc2022_64\bin
curl.exe -L --retry 5 --retry-delay 5 --retry-all-errors "https://aka.ms/vs/17/release/vc_redist.x64.exe" -o "%GITHUB_WORKSPACE%\vc_redist.x64.exe"
where iscc
Expand Down Expand Up @@ -333,8 +335,8 @@ jobs:
run: |
pip install aqtinstall
mkdir C:\Qt
python -m aqt install-qt windows desktop 6.9.3 win64_msvc2022_64 -O c:\Qt -m qt5compat qtmultimedia qtimageformats qtshadertools
python -m aqt install-qt windows desktop 6.9.3 win64_msvc2022_arm64_cross_compiled -O c:\Qt -m qt5compat qtmultimedia qtimageformats qtshadertools
python -m aqt install-qt windows desktop 6.9.3 win64_msvc2022_64 -O c:\Qt -m qt5compat qtmultimedia qtimageformats qtshadertools qtspeech
python -m aqt install-qt windows desktop 6.9.3 win64_msvc2022_arm64_cross_compiled -O c:\Qt -m qt5compat qtmultimedia qtimageformats qtshadertools qtspeech
dir C:\Qt\6.9.3\msvc2022_arm64\bin
curl.exe -L --retry 5 --retry-delay 5 --retry-all-errors "https://aka.ms/vs/17/release/vc_redist.arm64.exe" -o "%GITHUB_WORKSPACE%\vc_redist.arm64.exe"
where iscc
Expand Down
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,12 @@ Version counting is based on semantic versioning (Major.Feature.Patch)

### YACReader
* Add support for continuous scroll mode.
* Fix the translator.

### All GUI Apps
* Migrate Flow implementation from OpenGL to QRhi. This is a full new implementation with better performance and compatibility with operating systems and hardware.
* Add light/dark themes support that follow the system configuration.
* Add a theme editor and support for custom themes.

## 9.16.4

Expand Down
1 change: 1 addition & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,7 @@ else()
Sql
Svg
Test
TextToSpeech
Widgets
)
endif()
Expand Down
1 change: 1 addition & 0 deletions YACReader/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ target_link_libraries(YACReader PRIVATE
Qt::Network
Qt::Widgets
Qt::Multimedia
Qt::TextToSpeech
Qt::Svg
Qt::Core5Compat
comic_backend
Expand Down
11 changes: 11 additions & 0 deletions YACReader/themes/builtin_classic.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,17 @@
"shortcutsIcons": {
"iconColor": "#404040"
},
"translator": {
"backgroundColor": "#404040",
"borderColor": "#212121",
"iconColor": "#cccccc",
"inputBackgroundColor": "#2a2a2a",
"inputDarkerBackgroundColor": "#272727",
"primaryTextColor": "#ffffff",
"scrollbarHandleColor": "#dddddd",
"secondaryTextColor": "#e3e3e3",
"selectionBackgroundColor": "#202020"
},
"toolbar": {
"backgroundColor": "#f3f3f3",
"checkedButtonColor": "#cccccc",
Expand Down
11 changes: 11 additions & 0 deletions YACReader/themes/builtin_dark.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,17 @@
"shortcutsIcons": {
"iconColor": "#d0d0d0"
},
"translator": {
"backgroundColor": "#404040",
"borderColor": "#212121",
"iconColor": "#cccccc",
"inputBackgroundColor": "#2a2a2a",
"inputDarkerBackgroundColor": "#272727",
"primaryTextColor": "#ffffff",
"scrollbarHandleColor": "#dddddd",
"secondaryTextColor": "#e3e3e3",
"selectionBackgroundColor": "#202020"
},
"toolbar": {
"backgroundColor": "#202020",
"checkedButtonColor": "#3a3a3a",
Expand Down
11 changes: 11 additions & 0 deletions YACReader/themes/builtin_light.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,17 @@
"shortcutsIcons": {
"iconColor": "#606060"
},
"translator": {
"backgroundColor": "#e8e8e8",
"borderColor": "#cccccc",
"iconColor": "#404040",
"inputBackgroundColor": "#f5f5f5",
"inputDarkerBackgroundColor": "#ebebeb",
"primaryTextColor": "#1a1a1a",
"scrollbarHandleColor": "#909090",
"secondaryTextColor": "#2a2a2a",
"selectionBackgroundColor": "#dcdcdc"
},
"toolbar": {
"backgroundColor": "#f3f3f3",
"checkedButtonColor": "#cccccc",
Expand Down
42 changes: 42 additions & 0 deletions YACReader/themes/theme.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,31 @@ struct ViewerThemeTemplates {
QString infoLabelQSS = "QLabel { color : %1; font-size:%2px; }";
};

struct TranslatorThemeTemplates {
// %1 = track color, %2 = handle color
QString scrollBarQSS = "QScrollBar:vertical { border: none; background: %1; width: 7px; margin: 0 3px 0 0; }"
"QScrollBar::handle:vertical { background: %2; width: 7px; min-height: 20px; }"
"QScrollBar::add-line:vertical { border: none; background: %1; height: 10px; subcontrol-position: bottom; subcontrol-origin: margin; margin: 0 3px 0 0;}"
"QScrollBar::sub-line:vertical { border: none; background: %1; height: 10px; subcontrol-position: top; subcontrol-origin: margin; margin: 0 3px 0 0;}"
"QScrollBar::up-arrow:vertical {border:none;width: 9px;height: 6px;background: url(':/images/folders_view/line-up.png') center top no-repeat;}"
"QScrollBar::down-arrow:vertical {border:none;width: 9px;height: 6px;background: url(':/images/folders_view/line-down.png') center top no-repeat;}"
"QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {background: none; }";
// %1 = background, %2 = text color
QString textEditQSS = "QTextEdit{border:none;background:%1;color:%2; font-size:12px; padding:6px;}";
// %1 = background, %2 = text color, %3 = arrow icon path, %4 = list background, %5 = selection background
QString comboBoxQSS = "QComboBox {border:none;background:%1;color:%2;font-size:12px;font-family:Arial;padding-left:8px;}"
"QComboBox::down-arrow {image: url(%3);}"
"QComboBox::drop-down {border:none; padding-right:10px;}"
"QComboBox QAbstractItemView {border: none; background:%4; color:%2; selection-background-color: %5; outline:none;}"
"QComboBox QAbstractItemView::item {padding-left:8px;}";
// %1 = border color, %2 = background, %3 = text color
QString clearButtonQSS = "QPushButton {border:1px solid %1; background:%2; color:%3; font-family:Arial; font-size:12px; padding-top:5px; padding-bottom:5px;}";
// %1 = text color
QString titleQSS = "QLabel {font-size:18px; font-family:Arial; color:%1;}";
QString resultsTitleQSS = "QLabel {font-family:Arial;font-size:14px;color:%1;}";
QString resultTextQSS = "QLabel {color:%1;font-size:12px;}";
};

struct GoToFlowWidgetThemeTemplates {
QString sliderQSS = "QSlider::groove:horizontal {"
" border: 1px solid %1;"
Expand All @@ -41,6 +66,22 @@ struct GoToFlowWidgetThemeTemplates {
QString labelQSS = "QLabel { color: %1; }";
};

struct TranslatorTheme {
QColor backgroundColor;
QColor inputBackgroundColor;
QString scrollBarQSS;
QString textEditQSS;
QString comboBoxQSS;
QString clearButtonQSS;
QString titleQSS;
QString resultsTitleQSS;
QString resultTextQSS;
QIcon closeIcon;
QIcon speakerIcon;
QIcon searchIcon;
QPixmap fromToPixmap;
};

struct ToolbarTheme {
QString toolbarQSS;

Expand Down Expand Up @@ -147,6 +188,7 @@ struct Theme {
ThemeMeta meta;
QJsonObject sourceJson;

TranslatorTheme translator;
ToolbarTheme toolbar;
ViewerTheme viewer;
GoToFlowWidgetTheme goToFlowWidget;
Expand Down
66 changes: 66 additions & 0 deletions YACReader/themes/theme_factory.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,20 @@ struct ShortcutsIconsParams {
QColor iconColor; // Main icon color (replaces #f0f)
};

struct TranslatorParams {
TranslatorThemeTemplates t;

QColor backgroundColor { 0x40, 0x40, 0x40 };
QColor inputBackgroundColor { 0x2a, 0x2a, 0x2a };
QColor inputDarkerBackgroundColor { 0x27, 0x27, 0x27 };
QColor selectionBackgroundColor { 0x20, 0x20, 0x20 };
QColor primaryTextColor { Qt::white };
QColor secondaryTextColor { 0xe3, 0xe3, 0xe3 };
QColor scrollbarHandleColor { 0xdd, 0xdd, 0xdd };
QColor borderColor { 0x21, 0x21, 0x21 };
QColor iconColor { 0xcc, 0xcc, 0xcc };
};

struct ThemeParams {
ThemeMeta meta;

Expand All @@ -65,6 +79,7 @@ struct ThemeParams {
HelpAboutDialogTheme helpAboutDialogParams;
WhatsNewDialogParams whatsNewDialogParams;
ShortcutsIconsParams shortcutsIconsParams;
TranslatorParams translatorParams;
};

void setToolbarIconPair(QIcon &icon,
Expand Down Expand Up @@ -211,6 +226,43 @@ Theme makeTheme(const ThemeParams &params)
theme.dialogIcons.findFolderIcon = QIcon(renderSvgToPixmap(path, 13, 13, dpr));
}

// Translator
{
const auto &tr = params.translatorParams;
theme.translator.backgroundColor = tr.backgroundColor;
theme.translator.inputBackgroundColor = tr.inputBackgroundColor;
theme.translator.scrollBarQSS = tr.t.scrollBarQSS.arg(
tr.backgroundColor.name(),
tr.scrollbarHandleColor.name());
theme.translator.textEditQSS = tr.t.textEditQSS.arg(
tr.inputBackgroundColor.name(),
tr.primaryTextColor.name());
const QString dropDownArrowPath = recoloredSvgToThemeFile(
":/images/translator/dropDownArrow.svg", tr.iconColor, params.meta.id);
theme.translator.comboBoxQSS = tr.t.comboBoxQSS.arg(
tr.inputBackgroundColor.name(),
tr.primaryTextColor.name(),
dropDownArrowPath,
tr.inputDarkerBackgroundColor.name(),
tr.selectionBackgroundColor.name());
theme.translator.clearButtonQSS = tr.t.clearButtonQSS.arg(
tr.borderColor.name(),
tr.inputBackgroundColor.name(),
tr.primaryTextColor.name());
theme.translator.titleQSS = tr.t.titleQSS.arg(tr.primaryTextColor.name());
theme.translator.resultsTitleQSS = tr.t.resultsTitleQSS.arg(tr.secondaryTextColor.name());
theme.translator.resultTextQSS = tr.t.resultTextQSS.arg(tr.primaryTextColor.name());
theme.translator.closeIcon = QIcon(recoloredSvgToThemeFile(
":/images/translator/close.svg", tr.iconColor, params.meta.id));
theme.translator.speakerIcon = QIcon(recoloredSvgToThemeFile(
":/images/translator/speaker.svg", tr.iconColor, params.meta.id));
theme.translator.searchIcon = QIcon(recoloredSvgToThemeFile(
":/images/translator/translatorSearch.svg", tr.iconColor, params.meta.id));
theme.translator.fromToPixmap = QPixmap(recoloredSvgToThemeFile(
":/images/translator/fromTo.svg", tr.iconColor, params.meta.id));
}
// end Translator

return theme;
}

Expand Down Expand Up @@ -288,6 +340,20 @@ Theme makeTheme(const QJsonObject &json)
p.shortcutsIconsParams.iconColor = colorFromJson(s, "iconColor", p.shortcutsIconsParams.iconColor);
}

if (json.contains("translator")) {
const auto t = json["translator"].toObject();
auto &tp = p.translatorParams;
tp.backgroundColor = colorFromJson(t, "backgroundColor", tp.backgroundColor);
tp.inputBackgroundColor = colorFromJson(t, "inputBackgroundColor", tp.inputBackgroundColor);
tp.inputDarkerBackgroundColor = colorFromJson(t, "inputDarkerBackgroundColor", tp.inputDarkerBackgroundColor);
tp.selectionBackgroundColor = colorFromJson(t, "selectionBackgroundColor", tp.selectionBackgroundColor);
tp.primaryTextColor = colorFromJson(t, "primaryTextColor", tp.primaryTextColor);
tp.secondaryTextColor = colorFromJson(t, "secondaryTextColor", tp.secondaryTextColor);
tp.scrollbarHandleColor = colorFromJson(t, "scrollbarHandleColor", tp.scrollbarHandleColor);
tp.borderColor = colorFromJson(t, "borderColor", tp.borderColor);
tp.iconColor = colorFromJson(t, "iconColor", tp.iconColor);
}

if (json.contains("meta")) {
const auto o = json["meta"].toObject();
p.meta.id = o["id"].toString(p.meta.id);
Expand Down
Loading