mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Bug 365051 - Unreadable black source hover
This commit is contained in:
parent
fbffc783ba
commit
c722cc65cd
5 changed files with 106 additions and 40 deletions
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (c) 2005, 2010 IBM Corporation and others.
|
* Copyright (c) 2005, 2011 IBM Corporation and others.
|
||||||
* All rights reserved. This program and the accompanying materials
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -29,6 +29,7 @@ import org.eclipse.swt.layout.GridLayout;
|
||||||
import org.eclipse.swt.widgets.Button;
|
import org.eclipse.swt.widgets.Button;
|
||||||
import org.eclipse.swt.widgets.Composite;
|
import org.eclipse.swt.widgets.Composite;
|
||||||
import org.eclipse.swt.widgets.Control;
|
import org.eclipse.swt.widgets.Control;
|
||||||
|
import org.eclipse.swt.widgets.Display;
|
||||||
import org.eclipse.swt.widgets.Event;
|
import org.eclipse.swt.widgets.Event;
|
||||||
import org.eclipse.swt.widgets.Label;
|
import org.eclipse.swt.widgets.Label;
|
||||||
import org.eclipse.swt.widgets.Link;
|
import org.eclipse.swt.widgets.Link;
|
||||||
|
@ -45,6 +46,7 @@ import org.eclipse.cdt.utils.ui.controls.ControlFactory;
|
||||||
import org.eclipse.cdt.internal.ui.ICHelpContextIds;
|
import org.eclipse.cdt.internal.ui.ICHelpContextIds;
|
||||||
import org.eclipse.cdt.internal.ui.editor.CEditor;
|
import org.eclipse.cdt.internal.ui.editor.CEditor;
|
||||||
import org.eclipse.cdt.internal.ui.preferences.OverlayPreferenceStore.OverlayKey;
|
import org.eclipse.cdt.internal.ui.preferences.OverlayPreferenceStore.OverlayKey;
|
||||||
|
import org.eclipse.cdt.internal.ui.text.c.hover.SourceViewerInformationControl;
|
||||||
import org.eclipse.cdt.internal.ui.text.contentassist.ContentAssistPreference;
|
import org.eclipse.cdt.internal.ui.text.contentassist.ContentAssistPreference;
|
||||||
import org.eclipse.cdt.internal.ui.text.doctools.DocCommentOwnerManager;
|
import org.eclipse.cdt.internal.ui.text.doctools.DocCommentOwnerManager;
|
||||||
|
|
||||||
|
@ -329,7 +331,10 @@ public class CEditorPreferencePage extends AbstractPreferencePage {
|
||||||
*/
|
*/
|
||||||
private void initializeDefaultColors() {
|
private void initializeDefaultColors() {
|
||||||
if (getPreferenceStore().getBoolean(PreferenceConstants.EDITOR_SOURCE_HOVER_BACKGROUND_COLOR_SYSTEM_DEFAULT)) {
|
if (getPreferenceStore().getBoolean(PreferenceConstants.EDITOR_SOURCE_HOVER_BACKGROUND_COLOR_SYSTEM_DEFAULT)) {
|
||||||
RGB rgb= fAppearanceColorList.getDisplay().getSystemColor(SWT.COLOR_INFO_BACKGROUND).getRGB();
|
Display display= fAppearanceColorList.getDisplay();
|
||||||
|
RGB rgb= SourceViewerInformationControl.getVisibleBackgroundColor(display);
|
||||||
|
if (rgb == null)
|
||||||
|
rgb= display.getSystemColor(SWT.COLOR_INFO_BACKGROUND).getRGB();
|
||||||
PreferenceConverter.setValue(getPreferenceStore(), PreferenceConstants.EDITOR_SOURCE_HOVER_BACKGROUND_COLOR, rgb);
|
PreferenceConverter.setValue(getPreferenceStore(), PreferenceConstants.EDITOR_SOURCE_HOVER_BACKGROUND_COLOR, rgb);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (c) 2007, 2009 Wind River Systems, Inc. and others.
|
* Copyright (c) 2007, 2011 Wind River Systems, Inc. and others.
|
||||||
* All rights reserved. This program and the accompanying materials
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -44,6 +44,8 @@ import org.eclipse.swt.widgets.Shell;
|
||||||
import org.eclipse.cdt.ui.CUIPlugin;
|
import org.eclipse.cdt.ui.CUIPlugin;
|
||||||
import org.eclipse.cdt.ui.PreferenceConstants;
|
import org.eclipse.cdt.ui.PreferenceConstants;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.internal.ui.text.c.hover.SourceViewerInformationControl;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Abstract class for "quick" compare views in light-weight controls.
|
* Abstract class for "quick" compare views in light-weight controls.
|
||||||
*
|
*
|
||||||
|
@ -75,7 +77,7 @@ public abstract class AbstractCompareViewerInformationControl extends org.eclips
|
||||||
private ICompareInput fCompareInput;
|
private ICompareInput fCompareInput;
|
||||||
|
|
||||||
private Color fBackgroundColor;
|
private Color fBackgroundColor;
|
||||||
private boolean fIsSystemBackgroundColor;
|
private boolean fIsSystemBackgroundColor = true;
|
||||||
|
|
||||||
private Label fTitleLabel;
|
private Label fTitleLabel;
|
||||||
|
|
||||||
|
@ -106,7 +108,13 @@ public abstract class AbstractCompareViewerInformationControl extends org.eclips
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initializeColors() {
|
private void initializeColors() {
|
||||||
RGB bgRGB= getHoverBackgroundColorRGB();
|
IPreferenceStore store= CUIPlugin.getDefault().getPreferenceStore();
|
||||||
|
RGB bgRGB;
|
||||||
|
if (store.getBoolean(PreferenceConstants.EDITOR_SOURCE_HOVER_BACKGROUND_COLOR_SYSTEM_DEFAULT)) {
|
||||||
|
bgRGB= SourceViewerInformationControl.getVisibleBackgroundColor(getShell().getDisplay());
|
||||||
|
} else {
|
||||||
|
bgRGB= PreferenceConverter.getColor(store, PreferenceConstants.EDITOR_SOURCE_HOVER_BACKGROUND_COLOR);
|
||||||
|
}
|
||||||
if (bgRGB != null) {
|
if (bgRGB != null) {
|
||||||
fBackgroundColor= new Color(getShell().getDisplay(), bgRGB);
|
fBackgroundColor= new Color(getShell().getDisplay(), bgRGB);
|
||||||
fIsSystemBackgroundColor= false;
|
fIsSystemBackgroundColor= false;
|
||||||
|
@ -116,13 +124,6 @@ public abstract class AbstractCompareViewerInformationControl extends org.eclips
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private RGB getHoverBackgroundColorRGB() {
|
|
||||||
IPreferenceStore store= CUIPlugin.getDefault().getPreferenceStore();
|
|
||||||
return store.getBoolean(PreferenceConstants.EDITOR_SOURCE_HOVER_BACKGROUND_COLOR_SYSTEM_DEFAULT)
|
|
||||||
? null
|
|
||||||
: PreferenceConverter.getColor(store, PreferenceConstants.EDITOR_SOURCE_HOVER_BACKGROUND_COLOR);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void createContent(Composite parent) {
|
protected void createContent(Composite parent) {
|
||||||
initializeColors();
|
initializeColors();
|
||||||
|
@ -207,6 +208,10 @@ public abstract class AbstractCompareViewerInformationControl extends org.eclips
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected Color getBackgroundColor() {
|
||||||
|
return fBackgroundColor;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setInformation(String content) {
|
public void setInformation(String content) {
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (c) 2007, 2009 Wind River Systems, Inc. and others.
|
* Copyright (c) 2007, 2011 Wind River Systems, Inc. and others.
|
||||||
* All rights reserved. This program and the accompanying materials
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -41,6 +41,7 @@ import org.eclipse.cdt.ui.PreferenceConstants;
|
||||||
import org.eclipse.cdt.ui.text.ICPartitions;
|
import org.eclipse.cdt.ui.text.ICPartitions;
|
||||||
|
|
||||||
import org.eclipse.cdt.internal.ui.editor.CSourceViewer;
|
import org.eclipse.cdt.internal.ui.editor.CSourceViewer;
|
||||||
|
import org.eclipse.cdt.internal.ui.text.c.hover.SourceViewerInformationControl;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Abstract class for "quick" source views in light-weight controls.
|
* Abstract class for "quick" source views in light-weight controls.
|
||||||
|
@ -50,15 +51,10 @@ import org.eclipse.cdt.internal.ui.editor.CSourceViewer;
|
||||||
public abstract class AbstractSourceViewerInformationControl extends org.eclipse.jface.text.AbstractInformationControl implements IInformationControlExtension2, DisposeListener {
|
public abstract class AbstractSourceViewerInformationControl extends org.eclipse.jface.text.AbstractInformationControl implements IInformationControlExtension2, DisposeListener {
|
||||||
|
|
||||||
private ISourceViewer fSourceViewer;
|
private ISourceViewer fSourceViewer;
|
||||||
|
|
||||||
private Color fBackgroundColor;
|
private Color fBackgroundColor;
|
||||||
|
private boolean fIsSystemBackgroundColor = true;
|
||||||
private boolean fIsSystemBackgroundColor;
|
|
||||||
|
|
||||||
private Font fTextFont;
|
private Font fTextFont;
|
||||||
|
|
||||||
private StyledText fText;
|
private StyledText fText;
|
||||||
|
|
||||||
private Label fTitleLabel;
|
private Label fTitleLabel;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -95,7 +91,13 @@ public abstract class AbstractSourceViewerInformationControl extends org.eclipse
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initializeColors() {
|
private void initializeColors() {
|
||||||
RGB bgRGB= getHoverBackgroundColorRGB();
|
IPreferenceStore store= CUIPlugin.getDefault().getPreferenceStore();
|
||||||
|
RGB bgRGB;
|
||||||
|
if (store.getBoolean(PreferenceConstants.EDITOR_SOURCE_HOVER_BACKGROUND_COLOR_SYSTEM_DEFAULT)) {
|
||||||
|
bgRGB= SourceViewerInformationControl.getVisibleBackgroundColor(getShell().getDisplay());
|
||||||
|
} else {
|
||||||
|
bgRGB= PreferenceConverter.getColor(store, PreferenceConstants.EDITOR_SOURCE_HOVER_BACKGROUND_COLOR);
|
||||||
|
}
|
||||||
if (bgRGB != null) {
|
if (bgRGB != null) {
|
||||||
fBackgroundColor= new Color(getShell().getDisplay(), bgRGB);
|
fBackgroundColor= new Color(getShell().getDisplay(), bgRGB);
|
||||||
fIsSystemBackgroundColor= false;
|
fIsSystemBackgroundColor= false;
|
||||||
|
@ -105,13 +107,6 @@ public abstract class AbstractSourceViewerInformationControl extends org.eclipse
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private RGB getHoverBackgroundColorRGB() {
|
|
||||||
IPreferenceStore store= CUIPlugin.getDefault().getPreferenceStore();
|
|
||||||
return store.getBoolean(PreferenceConstants.EDITOR_SOURCE_HOVER_BACKGROUND_COLOR_SYSTEM_DEFAULT)
|
|
||||||
? null
|
|
||||||
: PreferenceConverter.getColor(store, PreferenceConstants.EDITOR_SOURCE_HOVER_BACKGROUND_COLOR);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void createContent(Composite parent) {
|
public void createContent(Composite parent) {
|
||||||
Composite content= new Composite(parent, SWT.NONE);
|
Composite content= new Composite(parent, SWT.NONE);
|
||||||
|
|
|
@ -262,7 +262,6 @@ public class CMacroExpansionExplorationControl extends AbstractCompareViewerInfo
|
||||||
GridData gd= new GridData(GridData.BEGINNING | GridData.FILL_BOTH);
|
GridData gd= new GridData(GridData.BEGINNING | GridData.FILL_BOTH);
|
||||||
gd.heightHint= fMacroText.getLineHeight() * 2;
|
gd.heightHint= fMacroText.getLineHeight() * 2;
|
||||||
fMacroText.setLayoutData(gd);
|
fMacroText.setLayoutData(gd);
|
||||||
fMacroText.setForeground(parent.getDisplay().getSystemColor(SWT.COLOR_INFO_FOREGROUND));
|
|
||||||
|
|
||||||
final Document doc= new Document();
|
final Document doc= new Document();
|
||||||
CUIPlugin.getDefault().getTextTools().setupCDocument(doc);
|
CUIPlugin.getDefault().getTextTools().setupCDocument(doc);
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (c) 2002, 2008 QNX Software Systems and others.
|
* Copyright (c) 2002, 2011 QNX Software Systems and others.
|
||||||
* All rights reserved. This program and the accompanying materials
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -46,9 +46,12 @@ import org.eclipse.swt.widgets.Control;
|
||||||
import org.eclipse.swt.widgets.Display;
|
import org.eclipse.swt.widgets.Display;
|
||||||
import org.eclipse.swt.widgets.Label;
|
import org.eclipse.swt.widgets.Label;
|
||||||
import org.eclipse.swt.widgets.Shell;
|
import org.eclipse.swt.widgets.Shell;
|
||||||
|
import org.eclipse.ui.texteditor.AbstractTextEditor;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.ui.CDTUITools;
|
||||||
import org.eclipse.cdt.ui.CUIPlugin;
|
import org.eclipse.cdt.ui.CUIPlugin;
|
||||||
import org.eclipse.cdt.ui.PreferenceConstants;
|
import org.eclipse.cdt.ui.PreferenceConstants;
|
||||||
|
import org.eclipse.cdt.ui.text.ICColorConstants;
|
||||||
import org.eclipse.cdt.ui.text.ICPartitions;
|
import org.eclipse.cdt.ui.text.ICPartitions;
|
||||||
|
|
||||||
import org.eclipse.cdt.internal.ui.editor.CSourceViewer;
|
import org.eclipse.cdt.internal.ui.editor.CSourceViewer;
|
||||||
|
@ -88,6 +91,10 @@ public class SourceViewerInformationControl implements IInformationControl, IInf
|
||||||
* @since 3.0
|
* @since 3.0
|
||||||
*/
|
*/
|
||||||
private Font fStatusTextFont;
|
private Font fStatusTextFont;
|
||||||
|
/**
|
||||||
|
* The color of the optional status text label or <code>null</code> if none.
|
||||||
|
*/
|
||||||
|
private Color fStatusTextForegroundColor;
|
||||||
/**
|
/**
|
||||||
* The width size constraint.
|
* The width size constraint.
|
||||||
* @since 4.0
|
* @since 4.0
|
||||||
|
@ -198,16 +205,49 @@ public class SourceViewerInformationControl implements IInformationControl, IInf
|
||||||
GridData gd2= new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING);
|
GridData gd2= new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING);
|
||||||
fStatusField.setLayoutData(gd2);
|
fStatusField.setLayoutData(gd2);
|
||||||
|
|
||||||
// Regarding the color see bug 41128
|
RGB defaultColor= CDTUITools.getColorManager().getColor(ICColorConstants.C_DEFAULT).getRGB();
|
||||||
fStatusField.setForeground(display.getSystemColor(SWT.COLOR_WIDGET_DARK_SHADOW));
|
fStatusTextForegroundColor= new Color(fStatusField.getDisplay(), blend(fBackgroundColor.getRGB(), defaultColor, 0.56f));
|
||||||
|
fStatusField.setForeground(fStatusTextForegroundColor);
|
||||||
fStatusField.setBackground(fBackgroundColor);
|
fStatusField.setBackground(fBackgroundColor);
|
||||||
}
|
}
|
||||||
|
|
||||||
addDisposeListener(this);
|
addDisposeListener(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns an RGB that lies between the given foreground and background
|
||||||
|
* colors using the given mixing factor. A <code>factor</code> of 1.0 will produce a
|
||||||
|
* color equal to <code>fg</code>, while a <code>factor</code> of 0.0 will produce one
|
||||||
|
* equal to <code>bg</code>.
|
||||||
|
* @param bg the background color
|
||||||
|
* @param fg the foreground color
|
||||||
|
* @param factor the mixing factor, must be in [0, 1]
|
||||||
|
*
|
||||||
|
* @return the interpolated color
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("null")
|
||||||
|
private static RGB blend(RGB bg, RGB fg, float factor) {
|
||||||
|
// copy of org.eclipse.jface.internal.text.revisions.Colors#blend(..)
|
||||||
|
Assert.isLegal(bg != null);
|
||||||
|
Assert.isLegal(fg != null);
|
||||||
|
Assert.isLegal(factor >= 0f && factor <= 1f);
|
||||||
|
|
||||||
|
float complement= 1f - factor;
|
||||||
|
return new RGB(
|
||||||
|
(int) (complement * bg.red + factor * fg.red),
|
||||||
|
(int) (complement * bg.green + factor * fg.green),
|
||||||
|
(int) (complement * bg.blue + factor * fg.blue)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
private void initializeColors() {
|
private void initializeColors() {
|
||||||
RGB bgRGB= getHoverBackgroundColorRGB();
|
IPreferenceStore store= CUIPlugin.getDefault().getPreferenceStore();
|
||||||
|
RGB bgRGB;
|
||||||
|
if (store.getBoolean(PreferenceConstants.EDITOR_SOURCE_HOVER_BACKGROUND_COLOR_SYSTEM_DEFAULT)) {
|
||||||
|
bgRGB= getVisibleBackgroundColor(fShell.getDisplay());
|
||||||
|
} else {
|
||||||
|
bgRGB= PreferenceConverter.getColor(store, PreferenceConstants.EDITOR_SOURCE_HOVER_BACKGROUND_COLOR);
|
||||||
|
}
|
||||||
if (bgRGB != null) {
|
if (bgRGB != null) {
|
||||||
fBackgroundColor= new Color(fShell.getDisplay(), bgRGB);
|
fBackgroundColor= new Color(fShell.getDisplay(), bgRGB);
|
||||||
fIsSystemBackgroundColor= false;
|
fIsSystemBackgroundColor= false;
|
||||||
|
@ -217,11 +257,29 @@ public class SourceViewerInformationControl implements IInformationControl, IInf
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private RGB getHoverBackgroundColorRGB() {
|
/**
|
||||||
IPreferenceStore store= CUIPlugin.getDefault().getPreferenceStore();
|
* Returns <code>null</code> if {@link SWT#COLOR_INFO_BACKGROUND} is visibly distinct from the
|
||||||
return store.getBoolean(PreferenceConstants.EDITOR_SOURCE_HOVER_BACKGROUND_COLOR_SYSTEM_DEFAULT)
|
* default source text color. Otherwise, returns the editor background color.
|
||||||
? null
|
*
|
||||||
: PreferenceConverter.getColor(store, PreferenceConstants.EDITOR_SOURCE_HOVER_BACKGROUND_COLOR);
|
* @param display the display
|
||||||
|
* @return an RGB or <code>null</code>
|
||||||
|
*/
|
||||||
|
public static RGB getVisibleBackgroundColor(Display display) {
|
||||||
|
float[] infoBgHSB= display.getSystemColor(SWT.COLOR_INFO_BACKGROUND).getRGB().getHSB();
|
||||||
|
|
||||||
|
Color defaultColor= CDTUITools.getColorManager().getColor(ICColorConstants.C_DEFAULT);
|
||||||
|
RGB defaultRGB= defaultColor != null ? defaultColor.getRGB() : new RGB(255, 255, 255);
|
||||||
|
float[] defaultHSB= defaultRGB.getHSB();
|
||||||
|
|
||||||
|
if (Math.abs(infoBgHSB[2] - defaultHSB[2]) < 0.5f) {
|
||||||
|
// workaround for dark tooltip background color, see https://bugs.eclipse.org/365051
|
||||||
|
IPreferenceStore preferenceStore= CUIPlugin.getDefault().getCombinedPreferenceStore();
|
||||||
|
boolean useDefault= preferenceStore.getBoolean(AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT);
|
||||||
|
if (useDefault)
|
||||||
|
return display.getSystemColor(SWT.COLOR_LIST_BACKGROUND).getRGB();
|
||||||
|
return PreferenceConverter.getColor(preferenceStore, AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -274,6 +332,10 @@ public class SourceViewerInformationControl implements IInformationControl, IInf
|
||||||
if (fStatusTextFont != null && !fStatusTextFont.isDisposed())
|
if (fStatusTextFont != null && !fStatusTextFont.isDisposed())
|
||||||
fStatusTextFont.dispose();
|
fStatusTextFont.dispose();
|
||||||
|
|
||||||
|
if (fStatusTextForegroundColor != null && !fStatusTextForegroundColor.isDisposed())
|
||||||
|
fStatusTextForegroundColor.dispose();
|
||||||
|
|
||||||
|
fStatusTextForegroundColor= null;
|
||||||
fStatusTextFont= null;
|
fStatusTextFont= null;
|
||||||
fTextFont= null;
|
fTextFont= null;
|
||||||
fShell= null;
|
fShell= null;
|
||||||
|
|
Loading…
Add table
Reference in a new issue