Curiosamente en el 2016 había hecho un ejemplo parecido usando el ScrollArea, pero no igual.
La memoria juega malas pasadas. Han pasado ocho años. Vuelvo a hacer algo "parecido"
y creo que no es la primera vez. Vamos que antes tengo que buscar de alguna forma si ya
hice algo parecido, cosa que no es sencilla, entre tantos ejemplos. Lo busqué por el nombre de la imagen.
Desde luego en este ejemplo es mejorado. Es diferente, hasta para dibujar la imagen en el ScrollArea usaba otro método.
En el nuevo uso algo como esto:
Código:
Public Sub DibujarImagen()
Paint.Translate(-ScrollArea1.ScrollX, -ScrollArea1.ScrollY)
Paint.DrawImage(unaimagen, 0, 0)
End
Y en el del 2016 usaba este método:
Código:
Public Sub DibujaMe()
Dim w, h As Float
Dim hbrush As PaintBrush
w = imagenfondo.W
h = imagenfondo.H
hbrush = Paint.Image(imagenfondo)
hbrush.Translate(x - ScrollArea1.ScrollX, y - ScrollArea1.ScrollY)
Paint.Brush = hbrush
Paint.Rectangle(x - ScrollArea1.ScrollX, y - ScrollArea1.ScrollY, w, h)
Paint.Fill
End
Creo que el uso de brochas es mejor, en parte, aunque se necesite más instrucciones.
Esta forma:
Código:
Paint.Translate(-ScrollArea1.ScrollX, -ScrollArea1.ScrollY)
Resulta un poco extraña y a la vez recuerda que es algo que sucede con respecto a la anterior coordenada.
Esto me recuerda cuando en el Zx Spectrum dibujaba usando instrucciones PLOT, DRAW.
Plot dibujaba un punto. y Draw un trazado, que podía ser curvo. Pero de un principio "siempre" se tenía
que comenzar con un Plot, para tener un inicio de dibujo y Draw "siempre" iba tomando como referencia (que no se nombraba)
la anterior coordenada, que podía ser el final de un Draw.
Como veis en esa instrucción de Gambas, se usa un sistema parecido. En Gambas usando la librería Paint
existe Paint.LineTo.
Cita:
Adds a line to the path from the current point to position (X, Y) in user-space coordinates. After this call the current point will be (X, Y).
En el caso de Translate. ( Que resulta complejo entender ciertos términos sin ejemplos y explicación lógicamente).
El espacio de usuario , la matriz de transformación, etc.
Cita:
Modifica la matriz de transformación actual (CTM) traduciendo el origen del espacio de usuario por (TX, TY).
TX: Cantidad a trasladar en la dirección X.
TY: Cantidad a trasladar en la dirección Y.
Este desplazamiento se interpreta como una coordenada del espacio de usuario según el CTM vigente antes de la nueva llamada a Translate. En otras palabras, la traducción del origen del espacio de usuario tiene lugar después de cualquier transformación existente.
Ya sabemos que en Gambas usamos la clase Paint que deriva de Cairo, incluso Python y supongo que otros lenguajes, usan Cairo,
( debe ser una librería muy limitada en este lenguaje). Encontrar un manual en español que lo explique, debe ser complicado.
Y es que no es, "exactamente" igual. Paint resulta más fácil de entender. Cairo hace el mismo trabajo o más, pero sobre un dibujo
y este se graba y luego para mostrarlo hay que cargarlo. Cosa que en Gambas, todo lo que se haga, queda en el control DrawingArea.
Nota curiosa en el ejemplo anterior. Tanto x como y no se usan. Este es el código completo del ejemplo del 2016.
Fijaros
Código:
Private imagenfondo As Image
Private x As Integer
Private y As Integer
Public Sub Form_Open()
Me.Center
Me.Title = "Ejemplo con ScrollArea"
imagenfondo = Image.Load("Politica-historia-Roma.jpg")
ScrollArea1.ResizeContents(imagenfondo.W, imagenfondo.H)
End
Public Sub ScrollArea1_Draw()
DibujaMe
End
Public Sub DibujaMe()
Dim w, h As Float
Dim hbrush As PaintBrush
w = imagenfondo.W
h = imagenfondo.H
hbrush = Paint.Image(imagenfondo)
hbrush.Translate(x - ScrollArea1.ScrollX, y - ScrollArea1.ScrollY)
Paint.Brush = hbrush
Paint.Rectangle(x - ScrollArea1.ScrollX, y - ScrollArea1.ScrollY, w, h)
Paint.Fill
End
Una cosa es lo que a ti como persona, como razonamiento te parece normal. Un origen de coordenada, un principio
y es que luego no se usa. No somos máquinas.
Saludos