From 51b373679efbf87db02d5ecd3752804d78a69009 Mon Sep 17 00:00:00 2001 From: David Ostrovsky Date: Sat, 22 Feb 2014 11:00:56 +0100 Subject: [PATCH] CM3: Add support for dark themes 84a66d82d36d554c1844acff11d1a62f10c174ed added support for light and dark themes, but dark themes weren't enabled, as diff styles have to be adjusted to correspond with dark colors. 101a8c4b65ebee4d54afddad10db05f5b9698ba9 reverted the preparation for dark themes support. This change enables support for subset of dark themes and switch dynamicaly the diff styles to dark colors, when dark theme was selected. Change-Id: Ic220baf8f19366c04520b61e893a0d11912805ef --- .../com/google/gerrit/client/diff/DiffTable.java | 4 +++- .../google/gerrit/client/diff/DiffTable.ui.xml | 8 ++++++++ .../gerrit/client/diff/PreferencesBox.java | 10 ++++++++++ .../google/gerrit/client/diff/SideBySide2.java | 9 +++++++++ .../reviewdb/client/AccountDiffPreference.java | 16 ++++++++++++++++ lib/codemirror/cm3.defs | 3 +++ 6 files changed, 49 insertions(+), 1 deletion(-) diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/DiffTable.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/DiffTable.java index 6d09cecf62..8a64e76094 100644 --- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/DiffTable.java +++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/DiffTable.java @@ -39,6 +39,7 @@ class DiffTable extends Composite { interface DiffTableStyle extends CssResource { String fullscreen(); String intralineBg(); + String dark(); String diff(); String noIntraline(); String activeLine(); @@ -68,7 +69,8 @@ class DiffTable extends Composite { private SideBySide2 parent; private boolean headerVisible; - DiffTable(SideBySide2 parent, PatchSet.Id base, PatchSet.Id revision, String path) { + DiffTable(SideBySide2 parent, PatchSet.Id base, PatchSet.Id revision, + String path) { patchSetSelectBoxA = new PatchSetSelectBox2( parent, DisplaySide.A, revision.getParentKey(), base, path); patchSetSelectBoxB = new PatchSetSelectBox2( diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/DiffTable.ui.xml b/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/DiffTable.ui.xml index 3c2ced95b6..09eacaaea8 100644 --- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/DiffTable.ui.xml +++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/DiffTable.ui.xml @@ -79,6 +79,14 @@ limitations under the License. .noIntraline .a .intralineBg { background-color: #faa; } .noIntraline .b .intralineBg { background-color: #9f9; } + .dark .a .diff { background-color: #400; } + .dark .b .diff { background-color: #444; } + + .dark .a .intralineBg { background-color: #888; } + .dark .b .intralineBg { background-color: #bbb; } + .dark .noIntraline .a .intralineBg { background-color: #400; } + .dark .noIntraline .b .intralineBg { background-color: #444; } + .patchSetNav { background-color: #f7f7f7; line-height: 1; diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/PreferencesBox.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/PreferencesBox.java index b4ac7f2670..ed7c3b6033 100644 --- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/PreferencesBox.java +++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/PreferencesBox.java @@ -302,6 +302,7 @@ class PreferencesBox extends Composite { @UiHandler("theme") void onTheme(ChangeEvent e) { prefs.theme(Theme.valueOf(theme.getValue(theme.getSelectedIndex()))); + view.setThemeStyles(prefs.theme().isDark()); view.operation(new Runnable() { @Override public void run() { @@ -397,5 +398,14 @@ class PreferencesBox extends Composite { theme.addItem( Theme.NEAT.name().toLowerCase(), Theme.NEAT.name()); + theme.addItem( + Theme.MIDNIGHT.name().toLowerCase(), + Theme.MIDNIGHT.name()); + theme.addItem( + Theme.NIGHT.name().toLowerCase(), + Theme.NIGHT.name()); + theme.addItem( + Theme.TWILIGHT.name().toLowerCase(), + Theme.TWILIGHT.name()); } } diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/SideBySide2.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/SideBySide2.java index 78ec0ac88b..364d94cbb5 100644 --- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/SideBySide2.java +++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/SideBySide2.java @@ -482,6 +482,7 @@ public class SideBySide2 extends Screen { } private void display(final CommentsCollections comments) { + setThemeStyles(prefs.theme().isDark()); setShowTabs(prefs.showTabs()); setShowIntraline(prefs.intralineDifference()); if (prefs.showLineNumbers()) { @@ -560,6 +561,14 @@ public class SideBySide2 extends Screen { return diff.intraline_status(); } + void setThemeStyles(boolean d) { + if (d) { + diffTable.addStyleName(DiffTable.style.dark()); + } else { + diffTable.removeStyleName(DiffTable.style.dark()); + } + } + void setShowTabs(boolean b) { if (b) { diffTable.addStyleName(DiffTable.style.showTabs()); diff --git a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/AccountDiffPreference.java b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/AccountDiffPreference.java index 7d73574095..a19ae089eb 100644 --- a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/AccountDiffPreference.java +++ b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/AccountDiffPreference.java @@ -56,10 +56,26 @@ public class AccountDiffPreference { } public static enum Theme { + // Light themes DEFAULT, ECLIPSE, ELEGANT, NEAT, + // Dark themes + MIDNIGHT, + NIGHT, + TWILIGHT; + + public boolean isDark() { + switch (this) { + case MIDNIGHT: + case NIGHT: + case TWILIGHT: + return true; + default: + return false; + } + } } public static AccountDiffPreference createDefault(Account.Id accountId) { diff --git a/lib/codemirror/cm3.defs b/lib/codemirror/cm3.defs index fad003460b..9679b1bef4 100644 --- a/lib/codemirror/cm3.defs +++ b/lib/codemirror/cm3.defs @@ -6,7 +6,10 @@ CM3_CSS = [ CM3_THEMES = [ 'theme/eclipse.css', 'theme/elegant.css', + 'theme/midnight.css', 'theme/neat.css', + 'theme/night.css', + 'theme/twilight.css', ] CM3_JS = [