PHP-GTK2 Newsletter

PHP-GTK2 Tips & Techniques
FREE Newsletter
by kksou



Sample Code 227: How to set the tab position for GtkTextView - Part 2 - at every 4th character?
Written by kksou   
Monday, 07 May 2007
Problem

By default, GtkTreeView sets the tab at every eighth character as shown below:

Suppose you would like to set the tab position at every fourth character instead as shown below:

How to set the tab position for GtkTextView - Part 2 - at every 4th character?


Solution
  • Create a new PangoTabArray on the GtkTreeView.
  • Calculate the width of the font. With this information, we can calculate the width in pixels for every fourth character.
  • Set each tab position with PangoTabArray::set_tab()
  • Then impose the tabs on the textview with GtkTextView::set_tabs() on the GtkTreeView.

Sample Code
1   
2   
3   
4   
5   
6   
7   
8   
9   
10   
11   
12   
13   
14   
15   
16   
17   
18   
19   
20   
21   
22   
23   
24   
25   
26   
27   
28   
29   
30   
31   
32   
33   
34   
35   
<?php
$window = new GtkWindow();
$window->set_size_request(400, 240);
$window->connect_simple('destroy', array('Gtk','main_quit'));
$window->add($vbox = new GtkVBox());

// display title
$title = new GtkLabel("Set the Tab Position of GtkTextView\n".
"Part 2 - at every 4th character");
$title->modify_font(new PangoFontDescription("Times New Roman Italic 10"));
$title->modify_fg(Gtk::STATE_NORMAL, GdkColor::parse("#0000ff"));
$title->set_size_request(-1, 40);
$title->set_justify(Gtk::JUSTIFY_CENTER);
$alignment = new GtkAlignment(0.5, 0, 0, 0);
$alignment->add($title);
$vbox->pack_start($alignment, 0, 0);
$vbox->pack_start(new GtkLabel(), 0, 0);

// Create a new buffer and a new view to show the buffer.
$buffer = new GtkTextBuffer();
$view = new GtkTextView();
$view->set_buffer($buffer);
$view->modify_font(new PangoFontDescription("Courier New 16")); // note 6
$view->set_wrap_mode(Gtk::WRAP_WORD);
$buffer->set_text("123456781234567812345678\n");

$scrolled_win = new GtkScrolledWindow();
$scrolled_win->set_policy( Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
$vbox->pack_start($scrolled_win);
$scrolled_win->add($view);

$window->show_all();

$style = $view->get_style();
$font = $view->get_style()->font_desc;
  • Note that this is only 70% of the sample code. You have to be a registered member to see the entire sample code. Please login or register.
  • Registration is free and immediate.
  • Have some doubt about the registration? Please read this forum article.
Explanation
  1. Get the font size. Note that this is in pango unit.
  2. Convert from pango unit to pixels.
  3. Note that we are using fixed-width font here. So we simply multiply the font width by 4.
  4. Set the tab positions. In this example, we set a tab for every 100 pixels.
  5. Set the tab on the treeview.
  6. Try changing this to other font size. You will see that the tab will always be set at every fourth character.

Related Links

User reviews

There are no user reviews yet.

Note: You have to be a registered member to leave a comment. Free registration here.

 
< Prev   Next >

Blog - Forum - Privacy Policy - Contact Us
Copyright © 2006-2008. kksou.com. All Rights Reserved