From: <ale...@us...> - 2003-12-09 22:42:17
|
Update of /cvsroot/morphix/mcp2/src In directory sc8-pr-cvs1:/tmp/cvs-serv6663/src Modified Files: Makefile.am callbacks.c data.h main.c Log Message: actually looks pretty now... and even better, it works, sortof :) Index: Makefile.am =================================================================== RCS file: /cvsroot/morphix/mcp2/src/Makefile.am,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** Makefile.am 1 Dec 2003 21:19:44 -0000 1.2 --- Makefile.am 9 Dec 2003 22:42:14 -0000 1.3 *************** *** 6,9 **** --- 6,11 ---- @PACKAGE_CFLAGS@ -I/usr/include/libxml2 + bin_SCRIPTS = morphix-control-panel + bin_PROGRAMS = mcp Index: callbacks.c =================================================================== RCS file: /cvsroot/morphix/mcp2/src/callbacks.c,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** callbacks.c 1 Dec 2003 21:19:44 -0000 1.2 --- callbacks.c 9 Dec 2003 22:42:14 -0000 1.3 *************** *** 13,21 **** #include "data.h" ! #define MINIMUM_WIDTH 400 #define MAX_ICON_WIDTH 48 #define MAX_ICON_HEIGHT 48 extern gchar *config_file; GdkPixbuf *image; --- 13,22 ---- #include "data.h" ! #define MINIMUM_WIDTH 500 #define MAX_ICON_WIDTH 48 #define MAX_ICON_HEIGHT 48 extern gchar *config_file; + extern gint item_count; GdkPixbuf *image; *************** *** 25,29 **** extern GtkWidget *MainWindow; extern gchar *window_name; - GtkWidget *da; /* GDK_WINDOW coord helpers */ --- 26,29 ---- *************** *** 75,79 **** this could use a diagram to clear it up :) */ ! void RedrawIconviewer(GdkPixmap *pixmap, GtkWidget *da) { int nr_x = 0; --- 75,79 ---- this could use a diagram to clear it up :) */ ! void RedrawIconviewer(GtkWidget *da) { int nr_x = 0; *************** *** 87,90 **** --- 87,91 ---- GdkColor colorfg, colorbg; + GdkPixmap *pixmap; colorfg.red = 0; *************** *** 99,103 **** context = gtk_widget_get_pango_context(da); fontd = pango_font_description_from_string("sans 10"); ! gdk_window_get_geometry(da->window,NULL,NULL,&width,&height,NULL); gtk_widget_modify_fg(da,GTK_STATE_NORMAL,&colorfg); --- 100,111 ---- context = gtk_widget_get_pango_context(da); fontd = pango_font_description_from_string("sans 10"); ! if (minimum_width < 0) { ! gdk_window_get_geometry(da->window,NULL,NULL,&width,&height,NULL); ! } ! else { ! width = minimum_width; ! height = minimum_height; ! } ! pixmap = gdk_pixmap_new(da->window,width,height,-1); gtk_widget_modify_fg(da,GTK_STATE_NORMAL,&colorfg); *************** *** 105,109 **** gdk_draw_rectangle(pixmap,da->style->bg_gc[GTK_WIDGET_STATE(da)],TRUE,0,0,width,height); ! for (i = 0; i < item_count; i++) { --- 113,117 ---- gdk_draw_rectangle(pixmap,da->style->bg_gc[GTK_WIDGET_STATE(da)],TRUE,0,0,width,height); ! printf("Redrawing\n"); for (i = 0; i < item_count; i++) { *************** *** 120,142 **** if (items[i]->selected == TRUE) { GdkColor color; ! color.red = 0; ! color.blue = 32768; ! color.green = 0; gtk_widget_modify_fg(da,GTK_STATE_NORMAL,&color); ! items[i]->selected = FALSE; } else { gtk_widget_modify_fg(da,GTK_STATE_NORMAL,&colorfg); } ! ! gdk_draw_rectangle(pixmap,da->style->fg_gc[GTK_WIDGET_STATE (da)],FALSE,x_coord,y_coord,box_width,box_height); ! ! gdk_draw_pixbuf(pixmap,NULL,items[i]->pixbuf,0,0,x_coord + (box_width - icon_width) / 2,y_coord + icon_from_top,-1,-1,GDK_RGB_DITHER_NORMAL,0,0); layout = pango_layout_new(context); - pango_layout_set_text(layout,items[i]->name,-1); pango_layout_set_font_description(layout,fontd); ! pango_layout_set_width(layout,x_coord + box_width - 5); pango_layout_set_alignment(layout,PANGO_ALIGN_CENTER); gdk_draw_layout(pixmap,da->style->fg_gc[GTK_WIDGET_STATE (da)],x_coord+box_width / 2,y_coord+58,layout); --- 128,175 ---- if (items[i]->selected == TRUE) { GdkColor color; ! color.red = 32768; ! color.blue = 65535; ! color.green = 32768; ! int circle_width = 30; gtk_widget_modify_fg(da,GTK_STATE_NORMAL,&color); ! /* top left */ ! gdk_draw_arc(pixmap,da->style->fg_gc[GTK_WIDGET_STATE (da)],TRUE,x_coord + box_width - circle_width,y_coord,circle_width,circle_width,64 * 0,64 * 90); ! /* bottom left */ ! gdk_draw_arc(pixmap,da->style->fg_gc[GTK_WIDGET_STATE (da)],TRUE,x_coord,y_coord + box_height - circle_width,circle_width,circle_width,64 * 180,64 * 90); ! /* bottom right */ ! gdk_draw_arc(pixmap,da->style->fg_gc[GTK_WIDGET_STATE (da)],TRUE,x_coord + box_width - circle_width,y_coord + box_height - circle_width,circle_width,circle_width,64 * 270,64 * 90); ! /* top right */ ! gdk_draw_arc(pixmap,da->style->fg_gc[GTK_WIDGET_STATE (da)],TRUE,x_coord,y_coord,circle_width,circle_width,64 * 90,64 * 90); ! /* center */ ! gdk_draw_rectangle(pixmap,da->style->fg_gc[GTK_WIDGET_STATE (da)],TRUE,x_coord + circle_width / 2,y_coord + circle_width / 2,box_width - circle_width,box_height - circle_width); ! /* top */ ! gdk_draw_rectangle(pixmap,da->style->fg_gc[GTK_WIDGET_STATE (da)],TRUE,x_coord + circle_width / 2,y_coord,box_width - circle_width,circle_width / 2); ! /* left */ ! gdk_draw_rectangle(pixmap,da->style->fg_gc[GTK_WIDGET_STATE (da)],TRUE,x_coord,y_coord + circle_width / 2,circle_width / 2,box_height - circle_width); ! /* right */ ! gdk_draw_rectangle(pixmap,da->style->fg_gc[GTK_WIDGET_STATE (da)],TRUE,x_coord + box_width - circle_width / 2,y_coord + circle_width / 2,circle_width / 2,box_height - circle_width); ! /* bottom */ ! gdk_draw_rectangle(pixmap,da->style->fg_gc[GTK_WIDGET_STATE (da)],TRUE,x_coord + circle_width / 2,y_coord + box_height - circle_width / 2,box_width - circle_width, circle_width / 2); } else { gtk_widget_modify_fg(da,GTK_STATE_NORMAL,&colorfg); } ! gdk_draw_pixbuf(pixmap,NULL,items[i]->pixbuf,0,0,x_coord + (box_width - icon_width) / 2,y_coord + icon_from_top,-1,-1,GDK_RGB_DITHER_NORMAL,0,0); + + if (items[i]->selected == TRUE) { + GdkColor color; + color.red = 65535; + color.blue = 65535; + color.green = 65535; + gtk_widget_modify_fg(da,GTK_STATE_NORMAL,&color); + items[i]->selected = FALSE; + } + layout = pango_layout_new(context); pango_layout_set_font_description(layout,fontd); ! pango_layout_set_width(layout,box_width); pango_layout_set_alignment(layout,PANGO_ALIGN_CENTER); + pango_layout_set_text(layout,items[i]->name,-1); gdk_draw_layout(pixmap,da->style->fg_gc[GTK_WIDGET_STATE (da)],x_coord+box_width / 2,y_coord+58,layout); *************** *** 145,149 **** /* Looks scary, but it seems to work... */ } ! image = gdk_pixbuf_get_from_drawable(NULL,pixmap,NULL,0,0,0,0,width,height); } --- 178,184 ---- /* Looks scary, but it seems to work... */ } ! printf("width: %d height: %d\n",width,height); ! image = gdk_pixbuf_get_from_drawable(NULL, pixmap, NULL, 0,0,0,0,width,height); ! gdk_draw_drawable(da->window,gdk_gc_new(pixmap),pixmap,0,0,0,0,width,height); } *************** *** 180,184 **** } minimum_width = MINIMUM_WIDTH; ! minimum_height = y_coord + box_height; } --- 215,219 ---- } minimum_width = MINIMUM_WIDTH; ! minimum_height = y_coord + box_height + top_border * 3; } *************** *** 189,196 **** GtkWidget *drawingarea = lookup_widget(MainWindow,"MainDrawingArea"); gint i; ! gtk_window_set_resizable(GTK_WINDOW(MainWindow),FALSE); - - item_count = 0; gtk_window_set_title(GTK_WINDOW(MainWindow),window_name); set_minimum_size(); --- 224,229 ---- GtkWidget *drawingarea = lookup_widget(MainWindow,"MainDrawingArea"); gint i; ! image = NULL; gtk_window_set_resizable(GTK_WINDOW(MainWindow),FALSE); gtk_window_set_title(GTK_WINDOW(MainWindow),window_name); set_minimum_size(); *************** *** 198,202 **** printf("Size request: %d %d\n",minimum_width, minimum_height); gtk_widget_set_size_request (drawingarea,minimum_width, minimum_height); ! gtk_widget_set_size_request (MainWindow,minimum_width, minimum_height+20); gtk_window_set_default_size (GTK_WINDOW(MainWindow), minimum_width, minimum_height); } --- 231,235 ---- printf("Size request: %d %d\n",minimum_width, minimum_height); gtk_widget_set_size_request (drawingarea,minimum_width, minimum_height); ! gtk_widget_set_size_request (MainWindow,minimum_width, minimum_height); gtk_window_set_default_size (GTK_WINDOW(MainWindow), minimum_width, minimum_height); } *************** *** 218,240 **** else { if (gdk_pixbuf_get_width(pix) > MAX_ICON_WIDTH || gdk_pixbuf_get_height(pix) > MAX_ICON_HEIGHT) { ! fprintf(stderr,"Icon too large: %s\n",items[i]->iconpath); ! free(items[i]->iconpath); ! pix = assign_fallback(items[i]->iconpath); } } items[i]->pixbuf = pix; } ! da = drawingarea; ! gtk_widget_realize(da); gint width, height; ! gtk_widget_add_events(da,GDK_BUTTON_PRESS_MASK); ! gdk_window_get_geometry(da->window,NULL,NULL,&width,&height,NULL); ! GdkPixmap *pixmap = gdk_pixmap_new(da->window,width,height,-1); ! RedrawIconviewer(pixmap,da); ! g_object_unref(pixmap); } --- 251,271 ---- else { if (gdk_pixbuf_get_width(pix) > MAX_ICON_WIDTH || gdk_pixbuf_get_height(pix) > MAX_ICON_HEIGHT) { ! pix = gdk_pixbuf_scale_simple(pix,MAX_ICON_WIDTH,MAX_ICON_HEIGHT,GDK_INTERP_BILINEAR); ! //fprintf(stderr,"Icon too large: %s\n",items[i]->iconpath); ! //free(items[i]->iconpath); ! //pix = assign_fallback(items[i]->iconpath); } } items[i]->pixbuf = pix; } ! gtk_widget_realize(drawingarea); gint width, height; ! gtk_widget_add_events(drawingarea,GDK_BUTTON_PRESS_MASK); ! gdk_window_get_geometry(drawingarea->window,NULL,NULL,&width,&height,NULL); ! RedrawIconviewer(drawingarea); } *************** *** 248,253 **** gint width, height; gdk_window_get_geometry(drawingarea->window,NULL,NULL,&width,&height,NULL); - GdkPixmap *pixmap = gdk_pixmap_new(drawingarea->window,width,height,-1); - gint i; --- 279,282 ---- *************** *** 284,287 **** --- 313,317 ---- } else { + change_current_statusbar(""); items[i]->selected = TRUE; } *************** *** 290,296 **** nr_x++; } ! pixmap = gdk_pixmap_new(da->window,width,height,-1); ! RedrawIconviewer(pixmap,da); ! g_object_unref(pixmap); } --- 320,324 ---- nr_x++; } ! RedrawIconviewer(drawingarea); } *************** *** 387,390 **** --- 415,430 ---- guchar *pixels; int rowstride; + int width = 0, height = 0; + if (image == NULL) + return FALSE; + + if (minimum_width < 0) { + gdk_window_get_geometry(widget->window,NULL,NULL,&width,&height,NULL); + } + else { + width = minimum_width; + height = minimum_height; + } + rowstride = gdk_pixbuf_get_rowstride(image); pixels = gdk_pixbuf_get_pixels (image) + rowstride * event->area.y + *************** *** 394,402 **** event->area.x, event->area.y, event->area.width, event->area.height, ! GDK_RGB_DITHER_NORMAL, ! pixels, rowstride, ! event->area.x, event->area.y); ! ! return TRUE; } ! --- 434,439 ---- event->area.x, event->area.y, event->area.width, event->area.height, ! GDK_RGB_DITHER_NORMAL,pixels,rowstride,0,0); ! return TRUE; } ! Index: data.h =================================================================== RCS file: /cvsroot/morphix/mcp2/src/data.h,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** data.h 1 Dec 2003 21:19:44 -0000 1.1 --- data.h 9 Dec 2003 22:42:14 -0000 1.2 *************** *** 15,19 **** item_struct *items[MAX_ITEMS]; gint item_count; - void parseDoc(char *docname); --- 15,18 ---- Index: main.c =================================================================== RCS file: /cvsroot/morphix/mcp2/src/main.c,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** main.c 1 Dec 2003 21:19:44 -0000 1.2 --- main.c 9 Dec 2003 22:42:14 -0000 1.3 *************** *** 8,16 **** #include "interface.h" #include "support.h" - #include "data.h" GtkWidget *MainWindow; gchar *window_name = NULL; gchar *config_file; int --- 8,16 ---- #include "interface.h" #include "support.h" GtkWidget *MainWindow; gchar *window_name = NULL; gchar *config_file; + extern gint item_count; int *************** *** 30,33 **** --- 30,38 ---- config_file = g_strdup(argv[1]); parseDoc(config_file); + printf("Item count: %d\n",item_count); + if (item_count <= 0) { + fprintf(stderr,"Config file doesn't have any valid items\n"); + exit(1); + } gtk_init (&argc, &argv); *************** *** 35,43 **** ! MainWindow = create_MainWindow (); ! gtk_widget_show (MainWindow); ! gtk_main (); ! return 0; } --- 40,48 ---- ! MainWindow = create_MainWindow (); ! gtk_widget_show (MainWindow); ! gtk_main (); ! return 0; } |