static GdkPixbuf* gwy_layer_basic_paint(GwyPixmapLayer *layer) { GwyLayerBasic *basic_layer; GwyDataField *data_field; GwyLayerBasicRangeType range_type; GwyContainer *data; gdouble min, max; basic_layer = GWY_LAYER_BASIC(layer); data = GWY_DATA_VIEW_LAYER(layer)->data; data_field = GWY_DATA_FIELD(layer->data_field); if (basic_layer->show_field) data_field = GWY_DATA_FIELD(basic_layer->show_field); g_return_val_if_fail(data && data_field, NULL); /* Special-case full range, as gwy_pixbuf_draw_data_field() is simplier, * it doesn't have to deal with outliers */ range_type = gwy_layer_basic_get_range_type(basic_layer); gwy_pixmap_layer_make_pixbuf(layer, FALSE); if (range_type == GWY_LAYER_BASIC_RANGE_FULL) gwy_pixbuf_draw_data_field(layer->pixbuf, data_field, basic_layer->gradient); else if (range_type == GWY_LAYER_BASIC_RANGE_ADAPT) gwy_pixbuf_draw_data_field_adaptive(layer->pixbuf, data_field, basic_layer->gradient); else { if (basic_layer->show_field) { /* Ignore fixed range in for presentations. */ if (range_type == GWY_LAYER_BASIC_RANGE_FIXED) gwy_pixbuf_draw_data_field(layer->pixbuf, data_field, basic_layer->gradient); else { gwy_data_field_get_autorange(data_field, &min, &max); gwy_pixbuf_draw_data_field_with_range(layer->pixbuf, data_field, basic_layer->gradient, min, max); } } else { gwy_layer_basic_get_range(basic_layer, &min, &max); gwy_pixbuf_draw_data_field_with_range(layer->pixbuf, data_field, basic_layer->gradient, min, max); } } return layer->pixbuf; }
static GdkPixbuf* gwy_layer_basic_paint(GwyPixmapLayer *layer) { GwyDataField *data_field; GwyLayerBasic *basic_layer; GwyContainer *data; gdouble min = 0.0, max = 0.0; gboolean fixedmin, fixedmax; gboolean fixedrange = FALSE; gwy_debug(" "); g_return_val_if_fail(GWY_IS_LAYER_BASIC(layer), NULL); basic_layer = GWY_LAYER_BASIC(layer); data = GWY_DATA_VIEW_LAYER(layer)->data; /* TODO Container */ if (!gwy_container_gis_object_by_name(data, "/0/show", (GObject**)&data_field)) { data_field = GWY_DATA_FIELD(gwy_container_get_object_by_name(data, "/0/data")); fixedrange = TRUE; } g_return_val_if_fail(GWY_IS_DATA_FIELD(data_field), layer->pixbuf); if (fixedrange) { fixedmin = gwy_container_gis_double_by_name(data, "/0/base/min", &min); fixedmax = gwy_container_gis_double_by_name(data, "/0/base/max", &max); if (fixedmin || fixedmax) { if (!fixedmin) min = gwy_data_field_get_min(data_field); if (!fixedmax) max = gwy_data_field_get_max(data_field); } else fixedrange = FALSE; } /* XXX */ /*if (GWY_LAYER_BASIC(layer)->changed)*/ { if (fixedrange) gwy_pixbuf_draw_data_field_with_range(layer->pixbuf, data_field, basic_layer->gradient, min, max); else gwy_pixbuf_draw_data_field(layer->pixbuf, data_field, basic_layer->gradient); basic_layer->changed = FALSE; } return layer->pixbuf; }
static void immerse_update_detail_pixbuf(ImmerseControls *controls) { GwyContainer *data; GwyDataField *dfield; GwyGradient *gradient; GdkPixbuf *pixbuf; const guchar *name; gchar *key; GQuark quark; gint w, h, xres, yres; GWY_OBJECT_UNREF(controls->detail); data = gwy_app_data_browser_get(controls->args->detail.datano); if (!data) return; quark = gwy_app_get_data_key_for_id(controls->args->detail.id); dfield = gwy_container_get_object(data, quark); gwy_data_view_coords_real_to_xy(GWY_DATA_VIEW(controls->view), gwy_data_field_get_xreal(dfield), gwy_data_field_get_yreal(dfield), &w, &h); gwy_debug("%dx%d", w, h); w = MAX(w, 2); h = MAX(h, 2); key = g_strdup_printf("/%d/base/palette", controls->args->image.id); name = NULL; data = gwy_app_data_browser_get(controls->args->image.datano); gwy_container_gis_string_by_name(data, key, &name); g_free(key); gradient = gwy_gradients_get_gradient(name); /* Handle real-square properly by using an intermediate * pixel-square pixbuf with sufficient resolution */ xres = gwy_data_field_get_xres(dfield); yres = gwy_data_field_get_yres(dfield); pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, FALSE, 8, xres, yres); gwy_pixbuf_draw_data_field(pixbuf, dfield, gradient); controls->detail = gdk_pixbuf_scale_simple(pixbuf, w, h, GDK_INTERP_TILES); g_object_unref(pixbuf); }