Home Forums Wiki Doc Install Extras Screenshots Source Code Projects Blog Users Groups Register
Glx-Dock / Cairo-Dock List of forums Technical discussions | Discussions techniques Jauges en forme de barre
The latest stable release is the *3.4.0* : How to install it here.
Note: We just switched from BZR to Git on Github! (only to host the code and your future pull requests)
Technical discussions | Discussions techniques

Subjects Author Language Messages Last message
[Locked] Jauges en forme de barre [Bug #60]
Page : 1 2 3 4 5 6
SQP Français 103 nochka85 [Read]
05 January 2011 à 20:33

SQP, Tuesday 13 July 2010 à 12:01


Subscription date : 03 July 2010
Messages : 1081
Alors voici un premier jet pour le thème que j'ai appelé Horizontal Mini Reggae pour le moment.

Il y aura surement encore pas mal de taf dessus, et je préfère préciser d'avance, je ne suis pas un graphiste. Donc même si j'ai l'envie de faire un truc propre, ca sera pas forcément réussi ou du goût de tout le monde.

En tout cas, je pense que ca peut répondre à des besoins, et au vu des premiers tests, ca a l'air encourageant.

Pour cela, il faut définir une clé XML pour avoir un indicateur variable en taille, proportionnellement à la valeur à afficher. Il faudrait que la texture soit découpée (pas redimentionnée comme dans mon test pourri).
J'ai utilisé <x_ratio>1</x_ratio> pour le moment.
Bien evidemment, il faudra aussi l'équivalent pour le découpage en mode vertical. Je me pose encore la question de savoir si ca serait utile de prévoir l'affichage inversé (droite vers gauche dans mon 1er cas), mais j'imagine qu'il y aura forcément quelqu'un qui voudra ca un jour (donc au moins prévoir les noms de clés compatibles (ou laisser ca pour un truc du genre x_ratio_reverse))

Sur ce screen on peut voir différentes utilisations de ce premier test : dans le dock ou en desklet avec différents fond, tailles et réglages.
http://meuarrr.free.fr/images/temp/memory-theme-test3.png

Je précise que rien n'est figé encore, donc tous les commentaires ou critiques sont le bienvenu
Et dans un second temps, j'aimerais vraiment beaucoup pouvoir l'utiliser pour afficher le plugin alsamixer (surement avec un thème encore plus léger)

Voici le thème : http://dl.free.fr/getfile.pl?file=/T16h64ac

et les horribles petits hacks de code que j'ai utilisé pour ca (faudra définir des propriétés spécifiques) :

cairo-dock-gauge.c

dans le gros for de lecture de fichier thème
237 : static gboolean _cairo_dock_load_gauge_theme (Gauge *pGauge, const gchar *cThemePath)
                else if(xmlStrcmp (pGaugeSubNode->name, (const xmlChar *) "x_ratio") == 0)
                    pGaugeIndicator->iNeedleRealWidth = _str2double (cNodeContent);


620 : static void _draw_gauge_image_opengl (Gauge *pGauge, GaugeIndicator *pGaugeIndicator, double fValue)
    if (pGaugeImage->iTexture != 0)
    {
        if (pGaugeIndicator->iNeedleRealWidth > 0)
            _cairo_dock_apply_texture_at_size_xratio (pGaugeImage->iTexture, iWidth, iHeight, fValue);
        else
            _cairo_dock_apply_texture_at_size (pGaugeImage->iTexture, iWidth, iHeight);
    }


cairo-dock-draw-opengl.h

les 2 font la même chose normalement
#define _cairo_dock_apply_texture_at_size_xratio(iTexture, w, h, ratio) do { \
    glBindTexture (GL_TEXTURE_2D, iTexture);\
    glBegin(GL_QUADS);\
    glTexCoord2f(0., 0.); glVertex3f(-.5*w, .5*h, 0.);\
    glTexCoord2f(1., 0.); glVertex3f( (ratio -.5)*w, .5*h, 0.);\
    glTexCoord2f(1., 1.); glVertex3f( (ratio -.5)*w, -.5*h, 0.);\
    glTexCoord2f(0., 1.); glVertex3f(-.5*w, -.5*h, 0.);\
    glEnd(); } while (0)

#define _cairo_dock_apply_texture_at_size_xratio2(iTexture, w, h, ratio) do { \
    glBindTexture (GL_TEXTURE_2D, iTexture);\
    _cairo_dock_apply_current_texture_portion_at_size_with_offset(0, 0, 1, 1, w, h, roundf(w * ratio) -w, 0); } while (0)

