本文整理汇总了C++中cairo_paint函数的典型用法代码示例。如果您正苦于以下问题:C++ cairo_paint函数的具体用法?C++ cairo_paint怎么用?C++ cairo_paint使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了cairo_paint函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: 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
示例2: gtk_shruler_draw_ticks
static void
gtk_shruler_draw_ticks (GtkSHRuler *ruler)
{
GtkWidget *widget = GTK_WIDGET (ruler);
GtkStyle *style = gtk_widget_get_style (widget);
GtkSHRulerPrivate *priv = GTK_SHRULER_GET_PRIVATE (ruler);
GtkStateType state = gtk_widget_get_state (widget);
GtkAllocation allocation;
cairo_t *cr;
gint i;
gint width, height;
gint xthickness;
gint ythickness;
gint length;
gdouble lower, upper; /* Upper and lower limits, in ruler units */
gdouble increment; /* Number of pixels per unit */
gint scale; /* Number of units per major unit */
gdouble start, end, cur;
gchar unit_str[32];
gint digit_height;
gint digit_offset;
gint text_size;
gint pos;
gdouble max_size;
GtkCMUnit unit;
PangoLayout *layout;
PangoRectangle logical_rect, ink_rect;
if (! gtk_widget_is_drawable (widget))
return;
gtk_widget_get_allocation (widget, &allocation);
xthickness = style->xthickness;
ythickness = style->ythickness;
layout = gtk_shruler_get_layout (widget, "0123456789");
pango_layout_get_extents (layout, &ink_rect, &logical_rect);
digit_height = PANGO_PIXELS (ink_rect.height) + 2;
digit_offset = ink_rect.y;
if (priv->orientation == GTK_ORIENTATION_HORIZONTAL)
{
width = allocation.width;
height = allocation.height - ythickness * 2;
}
else
{
width = allocation.height;
height = allocation.width - ythickness * 2;
}
cr = cairo_create (priv->backing_store);
gdk_cairo_set_source_color (cr, &style->bg[state]);
cairo_paint (cr);
gdk_cairo_set_source_color (cr, &style->fg[state]);
gtk_shruler_get_range (ruler, &lower, &upper, &max_size);
if ((upper - lower) == 0)
goto out;
increment = (gdouble) width / (upper - lower);
/* determine the scale
* use the maximum extents of the ruler to determine the largest
* possible number to be displayed. Calculate the height in pixels
* of this displayed text. Use this height to find a scale which
* leaves sufficient room for drawing the ruler.
*
* We calculate the text size as for the vruler instead of
* actually measuring the text width, so that the result for the
* scale looks consistent with an accompanying vruler.
*/
scale = ceil (max_size);
g_snprintf (unit_str, sizeof (unit_str), "%d", scale);
text_size = strlen (unit_str) * digit_height + 1;
for (scale = 0; scale < G_N_ELEMENTS (ruler_metric.ruler_scale); scale++)
if (ruler_metric.ruler_scale[scale] * fabs (increment) > 2 * text_size)
break;
if (scale == G_N_ELEMENTS (ruler_metric.ruler_scale))
scale = G_N_ELEMENTS (ruler_metric.ruler_scale) - 1;
unit = gtk_shruler_get_unit (ruler);
/* drawing starts here */
length = 0;
for (i = G_N_ELEMENTS (ruler_metric.subdivide) - 1; i >= 0; i--)
{
gdouble subd_incr;
/* hack to get proper subdivisions at full pixels */
if (unit == CM_UNIT_PIXEL && scale == 1 && i == 1)
subd_incr = 1.0;
else
//.........这里部分代码省略.........
开发者ID:Tux,项目名称:claws-mail,代码行数:101,代码来源:gtkshruler.c
示例3: draw_image
/*
* Draws global image with fill color onto a pixmap with the given
* resolution and returns it.
*
*/
xcb_pixmap_t draw_image(uint32_t *resolution) {
xcb_pixmap_t bg_pixmap = XCB_NONE;
int button_diameter_physical = ceil(scaling_factor() * BUTTON_DIAMETER);
DEBUG("scaling_factor is %.f, physical diameter is %d px\n",
scaling_factor(), button_diameter_physical);
if (!vistype)
vistype = get_root_visual_type(screen);
bg_pixmap = create_bg_pixmap(conn, screen, resolution, color);
/* Initialize cairo: Create one in-memory surface to render the unlock
* indicator on, create one XCB surface to actually draw (one or more,
* depending on the amount of screens) unlock indicators on. */
cairo_surface_t *output = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, button_diameter_physical, button_diameter_physical);
cairo_t *ctx = cairo_create(output);
cairo_surface_t *xcb_output = cairo_xcb_surface_create(conn, bg_pixmap, vistype, resolution[0], resolution[1]);
cairo_t *xcb_ctx = cairo_create(xcb_output);
if (img) {
if (!tile) {
cairo_set_operator(xcb_ctx, CAIRO_OPERATOR_SOURCE);
cairo_set_source_surface(xcb_ctx, img, 0, 0);
cairo_paint(xcb_ctx);
cairo_set_operator(xcb_ctx, CAIRO_OPERATOR_OVER);
} else {
/* create a pattern and fill a rectangle as big as the screen */
cairo_pattern_t *pattern;
pattern = cairo_pattern_create_for_surface(img);
cairo_set_source(xcb_ctx, pattern);
cairo_pattern_set_extend(pattern, CAIRO_EXTEND_REPEAT);
cairo_rectangle(xcb_ctx, 0, 0, resolution[0], resolution[1]);
cairo_fill(xcb_ctx);
cairo_pattern_destroy(pattern);
}
} else {
char strgroups[3][3] = {{color[0], color[1], '\0'},
{color[2], color[3], '\0'},
{color[4], color[5], '\0'}};
uint32_t rgb16[3] = {(strtol(strgroups[0], NULL, 16)),
(strtol(strgroups[1], NULL, 16)),
(strtol(strgroups[2], NULL, 16))};
cairo_set_source_rgb(xcb_ctx, rgb16[0] / 255.0, rgb16[1] / 255.0, rgb16[2] / 255.0);
cairo_rectangle(xcb_ctx, 0, 0, resolution[0], resolution[1]);
cairo_fill(xcb_ctx);
}
if (unlock_indicator &&
(unlock_state >= STATE_KEY_PRESSED || pam_state > STATE_PAM_IDLE)) {
cairo_scale(ctx, scaling_factor(), scaling_factor());
/* Draw a (centered) circle with transparent background. */
cairo_set_line_width(ctx, 10.0);
cairo_arc(ctx,
BUTTON_CENTER /* x */,
BUTTON_CENTER /* y */,
BUTTON_RADIUS /* radius */,
0 /* start */,
2 * M_PI /* end */);
/* Use the appropriate color for the different PAM states
* (currently verifying, wrong password, or default) */
switch (pam_state) {
case STATE_PAM_VERIFY:
cairo_set_source_rgba(ctx, 0, 114.0 / 255, 255.0 / 255, 0.75);
break;
case STATE_PAM_WRONG:
cairo_set_source_rgba(ctx, 250.0 / 255, 0, 0, 0.75);
break;
default:
cairo_set_source_rgba(ctx, 0, 0, 0, 0.75);
break;
}
cairo_fill_preserve(ctx);
switch (pam_state) {
case STATE_PAM_VERIFY:
cairo_set_source_rgb(ctx, 51.0 / 255, 0, 250.0 / 255);
break;
case STATE_PAM_WRONG:
cairo_set_source_rgb(ctx, 125.0 / 255, 51.0 / 255, 0);
break;
case STATE_PAM_IDLE:
cairo_set_source_rgb(ctx, 51.0 / 255, 125.0 / 255, 0);
break;
}
cairo_stroke(ctx);
/* Draw an inner seperator line. */
cairo_set_source_rgb(ctx, 0, 0, 0);
cairo_set_line_width(ctx, 2.0);
cairo_arc(ctx,
BUTTON_CENTER /* x */,
BUTTON_CENTER /* y */,
BUTTON_RADIUS - 5 /* radius */,
0,
2 * M_PI);
//.........这里部分代码省略.........
开发者ID:kbeckmann,项目名称:i3lock,代码行数:101,代码来源:unlock_indicator.c
示例4: draw_image
/*
* Draws global image with fill color onto a pixmap with the given
* resolution and returns it.
*
*/
xcb_pixmap_t draw_image(uint32_t *resolution) {
xcb_pixmap_t bg_pixmap = XCB_NONE;
if (!vistype)
vistype = get_root_visual_type(screen);
if (fuzzy) {
bg_pixmap = create_fg_pixmap(conn, screen, resolution);
}
else {
bg_pixmap = create_bg_pixmap(conn, screen, resolution, color);
}
/* Initialize cairo: Create one in-memory surface to render the unlock
* indicator on, create one XCB surface to actually draw (one or more,
* depending on the amount of screens) unlock indicators on. */
cairo_surface_t *xcb_output = cairo_xcb_surface_create(conn, bg_pixmap, vistype, resolution[0], resolution[1]);
cairo_t *xcb_ctx = cairo_create(xcb_output);
if (img||fuzzy) {
if (fuzzy) {
blur_image_gl(0, bg_pixmap, last_resolution[0],last_resolution[1], blur_radius, blur_sigma);
cairo_surface_t * tmp = cairo_xcb_surface_create(conn, bg_pixmap, get_root_visual_type(screen), last_resolution[0], last_resolution[1]);
cairo_set_source_surface(xcb_ctx, tmp, 0, 0);
cairo_paint(xcb_ctx);
cairo_surface_destroy(tmp);
}
else if (!tile) {
cairo_set_source_surface(xcb_ctx, img, 0, 0);
cairo_paint(xcb_ctx);
} else {
/* create a pattern and fill a rectangle as big as the screen */
cairo_pattern_t *pattern;
pattern = cairo_pattern_create_for_surface(img);
cairo_set_source(xcb_ctx, pattern);
cairo_pattern_set_extend(pattern, CAIRO_EXTEND_REPEAT);
cairo_rectangle(xcb_ctx, 0, 0, resolution[0], resolution[1]);
cairo_fill(xcb_ctx);
cairo_pattern_destroy(pattern);
}
} else {
char strgroups[3][3] = {{color[0], color[1], '\0'},
{color[2], color[3], '\0'},
{color[4], color[5], '\0'}};
uint32_t rgb16[3] = {(strtol(strgroups[0], NULL, 16)),
(strtol(strgroups[1], NULL, 16)),
(strtol(strgroups[2], NULL, 16))};
cairo_set_source_rgb(xcb_ctx, rgb16[0] / 255.0, rgb16[1] / 255.0, rgb16[2] / 255.0);
cairo_rectangle(xcb_ctx, 0, 0, resolution[0], resolution[1]);
cairo_fill(xcb_ctx);
}
if (xr_screens > 0) {
/* Composite the unlock indicator in the middle of each screen. */
for (int screen = 0; screen < xr_screens; screen++) {
int x = (xr_resolutions[screen].x + ((xr_resolutions[screen].width / 2) - (button_diameter_physical / 2)));
int y = (xr_resolutions[screen].y + ((xr_resolutions[screen].height / 2) - (button_diameter_physical / 2)));
cairo_set_source_surface(xcb_ctx, unlock_indicator_surface, x, y);
cairo_rectangle(xcb_ctx, x, y, button_diameter_physical, button_diameter_physical);
cairo_fill(xcb_ctx);
}
} else {
/* We have no information about the screen sizes/positions, so we just
* place the unlock indicator in the middle of the X root window and
* hope for the best. */
int x = (last_resolution[0] / 2) - (button_diameter_physical / 2);
int y = (last_resolution[1] / 2) - (button_diameter_physical / 2);
cairo_set_source_surface(xcb_ctx, unlock_indicator_surface, x, y);
cairo_rectangle(xcb_ctx, x, y, button_diameter_physical, button_diameter_physical);
cairo_fill(xcb_ctx);
}
cairo_surface_destroy(xcb_output);
cairo_destroy(xcb_ctx);
return bg_pixmap;
}
开发者ID:jlesquembre,项目名称:i3lock-blur,代码行数:81,代码来源:unlock_indicator.c
示例5: preamble
//.........这里部分代码省略.........
ppi[n].x, ppi[n].y);
xasprintf (&base_name, "%s.%s.%s",
test_name,
target->name,
format);
surface = (target->create_surface) (base_name,
target->content,
SIZE + 25, SIZE + 25,
SIZE + 25, SIZE + 25,
CAIRO_BOILERPLATE_MODE_TEST,
0,
&closure);
if (surface == NULL || cairo_surface_status (surface)) {
cairo_test_log (ctx, "Failed to generate surface: %s.%s\n",
target->name,
format);
free (base_name);
free (test_name);
ret = CAIRO_TEST_FAILURE;
continue;
}
cairo_test_log (ctx,
"Testing fallback-resolution %gx%g with %s target\n",
ppi[n].x, ppi[n].y, target->name);
printf ("%s:\t", base_name);
fflush (stdout);
if (target->force_fallbacks != NULL)
target->force_fallbacks (surface, ~0U);
cr = cairo_create (surface);
#if SET_TOLERANCE
cairo_set_tolerance (cr, 3.0);
#endif
cairo_surface_set_device_offset (surface, 25, 25);
cairo_surface_set_fallback_resolution (surface,
ppi[n].x, ppi[n].y);
cairo_save (cr); {
cairo_set_source_rgb (cr, 1, 1, 1);
cairo_paint (cr);
} cairo_restore (cr);
/* First draw the top half in a conventional way. */
cairo_save (cr); {
cairo_rectangle (cr, 0, 0, SIZE, SIZE / 2.0);
cairo_clip (cr);
draw (cr, SIZE, SIZE);
} cairo_restore (cr);
/* Then draw the bottom half in a separate group,
* (exposing a bug in 1.6.4 with the group not being
* rendered with the correct fallback resolution). */
cairo_save (cr); {
cairo_rectangle (cr, 0, SIZE / 2.0, SIZE, SIZE / 2.0);
cairo_clip (cr);
cairo_push_group (cr); {
draw (cr, SIZE, SIZE);
} cairo_pop_group_to_source (cr);
cairo_paint (cr);
} cairo_restore (cr);
status = cairo_status (cr);
cairo_destroy (cr);
pass = FALSE;
if (status) {
cairo_test_log (ctx, "Error: Failed to create target surface: %s\n",
cairo_status_to_string (status));
ret = CAIRO_TEST_FAILURE;
} else {
/* extract the image and compare it to our reference */
if (! check_result (ctx, target, test_name, base_name, surface))
ret = CAIRO_TEST_FAILURE;
else
pass = TRUE;
}
cairo_surface_destroy (surface);
if (target->cleanup)
target->cleanup (closure);
free (base_name);
free (test_name);
if (pass) {
printf ("PASS\n");
} else {
printf ("FAIL\n");
}
fflush (stdout);
}
}
return ret;
}
开发者ID:Yasha,项目名称:cairo-gral,代码行数:101,代码来源:fallback-resolution.c
示例6: do_draw_map
void do_draw_map (cairo_t * cr, GdkRectangle * area, unsigned int layerflags)
{
int i;
int dx, dy;
int x = area->x;
int y = area->y;
int w = area->width;
int h = area->height;
/*cairo_arc (cr, x + 10, y + 10 ,10, 0, 2 * 3.14);
cairo_set_source_rgb (cr, 1, 1, 1);
cairo_fill_preserve (cr);
cairo_set_source_rgb (cr, 0, 0, 0);
cairo_stroke (cr); */
if (layerflags & MAGIC_PINK_FLAG)
cairo_set_source_rgb (cr, 1, 0, 1);
else
cairo_set_source_rgb (cr, 0, 0, 0);
cairo_rectangle (cr, x, y, w, h);
cairo_fill (cr);
cairo_select_font_face (cr, "sans", CAIRO_FONT_SLANT_NORMAL,
CAIRO_FONT_WEIGHT_NORMAL);
cairo_set_font_size (cr, 12);
x /= 16;
y /= 16;
w /= 16;
h /= 16;
w += 2;
h += 2;
w = w + x > gmap.xsize ? gmap.xsize - x : w;
h = h + y > gmap.ysize ? gmap.ysize - y : h;
/* This loop will draw everything within the view-window */
for (dy = y; dy < h + y; dy++) {
for (dx = x; dx < w + x; dx++) {
i = (dy * gmap.xsize) + dx;
if (layerflags & LAYER_1_FLAG && map[i]) {
cairo_set_source_surface (cr, gdk_icons[map[i]], dx * 16, dy * 16);
cairo_paint (cr);
}
if (layerflags & LAYER_2_FLAG && b_map[i]) {
cairo_set_source_surface (cr, gdk_icons[b_map[i]], dx * 16,
dy * 16);
cairo_paint (cr);
}
if (layerflags & LAYER_3_FLAG && f_map[i]) {
cairo_set_source_surface (cr, gdk_icons[f_map[i]], dx * 16,
dy * 16);
cairo_paint (cr);
}
if (layerflags & SHADOW_FLAG && sh_map[i]
&& sh_map[i] < MAX_SHADOWS) {
cairo_set_source_surface (cr, gdk_shadows[sh_map[i]], dx * 16,
dy * 16);
cairo_paint (cr);
}
if (layerflags & OBSTACLES_FLAG && o_map[i]
&& o_map[i] <= MAX_OBSTACLES) {
switch (o_map[i]) {
case 1: // everything
cairo_set_source_rgba (cr, 1, 1, 1, 0.5);
cairo_rectangle (cr, dx * 16, dy * 16, 16, 16);
break;
case 2: // up
cairo_set_source_rgba (cr, 1, 1, 1, 0.6);
cairo_rectangle (cr, dx * 16, dy * 16, 16, 4);
break;
case 3: // right
cairo_set_source_rgba (cr, 1, 1, 1, 0.6);
cairo_rectangle (cr, dx * 16 + 12, dy * 16, 4, 16);
break;
case 4: // down
cairo_set_source_rgba (cr, 1, 1, 1, 0.6);
cairo_rectangle (cr, dx * 16, dy * 16 + 12, 16, 4);
break;
case 5: // left
cairo_set_source_rgba (cr, 1, 1, 1, 0.6);
cairo_rectangle (cr, dx * 16, dy * 16, 4, 16);
break;
default:
cairo_set_source_rgba (cr, 1, 0, 0, 0.5);
cairo_rectangle (cr, dx * 16, dy * 16, 16, 16);
break;
}
cairo_fill (cr);
}
if (layerflags & ZONES_FLAG && z_map[i]) {
cairo_set_source_rgba (cr, 0.3, 0.3, 0.5, 0.5);
cairo_rectangle (cr, dx * 16, dy * 16, 16, 16);
cairo_fill (cr);
cairo_set_source_rgb (cr, 1, 1, 1);
char *s = g_strdup_printf ("%d", z_map[i]);
cairo_text_extents_t extents;
cairo_text_extents (cr, s, &extents);
cairo_move_to (cr,
dx * 16 + 8 - extents.width / 2 -
extents.x_bearing,
dy * 16 + 8 - extents.height / 2 -
//.........这里部分代码省略.........
开发者ID:rj76,项目名称:kq,代码行数:101,代码来源:mapedit2.c
示例7: draw_unlock_indicator
static void draw_unlock_indicator() {
/* Initialise the surface if not yet done */
if (unlock_indicator_surface == NULL) {
button_diameter_physical = ceil(scaling_factor() * BUTTON_DIAMETER);
DEBUG("scaling_factor is %.f, physical diameter is %d px\n",
scaling_factor(), button_diameter_physical);
unlock_indicator_surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, button_diameter_physical, button_diameter_physical);
}
cairo_t *ctx = cairo_create(unlock_indicator_surface);
/* clear the surface */
cairo_save(ctx);
cairo_set_operator(ctx, CAIRO_OPERATOR_CLEAR);
cairo_paint(ctx);
cairo_restore(ctx);
if (unlock_state >= STATE_KEY_PRESSED && unlock_indicator) {
cairo_scale(ctx, scaling_factor(), scaling_factor());
/* Draw a (centered) circle with transparent background. */
cairo_set_line_width(ctx, 10.0);
cairo_arc(ctx,
BUTTON_CENTER /* x */,
BUTTON_CENTER /* y */,
BUTTON_RADIUS /* radius */,
0 /* start */,
2 * M_PI /* end */);
/* Use the appropriate color for the different PAM states
* (currently verifying, wrong password, or default) */
switch (pam_state) {
case STATE_PAM_VERIFY:
cairo_set_source_rgba(ctx, 0, 114.0/255, 255.0/255, 0.75);
break;
case STATE_PAM_WRONG:
cairo_set_source_rgba(ctx, 250.0/255, 0, 0, 0.75);
break;
default:
cairo_set_source_rgba(ctx, 0, 0, 0, 0.75);
break;
}
cairo_fill_preserve(ctx);
switch (pam_state) {
case STATE_PAM_VERIFY:
cairo_set_source_rgb(ctx, 51.0/255, 0, 250.0/255);
break;
case STATE_PAM_WRONG:
cairo_set_source_rgb(ctx, 125.0/255, 51.0/255, 0);
break;
case STATE_PAM_IDLE:
cairo_set_source_rgb(ctx, 51.0/255, 125.0/255, 0);
break;
}
cairo_stroke(ctx);
/* Draw an inner seperator line. */
cairo_set_source_rgb(ctx, 0, 0, 0);
cairo_set_line_width(ctx, 2.0);
cairo_arc(ctx,
BUTTON_CENTER /* x */,
BUTTON_CENTER /* y */,
BUTTON_RADIUS - 5 /* radius */,
0,
2 * M_PI);
cairo_stroke(ctx);
cairo_set_line_width(ctx, 10.0);
/* Display a (centered) text of the current PAM state. */
char *text = NULL;
/* We don't want to show more than a 3-digit number. */
char buf[4];
cairo_set_source_rgb(ctx, 0, 0, 0);
cairo_set_font_size(ctx, 28.0);
switch (pam_state) {
case STATE_PAM_VERIFY:
text = "verifying…";
break;
case STATE_PAM_WRONG:
text = "wrong!";
break;
default:
if (show_failed_attempts && failed_attempts > 0){
if (failed_attempts > 999) {
text = "> 999";
} else {
snprintf(buf, sizeof(buf), "%d", failed_attempts);
text = buf;
}
cairo_set_source_rgb(ctx, 1, 0, 0);
cairo_set_font_size(ctx, 32.0);
}
break;
}
if (text) {
cairo_text_extents_t extents;
double x, y;
//.........这里部分代码省略.........
开发者ID:jlesquembre,项目名称:i3lock-blur,代码行数:101,代码来源:unlock_indicator.c
示例8: DrawTrayWindow
void DrawTrayWindow(TrayWindow* trayWindow)
{
FcitxClassicUI *classicui = trayWindow->owner;
FcitxSkin *sc = &classicui->skin;
SkinImage *image;
int f_state;
if (!classicui->bUseTrayIcon)
return;
if (FcitxInstanceGetCurrentState(classicui->owner) == IS_ACTIVE)
f_state = ACTIVE_ICON;
else
f_state = INACTIVE_ICON;
cairo_t *c;
cairo_surface_t *png_surface ;
if (!trayWindow->bTrayMapped)
return;
/* 画png */
if (f_state) {
image = LoadImage(sc, sc->skinTrayIcon.active, true);
} else {
image = LoadImage(sc, sc->skinTrayIcon.inactive, true);
}
if (image == NULL)
return;
png_surface = image->image;
c = cairo_create(trayWindow->cs);
cairo_set_source_rgba(c, 0, 0, 0, 0);
cairo_set_operator(c, CAIRO_OPERATOR_SOURCE);
cairo_paint(c);
do {
if (png_surface) {
int w = cairo_image_surface_get_width(png_surface);
int h = cairo_image_surface_get_height(png_surface);
if (w == 0 || h == 0)
break;
double scaleW = 1.0, scaleH = 1.0;
if (w > trayWindow->size || h > trayWindow->size)
{
scaleW = ((double) trayWindow->size) / w;
scaleH = ((double) trayWindow->size) / h;
if (scaleW > scaleH)
scaleH = scaleW;
else
scaleW = scaleH;
}
int aw = scaleW * w;
int ah = scaleH * h;
cairo_scale(c, scaleW, scaleH);
cairo_set_source_surface(c, png_surface, (trayWindow->size - aw) / 2 , (trayWindow->size - ah) / 2);
cairo_set_operator(c, CAIRO_OPERATOR_OVER);
cairo_paint_with_alpha(c, 1);
}
} while(0);
cairo_destroy(c);
XVisualInfo* vi = trayWindow->visual.visual ? &trayWindow->visual : NULL;
if (!(vi && vi->visual)) {
XClearArea(trayWindow->owner->dpy, trayWindow->window, 0, 0, trayWindow->size, trayWindow->size, False);
}
c = cairo_create(trayWindow->cs_x);
if (vi && vi->visual) {
cairo_set_source_rgba(c, 0, 0, 0, 0);
cairo_set_operator(c, CAIRO_OPERATOR_SOURCE);
cairo_paint(c);
}
cairo_set_operator(c, CAIRO_OPERATOR_OVER);
cairo_set_source_surface(c, trayWindow->cs, 0, 0);
cairo_rectangle(c, 0, 0, trayWindow->size, trayWindow->size);
cairo_clip(c);
cairo_paint(c);
cairo_destroy(c);
}
开发者ID:niubenben,项目名称:fcitx,代码行数:79,代码来源:TrayWindow.c
示例9: _render_setup
//.........这里部分代码省略.........
cairo_fill(cr);
/* walk through all hardware LED adapters */
LedHardware *hw;
for(hw = led_setup_get_hardware(s);
hw; hw = led_hardware_list_get_next(hw))
{
/* calculate offset of complete setup */
LedTile *t;
double xOff = 0, yOff = 0;
for(t = led_hardware_get_tile(hw);
t; t = led_tile_list_get_next(t))
{
double xOffT, yOffT;
tile_calc_render_offset(led_tile_get_privdata(t),
(double) w, (double) h,
&xOffT, &yOffT);
xOff = MIN(xOff, xOffT);
yOff = MIN(yOff, yOffT);
}
renderer_set_offset(setup_get_renderer(),
xOff * ui_renderer_scale_factor(),
yOff * ui_renderer_scale_factor());
/* Walk all tiles of this hardware & draw their surface */
for(t = led_hardware_get_tile(hw);
t; t = led_tile_list_get_next(t))
{
/** @todo check for visibility? */
/* get surface from tile */
NiftyconfTile *tile =
(NiftyconfTile *) led_tile_get_privdata(t);
/* get surface */
cairo_surface_t *tsurface = renderer_get_surface
(tile_get_renderer(tile));
/* compensate child tiles' offset */
double xOffT, yOffT;
renderer_get_offset(tile_get_renderer(tile), &xOffT,
&yOffT);
cairo_translate(cr, xOffT, yOffT);
/* compensate setup offset */
cairo_translate(cr,
-xOff * ui_renderer_scale_factor(),
-yOff * ui_renderer_scale_factor());
/* move to x/y */
LedFrameCord x, y;
led_tile_get_pos(t, &x, &y);
cairo_translate(cr,
((double) x) *
ui_renderer_scale_factor(),
((double) y) *
ui_renderer_scale_factor());
/* rotate around pivot */
double pX, pY;
led_tile_get_pivot(t, &pX, &pY);
cairo_translate(cr,
pX * ui_renderer_scale_factor(),
pY * ui_renderer_scale_factor());
cairo_rotate(cr, led_tile_get_rotation(t));
cairo_translate(cr,
-pX * ui_renderer_scale_factor(),
-pY * ui_renderer_scale_factor());
/* draw surface */
cairo_set_source_surface(cr, tsurface, 0, 0);
/* disable filtering */
cairo_pattern_set_filter(cairo_get_source(cr),
ui_renderer_filter());
/* disable antialiasing */
cairo_set_antialias(cr, ui_renderer_antialias());
/* render surface */
cairo_paint(cr);
/* reset transformation matrix */
cairo_identity_matrix(cr);
}
/* Draw chain of this hardware */
/* s =
* chain_get_surface(led_chain_get_privdata(led_hardware_get_chain(h)));
* cairo_set_source_surface(cr, s, 0, 0); cairo_paint(cr); */
}
cairo_destroy(cr);
return NFT_SUCCESS;
}
开发者ID:niftylight,项目名称:niftyconf,代码行数:101,代码来源:renderer-setup.c
示例10: on_screenshot_finished
static void
on_screenshot_finished (GObject *source,
GAsyncResult *res,
gpointer user_data)
{
CcBackgroundPanel *panel = user_data;
CcBackgroundPanelPrivate *priv = panel->priv;
GError *error;
GdkRectangle rect;
GtkWidget *widget;
GdkPixbuf *pixbuf;
cairo_surface_t *surface;
cairo_t *cr;
int width;
int height;
error = NULL;
g_dbus_connection_call_finish (panel->priv->connection,
res,
&error);
if (error != NULL) {
g_debug ("Unable to get screenshot: %s",
error->message);
g_error_free (error);
/* fallback? */
goto out;
}
pixbuf = gdk_pixbuf_new_from_file (panel->priv->screenshot_path, &error);
if (error != NULL)
{
g_debug ("Unable to use GNOME Shell's builtin screenshot interface: %s",
error->message);
g_error_free (error);
goto out;
}
width = gdk_pixbuf_get_width (pixbuf);
height = gdk_pixbuf_get_height (pixbuf);
surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
width, height);
cr = cairo_create (surface);
gdk_cairo_set_source_pixbuf (cr, pixbuf, 0, 0);
cairo_paint (cr);
g_object_unref (pixbuf);
/* clear the workarea */
widget = WID ("background-desktop-drawingarea");
gdk_screen_get_monitor_workarea (gtk_widget_get_screen (widget), 0, &rect);
cairo_save (cr);
cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR);
cairo_rectangle (cr, rect.x, rect.y, rect.width, rect.height);
cairo_fill (cr);
cairo_restore (cr);
g_clear_object (&panel->priv->display_screenshot);
panel->priv->display_screenshot = gdk_pixbuf_get_from_surface (surface,
0, 0,
width,
height);
/* remove the temporary file created by the shell */
g_unlink (panel->priv->screenshot_path);
g_free (priv->screenshot_path);
priv->screenshot_path = NULL;
cairo_destroy (cr);
cairo_surface_destroy (surface);
out:
update_display_preview (panel);
}
开发者ID:tigersoldier,项目名称:gnome-control-center,代码行数:73,代码来源:cc-background-panel.c
示例11: RedrawAudioModulePanel
static gboolean RedrawAudioModulePanel (GtkWidget * viewport, GdkEvent * event, AudioModulePanel * action) {
cairo_t * cr = gdk_cairo_create (gtk_widget_get_window (viewport));
if (action -> background_image != 0) {cairo_set_source_surface (cr, action -> background_image, 0, 0); cairo_paint (cr);}
action -> redraw (cr);
cairo_destroy (cr);
return FALSE;
}
开发者ID:HERCsMusicSystems,项目名称:dev,代码行数:7,代码来源:lunar_prolog_panel_base.cpp
示例12: eng_image_draw
static void
eng_image_draw(void *data, void *context, void *surface, void *image, int src_x, int src_y, int src_w, int src_h, int dst_x, int dst_y, int dst_w, int dst_h, int smooth)
{
Render_Engine *re;
Evas_Cairo_Context *ctxt;
Evas_Cairo_Image *im;
DATA32 *pix;
re = (Render_Engine *)data;
ctxt = (Evas_Cairo_Context *)context;
if (!image) return;
im = image;
evas_common_load_image_data_from_file(im->im);
pix = im->im->image->data;
if (pix)
{
if (!im->surface)
{
im->mulpix = malloc(im->im->image->w * im->im->image->h * sizeof(DATA32));
if (im->mulpix)
{
int i, n;
DATA32 *p;
n = im->im->image->w * im->im->image->h;
p = im->mulpix;
for (i = 0; i < n; i++)
{
int a;
a = A_VAL(pix);
R_VAL(p) = (R_VAL(pix) * a) / 255;
G_VAL(p) = (G_VAL(pix) * a) / 255;
B_VAL(p) = (B_VAL(pix) * a) / 255;
A_VAL(p) = a;
p++;
pix++;
}
im->surface = cairo_image_surface_create_for_data(im->mulpix,
CAIRO_FORMAT_ARGB32,
im->im->image->w,
im->im->image->h,
0);
im->pattern = cairo_pattern_create_for_surface(im->surface);
}
}
if (smooth)
cairo_pattern_set_filter(im->pattern, CAIRO_FILTER_BILINEAR);
else
cairo_pattern_set_filter(im->pattern, CAIRO_FILTER_NEAREST);
cairo_save(ctxt->cairo);
cairo_translate(ctxt->cairo, dst_x, dst_y);
cairo_scale(ctxt->cairo,
(double)src_w / (double)dst_w,
(double)src_h / (double)dst_h);
cairo_move_to(ctxt->cairo, 0, 0);
// cairo_set_rgb_color(re->win->cairo,
// (double)(R_VAL(((RGBA_Draw_Context *)context)->col.col)) / 255.0,
// (double)(R_VAL(((RGBA_Draw_Context *)context)->col.col)) / 255.0,
// (double)(R_VAL(((RGBA_Draw_Context *)context)->col.col)) / 255.0);
// cairo_set_alpha(re->win->cairo,
// (double)(A_VAL(((RGBA_Draw_Context *)context)->col.col)) / 255.0);
cairo_set_source_surface(ctxt->cairo,
im->surface,
im->im->image->w,
im->im->image->h);
cairo_paint(ctxt->cairo);
cairo_restore(ctxt->cairo);
}
}
开发者ID:nashidau,项目名称:Evas-Next,代码行数:72,代码来源:evas_engine.c
示例13: image_set_from_surface
static void
image_set_from_surface (GtkImage *gtkimage,
cairo_surface_t *surface)
{
GdkPixbuf *pixbuf;
cairo_surface_t *image;
cairo_t *cr;
gboolean has_alpha;
gint width, height;
cairo_format_t surface_format;
gint pixbuf_n_channels;
gint pixbuf_rowstride;
guchar *pixbuf_pixels;
gint x, y;
width = cairo_image_surface_get_width (surface);
height = cairo_image_surface_get_height (surface);
surface_format = cairo_image_surface_get_format (surface);
has_alpha = (surface_format == CAIRO_FORMAT_ARGB32);
pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB,
TRUE, 8,
width, height);
pixbuf_n_channels = gdk_pixbuf_get_n_channels (pixbuf);
pixbuf_rowstride = gdk_pixbuf_get_rowstride (pixbuf);
pixbuf_pixels = gdk_pixbuf_get_pixels (pixbuf);
image = cairo_image_surface_create_for_data (pixbuf_pixels,
surface_format,
width, height,
pixbuf_rowstride);
cr = cairo_create (image);
cairo_set_source_surface (cr, surface, 0, 0);
if (has_alpha)
cairo_mask_surface (cr, surface, 0, 0);
else
cairo_paint (cr);
cairo_destroy (cr);
cairo_surface_destroy (image);
for (y = 0; y < height; y++) {
guchar *p = pixbuf_pixels + y * pixbuf_rowstride;
for (x = 0; x < width; x++) {
guchar tmp;
#if G_BYTE_ORDER == G_LITTLE_ENDIAN
tmp = p[0];
p[0] = p[2];
p[2] = tmp;
p[3] = (has_alpha) ? p[3] : 0xff;
#else
tmp = p[0];
p[0] = (has_alpha) ? p[3] : 0xff;
p[3] = p[2];
p[2] = p[1];
p[1] = tmp;
#endif
p += pixbuf_n_channels;
}
}
gtk_image_set_from_pixbuf (gtkimage, pixbuf);
g_object_unref (pixbuf);
}
开发者ID:Distrotech,项目名称:poppler,代码行数:68,代码来源:page.c
示例14: dt_iop_zonesystem_preview_expose
static gboolean
dt_iop_zonesystem_preview_expose (GtkWidget *widget, GdkEventExpose *event, dt_iop_module_t *self)
{
const int inset = 2;
int width = widget->allocation.width, height = widget->allocation.height;
dt_iop_zonesystem_gui_data_t *g = (dt_iop_zonesystem_gui_data_t *)self->gui_data;
dt_iop_zonesystem_params_t *p = (dt_iop_zonesystem_params_t *)self->params;
cairo_surface_t *cst = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height);
cairo_t *cr = cairo_create(cst);
/* clear background */
GtkStateType state = gtk_widget_get_state(self->expander);
GtkStyle *style = gtk_widget_get_style(self->expander);
cairo_set_source_rgb (cr, style->bg[state].red/65535.0, style->bg[state].green/65535.0, style->bg[state].blue/65535.0);
cairo_paint (cr);
width -= 2*inset;
height -= 2*inset;
cairo_translate(cr, inset, inset);
dt_pthread_mutex_lock(&g->lock);
if( g->preview_buffer && self->enabled)
{
/* calculate the zonemap */
float zonemap[MAX_ZONE_SYSTEM_SIZE]= {-1};
_iop_zonesystem_calculate_zonemap (p,zonemap);
/* let's generate a pixbuf from pixel zone buffer */
guchar *image = g_malloc ((g->preview_width*g->preview_height)*4);
for (int k=0; k<g->preview_width*g->preview_height; k++)
{
int zone = 255*CLIP (((1.0/(p->size-1))*g->preview_buffer[k]));
image[4*k+2] = (g->hilite_zone && g->preview_buffer[k]==g->zone_under_mouse)?255:zone;
image[4*k+1] = (g->hilite_zone && g->preview_buffer[k]==g->zone_under_mouse)?255:zone;
image[4*k+0] = (g->hilite_zone && g->preview_buffer[k]==g->zone_under_mouse)?0:zone;
}
dt_pthread_mutex_unlock(&g->lock);
const int wd = g->preview_width, ht = g->preview_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 (image, 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);
cairo_rectangle(cr, 1, 1, wd-2, ht-2);
cairo_set_source_surface (cr, surface, 0, 0);
cairo_pattern_set_filter(cairo_get_source(cr), CAIRO_FILTER_GOOD);
cairo_fill_preserve(cr);
cairo_surface_destroy (surface);
cairo_set_line_width(cr, 1.0);
cairo_set_source_rgb(cr, .1, .1, .1);
cairo_stroke(cr);
g_free(image);
}
else
dt_pthread_mutex_unlock(&g->lock);
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:itarozzi,项目名称:darktable,代码行数:72,代码来源:zonesystem.c
示例15: locate_pointer_paint
static void
locate_pointer_paint (GsdLocatePointerData *data,
cairo_t *cr,
gboolean composite)
{
GdkRGBA color;
gdouble progress, circle_progress;
gint width, height, i;
GtkStyleContext *context;
progress = data->progress;
width = gdk_window_get_width (data->window);
height = gdk_window_get_height (data->window);
context = gtk_widget_get_style_context (data->widget);
gtk_style_context_get_background_color (context, GTK_STATE_FLAG_SELECTED, &color);
cairo_set_source_rgba (cr, 1., 1., 1., 0.);
cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
cairo_paint (cr);
for (i = 0; i <= N_CIRCLES; i++)
{
if (progress < 0.)
break;
circle_progress = MIN (1., (progress * 2));
progress -= CIRCLES_PROGRESS_INTERVAL;
if (circle_progress >= 1.)
continue;
if (composite)
{
cairo_set_source_rgba (cr,
color.red,
color.green,
color.blue,
1 - circle_progress);
cairo_arc (cr,
width / 2,
|
请发表评论