Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ public class ToolBar extends Composite {
ToolItem [] items;
ToolItem [] tabItemList;
boolean ignoreResize, ignoreMouse;
ImageList imageList, disabledImageList, hotImageList;
private ImageList imageList, disabledImageList, hotImageList;
static final long ToolBarProc;
static final TCHAR ToolBarClass = new TCHAR (OS.TOOLBARCLASSNAME, true);
static {
Expand Down Expand Up @@ -143,6 +143,34 @@ public ToolBar (Composite parent, int style) {
}
}

/*
* The given image bounds are the bounds of the tool item's image and determine which shared image
* lists are used. They are intentionally not derived from the images actually added: for a disabled
* item with CHECK or RADIO style, those are the disabled images, which may have different bounds.
* Note that the icon size of an image list is defined by the first image added to it.
*/
int addImage(Rectangle imageBounds, Image image, Image hotImage, Image disabledImage) {
int listStyle = style & SWT.RIGHT_TO_LEFT;
if (imageList == null) {
imageList = display.getImageListToolBar(listStyle, imageBounds.width, imageBounds.height, getAutoscalingZoom());
}
if (hotImageList == null) {
hotImageList = display.getImageListToolBarHot(listStyle, imageBounds.width, imageBounds.height,
getAutoscalingZoom());
}
if (disabledImageList == null) {
disabledImageList = display.getImageListToolBarDisabled(listStyle, imageBounds.width, imageBounds.height,
getAutoscalingZoom());
}
int index = imageList.add(image);
hotImageList.add(hotImage);
disabledImageList.add(disabledImage);
setImageList(imageList);
setHotImageList(hotImageList);
setDisabledImageList(disabledImageList);
return index;
}

@Override
long callWindowProc (long hwnd, int msg, long wParam, long lParam) {
if (handle == 0) return 0;
Expand Down Expand Up @@ -199,6 +227,10 @@ public void layout (boolean changed) {
super.layout(changed);
}

void clearImage(int index) {
putImage(index, null, null, null);
}

void clearSizeCache(boolean changed) {
// If changed, discard the cached layout information
if (changed) {
Expand Down Expand Up @@ -869,6 +901,18 @@ boolean mnemonicMatch (char ch) {
return findMnemonic (items [id [0]].text) != '\0';
}

void putImage(int index, Image image, Image hotImage, Image disabledImage) {
if (imageList != null) {
imageList.put(index, image);
}
if (hotImageList != null) {
hotImageList.put(index, hotImage);
}
if (disabledImageList != null) {
disabledImageList.put(index, disabledImage);
}
}

@Override
void releaseChildren (boolean destroy) {
if (items != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -535,12 +535,7 @@ void releaseImages () {
* an image and one is never assigned, this is not a problem.
*/
if ((info.fsStyle & OS.BTNS_SEP) == 0 && info.iImage != OS.I_IMAGENONE) {
ImageList imageList = parent.getImageList ();
ImageList hotImageList = parent.getHotImageList ();
ImageList disabledImageList = parent.getDisabledImageList();
if (imageList != null) imageList.put (info.iImage, null);
if (hotImageList != null) hotImageList.put (info.iImage, null);
if (disabledImageList != null) disabledImageList.put (info.iImage, null);
parent.clearImage(info.iImage);
}
}

Expand Down Expand Up @@ -1099,21 +1094,7 @@ void updateImages (boolean enabled) {
info.dwMask = OS.TBIF_IMAGE;
OS.SendMessage (hwnd, OS.TB_GETBUTTONINFO, id, info);
if (info.iImage == OS.I_IMAGENONE && image == null) return;
ImageList imageList = parent.getImageList ();
ImageList hotImageList = parent.getHotImageList ();
ImageList disabledImageList = parent.getDisabledImageList();
if (info.iImage == OS.I_IMAGENONE) {
Rectangle boundsInPoints = image.getBounds();
int listStyle = parent.style & SWT.RIGHT_TO_LEFT;
if (imageList == null) {
imageList = display.getImageListToolBar (listStyle, boundsInPoints.width, boundsInPoints.height, getAutoscalingZoom());
}
if (disabledImageList == null) {
disabledImageList = display.getImageListToolBarDisabled (listStyle, boundsInPoints.width, boundsInPoints.height, getAutoscalingZoom());
}
if (hotImageList == null) {
hotImageList = display.getImageListToolBarHot (listStyle, boundsInPoints.width, boundsInPoints.height, getAutoscalingZoom());
}
Image disabled = disabledImage;
if (disabledImage == null) {
if (disabledImage2 != null) disabledImage2.dispose ();
Expand All @@ -1134,27 +1115,19 @@ void updateImages (boolean enabled) {
if ((style & (SWT.CHECK | SWT.RADIO)) != 0) {
if (!enabled) image2 = hot = disabled;
}
info.iImage = imageList.add (image2);
disabledImageList.add (disabled);
hotImageList.add (hot != null ? hot : image2);
parent.setImageList (imageList);
parent.setDisabledImageList (disabledImageList);
parent.setHotImageList (hotImageList);
info.iImage = parent.addImage(image.getBounds(), image2, hot != null ? hot : image2, disabled);
} else {
Image disabled = null;
if (disabledImageList != null) {
if (image != null) {
if (disabledImage2 != null) disabledImage2.dispose ();
disabledImage2 = null;
disabled = disabledImage;
if (disabledImage == null) {
disabled = image;
if (!enabled) {
disabled = disabledImage2 = new Image (display, image, SWT.IMAGE_DISABLE);
}
if (image != null) {
if (disabledImage2 != null) disabledImage2.dispose ();
disabledImage2 = null;
disabled = disabledImage;
if (disabledImage == null) {
disabled = image;
if (!enabled) {
disabled = disabledImage2 = new Image (display, image, SWT.IMAGE_DISABLE);
}
}
disabledImageList.put (info.iImage, disabled);
}
/*
* Bug in Windows. When a tool item with the style
Expand All @@ -1167,12 +1140,8 @@ void updateImages (boolean enabled) {
if ((style & (SWT.CHECK | SWT.RADIO)) != 0) {
if (!enabled) image2 = hot = disabled;
}
if (imageList != null) {
imageList.put (info.iImage, image2);
}
if (hotImageList != null) {
hotImageList.put (info.iImage, hot != null ? hot : image2);
}

parent.putImage(info.iImage, image2, hot != null ? hot : image2, disabled);
if (image == null) info.iImage = OS.I_IMAGENONE;
}

Expand Down
Loading