SQP, Tuesday 13 July 2010 à 12:14


Subscription date : 03 July 2010
Messages : 1081
j'ai oublié de préciser qu'on ne peut afficher qu'une seule barre à la fois.
(il faut donc lancer l'applet autant de fois que nécéssaire)

fabounet, Tuesday 13 July 2010 à 13:16


Subscription date : 30 November 2007
Messages : 17118
merki !
je crée une tache pour pas que j'oublie de regarder ça de près.

nochka85, Wednesday 14 July 2010 à 01:25


Subscription date : 29 November 2007
Messages : 7408
N'empêche que le mieux serait une barre OpenGL

matttbe, Wednesday 14 July 2010 à 03:52


Subscription date : 24 January 2009
Messages : 12573
Avec des effets OpenGL? Ou gérer la manipulation avec des fonctions en OpenGL?
Car quel serait l'avantage d'afficher une barre telle que celle là avec des fonctions OpenGL au lieu d'utiliser la libCairo?

nochka85, Wednesday 14 July 2010 à 11:02


Subscription date : 29 November 2007
Messages : 7408
-> une barre avec un mouvement fluide entre les mesures ... La même différence qu'entre les jauges avec les aiguilles

matttbe, Wednesday 14 July 2010 à 11:30


Subscription date : 24 January 2009
Messages : 12573
Ah oui, je ne pensais qu'à la jauge de Alsamixer mais si elle est en mouvement en continu, ça peut être utile!

SQP, Wednesday 14 July 2010 à 12:11


Subscription date : 03 July 2010
Messages : 1081
vous parlez de l'animation qui fait bouger l'aiguille ?
vu que je récupère la meme valeur que pour l'aiguille et que j'affiche d'une facon similaire, mon hack de 8 lignes est déjà animé On voit bien la progression, c'est assez parlant je trouve, mais comme je l'utilise pour la mémoire, je le vois pas souvent bouger

nochka85, Wednesday 14 July 2010 à 12:59


Subscription date : 29 November 2007
Messages : 7408
Oui, mais c'est pas fluide -> Si tu l'utilise pour le CPU en checkant toutes les secondes, si tu as un relevé à 10% puis à la seconde suivante à 100%, la jauge passera de 10 à 100 d'un seul coup ... avec l'opengl, on peut la faire passer de 10 à 100 de manière fluide.

Concrètement, voici la différence (à gauche = transition type cairo ... et à droite = transition fluide en opengl) :


SQP, Wednesday 14 July 2010 à 13:59


Subscription date : 03 July 2010
Messages : 1081
tu parles de ca ?


nochka85, Wednesday 14 July 2010 à 14:07


Subscription date : 29 November 2007
Messages : 7408
Yep ... désolé, j'avais mal lu ton 1er post

Alors c'est impec

SQP, Wednesday 14 July 2010 à 14:18


Subscription date : 03 July 2010
Messages : 1081
je savais même pas que c'était animé, j'ai découvert ca en affichant les valeurs de la jauge. Au début je comprenais pas pourquoi je passais 20x dans ma boucle d'affichage au lancement, jusqu'à ce que je j'arrive à l'afficher et que je vois le truc grandir

fabounet, Thursday 15 July 2010 à 03:10


Subscription date : 30 November 2007
Messages : 17118
disons qu'en le codant, on pourrait plus facilement proposer des options (couleurs notamment)
mais le résultat est déjà exactement ce qu'on peut souhaiter

SQP, Thursday 15 July 2010 à 10:11


Subscription date : 03 July 2010
Messages : 1081
Alors que j'avais proposé la possibilité de laisser l'utilisateur choisir ses couleurs au début, après avoir joué avec joué avec les svg pour faire mon dégradé, j'en suis revenu de cette option, car, à moins de recoder un vrai éditeur de dégradé , on n'aurait que peu de possibilités (2 couleurs, dégradé fixe).

Et si vraiment quelqu'un veut changer les couleurs, il suffit de copier le thème et lancer inskcape ou autre pour faire ca simplement sur le seul fichier lié au dégradé du thème.
(ou juste prévoir une option pour override ce fichier par l'utilisateur, qui permettrait de personnaliser très facilement, avec un dégradé ou une texture spéciale)

Et bravo pour la qualité du code qui m'a permit de réaliser ca si facilement (mais comme j'y connais rien en opengl j'ai pas trouvé comment aller plus loin en découpant la texture) alors que j'avais pas compilé (je ne fais plus que du php) de trucs que j'avais modifié moi même depuis plus de 10 ans

SQP, Sunday 25 July 2010 à 15:33


Subscription date : 03 July 2010
Messages : 1081
Alors ca avance, j'ai réussi le découpage comme je voulais, préparé un deuxième thème pour les docks horizontaux pour augmenter le nombre de testeurs potentiels, et arrangé un peu le code (le patch fait 20 lignes)

http://uppix.net/3/4/b/0b13455882b11cfccfd35d0d05ee1.png
Exemple avec affichage : proc, memoire, swap

Thème : Vertical Mini Reggae

Ne marche qu'en opengl, je veux valider ce mode la avant de passer a l'autre.

Réglages pour arriver à cet affichage :
    • Icone : Taille = 15 x 0 (ou 0 x 15 en mode vertical)
    • Configuration :
          • Style : gauge
          • Theme : Horizontal ou Vertical Mini Reggae
          • Graph : choisir une seule valeur à afficher par module (lancer le module autant de fois qu'il faudra)
          • Display values : no


petit détail qui me parait bizarre la gestion des dimensions d'icones : aucune mention de quelle case représente quoi, et l'inversion quand on change le dock de sens.

=== modified file 'src/gldit/cairo-dock-draw-opengl.h'
--- src/gldit/cairo-dock-draw-opengl.h 2010-06-03 23:08:09 +0000
+++ src/gldit/cairo-dock-draw-opengl.h    2010-07-25 11:23:18 +0000
@@ -147,6 +147,23 @@
*/
#define _cairo_dock_set_blend_pbuffer(...) glBlendFunc (GL_ONE, GL_ONE_MINUS_SRC_ALPHA)

+#define _cairo_dock_apply_texture_at_size_ratio_x(iTexture, w, h, ratio) do { \
+    glBindTexture (GL_TEXTURE_2D, iTexture);\
+    glBegin(GL_QUADS);\
+    glTexCoord2f(0., 0.); glVertex3f(-.5*w, .5*h, 0.);\
+    glTexCoord2f(ratio, 0.); glVertex3f( (ratio -.5)*w, .5*h, 0.);\
+ glTexCoord2f(ratio, 1.); glVertex3f( (ratio -.5)*w, -.5*h, 0.);\
+    glTexCoord2f(0., 1.); glVertex3f(-.5*w, -.5*h, 0.);\
+    glEnd(); } while (0)
+#define _cairo_dock_apply_texture_at_size_ratio_y(iTexture, w, h, ratio) do { \
+    glBindTexture (GL_TEXTURE_2D, iTexture);\
+    glBegin(GL_QUADS);\
+    glTexCoord2f(0., 1-ratio); glVertex3f(-.5*w, (ratio -.5)*h, 0.);\
+    glTexCoord2f(1., 1-ratio); glVertex3f( .5*w, (ratio -.5)*h, 0.);\
+    glTexCoord2f(1., 1); glVertex3f( .5*w, -.5*h, 0.);\
+    glTexCoord2f(0., 1); glVertex3f(-.5*w, -.5*h, 0.);\
+    glEnd(); } while (0)
+
#define _cairo_dock_apply_current_texture_at_size(w, h) do { \
    glBegin(GL_QUADS);\
    glTexCoord2f(0., 0.); glVertex3f(-.5*w, .5*h, 0.);\

=== modified file 'src/implementations/cairo-dock-gauge.c'
--- src/implementations/cairo-dock-gauge.c 2010-06-28 23:36:01 +0000
+++ src/implementations/cairo-dock-gauge.c    2010-07-25 11:24:48 +0000
@@ -358,6 +358,10 @@
                            pGaugeIndicator->emblem.fAlpha = _str2double (cTextNodeContent);
                    }
                }
