21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 package com.sun.javafx.tk.quantum;
27
28 import com.sun.javafx.menu.CheckMenuItemBase;
29 import com.sun.javafx.menu.MenuBase;
30 import com.sun.javafx.menu.MenuItemBase;
31 import com.sun.javafx.menu.RadioMenuItemBase;
32 import com.sun.javafx.menu.SeparatorMenuItemBase;
33 import com.sun.javafx.PlatformUtil;
34 import com.sun.javafx.tk.TKSystemMenu;
35 import com.sun.glass.events.KeyEvent;
36 import com.sun.glass.ui.Application;
37 import com.sun.glass.ui.Menu;
38 import com.sun.glass.ui.MenuBar;
39 import com.sun.glass.ui.MenuItem;
40 import com.sun.glass.ui.Pixels;
41
42 import java.util.List;
43
44 import javafx.collections.ListChangeListener;
45 import javafx.collections.ObservableList;
46 import javafx.beans.InvalidationListener;
47 import javafx.scene.image.Image;
48 import javafx.scene.image.ImageView;
49 import javafx.scene.input.KeyCode;
50 import javafx.scene.input.KeyCombination;
51 import javafx.scene.input.KeyCharacterCombination;
52 import javafx.scene.input.KeyCodeCombination;
53
54 class GlassSystemMenu implements TKSystemMenu {
55
56 private List<MenuBase> systemMenus = null;
57 private MenuBar glassSystemMenuBar = null;
58
59 private InvalidationListener visibilityListener = valueModel -> {
60 if (systemMenus != null) {
280 // don't pass null strings to Glass
281 return "";
282 } else if (!text.isEmpty() && menuItem.isMnemonicParsing()) {
283 // \ufffc is a placeholder character
284 //return text.replace("__", "\ufffc").replace("_", "").replace("\ufffc", "_");
285 return text.replaceFirst("_([^_])", "$1");
286 } else {
287 return text;
288 }
289 }
290
291 private Pixels getPixels(MenuItemBase menuItem) {
292 if (menuItem.getGraphic() instanceof ImageView) {
293 ImageView iv = (ImageView)menuItem.getGraphic();
294 Image im = iv.getImage();
295 if (im == null) return null;
296
297 String url = im.getUrl();
298
299 if (url == null || PixelUtils.supportedFormatType(url)) {
300 com.sun.prism.Image pi = (com.sun.prism.Image)im.impl_getPlatformImage();
301
302 return pi == null ? null : PixelUtils.imageToPixels(pi);
303 }
304 }
305 return (null);
306 }
307
308 private void setShortcut(MenuItem glassSubMenuItem, MenuItemBase menuItem) {
309 final KeyCombination accelerator = menuItem.getAccelerator();
310 if (accelerator == null) {
311 glassSubMenuItem.setShortcut(0, 0);
312 } else if (accelerator instanceof KeyCodeCombination) {
313 KeyCodeCombination kcc = (KeyCodeCombination)accelerator;
314 KeyCode code = kcc.getCode();
315 assert PlatformUtil.isMac() || PlatformUtil.isLinux();
316 int modifier = glassModifiers(kcc);
317 if (PlatformUtil.isMac()) {
318 int finalCode = code.isLetterKey() ? code.getChar().toUpperCase().charAt(0)
319 : code.getCode();
320 glassSubMenuItem.setShortcut(finalCode, modifier);
|
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 package com.sun.javafx.tk.quantum;
27
28 import com.sun.javafx.menu.CheckMenuItemBase;
29 import com.sun.javafx.menu.MenuBase;
30 import com.sun.javafx.menu.MenuItemBase;
31 import com.sun.javafx.menu.RadioMenuItemBase;
32 import com.sun.javafx.menu.SeparatorMenuItemBase;
33 import com.sun.javafx.PlatformUtil;
34 import com.sun.javafx.tk.TKSystemMenu;
35 import com.sun.glass.events.KeyEvent;
36 import com.sun.glass.ui.Application;
37 import com.sun.glass.ui.Menu;
38 import com.sun.glass.ui.MenuBar;
39 import com.sun.glass.ui.MenuItem;
40 import com.sun.glass.ui.Pixels;
41 import com.sun.javafx.tk.Toolkit;
42
43 import java.util.List;
44
45 import javafx.collections.ListChangeListener;
46 import javafx.collections.ObservableList;
47 import javafx.beans.InvalidationListener;
48 import javafx.scene.image.Image;
49 import javafx.scene.image.ImageView;
50 import javafx.scene.input.KeyCode;
51 import javafx.scene.input.KeyCombination;
52 import javafx.scene.input.KeyCharacterCombination;
53 import javafx.scene.input.KeyCodeCombination;
54
55 class GlassSystemMenu implements TKSystemMenu {
56
57 private List<MenuBase> systemMenus = null;
58 private MenuBar glassSystemMenuBar = null;
59
60 private InvalidationListener visibilityListener = valueModel -> {
61 if (systemMenus != null) {
281 // don't pass null strings to Glass
282 return "";
283 } else if (!text.isEmpty() && menuItem.isMnemonicParsing()) {
284 // \ufffc is a placeholder character
285 //return text.replace("__", "\ufffc").replace("_", "").replace("\ufffc", "_");
286 return text.replaceFirst("_([^_])", "$1");
287 } else {
288 return text;
289 }
290 }
291
292 private Pixels getPixels(MenuItemBase menuItem) {
293 if (menuItem.getGraphic() instanceof ImageView) {
294 ImageView iv = (ImageView)menuItem.getGraphic();
295 Image im = iv.getImage();
296 if (im == null) return null;
297
298 String url = im.getUrl();
299
300 if (url == null || PixelUtils.supportedFormatType(url)) {
301 com.sun.prism.Image pi = (com.sun.prism.Image) Toolkit.getImageAccessor().getPlatformImage(im);
302
303 return pi == null ? null : PixelUtils.imageToPixels(pi);
304 }
305 }
306 return (null);
307 }
308
309 private void setShortcut(MenuItem glassSubMenuItem, MenuItemBase menuItem) {
310 final KeyCombination accelerator = menuItem.getAccelerator();
311 if (accelerator == null) {
312 glassSubMenuItem.setShortcut(0, 0);
313 } else if (accelerator instanceof KeyCodeCombination) {
314 KeyCodeCombination kcc = (KeyCodeCombination)accelerator;
315 KeyCode code = kcc.getCode();
316 assert PlatformUtil.isMac() || PlatformUtil.isLinux();
317 int modifier = glassModifiers(kcc);
318 if (PlatformUtil.isMac()) {
319 int finalCode = code.isLetterKey() ? code.getChar().toUpperCase().charAt(0)
320 : code.getCode();
321 glassSubMenuItem.setShortcut(finalCode, modifier);
|