anonymous@RULINUX.NET~# Last login: 2024-12-25 22:59:26
Регистрация Вход Новости | Разметка | Пользователи | Галерея | Форум | Статьи | Неподтвержденное | Трекер | Правила форума | F.A.Q. | Ссылки | Поиск
[#] [Добавить метку] [Редактировать]
Скрыть

[Gtk/Cairo] Хочу счастья.

Дано: GtkWindow, на котором есть GtkDrawingArea... Хочу сделать такую штуку... Пусть на GtkDrawingArea есть какие-нибудь объекты, ну к примеру квадратики, нарисованные с помощью Cairo. Нужно сделать так, что бы их можно было таскать мышкой.. Короче D'n'D. Примерно представляю как это сделать... Но как-то криво... И куда копать не понимаю.

anonymous(*) (2009-03-26 03:39:05)

Opera/10.00 (Macintosh; Intel Mac OS X; U; Edition Turbo; en) Presto/2.2.0

[Ответить на это сообщение]
[#] [Добавить метку] [Редактировать] Ответ на: [Gtk/Cairo] Хочу счастья. от anonymous 2009-03-26 03:39:05
avatar
Скрыть

Re:[Gtk/Cairo] Хочу счастья.

В сторону QT?

AiFiLTr0(*)(2009-03-26 08:06:17)

Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.7) Gecko/2009030814 Iceweasel/3.0.7 (Debian-3.0.7-1)
[#] [Добавить метку] [Редактировать] Ответ на: [Gtk/Cairo] Хочу счастья. от anonymous 2009-03-26 03:39:05
avatar
Скрыть

Re:[Gtk/Cairo] Хочу счастья.

>В сторону QT?

Не хочу плюсов и Qt...

Хотя интересны сами приципы построения таких вещей.. Как пободные вещи правильно писать. Если дашь ссылку, буду рад.

mono(*)(2009-03-26 10:01:04)

Opera/10.00 (Macintosh; Intel Mac OS X; U; Edition Turbo; en) Presto/2.2.0
[#] [Добавить метку] [Редактировать] Ответ на: [Gtk/Cairo] Хочу счастья. от anonymous 2009-03-26 03:39:05
avatar
Скрыть

Re:[Gtk/Cairo] Хочу счастья.

Плюсую. Как реализовать на Qt я бы подсказал. А вот ГТК... Или ты хочешь на шарпе писать?

Tux-oid(*)(2009-03-26 10:20:45)

Mozilla/5.0 (Windows; U; Windows NT 5.2; ru; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6
[#] [Добавить метку] [Редактировать] Ответ на: [Gtk/Cairo] Хочу счастья. от anonymous 2009-03-26 03:39:05
avatar
Скрыть

Re:[Gtk/Cairo] Хочу счастья.

>Хотя интересны сами приципы построения таких вещей.. Как пободные вещи правильно писать. Если дашь ссылку, буду рад.

Имхо абстрактно алгоритм можно сделать например такой:

Ловится клик мышкой, берутся его координаты. По координатам достается объект, что под мышкой, если он может двигаться, то далее все движения мышки с нажатой кнопкой меняют координаты объекта соответственно. Ну и при отпускании кнопки мыши координаты объекта далее не перестают менять. Соответственно проводятся всякие проверки на то, не вылез ли объект куда не надо и прочее.

Ну а для гтк конкретно наверняка есть какие-либо дополнительные функции, которые упрощают уже это дело.

anonymous(*)(2009-03-26 16:53:23)

Mozilla/5.0 (X11; U; Linux; ru-RU) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.4
[#] [Добавить метку] [Редактировать] Ответ на: [Gtk/Cairo] Хочу счастья. от anonymous 2009-03-26 03:39:05
avatar
Скрыть

Re:[Gtk/Cairo] Хочу счастья.

>А вот ГТК... Или ты хочешь на шарпе писать?

Писать, наверно, на Vala буду.. Или на Си.. Посмотрим. Хотя от языка тут мало что зависит.. Но плюсов совсем не хочу.

mono(*)(2009-03-26 20:28:39)

Opera/10.00 (Macintosh; Intel Mac OS X; U; Edition Turbo; en) Presto/2.2.0
[#] [Добавить метку] [Редактировать] Ответ на: [Gtk/Cairo] Хочу счастья. от anonymous 2009-03-26 03:39:05
avatar
Скрыть

Re:[Gtk/Cairo] Хочу счастья.

>Ну а для гтк конкретно наверняка есть какие-либо дополнительные функции, которые упрощают уже это дело.

В общем нужно писать обработчики событий мыши для GtkDrawingArea... Будем думать..

Жаль, что тут гномеров нет..

mono(*)(2009-03-26 20:30:24)

Opera/10.00 (Macintosh; Intel Mac OS X; U; Edition Turbo; en) Presto/2.2.0
[#] [Добавить метку] [Редактировать] Ответ на: [Gtk/Cairo] Хочу счастья. от anonymous 2009-03-26 03:39:05
avatar
Скрыть

Re:[Gtk/Cairo] Хочу счастья.

А я разобрался как такое сделать... Гм..

mono(*)(2009-03-27 19:37:02)

Opera/10.00 (Macintosh; Intel Mac OS X; U; Edition Turbo; en) Presto/2.2.0
[#] [Добавить метку] [Редактировать] Ответ на: [Gtk/Cairo] Хочу счастья. от anonymous 2009-03-26 03:39:05
avatar
Скрыть

Re:[Gtk/Cairo] Хочу счастья.

GtkCurve не устроит? (это потомок от GtkDrawingArea)

anonymous(*)(2009-03-28 13:49:55)

Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.4) Gecko/20070601 SeaMonkey/1.1.2
[#] [Добавить метку] [Редактировать] Ответ на: [Gtk/Cairo] Хочу счастья. от anonymous 2009-03-26 03:39:05
avatar
Скрыть

Re:[Gtk/Cairo] Хочу счастья.

Нет.. GtkCurve мне в этом случае никак не поможет.. Но я, в принципе, понял как можно сотворить такое чудо.. Если надо, могу рассказать..

хм.. может блог завести о Vala и Gtk?

mono(*)(2009-03-29 01:53:17)

Opera/10.00 (Macintosh; Intel Mac OS X; U; Edition Turbo; en) Presto/2.2.0
[#] [Добавить метку] [Редактировать] Ответ на: [Gtk/Cairo] Хочу счастья. от anonymous 2009-03-26 03:39:05
avatar
Скрыть

Re:[Gtk/Cairo] Хочу счастья.

ИМХО более безгиморно сотворить квадратики в виде виджетов, и оные виджеты ужо таскать. Применение drawing area в этом случае не обезательно, сгодится любой контейнер, позволяющий произвольное позиционирование виджета. Сами же виджеты-квадратики можно отрисовывать и каиром, да.

bugmaker(*)(2009-03-30 07:51:25)

Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4
[#] [Добавить метку] [Редактировать] Ответ на: [Gtk/Cairo] Хочу счастья. от anonymous 2009-03-26 03:39:05
avatar
Скрыть

Re:[Gtk/Cairo] Хочу счастья.

>>к примеру квадратики

Так к примеру или как?

На самом деле - составляется список объектов, нарисованных на поверхности, и отслеживаются перемещения курсора. когда пользователь кликает курсором, выбирается объект из списка "ближайщий" к точке клика. А потом объект перерисовывается в зависимости от перемещения нажатого курсора.

Проблема только с этим "ближайщим". Если в списке только прямоугольники, то можно просто определить - клик внутри прямоугольника или снаружи. А если объект состоит из безье кривых? Брать bounding box в этом случае будет не вполне очевидным решением с точки зрения пользователя.

anonymous(*)(2009-03-30 09:11:12)

Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.4) Gecko/20070601 SeaMonkey/1.1.2
[#] [Добавить метку] [Редактировать] Ответ на: [Gtk/Cairo] Хочу счастья. от anonymous 2009-03-26 03:39:05
avatar
Скрыть

Re:[Gtk/Cairo] Хочу счастья.

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

mono(*)(2009-03-31 07:02:34)

Opera/10.00 (Macintosh; Intel Mac OS X; U; Edition Turbo; en) Presto/2.2.0
[#] [Добавить метку] [Редактировать] Ответ на: [Gtk/Cairo] Хочу счастья. от anonymous 2009-03-26 03:39:05
avatar
Скрыть

Re:[Gtk/Cairo] Хочу счастья.

У меня безье кривых нет.. все немного проще.

mono(*)(2009-03-31 07:03:17)

Opera/10.00 (Macintosh; Intel Mac OS X; U; Edition Turbo; en) Presto/2.2.0
[#] [Добавить метку] [Редактировать] Ответ на: [Gtk/Cairo] Хочу счастья. от anonymous 2009-03-26 03:39:05
avatar
Скрыть

Re:[Gtk/Cairo] Хочу счастья.

> Но у меня рисунок не только из квадратиков состоит

Это без разницы, можно отрисовать виджет произвольной формы

> и вообще я не очень представляю как тут виджеты лучше юзать.

Каждый тягаемый элемент изображения - виджет, вот и всё тут

> А в виде отлавливания событий мыши я уже вроде как понял как писать. И даже рабочий пример готов.

Тебе придётся заниматься не только отловом событий, но и перерисовкой всех делов вручную. Если чё-то криво сделаешь, возникнут нереальные тормоза. Проще и эффективнее перепоручить это дело ГТК.

bugmaker(*)(2009-03-31 19:41:52)

Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4
[#] [Добавить метку] [Редактировать] Ответ на: [Gtk/Cairo] Хочу счастья. от anonymous 2009-03-26 03:39:05
avatar
Скрыть

Re:[Gtk/Cairo] Хочу счастья.

Пожалуй ты прав.. тормоза имеются, на пустом месте.

А как грамотно сделать таскание GtkWidget?

mono(*)(2009-04-01 14:39:15)

Opera/10.00 (Macintosh; Intel Mac OS X; U; Edition Turbo; en) Presto/2.2.0
[#] [Добавить метку] [Редактировать] Ответ на: [Gtk/Cairo] Хочу счастья. от anonymous 2009-03-26 03:39:05
avatar
Скрыть

Re:[Gtk/Cairo] Хочу счастья.

1. Сотворяешь контейнер для таскаемых виджетов на основе GtkFixed. Он должен будет отлавливать (посему он видимо должен иметь собственное окно) - событие "кнопка мыши отпущена". По этому событию, если при отпуске кнопки таскался виджет, переместить его в новое место. - событие "кнопка мыши вышла за пределы окна". При этом, если таскался виджет, его надо вернуть на прежнее место, либо смотри сам, возможны варианты. 2. Сотворяешь таскаемый виджет на основе любого, но он должен иметь собственное окно либо комбинироваться с GtkEventBox, чтобы мог ловить нужные события. Руководства по сотворению виджетов с отрисовкой при помощи Cairo, в сети есть. Он должен будет отлавливать - событие "кнопка мыши нажата". Если виджет непрямоугольный, обработчику следует выяснить, попало ли нажатие на закрашенную область, и если нет, отказаться от его обработки. Затем этот виджет переводится в состояние "таскаемого", т.е. родителю сообщается какой виджет таскается и его изображение цепляется к указателю мыши.

В целом так, хотя в деталях возможны варианты.

bugmaker(*)(2009-04-04 22:19:50)

Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4
[#] [Добавить метку] [Редактировать] Ответ на: [Gtk/Cairo] Хочу счастья. от anonymous 2009-03-26 03:39:05
avatar
Скрыть

Re:[Gtk/Cairo] Хочу счастья.

чёто user line break неработает, но вроде всё осталось понятно. Такой механизм прост и работает в пределах одного окна. Если нужно передавать данные меж приложениями, всё практически то же самое, но в обработчиках следует задействовать http://library.gnome.org/devel/gtk/2.15/gtk-Drag-and-Drop.html

bugmaker(*)(2009-04-04 22:25:21)

Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4
Этот тред читают 2 пользователя:
Анонимных: 2
Зарегистрированных: 0




(c) 2010-2020 LOR-NG Developers Group
Powered by TimeMachine

Valid HTML 4.01 Transitional Правильный CSS!