BitBtn und übergrosses Bitmap
-
- Beiträge: 6710
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
BitBtn und übergrosses Bitmap
So wie es scheint, habe ich gerade ein Bug entdeckt.
Das Glyph geht über die Kante des BitBtn.
Nach meines Wissens, darf bei einem Widget nicht über die Kante hinaus gezeichnet werden.
Noch extrem wird der Effekt, wen ich diesen Button noch verkleinere.
Ich verwende GTK2.
Das Glyph geht über die Kante des BitBtn.
Nach meines Wissens, darf bei einem Widget nicht über die Kante hinaus gezeichnet werden.
Noch extrem wird der Effekt, wen ich diesen Button noch verkleinere.
Ich verwende GTK2.
- Dateianhänge
-
- Bildschirmfoto vom 2024-09-22 13-46-21.png (4.41 KiB) 901 mal betrachtet
-
- bitbtn_test.zip
- (156.85 KiB) 49-mal heruntergeladen
-
- Bildschirmfoto vom 2024-09-22 13-40-37.png (3.63 KiB) 901 mal betrachtet
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
- Ally
- Beiträge: 273
- Registriert: Do 11. Jun 2009, 09:25
- OS, Lazarus, FPC: Win und Lazarus Stable release
- CPU-Target: x64
Re: BitBtn und übergrosses Bitmap
Hallo Mathias,
unter Windows passiert das nicht.
Ich würde das trotzdem nicht als Bug bezeichnen.
Eine .ico-Datei als Glyph zu verwenden ist eine etwas suboptimale Vorgehensweise.
Eine .ico-Datei beinhaltet mehrere Bitmaps in unterschiedlichen Auflösungen, die eigentlich nur unter Windows wirklich richtig genutzt werden (Desktop, Explorer usw.).
Für einen BitBtn bietet Lazarus schon seit geraumer Zeit bessere Alternative zu Glyph.
Benutzt man statt dessen eine Imagelist wird es z.B. sehr einfach eine Anwendung skalierbar zu machen.
Anbei ein Beispiel.
Man beachte auch den Ressourcenverbrauch. Das Ico ist 131 kb groß, die drei Bug-Bitmaps bringen es zusammen auf gerade mal 6 kb.
Bei einer Anwendung mit vielen Buttons kann sich das sehr unangenehm bemerkbar machen.
Gruß
Roland
unter Windows passiert das nicht.
Ich würde das trotzdem nicht als Bug bezeichnen.
Eine .ico-Datei als Glyph zu verwenden ist eine etwas suboptimale Vorgehensweise.
Eine .ico-Datei beinhaltet mehrere Bitmaps in unterschiedlichen Auflösungen, die eigentlich nur unter Windows wirklich richtig genutzt werden (Desktop, Explorer usw.).
Für einen BitBtn bietet Lazarus schon seit geraumer Zeit bessere Alternative zu Glyph.
Benutzt man statt dessen eine Imagelist wird es z.B. sehr einfach eine Anwendung skalierbar zu machen.
Anbei ein Beispiel.
Man beachte auch den Ressourcenverbrauch. Das Ico ist 131 kb groß, die drei Bug-Bitmaps bringen es zusammen auf gerade mal 6 kb.
Bei einer Anwendung mit vielen Buttons kann sich das sehr unangenehm bemerkbar machen.
Gruß
Roland
- Dateianhänge
-
- BugButton.zip
- (148.24 KiB) 45-mal heruntergeladen
Re: BitBtn und übergrosses Bitmap
Ich denke schon, dass das ein Bug ist, der unter gtk2 speziell beim ico-Format auftritt. Der Fehler kommt nicht unter gtk3 und qt5 (andere WS habe ich nicht getestet), und auch nicht bei png. Du solltest einen Bug-Report schreiben.
-
- Beiträge: 6710
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: BitBtn und übergrosses Bitmap
Das ico war nur als Test. Das Problem tritt auch auf, bei kleinen PNG-Dateien kleiner 1KB.Eine .ico-Datei als Glyph zu verwenden ist eine etwas suboptimale Vorgehensweise.
Jetzt die Frage, kommt dies auch bei nativen GTK2 vor.Ich denke schon, dass das ein Bug ist, der unter gtk2 speziell beim ico-Format auftritt.
Verwendet Lazarus folgendes intern ?
Code: Alles auswählen
gtk_button_set_image(GTK_BUTTON(button), image);
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: BitBtn und übergrosses Bitmap
Kann ich nicht bestätigen. Wenn ich eines der 64x64 großen png Bilder aus images/general_purpose der Glyph-Property eines 40x40 großen TBitBtn zuweise, wird NICHT über den Rand rausgezeichnet.Mathias hat geschrieben: So 22. Sep 2024, 18:26 Das ico war nur als Test. Das Problem tritt auch auf, bei kleinen PNG-Dateien kleiner 1KB.
-
- Beiträge: 6710
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: BitBtn und übergrosses Bitmap
Es passiert auch, wen ich eine 24x24 png nehme.
Und je länger der Text in Caption, desto schlimmer wird es.
Und je länger der Text in Caption, desto schlimmer wird es.
- Dateianhänge
-
- Bildschirmfoto vom 2024-09-22 19-55-08.png (2.54 KiB) 847 mal betrachtet
-
- bitbtn_test.tar
- (148 KiB) 44-mal heruntergeladen
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: BitBtn und übergrosses Bitmap
Hast Recht. Der Caption-Text war zu kurz.Mathias hat geschrieben: So 22. Sep 2024, 19:55 Es passiert auch, wen ich eine 24x24 png nehme.
Und je länger der Text in Caption, desto schlimmer wird es.
-
- Beiträge: 6710
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: BitBtn und übergrosses Bitmap
Der Fall ist Klar, das gibt einen Bugreport bei GTK2 und nicht bei Lazarus.
Code: Alles auswählen
program project1;
uses
GLib2,
Gdk2,
Gtk2;
var
Window, fixed, btn1, image: PGtkWidget;
begin
GTK_Init(@argc, @argv);
Window := gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(Window), 'Hallo');
gtk_window_set_default_size(GTK_WINDOW(Window), 320, 200);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
fixed := gtk_fixed_new();
gtk_container_add(GTK_CONTAINER(window), fixed);
btn1 := gtk_button_new();
image := gtk_image_new_from_file('test.ico');
gtk_button_set_image(GTK_BUTTON(btn1), image);
gtk_fixed_put(GTK_FIXED(fixed), btn1, 10, 10);
gtk_widget_set_size_request(btn1, 75, 25);
gtk_widget_show_all(window);
g_signal_connect(G_OBJECT(window), 'destroy', G_CALLBACK(@gtk_main_quit), nil);
GTK_Main;
end.
- Dateianhänge
-
- Bildschirmfoto vom 2024-09-23 08-43-19.png (5.82 KiB) 811 mal betrachtet
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 6710
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: BitBtn und übergrosses Bitmap
Es gehört nicht direkt zum Thema.
Kann es sein, das in GTK2 der Button ein Images oder ein Label auf einmal aufnehmen kann.
Folgendes gibt nur ein Label.
Sobald ich die Zeile mit dem Label entferne, dann kommt das Images.
Ein BitBtn habe ich nur über einen Umweg hingekriegt, in dem ich für den Button einen selbstgemachten Container hinzufüge.
Kann es sein, das in GTK2 der Button ein Images oder ein Label auf einmal aufnehmen kann.
Folgendes gibt nur ein Label.
Code: Alles auswählen
button := gtk_button_new();
gtk_button_set_image(GTK_BUTTON(button), image);
gtk_button_set_label(GTK_BUTTON(button), 'Hello World');
Ein BitBtn habe ich nur über einen Umweg hingekriegt, in dem ich für den Button einen selbstgemachten Container hinzufüge.
Code: Alles auswählen
function CreateBitBtn: PGtkWidget;
var
lab, image, hbox: PGtkWidget;
begin
Result := gtk_button_new;
hbox := gtk_hbox_new(False, 0);
lab := gtk_label_new('Button');
gtk_box_pack_start(GTK_BOX(hbox), lab, False, False, 10);
image := gtk_image_new_from_file('test.ico');
gtk_box_pack_end(GTK_BOX(hbox), image, False, False, 10);
g_object_set(Result, 'child', hbox, nil);
end;
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot