170 val start = text_area.offsetToXY(begin) |
170 val start = text_area.offsetToXY(begin) |
171 val stop = |
171 val stop = |
172 if (finish < buffer.getLength) text_area.offsetToXY(finish) |
172 if (finish < buffer.getLength) text_area.offsetToXY(finish) |
173 else { |
173 else { |
174 val p = text_area.offsetToXY(finish - 1) |
174 val p = text_area.offsetToXY(finish - 1) |
175 p.x = p.x + text_area.getPainter.getFontMetrics.charWidth(' ') |
175 val metrics = text_area.getPainter.getFontMetrics |
|
176 p.x = p.x + (metrics.charWidth(' ') max metrics.getMaxAdvance) |
176 p |
177 p |
177 } |
178 } |
178 |
179 |
179 if (start != null && stop != null) { |
180 if (start != null && stop != null) { |
180 gfx.setColor(color) |
181 gfx.setColor(color) |
223 val changes = new EventBus[Text.Changed] |
224 val changes = new EventBus[Text.Changed] |
224 |
225 |
225 |
226 |
226 /* BufferListener methods */ |
227 /* BufferListener methods */ |
227 |
228 |
228 private def commit() { |
229 private def commit { |
229 if (col != null) |
230 if (col != null) |
230 changes.event(col) |
231 changes.event(col) |
231 col = null |
232 col = null |
232 if (col_timer.isRunning()) |
233 if (col_timer.isRunning()) |
233 col_timer.stop() |
234 col_timer.stop() |
234 } |
235 } |
235 |
236 |
236 private def delay_commit() { |
237 private def delay_commit { |
237 if (col_timer.isRunning()) |
238 if (col_timer.isRunning()) |
238 col_timer.restart() |
239 col_timer.restart() |
239 else |
240 else |
240 col_timer.start() |
241 col_timer.start() |
241 } |
242 } |
253 if (col == null) |
254 if (col == null) |
254 col = new Text.Changed(offset, length, 0) |
255 col = new Text.Changed(offset, length, 0) |
255 else if (col.start <= offset && offset <= col.start + col.added) |
256 else if (col.start <= offset && offset <= col.start + col.added) |
256 col = new Text.Changed(col.start, col.added + length, col.removed) |
257 col = new Text.Changed(col.start, col.added + length, col.removed) |
257 else { |
258 else { |
258 commit() |
259 commit |
259 col = new Text.Changed(offset, length, 0) |
260 col = new Text.Changed(offset, length, 0) |
260 } |
261 } |
261 delay_commit() |
262 delay_commit |
262 } |
263 } |
263 |
264 |
264 override def preContentRemoved(buffer: JEditBuffer, |
265 override def preContentRemoved(buffer: JEditBuffer, |
265 start_line: Int, start: Int, num_lines: Int, removed: Int) = |
266 start_line: Int, start: Int, num_lines: Int, removed: Int) = |
266 { |
267 { |
267 if (col == null) |
268 if (col == null) |
268 col = new Text.Changed(start, 0, removed) |
269 col = new Text.Changed(start, 0, removed) |
269 else if (col.start > start + removed || start > col.start + col.added) { |
270 else if (col.start > start + removed || start > col.start + col.added) { |
270 commit() |
271 commit |
271 col = new Text.Changed(start, 0, removed) |
272 col = new Text.Changed(start, 0, removed) |
272 } |
273 } |
273 else { |
274 else { |
274 val offset = start - col.start |
275 val offset = start - col.start |
275 val diff = col.added - removed |
276 val diff = col.added - removed |
278 (offset max 0, diff - (offset max 0)) |
279 (offset max 0, diff - (offset max 0)) |
279 else |
280 else |
280 (diff - (offset min 0), offset min 0) |
281 (diff - (offset min 0), offset min 0) |
281 col = new Text.Changed(start min col.start, added, col.removed - add_removed) |
282 col = new Text.Changed(start min col.start, added, col.removed - add_removed) |
282 } |
283 } |
283 delay_commit() |
284 delay_commit |
284 } |
285 } |
285 |
286 |
286 override def bufferLoaded(buffer: JEditBuffer) { } |
287 override def bufferLoaded(buffer: JEditBuffer) { } |
287 override def foldHandlerChanged(buffer: JEditBuffer) { } |
288 override def foldHandlerChanged(buffer: JEditBuffer) { } |
288 override def foldLevelChanged(buffer: JEditBuffer, start_line: Int, end_line: Int) { } |
289 override def foldLevelChanged(buffer: JEditBuffer, start_line: Int, end_line: Int) { } |