亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? cairotwisted.c

?? linux
?? C
字號:
/* example to use pangocairo to render text projected on a path *//* Written by Behdad Esfahbod, 2006.  Not copyrighted, in public domain. */#include <math.h>#include <stdlib.h>#include <pango/pangocairo.h>void fancy_cairo_stroke (cairo_t *cr);void fancy_cairo_stroke_preserve (cairo_t *cr);static doubletwo_points_distance (cairo_path_data_t *a, cairo_path_data_t *b){  double dx, dy;  dx = b->point.x - a->point.x;  dy = b->point.y - a->point.y;  return sqrt (dx * dx + dy * dy);}typedef double parametrization_t;static parametrization_t *parametrize_path (cairo_path_t *path){  int i;  cairo_path_data_t *data, current_point;  parametrization_t *parametrization;  parametrization = malloc (path->num_data * sizeof (parametrization[0]));  for (i=0; i < path->num_data; i += path->data[i].header.length) {    data = &path->data[i];    parametrization[i] = 0.0;    switch (data->header.type) {    case CAIRO_PATH_MOVE_TO:	current_point = data[1];	break;    case CAIRO_PATH_LINE_TO:	parametrization[i] = two_points_distance (&current_point, &data[1]);	current_point = data[1];	break;    case CAIRO_PATH_CURVE_TO:	/*	parametrization[i] = curve_length (current_point.point.x, current_point.point.x,					   data[1].point.x, data[1].point.y,					   data[2].point.x, data[2].point.y,					   data[3].point.x, data[3].point.y);					   */	parametrization[i] = two_points_distance (&current_point, &data[1]);	parametrization[i] += two_points_distance (&data[1], &data[2]);	parametrization[i] += two_points_distance (&data[2], &data[3]);	current_point = data[3];	break;    case CAIRO_PATH_CLOSE_PATH:	break;    }  }  return parametrization;}static void_fancy_cairo_stroke (cairo_t *cr, cairo_bool_t preserve){  int i;  double line_width;  cairo_path_t *path;  cairo_path_data_t *data;  const double dash[] = {10, 10};  cairo_save (cr);  cairo_set_source_rgb (cr, 1.0, 0.0, 0.0);  line_width = cairo_get_line_width (cr);  path = cairo_copy_path (cr);  cairo_new_path (cr);  cairo_save (cr);  cairo_set_line_width (cr, line_width / 3);  cairo_set_dash (cr, dash, G_N_ELEMENTS (dash), 0);  for (i=0; i < path->num_data; i += path->data[i].header.length) {    data = &path->data[i];    switch (data->header.type) {    case CAIRO_PATH_MOVE_TO:    case CAIRO_PATH_LINE_TO:	cairo_move_to (cr, data[1].point.x, data[1].point.y);	break;    case CAIRO_PATH_CURVE_TO:	cairo_line_to (cr, data[1].point.x, data[1].point.y);	cairo_move_to (cr, data[2].point.x, data[2].point.y);	cairo_line_to (cr, data[3].point.x, data[3].point.y);	break;    case CAIRO_PATH_CLOSE_PATH:	break;    }  }  cairo_stroke (cr);  cairo_restore (cr);  cairo_save (cr);  cairo_set_line_width (cr, line_width * 4);  cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND);  for (i=0; i < path->num_data; i += path->data[i].header.length) {    data = &path->data[i];    switch (data->header.type) {    case CAIRO_PATH_MOVE_TO:	cairo_move_to (cr, data[1].point.x, data[1].point.y);	break;    case CAIRO_PATH_LINE_TO:	cairo_rel_line_to (cr, 0, 0);	cairo_move_to (cr, data[1].point.x, data[1].point.y);	break;    case CAIRO_PATH_CURVE_TO:	cairo_rel_line_to (cr, 0, 0);	cairo_move_to (cr, data[1].point.x, data[1].point.y);	cairo_rel_line_to (cr, 0, 0);	cairo_move_to (cr, data[2].point.x, data[2].point.y);	cairo_rel_line_to (cr, 0, 0);	cairo_move_to (cr, data[3].point.x, data[3].point.y);	break;    case CAIRO_PATH_CLOSE_PATH:	cairo_rel_line_to (cr, 0, 0);	break;    }  }  cairo_rel_line_to (cr, 0, 0);  cairo_stroke (cr);  cairo_restore (cr);  for (i=0; i < path->num_data; i += path->data[i].header.length) {    data = &path->data[i];    switch (data->header.type) {    case CAIRO_PATH_MOVE_TO:	cairo_move_to (cr, data[1].point.x, data[1].point.y);	break;    case CAIRO_PATH_LINE_TO:	cairo_line_to (cr, data[1].point.x, data[1].point.y);	break;    case CAIRO_PATH_CURVE_TO:	cairo_curve_to (cr, data[1].point.x, data[1].point.y,			    data[2].point.x, data[2].point.y,			    data[3].point.x, data[3].point.y);	break;    case CAIRO_PATH_CLOSE_PATH:	cairo_close_path (cr);	break;    }  }  cairo_stroke (cr);  if (preserve)    cairo_append_path (cr, path);  cairo_path_destroy (path);  cairo_restore (cr);}voidfancy_cairo_stroke (cairo_t *cr){  _fancy_cairo_stroke (cr, FALSE);}voidfancy_cairo_stroke_preserve (cairo_t *cr){  _fancy_cairo_stroke (cr, TRUE);}typedef void (*transform_point_func_t) (void *closure, double *x, double *y);static voidtransform_path (cairo_path_t *path, transform_point_func_t f, void *closure){  int i;  cairo_path_data_t *data;  for (i=0; i < path->num_data; i += path->data[i].header.length) {    data = &path->data[i];    switch (data->header.type) {    case CAIRO_PATH_CURVE_TO:      f (closure, &data[3].point.x, &data[3].point.y);      f (closure, &data[2].point.x, &data[2].point.y);    case CAIRO_PATH_MOVE_TO:    case CAIRO_PATH_LINE_TO:      f (closure, &data[1].point.x, &data[1].point.y);      break;    case CAIRO_PATH_CLOSE_PATH:      break;    }  }}typedef struct {  cairo_path_t *path;  parametrization_t *parametrization;} parametrized_path_t;static voidpoint_on_path (parametrized_path_t *param,	       double *x, double *y){  int i;  double ratio, oldy = *y, d = *x, dx, dy;  cairo_path_data_t *data, current_point;  cairo_path_t *path = param->path;  parametrization_t *parametrization = param->parametrization;  for (i=0; i + path->data[i].header.length < path->num_data &&	    (d > parametrization[i] ||	     path->data[i].header.type == CAIRO_PATH_MOVE_TO);       i += path->data[i].header.length) {    d -= parametrization[i];    data = &path->data[i];    switch (data->header.type) {    case CAIRO_PATH_MOVE_TO:	current_point = data[1];	break;    case CAIRO_PATH_LINE_TO:	current_point = data[1];	break;    case CAIRO_PATH_CURVE_TO:	current_point = data[3];	break;    case CAIRO_PATH_CLOSE_PATH:	break;    }  }  data = &path->data[i];  switch (data->header.type) {  case CAIRO_PATH_MOVE_TO:      break;  case CAIRO_PATH_LINE_TO:      ratio = d / parametrization[i];      *x = current_point.point.x * (1 - ratio) + data[1].point.x * ratio;      *y = current_point.point.y * (1 - ratio) + data[1].point.y * ratio;      dx = -(current_point.point.x - data[1].point.x);      dy = -(current_point.point.y - data[1].point.y);      d = oldy;      ratio = d / parametrization[i];      /*ratio = d / sqrt (dx * dx + dy * dy);*/      *x += -dy * ratio;      *y +=  dx * ratio;      break;  case CAIRO_PATH_CURVE_TO:      ratio = d / parametrization[i];      *x = current_point.point.x * (1 - ratio) * (1 - ratio) * (1 - ratio)	 + 3 *   data[1].point.x * (1 - ratio) * (1 - ratio) * ratio	 + 3 *   data[2].point.x * (1 - ratio) *      ratio  * ratio	 +       data[3].point.x *      ratio  *      ratio  * ratio;      *y = current_point.point.y * (1 - ratio) * (1 - ratio) * (1 - ratio)	 + 3 *   data[1].point.y * (1 - ratio) * (1 - ratio) * ratio	 + 3 *   data[2].point.y * (1 - ratio) *      ratio  * ratio	 +       data[3].point.y *      ratio  *      ratio  * ratio;      dx =-3 * current_point.point.x * (1 - ratio) * (1 - ratio)	 + 3 *       data[1].point.x * (1 - 4 * ratio + 3 * ratio * ratio)	 + 3 *       data[2].point.x * (    2 * ratio - 3 * ratio * ratio)	 + 3 *       data[3].point.x *      ratio  *      ratio;      dy =-3 * current_point.point.y * (1 - ratio) * (1 - ratio)	 + 3 *       data[1].point.y * (1 - 4 * ratio + 3 * ratio * ratio)	 + 3 *       data[2].point.y * (    2 * ratio - 3 * ratio * ratio)	 + 3 *       data[3].point.y *      ratio  *      ratio;      d = oldy;      ratio = d / sqrt (dx * dx + dy * dy);      *x += -dy * ratio;      *y +=  dx * ratio;      break;  case CAIRO_PATH_CLOSE_PATH:      break;  }}static voidmap_path_onto (cairo_t *cr, cairo_path_t *path){  cairo_path_t *current_path;  parametrized_path_t param;  param.path = path;  param.parametrization = parametrize_path (path);  current_path = cairo_copy_path (cr);  cairo_new_path (cr);  transform_path (current_path,		  (transform_point_func_t) point_on_path, &param);  cairo_append_path (cr, current_path);}typedef void (*draw_path_func_t) (cairo_t *cr);static voiddraw_text (cairo_t *cr,	   double x,	   double y,	   const char *font,	   const char *text){  PangoLayout *layout;  PangoLayoutLine *line;  PangoFontDescription *desc;  cairo_font_options_t *font_options;  font_options = cairo_font_options_create ();  cairo_font_options_set_hint_style (font_options, CAIRO_HINT_STYLE_NONE);  cairo_font_options_set_hint_metrics (font_options, CAIRO_HINT_METRICS_OFF);  cairo_set_font_options (cr, font_options);  cairo_font_options_destroy (font_options);  layout = pango_cairo_create_layout (cr);  desc = pango_font_description_from_string (font);  pango_layout_set_font_description (layout, desc);  pango_font_description_free (desc);  pango_layout_set_text (layout, text, -1);  /* Use pango_layout_get_line() instead of pango_layout_get_line_readonly()   * for older versions of pango   */  line = pango_layout_get_line_readonly (layout, 0);  cairo_move_to (cr, x, y);  pango_cairo_layout_line_path (cr, line);  g_object_unref (layout);}static voiddraw_twisted (cairo_t *cr,	      double x,	      double y,	      const char *font,	      const char *text){  cairo_path_t *path;  cairo_save (cr);  /* Decrease tolerance a bit, since it's going to be magnified */  cairo_set_tolerance (cr, 0.05);  path = cairo_copy_path_flat (cr);  /*path = cairo_copy_path (cr);*/  cairo_new_path (cr);  draw_text (cr, x, y, font, text);  map_path_onto (cr, path);  cairo_fill_preserve (cr);  cairo_save (cr);  cairo_set_source_rgb (cr, 0.1, 0.1, 0.1);  cairo_stroke (cr);  cairo_restore (cr);  cairo_restore (cr);}static voiddraw_dream (cairo_t *cr){  cairo_move_to (cr, 50, 650);  cairo_rel_line_to (cr, 250, 50);  cairo_rel_curve_to (cr, 250, 50, 600, -50, 600, -250);  cairo_rel_curve_to (cr, 0, -400, -300, -100, -800, -300);  cairo_set_line_width (cr, 1.5);  cairo_set_source_rgba (cr, 0.3, 0.3, 1.0, 0.3);  fancy_cairo_stroke_preserve (cr);  draw_twisted (cr,		0, 0,		"Serif 72",		"It was a dream... Oh Just a dream...");}static voiddraw_wow (cairo_t *cr){  cairo_move_to (cr, 400, 780);  cairo_rel_curve_to (cr, 50, -50, 150, -50, 200, 0);  cairo_scale (cr, 1.0, 2.0);  cairo_set_line_width (cr, 2.0);  cairo_set_source_rgba (cr, 0.3, 1.0, 0.3, 1.0);  fancy_cairo_stroke_preserve (cr);  draw_twisted (cr,		-20, -150,		"Serif 60",		"WOW!");}int main (int argc, char **argv){  cairo_t *cr;  char *filename;  cairo_status_t status;  cairo_surface_t *surface;  if (argc != 2)    {      g_printerr ("Usage: cairotwisted OUTPUT_FILENAME\n");      return 1;    }  filename = argv[1];  surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,					1000, 800);  cr = cairo_create (surface);  /* cairo_scale (cr, 0.5, 0.5); */  cairo_set_source_rgb (cr, 1.0, 1.0, 1.0);  cairo_paint (cr);  draw_dream (cr);  draw_wow (cr);  cairo_destroy (cr);  status = cairo_surface_write_to_png (surface, filename);  cairo_surface_destroy (surface);  if (status != CAIRO_STATUS_SUCCESS)    {      g_printerr ("Could not save png to '%s'\n", filename);      return 1;    }  return 0;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一级久久久| 91丨九色丨蝌蚪丨老版| 国产精品影视天天线| 国产91丝袜在线播放九色| 成人网男人的天堂| 欧美性淫爽ww久久久久无| 欧美日韩一级二级三级| 欧美va在线播放| 亚洲欧美怡红院| 男人的j进女人的j一区| 国产91精品在线观看| 欧美视频一区二区三区在线观看| 精品欧美乱码久久久久久1区2区| 国产精品久久久久三级| 青青草97国产精品免费观看无弹窗版| 国产99精品视频| 欧美精品久久99久久在免费线| 久久亚洲精品国产精品紫薇| 亚洲人成网站精品片在线观看| 蜜臀av在线播放一区二区三区| 99久久er热在这里只有精品66| 日韩一二三区视频| 亚洲欧洲精品成人久久奇米网| 日韩经典一区二区| 成人网男人的天堂| 日韩精品最新网址| 亚洲综合免费观看高清完整版 | 99久久99久久精品免费观看 | 亚洲一区二区综合| 国产一区二区成人久久免费影院 | 亚洲精品欧美二区三区中文字幕| 久久99日本精品| 欧美性受xxxx黑人xyx性爽| 久久美女艺术照精彩视频福利播放| 亚洲午夜免费福利视频| 成人免费视频视频在线观看免费 | 日本视频中文字幕一区二区三区| 成人精品视频.| 欧美一级电影网站| 伊人色综合久久天天| 国产成人综合精品三级| 日韩一区二区电影在线| 亚洲成人免费视| 一本色道久久综合亚洲aⅴ蜜桃| 久久久亚洲精品一区二区三区| 日韩中文字幕av电影| 一本久道中文字幕精品亚洲嫩| 久久精品一区蜜桃臀影院| 青青草国产精品97视觉盛宴| 精品婷婷伊人一区三区三| 亚洲欧美综合色| 国产成人在线色| 久久夜色精品国产噜噜av| 免费在线一区观看| 欧美肥妇bbw| 亚洲成人精品在线观看| 91亚洲精品久久久蜜桃网站| 欧美国产日韩在线观看| 国产电影一区二区三区| 久久亚洲精品小早川怜子| 麻豆精品视频在线观看视频| 91精品国产福利在线观看| 亚洲综合免费观看高清完整版| 91丨porny丨在线| 国产精品久久久久永久免费观看| 高清在线观看日韩| 久久精品夜夜夜夜久久| 国产乱码精品一区二区三| 久久影视一区二区| 国产一区二区三区在线观看免费| 26uuu色噜噜精品一区二区| 美女视频黄免费的久久| 欧美大片国产精品| 极品少妇xxxx精品少妇偷拍| 欧美白人最猛性xxxxx69交| 美女一区二区三区在线观看| 91精品久久久久久久91蜜桃| 日韩av网站免费在线| 欧美一区二区三区播放老司机| 日韩极品在线观看| 日韩女同互慰一区二区| 国产一区二区免费看| 国产欧美一二三区| av男人天堂一区| 亚洲一区免费视频| 欧美精品色一区二区三区| 亚洲成人黄色影院| 欧美精品九九99久久| 蜜臀av在线播放一区二区三区| 精品国产91亚洲一区二区三区婷婷| 国产美女久久久久| 中文无字幕一区二区三区| 成人av电影在线观看| 尤物视频一区二区| 欧美精品第1页| 精品一区二区三区香蕉蜜桃 | 国内精品国产三级国产a久久 | www.色精品| 亚洲精品成人悠悠色影视| 欧美在线色视频| 免费人成精品欧美精品| 国产午夜精品一区二区三区嫩草| 99r精品视频| 午夜一区二区三区视频| 日韩欧美另类在线| 国产成人鲁色资源国产91色综| 亚洲情趣在线观看| 欧美久久一区二区| 国产精品99久| 亚洲精品国产第一综合99久久| 91精品国产品国语在线不卡| 狠狠色狠狠色综合系列| 国产精品久久久久毛片软件| 欧美日韩国产综合视频在线观看| 黄色资源网久久资源365| 日韩理论片网站| 欧美福利一区二区| 国产精品2024| 亚洲一级二级在线| 2020国产成人综合网| 91视视频在线观看入口直接观看www| 亚洲成va人在线观看| 国产午夜精品一区二区三区嫩草| 欧美在线高清视频| 国产乱理伦片在线观看夜一区| 亚洲一区电影777| 国产午夜亚洲精品羞羞网站| 欧美三级在线播放| 国产成人av资源| 五月婷婷色综合| 欧美高清在线一区二区| 欧美日韩久久不卡| 成人h动漫精品一区二区| 免费在线看成人av| 亚洲精品少妇30p| 久久综合久久99| 欧美日韩国产综合草草| 国产成人综合在线播放| 日韩电影在线观看一区| 亚洲欧美日韩在线| 国产午夜亚洲精品午夜鲁丝片| 91精品在线观看入口| 91老师国产黑色丝袜在线| 国产激情视频一区二区在线观看 | 91麻豆精品国产91久久久久久久久 | 国产成人精品影院| 热久久免费视频| 亚洲午夜激情网站| 国产精品福利影院| 久久综合色播五月| 在线不卡一区二区| 91免费视频网址| 粉嫩绯色av一区二区在线观看| 久久福利视频一区二区| 亚洲精品乱码久久久久久黑人| 欧美激情一二三区| 26uuu精品一区二区三区四区在线| 欧美欧美午夜aⅴ在线观看| 色综合久久综合网欧美综合网| 国产精品18久久久久久久久| 麻豆精品在线观看| 亚洲成人一区在线| 一二三四区精品视频| 亚洲欧洲成人自拍| 国产精品久久久久影院色老大 | 成人午夜大片免费观看| 激情亚洲综合在线| 日韩1区2区3区| 亚瑟在线精品视频| 亚洲国产精品麻豆| 亚洲一线二线三线久久久| 亚洲欧美一区二区三区久本道91 | 国产凹凸在线观看一区二区| 九九视频精品免费| 久久精品99国产精品| 另类小说图片综合网| 理论电影国产精品| 奇米色777欧美一区二区| 日本在线不卡视频| 日韩国产精品大片| 日本特黄久久久高潮| 男人的天堂亚洲一区| 免费高清在线视频一区·| 蜜桃精品在线观看| 久久成人久久爱| 激情欧美一区二区| 国精产品一区一区三区mba视频| 国产一区二区在线影院| 国产精品亚洲а∨天堂免在线| 国产91综合一区在线观看| 国产风韵犹存在线视精品| 成人性生交大片免费| 成人黄色软件下载| av激情成人网| 在线看国产日韩| 91精品在线免费观看| 精品国产91乱码一区二区三区| 国产日韩影视精品| 国产精品成人一区二区三区夜夜夜 | 久久99精品国产|