PDA

Ver la versión completa : C++ GTK3, hacer scroll



Dullyboy
24/08/2021, 17:08
Estoy modificiando un plugin del Deadbeef para hacer que se vean las letras de las canciones sincronizadas y no he conseguido encontrar como hacer un scroll suave para que se vea la estrofa correspondiente. Como mucho he encontrado la forma de saltar a la línea con un scroll_to(end), pero lo hace de golpe. La única solución que he encontrado ha sido poner saltos de línea pequeños e ir quitandolos, pero como que no es una solución muy refinada que digamos :D.

swapd0
24/08/2021, 17:28
¿Hacia que dirección es el scroll? GTK3 es la librería para hacer interfaces gráficos, ¿no?

-----Actualizado-----

Lo normal seria poner un control de tipo bitmap, accedes a el y lo haces a pelo :P

Dullyboy
24/08/2021, 18:54
¿Hacia que dirección es el scroll? GTK3 es la librería para hacer interfaces gráficos, ¿no?

Vertical, según va avanzando la canción baja (aunque si le das para atrás debería de subir claro). Sí es librería gráfica.


Lo normal seria poner un control de tipo bitmap, accedes a el y lo haces a pelo :P

Eso que significa que soy profano :D ¿pasar el texto a una imagen y mover la imagen? No es mala idea aunque tendría que reahacer toda esa parte, tendría que ser para las próximas vacaciones :lol: .

swapd0
24/08/2021, 22:04
como yo lo haría, imagínate que solo ves dos lineas de la canción y va scrollando pixel a pixel hacia arriba, o sea que en un momento puedes tener media linea, una linea entera y media linea de la siguiente, por lo tanto tu buffer interno seria de 3 lineas de alto.

Creas un control para dibujar 2 lineas y un buffer interno (bitmap) con espacio para tres lineas.

1 Lees tres lineas del texto y las dibujas en el buffer interno. incrementas la linea en 1
2 pones y = 0
3 copias desde y hasta la altura correspondiente a dos lineas al bitmap del control.
4 inc y
5 si y == altura de una linea vas a 1 (para dibujar otra vez las 3 lineas pero esta vez empezando por la segunda), sino vas a 3

Dullyboy
25/08/2021, 11:16
Lo malo con eso es que también necesitas saber el número de líneas que salen al poner las letras (porque lo tengo en columna, y hay estrofas que ocupan 1, 2 o incluso 3 líneas). Con esto fue con lo que decidí preguntar :D, que lo veo más complejo de arreglar.

swapd0
25/08/2021, 12:39
Pero lees primero el fichero y calculas cuantas lineas tiene, y el tamaño de estrofas da igual, vas mostrando dos en pantalla en plan karaoke.

Dullyboy
25/08/2021, 13:41
Pero lees primero el fichero y calculas cuantas lineas tiene, y el tamaño de estrofas da igual, vas mostrando dos en pantalla en plan karaoke.

Claro sí, tienes razón, si lo centras en la línea que quieres mostrar te da igual lo larga que sea, que con que entre en el alto que hayas puesto es suficiente.

https://giphy.com/gifs/UjiHKwBQ57o92jtmXR

Por ahora lo dejo así y en navidades ya intento generar con imágen :D.

Gracias por las respuestas.

swapd0
25/08/2021, 17:14
Haz el control un poco mas grande para que al poner la letra en negrita te quepa en la linea y no pegue eso saltos que haces que te puedas perder.

Dullyboy
25/08/2021, 18:05
Haz el control un poco mas grande para que al poner la letra en negrita te quepa en la linea y no pegue eso saltos que haces que te puedas perder.

Es que también hay canciones con estrofas que ocupan 3 líneas :) (y quiero ese ancho, que es el mínimo. Al otro lado está la playlist).

Dullyboy
09/08/2023, 21:59
Me he puesto este verano a ver si era capaz de hacer funcionar decentemente esto, y al final casi que lo he conseguido (sin poder hacer scroll con GTK eso sí :lol: ) .

https://github.com/AsVHEn/deadbeef-lyricbar
55660

josepzin
10/08/2023, 01:17
Está buena esa opción, yo busqué las letras de muchas canciones aunque hasta ahora pocas veces usé la opción del reproductor para mostrarlas. En el móvil uso Musicolet que la tiene.