Обзор Gtk-Perl | ||
---|---|---|
Предыдущая | Следующая |
Object
+--- Widget
+--- Ruler
Линейка используется для индикации положения курсора мыши. Она могжет быть как вертикальной, так и горизонтальной. В обоих случая линейка занимают всю отведенную окну, в котором она создана, область. Текущее положение курсора мыши на линейке отмечает маленький треугольник.
Прежде, чем использовать, линейку необходимо создать. Горизонтальная и вертикальная создается следующими методами:
$hruler = new Gtk::HRuler();
$vruler = new Gtk::VRuler();
Создав линейку, мы можем указать ее единицу измерения 'pixels', 'inches' или 'centimeters':
По умолчанию используются 'pixels'.$ruler->set_metric( $metric );
Другой важной характеристикой является отображение насечек на шкале и подписей к ним. Описать это можно с помощью метода
$lower и $upper определяют соответственно минимальное и максимальное значение шкалы, а $max_size максимально возможное значение, которое может быть отображено данной линейкой. #!!!! этот параметр очень странно работает... $position определяет начальное положение индикатора на линейке.$ruler->set_range( $lower, $upper, $position, $max_size );
Можно задать размер вертикльной линейки в 800 пикселей выполнив:
Подписи к делениям будут каждые 100 пискселов. Если вдруг мы захотим установить размер от 7 до 16, то нужно выполнить:$vruler->set_range( 0, 800, 0, 800 );
$vruler->set_range( 7, 16, 0, 20 );
Как было замечено, индикатором позиции курсора выступает мальенкий треугольник. Если линейка используется именно для отображения позиции курсора, то сигнал 'motion_notify_event' необходимо соединить с событием 'motion_notify_event' линейки. Для этого достаточно выполнить команду:
$area->signal_connect( "motion_notify_event",
sub { $ruler->motion_notify_event( $_[1] ); } );
Следующий пример создает арену с вертикальной и горизонтальной линейками. Размер арены 600 на 400 пикселов. Горизонтальная линейка будет отображать значения с 7 до 13. А вертикальная - с 0 до 400, с подписью к делениям каждые 100 пикселов.
Расположим арену и линейки внутри таблицы.
Итак, пример:
#!/usr/bin/perl -w use Gtk ; use strict ; set_locale Gtk; init Gtk; my $false = 0; my $true = 1; my $xsize = 600; my $ysize = 400; my $window; my $table; my $area; my $hrule; my $vrule; # создаем окно $window = new Gtk::Window( "toplevel" ); $window->signal_connect( "delete_event", sub { Gtk-> exit ( 0 ); } ); $window->border_width( 10 ); # Таблица, в которую поместим линейки и арену $table = new Gtk::Table( 3, 2, $false ); $window->add( $table ); # Создаем арену. $area = new Gtk::DrawingArea(); $area->size( $xsize, $ysize ); $table->attach( $area, 1, 2, 1, 2, [ 'expand', 'fill' ], 'fill', 0, 0 ); $area->set_events( [ 'pointer_motion_mask', 'pointer_motion_hint_mask' ] ); # Горизонтальная линейка будет наверху. # Говорим, чтобы событие горизонтального перемещения курсора мыши # нужно посылать соответствующему обработчику этой линейки. $hrule = new Gtk::HRuler(); $hrule->set_metric( 'pixels' ); $hrule->set_range( 7, 13, 0, 20 ); $area->signal_connect( "motion_notify_event", sub { $hrule->motion_notify_event( $_[1] ); } ); $table->attach( $hrule, 1, 2, 0, 1, [ 'expand', 'shrink', 'fill' ], 'fill', 0, 0 ); # Вертикальную линейку разместим слева. # Аналогично соединим событие перемещения мыши (вертикальное) # через арену и соответствующий обработчкик линейки. $vrule = new Gtk::VRuler(); $vrule->set_metric( 'pixels' ); $vrule->set_range( 0, $ysize, 10, $ysize ); $area->signal_connect( "motion_notify_event", sub { $vrule->motion_notify_event( $_[1] ); } ); $table->attach( $vrule, 0, 1, 1, 2, [ 'fill', 'expand', 'shrink' ], 'fill', 0, 0 ); # и... вылетит птичка. )) # Показываем все. $area->show(); $hrule->show(); $vrule->show(); $table->show(); $window->show(); main Gtk; exit ( 0 ); # Конец примера
Скриншот
Если вы присмотритесь, то заметите, что указатель мыши не отображается на скриншоте (дело в программе, которую я использовал для его создания). Но вы можете точно указать позицию, в которой он был благодаря линейкам.
Предыдущая | На главную | Следующая |
Виджеты подсказок | Вверх | Выбор цвета |