Centrar ventana, detectar monitor panorámico y correción de aspecto

Started by La momia que fuma, April 05, 2011, 11:34:38 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

La momia que fuma

Todo esto lo use en el eek, cuyo codigo es una chapuza, a ver si no me lio al ponerlo por aqui....

(Se necesita incluir mod_wm)

-Detectar si el monitor es panorámico o "cuadrado"

Primero obtenemos la resolución del sistema en las variables dsx y dsy (ints):

get_desktop_size(&dsx, &dsy);

Al dividir los valores de dsx entre dsy daria sobre 1.3 si es un monitor normal y sobre 1.7 si es panorámico, pero al dividir ints no va a dar decimales, asi que antes de dividir multiplicamos ambos valores por 10 y comprobamos si el resultado de la división da 13 (normal) o 17 (panóramico)

Sabiendo ya que monitor tenemos, en caso de monitores panoramicos+juegos no panoramicos, se puede usar scale_resolution al poner pantalla completa para compensar que el monitor va a estirar y deformar la imagen.

Yo en el Eeek versión PC le daba a scale_resolution un valor "05680480" (568x480, vamos), y sale con sus bandas negras a los lados y la imagen con su aspecto cuadrado, aunque el valor es un poco "por la cuenta de la vieja" como quien dice, e igual se puede afinar mas, no queda exacto del todo y se aprecian cosas como lineas de un pixel de ancho que aparecen de dos de anchura y cosas asi, pero aun con todo hay que mirar con lupa para darse cuenta...si alguien da con valores mejores para scale_resolution se agradece :P

La pena es que con esta corrección nos quedamos sin poder usar filtros gráficos a pantalla completa, ya que son incompatibles con scale_resolution...

Una cosilla más...como muchos sabreis, los monitores normales se denominan 4:3 y los panorámicos 16:9 (si dividimos 4/3 y 16/9 nos dan los 1.7 y 1.3 periodicos de antes), pero creo que también existen monitores de proporcion 16:10, asi que supongo que habría que contemplar además un 3er caso en el que la división resulte 16 (en lugar de 17 o 13) con su correspondiente valor de scale_resolution diferente al que propongo para la proporción 16:9

-Centrar ventana:

Con los valores originales que devuelve desktop_size (o sea, sin multiplicar por 10) hacemos:

set_window_pos((dsx/2)-wx,(dsy/2)-wy);

wx y wy son el punto medio de la ventana, es decir, los valores de la resolución que estamos usando en el programa divididos entre dos, o sea, si estamos a una resolucion de 320x240, wx seria 160 y wy 120 (dsx y dsy divididos entre 2 son el punto medio del escritorio)

Atención aqui si estamos usando algún filtro gráfico como 2Xscale que duplica el tamaño de la ventana, aunque internamente el programa siga trabajando con coordenadas de 320x240, la ventana es el doble de grande, asi que wx y wy quedarían como 320 y 240 respectivamente. Si se usa scale_resolution para cambiar el tamaño de la ventana también habra que tenerlo en cuenta, claro.

SplinterGU

momia, dsx y dsy no pueden ser floats... deben ser ints... no entiendo como eso te funciona.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

La momia que fuma

Pues.....funciona xD (Aunque ahora que me lo dices y lo pienso un poco, no, no deberia funcionar jejeje)

Si no en todo caso supongo que con multiplicar por 10 dsx y dsy (siendo ints) y mirar si la division da 13 o 17 valdría igual y nos ahorramos usar floats...(Aunque a mi ya me funcione asi :P)

SplinterGU

no puede ser, fijate bien, porque meter el contenido de un int en un float va a dar cualquier numero, posiblemente te esta dando de casualidad... pero en otras resoluciones no va a funcionar.

imprimi los valores de dsx y dsy, y vas a ver que no te va a dar la resolucion del escritorio, si te la da, entonces dsx y dsy no son floats, quizas los tengas definidos a nivel local y global a la vez, con diferentes tipos, o algo raro... revisalo, no puede funcionar esto.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

La momia que fuma

Hmmm, tienes razón en que da valores raros....(Por eso en lo de centrar ventana no me valen floats) pero lo bueno es que los da en la proporcion correcta! :P

Lo he mirado con la consola de debug y dividiendo estos valores incorrectos da 1.7 periódico, asi que de ser casualidad seria una casualidad entre un millón jejeje, ya que es justo lo que da dividir 16/9 (Recordemos que los monitores panorámicos se les denomina 16:9 y los normales 4:3....4 entre 3 da 1.3 periódico)

Voy a editar el primer post para corregirlo de todos modos, gracias por el apunte ;)