private void updateColor(Display display, RGB color, boolean isBackground) {
    // Button.setBackgroundColor does not work (at least not on OSX) so
    // we instead have to use Button.setImage with an image of the given
    // color
    BufferedImage coloredImage = ImageUtils.createColoredImage(60, 20, color);
    Image image = SwtUtils.convertToSwt(display, coloredImage, false, -1);

    if (isBackground) {
      mBgColor = color;
      mBgButton.setImage(image);
    } else {
      mFgColor = color;
      mFgButton.setImage(image);
    }
  }
  private void updatePreview() {
    Display display = mPreviewArea.getDisplay();

    for (Control c : mPreviewArea.getChildren()) {
      c.dispose();
    }

    if (!validatePage()) {
      return;
    }

    Map<String, Map<String, BufferedImage>> map = generateImages(true /*previewOnly*/);
    for (Entry<String, Map<String, BufferedImage>> categoryEntry : map.entrySet()) {
      String category = categoryEntry.getKey();
      if (category.length() > 0) {
        Label nameLabel = new Label(mPreviewArea, SWT.NONE);
        nameLabel.setText(String.format("%1$s:", category));
        RowData rowData = new RowData();
        nameLabel.setLayoutData(rowData);
        // Ensure these get their own rows
        rowData.width = PREVIEW_AREA_WIDTH;
      }

      Map<String, BufferedImage> images = categoryEntry.getValue();
      for (Entry<String, BufferedImage> entry : images.entrySet()) {
        BufferedImage image = entry.getValue();
        Image swtImage = SwtUtils.convertToSwt(display, image, true, -1);
        if (swtImage != null) {
          @SuppressWarnings("unused") // Has side effect
          ImageControl imageControl = new ImageControl(mPreviewArea, SWT.NONE, swtImage);
        }
      }
    }

    mPreviewArea.layout(true);
  }