Как правильно оформить границы CTabItem
Я написал плагин Eclipse, который предоставляет некоторый пользовательский интерфейс, который использует компонент CTabFolder.
CTabItems, предоставляемые Eclipse, имеют синюю рамку, когда активна, и белую рамку, когда неактивна (серая, если CTabItem представляет собой представление Eclipse).
Созданные мной элементы CTabItem всегда выделены белым цветом, а текст на активной вкладке подчеркнут.
Как я могу контролировать стиль моих CTabItems, чтобы более точно соответствовать вкладкам Eclipse?
РЕДАКТИРОВАТЬ:
Я придумал следующий код, который извлекает правильные цвета из активной темы Eclipse.
IWorkbench workBench = PlatformUI.getWorkbench();
ITheme theme = workBench.getThemeManager().getCurrentTheme();
ColorRegistry colreg = theme.getColorRegistry();
Color c1 = colreg.get(IWorkbenchThemeConstants.ACTIVE_TAB_BG_START);
Color c2 = colreg.get(IWorkbenchThemeConstants.ACTIVE_TAB_BG_END);
Однако это не идеально, поскольку IWorkbenchThemeConstants находится внутри внутреннего пакета eclipse ui.
Есть ли альтернативный публичный способ ссылки на те же цвета, на которые ссылаются эти внутренние IWorkbenchThemeConstants?
1 ответ
Вы можете использовать методы для определения градиента для выбранных и невыбранных элементов CTabFolder. Например
CTabFolder folder = new CTabFolder(shell, SWT.BORDER);
folder.setBackground(new Color[]{display.getSystemColor(SWT.COLOR_YELLOW), display.getSystemColor(SWT.COLOR_RED)}, new int[]{100}, true);
folder.setSelectionBackground(new Color[]{display.getSystemColor(SWT.COLOR_WHITE), display.getSystemColor(SWT.COLOR_BLUE)}, new int[]{100}, true);
будет производить эту (некрасивую) вкладки
Так что вам просто нужно выбрать правильные цвета, которые есть у затмения.
Или вы можете написать свой собственный CTabFolderRenderer и установить его в свой экземпляр CTabFolder.
РЕДАКТИРОВАТЬ
Для цветов Eclipse попробуйте
folder.setSelectionBackground(new Color[]{new Color(display, new RGB(242, 244, 247)), new Color(display, new RGB(157, 167, 195))}, new int[]{100}, true);
РЕДАКТИРОВАТЬ
Нашел способ как правильно сделать
folder.setSelectionBackground(new Color[]{display.getSystemColor(SWT.COLOR_TITLE_INACTIVE_BACKGROUND_GRADIENT), display.getSystemColor(SWT.COLOR_TITLE_BACKGROUND)}, new int[]{100}, true);