/**
  * Draw text via input method with composed text information. This method can draw texts with some
  * underlines to illustrate converting characters.
  *
  * <p>This method is workaround for TextAreaPainter. Because, TextAreaPainter can't treat
  * AttributedCharacterIterator directly. AttributedCharacterIterator has very important
  * information when composing text. It has a map where are converted characters and committed
  * characters. Ideally, changing TextAreaPainter method can treat AttributedCharacterIterator is
  * better. But it's very tough!! So I choose to write some code as a workaround.
  *
  * <p>This draw method is proceeded with the following steps. 1. Original TextAreaPainter draws
  * characters. 2. This refillComposedArea method erase previous paint characters by textarea's
  * background color. The refill area is only square that width and height defined by characters
  * with input method. 3. CompositionTextPainter.draw method paints composed text. It was actually
  * drawn by TextLayout.
  *
  * @param gfx set TextAreaPainter's Graphics object.
  * @param fillBackGroundColor set textarea's background.
  */
 public void draw(Graphics gfx, Color fillBackGroundColor) {
   assert (composedTextLayout != null);
   Point composedLoc = getCaretLocation();
   refillComposedArea(fillBackGroundColor, composedLoc.x, composedLoc.y);
   composedTextLayout.draw((Graphics2D) gfx, composedLoc.x, composedLoc.y);
 }