LINUX.ORG.RU

Oтчаяние по поводу GTK


0

0

Уже долгое время пытаюсь хоть что-то написать под линукс. Решил начать с относительно простого - GTK под Perl (последним владею). Целью было написать элементарную программку, которая бы висела на десктопе и раз в час считывала бы погодные данные из интернета. Программа уже готова и функционирует, в общем, превосходно, но когда я взялся за внешний вид, то вынужден был сделать вывод, что c GTK просто бессилeн в этом :(. Проблемы с которыми я столкнулся:

* я так и не смог раскопать КАКИМ методом я могу элементарно устанавливать на десктопе позицию окна в пикселях? Конечно, можно сделать это на уровне wm, но почему это нельзя "изнутри"?!

* не смог понять как устанавливать так же изнутри слой окна

* совершенно не понимаю как можно сделать окно псевдо-прозрачным. ведь для этого нужно обращаться к рут-окну, но КАК?!

* ума не приложу как, к примеру получить абсолютную позицию курсора мыши или хотя бы самого окна...

Больше всего фрустрирует отсутствие какой-либо информации на эти темы в доках. Поиски в гугле либо вообще нихрена не дают, либо не более, чем три скупых ман-страницы, прилагаемые к библиотеке gtk-perl.

В результате чего у меня и возник вопрос к более опытным программистам -- может GTK просто не расчитано на такие вещи? Почему GTK не в состоянии работать с системой на более низком уровне, а больше -- со своими собственными объектами?

★★

Ничего, понимание придет.

1. Пользователям не нужны псевдопрозрачные окна.

2. Пользователям не нужны окна, устанавливающие свою позицию, хотя это можно сделать при помощи gtk_window_set_geometry_hints.

3. Пользователям не нужны проги, делающие все "изнутри". WM для того и создан, чтобы управлять окнами. Пусть он это и делает.

4. Вопрос про абсолютную позицию был на этом форуме с неделю назад, можно использовать gdk_display_get_pointer.

Вобщем, у gtk и программирования в linux есть своя "философия", нужно ее просто понять.

anonymous
()
Ответ на: комментарий от anonymous

спасибо за ответ!

1. ну, ок, пользовтаелям может и не нужны, а мне нужно :)

2. я вообще-то об опции типа aterm -g +340+120

3. ну... это спорно

4. спасибо, только что смог это реализовать!

>Вобщем, у gtk и программирования в linux есть своя "философия"

вот уж точно...

norden ★★
() автор топика

Ну, посмотри например hot-babe, там реализованы некоторые вещи, о которых ты говоришь :)

Novel ★★★★
()
Ответ на: комментарий от norden

Тем не менее он прав. Представь себе, как будет выглядеть твоя программа, "навязывающая" свою геометрию и пр. на моем "десктопе" с wm Ion, у которого все окна всегда "максимизированы". -geometry устанавливает не размер а подсказку wm-у по этому поводу. Которые тот вправе игнорировать.

DonkeyHot ★★★★★
()

GTK вообще сложен для изучения, типа WIN32 API в оффтопике. Попробуй QT, может понравится.

CKulT
()

Да, попробуй Qt:

* widget->move(x,y)
* ?
* screenshot = QPixmap::grabWindow(qt_xrootwin(),x,y,w,h);
* QCursor::pos()

olegk ★★
()
Ответ на: комментарий от DonkeyHot

> -geometry устанавливает не размер а подсказку

ок, вот именно эта подсказка мне и была нужна...

2all: огромное спасибо за ответы и советы по поводу Qt!

norden ★★
() автор топика
Ответ на: комментарий от CKulT

Если qt и впрямь сильно смахивает на mfc, то уж gtk никаким боком не похож на "WIN32 API". А прозрачнее всех - tcl/tk.

anonymous
()
Ответ на: комментарий от anonymous

ээ, чувак. Я не говорил что он сильно смахивает ! :) Просто QT и MFC это C++ тулкиты, а GTK и WIN32 API - C. И поэтому реально сравнивать их удобства.

p.s. а почему GTK не похож на WIN32 API ? Ну есть сигналы, а с большего ?

CKulT
()
Ответ на: комментарий от CKulT

> ээ, чувак. Я не говорил что он сильно смахивает ! :)

Но это и вправду так.

> Просто QT и MFC это C++ тулкиты, а GTK и WIN32 API - C.

Э, брат. Ты и впрямь думаешь, что язык _настолько_ сильно подрезает яйца девелоперам? Так тебе с Антихристом спорить... На С++ стока всяхой х-ни написано - опупеешь смотреть. И какчество у этой х-ни веcьма разное.

> И поэтому реально сравнивать их удобства.

Ты их обозначь сначала, оптимист.

> p.s. а почему GTK не похож на WIN32 API ? Ну есть сигналы, а с большего ?

Блин, да _ничем_ не похож. С таким подходом ты бабушку от дедушки не отличишь.

anonymous
()
Ответ на: комментарий от anonymous

>>Так тебе с Антихристом спорить...

!! :)) Я жить хочу .... пощадите ...

>>Блин, да _ничем_ не похож

