Skip to content

Instantly share code, notes, and snippets.

@chergert
Created June 25, 2015 19:16
Show Gist options
  • Save chergert/17821366d6b6b17c088b to your computer and use it in GitHub Desktop.
Save chergert/17821366d6b6b17c088b to your computer and use it in GitHub Desktop.
test for custom line renderer not rendering the entire line contents
#!/usr/bin/env python
import sys
from gi.repository import Gtk
from gi.repository import GtkSource
class CustomLineRenderer(GtkSource.GutterRendererText):
line_offset = 0
def __init__(self, start_line, *args, **kwargs):
self.line_offset = start_line
GtkSource.GutterRendererText.__init__(self, *args, **kwargs)
def do_query_data(self, start, end, flags):
self.props.text = str(start.get_line() + self.line_offset + 1)
width, height = self.measure(self.props.text)
if self.props.size < width:
self.props.size = width
def main(filename, start_line, end_line):
win = Gtk.Window(default_width=800, default_height=300)
scroller = Gtk.ScrolledWindow(visible=True)
win.add(scroller)
textbuffer = GtkSource.Buffer()
textbuffer.set_text(''.join(file(filename).readlines()[start_line:end_line]))
textview = GtkSource.View(visible=True, buffer=textbuffer, monospace=True, editable=False)
scroller.add(textview)
gutter = textview.get_gutter(Gtk.TextWindowType.LEFT)
renderer = CustomLineRenderer(start_line, xpad=6, xalign=1.0)
gutter.insert(renderer, 0)
win.present()
win.connect('delete-event', lambda *_: Gtk.main_quit())
Gtk.main()
return 0
if __name__ == '__main__':
if len(sys.argv) < 4:
print >> sys.stderr, "usage: %s filename start_line end_line" % sys.argv[0]
sys.exit(1)
filename, start, end = sys.argv[1:4]
sys.exit(main(filename, int(start)-1, int(end)-1))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment