static void scope_realize(GtkWidget *widget) { Scope *scope; GdkWindowAttr attributes; gint attributes_mask; GdkGCValues gc_values; GtkAllocation allocation; GdkWindow *window; GtkStyle *style; g_return_if_fail(widget != NULL); g_return_if_fail(IS_SCOPE(widget)); scope = SCOPE(widget); gtk_widget_set_realized(widget, TRUE); gtk_widget_get_allocation(widget, &allocation); attributes.window_type = GDK_WINDOW_CHILD; attributes.x = allocation.x; attributes.y = allocation.y; attributes.width = allocation.width; attributes.height = allocation.height; attributes.wclass = GDK_INPUT_OUTPUT; attributes.visual = gtk_widget_get_visual(widget); attributes.colormap = gtk_widget_get_colormap(widget); attributes.event_mask = gtk_widget_get_events(widget) | GDK_EXPOSURE_MASK; attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP; gtk_widget_set_has_window(widget, TRUE); window = gdk_window_new(gtk_widget_get_parent_window(widget), &attributes, attributes_mask); gtk_widget_set_window(widget, window); gdk_window_set_user_data(window, scope); gtk_widget_style_attach(widget); style = gtk_widget_get_style(widget); gtk_style_set_background(style, window, GTK_STATE_NORMAL); /* gc's if necessary */ if (!gdk_colormap_alloc_color(style->colormap, &scope->tracecol, FALSE, TRUE)) g_warning("unable to allocate color: ( %d %d %d )", scope->tracecol.red, scope->tracecol.green, scope->tracecol.blue); gc_values.foreground = scope->tracecol; scope->trace_gc = gtk_gc_get(style->depth, style->colormap, &gc_values, GDK_GC_FOREGROUND); if (!gdk_colormap_alloc_color(style->colormap, &scope->gridcol, FALSE, TRUE)) g_warning("unable to allocate color: ( %d %d %d )", scope->gridcol.red, scope->gridcol.green, scope->gridcol.blue); gc_values.foreground = scope->gridcol; scope->grid_gc = gtk_gc_get(style->depth, style->colormap, &gc_values, GDK_GC_FOREGROUND); /* create backing store */ scope->pixmap = gdk_pixmap_new(window, SCOPE_WIDTH, SCOPE_HEIGHT, -1); scope_send_configure(SCOPE(widget)); }
GdkGC * new_color_gc (GtkStyle * style, GdkColor * color) { GdkGCValues gc_values; GdkColormap *cmap = style->colormap; gint depth = style->depth; if (!(cmap)) { cmap = gdk_colormap_get_system(); depth = gdk_colormap_get_visual(cmap)->depth; } gdk_colormap_alloc_color (cmap, color, FALSE, TRUE); gc_values.foreground = *color; return gtk_gc_get (depth, cmap, &gc_values, GDK_GC_FOREGROUND); }
static void _mt_gc_set_foreground(MT_GC *gc, MT_COLOR *col) { GdkGCValues gc_values; GdkGCValuesMask gc_values_mask; GdkColor color; GdkGC *gdkgc; MT_GTK_GC *mtgc = (MT_GTK_GC *)gc; color.red = col->r * 256; color.green = col->g * 256; color.blue = col->b * 256; if (!gdk_colormap_alloc_color(GTK_STYLE(mt_style)->colormap, &color, FALSE, TRUE)) return; gc_values_mask = GDK_GC_FOREGROUND; gc_values.foreground = color; gdkgc = gtk_gc_get(GTK_STYLE(mt_style)->depth, GTK_STYLE(mt_style)->colormap, &gc_values, gc_values_mask); gtk_gc_release(mtgc->gc); mtgc->gc = gdkgc; }
static MT_GC *_mt_gc_new_with_foreground(MT_COLOR *col) { GdkGCValues gc_values; GdkGCValuesMask gc_values_mask; GdkColor color; GdkGC *gc; MT_GTK_GC *mtgc; color.red = col->r * 256; color.green = col->g * 256; color.blue = col->b * 256; if (!gdk_colormap_alloc_color(GTK_STYLE(mt_style)->colormap, &color, FALSE, TRUE)) return NULL; gc_values_mask = GDK_GC_FOREGROUND; gc_values.foreground = color; gc = gtk_gc_get(GTK_STYLE(mt_style)->depth, GTK_STYLE(mt_style)->colormap, &gc_values, gc_values_mask); mtgc = (MT_GC *)malloc(sizeof(MT_GTK_GC)); mtgc->gc = gc; mtgc->clip.width = -1; mtgc->clip.height = -1; return mtgc; }