本文整理汇总了C++中dt_ui_center函数的典型用法代码示例。如果您正苦于以下问题:C++ dt_ui_center函数的具体用法?C++ dt_ui_center怎么用?C++ dt_ui_center使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了dt_ui_center函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: enter
void enter(dt_view_t *self)
{
dt_map_t *lib = (dt_map_t *)self->data;
lib->selected_image = 0;
lib->start_drag = FALSE;
/* replace center widget */
GtkWidget *parent = gtk_widget_get_parent(dt_ui_center(darktable.gui->ui));
gtk_widget_hide(dt_ui_center(darktable.gui->ui));
gtk_box_reorder_child(GTK_BOX(parent), GTK_WIDGET(lib->map), 2);
gtk_widget_show_all(GTK_WIDGET(lib->map));
/* setup proxy functions */
darktable.view_manager->proxy.map.view = self;
darktable.view_manager->proxy.map.center_on_location = _view_map_center_on_location;
darktable.view_manager->proxy.map.show_osd = _view_map_show_osd;
darktable.view_manager->proxy.map.set_map_source = _view_map_set_map_source;
/* restore last zoom,location in map */
const float lon = dt_conf_get_float("plugins/map/longitude");
const float lat = dt_conf_get_float("plugins/map/latitude");
const int zoom = dt_conf_get_int("plugins/map/zoom");
osm_gps_map_set_center_and_zoom(lib->map, lat, lon, zoom);
/* connect signal for filmstrip image activate */
dt_control_signal_connect(darktable.signals,
DT_SIGNAL_VIEWMANAGER_FILMSTRIP_ACTIVATE,
G_CALLBACK(_view_map_filmstrip_activate_callback),
self);
}
开发者ID:chubinou,项目名称:darktable,代码行数:34,代码来源:map.c
示例2: dt_ctl_switch_mode_to
void dt_ctl_switch_mode_to(dt_control_gui_mode_t mode)
{
dt_control_gui_mode_t oldmode = dt_conf_get_int("ui_last/view");
if(oldmode == mode) return;
darktable.control->button_down = 0;
darktable.control->button_down_which = 0;
darktable.gui->center_tooltip = 0;
GtkWidget *widget = dt_ui_center(darktable.gui->ui);
g_object_set(G_OBJECT(widget), "tooltip-text", "", (char *)NULL);
char buf[512];
snprintf(buf, sizeof(buf) - 1, _("switch to %s mode"),
dt_view_manager_name(darktable.view_manager));
gboolean i_own_lock = dt_control_gdk_lock();
int error = dt_view_manager_switch(darktable.view_manager, mode);
if(i_own_lock) dt_control_gdk_unlock();
if(error) return;
dt_conf_set_int ("ui_last/view", mode);
}
开发者ID:kriomant,项目名称:darktable,代码行数:25,代码来源:control.c
示例3: fullscreen_key_accel_callback
static gboolean fullscreen_key_accel_callback(GtkAccelGroup *accel_group,
GObject *acceleratable, guint keyval,
GdkModifierType modifier,
gpointer data)
{
GtkWidget *widget;
int fullscreen;
if(data)
{
widget = dt_ui_main_window(darktable.gui->ui);
fullscreen = dt_conf_get_bool("ui_last/fullscreen");
if(fullscreen) gtk_window_unfullscreen(GTK_WINDOW(widget));
else gtk_window_fullscreen (GTK_WINDOW(widget));
fullscreen ^= 1;
dt_conf_set_bool("ui_last/fullscreen", fullscreen);
dt_dev_invalidate(darktable.develop);
}
else
{
widget = dt_ui_main_window(darktable.gui->ui);
gtk_window_unfullscreen(GTK_WINDOW(widget));
fullscreen = 0;
dt_conf_set_bool("ui_last/fullscreen", fullscreen);
dt_dev_invalidate(darktable.develop);
}
/* redraw center view */
gtk_widget_queue_draw(dt_ui_center(darktable.gui->ui));
return TRUE;
}
开发者ID:sk1p,项目名称:darktable,代码行数:31,代码来源:gtk.c
示例4: enter
void enter(dt_view_t *self)
{
// init drag&drop of files/folders
gtk_drag_dest_set(dt_ui_center(darktable.gui->ui), GTK_DEST_DEFAULT_ALL, target_list, n_targets, GDK_ACTION_COPY);
g_signal_connect(dt_ui_center(darktable.gui->ui), "drag-data-received", G_CALLBACK(drag_and_drop_received), self);
/* connect to signals */
dt_control_signal_connect(darktable.signals, DT_SIGNAL_DEVELOP_MIPMAP_UPDATED,
G_CALLBACK(_lighttable_mipamps_updated_signal_callback),
(gpointer)self);
// clear some state variables
dt_library_t *lib = (dt_library_t *)self->data;
lib->button = 0;
lib->pan = 0;
}
开发者ID:amitkr,项目名称:darktable,代码行数:16,代码来源:lighttable.c
示例5: enter
void enter(dt_view_t *self)
{
dt_print_t *prt=(dt_print_t*)self->data;
/* scroll filmstrip to the first selected image */
GList *selected_images = dt_collection_get_selected(darktable.collection, 1);
if(selected_images)
{
int imgid = GPOINTER_TO_INT(selected_images->data);
prt->image_id = imgid;
dt_view_filmstrip_scroll_to_image(darktable.view_manager, imgid, FALSE);
}
g_list_free(selected_images);
_set_orientation(prt);
dt_control_signal_connect(darktable.signals, DT_SIGNAL_DEVELOP_MIPMAP_UPDATED,
G_CALLBACK(_print_mipmaps_updated_signal_callback),
(gpointer)self);
dt_control_signal_connect(darktable.signals,
DT_SIGNAL_VIEWMANAGER_FILMSTRIP_ACTIVATE,
G_CALLBACK(_view_print_filmstrip_activate_callback),
self);
gtk_widget_grab_focus(dt_ui_center(darktable.gui->ui));
// prefetch next few from first selected image on.
dt_view_filmstrip_prefetch();
darktable.control->mouse_over_id = -1;
dt_control_set_mouse_over_id(prt->image_id);
}
开发者ID:CarVac,项目名称:darktable,代码行数:33,代码来源:print.c
示例6: _dt_ctl_switch_mode_prepare
static void _dt_ctl_switch_mode_prepare()
{
darktable.control->button_down = 0;
darktable.control->button_down_which = 0;
darktable.gui->center_tooltip = 0;
GtkWidget *widget = dt_ui_center(darktable.gui->ui);
gtk_widget_set_tooltip_text(widget, "");
}
开发者ID:CoreyChen922,项目名称:darktable,代码行数:8,代码来源:control.c
示例7: dt_gui_gtk_run
void dt_gui_gtk_run(dt_gui_gtk_t *gui)
{
GtkWidget *widget = dt_ui_center(darktable.gui->ui);
darktable.gui->pixmap = gdk_pixmap_new(widget->window, widget->allocation.width, widget->allocation.height, -1);
/* start the event loop */
gtk_main ();
gdk_threads_leave();
}
开发者ID:sk1p,项目名称:darktable,代码行数:8,代码来源:gtk.c
示例8: view_switch_key_accel_callback
static gboolean view_switch_key_accel_callback(GtkAccelGroup *accel_group,
GObject *acceleratable, guint keyval,
GdkModifierType modifier,
gpointer data)
{
dt_ctl_switch_mode();
gtk_widget_queue_draw(dt_ui_center(darktable.gui->ui));
return TRUE;
}
开发者ID:sk1p,项目名称:darktable,代码行数:9,代码来源:gtk.c
示例9: dt_control_key_pressed
int dt_control_key_pressed(guint key, guint state)
{
int handled = dt_view_manager_key_pressed(
darktable.view_manager,
key,
state);
if(handled)
gtk_widget_queue_draw(dt_ui_center(darktable.gui->ui));
return handled;
}
开发者ID:kriomant,项目名称:darktable,代码行数:10,代码来源:control.c
示例10: leave
void leave(dt_view_t *self)
{
gtk_drag_dest_unset(dt_ui_center(darktable.gui->ui));
/* disconnect from signals */
dt_control_signal_disconnect(darktable.signals, G_CALLBACK(_lighttable_mipamps_updated_signal_callback), (gpointer)self);
// clear some state variables
dt_library_t *lib = (dt_library_t *)self->data;
lib->button = 0;
lib->pan = 0;
}
开发者ID:amitkr,项目名称:darktable,代码行数:12,代码来源:lighttable.c
示例11: contrast_key_accel_callback
static gboolean contrast_key_accel_callback(GtkAccelGroup *accel_group,
GObject *acceleratable, guint keyval,
GdkModifierType modifier,
gpointer data)
{
if(data)
dt_gui_contrast_increase();
else
dt_gui_contrast_decrease();
gtk_widget_queue_draw(dt_ui_center(darktable.gui->ui));
return TRUE;
}
开发者ID:sk1p,项目名称:darktable,代码行数:13,代码来源:gtk.c
示例12: _dt_ctl_switch_mode_to
static gboolean _dt_ctl_switch_mode_to(gpointer user_data)
{
dt_control_gui_mode_t mode = GPOINTER_TO_INT(user_data);
darktable.control->button_down = 0;
darktable.control->button_down_which = 0;
darktable.gui->center_tooltip = 0;
GtkWidget *widget = dt_ui_center(darktable.gui->ui);
gtk_widget_set_tooltip_text(widget, "");
if(!dt_view_manager_switch(darktable.view_manager, mode))
dt_conf_set_int("ui_last/view", mode);
return FALSE;
}
开发者ID:AdamMajer,项目名称:darktable,代码行数:15,代码来源:control.c
示例13: leave
void leave(dt_view_t *self)
{
/* disconnect from filmstrip image activate */
dt_control_signal_disconnect(darktable.signals,
G_CALLBACK(_view_map_filmstrip_activate_callback),
(gpointer)self);
dt_map_t *lib = (dt_map_t *)self->data;
gtk_widget_hide(GTK_WIDGET(lib->map));
gtk_widget_show_all(dt_ui_center(darktable.gui->ui));
/* reset proxy */
darktable.view_manager->proxy.map.view = NULL;
}
开发者ID:chubinou,项目名称:darktable,代码行数:16,代码来源:map.c
示例14: dt_control_key_released
int dt_control_key_released(guint key, guint state)
{
// this line is here to find the right key code on different platforms (mac).
// printf("key code pressed: %d\n", which);
int handled = 0;
switch(key)
{
default:
// propagate to view modules.
handled = dt_view_manager_key_released(darktable.view_manager, key, state);
break;
}
if(handled) gtk_widget_queue_draw(dt_ui_center(darktable.gui->ui));
return handled;
}
开发者ID:AdamMajer,项目名称:darktable,代码行数:17,代码来源:control.c
示例15: dt_control_quit
void dt_control_quit()
{
#ifdef HAVE_MAP
// since map mode doesn't like to quit we just switch to lighttable mode. hacky, but it works :(
if(dt_conf_get_int("ui_last/view") == DT_MAP) // we are in map mode where no expose is running
dt_ctl_switch_mode_to(DT_LIBRARY);
#endif
dt_gui_gtk_quit();
// thread safe quit, 1st pass:
dt_pthread_mutex_lock(&darktable.control->cond_mutex);
dt_pthread_mutex_lock(&darktable.control->run_mutex);
darktable.control->running = 0;
dt_pthread_mutex_unlock(&darktable.control->run_mutex);
dt_pthread_mutex_unlock(&darktable.control->cond_mutex);
// let gui pick up the running = 0 state and die
gtk_widget_queue_draw(dt_ui_center(darktable.gui->ui));
}
开发者ID:kriomant,项目名称:darktable,代码行数:18,代码来源:control.c
示例16: _lib_import_folder_callback
static void _lib_import_folder_callback(GtkWidget *widget,gpointer user_data)
{
GtkWidget *win = dt_ui_main_window(darktable.gui->ui);
GtkWidget *filechooser = gtk_file_chooser_dialog_new (_("import film"),
GTK_WINDOW (win),
GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
(char *)NULL);
gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(filechooser), TRUE);
char *last_directory = dt_conf_get_string("ui_last/import_last_directory");
if(last_directory != NULL)
gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER (filechooser), last_directory);
// add extra lines to 'extra'. don't forget to destroy the widgets later.
GtkWidget *extra;
extra = gtk_vbox_new(FALSE, 0);
// recursive opening.
GtkWidget *recursive;
recursive = gtk_check_button_new_with_label (_("import directories recursively"));
g_object_set(recursive, "tooltip-text", _("recursively import subdirectories. each directory goes into a new film roll."), NULL);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (recursive), dt_conf_get_bool("ui_last/import_recursive"));
gtk_widget_show (recursive);
gtk_box_pack_start(GTK_BOX (extra), recursive, FALSE, FALSE, 0);
// ignoring of jpegs. hack while we don't handle raw+jpeg in the same directories.
GtkWidget *ignore_jpeg;
ignore_jpeg = gtk_check_button_new_with_label (_("ignore jpeg files"));
g_object_set(ignore_jpeg, "tooltip-text", _("do not load files with an extension of .jpg or .jpeg. this can be useful when there are raw+jpeg in a directory."), NULL);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (ignore_jpeg), dt_conf_get_bool("ui_last/import_ignore_jpegs"));
gtk_widget_show (ignore_jpeg);
gtk_box_pack_start(GTK_BOX (extra), ignore_jpeg, FALSE, FALSE, 0);
gtk_file_chooser_set_extra_widget (GTK_FILE_CHOOSER (filechooser), extra);
if (gtk_dialog_run (GTK_DIALOG (filechooser)) == GTK_RESPONSE_ACCEPT)
{
dt_conf_set_bool("ui_last/import_recursive", gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (recursive)));
dt_conf_set_bool("ui_last/import_ignore_jpegs", gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (ignore_jpeg)));
dt_conf_set_string("ui_last/import_last_directory", gtk_file_chooser_get_current_folder(GTK_FILE_CHOOSER (filechooser)));
char *filename = NULL, *first_filename = NULL;
GSList *list = gtk_file_chooser_get_filenames (GTK_FILE_CHOOSER (filechooser));
GSList *it = list;
/* for each selected folder add import job */
while(it)
{
filename = (char *)it->data;
dt_film_import(filename);
if (!first_filename)
first_filename = dt_util_dstrcat(g_strdup(filename), "%%");
g_free (filename);
it = g_slist_next(it);
}
/* update collection to view import */
if (first_filename)
{
dt_conf_set_int("plugins/lighttable/collect/num_rules", 1);
dt_conf_set_int("plugins/lighttable/collect/item0", 0);
dt_conf_set_string("plugins/lighttable/collect/string0",first_filename);
dt_collection_update_query(darktable.collection);
g_free(first_filename);
}
g_slist_free (list);
}
gtk_widget_destroy(recursive);
gtk_widget_destroy(ignore_jpeg);
gtk_widget_destroy(extra);
gtk_widget_destroy (filechooser);
gtk_widget_queue_draw(dt_ui_center(darktable.gui->ui));
}
开发者ID:nagyistoce,项目名称:radhermit-darktable,代码行数:78,代码来源:import.c
示例17: dt_control_key_pressed_override
//.........这里部分代码省略.........
g_list_free(autocomplete);
autocomplete = NULL;
}
else if(key == GDK_KEY_Tab)
{
// TODO: also support :preset and :get?
// auto complete:
if(darktable.control->vimkey_cnt < 5)
{
snprintf(darktable.control->vimkey, sizeof(darktable.control->vimkey), ":set ");
darktable.control->vimkey_cnt = 5;
}
else if(!autocomplete)
{
// TODO: handle '.'-separated things separately
// this is a static list, and tab cycles through the list
g_strlcpy(vimkey_input, darktable.control->vimkey + 5, sizeof(vimkey_input));
autocomplete = dt_bauhaus_vimkey_complete(darktable.control->vimkey + 5);
autocomplete = g_list_append(autocomplete, vimkey_input); // remember input to cycle back
}
if(autocomplete)
{
// pop first.
// the paths themselves are owned by bauhaus,
// no free required.
snprintf(darktable.control->vimkey, sizeof(darktable.control->vimkey), ":set %s",
(char *)autocomplete->data);
autocomplete = g_list_remove(autocomplete, autocomplete->data);
darktable.control->vimkey_cnt = strlen(darktable.control->vimkey);
}
dt_control_log("%s", darktable.control->vimkey);
}
else if(g_unichar_isprint(unichar)) // printable unicode character
{
gchar utf8[6];
gint char_width = g_unichar_to_utf8(unichar, utf8);
if(darktable.control->vimkey_cnt + 1 + char_width < 256)
{
g_utf8_strncpy(darktable.control->vimkey + darktable.control->vimkey_cnt, utf8, 1);
darktable.control->vimkey_cnt += char_width;
darktable.control->vimkey[darktable.control->vimkey_cnt] = 0;
dt_control_log("%s", darktable.control->vimkey);
g_list_free(autocomplete);
autocomplete = NULL;
}
}
else if(key == GDK_KEY_Up)
{
// TODO: step history up and copy to vimkey
}
else if(key == GDK_KEY_Down)
{
// TODO: step history down and copy to vimkey
}
return 1;
}
else if(key == ':' && darktable.control->key_accelerators_on)
{
darktable.control->vimkey[0] = ':';
darktable.control->vimkey[1] = 0;
darktable.control->vimkey_cnt = 1;
dt_control_log("%s", darktable.control->vimkey);
return 1;
}
/* check if key accelerators are enabled*/
if(darktable.control->key_accelerators_on != 1) return 0;
if(key == accels->global_sideborders.accel_key && state == accels->global_sideborders.accel_mods)
{
/* toggle panel viewstate */
dt_ui_toggle_panels_visibility(darktable.gui->ui);
/* trigger invalidation of centerview to reprocess pipe */
dt_dev_invalidate(darktable.develop);
gtk_widget_queue_draw(dt_ui_center(darktable.gui->ui));
return 1;
}
else if(key == accels->global_header.accel_key && state == accels->global_header.accel_mods)
{
char key[512];
const dt_view_t *cv = dt_view_manager_get_current_view(darktable.view_manager);
/* do nothing if in collapse panel state
TODO: reconsider adding this check to ui api */
g_snprintf(key, sizeof(key), "%s/ui/panel_collaps_state", cv->module_name);
if(dt_conf_get_int(key)) return 0;
/* toggle the header visibility state */
g_snprintf(key, sizeof(key), "%s/ui/show_header", cv->module_name);
gboolean header = !dt_conf_get_bool(key);
dt_conf_set_bool(key, header);
/* show/hide the actual header panel */
dt_ui_panel_show(darktable.gui->ui, DT_UI_PANEL_TOP, header, TRUE);
gtk_widget_queue_draw(dt_ui_center(darktable.gui->ui));
return 1;
}
return 0;
}
开发者ID:AdamMajer,项目名称:darktable,代码行数:101,代码来源:control.c
示例18: expose_borders
static gboolean
expose_borders (GtkWidget *widget, GdkEventExpose *event, gpointer user_data)
{
// draw arrows on borders
if(!dt_control_running()) return TRUE;
long int which = (long int)user_data;
float width = widget->allocation.width, height = widget->allocation.height;
cairo_surface_t *cst = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height);
cairo_t *cr = cairo_create(cst);
GtkStyle *style = gtk_widget_get_style(dt_ui_center(darktable.gui->ui));
cairo_set_source_rgb (cr,
.5f*style->bg[GTK_STATE_NORMAL].red/65535.0,
.5f*style->bg[GTK_STATE_NORMAL].green/65535.0,
.5f*style->bg[GTK_STATE_NORMAL].blue/65535.0
);
// cairo_set_source_rgb (cr, .13, .13, .13);
cairo_paint(cr);
// draw scrollbar indicators
int v = darktable.view_manager->current_view;
dt_view_t *view = NULL;
if(v >= 0 && v < darktable.view_manager->num_views) view = darktable.view_manager->view + v;
// cairo_set_source_rgb (cr, .16, .16, .16);
cairo_set_source_rgb (cr,
style->bg[GTK_STATE_NORMAL].red/65535.0,
style->bg[GTK_STATE_NORMAL].green/65535.0,
style->bg[GTK_STATE_NORMAL].blue/65535.0
);
const float border = 0.3;
if(!view) cairo_paint(cr);
else
{
switch(which)
{
case 0:
case 1: // left, right: vertical
cairo_rectangle(cr, 0.0, view->vscroll_pos/view->vscroll_size * height, width, view->vscroll_viewport_size/view->vscroll_size * height);
break;
default: // bottom, top: horizontal
cairo_rectangle(cr, view->hscroll_pos/view->hscroll_size * width, 0.0, view->hscroll_viewport_size/view->hscroll_size * width, height);
break;
}
cairo_fill(cr);
switch(which)
{
case 0:
cairo_rectangle(cr, (1.0-border)*width, 0.0, border*width, height);
break;
case 1:
cairo_rectangle(cr, 0.0, 0.0, border*width, height);
break;
case 2:
cairo_rectangle(cr, (1.0-border)*height, (1.0-border)*height, width-2*(1.0-border)*height, border*height);
break;
default:
cairo_rectangle(cr, (1.0-border)*height, 0.0, width-2*(1.0-border)*height, border*height);
break;
}
cairo_fill(cr);
}
// draw gui arrows.
cairo_set_source_rgb (cr, .6, .6, .6);
switch(which)
{
case 0: // left
if(dt_ui_panel_visible(darktable.gui->ui, DT_UI_PANEL_LEFT))
{
cairo_move_to (cr, width, height/2-width);
cairo_rel_line_to (cr, 0.0, 2*width);
cairo_rel_line_to (cr, -width, -width);
}
else
{
cairo_move_to (cr, 0.0, height/2-width);
cairo_rel_line_to (cr, 0.0, 2*width);
cairo_rel_line_to (cr, width, -width);
}
break;
case 1: // right
if(dt_ui_panel_visible(darktable.gui->ui, DT_UI_PANEL_RIGHT))
{
cairo_move_to (cr, 0.0, height/2-width);
cairo_rel_line_to (cr, 0.0, 2*width);
cairo_rel_line_to (cr, width, -width);
}
else
{
cairo_move_to (cr, width, height/2-width);
cairo_rel_line_to (cr, 0.0, 2*width);
cairo_rel_line_to (cr, -width, -width);
}
break;
case 2: // top
if(dt_ui_panel_visible(darktable.gui->ui, DT_UI_PANEL_CENTER_TOP))
{
cairo_move_to (cr, width/2-height, height);
cairo_rel_line_to (cr, 2*height, 0.0);
cairo_rel_line_to (cr, -height, -height);
//.........这里部分代码省略.........
开发者ID:sk1p,项目名称:darktable,代码行数:101,代码来源:gtk.c
示例19: dt_cairo_image_surface_get_width
void *dt_control_expose(void *voidptr)
{
int width, height, pointerx, pointery;
if(!darktable.gui->surface) return NULL;
width = dt_cairo_image_surface_get_width(darktable.gui->surface);
height = dt_cairo_image_surface_get_height(darktable.gui->surface);
GtkWidget *widget = dt_ui_center(darktable.gui->ui);
GdkDevice *device
= gdk_device_manager_get_client_pointer(gdk_display_get_device_manager(gtk_widget_get_display(widget)));
gdk_window_get_device_position(gtk_widget_get_window(widget), device, &pointerx, &pointery, NULL);
// create a gtk-independent surface to draw on
cairo_surface_t *cst = dt_cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height);
cairo_t *cr = cairo_create(cst);
// TODO: control_expose: only redraw the part not overlapped by temporary control panel show!
//
float tb = 8; // fmaxf(10, width/100.0);
darktable.control->tabborder = tb;
darktable.control->width = width;
darktable.control->height = height;
GdkRGBA color;
GtkStyleContext *context = gtk_widget_get_style_context(widget);
gboolean color_found = gtk_style_context_lookup_color (context, "bg_color", &color);
if(!color_found)
{
color.red = 1.0;
color.green = 0.0;
color.blue = 0.0;
color.alpha = 1.0;
}
gdk_cairo_set_source_rgba(cr, &color);
cairo_set_line_width(cr, tb);
cairo_rectangle(cr, tb / 2., tb / 2., width - tb, height - tb);
cairo_stroke(cr);
cairo_set_line_width(cr, 1.5);
color_found = gtk_style_context_lookup_color (context, "really_dark_bg_color", &color);
if(!color_found)
{
color.red = 1.0;
color.green = 0.0;
color.blue = 0.0;
color.alpha = 1.0;
}
gdk_cairo_set_source_rgba(cr, &color);
cairo_rectangle(cr, tb, tb, width - 2 * tb, height - 2 * tb);
cairo_stroke(cr);
cairo_save(cr);
cairo_translate(cr, tb, tb);
cairo_rectangle(cr, 0, 0, width - 2 * tb, height - 2 * tb);
cairo_clip(cr);
cairo_new_path(cr);
// draw view
dt_view_manager_expose(darktable.view_manager, cr, width - 2 * tb, height - 2 * tb, pointerx - tb,
pointery - tb);
cairo_restore(cr);
// draw log message, if any
dt_pthread_mutex_lock(&darktable.control->log_mutex);
if(darktable.control->log_ack != darktable.control->log_pos)
{
PangoRectangle ink;
PangoLayout *layout;
PangoFontDescription *desc = pango_font_description_copy_static(darktable.bauhaus->pango_font_desc);
const float fontsize = DT_PIXEL_APPLY_DPI(14);
pango_font_description_set_absolute_size(desc, fontsize * PANGO_SCALE);
pango_font_description_set_weight(desc, PANGO_WEIGHT_BOLD);
layout = pango_cairo_create_layout(cr);
pango_layout_set_font_description(layout, desc);
pango_layout_set_text(layout, darktable.control->log_message[darktable.control->log_ack], -1);
pango_layout_get_pixel_extents(layout, &ink, NULL);
const float pad = DT_PIXEL_APPLY_DPI(20.0f), xc = width / 2.0;
const float yc = height * 0.85 + DT_PIXEL_APPLY_DPI(10), wd = pad + ink.width * .5f;
float rad = DT_PIXEL_APPLY_DPI(14);
cairo_set_line_width(cr, 1.);
cairo_move_to(cr, xc - wd, yc + rad);
for(int k = 0; k < 5; k++)
{
cairo_arc(cr, xc - wd, yc, rad, M_PI / 2.0, 3.0 / 2.0 * M_PI);
cairo_line_to(cr, xc + wd, yc - rad);
cairo_arc(cr, xc + wd, yc, rad, 3.0 * M_PI / 2.0, M_PI / 2.0);
cairo_line_to(cr, xc - wd, yc + rad);
if(k == 0)
{
color_found = gtk_style_context_lookup_color (context, "selected_bg_color", &color);
if(!color_found)
{
color.red = 1.0;
color.green = 0.0;
color.blue = 0.0;
color.alpha = 1.0;
}
gdk_cairo_set_source_rgba(cr, &color);
cairo_fill_preserve(cr);
}
cairo_set_source_rgba(cr, 0., 0., 0., 1.0 / (1 + k));
cairo_stroke(cr);
//.........这里部分代码省略.........
开发者ID:AdamMajer,项目名称:darktable,代码行数:101,代码来源:control.c
示例20: cairo_image_surface_get_width
void *dt_control_expose(void *voidptr)
{
int width, height, pointerx, pointery;
if(!darktable.gui->surface) return NULL;
width = cairo_image_surface_get_width(darktable.gui->surface);
height = cairo_image_surface_get_height(darktable.gui->surface);
GtkWidget *widget = dt_ui_center(darktable.gui->ui);
gtk_widget_get_pointer(widget, &pointerx, &pointery);
//create a gtk-independent surface to draw on
cairo_surface_t *cst = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height);
cairo_t *cr = cairo_create(cst);
// TODO: control_expose: only redraw the part not overlapped by temporary control panel show!
//
float tb = 8;//fmaxf(10, width/100.0);
darktable.control->tabborder = tb;
darktable.control->width = width;
darktable.control->height = height;
GtkStyle *style = gtk_widget_get_style(widget);
cairo_set_source_rgb (cr,
style->bg[GTK_STATE_NORMAL].red/65535.0,
style->bg[GTK_STATE_NORMAL].green/65535.0,
style->bg[GTK_STATE_NORMAL].blue/65535.0
);
cairo_set_line_width(cr, tb);
cairo_rectangle(cr, tb/2., tb/2., width-tb, height-tb);
cairo_stroke(cr);
cairo_set_line_width(cr, 1.5);
cairo_set_source_rgb (cr, .1, .1, .1);
cairo_rectangle(cr, tb, tb, width-2*tb, height-2*tb);
cairo_stroke(cr);
cairo_save(cr);
cairo_translate(cr, tb, tb);
cairo_rectangle(cr, 0, 0, width - 2*tb, height - 2*tb);
cairo_clip(cr);
cairo_new_path(cr);
// draw view
dt_view_manager_expose(darktable.view_manager, cr, width-2*tb, height-2*tb,
pointerx-tb, pointery-tb);
cairo_restore(cr);
// draw status bar, if any
if(darktable.control->progress < 100.0)
{
tb = fmaxf(20, width/40.0);
char num[10];
cairo_rectangle(cr, width*0.4, height*0.85,
width*0.2*darktable.control->progress/100.0f, tb);
cairo_fill(cr);
cairo_set_source_rgb(cr, 0., 0., 0.);
cairo_rectangle(cr, width*0.4, height*0.85, width*0.2, tb);
cairo_stroke(cr);
cairo_set_source_rgb(cr, 0.9, 0.9, 0.9);
cairo_select_font_face (cr, "sans-serif", CAIRO_FONT_SLANT_NORMAL,
CAIRO_FONT_WEIGHT_BOLD);
cairo_set_font_size (cr, tb/3);
cairo_move_to (cr, width/2.0-10, height*0.85+2.*tb/3.);
snprintf(num, sizeof(num), "%d%%", (int)darktable.control->progress);
cairo_show_text (cr, num);
}
// draw log message, if any
dt_pthread_mutex_lock(&darktable.control->log_mutex);
if(darktable.control->log_ack != darktable.control->log_pos)
{
cairo_select_font_face (cr, "sans-serif", CAIRO_FONT_SLANT_NORMAL,
CAIRO_FONT_WEIGHT_BOLD);
const float fontsize = 14;
cairo_set_font_size (cr, fontsize);
cairo_text_extents_t ext;
cairo_text_extents (cr,
darktable.control->log_message[darktable.control->log_ack], &ext);
const float pad = 20.0f, xc = width/2.0;
const float yc = height*0.85+10, wd = pad + ext.width*.5f;
float rad = 14;
cairo_set_line_width(cr, 1.);
cairo_move_to( cr, xc-wd,yc+rad);
for(int k=0; k<5; k++)
{
cairo_arc (cr, xc-wd, yc, rad, M_PI/2.0, 3.0/2.0*M_PI);
cairo_line_to (cr, xc+wd, yc-rad);
cairo_arc (cr, xc+wd, yc, rad, 3.0*M_PI/2.0, M_PI/2.0);
cairo_line_to (cr, xc-wd, yc+rad);
if(k == 0)
{
cairo_set_source_rgb(cr, 0.3, 0.3, 0.3);
cairo_fill_preserve (cr);
}
cairo_set_source_rgba(cr, 0., 0., 0., 1.0/(1+k));
cairo_stroke (cr);
rad += .5f;
}
cairo_set_source_rgb(cr, 0.7, 0.7, 0.7);
cairo_move_to (cr, xc-wd+.5f*pad, yc + 1./3.*fontsize);
cairo_show_text (cr,
darktable.control->log_message[darktable.control->log_ack]);
}
//.........这里部分代码省略.........
开发者ID:kriomant,项目名称:darktable,代码行数:101,代码来源:control.c
注:本文中的dt_ui_center函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论