View Javadoc

    1   /*
    2    * Licensed to the Apache Software Foundation (ASF) under one or more
    3    * contributor license agreements.  See the NOTICE file distributed with
    4    * this work for additional information regarding copyright ownership.
    5    * The ASF licenses this file to You under the Apache License, Version 2.0
    6    * (the "License"); you may not use this file except in compliance with
    7    * the License.  You may obtain a copy of the License at
    8    *
    9    *      http://www.apache.org/licenses/LICENSE-2.0
    10   *
    11   * Unless required by applicable law or agreed to in writing, software
    12   * distributed under the License is distributed on an "AS IS" BASIS,
    13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14   * See the License for the specific language governing permissions and
    15   * limitations under the License.
    16   */
    17
    18  package org.apache.log4j.chainsaw.icons;
    19
    20  import org.apache.log4j.LogManager;
    21  import org.apache.log4j.Logger;
    22
    23  import javax.swing.*;
    24  import java.awt.*;
    25  import java.awt.image.BufferedImage;
    26
    27
    28  /**
    29   * A simple factory/facade for creating some of the standard Icons that are based
    30   * on line drawings
    31   *
    32   * @author Paul Smith &lt;psmith@apache.org&gt;
    33   * @author Scott Deboy &lt;sdeboy@apache.org&gt;
    34   */
    35  public final class LineIconFactory {
    36      private static final Logger logger = LogManager.getLogger(LineIconFactory.class);
    37
    38      /**
    39       *
    40       */
    41      private LineIconFactory() {
    42      }
    43
    44      public static Icon createExpandIcon() {
    45          int size = 8;
    46          int xOffSet = 0;
    47          int yOffSet = 0;
    48          try {
    49              GraphicsEnvironment environment =
    50                  GraphicsEnvironment.getLocalGraphicsEnvironment();
    51              BufferedImage image = new BufferedImage(size, size, BufferedImage.TYPE_INT_ARGB);
    52              Graphics2D g2D =
    53                  environment.createGraphics(
    54                      image);
    55              g2D.setBackground(new Color(0, 0, 0, 0));
    56              g2D.clearRect(0, 0, size, size);
    57              g2D.setStroke(new BasicStroke(1.5f));
    58              g2D.setRenderingHint(
    59                  RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE);
    60              g2D.setColor(Color.black);
    61              g2D.drawLine(
    62                  xOffSet, (size / 2) + yOffSet, size - xOffSet,
    63                  (size / 2) + yOffSet);
    64
    65              g2D.drawLine(
    66                  xOffSet + (size / 2), yOffSet, xOffSet + (size / 2),
    67                  (size) + yOffSet);
    68
    69              return new ImageIcon(image);
    70          } catch (Exception e) {
    71              logger.error("failed to create a Expand icon", e);
    72          }
    73
    74          return null;
    75      }
    76
    77      public static Icon createCollapseIcon() {
    78          int size = 8;
    79          int xOffSet = 0;
    80          int yOffSet = 0;
    81          try {
    82              GraphicsEnvironment environment =
    83                  GraphicsEnvironment.getLocalGraphicsEnvironment();
    84              BufferedImage image = new BufferedImage(size, size, BufferedImage.TYPE_INT_ARGB);
    85              Graphics2D g2D =
    86                  environment.createGraphics(
    87                      image);
    88              g2D.setBackground(new Color(0, 0, 0, 0));
    89              g2D.clearRect(0, 0, size, size);
    90              g2D.setStroke(new BasicStroke(1.5f));
    91              g2D.setRenderingHint(
    92                  RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE);
    93              g2D.setColor(Color.black);
    94              g2D.drawLine(
    95                  xOffSet, (size / 2) + yOffSet, size - xOffSet,
    96                  (size / 2) + yOffSet);
    97
    98              return new ImageIcon(image);
    99          } catch (Exception e) {
    100             logger.error("failed to create a Collapse icon", e);
    101         }
    102
    103         return null;
    104     }
    105
    106     public static Icon createCloseIcon() {
    107         return new CloseIcon(8, 0, 0);
    108     }
    109
    110     public static Icon createBlankIcon() {
    111         return new BlankIcon(16);
    112     }
    113
    114     /**
    115      * A nice and simple 'X' style icon that is used to indicate a 'close' operation.
    116      *
    117      * @author Scott Deboy &lt;sdeboy@apache.org&gt;
    118      */
    119     private static class BlankIcon implements Icon {
    120         int size;
    121
    122         public BlankIcon(int size) {
    123             this.size = size;
    124         }
    125
    126         public int getIconHeight() {
    127             return size;
    128         }
    129
    130         public int getIconWidth() {
    131             return size;
    132         }
    133
    134         public void paintIcon(Component c, Graphics g, int x, int y) {
    135         }
    136     }
    137
    138     /**
    139      * A nice and simple 'X' style icon that is used to indicate a 'close' operation.
    140      *
    141      * @author Scott Deboy &lt;sdeboy@apache.org&gt;
    142      */
    143     private static class CloseIcon implements Icon {
    144         int size;
    145         int xOffSet;
    146         int yOffSet;
    147
    148         public CloseIcon(int size, int xOffSet, int yOffSet) {
    149             this.size = size;
    150             this.xOffSet = xOffSet;
    151             this.yOffSet = yOffSet;
    152         }
    153
    154         public int getIconHeight() {
    155             return size;
    156         }
    157
    158         public int getIconWidth() {
    159             return size;
    160         }
    161
    162         public void paintIcon(Component c, Graphics g, int x, int y) {
    163             Graphics2D g2D = (Graphics2D) g;
    164             g2D.setStroke(new BasicStroke(1.5f));
    165             g2D.setRenderingHint(
    166                 RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE);
    167             g2D.setColor(Color.black);
    168             g2D.drawLine(
    169                 x + xOffSet, y + yOffSet, x + size + xOffSet, y + size + yOffSet);
    170             g2D.drawLine(
    171                 x + xOffSet, y + size + yOffSet, x + size + xOffSet, y + yOffSet);
    172         }
    173     }
    174 }