/* * Copyright 2000-2011 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.intellij.ide.navigationToolbar.ui; import com.intellij.ide.navigationToolbar.NavBarItem; import com.intellij.ide.navigationToolbar.NavBarPanel; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.awt.*; /** * NavBar painting is delegated to NavBarUI components. To change NavBar view you should * implement NavBarUI interface or override some methods of {@code AbstractNavBarUI}. * * If NavBar is visible on IdeFrame it's structure is the following: * * <pre> * WrapperPanel____________________________________________________ * | __NavBarPanel_____________________| | * | | NavBarItem \ NavBarItem\ | Toolbar (optional) | * | |____________/_____________/_______| | * |_____________________________________|________________________| * </pre> * * * @author Konstantin Bulenkov * @see NavBarUIManager * @see AbstractNavBarUI */ public interface NavBarUI { /** * Returns offset for NavBarPopup * * @param item nav bar item * @return offset for NavBarPopup */ int getPopupOffset(@NotNull NavBarItem item); Insets getElementIpad(boolean isPopupElement); Insets getElementPadding(); Font getElementFont(NavBarItem navBarItem); Insets getWrapperPanelInsets(Insets insets); /** * NavBarItem uses standard selection color from LaF. However, sometimes it looks very aggressive. * To handle this problem transparency is used. The selection color will be LaF list selection color with alpha * * @return alpha number from 0 to 255 */ short getSelectionAlpha(); boolean isDrawMacShadow(boolean selected, boolean focused); /** * NavBarItem offsets * @param item NavBar element * @return offsets */ Dimension getOffsets(NavBarItem item); /** * Returns NavBarItem background * @param selected is element selected * @param focused is element focused (can be selected, but has no focus - while NavBarPopup showing) * @return NavBarItem background */ Color getBackground(boolean selected, boolean focused); /** * Returns NavBarItem foreground * @param selected is element selected * @param focused is element focused (can be selected, but has no focus - while NavBarPopup showing) * @return NavBarItem foreground */ @Nullable Color getForeground(boolean selected, boolean focused, boolean inactive); void doPaintWrapperPanel(Graphics2D g, Rectangle bounds, boolean mainToolbarVisible); void doPaintNavBarItem(Graphics2D g, NavBarItem item, NavBarPanel navbar); void doPaintNavBarPanel(Graphics2D g, Rectangle bounds, boolean mainToolbarVisible, boolean undocked); void clearItems(); }