On 01/25/18 18:04, Manish Jain wrote:
> 
> 
> On 01/25/18 16:11, Al Thomas wrote:
>> > On Thursday, 25 January 2018, 01:00:05 GMT, Manish Jain 
>> <jude.obsc...@yandex.com> wrote:
>>
>> > Despite a lot of effort to write an event handler, I still cannot get
>> > the scale to tell the view to scroll. I have tried scrolling with the
>> > scroll_to_iter() method, but the iterator always lands me at the top of
>> > the file, whereas I want the view to move south.
>>
>> Have you tried moving the TextIter with something like:
>> https://valadoc.org/gtk+-3.0/Gtk.TextIter.set_line.html
>>
>> It sounds like you want a TextIter instance for your vscale widget 
>> that you can then move
>> about the document and then scroll to it.
>>
>> It may be your almost there, just missing the last piece of the puzzle!
>>
>> Regards,
>>
>> Al
> 
> Hi Al/others,
> 
> The scrolling is beginning to happen, but not in the way I would expect.
> 
> Here is my event handler for the scale (which I am using a normal
> command widget) :
> 
>      void scale_moved (Gtk.Range range)
>      {
>          TextIter iter = TextIter();
> 
>          view.get_iter_at_location(out iter, 0, ypos);
>          view.scroll_to_iter(iter, 0, false, 0, 0);
>          view.place_cursor_onscreen();
>          ypos++;
>      }
> 
> The ypos counter is initialized as 0, and then gets incremented
> each time the scale is used. Effectively, each time the uses clicks
> the scale, the view should move south one line. That is the behaviour
> I would expect.
> 
> But the scrolling is almost negligible unless I jack up ypos argument
> to get_iter_at_location() as 25*ypos - at which point the view moves
> south sometimes one line or sometimes two lines.
> 
> I must be missing something: is the view scrolling somehow dependent
> on window geometry and/or line lengths ? I would normally think the
> ypos argument is just the number of newlines (minus one) to be skipped
> when readjusting the view.


Hi all,

I managed to work it out. Luckily, Vala documentation is superb.

Unless I am mistaken, the iterator has to be initialized with a call
to view.buffer.get_iter_at_line().

After that, the programmer has to compute view/line heights using
view.get_window(Gtk.TextWindowType.TEXT).get_height() and
view.get_line_yrange().

It is all working nicely now. Thanks to all for help.

Manish Jain
_______________________________________________
vala-list mailing list
vala-list@gnome.org
https://mail.gnome.org/mailman/listinfo/vala-list

Reply via email to