Re: Problems with layout
- From: WDraxinger darkstargames de
- To: "Eric THIERRY" <eric thierry finconsult fr>
- Cc: "GTK+ Mail List" <gtk-app-devel-list gnome org>
- Subject: Re: Problems with layout
- Date: Sun, 24 Feb 2002 14:37:58 +0100
Try to put the Layout in a Viewport by using
gtk_scrolled_window_add_with_viewport(GTK_CONTAINER (scrolled_window), layout);
----- Original Message -----
From: "Eric THIERRY" <eric thierry finconsult fr>
To: <gtk-app-devel-list gnome org>
Sent: Thursday, February 21, 2002 1:05 PM
Subject: Problems with layout
Hi there,
I have two problems with gtk_layout.
I create a layout that I add in a scrolled_window. Then I create some
buttons that I put in the layout, and I draw rectangles in a callback
function connected to the layout's expose event. For the moment,
everything's OK.
Now come the problems.
First problem:
When I scroll the scrolled_window, nothing happens. I have to resize my
window (with the mouse) to see the scrolling effect, which means to see
other buttons. (When I click on scrollbars arrows, the slider doesn't
move, I have to click in the trough to move it: is that a clue ??)
Second problem:
When I resize my window, I no longer see my rectangles. I see them for a
very short time in the increased portion of the window, but they
disappear quickly. To see them again, I have to mask my window with an
other one, or to iconify it and increase it. Do I have to use pixmap to
solve this ?
Thanks a lot.
Here's my code (inspired from a book, but similar to what I need)
#include <gtk/gtk.h>
#include <windows.h>
#include <stdio.h>
gint HandleExposeEvent (GtkWidget * widget, GdkEventExpose * event)
{
GtkLayout *layout;
gint i, j, imin, imax, jmin, jmax;
layout = GTK_LAYOUT (widget);
imin = (layout->xoffset + event->area.x) / 10;
imax = (layout->xoffset + event->area.x + event->area.width + 9) / 10;
jmin = (layout->yoffset + event->area.y) / 10;
jmax = (layout->yoffset + event->area.y + event->area.height + 9) / 10;
gdk_window_clear_area (widget->window, event->area.x, event->area.y,
event->area.width, event->area.height);
for (i=imin; i<imax; i++)
{
for (j=jmin; j<jmax; j++)
{
if ((i+j) % 2)
gdk_draw_rectangle (layout->bin_window, widget->style->black_gc,
TRUE,
((10*i) - layout->xoffset), ((10*j) - layout->yoffset),
1+i%10, 1+j%10);
}
}
return TRUE;
}
void GtkLayoutDialog ()
{
GtkWidget *layout, *scrolled_window, * label, * dialog_window;
int i,j;
char buf[128];
dialog_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_position (GTK_WINDOW (dialog_window), GTK_WIN_POS_MOUSE);
gtk_widget_set_usize (dialog_window, 200, 200);
gtk_signal_connect (GTK_OBJECT (dialog_window), "destroy",
GTK_SIGNAL_FUNC (gtk_main_quit), &dialog_window);
scrolled_window = gtk_scrolled_window_new (NULL, NULL);
gtk_container_add (GTK_CONTAINER (dialog_window), scrolled_window);
layout = gtk_layout_new (NULL, NULL);
gtk_layout_set_size (GTK_LAYOUT (layout), 1600, 12800);
for (i=0; i<1600; i+=200)
{
for (j=0; j<12800; j+=200)
{
sprintf(buf, "%d %ld", i, j);
label = gtk_button_new_with_label (buf);
gtk_layout_put (GTK_LAYOUT (layout), label, i, j);
}
}
gtk_container_add (GTK_CONTAINER (scrolled_window), layout);
gtk_widget_set_events (layout, GDK_EXPOSURE_MASK );
gtk_signal_connect (GTK_OBJECT (layout), "expose_event",
GTK_SIGNAL_FUNC (HandleExposeEvent), NULL);
gtk_widget_show_all (dialog_window);
}
int __stdcall WinMain ( struct HINSTANCE__ *hInstance,
struct HINSTANCE__ *hPrevInstance,
char *lpszCmdLine,
int nCmdShow)
{
gtk_init (&__argc, &__argv);
GtkLayoutDialog ();
gtk_main ();
}
--
Salutations,
Eric THIERRY
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]