here ou not here ?
Bernard Siaud alias Troumad
liste at siaud.org
Mon Nov 16 10:11:24 PST 2009
Hello
I post here, but I have no answer.
I do not know if I really post when he should.
I mentioned the problem of man xrandr I find wrong for panning option.
Now, I test the option scale for xrandr. And I found some problems with
maximizing windows. Whenever I change the scale of the two screens to
display the same as another.
1) VGA1 1440x900 and LVDS1 1280x800
xrandr --output LVDS1 --scale 1.125x1.125
Sometimes the maximized window does not fill the screen.
2) VGA1 1280x1024 and LVDS1 1280x800
xrandr --output VGA1 --scale 1.000000x0.781250
Each time the bottom of the maximized window is too low. As the height
of the screen was still 1024. I think.
I made a small program to automate this :
> #include <stdio.h>
> #include <stdlib.h>
> #include <string.h>
>
> struct ecran
> {
> char nom[16];
> char mode[16];
> unsigned short x,y;
> struct ecran * suiv;
> };
>
> int main()
> {
> FILE * sortie;
> char ch[512],mode[16],nom[16];
> unsigned short i,j;
> unsigned short xv,yv,xp,yp;
> unsigned short x,y;
> struct ecran * debut = NULL, *actuelle;
>
>
> system("/usr/bin/xrandr > /tmp/xrandr.sortie");
>
> sortie=fopen("/tmp/xrandr.sortie","r");
>
> while( fgets(ch,127,sortie)!=NULL)
> {
> /* printf("%hu => ",ch[0]);
> printf("%s",ch); */
> if (ch[0]!=' ')
> {
> sscanf(ch,"%s",nom);
> printf("\"%s\"\n",nom);
> if (strcmp(nom,"Screen")!=0)
> {
> if (debut==NULL)
> {
> actuelle=(struct ecran *)malloc(sizeof(struct ecran));
> debut=actuelle;
> }
> else
> {
> actuelle->suiv=(struct ecran *)malloc(sizeof(struct ecran));
> actuelle=actuelle->suiv;
> }
> actuelle->suiv=NULL;
> actuelle->x=0;
> strncpy(actuelle->nom,nom,15);
> }
> }
> else
> {
> for(i=0;ch[i]==' ';i++);
> sscanf(ch+i,"%s",mode);
> if (strstr(ch+i,"+")!=NULL)
> {
> strncpy(actuelle->mode,mode,15);
> sscanf(mode,"%hux%hu",&actuelle->x,&actuelle->y);
> if (strstr(ch+i,"*")==NULL)
> {
> sprintf(ch,"xrandr --output %s --mode %s",nom,mode);
> system(ch);
> }
> printf(ch);printf("\n");
> if (strcmp(nom,"VGA1")!=0)
> {
> xv=actuelle->x;
> yv=actuelle->y;
> }
> else if (strcmp(nom,"LVDS1")!=0)
> {
> xp=actuelle->x;
> yp=actuelle->y;
> }
> }
> if (actuelle->x==0)
> if (strstr(ch+i,"*")!=NULL)
> {
> strncpy(actuelle->mode,mode,15);
> sscanf(mode,"%hux%hu",&actuelle->x,&actuelle->y);
> if (strcmp(nom,"VGA1")!=0)
> {
> xv=actuelle->x;
> yv=actuelle->y;
> }
> else if (strcmp(nom,"LVDS1")!=0)
> {
> xp=actuelle->x;
> yp=actuelle->y;
> }
> }
> }
> }
>
> printf("Choix de vos écrans\n");
> actuelle=debut;
> i=0;
> do
> {
> if (actuelle->x!=0)
> {
> i++;
> printf ("%hu) sortie %s mode %s\n",i,actuelle->nom,actuelle->mode);
> }
> actuelle=actuelle->suiv;
> }
> while (actuelle != NULL);
>
> if (i>1)
> {
> printf("Choix de l'écran du vidéo projecteur (de 1 à %hu)",i);
> scanf("%hu",&j);
> while (j>i || i==0)
> {
> printf("Mauvais choix : %hu !\nChoix de l'écran du vidéo projecteur
> (de 1 à %hu)",j,i);
> }
> if (i>2)
> {
> printf("Choix de l'écran du portable (de 1 à %hu, mais pas %hu)",i,j);
> scanf("%hu",&x);
> while (x>i || x==0 || x==j)
> {
> printf("Mauvais choix : %hu !\nChoix de l'écran du vidéo
> projecteur (de 1 à %hu pas %hu)",x,i,j);
> }
> }
> else
> {
> if (j==1) x=2;
> else x=1;
> }
>
> actuelle=debut;
> i=0;
> do
> {
> if (actuelle->x!=0)
> {
> i++;
> if (i==j) // vidéoprojecteur
> {
> xv=actuelle->x;
> yv=actuelle->y;
> }
> else if (i==x) // écran
> {
> xp=actuelle->x;
> yp=actuelle->y;
> strcpy(nom,actuelle->nom);
> }
> }
> actuelle=actuelle->suiv;
> }
> while (actuelle!=NULL);
>
> sprintf(ch,"xrandr --output %s --pos 0x0 --panning 0x0 --scale 1x1
> --transform 1,0,0,0,1,0,0,0,1 --output LVDS1 --pos 0x0 --panning 0x0
> --scale 1x1 --transform 1,0,0,0,1,0,0,0,1",nom);
> system(ch);
> sprintf(ch,"xrandr --output %s --scale 1x1",nom); /* Je ne comprends
> pas pourquoi je dois mettre cette ligne ! Bug de xrandr ? */
> system(ch);
> sprintf(ch,"xrandr --output %s --scale
> %fx%f",nom,(float)xv/xp,(float)yv/yp);
> system(ch);
> }
> else
> printf("Je n'ai trouvé qu'une seule sortie écran");
> }
--
Amicalement vOOotre, Troumad Alias Bernard SIAUD, http://troumad.org
N'envoyez que des documents avec des formats ouverts, comme
http://fr.openoffice.org
Adresse electronique speciale liste
More information about the xorg-devel
mailing list