+                else if(xmlStrcmp (pGaugeSubNode->name, (const xmlChar *) "x_ratio") == 0)
+                    pGaugeIndicator->ratioX = _str2double (cNodeContent);
+                else if(xmlStrcmp (pGaugeSubNode->name, (const xmlChar *) "y_ratio") == 0)
+                    pGaugeIndicator->ratioY = _str2double (cNodeContent);
                else if(xmlStrcmp (pGaugeSubNode->name, (const xmlChar *) "direction") == 0)
                    pGaugeIndicator->direction = _str2double (cNodeContent);
                else if(xmlStrcmp (pGaugeSubNode->name, (const xmlChar *) "posStart") == 0)
@@ -629,7 +633,12 @@
    
    if (pGaugeImage->iTexture != 0)
    {
-        _cairo_dock_apply_texture_at_size (pGaugeImage->iTexture, iWidth, iHeight);
+        if (pGaugeIndicator->ratioX)
+            _cairo_dock_apply_texture_at_size_ratio_x (pGaugeImage->iTexture, iWidth, iHeight, fValue);
+        else if (pGaugeIndicator->ratioY)
+            _cairo_dock_apply_texture_at_size_ratio_y (pGaugeImage->iTexture, iWidth, iHeight, fValue);
+        else
+            _cairo_dock_apply_texture_at_size (pGaugeImage->iTexture, iWidth, iHeight);
    }
}
static void _draw_gauge_needle_opengl (Gauge *pGauge, GaugeIndicator *pGaugeIndicator, double fValue)

