Как правильно оформить границы 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);

будет производить эту (некрасивую) вкладки

цветной SWT CTabFolder

Так что вам просто нужно выбрать правильные цвета, которые есть у затмения.

Или вы можете написать свой собственный 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);
Другие вопросы по тегам