From f66fe6973048e9478a4730f47946b6b3131ec760 Mon Sep 17 00:00:00 2001
From: Paul Webster
Date: Wed, 26 Feb 2014 12:18:45 -0500
Subject: Revert "Bug 355946 - [CSS] "View and Editor Folders" color
preferences don't work"
Some more kinks to be worked out
This reverts commit fb23ca13e5d0318f665fdedf6e0135a2123b1c2f.
Change-Id: I7a7cf25b440a6c14ba9a183ac18ff0ee357aa1a8
---
.../schema/org.eclipse.e4.ui.css.swt.theme.exsd | 42 ---
.../e4/ui/css/swt/dom/CTabFolderElement.java | 42 +--
.../e4/ui/css/swt/dom/CompositeElement.java | 31 +-
.../css2/CSSPropertyBackgroundSWTHandler.java | 25 +-
.../custom/CSSPropertySelectedTabsSWTHandler.java | 18 +-
.../CSSPropertyUnselectedTabsSWTHandler.java | 47 +--
.../CSSPropertye4SelectedTabFillHandler.java | 24 +-
.../e4/ui/internal/css/swt/ICTabRendering.java | 12 +-
.../ui/workbench/renderers/swt/CTabRendering.java | 332 ++-------------------
.../e4/ui/workbench/renderers/swt/WBWRenderer.java | 32 +-
bundles/org.eclipse.ui.themes/css/e4_basestyle.css | 107 +------
.../org.eclipse.ui.themes/css/e4_default_gtk.css | 24 +-
.../org.eclipse.ui.themes/css/e4_default_mac.css | 23 +-
.../css/e4_default_mru_on_win7.css | 23 +-
.../org.eclipse.ui.themes/css/e4_default_win7.css | 23 +-
.../css/e4_default_winxp_blu.css | 23 +-
.../css/e4_default_winxp_olv.css | 25 +-
bundles/org.eclipse.ui.themes/plugin.xml | 6 -
.../ui/internal/dialogs/ViewsPreferencePage.java | 239 ++++-----------
.../registry/IWorkbenchRegistryConstants.java | 10 +-
.../themes/ColorsAndFontsPreferencePage.java | 135 +++------
.../themes/ColorsAndFontsPreferencePage.properties | 1 -
.../swt/ThemeDefinitionChangedHandlerTest.java | 45 +--
23 files changed, 268 insertions(+), 1021 deletions(-)
diff --git a/bundles/org.eclipse.e4.ui.css.swt.theme/schema/org.eclipse.e4.ui.css.swt.theme.exsd b/bundles/org.eclipse.e4.ui.css.swt.theme/schema/org.eclipse.e4.ui.css.swt.theme.exsd
index 9b9bb5688a1..2703b0257fe 100644
--- a/bundles/org.eclipse.e4.ui.css.swt.theme/schema/org.eclipse.e4.ui.css.swt.theme.exsd
+++ b/bundles/org.eclipse.e4.ui.css.swt.theme/schema/org.eclipse.e4.ui.css.swt.theme.exsd
@@ -20,7 +20,6 @@
-
@@ -164,41 +163,6 @@
-
-
-
-
-
- an Eclipse CSS theme id
-
-
-
-
-
-
-
-
-
- an Eclipse legacy Color and Font theme id
-
-
-
-
-
-
-
-
-
- an optional attribute used to better match the themes
-
-
-
-
-
-
-
-
-
@@ -234,12 +198,6 @@ A stylesheet contributed to all Systems:
</stylesheet>
</pre>
</p>
-
-The CSS theme and the legacy Colors and Fonts one association:
-<themeAssociation
- themeId="org.eclipse.e4.ui.css.theme.e4_classic"
- colorAndFontId="org.eclipse.ui.defaultTheme">
-</themeassociation>
diff --git a/bundles/org.eclipse.e4.ui.css.swt/src/org/eclipse/e4/ui/css/swt/dom/CTabFolderElement.java b/bundles/org.eclipse.e4.ui.css.swt/src/org/eclipse/e4/ui/css/swt/dom/CTabFolderElement.java
index 1348f6ffca0..2aefdb8accd 100644
--- a/bundles/org.eclipse.e4.ui.css.swt/src/org/eclipse/e4/ui/css/swt/dom/CTabFolderElement.java
+++ b/bundles/org.eclipse.e4.ui.css.swt/src/org/eclipse/e4/ui/css/swt/dom/CTabFolderElement.java
@@ -17,16 +17,14 @@ import org.eclipse.e4.ui.internal.css.swt.ICTabRendering;
import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Widget;
import org.w3c.dom.Node;
/**
* {@link CSSStylableElement} implementation which wrap SWT {@link CTabFolder}.
- *
+ *
*/
public class CTabFolderElement extends CompositeElement {
- private final static String BACKGROUND_SET_BY_TAB_RENDERER = "bgSetByTabRenderer"; //$NON-NLS-1$
public CTabFolderElement(CTabFolder tabFolder, CSSEngine engine) {
super(tabFolder, engine);
@@ -34,7 +32,7 @@ public class CTabFolderElement extends CompositeElement {
/**
* Compute static pseudo instances.
- *
+ *
*/
@Override
protected void computeStaticPseudoInstances() {
@@ -86,7 +84,6 @@ public class CTabFolderElement extends CompositeElement {
folder.setSelectionBackground((Color) null);
folder.setSelectionForeground((Color) null);
folder.setBackground(null, null);
- resetChildrenBackground(folder);
if (folder.getRenderer() instanceof ICTabRendering) {
ICTabRendering renderer = (ICTabRendering) folder
@@ -97,39 +94,8 @@ public class CTabFolderElement extends CompositeElement {
renderer.setInnerKeyline(null);
renderer.setOuterKeyline(null);
renderer.setShadowColor(null);
- }
- }
-
- private void resetChildrenBackground(Composite composite) {
- for (Control control : composite.getChildren()) {
- resetChildBackground(control);
- if (control instanceof Composite) {
- resetChildrenBackground((Composite) control);
- }
- }
- }
-
- private void resetChildBackground(Control control) {
- Color backgroundSetByRenderer = (Color) control
- .getData(BACKGROUND_SET_BY_TAB_RENDERER);
- if (backgroundSetByRenderer != null) {
- if (control.getBackground() == backgroundSetByRenderer) {
- control.setBackground(null);
- }
- control.setData(BACKGROUND_SET_BY_TAB_RENDERER, null);
- }
- }
-
- public static void setBackgroundOverriddenDuringRenderering(
- Composite composite, Color background) {
- composite.setBackground(background);
- composite.setData(BACKGROUND_SET_BY_TAB_RENDERER, background);
-
- for (Control control : composite.getChildren()) {
- if (!CompositeElement.hasBackgroundOverriddenByCSS(control)) {
- control.setBackground(background);
- control.setData(BACKGROUND_SET_BY_TAB_RENDERER, background);
- }
+ renderer.setActiveToolbarGradient(null, null);
+ renderer.setInactiveToolbarGradient(null, null);
}
}
}
diff --git a/bundles/org.eclipse.e4.ui.css.swt/src/org/eclipse/e4/ui/css/swt/dom/CompositeElement.java b/bundles/org.eclipse.e4.ui.css.swt/src/org/eclipse/e4/ui/css/swt/dom/CompositeElement.java
index b3de7d2ca84..e2892780b8c 100644
--- a/bundles/org.eclipse.e4.ui.css.swt/src/org/eclipse/e4/ui/css/swt/dom/CompositeElement.java
+++ b/bundles/org.eclipse.e4.ui.css.swt/src/org/eclipse/e4/ui/css/swt/dom/CompositeElement.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2014 Angelo Zerr and others.
+ * Copyright (c) 2009, 2010 Angelo Zerr and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -12,29 +12,24 @@ package org.eclipse.e4.ui.css.swt.dom;
import org.eclipse.e4.ui.css.core.dom.CSSStylableElement;
import org.eclipse.e4.ui.css.core.engine.CSSEngine;
-import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Widget;
import org.w3c.dom.Node;
/**
* {@link CSSStylableElement} implementation which wrap SWT {@link Composite}.
- *
+ *
*/
public class CompositeElement extends ControlElement {
- private final static String BACKGROUND_OVERRIDDEN_BY_CSS_MARKER = "bgOverriddenByCSS";
-
+
public CompositeElement(Composite composite, CSSEngine engine) {
super(composite, engine);
}
- @Override
public int getLength() {
return getComposite().getChildren().length;
}
- @Override
public Node item(int index) {
Widget w = getComposite().getChildren()[index];
return getElement(w);
@@ -44,24 +39,4 @@ public class CompositeElement extends ControlElement {
return (Composite) getNativeWidget();
}
- @Override
- public void reset() {
- super.reset();
- Composite composite = getComposite();
-
- if (composite.getData(BACKGROUND_OVERRIDDEN_BY_CSS_MARKER) != null) {
- composite.setData(BACKGROUND_OVERRIDDEN_BY_CSS_MARKER, null);
- }
- }
-
- public static boolean hasBackgroundOverriddenByCSS(Control control) {
- return control.getData(BACKGROUND_OVERRIDDEN_BY_CSS_MARKER) != null;
- }
-
- public static void setBackgroundOverriddenByCSSMarker(Widget widget) {
- if (widget instanceof Composite && !(widget instanceof CTabFolder)) {
- widget.setData(BACKGROUND_OVERRIDDEN_BY_CSS_MARKER, true);
- }
- }
-
}
diff --git a/bundles/org.eclipse.e4.ui.css.swt/src/org/eclipse/e4/ui/css/swt/properties/css2/CSSPropertyBackgroundSWTHandler.java b/bundles/org.eclipse.e4.ui.css.swt/src/org/eclipse/e4/ui/css/swt/properties/css2/CSSPropertyBackgroundSWTHandler.java
index 9b7b1c6d44a..a27c77adbec 100644
--- a/bundles/org.eclipse.e4.ui.css.swt/src/org/eclipse/e4/ui/css/swt/properties/css2/CSSPropertyBackgroundSWTHandler.java
+++ b/bundles/org.eclipse.e4.ui.css.swt/src/org/eclipse/e4/ui/css/swt/properties/css2/CSSPropertyBackgroundSWTHandler.java
@@ -15,7 +15,6 @@ import org.eclipse.e4.ui.css.core.dom.properties.Gradient;
import org.eclipse.e4.ui.css.core.dom.properties.css2.AbstractCSSPropertyBackgroundHandler;
import org.eclipse.e4.ui.css.core.dom.properties.css2.ICSSPropertyBackgroundHandler;
import org.eclipse.e4.ui.css.core.engine.CSSEngine;
-import org.eclipse.e4.ui.css.swt.dom.CompositeElement;
import org.eclipse.e4.ui.css.swt.dom.WidgetElement;
import org.eclipse.e4.ui.css.swt.helpers.CSSSWTColorHelper;
import org.eclipse.e4.ui.css.swt.helpers.CSSSWTImageHelper;
@@ -32,6 +31,7 @@ import org.w3c.dom.css.CSSValue;
public class CSSPropertyBackgroundSWTHandler extends
AbstractCSSPropertyBackgroundHandler {
+
public final static ICSSPropertyBackgroundHandler INSTANCE = new CSSPropertyBackgroundSWTHandler();
@Override
@@ -84,26 +84,18 @@ AbstractCSSPropertyBackgroundHandler {
} else if (widget instanceof Control) {
GradientBackgroundListener.remove((Control) widget);
((Control) widget).setBackground(newColor);
- CompositeElement.setBackgroundOverriddenByCSSMarker(widget);
}
} else if (value.getCssValueType() == CSSValue.CSS_VALUE_LIST) {
Gradient grad = (Gradient) engine.convert(value, Gradient.class,
widget.getDisplay());
- if (widget instanceof CTabItem) {
+ if (widget instanceof CTabItem && "selected".equals(pseudo)) {
CTabFolder folder = ((CTabItem) widget).getParent();
- Color[] colors = CSSSWTColorHelper.getSWTColors(grad,
- folder.getDisplay(), engine);
- int[] percents = CSSSWTColorHelper.getPercents(grad);
-
- if ("selected".equals(pseudo)) {
- folder.setSelectionBackground(colors, percents, true);
- } else {
- folder.setBackground(colors, percents, true);
- }
-
+ folder.setSelectionBackground(
+ CSSSWTColorHelper.getSWTColors(grad, folder.getDisplay(), engine),
+ CSSSWTColorHelper.getPercents(grad),
+ true);
} else if (widget instanceof Control) {
GradientBackgroundListener.handle((Control) widget, grad);
- CompositeElement.setBackgroundOverriddenByCSSMarker(widget);
}
}
}
@@ -148,13 +140,11 @@ AbstractCSSPropertyBackgroundHandler {
}
}
- @Override
public String retrieveCSSPropertyBackgroundAttachment(Object widget,
String pseudo, CSSEngine engine) throws Exception {
return null;
}
- @Override
public String retrieveCSSPropertyBackgroundColor(Object element,
String pseudo, CSSEngine engine) throws Exception {
Widget widget = (Widget) element;
@@ -172,20 +162,17 @@ AbstractCSSPropertyBackgroundHandler {
return engine.convert(color, Color.class, null);
}
- @Override
public String retrieveCSSPropertyBackgroundImage(Object widget,
String pseudo, CSSEngine engine) throws Exception {
// TODO : manage path of Image.
return "none";
}
- @Override
public String retrieveCSSPropertyBackgroundPosition(Object widget,
String pseudo, CSSEngine engine) throws Exception {
return null;
}
- @Override
public String retrieveCSSPropertyBackgroundRepeat(Object widget,
String pseudo, CSSEngine engine) throws Exception {
return null;
diff --git a/bundles/org.eclipse.e4.ui.css.swt/src/org/eclipse/e4/ui/css/swt/properties/custom/CSSPropertySelectedTabsSWTHandler.java b/bundles/org.eclipse.e4.ui.css.swt/src/org/eclipse/e4/ui/css/swt/properties/custom/CSSPropertySelectedTabsSWTHandler.java
index 583f32d3ac4..88ccbce98db 100644
--- a/bundles/org.eclipse.e4.ui.css.swt/src/org/eclipse/e4/ui/css/swt/properties/custom/CSSPropertySelectedTabsSWTHandler.java
+++ b/bundles/org.eclipse.e4.ui.css.swt/src/org/eclipse/e4/ui/css/swt/properties/custom/CSSPropertySelectedTabsSWTHandler.java
@@ -1,9 +1,9 @@
/*******************************************************************************
- * Copyright (c) 2010, 2014 IBM Corporation and others. All rights reserved. This
+ * Copyright (c) 2010, 2012 IBM Corporation and others. All rights reserved. This
* program and the accompanying materials are made available under the terms of
* the Eclipse Public License v1.0 which accompanies this distribution, and is
* available at http://www.eclipse.org/legal/epl-v10.html
- *
+ *
* Contributors: IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.e4.ui.css.swt.properties.custom;
@@ -20,28 +20,22 @@ import org.w3c.dom.css.CSSValue;
public class CSSPropertySelectedTabsSWTHandler extends AbstractCSSPropertySWTHandler {
-
+
public static final ICSSPropertyHandler INSTANCE = new CSSPropertySelectedTabsSWTHandler();
-
+
@Override
protected void applyCSSProperty(Control control, String property,
CSSValue value, String pseudo, CSSEngine engine) throws Exception {
- if (!(control instanceof CTabFolder)) {
- return;
- }
+ if (!(control instanceof CTabFolder)) return;
if (value.getCssValueType() == CSSValue.CSS_VALUE_LIST) {
Gradient grad = (Gradient) engine.convert(value, Gradient.class, control.getDisplay());
CTabFolder folder = ((CTabFolder) control);
- if (grad.getValues().isEmpty()) {
- folder.setSelectionBackground(null, null, true);
- return;
- }
Color[] colors = CSSSWTColorHelper.getSWTColors(grad, folder.getDisplay(), engine);
int[] percents = CSSSWTColorHelper.getPercents(grad);
folder.setSelectionBackground(colors, percents, true);
}
}
-
+
@Override
protected String retrieveCSSProperty(Control control, String property,
diff --git a/bundles/org.eclipse.e4.ui.css.swt/src/org/eclipse/e4/ui/css/swt/properties/custom/CSSPropertyUnselectedTabsSWTHandler.java b/bundles/org.eclipse.e4.ui.css.swt/src/org/eclipse/e4/ui/css/swt/properties/custom/CSSPropertyUnselectedTabsSWTHandler.java
index 005690fc835..a503769d9a6 100644
--- a/bundles/org.eclipse.e4.ui.css.swt/src/org/eclipse/e4/ui/css/swt/properties/custom/CSSPropertyUnselectedTabsSWTHandler.java
+++ b/bundles/org.eclipse.e4.ui.css.swt/src/org/eclipse/e4/ui/css/swt/properties/custom/CSSPropertyUnselectedTabsSWTHandler.java
@@ -3,7 +3,7 @@
* program and the accompanying materials are made available under the terms of
* the Eclipse Public License v1.0 which accompanies this distribution, and is
* available at http://www.eclipse.org/legal/epl-v10.html
- *
+ *
* Contributors: IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.e4.ui.css.swt.properties.custom;
@@ -21,9 +21,7 @@ import org.eclipse.swt.widgets.Control;
import org.w3c.dom.css.CSSValue;
public class CSSPropertyUnselectedTabsSWTHandler extends AbstractCSSPropertySWTHandler {
- private static final String UNSELECTED_TABS_COLOR_PROP = "swt-unselected-tabs-color";
- private static final String DEPRECATED_UNSELECTED_TABS_COLOR_PROP = "unselected-tabs-color";
public static final ICSSPropertyHandler INSTANCE = new CSSPropertyUnselectedTabsSWTHandler();
@@ -33,33 +31,23 @@ public class CSSPropertyUnselectedTabsSWTHandler extends AbstractCSSPropertySWTH
if (!(control instanceof CTabFolder)) {
return;
}
- CTabFolder folder = ((CTabFolder) control);
- CTabFolderRenderer renderer = folder.getRenderer();
- if (!(renderer instanceof ICTabRendering)) {
- return;
- }
-
- if (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE) {
- Color color = (Color) engine.convert(value, Color.class,
- control.getDisplay());
- ((ICTabRendering) renderer).setUnselectedTabsColor(color);
- folder.setBackground(color);
- return;
- }
if (value.getCssValueType() == CSSValue.CSS_VALUE_LIST) {
Gradient grad = (Gradient) engine.convert(value, Gradient.class, control.getDisplay());
- Color[] colors = null;
- int[] percents = null;
- if (!grad.getValues().isEmpty()) {
- colors = CSSSWTColorHelper.getSWTColors(grad,
- control.getDisplay(), engine);
- percents = CSSSWTColorHelper.getPercents(grad);
- }
- if (isUnselectedTabsColorProp(property)) {
- ((ICTabRendering) renderer).setUnselectedTabsColor(colors,
- percents);
- }
+ CTabFolder folder = ((CTabFolder) control);
+ Color[] colors = CSSSWTColorHelper.getSWTColors(grad, folder.getDisplay(), engine);
+ int[] percents = CSSSWTColorHelper.getPercents(grad);
folder.setBackground(colors, percents, true);
+
+ CTabFolderRenderer renderer = ((CTabFolder) control).getRenderer();
+ if (renderer instanceof ICTabRendering) {
+ if ("selected".equals(pseudo)) {
+ ((ICTabRendering) renderer).setActiveToolbarGradient(
+ colors, percents);
+ } else {
+ ((ICTabRendering) renderer)
+ .setInactiveToolbarGradient(colors, percents);
+ }
+ }
}
}
@@ -71,9 +59,4 @@ public class CSSPropertyUnselectedTabsSWTHandler extends AbstractCSSPropertySWTH
return null;
}
- private boolean isUnselectedTabsColorProp(String property) {
- return UNSELECTED_TABS_COLOR_PROP.equals(property)
- || DEPRECATED_UNSELECTED_TABS_COLOR_PROP.equals(property);
- }
-
}
diff --git a/bundles/org.eclipse.e4.ui.css.swt/src/org/eclipse/e4/ui/css/swt/properties/custom/CSSPropertye4SelectedTabFillHandler.java b/bundles/org.eclipse.e4.ui.css.swt/src/org/eclipse/e4/ui/css/swt/properties/custom/CSSPropertye4SelectedTabFillHandler.java
index 7d6d8b0dfa9..b5df60a113a 100644
--- a/bundles/org.eclipse.e4.ui.css.swt/src/org/eclipse/e4/ui/css/swt/properties/custom/CSSPropertye4SelectedTabFillHandler.java
+++ b/bundles/org.eclipse.e4.ui.css.swt/src/org/eclipse/e4/ui/css/swt/properties/custom/CSSPropertye4SelectedTabFillHandler.java
@@ -10,9 +10,7 @@
*******************************************************************************/
package org.eclipse.e4.ui.css.swt.properties.custom;
-import org.eclipse.e4.ui.css.core.dom.properties.Gradient;
import org.eclipse.e4.ui.css.core.engine.CSSEngine;
-import org.eclipse.e4.ui.css.swt.helpers.CSSSWTColorHelper;
import org.eclipse.e4.ui.css.swt.properties.AbstractCSSPropertySWTHandler;
import org.eclipse.e4.ui.internal.css.swt.ICTabRendering;
import org.eclipse.swt.custom.CTabFolder;
@@ -22,7 +20,7 @@ import org.eclipse.swt.widgets.Control;
import org.w3c.dom.css.CSSValue;
public class CSSPropertye4SelectedTabFillHandler extends
-AbstractCSSPropertySWTHandler {
+ AbstractCSSPropertySWTHandler {
@Override
protected void applyCSSProperty(Control control, String property,
@@ -30,22 +28,12 @@ AbstractCSSPropertySWTHandler {
if (!(control instanceof CTabFolder)) {
return;
}
- CTabFolder folder = (CTabFolder) control;
- CTabFolderRenderer renderer = folder.getRenderer();
- if (!(renderer instanceof ICTabRendering)) {
- return;
- }
if (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE) {
- Color newColor = (Color) engine.convert(value, Color.class,
- control.getDisplay());
- ((ICTabRendering) renderer).setSelectedTabFill(newColor);
- } else if (value.getCssValueType() == CSSValue.CSS_VALUE_LIST) {
- Gradient grad = (Gradient) engine.convert(value, Gradient.class,
- control.getDisplay());
- Color[] colors = CSSSWTColorHelper.getSWTColors(grad,
- folder.getDisplay(), engine);
- int[] percents = CSSSWTColorHelper.getPercents(grad);
- ((ICTabRendering) renderer).setSelectedTabFill(colors, percents);
+ Color newColor = (Color) engine.convert(value, Color.class, control.getDisplay());
+ CTabFolderRenderer renderer = ((CTabFolder) control).getRenderer();
+ if (renderer instanceof ICTabRendering) {
+ ((ICTabRendering) renderer).setSelectedTabFill(newColor);
+ }
}
}
diff --git a/bundles/org.eclipse.e4.ui.css.swt/src/org/eclipse/e4/ui/internal/css/swt/ICTabRendering.java b/bundles/org.eclipse.e4.ui.css.swt/src/org/eclipse/e4/ui/internal/css/swt/ICTabRendering.java
index 7fe16bb7809..380856d4e61 100644
--- a/bundles/org.eclipse.e4.ui.css.swt/src/org/eclipse/e4/ui/internal/css/swt/ICTabRendering.java
+++ b/bundles/org.eclipse.e4.ui.css.swt/src/org/eclipse/e4/ui/internal/css/swt/ICTabRendering.java
@@ -4,7 +4,7 @@
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
- *
+ *
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
@@ -15,12 +15,6 @@ import org.eclipse.swt.graphics.Color;
public interface ICTabRendering {
void setSelectedTabFill(Color color);
- void setSelectedTabFill(Color[] colors, int[] percents);
-
- void setUnselectedTabsColor(Color color);
-
- void setUnselectedTabsColor(Color[] colors, int[] percents);
-
void setTabOutline(Color color);
void setInnerKeyline(Color color);
@@ -29,6 +23,10 @@ public interface ICTabRendering {
void setShadowColor(Color color);
+ void setActiveToolbarGradient(Color[] color, int[] percents);
+
+ void setInactiveToolbarGradient(Color[] color, int[] percents);
+
void setCornerRadius(int radius);
void setShadowVisible(boolean visible);
diff --git a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/CTabRendering.java b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/CTabRendering.java
index 43d4cc4ba95..ad7472f8cd6 100644
--- a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/CTabRendering.java
+++ b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/CTabRendering.java
@@ -10,11 +10,6 @@
*******************************************************************************/
package org.eclipse.e4.ui.workbench.renderers.swt;
-import static org.eclipse.e4.ui.css.swt.dom.CTabFolderElement.setBackgroundOverriddenDuringRenderering;
-import static org.eclipse.e4.ui.css.swt.dom.CompositeElement.hasBackgroundOverriddenByCSS;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
import javax.inject.Inject;
import org.eclipse.e4.ui.internal.css.swt.ICTabRendering;
import org.eclipse.swt.SWT;
@@ -30,13 +25,12 @@ import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.graphics.Region;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
@SuppressWarnings("restriction")
public class CTabRendering extends CTabFolderRenderer implements
- ICTabRendering {
+ ICTabRendering {
+
// Constants for circle drawing
final static int LEFT_TOP = 0;
final static int LEFT_BOTTOM = 1;
@@ -76,25 +70,14 @@ public class CTabRendering extends CTabFolderRenderer implements
Color[] inactiveToolbar;
int[] inactivePercents;
boolean active;
-
- Color[] selectedTabFillColors;
- int[] selectedTabFillPercents;
-
- Color[] unselectedTabsColors;
- int[] unselectedTabsPercents;
-
+ Color selectedTabFillColor;
Color tabOutlineColor;
int paddingLeft = 0, paddingRight = 0, paddingTop = 0, paddingBottom = 0;
- private CTabFolderRendererWrapper rendererWrapper;
- private CTabFolderWrapper parentWrapper;
-
@Inject
public CTabRendering(CTabFolder parent) {
super(parent);
- parentWrapper = new CTabFolderWrapper(parent);
- rendererWrapper = new CTabFolderRendererWrapper(this);
}
protected Rectangle computeTrim(int part, int state, int x, int y,
@@ -152,6 +135,7 @@ public class CTabRendering extends CTabFolderRenderer implements
case PART_HEADER:
x = x - (INNER_KEYLINE + OUTER_KEYLINE) - sideDropWidth;
width = width + 2 * (INNER_KEYLINE + OUTER_KEYLINE + sideDropWidth);
+
break;
case PART_BORDER:
x = x - INNER_KEYLINE - OUTER_KEYLINE - sideDropWidth
@@ -201,9 +185,6 @@ public class CTabRendering extends CTabFolderRenderer implements
protected void draw(int part, int state, Rectangle bounds, GC gc) {
switch (part) {
- case PART_BACKGROUND:
- this.drawCustomBackground(gc, bounds, state);
- return;
case PART_BODY:
this.drawTabBody(gc, bounds, state);
return;
@@ -271,8 +252,7 @@ public class CTabRendering extends CTabFolderRenderer implements
trim.width = bounds.width - trim.width;
// XXX: The magic numbers need to be cleaned up. See https://bugs.eclipse.org/425777 for details.
- trim.height = (parent.getTabHeight() + (onBottom ? 7 : 4))
- - trim.height;
+ trim.height = (parent.getTabHeight() + (onBottom ? 7 : 4)) - trim.height;
trim.x = -trim.x;
trim.y = onBottom ? bounds.height - parent.getTabHeight() - 1 - header
@@ -371,7 +351,7 @@ public class CTabRendering extends CTabFolderRenderer implements
Rectangle mappedBounds = display
.map(parent, parent.getParent(), bounds);
parent.getParent().drawBackground(gc, bounds.x, bounds.y, bounds.width,
- bounds.height, mappedBounds.x, mappedBounds.y);
+ bounds.height, mappedBounds.x, mappedBounds.y);
// Shadow
if (shadowEnabled)
@@ -478,23 +458,24 @@ public class CTabRendering extends CTabFolderRenderer implements
+ OUTER_KEYLINE), bounds.y + bounds.height);// bounds.height
// +
// 4);
-
+ if (selectedTabFillColor == null)
+ selectedTabFillColor = gc.getDevice().getSystemColor(
+ SWT.COLOR_WHITE);
+ gc.setBackground(selectedTabFillColor);
+ gc.setForeground(selectedTabFillColor);
+ Color gradientTop = null;
Pattern backgroundPattern = null;
- if (selectedTabFillColors == null) {
- setSelectedTabFill(gc.getDevice().getSystemColor(SWT.COLOR_WHITE));
- }
- if (selectedTabFillColors.length == 1) {
- gc.setBackground(selectedTabFillColors[0]);
- gc.setForeground(selectedTabFillColors[0]);
- } else if (!onBottom && selectedTabFillColors.length == 2) {
- // for now we support the 2-colors gradient for selected tab
+ if (!active && !onBottom) {
+ RGB blendColor = gc.getDevice()
+ .getSystemColor(SWT.COLOR_WIDGET_LIGHT_SHADOW).getRGB();
+ RGB topGradient = blend(blendColor, parent.getParent()
+ .getBackground().getRGB(), 40);
+ gradientTop = new Color(gc.getDevice(), topGradient);
backgroundPattern = new Pattern(gc.getDevice(), 0, 0, 0,
- bounds.height + 1, selectedTabFillColors[0],
- selectedTabFillColors[1]);
+ bounds.height + 1, gradientTop, gc.getDevice()
+ .getSystemColor(SWT.COLOR_WHITE));
gc.setBackgroundPattern(backgroundPattern);
- gc.setForeground(selectedTabFillColors[1]);
}
-
int[] tmpPoints = new int[index];
System.arraycopy(points, 0, tmpPoints, 0, index);
gc.fillPolygon(tmpPoints);
@@ -527,16 +508,15 @@ public class CTabRendering extends CTabFolderRenderer implements
if (!onBottom) {
gc.drawLine(startX, 0, endX, 0);
}
- }
+ if (gradientTop != null)
+ gradientTop.dispose();
+ if (backgroundPattern != null)
+ backgroundPattern.dispose();
+ if (gradientLineTop != null)
+ gradientLineTop.dispose();
+ if (foregroundPattern != null)
+ foregroundPattern.dispose();
- if (backgroundPattern != null) {
- backgroundPattern.dispose();
- }
- if (gradientLineTop != null) {
- gradientLineTop.dispose();
- }
- if (foregroundPattern != null) {
- foregroundPattern.dispose();
}
}
@@ -988,22 +968,7 @@ public class CTabRendering extends CTabFolderRenderer implements
}
public void setSelectedTabFill(Color color) {
- setSelectedTabFill(new Color[] { color }, new int[] { 100 });
- }
-
- public void setSelectedTabFill(Color[] colors, int[] percents) {
- selectedTabFillColors = colors;
- selectedTabFillPercents = percents;
- parent.redraw();
- }
-
- public void setUnselectedTabsColor(Color color) {
- setUnselectedTabsColor(new Color[] { color }, new int[] { 100 });
- }
-
- public void setUnselectedTabsColor(Color[] colors, int[] percents) {
- unselectedTabsColors = colors;
- unselectedTabsPercents = percents;
+ this.selectedTabFillColor = color;
parent.redraw();
}
@@ -1030,243 +995,4 @@ public class CTabRendering extends CTabFolderRenderer implements
public void setActive(boolean active) {
this.active = active;
}
-
- private void drawCustomBackground(GC gc, Rectangle bounds, int state) {
- boolean selected = (state & SWT.SELECTED) != 0;
- Color defaultBackground = selected ? parent.getSelectionBackground()
- : parent.getBackground();
- boolean vertical = selected ? parentWrapper
- .isSelectionGradientVertical() : parentWrapper
- .isGradientVertical();
- Rectangle partHeaderBounds = computeTrim(PART_HEADER, state, bounds.x,
- bounds.y, bounds.width, bounds.height);
-
- drawUnselectedTabBackground(gc, partHeaderBounds, state, vertical,
- defaultBackground);
- drawTabBackground(gc, partHeaderBounds, state, vertical,
- defaultBackground);
- drawChildrenBackground(partHeaderBounds);
- }
-
- private void drawUnselectedTabBackground(GC gc, Rectangle partHeaderBounds,
- int state, boolean vertical, Color defaultBackground) {
- if (unselectedTabsColors == null) {
- boolean selected = (state & SWT.SELECTED) != 0;
- unselectedTabsColors = selected ? parentWrapper
- .getSelectionGradientColors() : parentWrapper
- .getGradientColors();
- unselectedTabsPercents = selected ? parentWrapper
- .getSelectionGradientPercents() :
- parentWrapper.getGradientPercents();
- }
- if (unselectedTabsColors == null) {
- unselectedTabsColors = new Color[] { gc.getDevice().getSystemColor(
- SWT.COLOR_WHITE) };
- unselectedTabsPercents = new int[] { 100 };
- }
-
- rendererWrapper.drawBackground(gc, partHeaderBounds.x,
- partHeaderBounds.y - 1, partHeaderBounds.width,
- partHeaderBounds.height, defaultBackground,
- unselectedTabsColors, unselectedTabsPercents, vertical);
- }
-
- private void drawTabBackground(GC gc, Rectangle partHeaderBounds,
- int state, boolean vertical, Color defaultBackground) {
- Color[] colors = selectedTabFillColors;
- int[] percents = selectedTabFillPercents;
-
- if (colors != null && colors.length == 2) {
- colors = new Color[] { colors[1], colors[0] };
- }
- if (colors == null) {
- boolean selected = (state & SWT.SELECTED) != 0;
- colors = selected ? parentWrapper.getSelectionGradientColors() :
- parentWrapper.getGradientColors();
- percents = selected ? parentWrapper.getSelectionGradientPercents() :
- parentWrapper.getGradientPercents();
- }
- if (colors == null) {
- colors = new Color[] { gc.getDevice().getSystemColor(SWT.COLOR_WHITE) };
- percents = new int[] { 100 };
- }
- rendererWrapper.drawBackground(gc, partHeaderBounds.x, partHeaderBounds.height - 1, partHeaderBounds.width,
- parent.getBounds().height, defaultBackground, colors, percents,
- vertical);
- }
-
- private void drawChildrenBackground(Rectangle partHeaderBounds) {
- for (Control control : parent.getChildren()) {
- if (control instanceof Composite
- && !hasBackgroundOverriddenByCSS(control)) {
- drawChildBackground((Composite) control, partHeaderBounds);
- }
- }
- }
-
- private void drawChildBackground(Composite composite,
- Rectangle partHeaderBounds) {
- Rectangle rec = composite.getBounds();
- Color background = null;
- boolean partOfHeader = rec.y >= partHeaderBounds.y
- && rec.y < partHeaderBounds.height;
-
- if (!partOfHeader && selectedTabFillColors != null) {
- background = selectedTabFillColors.length == 2 ? selectedTabFillColors[1]
- : selectedTabFillColors[0];
- }
-
- setBackgroundOverriddenDuringRenderering(composite, background);
- }
-
- private static class CTabFolderRendererWrapper extends
- ReflectionSupport {
- private Method drawBackgroundMethod;
-
- public CTabFolderRendererWrapper(CTabFolderRenderer instance) {
- super(instance);
- }
-
- public void drawBackground(GC gc, int x, int y, int width, int height,
- Color defaultBackground, Color[] colors, int[] percents,
- boolean vertical) {
- if (drawBackgroundMethod == null) {
- drawBackgroundMethod = getMethod("drawBackground", //$NON-NLS-1$
- new Class>[] { GC.class, int[].class, int.class,
- int.class, int.class, int.class, Color.class,
- Image.class, Color[].class, int[].class,
- boolean.class });
- }
- executeMethod(drawBackgroundMethod, new Object[] { gc, null, x, y,
- width, height, defaultBackground, null, colors, percents,
- vertical });
- }
- }
-
- private static class CTabFolderWrapper extends
- ReflectionSupport {
- private Field selectionGradientVerticalField;
-
- private Field gradientVerticalField;
-
- private Field selectionGradientColorsField;
-
- private Field selectionGradientPercentsField;
-
- private Field gradientColorsField;
-
- private Field gradientPercentsField;
-
- public CTabFolderWrapper(CTabFolder instance) {
- super(instance);
- }
-
- public boolean isSelectionGradientVertical() {
- if (selectionGradientVerticalField == null) {
- selectionGradientVerticalField = getField("selectionGradientVertical"); //$NON-NLS-1$
- }
- Boolean result = (Boolean) getFieldValue(selectionGradientVerticalField);
- return result != null ? result : true;
- }
-
- public boolean isGradientVertical() {
- if (gradientVerticalField == null) {
- gradientVerticalField = getField("gradientVertical"); //$NON-NLS-1$
- }
- Boolean result = (Boolean) getFieldValue(gradientVerticalField);
- return result != null ? result : true;
- }
-
- public Color[] getSelectionGradientColors() {
- if (selectionGradientColorsField == null) {
- selectionGradientColorsField = getField("selectionGradientColorsField"); //$NON-NLS-1$
- }
- return (Color[]) getFieldValue(selectionGradientColorsField);
- }
-
- public int[] getSelectionGradientPercents() {
- if (selectionGradientPercentsField == null) {
- selectionGradientPercentsField = getField("selectionGradientPercents"); //$NON-NLS-1$
- }
- return (int[]) getFieldValue(selectionGradientPercentsField);
- }
-
- public Color[] getGradientColors() {
- if (gradientColorsField == null) {
- gradientColorsField = getField("gradientColors"); //$NON-NLS-1$
- }
- return (Color[]) getFieldValue(gradientColorsField);
- }
-
- public int[] getGradientPercents() {
- if (gradientPercentsField == null) {
- gradientPercentsField = getField("gradientPercents"); //$NON-NLS-1$
- }
- return (int[]) getFieldValue(gradientPercentsField);
- }
- }
-
- private static class ReflectionSupport {
- private T instance;
-
- public ReflectionSupport(T instance) {
- this.instance = instance;
- }
-
- protected Object getFieldValue(Field field) {
- Object value = null;
- if (field != null) {
- boolean accessible = field.isAccessible();
- try {
- field.setAccessible(true);
- value = field.get(instance);
- } catch (Exception exc) {
- // do nothing
- } finally {
- field.setAccessible(accessible);
- }
- }
- return value;
- }
-
- protected Field getField(String name) {
- Class> cls = instance.getClass();
- while (!cls.equals(Object.class)) {
- try {
- return cls.getDeclaredField(name);
- } catch (Exception exc) {
- cls = cls.getSuperclass();
- }
- }
- return null;
- }
-
- protected Object executeMethod(Method method, Object... params) {
- Object value = null;
- if (method != null) {
- boolean accessible = method.isAccessible();
- try {
- method.setAccessible(true);
- value = method.invoke(instance, params);
- } catch (Exception exc) {
- // do nothing
- } finally {
- method.setAccessible(accessible);
- }
- }
- return value;
- }
-
- protected Method getMethod(String name, Class>... params) {
- Class> cls = instance.getClass();
- while (!cls.equals(Object.class)) {
- try {
- return cls.getDeclaredMethod(name, params);
- } catch (Exception exc) {
- cls = cls.getSuperclass();
- }
- }
- return null;
- }
- }
}
diff --git a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/WBWRenderer.java b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/WBWRenderer.java
index af80793b9c8..8ae99b2f936 100644
--- a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/WBWRenderer.java
+++ b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/WBWRenderer.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2008, 2014 IBM Corporation and others.
+ * Copyright (c) 2008, 2013 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -129,7 +129,7 @@ public class WBWRenderer extends SWTPartRenderer {
private EventHandler shellUpdater;
private EventHandler visibilityHandler;
private EventHandler sizeHandler;
- private ThemeDefinitionChangedHandler themeDefinitionChanged;
+ private EventHandler themeDefinitionChanged;
@Inject
private EModelService modelService;
@@ -324,8 +324,6 @@ public class WBWRenderer extends SWTPartRenderer {
eventBroker.unsubscribe(visibilityHandler);
eventBroker.unsubscribe(sizeHandler);
eventBroker.unsubscribe(themeDefinitionChanged);
-
- themeDefinitionChanged.dispose();
}
/**
@@ -844,8 +842,6 @@ public class WBWRenderer extends SWTPartRenderer {
@SuppressWarnings("restriction")
protected static class ThemeDefinitionChangedHandler implements
EventHandler {
- protected Set unusedResources = new HashSet();
-
public void handleEvent(Event event) {
Object element = event.getProperty(IEventBroker.DATA);
@@ -853,6 +849,7 @@ public class WBWRenderer extends SWTPartRenderer {
return;
}
+ List