Example #1
0
  private void drawLabels(Graphics2D g2d) {
    final FontMetrics fontMetrics = g2d.getFontMetrics();
    final int n = getNumGradationCurvePoints();
    g2d.setStroke(new BasicStroke(2));
    Color c1 = (foregroundColor != null ? foregroundColor : Color.black).brighter();
    Color c2 = (backgroundColor != null ? backgroundColor : Color.white).darker();
    for (int i = 0; i < n; i++) {

      ColorPaletteDef.Point slider = getGradationCurvePointAt(i);
      final double normalizedSample = normalizeSample(slider.getSample());
      double sliderPos = normalizedSample * (palettePos2 - palettePos1);

      double tx;
      double ty;
      if (orientation == HORIZONTAL) {
        tx = palettePos1 + sliderPos;
        ty = paletteRect.y + paletteRect.height;
      } else {
        tx = paletteRect.x + paletteRect.width;
        ty = palettePos1 + sliderPos;
      }
      g2d.translate(tx, ty);

      g2d.setPaint(slider.getColor());
      g2d.fill(sliderShape);

      int gray =
          (slider.getColor().getRed() + slider.getColor().getGreen() + slider.getColor().getBlue())
              / 3;
      g2d.setColor(gray < 128 ? c2 : c1);
      g2d.draw(sliderShape);

      float x0;
      float y0;
      if (orientation == HORIZONTAL) {
        x0 = -0.5f * labelWidths[i];
        y0 = _LABEL_GAP + fontMetrics.getMaxAscent();
      } else {
        x0 = _LABEL_GAP;
        y0 = fontMetrics.getMaxAscent();
      }
      g2d.setPaint(foregroundColor);
      g2d.drawString(labels[i], x0, y0);

      g2d.translate(-tx, -ty);
    }
  }
Example #2
0
  private void initDrawing() {
    final FontMetrics fontMetrics = createFontMetrics();
    final int n = getNumGradationCurvePoints();
    labels = new String[n];
    labelWidths = new int[n];
    int textHeight = fontMetrics.getHeight();
    final double minValue = imageInfo.getColorPaletteDef().getMinDisplaySample();
    final double maxValue = imageInfo.getColorPaletteDef().getMaxDisplaySample();
    double roundFactor = MathUtils.computeRoundFactor(minValue, maxValue, 2);
    for (int i = 0; i < n; i++) {
      ColorPaletteDef.Point slider = getGradationCurvePointAt(i);
      labels[i] = String.valueOf(MathUtils.round(slider.getSample(), roundFactor));
      labelWidths[i] = fontMetrics.stringWidth(labels[i]);
    }

    int headerTextVSpace = 0;
    int headerTextWidth = 0;
    if (hasHeaderText()) {
      headerTextVSpace = textHeight + _GAP;
      headerTextWidth = fontMetrics.stringWidth(headerText);
    }

    int legendWidth = 0;
    int legendHeight = 0;
    int maxLabelWidth = 0;
    for (int i = 0; i < n; i++) {
      legendWidth += _LABEL_GAP + labelWidths[i];
      legendHeight += 2 * textHeight;
      maxLabelWidth = Math.max(labelWidths[i], maxLabelWidth);
    }

    if (orientation == HORIZONTAL) {
      legendWidth = Math.max(legendWidth, _MIN_PALETTE_HEIGHT);
      legendWidth = _GAP + Math.max(legendWidth, headerTextWidth) + _GAP;
      legendHeight = _GAP + headerTextVSpace + _MIN_PALETTE_HEIGHT + _LABEL_GAP + textHeight + _GAP;
      legendWidth = Math.max(_MIN_LEGEND_WIDTH, adjust(legendWidth, 16));
      legendHeight = Math.max(_MIN_LEGEND_HEIGHT, adjust(legendHeight, 16));
    } else {
      legendWidth = _MIN_PALETTE_HEIGHT + _LABEL_GAP + maxLabelWidth;
      legendWidth = _GAP + Math.max(legendWidth, headerTextWidth) + _GAP;
      legendHeight =
          _GAP
              + headerTextVSpace
              + Math.max(legendHeight, _MIN_PALETTE_WIDTH)
              + _LABEL_GAP
              + textHeight
              + _GAP;
      legendWidth = Math.max(_MIN_LEGEND_HEIGHT, adjust(legendWidth, 16));
      legendHeight = Math.max(_MIN_LEGEND_WIDTH, adjust(legendHeight, 16));
    }

    legendSize = new Dimension(legendWidth, legendHeight);

    final int headerTextSpace = headerText != null ? textHeight + _GAP : 0;
    final int labelTextSpace = _LABEL_GAP + textHeight;
    if (orientation == HORIZONTAL) {
      paletteRect =
          new Rectangle(
              _GAP,
              _GAP + headerTextSpace,
              legendSize.width - (_GAP + _GAP),
              legendSize.height - (_GAP + headerTextSpace + labelTextSpace + _GAP));
      int paletteGap = Math.max(labelWidths[0], labelWidths[n - 1]) / 2;
      palettePos1 = paletteRect.x + paletteGap;
      palettePos2 = paletteRect.x + paletteRect.width - paletteGap;
    } else {
      paletteRect =
          new Rectangle(
              _GAP,
              _GAP + headerTextSpace,
              legendSize.width - (_GAP + labelTextSpace + maxLabelWidth + _GAP),
              legendSize.height - (_GAP + headerTextSpace + _GAP));
      int paletteGap = Math.max(textHeight, _SLIDER_WIDTH) / 2;
      palettePos1 = paletteRect.y + paletteGap;
      palettePos2 = paletteRect.y + paletteRect.height - paletteGap;
    }
    sliderShape = createSliderShape();
  }