LINUX.ORG.RU

Gtk+ RGBA в действии


0

0

Все мы помним сообщение об автора движка Murrine о поддержке RGBA в своем движке? Вот и оно. Murrine-svn, собственный пропатченный гтк+ (патч очень тривиальный, хотя не без проблем - см. ниже). Также, в принципе, можно пропатчивать отдельные приложения, если не нравится чтобы все так выглядело )))) Естественно все работает на компизе. Вроде выглядит ниче )))

а теперь о печальном... меню в файрфоксе выглядит очень и очень печально, смотреть на это без слез нельзя (см скриншот ниже). Скорее всего это проблема файрфокса

пидгин вообще не захотел запускатся (хотя может это в нем самом дело - я его до этого не запускал, да и вообще сидел на копыте в кде)

в gconf-editor разработчики видимо навернули один лишний виджет в нижнем правом углу, выглядит не очень опрятно

дополнительные скрины: первый скрин, PNG весрия: http://img213.imageshack.us/img213/3167/screenit7.png

некоторые проблемы с RGBA colormap-ами, PNG: http://img115.imageshack.us/img115/2526/200803030429151680x1050iv5.png

>>> Просмотр (1680x1050, 228 Kb)

anonymous

Проверено: Shaman007 ()

Шрифты говно и обоину надо бы поменять. Остальное весьма неплохо.

anonymous
()

Суицидальненько...

Sikon ★★★
()

Супер! Очень понравилось! Что за дистр? А где обои брал? Это какой-то пак? Ну вот потянуло на гном...

anonymous
()

ААА, дайте мне эту обоину, давно ищу :) А скрин супер ^^

Masaki
()

Олицетворение глУмура и готишности, млин.

wfrr ★★☆
()

ну, будем надеяться что оно попадет в основной gtk+, и будет повод за него порадоваться.

dmiceman ★★★★★
()

По-моему, это прекрасно! Автору зачёт.

humand
()

Когда оно будет в основной ветке гтк?

anonymous
()

Я что-то не понял всей шутки юмора. Оно что только со своими собственными темами работает?

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

насколько я понял, за прозрачность отвечает движок murrina, патченый гтк нужен чтобы эту прозрачность видеть, так что да, только со своими темами.

Хотя никто не мешает создать свою тему, где за муррина будет рисовать только фон, а контролы повесить на другой какой-либо движок.

lester_dev ★★★★★
()

Увы, надо заметить, что с мурриной из свн подглючивают старые темы. Новых исчо в общем-то и нет, да и гтк надо патчить (или ставить патченное), ради того что на скрине. В общем, ждем патч в основной ветке, ждем новый релиз муррины, и, самое главное, ждем когда темы адаптируют к новой мурине.

anonymous
()

слишком много прозрачности.

polachok
()

Муррину просто не узнать, гораздо лучше стало без этих дурацких "стеклянностей". А патч ждём в основной ветке, может к тому времени и компиз стабилизируется хоть немного.

Bohtvaroh ★★★★
()

А не мог бы автор показать, как с этим всем выглядит eclipse?

Bohtvaroh ★★★★
()

>меню в файрфоксе выглядит очень и очень печально, смотреть на это без слез нельзя (см скриншот ниже). Скорее всего это проблема файрфокса

возможно, это проблема темы.

x3al ★★★★★
()

Очень красиво. Еще бы шрифты так не замывались. Например, просто чудесно вот на этом скрине несильно контрастные шрифтики в темной гамме смотрятся:

http://www.linux.org.ru/gallery/2542170.png

Здесь бы таким же образом оформить.

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

А тем временем модераторы пропускают какую-то муть вместо чего-то интересного.

Bohtvaroh ★★★★
()

вот модуль для gtk, включающий rgba для murrine-svn
компиляете в librgba.so, копируете результат в /usr/lib/gtk-2.0/modules и выставляете переменную среды GTK_MODULES="rgba"

у меня работает


#include <glib/gtypes.h>
#include <gtk/gtk.h>

static	GdkColormap *colormap;


G_MODULE_EXPORT void
gtk_module_init (gint * argc, gchar *** argv)
{
    
    colormap = gdk_screen_get_rgba_colormap(gdk_screen_get_default());
    
    gtk_widget_push_colormap(colormap);
    
    gtk_widget_set_default_colormap(colormap);   

}

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

