void window_connect_sync(struct view_s* v, struct view_s* v2) { // add to linked list for sync v2->next = v->next; v->next->prev = v2; v2->prev = v; v->next = v2; window_callback(NULL, v); }
extern struct view_s* window_new(const char* name, long* pos, const long dims[DIMS], const complex float* x) { struct view_s* v = create_view(name, pos, dims, x); GtkBuilder* builder = gtk_builder_new(); // gtk_builder_add_from_file(builder, "viewer.ui", NULL); gtk_builder_add_from_string(builder, viewer_gui, -1, NULL); v->gtk_drawingarea = GTK_WIDGET(gtk_builder_get_object(builder, "drawingarea1")); v->gtk_viewport = GTK_WIDGET(gtk_builder_get_object(builder, "scrolledwindow1")); v->gtk_winlow = GTK_ADJUSTMENT(gtk_builder_get_object(builder, "winlow")); v->gtk_winhigh = GTK_ADJUSTMENT(gtk_builder_get_object(builder, "winhigh")); v->gtk_entry = GTK_ENTRY(gtk_builder_get_object(builder, "entry")); PangoFontDescription* desc = pango_font_description_new(); pango_font_description_set_family(desc, "mono"); pango_font_description_set_weight(desc, PANGO_WEIGHT_BOLD); pango_font_description_set_absolute_size(desc, 10 * PANGO_SCALE); gtk_widget_override_font(GTK_WIDGET(v->gtk_entry), desc); pango_font_description_free(desc); v->gtk_zoom = GTK_ADJUSTMENT(gtk_builder_get_object(builder, "zoom")); v->gtk_aniso = GTK_ADJUSTMENT(gtk_builder_get_object(builder, "aniso")); v->gtk_mode = GTK_COMBO_BOX(gtk_builder_get_object(builder, "mode")); gtk_combo_box_set_active(v->gtk_mode, 0); v->gtk_flip = GTK_COMBO_BOX(gtk_builder_get_object(builder, "flip")); gtk_combo_box_set_active(v->gtk_flip, 0); v->gtk_transpose = GTK_TOGGLE_TOOL_BUTTON(gtk_builder_get_object(builder, "transpose")); for (int j = 0; j < DIMS; j++) { char pname[10]; snprintf(pname, 10, "pos%02d", j); v->gtk_posall[j] = GTK_ADJUSTMENT(gtk_builder_get_object(builder, pname)); gtk_adjustment_set_upper(v->gtk_posall[j], v->dims[j] - 1); gtk_adjustment_set_value(v->gtk_posall[j], 0); snprintf(pname, 10, "check%02d", j); v->gtk_checkall[j] = GTK_CHECK_BUTTON(gtk_builder_get_object(builder, pname)); } gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(v->gtk_checkall[v->xdim]), TRUE); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(v->gtk_checkall[v->ydim]), TRUE); gtk_builder_connect_signals(builder, v); GtkWindow* window = GTK_WINDOW(gtk_builder_get_object(builder, "window1")); g_object_unref(G_OBJECT(builder)); gtk_window_set_title(window, name); gtk_widget_show(GTK_WIDGET(window)); nr_windows++; refresh_callback(NULL, v); geom_callback(NULL, v); window_callback(NULL, v); return v; }
static bool context_callback( FusionObjectPool *pool, FusionObject *object, void *ctx ) { int refs; DirectResult ret; UniqueContext *context = (UniqueContext*) object; if (object->state != FOS_ACTIVE) return true; ret = fusion_ref_stat( &object->ref, &refs ); if (ret) { printf( "Fusion error %d!\n", ret ); return false; } printf( "\n" "-------[ Contexts ]-------\n" "Reference . Refs Windows\n" "--------------------------\n" ); #if FUSION_BUILD_MULTI printf( "0x%08x : ", object->ref.multi.id ); #else printf( "N/A : " ); #endif printf( "%3d ", refs ); printf( "%2d ", fusion_vector_size( &context->windows ) ); printf( "\n" ); ret = dfb_windowstack_lock( context->stack ); if (ret) { D_DERROR( ret, "UniQuE/Dump: Could not lock window stack!\n" ); return true; } if (fusion_vector_has_elements( &context->windows )) { int index; UniqueWindow *window; printf( "\n" "-----------------------------------[ Windows ]------------------------------------\n" ); printf( "Reference . Refs X Y Width Height Opacity ID Flags\n" ); printf( "----------------------------------------------------------------------------------\n" ); fusion_vector_foreach_reverse( window, index, context->windows ) window_callback( window ); } dfb_windowstack_unlock( context->stack ); printf( "\n" ); return true; }