RTextAreaUI
Date: 2017-02-11

org.fife.ui.rtextarea

## Class RTextAreaUI

- java.lang.Object
- - javax.swing.plaf.ComponentUI
  - - javax.swing.plaf.TextUI
    - - javax.swing.plaf.basic.BasicTextUI
      - - javax.swing.plaf.basic.BasicTextAreaUI
        - - org.fife.ui.rtextarea.RTextAreaUI

- All Implemented Interfaces:
    javax.swing.text.ViewFactory
  Direct Known Subclasses:
    RSyntaxTextAreaUI

      public class RTextAreaUI
      extends javax.swing.plaf.basic.BasicTextAreaUI

  The UI used by instances of `RTextArea`. This UI takes into account all of the "extras" involved in an `RTextArea`, including having a special caret (for insert and overwrite), background images, highlighting the current line, etc.

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from class javax.swing.plaf.basic.BasicTextUI

      `javax.swing.plaf.basic.BasicTextUI.BasicCaret, javax.swing.plaf.basic.BasicTextUI.BasicHighlighter`

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected RTextArea` | `textArea`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `RTextAreaUI(javax.swing.JComponent textArea)` Constructor.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `javax.swing.text.View` | `create(javax.swing.text.Element elem)` Creates the view for an element.
    `protected javax.swing.text.Caret` | `createCaret()` Returns the default caret for an `RTextArea`.
    `protected javax.swing.text.Keymap` | `createKeymap()` Creates the keymap for this text area.
    `protected javax.swing.ActionMap` | `createRTextAreaActionMap()` Creates a default action map.
    `static javax.swing.plaf.ComponentUI` | `createUI(javax.swing.JComponent textArea)` Creates a UI for an RTextArea.
    `protected java.lang.String` | `getActionMapName()` Returns the name to use to cache/fetch the shared action map.
    `javax.swing.text.EditorKit` | `getEditorKit(javax.swing.text.JTextComponent tc)` Fetches the EditorKit for the UI.
    `RTextArea` | `getRTextArea()` Returns the text area for which we are the UI.
    `protected javax.swing.InputMap` | `getRTextAreaInputMap()` Get the InputMap to use for the UI.
    `protected java.awt.Rectangle` | `getVisibleEditorRect()` Gets the allocation to give the root View.
    `protected void` | `installDefaults()`
    `protected void` | `installKeyboardActions()`
    `void` | `installUI(javax.swing.JComponent c)` Installs this UI to the given text component.
    `protected void` | `paintBackground(java.awt.Graphics g)`
    `protected void` | `paintCurrentLineHighlight(java.awt.Graphics g, java.awt.Rectangle visibleRect)` Paints the highlighted current line, if it is enabled.
    `protected void` | `paintEditorAugmentations(java.awt.Graphics g)` Paints editor augmentations added by RTextArea: highlighted lines, current line highlight, and margin line.
    `protected void` | `paintLineHighlights(java.awt.Graphics g)` Paints any line highlights.
    `protected void` | `paintMarginLine(java.awt.Graphics g, java.awt.Rectangle visibleRect)` Draws the "margin line" if enabled.
    `protected void` | `paintSafely(java.awt.Graphics g)`
    `int` | `yForLine(int line)` Returns the y-coordinate of the specified line.
    `int` | `yForLineContaining(int offs)` Returns the y-coordinate of the line containing an offset.

    - ### Methods inherited from class javax.swing.plaf.basic.BasicTextAreaUI

      `getBaseline, getBaselineResizeBehavior, getMinimumSize, getPreferredSize, getPropertyPrefix, propertyChange`

    - ### Methods inherited from class javax.swing.plaf.basic.BasicTextUI

      `create, createHighlighter, damageRange, damageRange, getComponent, getKeymapName, getMaximumSize, getNextVisualPositionFrom, getRootView, getToolTipText, installListeners, modelChanged, modelToView, modelToView, paint, setView, uninstallDefaults, uninstallKeyboardActions, uninstallListeners, uninstallUI, update, viewToModel, viewToModel`

    - ### Methods inherited from class javax.swing.plaf.ComponentUI

      `contains, getAccessibleChild, getAccessibleChildrenCount`

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

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### textArea

          protected RTextArea textArea

  - ### Constructor Detail

    - #### RTextAreaUI

          public RTextAreaUI(javax.swing.JComponent textArea)

      Constructor.
      Parameters:
        `textArea` - An instance of `RTextArea`.
      Throws:
        `java.lang.IllegalArgumentException` - If `textArea` is not an instance of `RTextArea`.

  - ### Method Detail

    - #### createUI

          public static javax.swing.plaf.ComponentUI createUI(javax.swing.JComponent textArea)

      Creates a UI for an RTextArea.
      Parameters:
        `textArea` - A text area.
      Returns:
        The UI.

    - #### create

          public javax.swing.text.View create(javax.swing.text.Element elem)

      Creates the view for an element. Returns a WrappedPlainView or PlainView.
      Specified by:
        `create` in interface `javax.swing.text.ViewFactory`
      Overrides:
        `create` in class `javax.swing.plaf.basic.BasicTextAreaUI`
      Parameters:
        `elem` - The element.
      Returns:
        The view.

    - #### createCaret

          protected javax.swing.text.Caret createCaret()

      Returns the default caret for an `RTextArea`. This caret is capable of displaying itself differently for insert/overwrite modes.
      Overrides:
        `createCaret` in class `javax.swing.plaf.basic.BasicTextUI`
      Returns:
        The caret.

    - #### createKeymap

          protected javax.swing.text.Keymap createKeymap()

      Creates the keymap for this text area. This takes the super class's keymap, but sets the default keystroke to be RTextAreaEditorKit's DefaultKeyTypedAction. This must be done to override the default keymap's default key-typed action.
      Overrides:
        `createKeymap` in class `javax.swing.plaf.basic.BasicTextUI`
      Returns:
        The keymap.

    - #### createRTextAreaActionMap

          protected javax.swing.ActionMap createRTextAreaActionMap()

      Creates a default action map. This action map contains actions for all basic text area work - cut, copy, paste, select, caret motion, etc.

      This isn't named `createActionMap()` because there is a package-private member by that name in `BasicTextAreaUI`, and some compilers will give warnings that we are not overriding that method since it is package-private.

      Returns:
        The action map.

    - #### getActionMapName

          protected java.lang.String getActionMapName()

      Returns the name to use to cache/fetch the shared action map. This should be overridden by subclasses if the subclass has its own custom editor kit to install, so its actions get picked up.
      Returns:
        The name of the cached action map.

    - #### getEditorKit

          public javax.swing.text.EditorKit getEditorKit(javax.swing.text.JTextComponent tc)

      Fetches the EditorKit for the UI.
      Overrides:
        `getEditorKit` in class `javax.swing.plaf.basic.BasicTextUI`
      Parameters:
        `tc` - the text component for which this UI is installed
      Returns:
        the editor capabilities
      See Also:
        `TextUI.getEditorKit(javax.swing.text.JTextComponent)`

    - #### getRTextArea

          public RTextArea getRTextArea()

      Returns the text area for which we are the UI.
      Returns:
        The text area.

    - #### getRTextAreaInputMap

          protected javax.swing.InputMap getRTextAreaInputMap()

      Get the InputMap to use for the UI.

      This method is not named `getInputMap()` because there is a package-private method in `BasicTextAreaUI` with that name. Thus, creating a new method with that name causes certain compilers to issue warnings that you are not actually overriding the original method (since it is package-private).

    - #### getVisibleEditorRect

          protected java.awt.Rectangle getVisibleEditorRect()

      Gets the allocation to give the root View. Due to an unfortunate set of historical events this method is inappropriately named. The Rectangle returned has nothing to do with visibility. The component must have a non-zero positive size for this translation to be computed.
      Overrides:
        `getVisibleEditorRect` in class `javax.swing.plaf.basic.BasicTextUI`
      Returns:
        the bounding box for the root view

    - #### installDefaults

          protected void installDefaults()

      Overrides:
        `installDefaults` in class `javax.swing.plaf.basic.BasicTextAreaUI`

    - #### installKeyboardActions

          protected void installKeyboardActions()

      Overrides:
        `installKeyboardActions` in class `javax.swing.plaf.basic.BasicTextUI`

    - #### installUI

          public void installUI(javax.swing.JComponent c)

      Installs this UI to the given text component.
      Overrides:
        `installUI` in class `javax.swing.plaf.basic.BasicTextUI`

    - #### paintBackground

          protected void paintBackground(java.awt.Graphics g)

      Overrides:
        `paintBackground` in class `javax.swing.plaf.basic.BasicTextUI`

    - #### paintCurrentLineHighlight

          protected void paintCurrentLineHighlight(java.awt.Graphics g,
                                       java.awt.Rectangle visibleRect)

      Paints the highlighted current line, if it is enabled.
      Parameters:
        `g` - The graphics context with which to paint.
        `visibleRect` - The visible rectangle of the text area.

    - #### paintEditorAugmentations

          protected void paintEditorAugmentations(java.awt.Graphics g)

      Paints editor augmentations added by RTextArea: highlighted lines, current line highlight, and margin line.
      Parameters:
        `g` - The graphics context with which to paint.

    - #### paintLineHighlights

          protected void paintLineHighlights(java.awt.Graphics g)

      Paints any line highlights.
      Parameters:
        `g` - The graphics context.

    - #### paintMarginLine

          protected void paintMarginLine(java.awt.Graphics g,
                             java.awt.Rectangle visibleRect)

      Draws the "margin line" if enabled.
      Parameters:
        `g` - The graphics context to paint with.
        `visibleRect` - The visible rectangle of this text area.

    - #### paintSafely

          protected void paintSafely(java.awt.Graphics g)

      Overrides:
        `paintSafely` in class `javax.swing.plaf.basic.BasicTextUI`

    - #### yForLine

          public int yForLine(int line)
                       throws javax.swing.text.BadLocationException

      Returns the y-coordinate of the specified line.

      The default implementation is equivalent to:

           int startOffs = textArea.getLineStartOffset(line);
           return yForLineContaining(startOffs);

      Subclasses that can calculate this value more quickly than traditional `BasicTextUI.modelToView(JTextComponent, int)` calls should override this method to do so. This method may be used when the entire bounding box isn't needed, to speed up rendering.
      Parameters:
        `line` - The line number.
      Returns:
        The y-coordinate of the top of the line, or `-1` if this text area doesn't yet have a positive size or the line is hidden (i.e. from folding).
      Throws:
        `javax.swing.text.BadLocationException` - If `line` isn't a valid line number for this document.

    - #### yForLineContaining

          public int yForLineContaining(int offs)
                                 throws javax.swing.text.BadLocationException

      Returns the y-coordinate of the line containing an offset.

      The default implementation is equivalent to:

           int line = textArea.getLineOfOffset(offs);
           int startOffs = textArea.getLineStartOffset(line);
           return modelToView(startOffs).y;

      Subclasses that can calculate this value more quickly than traditional `BasicTextUI.modelToView(JTextComponent, int)` calls should override this method to do so. This method may be used when the entire bounding box isn't needed, to speed up rendering.
      Parameters:
        `offs` - The offset info the document.
      Returns:
        The y-coordinate of the top of the offset, or `-1` if this text area doesn't yet have a positive size or the line is hidden (i.e. from folding).
      Throws:
        `javax.swing.text.BadLocationException` - If `offs` isn't a valid offset into the document.