Жестер, этого кой-чего дофига, я говорил о темах созданных или адаптированных для муррино 0.60свн. Бо как я говорил выше, старые темы подчас безбожно глючат.

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

>Гек, а темы-то, темы мурриновские? Вот например как у Кими в блоге. Лежат может уже где?

я с сайта муриновского качал вроде. А сама муррина из свн

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

>Бо как я говорил выше, старые темы подчас безбожно глючат.

вообще, клим (или как там его) заверил меня, что муррина 100% безглючная и баги есть в gtk+, иксах и аппликухах с фековыми гтк-виджетами (firefox,ooo)

ну и про то, что иконки в трее MUST use rgb colormap

ща добавлю в модуль blacklist и проверю

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

>Жестер, этого кой-чего дофига, я говорил о темах созданных или адаптированных для муррино 0.60свн. Бо как я говорил выше, старые темы подчас безбожно глючат.

специально адаптированых тем нет, прозрачность включается автоматом при наличии компиза и любого стиля муррина. Только я заметил, что основной цвет приложения имеет значение почему-то: при светлых тонах коефициент прозрачности меньше.

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

Ну фокс, у него свой велосипед на морде, а вот про остальное - о_О Эх, быстрее бы ужо допилили..

anonymous
()

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

sid350 ★★★★★
()

сори, что раньне не отвечал, не знал, как комментировать неподтвержденные ))

обоина: http://img291.imageshack.us/img291/416/animepaperwallpaperseurzw1.jpg

теперь насчет патча: если пройти в багзиллу по ссылке с новости про rgba, то становится ясно, что можно не ждать это в основной ветке в ближайшее время. на сколько я понял, разработчики gtk слишком заняты, чтобы тратить время на такую ерунду. Помимо того, они предпочли свалить все на X.org foundation (Xorg должен возвращать RGBA карту, когда доступно). X.org разработчики тоже оказались сильно заняты)))

Патч уже здесь выложили, хотя я реализовал грубым вмешательством в исходники gtk))))

> так, первые кандидаты на blacklist > gnome-panel firefox > и все приложения, юзающие трей :-\

файрфокс у меня работал более менее (за исключением меню, но оно мне нафик не сделось почти)

насчет приложений юзающих трей - можно применить такой фокус

GdkScreen * screen; GdkColormap * colormap;

screen = gtk_widget_get_screen(main_tray_widget); colormap = gdk_screen_get_rgb_colormap(screen); //gtk_widget_push_colormap(colormap); gtk_widget_set_default_colormap(colormap);

// la - la - la

//gtk_widget_pop_colormap(colormap);

push/pop colormap у меня не работают (может я что-то делаю неправильно?)

на треевский виджет. В пидгине это например (docklet-x11.c). Таким образом треевские приложения запускаются (проверено опять же на пидгине), хотя трей теперь подключивает - иконки в нем станут отображатся только после перезапуска трея.

ОпенОффис еще валится

спасибо за внимание

//автор

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

>gtk_widget_set_default_colormap(colormap);

т.е. gtk_widget_set_colormap(colormap); ))))

anonymous
()

//UPD: немного покопался в треевских приложениях и сырцах трея --------------------------------------------------------------- Патч на пидгин: diff -rNp pidgin-2.4.0/pidgin/gtkdocklet-x11.c pidgin-2.4.0.new/pidgin/gtkdocklet-x11.c *** pidgin-2.4.0/pidgin/gtkdocklet-x11.c 2008-02-29 15:09:28.000000000 +0300 --- pidgin-2.4.0.new/pidgin/gtkdocklet-x11.c 2008-03-12 03:11:48.000000000 +0300 *************** docklet_x11_create(gboolean recreate) *** 256,261 **** --- 256,263 ---- docklet_x11_destroy(); } + gtk_widget_push_colormap(gdk_screen_get_rgb_colormap(gdk_screen_get_default()) ); + docklet = egg_tray_icon_new(PIDGIN_NAME); box = gtk_event_box_new(); image = gtk_image_new(); *************** docklet_x11_create(gboolean recreate) *** 298,303 **** --- 300,307 ---- } purple_debug(PURPLE_DEBUG_INFO, "docklet", "created\n"); + + gtk_widget_pop_colormap(); } static void ------------------------------------------------------------------

