Line Windows<>Linux

Für Fehler in Lazarus, um diese von anderen verifizieren zu lassen.
Antworten
Mathias
Beiträge: 6164
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Line Windows<>Linux

Beitrag von Mathias »

Bei folgendem Code, wird wie erwartet unter Windows nur eine Linie gezeichnet.
Aber unter Linux kommen zwei.

Code: Alles auswählen

procedure TForm1.FormPaint(Sender: TObject);
begin
  Canvas.Line(10, 10, 200, 10);
  Canvas.Line(10 + $FFFF, 20, 200 + $FFFF, 20);
end

Ist dies ein Bug ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Line Windows<>Linux

Beitrag von Socke »

Mathias hat geschrieben:Bei folgendem Code, wird wie erwartet unter Windows nur eine Linie gezeichnet.
Aber unter Linux kommen zwei.

Code: Alles auswählen

procedure TForm1.FormPaint(Sender: TObject);
begin
  Canvas.Line(10, 10, 200, 10);
  Canvas.Line(10 + $FFFF, 20, 200 + $FFFF, 20);
end

Ist dies ein Bug ?

Unter Windows ist zwar die Breite eines Formulars als Integer definiert, Windows hat hier aber anscheinend ein internes Limit von $7FFF.
Dadurch wir die zweite Linie nicht gezeichnet, da sie in einem ungültigen Bereich liegt.
GTK2 oder QT können dies selbstverständlich anders handhaben.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Line Windows<>Linux

Beitrag von wp_xyz »

Socke hat geschrieben:Unter Windows ist zwar die Breite eines Formulars als Integer definiert, Windows hat hier aber anscheinend ein internes Limit von $7FFF.
Dadurch wir die zweite Linie nicht gezeichnet, da sie in einem ungültigen Bereich liegt.

Das sehe ich nicht so, wie kommst du darauf? Die zweite Linien liegt einfach kilometerweit außerhalb des sichtbaren Fensters.

Dass unter Linux zwei Linien gezeichnet werden, sehe ich auch nicht. Mein Mint zeichnet sowohl mit gtk2 als auch mit qt nur 1 Linie, genauso wie Windows.

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Line Windows<>Linux

Beitrag von Socke »

wp_xyz hat geschrieben:
Socke hat geschrieben:Unter Windows ist zwar die Breite eines Formulars als Integer definiert, Windows hat hier aber anscheinend ein internes Limit von $7FFF.
Dadurch wir die zweite Linie nicht gezeichnet, da sie in einem ungültigen Bereich liegt.

Das sehe ich nicht so, wie kommst du darauf? Die zweite Linien liegt einfach kilometerweit außerhalb des sichtbaren Fensters.

Dass unter Linux zwei Linien gezeichnet werden, sehe ich auch nicht. Mein Mint zeichnet sowohl mit gtk2 als auch mit qt nur 1 Linie, genauso wie Windows.

[Window Title]
Fehler

[Content]
TWinControl.SetBounds (Form1:TForm1): Width 12287 not allowed.

[Ok]

Wenn ich die Formularbreite auf $1FFF stelle, gibt es diese Fehlermeldung nicht, die Breite wird aber auf 3348 (horizontale Bildschirmauflösung - 12 Pixel) eingestellt.

Bei dir müssten doch zwei Linien gezeichnet werden? Hast du versucht, z.B. einen Button an der Position der zweiten Linie zu positionieren und dorthin zu scrollen?
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Line Windows<>Linux

Beitrag von wp_xyz »

Sorry, ich verstehe kein Wort... Was machst du, dass diese Fehlermeldung kommt?

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Line Windows<>Linux

Beitrag von Socke »

wp_xyz hat geschrieben:Sorry, ich verstehe kein Wort... Was machst du, dass diese Fehlermeldung kommt?

Ich gebe im Objektinspektor für Form1.Width den Wert $2FFF ein.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Mathias
Beiträge: 6164
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Line Windows<>Linux

Beitrag von Mathias »

Dass unter Linux zwei Linien gezeichnet werden, sehe ich auch nicht. Mein Mint zeichnet sowohl mit gtk2 als auch mit qt nur 1 Linie, genauso wie Windows.

Könnte das evtl. am Grafik-Treiber liegen ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Line Windows<>Linux

Beitrag von wp_xyz »

Ich muss zurückrudern: Alle meine Linux VM mit gtk2 (Ubuntu 12.04, 16.04, Mint 18, Mint 17) zeigen zwei Linien, das Mint 17 mit qt nur eine (die Mitteilung oben ist falsch). Die beiden Linien beginnen und enden beim gleichen x-Wert, sind aber vertikal um die 10 Pixel verschoben, also wie wenn die Koordinate $FFFF+10 als 10 interpretiert wird, und $FFFF+200 als 200. Kann es sein, dass gtk2 mit einigen/allen (?) Fällen noch mit 16-bit Koordinaten arbeitet? Denn $FFFF + 10 --> 10 ist ja ein klassischer Überlauf an der Word-Grenze.

Mathias
Beiträge: 6164
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Line Windows<>Linux

Beitrag von Mathias »

Die beiden Linien beginnen und enden beim gleichen x-Wert, sind aber vertikal um die 10 Pixel verschoben

Sie sind 10 Pixel verschoben, ich habe bewusst bei der 2.Linie ein Y-Wert von 20 angegeben.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Line Windows<>Linux

Beitrag von mse »

Der Koordinatenbereich von X11, was auf Linux vermutlich zum zeichnen verwendet wird, ist 16 Bit -> -2^15 .. 2^15 - 1.
https://www.x.org/releases/X11R7.6/doc/ ... mmon_types
(siehe POINT und RECTANGLE).

Mathias
Beiträge: 6164
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Line Windows<>Linux

Beitrag von Mathias »

Der Koordinatenbereich von X11, was auf Linux vermutlich zum zeichnen verwendet wird, ist 16 Bit -> -2^15 .. 2^15 - 1.

Dann kann Lazarus in dem Fall nichts dafür.
Dann muss man die Koordinaten zuerst prüfen, bevor man zeichnet.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten