src/Tools/jEdit/src/text_painter.scala
author wenzelm
Mon, 13 Jun 2011 23:09:01 +0200
changeset 43376 0f6880c1c759
parent 43375 09d992ab57c6
permissions -rw-r--r--
some direct text foreground painting, instead of token marking; common snapshot for all text area painters (NOT gutter etc.) tuned;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
43369
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
     1
/*  Title:      Tools/jEdit/src/text_painter.scala
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
     3
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
     4
Replacement painter for jEdit text area.
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
     5
*/
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
     6
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
     7
package isabelle.jedit
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
     8
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
     9
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
    10
import isabelle._
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
    11
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
    12
import java.awt.{Graphics, Graphics2D}
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
    13
import java.util.ArrayList
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
    14
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
    15
import org.gjt.sp.jedit.Debug
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
    16
import org.gjt.sp.jedit.syntax.{DisplayTokenHandler, Chunk}
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
    17
import org.gjt.sp.jedit.textarea.{JEditTextArea, TextAreaExtension, TextAreaPainter}
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
    18
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
    19
43376
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
    20
class Text_Painter(doc_view: Document_View) extends TextAreaExtension
43369
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
    21
{
43376
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
    22
  private val text_area = doc_view.text_area
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
    23
43369
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
    24
  private val orig_text_painter: TextAreaExtension =
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
    25
  {
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
    26
    val name = "org.gjt.sp.jedit.textarea.TextAreaPainter$PaintText"
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
    27
    text_area.getPainter.getExtensions.iterator.filter(x => x.getClass.getName == name).toList
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
    28
    match {
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
    29
      case List(x) => x
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
    30
      case _ => error("Expected exactly one " + name)
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
    31
    }
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
    32
  }
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
    33
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
    34
  override def paintScreenLineRange(gfx: Graphics2D,
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
    35
    first_line: Int, last_line: Int, physical_lines: Array[Int],
43375
09d992ab57c6 imitate original Chunk.paintChunkList;
wenzelm
parents: 43374
diff changeset
    36
    start: Array[Int], end: Array[Int], y_start: Int, line_height: Int)
43369
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
    37
  {
43373
639c3aca2ed3 always use our text painter;
wenzelm
parents: 43372
diff changeset
    38
    val buffer = text_area.getBuffer
639c3aca2ed3 always use our text painter;
wenzelm
parents: 43372
diff changeset
    39
    Isabelle.swing_buffer_lock(buffer) {
639c3aca2ed3 always use our text painter;
wenzelm
parents: 43372
diff changeset
    40
      val painter = text_area.getPainter
639c3aca2ed3 always use our text painter;
wenzelm
parents: 43372
diff changeset
    41
      val font = painter.getFont
639c3aca2ed3 always use our text painter;
wenzelm
parents: 43372
diff changeset
    42
      val font_context = painter.getFontRenderContext
43376
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
    43
      val font_metrics = painter.getFontMetrics
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
    44
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
    45
      def paint_chunk_list(head_offset: Text.Offset, head: Chunk, x: Float, y: Float): Float =
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
    46
      {
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
    47
        val clip_rect = gfx.getClipBounds
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
    48
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
    49
        var w = 0.0f
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
    50
        var offset = head_offset
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
    51
        var chunk = head
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
    52
        while (chunk != null) {
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
    53
          val chunk_length = if (chunk.str == null) 0 else chunk.str.length
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
    54
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
    55
          if (x + w + chunk.width > clip_rect.x &&
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
    56
              x + w < clip_rect.x + clip_rect.width &&
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
    57
              chunk.accessable && chunk.visible)
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
    58
          {
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
    59
            val chunk_range = Text.Range(offset, offset + chunk_length)
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
    60
            val chunk_font = chunk.style.getFont
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
    61
            val chunk_color = chunk.style.getForegroundColor
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
    62
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
    63
            val markup =
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
    64
              doc_view.text_area_snapshot.select_markup(chunk_range)(Isabelle_Markup.foreground)
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
    65
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
    66
            gfx.setFont(chunk_font)
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
    67
            if (!Debug.DISABLE_GLYPH_VECTOR && chunk.gv != null &&
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
    68
                markup.forall(info => info.info.isEmpty)) {
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
    69
              gfx.setColor(chunk_color)
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
    70
              gfx.drawGlyphVector(chunk.gv, x + w, y)
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
    71
            }
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
    72
            else {
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
    73
              var xpos = x + w
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
    74
              for (Text.Info(range, info) <- markup) {
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
    75
                val str = chunk.str.substring(range.start - offset, range.stop - offset)
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
    76
                gfx.setColor(info.getOrElse(chunk_color))
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
    77
                gfx.drawString(str, xpos.toInt, y.toInt)
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
    78
                xpos += chunk_font.getStringBounds(str, font_context).getWidth.toFloat
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
    79
              }
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
    80
            }
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
    81
          }
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
    82
          w += chunk.width
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
    83
          offset += chunk_length
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
    84
          chunk = chunk.next.asInstanceOf[Chunk]
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
    85
        }
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
    86
        w
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
    87
      }
43369
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
    88
43373
639c3aca2ed3 always use our text painter;
wenzelm
parents: 43372
diff changeset
    89
      // see org.gjt.sp.jedit.textarea.TextArea.propertiesChanged
639c3aca2ed3 always use our text painter;
wenzelm
parents: 43372
diff changeset
    90
      // see org.gjt.sp.jedit.textarea.TextArea.setMaxLineLength
639c3aca2ed3 always use our text painter;
wenzelm
parents: 43372
diff changeset
    91
      val char_width = font.getStringBounds(" ", font_context).getWidth.round.toInt
639c3aca2ed3 always use our text painter;
wenzelm
parents: 43372
diff changeset
    92
      val soft_wrap = buffer.getStringProperty("wrap") == "soft"
639c3aca2ed3 always use our text painter;
wenzelm
parents: 43372
diff changeset
    93
      val wrap_margin =
639c3aca2ed3 always use our text painter;
wenzelm
parents: 43372
diff changeset
    94
      {
639c3aca2ed3 always use our text painter;
wenzelm
parents: 43372
diff changeset
    95
        val max = buffer.getIntegerProperty("maxLineLen", 0)
639c3aca2ed3 always use our text painter;
wenzelm
parents: 43372
diff changeset
    96
        if (max > 0) font.getStringBounds(" " * max, font_context).getWidth.toInt
639c3aca2ed3 always use our text painter;
wenzelm
parents: 43372
diff changeset
    97
        else if (soft_wrap) painter.getWidth - char_width * 3
639c3aca2ed3 always use our text painter;
wenzelm
parents: 43372
diff changeset
    98
        else 0
639c3aca2ed3 always use our text painter;
wenzelm
parents: 43372
diff changeset
    99
      }.toFloat
43371
98de43fc9733 more precise imitation of original TextAreaPainter$PaintText;
wenzelm
parents: 43370
diff changeset
   100
43373
639c3aca2ed3 always use our text painter;
wenzelm
parents: 43372
diff changeset
   101
      val line_infos: Map[Text.Offset, Chunk] =
639c3aca2ed3 always use our text painter;
wenzelm
parents: 43372
diff changeset
   102
      {
639c3aca2ed3 always use our text painter;
wenzelm
parents: 43372
diff changeset
   103
        val out = new ArrayList[Chunk]
639c3aca2ed3 always use our text painter;
wenzelm
parents: 43372
diff changeset
   104
        val handler = new DisplayTokenHandler
639c3aca2ed3 always use our text painter;
wenzelm
parents: 43372
diff changeset
   105
        val margin = if (soft_wrap) wrap_margin else 0.0f
43371
98de43fc9733 more precise imitation of original TextAreaPainter$PaintText;
wenzelm
parents: 43370
diff changeset
   106
43373
639c3aca2ed3 always use our text painter;
wenzelm
parents: 43372
diff changeset
   107
        var result = Map[Text.Offset, Chunk]()
639c3aca2ed3 always use our text painter;
wenzelm
parents: 43372
diff changeset
   108
        for (line <- physical_lines.iterator.filter(i => i != -1)) {
639c3aca2ed3 always use our text painter;
wenzelm
parents: 43372
diff changeset
   109
          out.clear
639c3aca2ed3 always use our text painter;
wenzelm
parents: 43372
diff changeset
   110
          handler.init(painter.getStyles, font_context, painter, out, margin)
639c3aca2ed3 always use our text painter;
wenzelm
parents: 43372
diff changeset
   111
          buffer.markTokens(line, handler)
43371
98de43fc9733 more precise imitation of original TextAreaPainter$PaintText;
wenzelm
parents: 43370
diff changeset
   112
43373
639c3aca2ed3 always use our text painter;
wenzelm
parents: 43372
diff changeset
   113
          val line_start = buffer.getLineStartOffset(line)
639c3aca2ed3 always use our text painter;
wenzelm
parents: 43372
diff changeset
   114
          for (i <- 0 until out.size) {
639c3aca2ed3 always use our text painter;
wenzelm
parents: 43372
diff changeset
   115
            val chunk = out.get(i)
639c3aca2ed3 always use our text painter;
wenzelm
parents: 43372
diff changeset
   116
            result += (line_start + chunk.offset -> chunk)
43371
98de43fc9733 more precise imitation of original TextAreaPainter$PaintText;
wenzelm
parents: 43370
diff changeset
   117
          }
98de43fc9733 more precise imitation of original TextAreaPainter$PaintText;
wenzelm
parents: 43370
diff changeset
   118
        }
43373
639c3aca2ed3 always use our text painter;
wenzelm
parents: 43372
diff changeset
   119
        result
639c3aca2ed3 always use our text painter;
wenzelm
parents: 43372
diff changeset
   120
      }
43369
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
   121
43373
639c3aca2ed3 always use our text painter;
wenzelm
parents: 43372
diff changeset
   122
      val clip = gfx.getClip
639c3aca2ed3 always use our text painter;
wenzelm
parents: 43372
diff changeset
   123
      val x0 = text_area.getHorizontalOffset
43376
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
   124
      var y0 =
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
   125
        y_start + font_metrics.getHeight - (font_metrics.getLeading + 1) - font_metrics.getDescent
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
   126
43373
639c3aca2ed3 always use our text painter;
wenzelm
parents: 43372
diff changeset
   127
      for (i <- 0 until physical_lines.length) {
639c3aca2ed3 always use our text painter;
wenzelm
parents: 43372
diff changeset
   128
        if (physical_lines(i) != -1) {
639c3aca2ed3 always use our text painter;
wenzelm
parents: 43372
diff changeset
   129
          line_infos.get(start(i)) match {
639c3aca2ed3 always use our text painter;
wenzelm
parents: 43372
diff changeset
   130
            case Some(chunk) =>
43376
0f6880c1c759 some direct text foreground painting, instead of token marking;
wenzelm
parents: 43375
diff changeset
   131
              val w = paint_chunk_list(start(i), chunk, x0, y0).toInt
43373
639c3aca2ed3 always use our text painter;
wenzelm
parents: 43372
diff changeset
   132
              gfx.clipRect(x0 + w, 0, Integer.MAX_VALUE, Integer.MAX_VALUE)
43375
09d992ab57c6 imitate original Chunk.paintChunkList;
wenzelm
parents: 43374
diff changeset
   133
              orig_text_painter.paintValidLine(gfx,
09d992ab57c6 imitate original Chunk.paintChunkList;
wenzelm
parents: 43374
diff changeset
   134
                first_line + i, physical_lines(i), start(i), end(i), y_start + line_height * i)
43373
639c3aca2ed3 always use our text painter;
wenzelm
parents: 43372
diff changeset
   135
              gfx.setClip(clip)
43372
2df2144b0910 use orig_text_painter for extras outside main text (also required to update internal line infos);
wenzelm
parents: 43371
diff changeset
   136
43373
639c3aca2ed3 always use our text painter;
wenzelm
parents: 43372
diff changeset
   137
            case None =>
43369
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
   138
          }
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
   139
        }
43373
639c3aca2ed3 always use our text painter;
wenzelm
parents: 43372
diff changeset
   140
        y0 += line_height
43369
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
   141
      }
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
   142
    }
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
   143
  }
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
   144
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
   145
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
   146
  /* activation */
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
   147
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
   148
  def activate()
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
   149
  {
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
   150
    val painter = text_area.getPainter
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
   151
    painter.removeExtension(orig_text_painter)
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
   152
    painter.addExtension(TextAreaPainter.TEXT_LAYER, this)
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
   153
  }
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
   154
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
   155
  def deactivate()
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
   156
  {
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
   157
    val painter = text_area.getPainter
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
   158
    painter.removeExtension(this)
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
   159
    painter.addExtension(TextAreaPainter.TEXT_LAYER, orig_text_painter)
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
   160
  }
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
   161
}
4c86b3405010 separate isabelle.jedit.Text_Painter, which actually replaces the original TextAreaPainter$PaintText instance;
wenzelm
parents:
diff changeset
   162