GdkDrawable - произвольное рисование

46 views
Skip to first unread message

Gucha

unread,
Feb 18, 2010, 4:54:16 PM2/18/10
to Русское сообщество PHP-GTK
Пытаюсь разобраться в GdkDrawable, это класс для произвольного
рисования. Например линии, изображения, квадраты, текст итп.
http://gtk.php.net/manual/en/gdk.gdkdrawable.php

Но что-то никаким макаром не удается присоединить элемент этого класса
на форуме... Видимо не с той стороны копаю :)

В инете (даже на английском разумеется) вообще примеров нету... :(

У кого-нибудь есть идеи как это можно юзать?

Nemesis

unread,
Feb 22, 2010, 4:15:15 PM2/22/10
to Русское сообщество PHP-GTK
Простенький пример есть в папке demo/, в стандартом дистрибутиве ПХП-
ГТК.

GoTLiuM InSPiRiT

unread,
Feb 23, 2010, 12:48:58 AM2/23/10
to php-g...@googlegroups.com
Юзать c++) Да и просто взять готовые реализации с исходным кодом. И посмотреть как все устроенно.

23 февраля 2010 г. 2:15 пользователь Nemesis <hil...@gmail.com> написал:
Простенький пример есть в папке demo/, в стандартом дистрибутиве ПХП-
ГТК.

--
Вы получили это сообщение, поскольку подписаны на группу Русское сообщество PHP-GTK.

Чтобы добавлять сообщения в эту группу, отправьте письмо по адресу php-g...@googlegroups.com.
Чтобы отменить подписку на эту группу, отправьте сообщение по адресу php-gtk-ru+...@googlegroups.com.
О дополнительных функциях можно узнать в группе по адресу http://groups.google.com/group/php-gtk-ru?hl=ru.




--
С Уважением Аскаров Р.А.
тел. +998902982884

Alex

unread,
Feb 23, 2010, 4:16:15 AM2/23/10
to php-g...@googlegroups.com
мдя, юзать с++ хороший совет на форуме php-gtk )))

23 февраля 2010 г. 7:48 пользователь GoTLiuM InSPiRiT <got...@gmail.com> написал:

GoTLiuM InSPiRiT

unread,
Feb 23, 2010, 4:58:27 AM2/23/10
to php-g...@googlegroups.com
php сделан все таки на сях и синтаксис тот же)
Просто сам php-gtk сыроват и не дает изначально всех возможностей.
Делал кое-что достаточно серьезное. А итог меня огорчил.
На удалось реализовать всего, что нужно было. Вот и сделал вывод)
+ есть кое какие соображения. Как нить поделюсь.
да и в целом думаю надо забацать какой нить фреймворк на gtk)
вот вам и идейка в добавок)
жить всем станет легче.


23 февраля 2010 г. 14:16 пользователь Alex <nove...@gmail.com> написал:

Shecspi

unread,
Feb 23, 2010, 5:54:06 AM2/23/10
to Русское сообщество PHP-GTK
Хотелось бы узнать, что именно Вы делали и что не получилось. Лично
мне не хватает только кроссплатформенной многопоточност, в частности
для виндоус.
На счет фреимворка я думал в свое время, но, по моему, синтаксис
библиотеки и так крайне прост и красив.

On 23 фев, 09:58, GoTLiuM InSPiRiT <gotl...@gmail.com> wrote:
> php сделан все таки на сях и синтаксис тот же)
> Просто сам php-gtk сыроват и не дает изначально всех возможностей.
> Делал кое-что достаточно серьезное. А итог меня огорчил.
> На удалось реализовать всего, что нужно было. Вот и сделал вывод)
> + есть кое какие соображения. Как нить поделюсь.
> да и в целом думаю надо забацать какой нить фреймворк на gtk)
> вот вам и идейка в добавок)
> жить всем станет легче.
>

> 23 февраля 2010 г. 14:16 пользователь Alex <noverm...@gmail.com> написал:


>
>
>
>
>
> > мдя, юзать с++ хороший совет на форуме php-gtk )))
>

> > 23 февраля 2010 г. 7:48 пользователь GoTLiuM InSPiRiT <gotl...@gmail.com>написал:


>
> >> Юзать c++) Да и просто взять готовые реализации с исходным кодом. И
> >> посмотреть как все устроенно.
>

> >> 23 февраля 2010 г. 2:15 пользователь Nemesis <hilo...@gmail.com> написал:


>
> >> Простенький пример есть в папке demo/, в стандартом дистрибутиве ПХП-
> >>> ГТК.
>
> >>> --
> >>> Вы получили это сообщение, поскольку подписаны на группу Русское
> >>> сообщество PHP-GTK.
>
> >>> Чтобы добавлять сообщения в эту группу, отправьте письмо по адресу
> >>> php-g...@googlegroups.com.
> >>> Чтобы отменить подписку на эту группу, отправьте сообщение по адресу

