Technical discussions | Discussions techniques
matttbe, Wednesday 07 December 2011 à 03:03
|
|
Subscription date : 24 January 2009
Messages : 12573
|
Hello,
Est-ce que ce serait possible d'éviter des "artefacts" (petits détails graphiques pas très élégants) au démarrage. En d'autres mots, au lancement du dock, il y a un cadre uni (blanc chez moi mais ça change en fonction du thèmes gtk je crois) ainsi qu'un dock blanc. Serait-il possible d'éviter cela?
En affichant le dock après l'avoir chargé invisiblement (je ne connais pas assez gtk mais p-ê utiliser 'gtk_widget_show_all' pour la fenêtre du dock plus tard)? Ou alors le cacher et le faire apparaître après? Avec du gtk3, on peut appliquer du css pour forcer le fond transparent d'un GTKWindow par exemple mais c'est plus une solution de contournement.
|
lylambda, Wednesday 07 December 2011 à 09:51
|
|
Subscription date : 06 September 2009
Messages : 1635
|
Ah ? Cela existe aussi en OpenGl et sur les cartes graphiques récentes ? Je croyais que c'était dût à la vétusté de mon PC perso.
Du coup, si c'est possible, je serais aussi totalement pour : ce n'est pas gênant en soit, mais cela retirerais l'impression de "pas finis" que pourrais ressentir un nouvel utilisateur. |
fabounet, Friday 09 December 2011 à 12:56
|
|
Subscription date : 30 November 2007
Messages : 17118
|
j'avais essayé de dessiner la fenêtre en invisible pendant le chargement, mais en fait on n'est même pas appelé.
on peut essayer en ajoutant un gtk_widget_hide lors de la création de la fenêtre, puis un gtk_widget_show_all à la fin du chargement du thème.
ça peut être fait rapidement, qqun teste ? |
matttbe, Friday 09 December 2011 à 13:34
|
|
Subscription date : 24 January 2009
Messages : 12573
|
on peut essayer en ajoutant un gtk_widget_hide lors de la création de la fenêtre Donc appliquer ce patch? === modified file 'src/gldit/cairo-dock-dock-factory.c'
--- src/gldit/cairo-dock-dock-factory.c 2011-12-02 01:00:13 +0000
+++ src/gldit/cairo-dock-dock-factory.c 2011-12-09 12:32:44 +0000
@@ -188,7 +188,7 @@
pDock);*/
gtk_window_get_size (GTK_WINDOW (pWindow), &pDock->container.iWidth, &pDock->container.iHeight); - gtk_widget_show_all (pWindow);
+ gtk_widget_hide (pWindow);
gdk_window_set_back_pixmap (pWindow->window, NULL, FALSE);
puis un gtk_widget_show_all à la fin du chargement du thème. Où exactement?
Dans "cairo_dock_load_current_theme"? (pour ne pas avoir des: assertion `GDK_IS_WINDOW (window)' failed |
fabounet, Wednesday 14 December 2011 à 14:56
|
|
Subscription date : 30 November 2007
Messages : 17118
|
en fait, je pensais dans cairo_dock_load_current_theme, mais sinon dans la callback "realized"
sinon, faut tâtonner |
lylambda, Wednesday 01 February 2012 à 21:50
|
|
Subscription date : 06 September 2009
Messages : 1635
|
Ce sujet a bien avancé : maintenant mes docks apparaissent d'un coup, au bon endroit, sans artefact
On pourrait passé en résolu si c'était aussi le cas des desklets. Ce serait possible ?
Ici on peut voir deux desklets sur la couche widget de Compiz et le old-systray lors du démarrage de CD:
|
matttbe, Thursday 02 February 2012 à 11:50
|
|
Subscription date : 24 January 2009
Messages : 12573
|
Oh, j'ai dû louper ce changement , qu'est-ce qui a changé dans le chargement?
Je testerai dès que possible! |
lylambda, Thursday 02 February 2012 à 15:44
|
|
Subscription date : 06 September 2009
Messages : 1635
|
qu'est-ce qui a changé dans le chargement? Il n'y a plus d'artefacts et de cadres blancs (hormis pour les desklets). Du coup, le dock apparait "proprement" au bon endroit contrairement a avant . |
matttbe, Sunday 05 February 2012 à 01:11
|
|
Subscription date : 24 January 2009
Messages : 12573
|
Moi j'en ai tjs encore (c'est p-ê plus court mais j'en ai) mais c'est p-ê uniquement parce que j'ai la version avec GTK3 |
matttbe, Wednesday 07 March 2012 à 12:19
|
|
Subscription date : 24 January 2009
Messages : 12573
|
Merci Fab pour le dernier changement sur la taille minimum des fenêtres
Ça réduit déjà énormément la taille de la zone d'artefacts au démarrage!
(je vais voir s'il n'y a pas moyen de forcer d'avoir une fenêtre transparente avec du CSS. |
fabounet, Wednesday 07 March 2012 à 12:43
|
|
Subscription date : 30 November 2007
Messages : 17118
|
Ça réduit déjà énormément la taille de la zone d'artefacts au démarrage!
ah, elle est encore visible ? pourtant j'ai mis 1x1, plus petit que ça et le dock disparait dans une faille spatio-temporelle de ton écran |
matttbe, Wednesday 07 March 2012 à 12:46
|
|
Subscription date : 24 January 2009
Messages : 12573
|
Je crois que ça ne concerne que les desklets.
Ex: avec l'ancien systray qui va aller dans le widget compiz:
|
matttbe, Wednesday 07 March 2012 à 14:43
|
|
Subscription date : 24 January 2009
Messages : 12573
|
J'ai aussi le problème à l'ouverture des sous-dock (ex: vue slide) et au lancement automatique du dock au démarrage de la session (lorsque le dock apparaît)
(on dirait que la fenêtre est créée à la bonne taille puis devient transparente (c'est très rapide mais ça se voit)) |
fabounet, Thursday 08 March 2012 à 13:27
|
|
Subscription date : 30 November 2007
Messages : 17118
|
bizarre car je pense bien avoir mis le 1x1 dans la classe Container, donc celle de plus haut niveau.
faudrait creuser |
matttbe, Monday 19 March 2012 à 13:43
|
|
Subscription date : 24 January 2009
Messages : 12573
|
J'ai fait qqs rapides recherches sur le sujet.
En prenant l'exemple venant de http://stackoverflow.com/questions/3908565/how-to-make-gtk-window-background-transparent, je m’aperçois que le problème est le même avec sa fenêtre. Normalement, on n'a pas le temps de voir la zone blanche car le chargement de l'appli est très rapide. Cependant, si je ralenti le chargement (par exemple en lançant le programme avec valgrind), on voit bien que d'abord la fenêtre est créée (elle est blanche) puis elle devient transparente. (je suppose que c'est parce que le signal 'expose-event' est envoyé juste après que la fenêtre soit créée mais ça reste après...)
Cependant, j'ai trouvé un workaround pas mal
Utiliser gtk_window_set_opacity! À la création de tous les containers, mettre l’opacité à 0 et une fois le dessin réalisé, passer l'opacité à 1. En appliquant ce patch juste pour tester, je n'ai plus de problème avec les docks et j'ai droit à un court effet de fondu donc c'est même sympa bien visuellement!=== modified file 'src/gldit/cairo-dock-dock-factory.c'
--- src/gldit/cairo-dock-dock-factory.c 2012-03-13 09:37:04 +0000
+++ src/gldit/cairo-dock-dock-factory.c 2012-03-19 12:20:34 +0000
@@ -506,6 +506,10 @@
}
}
+static gboolean _opacity (GtkWindow *pWindow)
+{
+ gtk_window_set_opacity (pWindow, 1.0);
+}
CairoDock *cairo_dock_new_dock (void)
{
@@ -606,6 +610,7 @@
G_CALLBACK (cairo_dock_on_drag_drop),
pDock);*/
+ gtk_window_set_opacity (GTK_WINDOW (pWindow), 0.0);
gtk_window_get_size (GTK_WINDOW (pWindow), &pDock->container.iWidth, &pDock->container.iHeight); gtk_widget_show_all (pWindow);
@@ -613,6 +618,7 @@
gdk_window_set_background_pattern (gldi_container_get_gdk_window (CAIRO_CONTAINER (pDock)), NULL);
+ g_timeout_add (1500, (GSourceFunc) _opacity, GTK_WINDOW (pWindow));
return pDock;
}
Par contre, je ne sais pas trop où ce serait le mieux de lancer l'action pour opacifier... Dans la fonction cairo_dock_on_expose mais on a besoin d'opacifier qu'une seule fois.
PS: en plus, ça résoudrait le problème avec les icônes transparentes
PS²: d'après la dock, il faudrait d'abord vérifier que ceci est ok: 'gtk_widget_is_composited()' |
Technical discussions | Discussions techniques
|