С чего бы это ? Все параметры устанавливаются через функции, если не знаешь нужную функцию, будешь сидеть и в экран смотреть как автор топика. В C++ тулкитах по крайней мере вся инфа инкапусирована в классе, поэтому достаточно посмотреть его описание - сразу найдёшь что исчешь. :) Я не хочу спорить про тонкости - типа а в win32 вот такая функция есть, а в GTK такоооой неееет, есть другая. Я имею ввиду как раз "взгляд со стороны" или "с большего". Что я увидел, когда начал изучать GTK ? Тонны функций, параметор и т.д. Я сразу же сказал себе "блин, галимое win32 api". Я считаю это главное и фатальное сходство.

>>С таким подходом ты бабушку от дедушки не отличишь

Иногда и не отличишь :)) О том и разговор ;)

>>На С++ стока всяхой х-ни написано

Ну и на Си тоже. Не понял что ты хотел сказать :)

CKulT
()
Ответ на: комментарий от CKulT

> >>На С++ стока всяхой х-ни написано

> Ну и на Си тоже. Не понял что ты хотел сказать :)

Что по языку низзя определить х-ня это али нет. Поал? :)

> С чего бы это ? Все параметры устанавливаются через функции, если не знаешь нужную функцию, будешь сидеть и в экран смотреть как автор топика. В C++ тулкитах по крайней мере вся инфа инкапусирована в классе, поэтому достаточно посмотреть его описание - сразу найдёшь что исчешь.

Это, типа, одна большая шутка или ты всерьёз? Какая тебе разница описание чего смотреть?

> Я не хочу спорить про тонкости - типа а в win32 вот такая функция есть, а в GTK такоооой неееет, есть другая. Я имею ввиду как раз "взгляд со стороны" или "с большего". Что я увидел, когда начал изучать GTK ? Тонны функций, параметор и т.д.

А чего ты увидел в qt? Обойму плохо организованных классов с невъебенным кол-вом методов у каждого. Галимый mfc короче.

> Я сразу же сказал себе "блин, галимое win32 api". Я считаю это главное и фатальное сходство.

Я тебе говорю - tcl/tk смотри. Его автор - грамотный образованный челобрек, а не европейский школьник, желающий состряпать чего-нибудm по типу объектное и нетрадиционно ориентированное.

anonymous
()
Ответ на: off topick::tcl/tk author от carrot

gtk - > gdk

Привет el rodeo,
все вопросы относятся не к GTK, а к GDK,
что есть нижний уровень GTK. Почти все они имееют
решение на еще более низком уровне (Xlib), поэтому я
пострараюсь привести оба варианта

> я так и не смог раскопать КАКИМ методом я могу элементарно >устанавливать на десктопе позицию окна в пикселях? Конечно, можно >сделать это на уровне wm, но почему это нельзя "изнутри"?!
>

Используй "gdk_window_move,gdk_window_move_resize" или
"XMoveWindow,XMoveResizeWindow".

Ты также можешь "посоветовать" WM, куда поставить окно
с помощью "gdk_window_set_hints" или:

XSizeHints hints;

hints.flags = USPosition | PPosition;
hints.x = x;
hints.y = y;

XSetWMNormalHints(display, id, &hints);


>* не смог понять как устанавливать так же изнутри слой окна

"слой окна" - имеется ввиду Z-order?

Используй "gdk_window_raise,gdk_window_show"/"gdk_window_lower"
или "XRaiseWindow"/"XLowerWindow"

>
>* совершенно не понимаю как можно сделать окно псевдо-прозрачным. >ведь для этого нужно обращаться к рут-окну, но КАК?!
>


Для того чтобы сделать окно псевдо-прозрачным ты должен
сам его перерисовывать. Смотри на gdk_pixbuf
http://developer.gnome.org/doc/API/2.0/gdk/gdk-Pixbufs.html
http://developer.gnome.org/doc/API/2.0/gdk-pixbuf/index.html

рут-окно == gdk_get_default_root_window


>* ума не приложу как, к примеру получить абсолютную позицию курсора >мыши или хотя бы самого окна...
>

курсор находится с помошью
"gdk_display_get_pointer", "XQueryPointer"


окно ... много способов ;-)
gdk_window_get_geometry, gdk_window_get_position ,
gdk_window_get_root_origin, gdk_window_get_origin ,
gdk_window_get_deskrelative_origin, etc.

...

тоже самое в Xlib, бери просто XTranslateCoordinates


>Больше всего фрустрирует отсутствие какой-либо информации на эти >темы в доках. Поиски в гугле либо вообще нихрена не дают, либо не >более, чем три скупых ман-страницы, прилагаемые к библиотеке gtk->perl.

смотри на
http://developer.gnome.org/doc/API/2.0/gdk/index.html

Успехов! Марк




carrot
()
Ответ на: комментарий от anonymous

>>>А чего ты увидел в qt? Обойму плохо организованных классов с невъебенным кол-вом методов у каждого. Галимый mfc короче.


Гы-гы-гы :)) После MFC, когда пересел на QT, первую неделю я только и грил "о, заебись!". Эффект аналогичен переходу с Ишака на Оперу.

>>Я тебе говорю - tcl/tk смотри

Дык :)

CKulT
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.