PHP-GTK2 Newsletter

PHP-GTK2 Tips & Techniques
FREE Newsletter
by kksou



Sample Code 133: How to change cursor over clickable GtkLabel - Part 2 - using image file?
Written by kksou   
Tuesday, 02 January 2007
Problem

In Part 1, we changed the cursor using php-gtk's pre-defined cursors.

Now you would like to change the cursor using your self-defined image files as shown below:

How to change cursor over clickable GtkLabel - Part 2 - using image file?


Solution

Sample Code

Note: The following image file is required by the sample code below. Please save a copy of the image file and put it in the same directory where you store the sample code.

 cursor1.png

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   
36   
37   
38   
39   
40   
41   
42   
43   
44   
45   
46   
47   
48   
<?php
$window = new GtkWindow();
$window->set_size_request(400, 200);
$window->connect_simple('destroy', array('Gtk','main_quit'));
$window->add($vbox = new GtkVBox());

// displays a title
$title = new GtkLabel("Change cursor over clickable link - Part 2\n".
"         using self-defined image file");
$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);
$vbox->pack_start($title, 0, 0);
$vbox->pack_start(new GtkLabel());

$link1 = create_link("manual", "http://gtk.php.net/manual/en/gtkclasses.php");
$link2 = create_link("mailing list", "http://www.nabble.com/Php---GTK---General-f171.html");

$hbox = new GtkHBox();
$hbox->pack_start(new GtkLabel("reference: php-gtk2 "), false);
$hbox->pack_start($link1, false);
$hbox->pack_start(new GtkLabel(" and "), false);
$hbox->pack_start($link2, false);
$vbox->pack_start($hbox, false);
$vbox->pack_start(new GtkLabel());

$status = new GtkLabel();
$status->set_alignment(0, 0);
$vbox->pack_start($status, 0, 0);

// function to setup the link
function create_link($title, $url) {
    $label = new GtkLabel($title);
    $label->set_markup('<span color="blue"><u>'.$title."</u></span>");
    $eventbox = new GtkEventBox;
    $eventbox->add($label);
    $eventbox->connect('button-press-event', 'on_click', $title, $url);
    $eventbox->connect('enter-notify-event', 'on_enter', $title, $url);
    $eventbox->connect('leave-notify-event', 'on_leave', $title, $url);

    return $eventbox;
}

function on_click($widget, $event, $title, $url) {
    $shell = new COM('WScript.Shell'); // note 5
    $shell->Run('cmd /c start "" "' . $url . '"', 0, FALSE); // note 5
    unset($shell); // note 5
}
  • 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

This example make use of the code in Part 1.

What's new here:

  1. Load the image.
  2. Get the GdkDisplay.
  3. Create the cursor from the pixbuf. Note that the third and fourth parameters are the horizontal and vertical offset of the 'hotspot' of the cursor. In this case we set it at (7,7) which is the center of the maginifying glass.
  4. Set the cursor for the two clickable links.
  5. Note that if you're running this example on linux, please comment out these 3 lines and replace with the system command to launch your favorite browser.

Note
  • Take note of where the three lines are located (note 1 and 2). If you set the cursor before the widgets are realized, you will get "Fatal error: Call to a member function set_cursor() on a non-object."

Related Links

User reviews   Average user ratings:    5.0   (from 1 user)
  1. flashas
    June 22, 2008 9:30am

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