патч на exaile: diff -rNp exaile-0.2.11/xl/gui/main.py exaile-0.2.11.new/xl/gui/main.py *** exaile-0.2.11/xl/gui/main.py 2007-10-16 19:44:44.000000000 +0400 --- exaile-0.2.11.new/xl/gui/main.py 2008-03-12 02:54:46.000000000 +0300 *************** class ExaileWindow(gobject.GObject): *** 70,75 **** --- 70,76 ---- gobject.GObject.__init__(self) self.xml = gtk.glade.XML(xlmisc.glade_file(self), 'ExaileWindow', 'exaile') self.window = self.xml.get_widget('ExaileWindow') + self.gtk_screen = self.window.get_screen(); media.exaile_instance = self self.settings = config.Config(xl.path.get_config('settings.ini')) *************** class ExaileWindow(gobject.GObject): *** 755,763 **** --- 756,766 ---- xlmisc.log("Sorry, tray icon is NOT available") return if self.tray_icon: return + gtk.widget_push_colormap(self.gtk_screen.get_rgb_colormap()); self.tray_icon = xlmisc.TrayIcon(self) self.emit('tray-icon-toggled', True) + gtk.widget_pop_colormap(); def remove_tray(self): """ Removes the tray icon -------------------------------------------------------------

anonymous
()

ой, прошу прощения, форматирование (не совсем разобрался еще)

//UPD: немного покопался в треевских приложениях и сырцах трея
---------------------------------------------------------------
Патч на пидгин: 
diff -rNp pidgin-2.4.0/pidgin/gtkdocklet-x11.c pidgin-2.4.0.new/pidgin/gtkdocklet-x11.c
*** pidgin-2.4.0/pidgin/gtkdocklet-x11.c	2008-02-29 15:09:28.000000000 +0300
--- pidgin-2.4.0.new/pidgin/gtkdocklet-x11.c	2008-03-12 03:11:48.000000000 +0300
*************** docklet_x11_create(gboolean recreate)
*** 256,261 ****
--- 256,263 ----
  		docklet_x11_destroy();
  	}
  
+ 	gtk_widget_push_colormap(gdk_screen_get_rgb_colormap(gdk_screen_get_default())
);
+ 
  	docklet = egg_tray_icon_new(PIDGIN_NAME);
  	box = gtk_event_box_new();
  	image = gtk_image_new();
*************** docklet_x11_create(gboolean recreate)
*** 298,303 ****
--- 300,307 ----
  	}
  
  	purple_debug(PURPLE_DEBUG_INFO, "docklet", "created\n");
+ 
+ 	gtk_widget_pop_colormap();
  }
  
  static void
------------------------------------------------------------------

патч на exaile:
diff -rNp exaile-0.2.11/xl/gui/main.py exaile-0.2.11.new/xl/gui/main.py
*** exaile-0.2.11/xl/gui/main.py	2007-10-16 19:44:44.000000000 +0400
--- exaile-0.2.11.new/xl/gui/main.py	2008-03-12 02:54:46.000000000 +0300
*************** class ExaileWindow(gobject.GObject): 
*** 70,75 ****
--- 70,76 ----
          gobject.GObject.__init__(self)
          self.xml = gtk.glade.XML(xlmisc.glade_file(self), 'ExaileWindow', 'exaile')
          self.window = self.xml.get_widget('ExaileWindow')
+ 	self.gtk_screen = self.window.get_screen();
          media.exaile_instance = self
  
          self.settings = config.Config(xl.path.get_config('settings.ini'))
*************** class ExaileWindow(gobject.GObject): 
*** 755,763 ****
--- 756,766 ----
              xlmisc.log("Sorry, tray icon is NOT available")
              return
          if self.tray_icon: return
+ 	gtk.widget_push_colormap(self.gtk_screen.get_rgb_colormap());
          self.tray_icon = xlmisc.TrayIcon(self)
          self.emit('tray-icon-toggled', True)
  
+ 	gtk.widget_pop_colormap();
      def remove_tray(self):
          """
              Removes the tray icon
-------------------------------------------------------------

