J
poe schrieb:
Bin selbst drauf gekommen, allerdings ergibt sich daraus ein weiteres problem.
Ich hab das padding und alignment des bildes auf 0 gesetzt, somit ist das bild jetzt bündig mit der event box.
Das sieht allerdings ziemlich mies aus, da das image links oben in einem GTK Frame sitzt.
Kann ich die event_box evtl. irgendwie verkleinern so das das bild mittig von dem Frame ist und die koordinaten von der event_box gleich der des bildes sind?
Klar, dazu musst du nur noch ein GtkAlignment vor die EventBox in dein Frame packen. Um zu zentrieren müssen xalign und yalign auf 0.5 gesetzt werden.
Die Event Box ist auch immernoch größer als das Bild, das ist nicht weiter schlimm, aber auch nicht gerade sehr sauber.
Wenn du beim GtkAlignment xscale und yscale auf 0 stellst, nicht mehr
Hier mal Beispiel-Code:
#include <gtk/gtk.h>
#include <stdio.h>
static void image_pressed(GtkWidget *widget, GdkEventButton *event, gpointer data)
{
printf("x: %lf y: %lf\n", event->x, event->y);
}
static void destroy(GtkWidget *widget, gpointer data)
{
gtk_main_quit();
}
int main(int argc, char *argv[])
{
GtkWidget *window;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
g_signal_connect(G_OBJECT(window), "destroy",
G_CALLBACK(destroy), NULL);
GtkWidget *image = gtk_image_new_from_file("bild.jpg");
gtk_misc_set_padding(GTK_MISC(image), 0, 0);
gtk_misc_set_alignment(GTK_MISC(image), 0, 0);
GtkWidget *event_box = gtk_event_box_new();
gtk_widget_add_events(GTK_WIDGET(event_box), GDK_BUTTON_PRESS_MASK);
g_signal_connect(GTK_WIDGET(event_box), "button_press_event",
G_CALLBACK(image_pressed), NULL);
gtk_container_add(GTK_CONTAINER(event_box), image);
GtkWidget *frame = gtk_frame_new("test");
GtkWidget *alignment = gtk_alignment_new(0.5f, 0.5f, 0.0f, 0.0f);
gtk_container_add(GTK_CONTAINER(frame), alignment);
gtk_container_add(GTK_CONTAINER(alignment), event_box);
gtk_container_add(GTK_CONTAINER(window), frame);
gtk_widget_show_all(window);
gtk_widget_show (window);
gtk_main ();
return 0;
}