=== modified file 'src/implementations/cairo-dock-gauge.h'
--- src/implementations/cairo-dock-gauge.h    2010-06-05 01:34:48 +0000
+++ src/implementations/cairo-dock-gauge.h    2010-07-25 11:26:16 +0000
@@ -45,6 +45,7 @@
    gdouble posX, posY;
    gdouble posStart, posStop;
    gdouble direction;
+    gboolean ratioX, ratioY;
    gint iNeedleRealWidth, iNeedleRealHeight;
    gdouble iNeedleOffsetX, iNeedleOffsetY;
    gdouble fNeedleScale;

matttbe, Sunday 25 July 2010 à 16:42


Subscription date : 24 January 2009
Messages : 12573
Excellente idée ces patches, continue!

SQP, Sunday 25 July 2010 à 16:50


Subscription date : 03 July 2010
Messages : 1081
j'ai oublié de préciser, que pour faire un thème il n'y a rien de plus simple :

<gauge>
    <name>Vertical Mini Reggae</name>
    <author>SQP</author>
    <file key="foreground">foreground.svg</file>
    <file key="background">background.svg</file>
    <indicator>
        <y_ratio>1</y_ratio>
        <file key="image">bar.svg</file>
    </indicator>
</gauge>


Il suffit de définir un indicateur avec une seule image et la valeur de x_ratio ou y_ratio à 1 suivant le sens dans lequel on veut orienter l'affichage.

SQP, Sunday 25 July 2010 à 17:01


Subscription date : 03 July 2010
Messages : 1081
Si t'as le courage de tester et de commit

(j'ai un bug qui n'a pas l'air lié si je détache mes system monitor du dock, je les ai qui s'affichent la moitié du temps à l'envers (flip horizontal) genre 2 ou 3 fois par sec, ca donne un effet clignottant)

Prochaine étape : l'utilisation du thème avec alsamixer !!

matttbe, Sunday 25 July 2010 à 17:50


Subscription date : 24 January 2009
Messages : 12573
Si t'as le courage de tester et de commit
Des modif là-dessus, c'est Fab qui s'en occupe, c'est lui l'expert

Mais si tu veux un peu t'amuser, tu peux toujours pusher tes modifications sur une branche annexe

fabounet, Monday 26 July 2010 à 10:10


Subscription date : 30 November 2007
Messages : 17118
ce qui serait bien c'est que l'orientation soit prise en compte automatiquement (pour éviter de dupliquer les thèmes, et pour qu'un changement de position du dock se répercute correctement)

peut-être pas possible avec les jauges, mais peut-être plutôt en le codant.
j'ai pas encore trop eu le temps de me pencher sur ça, il y'a qques détails à fixer pour sortir la 2.2

Technical discussions | Discussions techniques

Subjects Author Language Messages Last message
[Locked] Jauges en forme de barre [Bug #60]
Page : 1 2 3 4 5 6
SQP Français 103 nochka85 [Read]
05 January 2011 à 20:33


Glx-Dock / Cairo-Dock List of forums Technical discussions | Discussions techniques Jauges en forme de barre Top

Online users :

Powered by ElementSpeak © 2007 Adrien Pilleboue, 2009-2013 Matthieu Baerts.
Dock based on CSS Dock Menu (Ndesign) with jQuery. Icons by zgegball
Cairo-Dock is a free software under GNU-GPL3 licence. First stable version created by Fabounet.
Many thanks to TuxFamily for the web Hosting and Mav for the domain name.