All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.netbeans.swing.laf.flatlaf.FlatLFCustoms Maven / Gradle / Ivy

There is a newer version: RELEASE240
Show newest version
/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you 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 org.netbeans.swing.laf.flatlaf;

import com.formdev.flatlaf.util.UIScale;
import java.awt.Color;
import javax.swing.InputMap;
import javax.swing.KeyStroke;
import javax.swing.UIDefaults;
import javax.swing.UIDefaults.LazyValue;
import javax.swing.UIManager;
import org.netbeans.swing.laf.flatlaf.ui.FlatTabControlIcon;
import org.netbeans.swing.plaf.LFCustoms;
import org.netbeans.swing.tabcontrol.plaf.TabControlButton;

/**
 * LFCustoms for FlatLaf based LAFs (light, dark, etc).
 * 

* Do not add colors here. * Instead put colors into {@code FlatLightLaf.properties} or {@code FlatDarkLaf.properties}. *

* Public only to be accessible by ProxyLazyValue, please don't abuse. */ public class FlatLFCustoms extends LFCustoms { private static final ModifiableColor unifiedBackground = new ModifiableColor(); private static final ModifiableColor quicksearchBackground = new ModifiableColor(); @Override public Object[] createApplicationSpecificKeysAndValues() { updateUnifiedBackground(); Color editorContentBorderColor = UIManager.getColor("TabbedContainer.editor.contentBorderColor"); // NOI18N Object[] removeCtrlPageUpDownKeyBindings = { "ctrl PAGE_UP", null, // NOI18N "ctrl PAGE_DOWN", null // NOI18N }; return new Object[] { // unified background "nb.options.categories.tabPanelBackground", unifiedBackground, "nb.quicksearch.background", quicksearchBackground, // options "TitlePane.useWindowDecorations", FlatLafPrefs.isUseWindowDecorations(), "TitlePane.unifiedBackground", FlatLafPrefs.isUnifiedTitleBar(), "TitlePane.menuBarEmbedded", FlatLafPrefs.isMenuBarEmbedded(), "MenuItem.selectionType", FlatLafPrefs.isUnderlineMenuSelection() ? "underline" : null, "Component.hideMnemonics", !FlatLafPrefs.isAlwaysShowMnemonics(), // necessary for org.openide.explorer.propertysheet.PropertySheet and others CONTROLFONT, UIManager.getFont("Label.font"), // NOI18N EDITOR_TAB_DISPLAYER_UI, "org.netbeans.swing.laf.flatlaf.ui.FlatEditorTabDisplayerUI", // NOI18N VIEW_TAB_DISPLAYER_UI, "org.netbeans.swing.laf.flatlaf.ui.FlatViewTabDisplayerUI", // NOI18N SLIDING_BUTTON_UI, "org.netbeans.swing.laf.flatlaf.ui.FlatSlidingButtonUI", // NOI18N EDITOR_TABSCOMPONENT_BORDER, DPISafeBorder.matte(1, 1, 1, 1, editorContentBorderColor), EDITOR_TOOLBAR_BORDER, DPISafeBorder.matte(0, 0, 1, 0, editorContentBorderColor), EDITOR_TAB_CONTENT_BORDER, DPISafeBorder.matte(0, 1, 1, 1, editorContentBorderColor), VIEW_TAB_CONTENT_BORDER, DPISafeBorder.matte(0, 1, 1, 1, UIManager.getColor("TabbedContainer.view.contentBorderColor")), // NOI18N // scale on Java 8 and Linux SPLIT_PANE_DIVIDER_SIZE_VERTICAL, UIScale.scale(4), SPLIT_PANE_DIVIDER_SIZE_HORIZONTAL, UIScale.scale(4), // for org.openide.awt.CloseButtonFactory "nb.close.tab.icon.enabled.icon", FlatTabControlIcon.get(TabControlButton.ID_CLOSE_BUTTON, TabControlButton.STATE_DEFAULT), // NOI18N "nb.close.tab.icon.pressed.icon", FlatTabControlIcon.get(TabControlButton.ID_CLOSE_BUTTON, TabControlButton.STATE_PRESSED), // NOI18N "nb.close.tab.icon.rollover.icon", FlatTabControlIcon.get(TabControlButton.ID_CLOSE_BUTTON, TabControlButton.STATE_ROLLOVER), // NOI18N "nb.bigclose.tab.icon.enabled.icon", FlatTabControlIcon.get(TabControlButton.ID_CLOSE_BUTTON, TabControlButton.STATE_DEFAULT), // NOI18N "nb.bigclose.tab.icon.pressed.icon", FlatTabControlIcon.get(TabControlButton.ID_CLOSE_BUTTON, TabControlButton.STATE_PRESSED), // NOI18N "nb.bigclose.tab.icon.rollover.icon", FlatTabControlIcon.get(TabControlButton.ID_CLOSE_BUTTON, TabControlButton.STATE_ROLLOVER), // NOI18N // for org.netbeans.core.multitabs.ButtonFactory "nb.multitabs.button.dropdown.icon", FlatTabControlIcon.get(TabControlButton.ID_DROP_DOWN_BUTTON), // NOI18N "nb.multitabs.button.maximize.icon", FlatTabControlIcon.get(TabControlButton.ID_MAXIMIZE_BUTTON), // NOI18N "nb.multitabs.button.left.icon", FlatTabControlIcon.get(TabControlButton.ID_SCROLL_LEFT_BUTTON), // NOI18N "nb.multitabs.button.right.icon", FlatTabControlIcon.get(TabControlButton.ID_SCROLL_RIGHT_BUTTON), // NOI18N "nb.multitabs.button.rollover", true, // NOI18N // for module progress.ui "nb.progress.cancel.icon", FlatTabControlIcon.get(TabControlButton.ID_CLOSE_BUTTON, TabControlButton.STATE_DEFAULT), // NOI18N "nb.progress.cancel.icon.pressed", FlatTabControlIcon.get(TabControlButton.ID_CLOSE_BUTTON, TabControlButton.STATE_PRESSED), // NOI18N "nb.progress.cancel.icon.mouseover", FlatTabControlIcon.get(TabControlButton.ID_CLOSE_BUTTON, TabControlButton.STATE_ROLLOVER), // NOI18N // Change some colors from ColorUIResource to Color because they are used as // background colors for checkboxes (e.g. in org.netbeans.modules.palette.ui.CategoryButton), // which in FlatLaf paint background only if background color is not a UIResource. "PropSheet.setBackground", new Color(UIManager.getColor("PropSheet.setBackground").getRGB()), // NOI18N "PropSheet.selectedSetBackground", new Color(UIManager.getColor("PropSheet.selectedSetBackground").getRGB()), // NOI18N //#108517 - turn off ctrl+page_up and ctrl+page_down mapping // Not using UIUtils.addInputMapsWithoutCtrlPageUpAndCtrlPageDown() here because // this method replaces all key bindings for List, ScrollPane, Table and Tree. // But FlatLaf uses slightly different key bindings. Especially on macOS the // key bindings are different for platform specific behavior. "List.focusInputMap", new LazyModifyInputMap( "List.focusInputMap", removeCtrlPageUpDownKeyBindings ), // NOI18N "ScrollPane.ancestorInputMap", new LazyModifyInputMap( "ScrollPane.ancestorInputMap", removeCtrlPageUpDownKeyBindings ), // NOI18N "ScrollPane.ancestorInputMap.RightToLeft", new LazyModifyInputMap( "ScrollPane.ancestorInputMap.RightToLeft", removeCtrlPageUpDownKeyBindings ), // NOI18N "Table.ancestorInputMap", new LazyModifyInputMap( "Table.ancestorInputMap", removeCtrlPageUpDownKeyBindings ), // NOI18N "Table.ancestorInputMap.RightToLeft", new LazyModifyInputMap( "Table.ancestorInputMap.RightToLeft", removeCtrlPageUpDownKeyBindings ), // NOI18N "Tree.focusInputMap", new LazyModifyInputMap( "Tree.focusInputMap", removeCtrlPageUpDownKeyBindings ), // NOI18N }; } static void updateUnifiedBackground() { boolean unified = FlatLafPrefs.isUnifiedTitleBar() && FlatLafPrefs.isUseWindowDecorations(); unifiedBackground.setRGB(UIManager.getColor(unified ? "Panel.background" : "Tree.background").getRGB()); // NOI18N quicksearchBackground.setRGB(UIManager.getColor(unified ? "Panel.background" : "MenuBar.background").getRGB()); // NOI18N } //---- class ModifiableColor ---------------------------------------------- private static class ModifiableColor extends Color { private int rgb; public ModifiableColor() { super(Color.red.getRGB()); rgb = super.getRGB(); } @Override public int getRGB() { return rgb; } public void setRGB(int rgb) { this.rgb = rgb; } } //---- class LazyModifyInputMap ------------------------------------------- /** * Lazily gets a base input map from the look and feel defaults and * applies modifications to it specified in bindings. */ private static class LazyModifyInputMap implements LazyValue { private final String baseKey; private final Object[] bindings; LazyModifyInputMap(String baseKey, Object[] bindings) { this.baseKey = baseKey; this.bindings = bindings; } @Override public Object createValue(UIDefaults table) { // get base input map from look and feel defaults (resolves lazy base input map) InputMap inputMap = (InputMap) UIManager.getLookAndFeelDefaults().get(baseKey); // modify input map (replace or remove) for (int i = 0; i < bindings.length; i += 2) { KeyStroke keyStroke = KeyStroke.getKeyStroke((String) bindings[i]); if (bindings[i + 1] != null) { inputMap.put(keyStroke, bindings[i + 1]); } else { inputMap.remove(keyStroke); } } return inputMap; } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy