diff options
| author | Daniel Rolka | 2014-04-07 09:20:32 +0000 |
|---|---|---|
| committer | Eric Moffatt | 2014-04-28 14:45:15 +0000 |
| commit | a84eb9a9f764a6dd3b9e2e65bf0cbcf22b091af4 (patch) | |
| tree | 034a388b582170c440baf293bacb4a1e3eabbd9b | |
| parent | 87ce6024139c8ae949d7fe5c33a417ab2c3e4c0b (diff) | |
| download | eclipse.platform.ui-a84eb9a9f764a6dd3b9e2e65bf0cbcf22b091af4.tar.gz eclipse.platform.ui-a84eb9a9f764a6dd3b9e2e65bf0cbcf22b091af4.tar.xz eclipse.platform.ui-a84eb9a9f764a6dd3b9e2e65bf0cbcf22b091af4.zip | |
Bug 430872 - [CSS] ACTIVE_TAB_BG_END must not be used to set view
background and description background
Change-Id: I87d6446fdbad4d4552152f12873ba7e3ea8d46d9
Signed-off-by: Daniel Rolka <daniel.rolka@pl.ibm.com>
6 files changed, 58 insertions, 114 deletions
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 e587cb7ed16..1aa25321888 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 @@ -37,8 +37,6 @@ import org.w3c.dom.NodeList; * */ public class CTabFolderElement extends CompositeElement implements ChildVisibilityAwareElement { - private final static String BACKGROUND_SET_BY_TAB_RENDERER = "bgSetByTabRenderer"; //$NON-NLS-1$ - private SelectionListener selectionListener = new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { @@ -119,9 +117,7 @@ public class CTabFolderElement extends CompositeElement implements ChildVisibili folder.setSelectionBackground((Color) null); folder.setSelectionForeground((Color) null); folder.setSelectionBackground((Image) null); - folder.setBackground(null, null); - resetChildrenBackground(folder); if (folder.getRenderer() instanceof ICTabRendering) { ICTabRendering renderer = (ICTabRendering) folder @@ -136,39 +132,6 @@ public class CTabFolderElement extends CompositeElement implements ChildVisibili super.reset(); } - 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); - } - } - } - @Override public NodeList getVisibleChildNodes() { // CTabFolder#getChildren() exposes the "tab controls" (the toolbars and 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 f0c32e72702..3a0a7da5588 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 @@ -12,9 +12,7 @@ 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; @@ -23,8 +21,6 @@ import org.w3c.dom.Node; * */ public class CompositeElement extends ControlElement { - private final static String BACKGROUND_OVERRIDDEN_BY_CSS_MARKER = "bgOverriddenByCSS"; - public CompositeElement(Composite composite, CSSEngine engine) { super(composite, engine); } @@ -43,25 +39,4 @@ public class CompositeElement extends ControlElement { protected Composite getComposite() { return (Composite) getNativeWidget(); } - - @Override - public void reset() { - Composite composite = getComposite(); - - if (composite.getData(BACKGROUND_OVERRIDDEN_BY_CSS_MARKER) != null) { - composite.setData(BACKGROUND_OVERRIDDEN_BY_CSS_MARKER, null); - } - super.reset(); - } - - 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 e8b072ecd9b..c8ec90cdec9 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; @@ -84,7 +83,6 @@ AbstractCSSPropertyBackgroundHandler { } else if (widget instanceof Control) { GradientBackgroundListener.remove((Control) widget); CSSSWTColorHelper.setBackground((Control) widget, newColor); - CompositeElement.setBackgroundOverriddenByCSSMarker(widget); } } else if (value.getCssValueType() == CSSValue.CSS_VALUE_LIST) { Gradient grad = (Gradient) engine.convert(value, Gradient.class, @@ -106,7 +104,6 @@ AbstractCSSPropertyBackgroundHandler { } else if (widget instanceof Control) { GradientBackgroundListener.handle((Control) widget, grad); - CompositeElement.setBackgroundOverriddenByCSSMarker(widget); } } } 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 5dfa3f64d82..2799a0644e8 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 @@ -30,7 +30,8 @@ public class CSSPropertyUnselectedTabsSWTHandler extends AbstractCSSPropertySWTH @Override protected void applyCSSProperty(Control control, String property, CSSValue value, String pseudo, CSSEngine engine) throws Exception { - if (!(control instanceof CTabFolder)) { + if (!(control instanceof CTabFolder) + || !isUnselectedTabsColorProp(property)) { return; } CTabFolder folder = ((CTabFolder) control); @@ -58,10 +59,8 @@ public class CSSPropertyUnselectedTabsSWTHandler extends AbstractCSSPropertySWTH control.getDisplay(), engine); percents = CSSSWTColorHelper.getPercents(grad); } - if (isUnselectedTabsColorProp(property)) { - ((ICTabRendering) renderer).setUnselectedTabsColor(colors, - percents); - } + ((ICTabRendering) renderer) + .setUnselectedTabsColor(colors, percents); folder.setBackground(colors, percents, true); } } 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 85ccd0523c4..e9f866464e2 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,9 +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; @@ -1059,30 +1056,35 @@ public class CTabRendering extends CTabFolderRenderer implements defaultBackground); drawTabBackground(gc, partHeaderBounds, state, vertical, defaultBackground); - drawChildrenBackground(partHeaderBounds); + redrawChildren(); } private void drawUnselectedTabBackground(GC gc, Rectangle partHeaderBounds, int state, boolean vertical, Color defaultBackground) { + rendererWrapper.drawBackground(gc, partHeaderBounds.x, + partHeaderBounds.y - 1, partHeaderBounds.width, + partHeaderBounds.height, defaultBackground, + getUnselectedTabsColors(state), + getUnselectedTabsPercents(state), + vertical); + } + + private Color[] getUnselectedTabsColors(int state) { if (unselectedTabsColors == null) { - boolean selected = (state & SWT.SELECTED) != 0; - unselectedTabsColors = selected ? parentWrapper + return (state & SWT.SELECTED) != 0 ? 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 }; } + return unselectedTabsColors; + } - rendererWrapper.drawBackground(gc, partHeaderBounds.x, - partHeaderBounds.y - 1, partHeaderBounds.width, - partHeaderBounds.height, defaultBackground, - unselectedTabsColors, unselectedTabsPercents, vertical); + private int[] getUnselectedTabsPercents(int state) { + if (unselectedTabsPercents == null) { + return (state & SWT.SELECTED) != 0 ? parentWrapper + .getSelectionGradientPercents() : parentWrapper + .getGradientPercents(); + } + return unselectedTabsPercents; } private void drawTabBackground(GC gc, Rectangle partHeaderBounds, @@ -1095,42 +1097,42 @@ public class CTabRendering extends CTabFolderRenderer implements } if (colors == null) { boolean selected = (state & SWT.SELECTED) != 0; - colors = selected ? parentWrapper.getSelectionGradientColors() : - parentWrapper.getGradientColors(); - percents = selected ? parentWrapper.getSelectionGradientPercents() : - parentWrapper.getGradientPercents(); + colors = selected ? parentWrapper.getSelectionGradientColors() + : parentWrapper.getGradientColors(); + percents = selected ? parentWrapper.getSelectionGradientPercents() + : parentWrapper.getGradientPercents(); } if (colors == null) { - colors = new Color[] { gc.getDevice().getSystemColor(SWT.COLOR_WHITE) }; + colors = new Color[] { gc.getDevice().getSystemColor( + SWT.COLOR_WHITE) }; percents = new int[] { 100 }; } - rendererWrapper.drawBackground(gc, partHeaderBounds.x, partHeaderBounds.height - 1, partHeaderBounds.width, + + 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); - } - } + int selectedItemWidth = parent.getSelectionIndex() > -1 ? parent + .getSelection().getControl().getBounds().width : parent + .getBounds().width; + int leftRightBorder = (parent.getBounds().width - selectedItemWidth) / 2; + int topBorder = INNER_KEYLINE + OUTER_KEYLINE; + + rendererWrapper.drawBackground(gc, + partHeaderBounds.x + leftRightBorder, partHeaderBounds.height + + topBorder, partHeaderBounds.width - leftRightBorder + * 2, partHeaderBounds.height, + defaultBackground, getUnselectedTabsColors(state), + getUnselectedTabsPercents(state), vertical); } - 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]; + private void redrawChildren() { + for (Control child : parent.getChildren()) { + if (child instanceof Composite) { + child.reskin(SWT.ALL); + } } - - setBackgroundOverriddenDuringRenderering(composite, background); } private static class CTabFolderRendererWrapper extends diff --git a/bundles/org.eclipse.ui.themes/css/e4_basestyle.css b/bundles/org.eclipse.ui.themes/css/e4_basestyle.css index a21ad1f2b80..3918c4b91eb 100644 --- a/bundles/org.eclipse.ui.themes/css/e4_basestyle.css +++ b/bundles/org.eclipse.ui.themes/css/e4_basestyle.css @@ -166,6 +166,14 @@ CTabItem:selected { color: '#org-eclipse-ui-workbench-ACTIVE_NOFOCUS_TAB_TEXT_COLOR'; } +.MPartStack Composite { + background-color: '#org-eclipse-ui-workbench-INACTIVE_UNSELECTED_TABS_COLOR_START' '#org-eclipse-ui-workbench-INACTIVE_UNSELECTED_TABS_COLOR_END' 100% 100%; +} + +.MPartStack.active Composite { + background-color: '#org-eclipse-ui-workbench-ACTIVE_UNSELECTED_TABS_COLOR_START' '#org-eclipse-ui-workbench-ACTIVE_UNSELECTED_TABS_COLOR_END' 100% 100%; +} + #PerspectiveSwitcher { eclipse-perspective-keyline-color: #AAB0BF #AAB0BF; } |
