ConfigurableCaret
Date: 2017-02-11

org.fife.ui.rtextarea

## Class ConfigurableCaret

- java.lang.Object
- - java.awt.geom.RectangularShape
  - - java.awt.geom.Rectangle2D
    - - java.awt.Rectangle
      - - javax.swing.text.DefaultCaret
        - - org.fife.ui.rtextarea.ConfigurableCaret

- All Implemented Interfaces:
    java.awt.event.FocusListener, java.awt.event.MouseListener, java.awt.event.MouseMotionListener, java.awt.Shape, java.io.Serializable, java.lang.Cloneable, java.util.EventListener, javax.swing.text.Caret

      public class ConfigurableCaret
      extends javax.swing.text.DefaultCaret

  The caret used by `RTextArea`. This caret has all of the properties that `javax.swing.text.DefaultCaret` does, as well as adding the following niceties:
  - This caret can render itself many different ways; see the `setStyle(CaretStyle)` method and `CaretStyle` for more information.
  - On Microsoft Windows and other operating systems that do not support system selection (i.e., selecting text, then pasting via the middle mouse button), clicking the middle mouse button will cause a regular paste operation to occur. On systems that support system selection (i.e., all UNIX variants), the middle mouse button will behave normally.
  See Also:
    Serialized Form

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from class java.awt.geom.Rectangle2D

      `java.awt.geom.Rectangle2D.Double, java.awt.geom.Rectangle2D.Float`

  - ### Field Summary

    - ### Fields inherited from class javax.swing.text.DefaultCaret

      `ALWAYS_UPDATE, changeEvent, listenerList, NEVER_UPDATE, UPDATE_WHEN_ON_EDT`

    - ### Fields inherited from class java.awt.Rectangle

      `height, width, x, y`

    - ### Fields inherited from class java.awt.geom.Rectangle2D

      `OUT_BOTTOM, OUT_LEFT, OUT_RIGHT, OUT_TOP`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `ConfigurableCaret()` Creates the caret using `CaretStyle.THICK_VERTICAL_LINE_STYLE`.
    `ConfigurableCaret(CaretStyle style)` Constructs a new `ConfigurableCaret`.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected void` | `damage(java.awt.Rectangle r)` Overridden to damage the correct width of the caret, since this caret can be different sizes.
    `void` | `deinstall(javax.swing.text.JTextComponent c)` Called when the UI is being removed from the interface of a JTextComponent.
    `boolean` | `getRoundedSelectionEdges()` Returns whether this caret's selection uses rounded edges.
    `protected javax.swing.text.Highlighter.HighlightPainter` | `getSelectionPainter()` Gets the painter for the Highlighter.
    `CaretStyle` | `getStyle()` Gets the current style of this caret.
    `protected RTextArea` | `getTextArea()` Gets the text editor component that this caret is bound to.
    `void` | `install(javax.swing.text.JTextComponent c)` Installs this caret on a text component.
    `boolean` | `isAlwaysVisible()` Returns whether this caret is always visible (as opposed to blinking, or not visible when the editor's window is not focused).
    `void` | `mouseClicked(java.awt.event.MouseEvent e)` Called when the mouse is clicked.
    `void` | `mousePressed(java.awt.event.MouseEvent e)` Overridden to also focus the text component on right mouse clicks.
    `void` | `paint(java.awt.Graphics g)` Paints the cursor.
    `void` | `setAlwaysVisible(boolean alwaysVisible)` Toggles whether this caret should always be visible (as opposed to blinking, or not visible when the editor's window is not focused).
    `void` | `setRoundedSelectionEdges(boolean rounded)` Sets whether this caret's selection should have rounded edges.
    `void` | `setSelectionVisible(boolean visible)` Overridden to always render the selection, even when the text component loses focus.
    `void` | `setStyle(CaretStyle style)` Sets the style used when painting the caret.

    - ### Methods inherited from class javax.swing.text.DefaultCaret

      `addChangeListener, adjustVisibility, equals, fireStateChanged, focusGained, focusLost, getBlinkRate, getChangeListeners, getComponent, getDot, getDotBias, getListeners, getMagicCaretPosition, getMark, getMarkBias, getUpdatePolicy, isActive, isSelectionVisible, isVisible, mouseDragged, mouseEntered, mouseExited, mouseMoved, mouseReleased, moveCaret, moveDot, moveDot, positionCaret, removeChangeListener, repaint, setBlinkRate, setDot, setDot, setMagicCaretPosition, setUpdatePolicy, setVisible, toString`

    - ### Methods inherited from class java.awt.Rectangle

      `add, add, add, contains, contains, contains, contains, createIntersection, createUnion, getBounds, getBounds2D, getHeight, getLocation, getSize, getWidth, getX, getY, grow, inside, intersection, intersects, isEmpty, move, outcode, reshape, resize, setBounds, setBounds, setLocation, setLocation, setRect, setSize, setSize, translate, union`

    - ### Methods inherited from class java.awt.geom.Rectangle2D

      `add, add, add, contains, contains, getPathIterator, getPathIterator, hashCode, intersect, intersects, intersectsLine, intersectsLine, outcode, setFrame, setRect, union`

    - ### Methods inherited from class java.awt.geom.RectangularShape

      `clone, contains, contains, getCenterX, getCenterY, getFrame, getMaxX, getMaxY, getMinX, getMinY, intersects, setFrame, setFrame, setFrameFromCenter, setFrameFromCenter, setFrameFromDiagonal, setFrameFromDiagonal`

    - ### Methods inherited from class java.lang.Object

      `finalize, getClass, notify, notifyAll, wait, wait, wait`

    - ### Methods inherited from interface java.awt.Shape

      `contains, contains, contains, contains, getPathIterator, getPathIterator, intersects, intersects`

- - ### Constructor Detail

    - #### ConfigurableCaret

          public ConfigurableCaret()

      Creates the caret using `CaretStyle.THICK_VERTICAL_LINE_STYLE`.

    - #### ConfigurableCaret

          public ConfigurableCaret(CaretStyle style)

      Constructs a new `ConfigurableCaret`.
      Parameters:
        `style` - The style to use when painting the caret. If this is invalid, then `CaretStyle.THICK_VERTICAL_LINE_STYLE` is used.

  - ### Method Detail

    - #### damage

          protected void damage(java.awt.Rectangle r)

      Overridden to damage the correct width of the caret, since this caret can be different sizes.
      Overrides:
        `damage` in class `javax.swing.text.DefaultCaret`
      Parameters:
        `r` - The current location of the caret.

    - #### deinstall

          public void deinstall(javax.swing.text.JTextComponent c)

      Called when the UI is being removed from the interface of a JTextComponent. This is used to unregister any listeners that were attached.
      Specified by:
        `deinstall` in interface `javax.swing.text.Caret`
      Overrides:
        `deinstall` in class `javax.swing.text.DefaultCaret`
      Parameters:
        `c` - The text component. If this is not an `RTextArea`, an `Exception` will be thrown.
      See Also:
        `Caret.deinstall(javax.swing.text.JTextComponent)`

    - #### getTextArea

          protected RTextArea getTextArea()

      Gets the text editor component that this caret is bound to.
      Returns:
        The `RTextArea`.

    - #### getRoundedSelectionEdges

          public boolean getRoundedSelectionEdges()

      Returns whether this caret's selection uses rounded edges.
      Returns:
        Whether this caret's edges are rounded.
      See Also:
        `setRoundedSelectionEdges(boolean)`

    - #### getSelectionPainter

          protected javax.swing.text.Highlighter.HighlightPainter getSelectionPainter()

      Gets the painter for the Highlighter. This is overridden to return our custom selection painter.
      Overrides:
        `getSelectionPainter` in class `javax.swing.text.DefaultCaret`
      Returns:
        The painter.

    - #### getStyle

          public CaretStyle getStyle()

      Gets the current style of this caret.
      Returns:
        The caret's style.
      See Also:
        `setStyle(CaretStyle)`

    - #### install

          public void install(javax.swing.text.JTextComponent c)

      Installs this caret on a text component.
      Specified by:
        `install` in interface `javax.swing.text.Caret`
      Overrides:
        `install` in class `javax.swing.text.DefaultCaret`
      Parameters:
        `c` - The text component. If this is not an `RTextArea`, an `Exception` will be thrown.
      See Also:
        `Caret.install(javax.swing.text.JTextComponent)`

    - #### isAlwaysVisible

          public boolean isAlwaysVisible()

      Returns whether this caret is always visible (as opposed to blinking, or not visible when the editor's window is not focused). This can be used by popup windows that want the caret's location to still be visible for contextual purposes while they are displayed.
      Returns:
        Whether this caret is always visible.
      See Also:
        `setAlwaysVisible(boolean)`

    - #### mouseClicked

          public void mouseClicked(java.awt.event.MouseEvent e)

      Called when the mouse is clicked. If the click was generated from button1, a double click selects a word, and a triple click the current line.
      Specified by:
        `mouseClicked` in interface `java.awt.event.MouseListener`
      Overrides:
        `mouseClicked` in class `javax.swing.text.DefaultCaret`
      Parameters:
        `e` - the mouse event
      See Also:
        `MouseListener.mouseClicked(java.awt.event.MouseEvent)`

    - #### mousePressed

          public void mousePressed(java.awt.event.MouseEvent e)

      Overridden to also focus the text component on right mouse clicks.
      Specified by:
        `mousePressed` in interface `java.awt.event.MouseListener`
      Overrides:
        `mousePressed` in class `javax.swing.text.DefaultCaret`
      Parameters:
        `e` - The mouse event.

    - #### paint

          public void paint(java.awt.Graphics g)

      Paints the cursor.
      Specified by:
        `paint` in interface `javax.swing.text.Caret`
      Overrides:
        `paint` in class `javax.swing.text.DefaultCaret`
      Parameters:
        `g` - The graphics context in which to paint.

    - #### setAlwaysVisible

          public void setAlwaysVisible(boolean alwaysVisible)

      Toggles whether this caret should always be visible (as opposed to blinking, or not visible when the editor's window is not focused). This can be used by popup windows that want the caret's location to still be visible for contextual purposes while they are displayed.
      Parameters:
        `alwaysVisible` - Whether this caret should always be visible.
      See Also:
        `isAlwaysVisible()`

    - #### setRoundedSelectionEdges

          public void setRoundedSelectionEdges(boolean rounded)

      Sets whether this caret's selection should have rounded edges.
      Parameters:
        `rounded` - Whether it should have rounded edges.
      See Also:
        `getRoundedSelectionEdges()`

    - #### setSelectionVisible

          public void setSelectionVisible(boolean visible)

      Overridden to always render the selection, even when the text component loses focus.
      Specified by:
        `setSelectionVisible` in interface `javax.swing.text.Caret`
      Overrides:
        `setSelectionVisible` in class `javax.swing.text.DefaultCaret`
      Parameters:
        `visible` - Whether the selection should be visible. This parameter is ignored.

    - #### setStyle

          public void setStyle(CaretStyle style)

      Sets the style used when painting the caret.
      Parameters:
        `style` - The style to use. This should not be `null`.
      See Also:
        `getStyle()`