本文整理汇总了C++中DT_CTL_GET_GLOBAL函数的典型用法代码示例。如果您正苦于以下问题:C++ DT_CTL_GET_GLOBAL函数的具体用法?C++ DT_CTL_GET_GLOBAL怎么用?C++ DT_CTL_GET_GLOBAL使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了DT_CTL_GET_GLOBAL函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: _lib_navigation_set_position
void _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();
}
}
示例2: mouse_moved
int
mouse_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;
}
示例3: _lib_snapshots_add_button_clicked_callback
static 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);
}
示例4: gui_post_expose
void 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);
}
}
示例5: dt_circle_events_mouse_moved
static 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;
}
示例6: star_key_accel_callback
static gboolean
star_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;
}
示例7: _jump_to
static 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);
}
}
示例8: dt_dev_get_zoom_scale
float 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;
}
示例9: expose
void 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);
}
示例10: _lib_filmstrip_ratings_key_accel_callback
static 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;
}
示例11: _lib_tagging_redraw_callback
static 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);
}
示例12: _zoom_preset_change
static 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);
}
示例13: _lib_filmstrip_discard_history_key_accel_callback
static 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;
}
示例14: _lib_filmstrip_copy_history_key_accel_callback
static 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;
}
示例15: update
static void
update (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);
}