1 /******************************************************************************* 2 * Copyright (c) 2008, 2018 Angelo Zerr and others. 3 * 4 * This program and the accompanying materials 5 * are made available under the terms of the Eclipse Public License 2.0 6 * which accompanies this distribution, and is available at 7 * https://www.eclipse.org/legal/epl-2.0/ 8 * 9 * SPDX-License-Identifier: EPL-2.0 10 * 11 * Contributors: 12 * Angelo Zerr <angelo.zerr@gmail.com> - initial API and implementation 13 * IBM Corporation - initial API and implementation 14 *******************************************************************************/ 15 package org.eclipse.e4.ui.css.swt.helpers; 16 17 import java.net.URL; 18 import org.eclipse.e4.ui.css.core.util.resources.IResourcesLocatorManager; 19 import org.eclipse.e4.ui.css.core.utils.StringUtils; 20 import org.eclipse.jface.resource.ImageDescriptor; 21 import org.eclipse.swt.graphics.Device; 22 import org.eclipse.swt.graphics.Image; 23 import org.eclipse.swt.widgets.Button; 24 import org.eclipse.swt.widgets.Control; 25 import org.eclipse.swt.widgets.Display; 26 import org.eclipse.swt.widgets.Item; 27 import org.eclipse.swt.widgets.Shell; 28 import org.eclipse.swt.widgets.ToolItem; 29 import org.eclipse.swt.widgets.Widget; 30 import org.w3c.dom.css.CSSPrimitiveValue; 31 import org.w3c.dom.css.CSSValue; 32 33 public class CSSSWTImageHelper { 34 private static final String DEFAULT_IMAGE = "defaultImage"; 35 36 private static final String DEFAULT_HOT_IMAGE = "defaultHotImage"; 37 38 private static final String DEFAULT_DISABLE_IMAGE = "defaultDisableImage"; 39 getImage(CSSValue value, IResourcesLocatorManager manager, Display display)40 public static Image getImage(CSSValue value, 41 IResourcesLocatorManager manager, Display display) throws Exception { 42 if (value.getCssValueType() != CSSValue.CSS_PRIMITIVE_VALUE) { 43 return null; 44 } 45 CSSPrimitiveValue primitiveValue = (CSSPrimitiveValue) value; 46 switch (primitiveValue.getPrimitiveType()) { 47 case CSSPrimitiveValue.CSS_URI: 48 String path = primitiveValue.getStringValue(); 49 return loadImageFromURL(display, path, manager); 50 } 51 return null; 52 } 53 loadImageFromURL(Device device, String path, IResourcesLocatorManager manager)54 private static Image loadImageFromURL(Device device, String path, 55 IResourcesLocatorManager manager) throws Exception { 56 Image result = null; 57 58 String s = manager.resolve(path); 59 if (!StringUtils.isEmpty(s)) { 60 result = ImageDescriptor.createFromURL(new URL(s)).createImage(); 61 } 62 63 return result; 64 } 65 storeDefaultImage(Shell shell)66 public static void storeDefaultImage(Shell shell) { 67 storeDefaultImage(shell, DEFAULT_IMAGE, shell.getImage()); 68 } 69 storeDefaultImage(Item item)70 public static void storeDefaultImage(Item item) { 71 storeDefaultImage(item, DEFAULT_IMAGE, item.getImage()); 72 } 73 storeDefaultImage(ToolItem item)74 public static void storeDefaultImage(ToolItem item) { 75 storeDefaultImage((Item) item); 76 storeDefaultImage(item, DEFAULT_HOT_IMAGE, item.getHotImage()); 77 storeDefaultImage(item, DEFAULT_DISABLE_IMAGE, item.getDisabledImage()); 78 } 79 storeDefaultImage(Button button)80 public static void storeDefaultImage(Button button) { 81 storeDefaultImage(button, DEFAULT_IMAGE, button.getImage()); 82 } 83 restoreDefaultImage(Shell shell)84 public static void restoreDefaultImage(Shell shell) { 85 Image defaultImage = (Image) shell.getData(DEFAULT_IMAGE); 86 if (defaultImage != null) { 87 shell.setImage(defaultImage.isDisposed() ? null : defaultImage); 88 } 89 } 90 restoreDefaultImage(Item item)91 public static void restoreDefaultImage(Item item) { 92 Image defaultImage = (Image) item.getData(DEFAULT_IMAGE); 93 if (defaultImage != null) { 94 item.setImage(defaultImage.isDisposed() ? null : defaultImage); 95 } 96 } 97 restoreDefaultImage(ToolItem item)98 public static void restoreDefaultImage(ToolItem item) { 99 restoreDefaultImage((Item) item); 100 101 Image defaultImage = (Image) item.getData(DEFAULT_HOT_IMAGE); 102 if (defaultImage != null) { 103 item.setHotImage(defaultImage.isDisposed() ? null : defaultImage); 104 } 105 106 defaultImage = (Image) item.getData(DEFAULT_DISABLE_IMAGE); 107 if (defaultImage != null) { 108 item.setDisabledImage(defaultImage.isDisposed() ? null 109 : defaultImage); 110 } 111 } 112 restoreDefaultImage(Button button)113 public static void restoreDefaultImage(Button button) { 114 Image defaultImage = (Image) button.getData(DEFAULT_IMAGE); 115 if (defaultImage != null) { 116 button.setImage(defaultImage.isDisposed() ? null : defaultImage); 117 } 118 } 119 storeDefaultImage(Widget widget, String imageName, Image image)120 private static void storeDefaultImage(Widget widget, String imageName, 121 Image image) { 122 if (widget.getData(imageName) == null) { 123 widget.setData(imageName, image); 124 } 125 } 126 127 /** Helper function to avoid setting images unnecessarily */ setImage(Button button, Image image)128 public static void setImage(Button button, Image image) { 129 if (button.getImage() != image) { 130 storeDefaultImage(button); 131 button.setImage(image); 132 } 133 } 134 135 /** Helper function to avoid setting images unnecessarily */ setBackgroundImage(Control control, Image image)136 public static void setBackgroundImage(Control control, Image image) { 137 if (control != null && control.getBackgroundImage() != image) { 138 control.setBackgroundImage(image); 139 } 140 } 141 } 142 143