这篇教程C++ DT_CTL_GET_GLOBAL函数代码示例写得很实用,希望能帮到您。
本文整理汇总了C++中DT_CTL_GET_GLOBAL函数的典型用法代码示例。如果您正苦于以下问题:C++ DT_CTL_GET_GLOBAL函数的具体用法?C++ DT_CTL_GET_GLOBAL怎么用?C++ DT_CTL_GET_GLOBAL使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。 在下文中一共展示了DT_CTL_GET_GLOBAL函数的23个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。 示例1: _lib_navigation_set_positionvoid _lib_navigation_set_position(dt_lib_module_t *self, double x, double y, int wd, int ht){ dt_lib_navigation_t *d = ( dt_lib_navigation_t *)self->data; dt_dev_zoom_t zoom; int closeup; float zoom_x, zoom_y; DT_CTL_GET_GLOBAL(zoom, dev_zoom); DT_CTL_GET_GLOBAL(closeup, dev_closeup); DT_CTL_GET_GLOBAL(zoom_x, dev_zoom_x); DT_CTL_GET_GLOBAL(zoom_y, dev_zoom_y); if(d->dragging && zoom != DT_ZOOM_FIT) { const int inset = DT_NAVIGATION_INSET; const float width = wd - 2*inset, height = ht - 2*inset; const dt_develop_t *dev = darktable.develop; int iwd, iht; dt_dev_get_processed_size(dev, &iwd, &iht); zoom_x = fmaxf(-.5, fminf(((x-inset)/width - .5f)/(iwd*fminf(wd/(float)iwd, ht/(float)iht)/(float)wd), .5)); zoom_y = fmaxf(-.5, fminf(((y-inset)/height - .5f)/(iht*fminf(wd/(float)iwd, ht/(float)iht)/(float)ht), .5)); dt_dev_check_zoom_bounds(darktable.develop, &zoom_x, &zoom_y, zoom, closeup, NULL, NULL); DT_CTL_SET_GLOBAL(dev_zoom_x, zoom_x); DT_CTL_SET_GLOBAL(dev_zoom_y, zoom_y); /* redraw myself */ gtk_widget_queue_draw(self->widget); /* redraw pipe */ dt_dev_invalidate(darktable.develop); dt_control_queue_redraw_center(); }}
开发者ID:sk1p,项目名称:darktable,代码行数:33,
示例2: mouse_movedintmouse_moved(struct dt_iop_module_t *self, double x, double y, double pressure, int which){ dt_iop_graduatednd_gui_data_t *g = (dt_iop_graduatednd_gui_data_t *)self->gui_data; int32_t zoom, closeup; DT_CTL_GET_GLOBAL(zoom, dev_zoom); DT_CTL_GET_GLOBAL(closeup, dev_closeup); float zoom_scale = dt_dev_get_zoom_scale(self->dev, zoom, closeup ? 2 : 1, 1); float pzx, pzy; dt_dev_get_pointer_zoom_pos(self->dev, x, y, &pzx, &pzy); pzx += 0.5f; pzy += 0.5f; //are we dragging something ? if (g->dragging > 0) { if (g->dragging == 1) { //we are dragging xa,ya g->xa = pzx; g->ya = pzy; } else if (g->dragging == 2) { //we are dragging xb,yb g->xb = pzx; g->yb = pzy; } else if (g->dragging == 3) { //we are dragging the entire line g->xa += pzx-g->oldx; g->xb += pzx-g->oldx; g->ya += pzy-g->oldy; g->yb += pzy-g->oldy; g->oldx = pzx; g->oldy = pzy; } } else { g->selected = 0; const float ext = 0.02f / zoom_scale; //are we near extermity ? if (pzy>g->ya-ext && pzy<g->ya+ext && pzx>g->xa-ext && pzx<g->xa+ext) { g->selected = 1; } else if (pzy>g->yb-ext && pzy<g->yb+ext && pzx>g->xb-ext && pzx<g->xb+ext) { g->selected = 2; } else if (dist_seg(g->xa,g->ya,g->xb,g->yb,pzx,pzy) < ext*ext*0.5) g->selected = 3; } dt_control_queue_redraw_center(); return 0;}
开发者ID:EvilBit,项目名称:darktable,代码行数:58,
示例3: _lib_snapshots_add_button_clicked_callbackstatic void _lib_snapshots_add_button_clicked_callback(GtkWidget *widget, gpointer user_data){ dt_lib_module_t *self = (dt_lib_module_t*)user_data; dt_lib_snapshots_t *d = (dt_lib_snapshots_t *)self->data; /* backup last snapshot slot */ dt_lib_snapshot_t last = d->snapshot[d->size-1]; /* rotate slots down to make room for new one on top */ for (int k = d->size-1; k > 0; k--) { GtkWidget *b = d->snapshot[k].button; d->snapshot[k] = d->snapshot[k-1]; d->snapshot[k].button = b; gtk_button_set_label(GTK_BUTTON(d->snapshot[k].button), gtk_button_get_label(GTK_BUTTON(d->snapshot[k-1].button))); } /* update top slot with new snapshot */ char label[64]; GtkWidget *b = d->snapshot[0].button; d->snapshot[0] = last; d->snapshot[0].button = b; const gchar *name = _("original"); if (darktable.develop->history_end > 0) { dt_iop_module_t *module = ((dt_dev_history_item_t *)g_list_nth_data(darktable.develop->history, darktable.develop->history_end-1))->module; if (module) name = module->name(); else name = _("unknown"); } g_snprintf(label,64,"%s (%d)", name, darktable.develop->history_end); gtk_button_set_label(GTK_BUTTON(d->snapshot[0].button), label); dt_lib_snapshot_t *s = d->snapshot + 0; DT_CTL_GET_GLOBAL (s->zoom_y, dev_zoom_y); DT_CTL_GET_GLOBAL (s->zoom_x, dev_zoom_x); DT_CTL_GET_GLOBAL (s->zoom, dev_zoom); DT_CTL_GET_GLOBAL (s->closeup, dev_closeup); DT_CTL_GET_GLOBAL (s->zoom_scale, dev_zoom_scale); /* update slots used */ if (d->num_snapshots != d->size) d->num_snapshots++; /* show active snapshot slots */ for (uint32_t k=0; k < d->num_snapshots; k++) gtk_widget_show(d->snapshot[k].button); /* request a new snapshot for top slot */ dt_dev_snapshot_request(darktable.develop, (const char *)&d->snapshot[0].filename);}
开发者ID:MarcAntoine-Arnaud,项目名称:darktable,代码行数:55,
示例4: gui_post_exposevoid gui_post_expose(dt_iop_module_t *self, cairo_t *cr, int32_t width, int32_t height, int32_t pointerx, int32_t pointery){ dt_develop_t *dev = self->dev; dt_iop_spots_params_t *p = (dt_iop_spots_params_t *)self->params; dt_iop_spots_gui_data_t *g = (dt_iop_spots_gui_data_t *)self->gui_data; float wd = dev->preview_pipe->backbuf_width; float ht = dev->preview_pipe->backbuf_height; float pzx, pzy; dt_dev_get_pointer_zoom_pos(dev, pointerx, pointery, &pzx, &pzy); pzx += 0.5f; pzy += 0.5f; float zoom_x, zoom_y; int32_t zoom, closeup; DT_CTL_GET_GLOBAL(zoom_y, dev_zoom_y); DT_CTL_GET_GLOBAL(zoom_x, dev_zoom_x); DT_CTL_GET_GLOBAL(zoom, dev_zoom); DT_CTL_GET_GLOBAL(closeup, dev_closeup); float zoom_scale = dt_dev_get_zoom_scale(dev, zoom, closeup ? 2 : 1, 1); cairo_set_source_rgb(cr, .3, .3, .3); cairo_translate(cr, width/2.0, height/2.0f); cairo_scale(cr, zoom_scale, zoom_scale); cairo_translate(cr, -.5f*wd-zoom_x*wd, -.5f*ht-zoom_y*ht); for(int i=0; i<p->num_spots; i++) { const float rad = MIN(wd, ht)*p->spot[i].radius; const float dx = p->spot[i].xc - p->spot[i].x; float dy = p->spot[i].yc - p->spot[i].y; if(dx == 0.0 && dy == 0.0) dy = EPSILON; // otherwise we'll have ol = 1.0/0.0 ==> xr = yr = -nan const float ol = 1.0f/sqrtf(dx*dx*wd*wd + dy*dy*ht*ht); const float d = rad * ol; const float x = p->spot[i].x*wd, y = p->spot[i].y*ht; const float xc = p->spot[i].xc*wd, yc = p->spot[i].yc*ht; const float xr = (p->spot[i].x + d*dx)*wd, yr = (p->spot[i].y + d*dy)*ht; cairo_set_line_cap(cr,CAIRO_LINE_CAP_ROUND); if(i == g->selected || i == g->dragging) cairo_set_line_width(cr, 5.0/zoom_scale); else cairo_set_line_width(cr, 3.0/zoom_scale); cairo_set_source_rgba(cr, .3, .3, .3, .8); draw_overlay(cr, rad, x, y, xc, yc, xr, yr); if(i == g->selected || i == g->dragging) cairo_set_line_width(cr, 2.0/zoom_scale); else cairo_set_line_width(cr, 1.0/zoom_scale); cairo_set_source_rgba(cr, .8, .8, .8, .8); draw_overlay(cr, rad, x, y, xc, yc, xr, yr); }}
开发者ID:itarozzi,项目名称:darktable,代码行数:51,
示例5: dt_circle_events_mouse_movedstatic int dt_circle_events_mouse_moved(struct dt_iop_module_t *module,float pzx, float pzy, int which, dt_masks_form_t *form, int parentid, dt_masks_form_gui_t *gui, int index){ if (gui->form_dragging || gui->source_dragging) { gui->posx = pzx*darktable.develop->preview_pipe->backbuf_width; gui->posy = pzy*darktable.develop->preview_pipe->backbuf_height; dt_control_queue_redraw_center(); return 1; } else if (!gui->creation) { int32_t zoom, closeup; DT_CTL_GET_GLOBAL(zoom, dev_zoom); DT_CTL_GET_GLOBAL(closeup, dev_closeup); float zoom_scale = dt_dev_get_zoom_scale(darktable.develop, zoom, closeup ? 2 : 1, 1); float as = 0.005f/zoom_scale*darktable.develop->preview_pipe->backbuf_width; int in,inb,near,ins; dt_circle_get_distance(pzx*darktable.develop->preview_pipe->backbuf_width,pzy*darktable.develop->preview_pipe->backbuf_height,as,gui,index,&in,&inb,&near,&ins); if (ins) { gui->form_selected = TRUE; gui->source_selected = TRUE; gui->border_selected = FALSE; } else if (inb) { gui->form_selected = TRUE; gui->border_selected = TRUE; gui->source_selected = FALSE; } else if (in) { gui->form_selected = TRUE; gui->border_selected = FALSE; gui->source_selected = FALSE; } else { gui->form_selected = FALSE; gui->border_selected = FALSE; gui->source_selected = FALSE; } dt_control_queue_redraw_center(); if (!gui->form_selected && !gui->border_selected) return 0; if (gui->edit_mode != DT_MASKS_EDIT_FULL) return 0; return 1; } return 0;}
开发者ID:MarcAntoine-Arnaud,项目名称:darktable,代码行数:50,
示例6: star_key_accel_callbackstatic gbooleanstar_key_accel_callback(GtkAccelGroup *accel_group, GObject *acceleratable, guint keyval, GdkModifierType modifier, gpointer data){ long int num = (long int)data; switch (num) { case DT_VIEW_REJECT: case DT_VIEW_DESERT: case DT_VIEW_STAR_1: case DT_VIEW_STAR_2: case DT_VIEW_STAR_3: case DT_VIEW_STAR_4: case DT_VIEW_STAR_5: case 666: { int32_t mouse_over_id; DT_CTL_GET_GLOBAL(mouse_over_id, lib_image_mouse_over_id); if(mouse_over_id <= 0) { sqlite3_stmt *stmt; DT_DEBUG_SQLITE3_PREPARE_V2(dt_database_get(darktable.db), "select imgid from selected_images", -1, &stmt, NULL); while(sqlite3_step(stmt) == SQLITE_ROW) { const dt_image_t *cimg = dt_image_cache_read_get(darktable.image_cache, sqlite3_column_int(stmt, 0)); dt_image_t *image = dt_image_cache_write_get(darktable.image_cache, cimg); if(num == 666 || num == DT_VIEW_DESERT) image->flags &= ~0xf; else if(num == DT_VIEW_STAR_1 && ((image->flags & 0x7) == 1)) image->flags &= ~0x7; else { image->flags &= ~0x7; image->flags |= num; } dt_image_cache_write_release(darktable.image_cache, image, DT_IMAGE_CACHE_SAFE); dt_image_cache_read_release(darktable.image_cache, cimg); } sqlite3_finalize(stmt); } else { const dt_image_t *cimg = dt_image_cache_read_get(darktable.image_cache, mouse_over_id); dt_image_t *image = dt_image_cache_write_get(darktable.image_cache, cimg); if(num == 666 || num == DT_VIEW_DESERT) image->flags &= ~0xf; else if(num == DT_VIEW_STAR_1 && ((image->flags & 0x7) == 1)) image->flags &= ~0x7; else { image->flags &= ~0x7; image->flags |= num; } dt_image_cache_write_release(darktable.image_cache, image, DT_IMAGE_CACHE_SAFE); dt_image_cache_read_release(darktable.image_cache, cimg); } dt_control_queue_redraw_center(); break; } default: break; } return TRUE;}
开发者ID:amitkr,项目名称:darktable,代码行数:60,
示例7: _jump_tostatic void_jump_to(){ int32_t imgid = -1; DT_CTL_GET_GLOBAL(imgid, lib_image_mouse_over_id); if(imgid == -1) { sqlite3_stmt *stmt; DT_DEBUG_SQLITE3_PREPARE_V2(dt_database_get(darktable.db), "select imgid from selected_images", -1, &stmt, NULL); if(sqlite3_step(stmt) == SQLITE_ROW) imgid = sqlite3_column_int(stmt, 0); sqlite3_finalize(stmt); } if(imgid != -1) { const int len = 512; char path[len]; const dt_image_t *img = dt_image_cache_read_get(darktable.image_cache, imgid); dt_image_film_roll_directory(img, path, len); dt_image_cache_read_release(darktable.image_cache, img); char collect[1024]; snprintf(collect, 1024, "1:0:0:%s$", path); dt_collection_deserialize(collect); }}
开发者ID:rikles,项目名称:darktable,代码行数:28,
示例8: dt_dev_get_zoom_scalefloat dt_dev_get_zoom_scale(dt_develop_t *dev, dt_dev_zoom_t zoom, int closeup_factor, int preview){ float zoom_scale; const float w = preview ? dev->preview_pipe->processed_width : dev->pipe->processed_width; const float h = preview ? dev->preview_pipe->processed_height : dev->pipe->processed_height; const float ps = dev->pipe->backbuf_width ? dev->pipe->processed_width/(float)dev->preview_pipe->processed_width : dev->preview_pipe->iscale / dev->preview_downsampling; switch(zoom) { case DT_ZOOM_FIT: zoom_scale = fminf(dev->width/w, dev->height/h); break; case DT_ZOOM_FILL: zoom_scale = fmaxf(dev->width/w, dev->height/h); break; case DT_ZOOM_1: zoom_scale = closeup_factor; if(preview) zoom_scale *= ps; break; default: // DT_ZOOM_FREE DT_CTL_GET_GLOBAL(zoom_scale, dev_zoom_scale); if(preview) zoom_scale *= ps; break; } return zoom_scale;}
开发者ID:ealasu,项目名称:darktable,代码行数:29,
示例9: exposevoid expose(dt_view_t *self, cairo_t *cr, int32_t width, int32_t height, int32_t pointerx, int32_t pointery){ const int i = dt_conf_get_int("plugins/lighttable/layout"); const double start = dt_get_wtime(); // Let's show full preview if in that state... dt_library_t *lib = (dt_library_t *)self->data; int32_t mouse_over_id; DT_CTL_GET_GLOBAL(mouse_over_id, lib_image_mouse_over_id); if( lib->full_preview_id!=-1 ) { lib->image_over = DT_VIEW_DESERT; cairo_set_source_rgb (cr, .1, .1, .1); cairo_paint(cr); dt_view_image_expose(&(lib->image_over),mouse_over_id, cr, width, height, 1, pointerx, pointery); } else // we do pass on expose to manager or zoomable { switch(i) { case 1: // file manager expose_filemanager(self, cr, width, height, pointerx, pointery); break; default: // zoomable expose_zoomable(self, cr, width, height, pointerx, pointery); break; } } const double end = dt_get_wtime(); dt_print(DT_DEBUG_PERF, "[lighttable] expose took %0.04f sec/n", end-start);}
开发者ID:amitkr,项目名称:darktable,代码行数:32,
示例10: _lib_filmstrip_ratings_key_accel_callbackstatic gboolean _lib_filmstrip_ratings_key_accel_callback(GtkAccelGroup *accel_group, GObject *aceeleratable, guint keyval, GdkModifierType modifier, gpointer data){ int num = GPOINTER_TO_INT(data); switch (num) { case DT_VIEW_DESERT: case DT_VIEW_REJECT: case DT_VIEW_STAR_1: case DT_VIEW_STAR_2: case DT_VIEW_STAR_3: case DT_VIEW_STAR_4: case DT_VIEW_STAR_5: case 666: { int32_t mouse_over_id; DT_CTL_GET_GLOBAL(mouse_over_id, lib_image_mouse_over_id); if (mouse_over_id <= 0) return FALSE; /* get image from cache */ int32_t activated_image = -1; activated_image = darktable.view_manager->proxy.filmstrip.activated_image(darktable.view_manager->proxy.filmstrip.module); int offset = 0; if(mouse_over_id == activated_image) offset = dt_collection_image_offset(mouse_over_id); const dt_image_t *cimg = dt_image_cache_read_get(darktable.image_cache, mouse_over_id); dt_image_t *image = dt_image_cache_write_get(darktable.image_cache, cimg); if (num == 666) image->flags &= ~0xf; else if (num == DT_VIEW_STAR_1 && ((image->flags & 0x7) == 1)) image->flags &= ~0x7; else if(num == DT_VIEW_REJECT && ((image->flags & 0x7) == 6)) image->flags &= ~0x7; else { image->flags &= ~0x7; image->flags |= num; } dt_image_cache_write_release(darktable.image_cache, image, DT_IMAGE_CACHE_SAFE); dt_image_cache_read_release(darktable.image_cache, image); dt_collection_hint_message(darktable.collection); // More than this, we need to redraw all if(mouse_over_id == activated_image) if(_lib_filmstrip_imgid_in_collection(darktable.collection, mouse_over_id) == 0) dt_view_filmstrip_scroll_relative(0, offset); /* redraw all */ dt_control_queue_redraw(); break; } default: break; } return TRUE;}
开发者ID:danielbaak,项目名称:darktable,代码行数:59,
示例11: _lib_tagging_redraw_callbackstatic void _lib_tagging_redraw_callback(gpointer instance, gpointer user_data){ dt_lib_module_t *self = (dt_lib_module_t *)user_data; dt_lib_tagging_t *d = (dt_lib_tagging_t *)self->data; int imgsel = -1; DT_CTL_GET_GLOBAL(imgsel, lib_image_mouse_over_id); if(imgsel != d->imgsel) update (self, 0);}
开发者ID:drinkcat,项目名称:darktable,代码行数:8,
示例12: _zoom_preset_changestatic void _zoom_preset_change(int val){ //dt_lib_module_t *self = (dt_lib_module_t *)user_data; dt_develop_t *dev = darktable.develop; if (!dev) return; dt_dev_zoom_t zoom; int closeup, procw, proch; float zoom_x, zoom_y; DT_CTL_GET_GLOBAL(zoom, dev_zoom); DT_CTL_GET_GLOBAL(closeup, dev_closeup); DT_CTL_GET_GLOBAL(zoom_x, dev_zoom_x); DT_CTL_GET_GLOBAL(zoom_y, dev_zoom_y); dt_dev_get_processed_size(dev, &procw, &proch); float scale = 0; zoom_x = 0.0f; //+= (1.0/scale)*(x - .5f*dev->width )/procw; zoom_y = 0.0f; //+= (1.0/scale)*(y - .5f*dev->height)/proch; if (val == 0) { scale = 0.5*dt_dev_get_zoom_scale(dev, DT_ZOOM_FIT, 1.0, 0); zoom = DT_ZOOM_FREE; } else if (val ==1) { zoom = DT_ZOOM_FIT; scale = dt_dev_get_zoom_scale(dev, DT_ZOOM_FIT, 1.0, 0); } else if (val == 2) { scale = dt_dev_get_zoom_scale(dev, DT_ZOOM_1, 1.0, 0); zoom = DT_ZOOM_1; } else if (val == 3) { scale = 2.0f; zoom = DT_ZOOM_FREE; } dt_dev_check_zoom_bounds(dev, &zoom_x, &zoom_y, zoom, closeup, NULL, NULL); DT_CTL_SET_GLOBAL(dev_zoom_scale, scale); DT_CTL_SET_GLOBAL(dev_zoom, zoom); DT_CTL_SET_GLOBAL(dev_closeup, closeup); DT_CTL_SET_GLOBAL(dev_zoom_x, zoom_x); DT_CTL_SET_GLOBAL(dev_zoom_y, zoom_y); dt_dev_invalidate(dev);}
开发者ID:EvilBit,项目名称:darktable,代码行数:45,
示例13: _lib_filmstrip_discard_history_key_accel_callbackstatic gboolean _lib_filmstrip_discard_history_key_accel_callback(GtkAccelGroup *accel_group, GObject *aceeleratable, guint keyval, GdkModifierType modifier, gpointer data){ int32_t mouse_over_id; DT_CTL_GET_GLOBAL(mouse_over_id, lib_image_mouse_over_id); if(mouse_over_id <= 0) return FALSE; dt_history_delete_on_image(mouse_over_id); dt_control_queue_redraw_center(); return TRUE;}
开发者ID:danielbaak,项目名称:darktable,代码行数:12,
示例14: _lib_filmstrip_copy_history_key_accel_callbackstatic gboolean _lib_filmstrip_copy_history_key_accel_callback(GtkAccelGroup *accel_group, GObject *aceeleratable, guint keyval, GdkModifierType modifier, gpointer data){ dt_lib_filmstrip_t *strip = (dt_lib_filmstrip_t *)data; int32_t mouse_over_id; DT_CTL_GET_GLOBAL(mouse_over_id, lib_image_mouse_over_id); if(mouse_over_id <= 0) return FALSE; strip->history_copy_imgid = mouse_over_id; /* check if images is currently loaded in darkroom */ if (dt_dev_is_current_image(darktable.develop, mouse_over_id)) dt_dev_write_history(darktable.develop); return TRUE;}
开发者ID:danielbaak,项目名称:darktable,代码行数:15,
示例15: updatestatic voidupdate (dt_lib_module_t *self, int which){ dt_lib_tagging_t *d = (dt_lib_tagging_t *)self->data; GList *tags=NULL; uint32_t count; if(which == 0) // tags of selected images { int imgsel = -1; DT_CTL_GET_GLOBAL(imgsel, lib_image_mouse_over_id); d->imgsel = imgsel; count = dt_tag_get_attached(imgsel,&tags); } else // related tags of typed text count = dt_tag_get_suggestions(d->keyword,&tags); GtkTreeIter iter; GtkTreeView *view; if(which == 0) view = d->current; else view = d->related; GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(view)); g_object_ref(model); gtk_tree_view_set_model(GTK_TREE_VIEW(view), NULL); gtk_list_store_clear(GTK_LIST_STORE(model)); if( count >0 && tags ) { do { gtk_list_store_append(GTK_LIST_STORE(model), &iter); gtk_list_store_set (GTK_LIST_STORE(model), &iter, DT_LIB_TAGGING_COL_TAG, ((dt_tag_t*)tags->data)->tag, DT_LIB_TAGGING_COL_ID, ((dt_tag_t*)tags->data)->id, -1); } while( (tags=g_list_next(tags)) !=NULL ); // Free result... dt_tag_free_result(&tags); } gtk_tree_view_set_model(GTK_TREE_VIEW(view), model); g_object_unref(model);}
开发者ID:drinkcat,项目名称:darktable,代码行数:47,
示例16: dt_colorlabels_key_accel_callbackvoid dt_colorlabels_key_accel_callback(GtkAccelGroup *accel_group, GObject *acceleratable, guint keyval, GdkModifierType modifier, gpointer data){ const long int mode = (long int)data; int selected; DT_CTL_GET_GLOBAL(selected, lib_image_mouse_over_id); if(selected <= 0) { switch(mode) { case 0: case 1: case 2: case 3: case 4: // colors red, yellow, green, blue, purple dt_colorlabels_toggle_label_selection(mode); break; case 5: default: // remove all selected dt_colorlabels_remove_labels_selection(); break; } } else { switch(mode) { case 0: case 1: case 2: case 3: case 4: // colors red, yellow, green, blue, purple dt_colorlabels_toggle_label(selected, mode); break; case 5: default: // remove all selected dt_colorlabels_remove_labels(selected); break; } } // synch to file: // TODO: move color labels to image_t cache and sync via write_get! dt_image_synch_xmp(selected); dt_control_queue_redraw_center();}
开发者ID:joninvski,项目名称:darktable-old,代码行数:46,
示例17: _lib_filmstrip_paste_history_key_accel_callbackstatic gboolean _lib_filmstrip_paste_history_key_accel_callback(GtkAccelGroup *accel_group, GObject *aceeleratable, guint keyval, GdkModifierType modifier, gpointer data){ dt_lib_filmstrip_t *strip = (dt_lib_filmstrip_t *)data; if (strip->history_copy_imgid==-1) return FALSE; int32_t mouse_over_id; DT_CTL_GET_GLOBAL(mouse_over_id, lib_image_mouse_over_id); if(mouse_over_id <= 0) return FALSE; int mode = dt_conf_get_int("plugins/lighttable/copy_history/pastemode"); dt_history_copy_and_paste_on_image(strip->history_copy_imgid, mouse_over_id, (mode == 0)?TRUE:FALSE); dt_control_queue_redraw_center(); return TRUE;}
开发者ID:nagyistoce,项目名称:radhermit-darktable,代码行数:17,
示例18: _lib_filmstrip_duplicate_image_key_accel_callbackstatic gboolean _lib_filmstrip_duplicate_image_key_accel_callback(GtkAccelGroup *accel_group, GObject *aceeleratable, guint keyval, GdkModifierType modifier, gpointer data){ int32_t mouse_over_id; DT_CTL_GET_GLOBAL(mouse_over_id, lib_image_mouse_over_id); if(mouse_over_id <= 0) return FALSE; /* check if images is currently loaded in darkroom */ if(dt_dev_is_current_image(darktable.develop, mouse_over_id)) dt_dev_write_history(darktable.develop); int32_t newimgid = dt_image_duplicate(mouse_over_id); if(newimgid != -1) dt_history_copy_and_paste_on_image(mouse_over_id, newimgid, FALSE, NULL); dt_control_queue_redraw_center(); return TRUE;}
开发者ID:danielbaak,项目名称:darktable,代码行数:18,
示例19: _lib_filmstrip_ratings_key_accel_callbackstatic gboolean _lib_filmstrip_ratings_key_accel_callback(GtkAccelGroup *accel_group, GObject *aceeleratable, guint keyval, GdkModifierType modifier, gpointer data){ long int num = (long int)data; switch (num) { case DT_VIEW_DESERT: case DT_VIEW_REJECT: case DT_VIEW_STAR_1: case DT_VIEW_STAR_2: case DT_VIEW_STAR_3: case DT_VIEW_STAR_4: case DT_VIEW_STAR_5: case 666: { int32_t mouse_over_id; DT_CTL_GET_GLOBAL(mouse_over_id, lib_image_mouse_over_id); if (mouse_over_id <= 0) return FALSE; /* get image from cache */ const dt_image_t *cimg = dt_image_cache_read_get(darktable.image_cache, mouse_over_id); dt_image_t *image = dt_image_cache_write_get(darktable.image_cache, cimg); if (num == 666) image->flags &= ~0xf; else if (num == DT_VIEW_STAR_1 && ((image->flags & 0x7) == 1)) image->flags &= ~0x7; else { image->flags &= ~0x7; image->flags |= num; } dt_image_cache_write_release(darktable.image_cache, image, DT_IMAGE_CACHE_SAFE); dt_image_cache_read_release(darktable.image_cache, image); /* redraw all */ dt_control_queue_redraw(); break; } default: break; } return TRUE;}
开发者ID:nagyistoce,项目名称:radhermit-darktable,代码行数:43,
示例20: detach_selected_tagstatic voiddetach_selected_tag(dt_lib_module_t *self, dt_lib_tagging_t *d){ GtkTreeIter iter; GtkTreeModel *model = NULL; GtkTreeView *view = d->current; GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(view)); if(!gtk_tree_selection_get_selected(selection, &model, &iter)) return; guint tagid; gtk_tree_model_get (model, &iter, DT_LIB_TAGGING_COL_ID, &tagid, -1); int imgsel = -1; if(tagid <= 0) return; DT_CTL_GET_GLOBAL(imgsel, lib_image_mouse_over_id); dt_tag_detach(tagid,imgsel); dt_image_synch_xmp(imgsel);}
开发者ID:itarozzi,项目名称:darktable,代码行数:21,
示例21: _lib_filmstrip_paste_history_parts_key_accel_callbackstatic gboolean _lib_filmstrip_paste_history_parts_key_accel_callback(GtkAccelGroup *accel_group, GObject *aceeleratable, guint keyval, GdkModifierType modifier, gpointer data){ dt_lib_filmstrip_t *strip = (dt_lib_filmstrip_t *)data; int mode = dt_conf_get_int("plugins/lighttable/copy_history/pastemode"); // get mouse over before launching the dialog int32_t mouse_over_id; DT_CTL_GET_GLOBAL(mouse_over_id, lib_image_mouse_over_id); dt_gui_hist_dialog_new (&(strip->dg), strip->history_copy_imgid, FALSE); if (dt_history_copy_and_paste_on_selection (strip->history_copy_imgid, (mode==0)?TRUE:FALSE, strip->dg.selops)!=0) { if(mouse_over_id <= 0) return FALSE; dt_history_copy_and_paste_on_image(strip->history_copy_imgid, mouse_over_id, (mode == 0)?TRUE:FALSE,strip->dg.selops); } dt_control_queue_redraw_center(); return TRUE;}
开发者ID:jonleighton,项目名称:darktable,代码行数:23,
示例22: _lib_navigation_expose_callbackstatic gboolean _lib_navigation_expose_callback(GtkWidget *widget, GdkEventExpose *event, gpointer user_data){ const int inset = DT_NAVIGATION_INSET; int width = widget->allocation.width, height = widget->allocation.height; dt_develop_t *dev = darktable.develop; if (dev->preview_dirty) return FALSE; /* get the current style */ GtkStyle *style=gtk_rc_get_style_by_paths(gtk_settings_get_default(), NULL,"GtkWidget", GTK_TYPE_WIDGET); if(!style) style = gtk_rc_get_style(widget); cairo_surface_t *cst = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height); cairo_t *cr = cairo_create(cst); /* fill background */ cairo_set_source_rgb(cr, style->bg[0].red/65535.0, style->bg[0].green/65535.0, style->bg[0].blue/65535.0); cairo_paint(cr); width -= 2*inset; height -= 2*inset; cairo_translate(cr, inset, inset); /* draw navigation image if available */ if(dev->preview_pipe->backbuf && !dev->preview_dirty) { dt_pthread_mutex_t *mutex = &dev->preview_pipe->backbuf_mutex; dt_pthread_mutex_lock(mutex); const int wd = dev->preview_pipe->backbuf_width; const int ht = dev->preview_pipe->backbuf_height; const float scale = fminf(width/(float)wd, height/(float)ht); const int stride = cairo_format_stride_for_width (CAIRO_FORMAT_RGB24, wd); cairo_surface_t *surface = cairo_image_surface_create_for_data (dev->preview_pipe->backbuf, CAIRO_FORMAT_RGB24, wd, ht, stride); cairo_translate(cr, width/2.0, height/2.0f); cairo_scale(cr, scale, scale); cairo_translate(cr, -.5f*wd, -.5f*ht); // draw shadow around float alpha = 1.0f; for(int k=0; k<4; k++) { cairo_rectangle(cr, -k/scale, -k/scale, wd + 2*k/scale, ht + 2*k/scale); cairo_set_source_rgba(cr, 0, 0, 0, alpha); alpha *= 0.6f; cairo_fill(cr); } cairo_rectangle(cr, 0, 0, wd-2, ht-1); cairo_set_source_surface (cr, surface, 0, 0); cairo_pattern_set_filter(cairo_get_source(cr), CAIRO_FILTER_FAST); cairo_fill(cr); cairo_surface_destroy (surface); dt_pthread_mutex_unlock(mutex); // draw box where we are dt_dev_zoom_t zoom; int closeup; float zoom_x, zoom_y; DT_CTL_GET_GLOBAL(zoom, dev_zoom); DT_CTL_GET_GLOBAL(closeup, dev_closeup); DT_CTL_GET_GLOBAL(zoom_x, dev_zoom_x); DT_CTL_GET_GLOBAL(zoom_y, dev_zoom_y); const float min_scale = dt_dev_get_zoom_scale(dev, DT_ZOOM_FIT, closeup ? 2.0 : 1.0, 0); const float cur_scale = dt_dev_get_zoom_scale(dev, zoom, closeup ? 2.0 : 1.0, 0); // avoid numerical instability for small resolutions: if(cur_scale > min_scale+0.001) { float boxw = 1, boxh = 1; dt_dev_check_zoom_bounds(darktable.develop, &zoom_x, &zoom_y, zoom, closeup, &boxw, &boxh); cairo_translate(cr, wd*(.5f+zoom_x), ht*(.5f+zoom_y)); cairo_set_source_rgb(cr, 0., 0., 0.); cairo_set_line_width(cr, 1.f/scale); boxw *= wd; boxh *= ht; cairo_rectangle(cr, -boxw/2-1, -boxh/2-1, boxw+2, boxh+2); cairo_stroke(cr); cairo_set_source_rgb(cr, 1., 1., 1.); cairo_rectangle(cr, -boxw/2, -boxh/2, boxw, boxh); cairo_stroke(cr); } } /* blit memsurface into widget */ cairo_destroy(cr); cairo_t *cr_pixmap = gdk_cairo_create(gtk_widget_get_window(widget)); cairo_set_source_surface (cr_pixmap, cst, 0, 0); cairo_paint(cr_pixmap); cairo_destroy(cr_pixmap); cairo_surface_destroy(cst); return TRUE;}
开发者ID:sk1p,项目名称:darktable,代码行数:96,
示例23: _lib_tagging_tag_showstatic gboolean_lib_tagging_tag_show(GtkAccelGroup *accel_group, GObject *acceleratable, guint keyval, GdkModifierType modifier, dt_lib_module_t* self){ int mouse_over_id = -1; int zoom = dt_conf_get_int("plugins/lighttable/images_in_row"); // the order is: // if(zoom == 1) => currently shown image // else if(selection not empty) => selected images // else if(cursor over image) => hovered image // else => return if(zoom == 1 || dt_collection_get_selected_count(darktable.collection) == 0) { DT_CTL_GET_GLOBAL(mouse_over_id, lib_image_mouse_over_id); if(mouse_over_id < 0) return TRUE; } dt_lib_tagging_t *d = (dt_lib_tagging_t*)self->data; d->floating_tag_imgid = mouse_over_id; gint x, y; gint px, py, w, h; GtkWidget *window = dt_ui_main_window(darktable.gui->ui); GtkWidget *center = dt_ui_center(darktable.gui->ui); gdk_window_get_origin(gtk_widget_get_window(center), &px, &py); w = gdk_window_get_width(gtk_widget_get_window(center)); h = gdk_window_get_height(gtk_widget_get_window(center)); x = px + 0.5*(w-FLOATING_ENTRY_WIDTH); y = py + h - 50; /* put the floating box at the mouse pointer */// gint pointerx, pointery;// gtk_widget_get_pointer(center, &pointerx, &pointery);// x = px + pointerx + 1;// y = py + pointery + 1; d->floating_tag_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); /* stackoverflow.com/questions/1925568/how-to-give-keyboard-focus-to-a-pop-up-gtk-window */ gtk_widget_set_can_focus(d->floating_tag_window, TRUE); gtk_window_set_decorated(GTK_WINDOW(d->floating_tag_window), FALSE); gtk_window_set_type_hint(GTK_WINDOW(d->floating_tag_window), GDK_WINDOW_TYPE_HINT_POPUP_MENU); gtk_window_set_transient_for(GTK_WINDOW(d->floating_tag_window), GTK_WINDOW(window)); gtk_window_set_opacity(GTK_WINDOW(d->floating_tag_window), 0.8); gtk_window_move(GTK_WINDOW(d->floating_tag_window), x, y); GtkWidget *entry = gtk_entry_new(); gtk_widget_set_size_request(entry, FLOATING_ENTRY_WIDTH, -1); gtk_widget_add_events(entry, GDK_FOCUS_CHANGE_MASK); GtkEntryCompletion *completion = gtk_entry_completion_new(); gtk_entry_completion_set_model(completion, gtk_tree_view_get_model(GTK_TREE_VIEW(d->related))); gtk_entry_completion_set_text_column(completion, 0); gtk_entry_completion_set_inline_completion(completion, TRUE); gtk_entry_completion_set_popup_set_width(completion, FALSE); gtk_entry_set_completion(GTK_ENTRY(entry), completion); gtk_editable_select_region(GTK_EDITABLE(entry), 0, -1); gtk_container_add(GTK_CONTAINER(d->floating_tag_window), entry); g_signal_connect_swapped(entry, "focus-out-event", G_CALLBACK(gtk_widget_destroy), d->floating_tag_window); g_signal_connect(entry, "key-press-event", G_CALLBACK(_lib_tagging_tag_key_press), self); gtk_widget_show_all(d->floating_tag_window); gtk_widget_grab_focus(entry); gtk_window_present(GTK_WINDOW(d->floating_tag_window)); return TRUE;}
开发者ID:drinkcat,项目名称:darktable,代码行数:71,
注:本文中的DT_CTL_GET_GLOBAL函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 C++ DT_DEBUG_SQLITE3_BIND_INT函数代码示例 C++ DTRACE函数代码示例 |