Re: Text view vertical scroll problem



On Wednesday, February 25, 2004, at 10:55 PM, Adam Preble wrote:

The code is:

use Gtk;

please do not write new programs with Gtk-Perl. both Gtk-Perl and the 1.x series of gtk+ that it binds are obsolete, and have been for some time.

gtk2-perl, at http://gtk2-perl.sf.net , is the currently maintained and supported perl binding for gtk+. the Gtk2::TextView / Gtk2::TextBuffer stuff is a little more complicated but far more powerful than Gtk::Text ever thought of being. and horizontal scrolling works fine with it.



that said, your problem is very simple:

these two lines:
$scrolled_window = new Gtk::ScrolledWindow( $text->hadj, $text->vadj );
  ...
  $scrolled_window->add_with_viewport( $text );

should be
  $scrolled_window = new Gtk::ScrolledWindow;
  ...
  $scrolled_window->add( $text );

The text widget natively knows how to scroll, so all you have to do is add it to a scrolled window and gtk+ takes care of the rest. by using a viewport you confused gtk+; the viewports are for use with widgets that *don't* know how to scroll themselves, like vboxen, layouts, or drawing areas.


and, again, your whole program would be quite a bit shorter in gtk2-perl, where the Gtk2::Dialog takes care of a lot of stuff you had to do yourself:


#use Glib qw(TRUE FALSE);  # can do this in 1.040
use Glib;
use Gtk2;
use strict;

use constant TRUE => 1;
use constant FALSE => !TRUE;

init Gtk2;

my ($window, $scrolled_window, $textview);

# Create a new dialog window for the scrolled window
$window = new Gtk2::Dialog "Scrolled Window Example", undef, [],
                           'gtk-close' => 'close';
$window->set_default_response ('close');
$window->signal_connect( response => sub { Gtk2->main_quit; } );
#$window->set_border_width( 0 );
$window->set_default_size( 300, 300 );

# Create the Text widget
$textview = new Gtk2::TextView;
$textview->set (editable => FALSE);

# Load this file into the text window
$/ = undef;
open FILE, $0 or die "can't open $0: $!\n";
my $text = <FILE>;
close FILE;

my $textbuffer = $textview->get_buffer;
$textbuffer->create_tag ('mono', family => 'Monospace'); # fixed-width font
$textbuffer->insert_with_tags_by_name ($textbuffer->get_start_iter,
                                       $text, 'mono');

# Create a new scrolled window
$scrolled_window = new Gtk2::ScrolledWindow;
$scrolled_window->set_border_width( 5 );
$scrolled_window->set_shadow_type( 'etched-in' );
$scrolled_window->set_policy( "automatic", "automatic" );

$window->vbox->pack_start( $scrolled_window, TRUE, TRUE, 0 );
$scrolled_window->show();

# Add text view to the scrolled window
$scrolled_window->add( $textview );
$textview->show();

$window->show();

main Gtk2;


--
"it's hard to be eventful when you have this much style."
   - me, rationalizing yet another night of sitting at home.




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]