mirror of
https://github.com/php/php-gtk-src.git
synced 2026-03-24 17:22:10 +01:00
134 lines
3.6 KiB
PHP
134 lines
3.6 KiB
PHP
<?php
|
|
/**
|
|
* Scribble demo - simple painting with your mouse
|
|
*/
|
|
|
|
class Scribble extends GtkWindow
|
|
{
|
|
protected $size_group = null;
|
|
protected $pixmap = null;
|
|
|
|
|
|
function __construct($parent = null)
|
|
{
|
|
parent::__construct();
|
|
|
|
if (@$GLOBALS['framework']) {
|
|
return;
|
|
}
|
|
|
|
if ($parent)
|
|
$this->set_screen($parent->get_screen());
|
|
else
|
|
$this->connect_simple('destroy', array('gtk', 'main_quit'));
|
|
|
|
$this->set_title(__CLASS__);
|
|
$this->set_position(Gtk::WIN_POS_CENTER);
|
|
$this->set_default_size(-1, -1);
|
|
$this->set_border_width(8);
|
|
|
|
$this->add($this->__create_box());
|
|
$this->show_all();
|
|
}//function __construct($parent = null)
|
|
|
|
|
|
|
|
function __create_box()
|
|
{
|
|
$vbox = new GtkVBox();
|
|
$vbox->show();
|
|
|
|
$drawing_area = new GtkDrawingArea();
|
|
$drawing_area->set_size_request(300, 300);
|
|
$vbox->pack_start($drawing_area);
|
|
// $drawing_area->realize();
|
|
|
|
$drawing_area->connect('expose_event' , array($this, 'expose_event'));
|
|
$drawing_area->connect('configure_event' , array($this, 'configure_event'));
|
|
|
|
$drawing_area->connect('motion_notify_event', array($this, 'motion_notify_event'));
|
|
$drawing_area->connect('button_press_event' , array($this, 'button_press_event'));
|
|
|
|
$drawing_area->set_events(Gdk::EXPOSURE_MASK
|
|
| Gdk::LEAVE_NOTIFY_MASK
|
|
| Gdk::BUTTON_PRESS_MASK
|
|
| Gdk::POINTER_MOTION_MASK
|
|
| Gdk::POINTER_MOTION_HINT_MASK);
|
|
|
|
return $vbox;
|
|
}//function __create_box()
|
|
|
|
|
|
|
|
function configure_event($widget, $event)
|
|
{
|
|
$this->pixmap = new GdkPixmap($widget->window,
|
|
$widget->allocation->width,
|
|
$widget->allocation->height,
|
|
-1);
|
|
$this->pixmap->draw_rectangle($widget->style->white_gc,
|
|
true, 0, 0,
|
|
$widget->allocation->width,
|
|
$widget->allocation->height);
|
|
return true;
|
|
}
|
|
|
|
|
|
function expose_event($widget, $event)
|
|
{
|
|
$widget->window->draw_drawable($widget->style->fg_gc[$widget->state],
|
|
$this->pixmap,
|
|
$event->area->x, $event->area->y,
|
|
$event->area->x, $event->area->y,
|
|
$event->area->width, $event->area->height);
|
|
|
|
return false;
|
|
}
|
|
|
|
|
|
|
|
function button_press_event($widget, $event)
|
|
{
|
|
if ($event->button == 1 && $this->pixmap) {
|
|
$this->draw_brush($widget, (int)$event->x, (int)$event->y);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
|
|
function motion_notify_event($widget, $event)
|
|
{
|
|
$window = $event->window;
|
|
$pointer = $window->get_pointer();
|
|
$x = $pointer[0];
|
|
$y = $pointer[1];
|
|
$state = $pointer[2];
|
|
|
|
if (($state & Gdk::BUTTON1_MASK) && $this->pixmap) {
|
|
$this->draw_brush($widget, $x, $y);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
|
|
function draw_brush($widget, $x, $y)
|
|
{
|
|
$this->pixmap->draw_arc($widget->style->black_gc, true, $x - 4, $y - 4, 8, 8, 0, 64 * 360);
|
|
$widget->queue_draw_area($x - 4, $y - 4, 8, 8);
|
|
}
|
|
}//class Scribble extends GtkWindow
|
|
|
|
|
|
$GLOBALS['class'] = 'Scribble';
|
|
$GLOBALS['description'] = "Scribble lets you draw paintings with your mouse";
|
|
|
|
if (!@$GLOBALS['framework']) {
|
|
new Scribble();
|
|
Gtk::main();
|
|
}
|
|
?>
|