> >>> php-gtk-ru+...@googlegroups.com<php-gtk-ru%2Bunsu...@googlegrou-ps.com>


> >>> .
> >>> О дополнительных функциях можно узнать в группе по адресу
> >>>http://groups.google.com/group/php-gtk-ru?hl=ru.
>
> >> --
> >> С Уважением Аскаров Р.А.
> >> тел. +998902982884
>
> >> --
> >> Вы получили это сообщение, поскольку подписаны на группу Русское
> >> сообщество PHP-GTK.
> >> Чтобы добавлять сообщения в эту группу, отправьте письмо по адресу
> >> php-g...@googlegroups.com.
> >> Чтобы отменить подписку на эту группу, отправьте сообщение по адресу

> >> php-gtk-ru+...@googlegroups.com<php-gtk-ru%2Bunsu...@googlegrou-ps.com>


> >> .
> >> О дополнительных функциях можно узнать в группе по адресу
> >>http://groups.google.com/group/php-gtk-ru?hl=ru.
>
> > --
> > Вы получили это сообщение, поскольку подписаны на группу Русское сообщество
> > PHP-GTK.
> > Чтобы добавлять сообщения в эту группу, отправьте письмо по адресу
> > php-g...@googlegroups.com.
> > Чтобы отменить подписку на эту группу, отправьте сообщение по адресу

> > php-gtk-ru+...@googlegroups.com<php-gtk-ru%2Bunsu...@googlegrou-ps.com>

GoTLiuM InSPiRiT

unread,
Feb 23, 2010, 6:13:57 AM2/23/10
to php-g...@googlegroups.com
Кому как. Скажем так. Много-поточность я воссоздавал за счет дополнительных демонов.
В основном к демонам собственно говоря и писал графику.
На винду я давно плюнул. А уж про php-gtk там и речи быть не может.
Только Qt.

23 февраля 2010 г. 15:54 пользователь Shecspi <she...@gmail.com> написал:
Чтобы отменить подписку на эту группу, отправьте сообщение по адресу php-gtk-ru+...@googlegroups.com.

О дополнительных функциях можно узнать в группе по адресу http://groups.google.com/group/php-gtk-ru?hl=ru.

Nemesis

unread,
Feb 23, 2010, 10:14:22 AM2/23/10
to Русское сообщество PHP-GTK
Так, а что с примером:
<?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();
}

Shecspi

unread,
Feb 23, 2010, 12:33:28 PM2/23/10
to Русское сообщество PHP-GTK
А можешь выслать скриншот получившейся программы? Интересно посмотреть
результат.

GoTLiuM InSPiRiT

unread,
Feb 23, 2010, 1:16:23 PM2/23/10
to php-g...@googlegroups.com
Вот что:
gotlium@gotlium-laptop::o) ~# php test.php
Parse error: syntax error, unexpected '>' in /home/gotlium/test.php on line 85
Parse error: syntax error, unexpected '>' in /home/gotlium/test.php on line 99
Искать ошибок никто не будет, если даже это с ошибками.
Да и +, кто выкладывает такие куски кода?
Нужно по теме и определенно.
?>
А так все нормально с кодом. Рабочий.

23 февраля 2010 г. 20:14 пользователь Nemesis <hil...@gmail.com> написал:

--
Вы получили это сообщение, поскольку подписаны на группу Русское сообщество PHP-GTK.

Чтобы добавлять сообщения в эту группу, отправьте письмо по адресу php-g...@googlegroups.com.
Чтобы отменить подписку на эту группу, отправьте сообщение по адресу php-gtk-ru+...@googlegroups.com.
О дополнительных функциях можно узнать в группе по адресу http://groups.google.com/group/php-gtk-ru?hl=ru.

Message has been deleted
Message has been deleted

Gucha

unread,
Feb 23, 2010, 3:05:40 PM2/23/10
to Русское сообщество PHP-GTK
Ну а толку с этого примера... если вообще не понятно КАК оно
работает... вот вы сможете написать на основе этого примера свою
другую программу? Я сидел ковырял целый день но так и не понял по
какой схеме это работает...

Надо без всяких классов элементарный пример который через цикл
допустим на форме каждую секунду в случайном месте рисует точку. Вот
это будет действительно полезный пример с помощью которого можно
понять КАК работает рисование и через какое место что к чему
обращается.

А свой класс уже понимая как все работает написать это дело получаса.

Nemesis

unread,
Feb 24, 2010, 5:00:03 PM2/24/10
to Русское сообщество PHP-GTK
>>Нужно по теме и определенно.
Это говорит тот человек, который про Си писал вначале, ну-ну.

>>Надо без всяких классов элементарный пример который через цикл
допустим на форме каждую секунду в случайном месте рисует точку.

По времени не выйдет, я так думаю. Вы просили пример вот вам пример.
Мануал по этим ф-ям крайне скуп. Хорошо, что хоть есть описание типов
аргументов в ф-циях.

Reply all
Reply to author
Forward
0 new messages