Патч на gnome-power-manager:
diff -rNp gnome-power-manager-2.20.2/src/gpm-tray-icon.c gnome-power-manager-2.20.2.new/src/gpm-tray-icon.c
*** gnome-power-manager-2.20.2/src/gpm-tray-icon.c	2007-11-02 20:31:05.000000000 +0300
--- gnome-power-manager-2.20.2.new/src/gpm-tray-icon.c	2008-03-12 02:16:52.000000000 +0300
*************** GpmTrayIcon *
*** 713,718 ****
--- 713,723 ----
  gpm_tray_icon_new (void)
  {
  	GpmTrayIcon *tray_icon;
+ 
+ 	gtk_widget_push_colormap(gdk_screen_get_rgb_colormap(gdk_screen_get_default())
);
+ 
  	tray_icon = g_object_new (GPM_TYPE_TRAY_ICON, NULL);
+ 
+ 	gtk_widget_pop_colormap();
  	return GPM_TRAY_ICON (tray_icon);
  }

--------------------------------------------------------------------

anonymous
()

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

diff -rNp gnome-panel-2.20.3/applets/notification_area/main.c gnome-panel-2.20.3.new/applets/notification_area/main.c *** gnome-panel-2.20.3/applets/notification_area/main.c 2008-01-08 01:26:27.000000000 +0300 --- gnome-panel-2.20.3.new/applets/notification_area/main.c 2008-03-12 04:52:25.000000000 +0300 *************** applet_factory (PanelApplet *applet, *** 202,212 **** --- 202,218 ---- NaTray *tray; AppletData *data; AtkObject *atko; + GdkScreen * screen; + GdkColormap * colormap; if (!(strcmp (iid, "OAFIID:GNOME_NotificationAreaApplet") == 0 || strcmp (iid, "OAFIID:GNOME_SystemTrayApplet") == 0)) return FALSE; + screen = gtk_widget_get_screen(GTK_WIDGET(applet)); + colormap = gdk_screen_get_rgb_colormap(screen); + gtk_widget_set_colormap(GTK_WIDGET(applet),colormap); + tray = na_tray_new_for_screen (gtk_widget_get_screen (GTK_WIDGET (applet)), get_orientation_from_applet (applet)); --------------------------------------------------------------------

касательно файрфокса, ОО и прочего: GTK_MODULES=""" firefox, так работает нормально

Спасибо за внимание

// автор

anonymous
()

опять форматирование ((((

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

diff -rNp gnome-panel-2.20.3/applets/notification_area/main.c gnome-panel-2.20.3.new/applets/notification_area/main.c
*** gnome-panel-2.20.3/applets/notification_area/main.c	2008-01-08 01:26:27.000000000 +0300
--- gnome-panel-2.20.3.new/applets/notification_area/main.c	2008-03-12 04:52:25.000000000 +0300
*************** applet_factory (PanelApplet *applet,
*** 202,212 ****
--- 202,218 ----
    NaTray     *tray;
    AppletData *data;
    AtkObject  *atko;
+   GdkScreen * screen;
+   GdkColormap * colormap;
  
    if (!(strcmp (iid, "OAFIID:GNOME_NotificationAreaApplet") == 0 ||
          strcmp (iid, "OAFIID:GNOME_SystemTrayApplet") == 0))
      return FALSE;
  
+   screen = gtk_widget_get_screen(GTK_WIDGET(applet));
+   colormap = gdk_screen_get_rgb_colormap(screen);
+   gtk_widget_set_colormap(GTK_WIDGET(applet),colormap);
+ 
    tray = na_tray_new_for_screen (gtk_widget_get_screen (GTK_WIDGET (applet)),
  				 get_orientation_from_applet (applet));
  
--------------------------------------------------------------------

касательно файрфокса, ОО и прочего: GTK_MODULES=""" firefox, так работает нормально

Спасибо за внимание

// автор

anonymous
()

Великолепно! Без преувеличения. Хочу хау-ту для Генты.

MaGIc2laNTern
()

И после всего написанного кто-то смеет утверждать, что Gnome - это для
работы???

Я все понимаю (новое, не от разработчика и т.д.) , но такой рихтовки напильником
уже давно не встречал...:))

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

>Спасибо за внимание

патч на notification_area неплохо бы в список рассылки запихать.

касательно фф, оо и прочего - надо гтк ковырять, там походу отваливается именно при попытке отрисовки rgba на rgb или наоборот. Т.е. в идеале надо бы проверку и преобразование.

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

>И после всего написанного кто-то смеет утверждать, что Gnome - это для работы???

почему нет?

>Я все понимаю (новое, не от разработчика и т.д.) , но такой рихтовки напильником уже давно не встречал...:))

можно подумать, без рихтовки не работает нихрена =)

geek ★★★
()

нижняя панель немного великовата на мой взгляд. Но в принципе зачёт :)

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