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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? pango-glyph-item.c

?? linux
?? C
?? 第 1 頁 / 共 2 頁
字號:
				   const char          *text){  iter->glyph_item = glyph_item;  iter->text = text;  if (LTR (glyph_item))    iter->end_glyph = 0;  else    iter->end_glyph = glyph_item->glyphs->num_glyphs - 1;  iter->end_index = glyph_item->item->offset;  iter->end_char = 0;  /* Advance onto the first cluster of the glyph item */  return _pango_glyph_item_iter_next_cluster (iter);}/** * _pango_glyph_item_iter_init_end: * @iter: pointer to a #PangoGlyphItemIter structure * @glyph_item: the glyph item that @iter points into * @text: text corresponding to the glyph item * * Initializes a #PangoGlyphItemIter structure to point to the * last cluster in a glyph item. * * Return value: %FALSE if there are no clusters in the glyph item; *  in this case, the state of @iter is undefined. **/gboolean_pango_glyph_item_iter_init_end (PangoGlyphItemIter  *iter,				 PangoGlyphItem      *glyph_item,				 const char          *text){  iter->glyph_item = glyph_item;  iter->text = text;  if (LTR (glyph_item))    iter->start_glyph = glyph_item->glyphs->num_glyphs;  else    iter->start_glyph = -1;  iter->start_index = glyph_item->item->offset + glyph_item->item->length;  iter->start_char = glyph_item->item->num_chars;  /* Advance onto the first cluster of the glyph item */  return _pango_glyph_item_iter_prev_cluster (iter);}typedef struct{  PangoGlyphItemIter iter;  GSList *segment_attrs;} ApplyAttrsState;/* Tack @attrs onto the attributes of glyph_item */static voidappend_attrs (PangoGlyphItem *glyph_item,	      GSList         *attrs){  glyph_item->item->analysis.extra_attrs =    g_slist_concat (glyph_item->item->analysis.extra_attrs, attrs);}/* Make a deep copy of a #GSList of PangoAttribute */static GSList *attr_slist_copy (GSList *attrs){  GSList *tmp_list;  GSList *new_attrs;  new_attrs = g_slist_copy (attrs);  for (tmp_list = new_attrs; tmp_list; tmp_list = tmp_list->next)    tmp_list->data = pango_attribute_copy (tmp_list->data);  return new_attrs;}/* Split the glyph item at the start of the current cluster */static PangoGlyphItem *split_before_cluster_start (ApplyAttrsState *state){  PangoGlyphItem *split_item;  int split_len = state->iter.start_index - state->iter.glyph_item->item->offset;  split_item = pango_glyph_item_split (state->iter.glyph_item, state->iter.text, split_len);  append_attrs (split_item, state->segment_attrs);  /* Adjust iteration to account for the split   */  if (LTR (state->iter.glyph_item))    {      state->iter.start_glyph -= split_item->glyphs->num_glyphs;      state->iter.end_glyph -= split_item->glyphs->num_glyphs;    }  state->iter.start_char -= split_item->item->num_chars;  state->iter.end_char -= split_item->item->num_chars;  return split_item;}/** * pango_glyph_item_apply_attrs: * @glyph_item: a shaped item * @text: text that @list applies to * @list: a #PangoAttrList * * Splits a shaped item (PangoGlyphItem) into multiple items based * on an attribute list. The idea is that if you have attributes * that don't affect shaping, such as color or underline, to avoid * affecting shaping, you filter them out (pango_attr_list_filter()), * apply the shaping process and then reapply them to the result using * this function. * * All attributes that start or end inside a cluster are applied * to that cluster; for instance, if half of a cluster is underlined * and the other-half strikethrough, then the cluster will end * up with both underline and strikethrough attributes. In these * cases, it may happen that item->extra_attrs for some of the * result items can have multiple attributes of the same type. * * This function takes ownership of @glyph_item; it will be reused * as one of the elements in the list. * * Return value: a list of glyph items resulting from splitting *   @glyph_item. Free the elements using pango_glyph_item_free(), *   the list using g_slist_free(). * * Since: 1.2 **/GSList *pango_glyph_item_apply_attrs (PangoGlyphItem   *glyph_item,			      const char       *text,			      PangoAttrList    *list){  PangoAttrIterator *iter = pango_attr_list_get_iterator (list);  GSList *result = NULL;  ApplyAttrsState state;  gboolean start_new_segment = FALSE;  gboolean have_cluster;  int range_start, range_end;  /* This routine works by iterating through the item cluster by   * cluster; we accumulate the attributes that we need to   * add to the next output item, and decide when to split   * off an output item based on two criteria:   *   * A) If start_index < attribute_start < end_index   *    (attribute starts within cluster) then we need   *    to split between the last cluster and this cluster.   * B) If start_index < attribute_end <= end_index,   *    (attribute ends within cluster) then we need to   *    split between this cluster and the next one.   */  /* Advance the attr iterator to the start of the item   */  do    {      pango_attr_iterator_range (iter, &range_start, &range_end);      if (range_end > glyph_item->item->offset)	break;    }  while (pango_attr_iterator_next (iter));  state.segment_attrs = pango_attr_iterator_get_attrs (iter);  /* Short circuit the case when we don't actually need to   * split the item   */  if (range_start <= glyph_item->item->offset &&      range_end >= glyph_item->item->offset + glyph_item->item->length)    goto out;  for (have_cluster = _pango_glyph_item_iter_init_start (&state.iter, glyph_item, text);       have_cluster;       have_cluster = _pango_glyph_item_iter_next_cluster (&state.iter))    {      gboolean have_next;      /* [range_start,range_end] is the first range that intersects       * the current cluster.       */      /* Split item into two, if this cluster isn't a continuation       * of the last cluster       */      if (start_new_segment)	{	  result = g_slist_prepend (result,				    split_before_cluster_start (&state));	  state.segment_attrs = pango_attr_iterator_get_attrs (iter);	}      start_new_segment = FALSE;      /* Loop over all ranges that intersect this cluster; exiting       * leaving [range_start,range_end] being the first range that       * intersects the next cluster.       */      do	{	  if (range_end > state.iter.end_index) /* Range intersects next cluster */	    break;	  /* Since ranges end in this cluster, the next cluster goes into a	   * separate segment	   */	  start_new_segment = TRUE;	  have_next = pango_attr_iterator_next (iter);	  pango_attr_iterator_range (iter, &range_start, &range_end);	  if (range_start >= state.iter.end_index) /* New range doesn't intersect this cluster */	    {	      /* No gap between ranges, so previous range must of ended	       * at cluster boundary.	       */	      g_assert (range_start == state.iter.end_index && start_new_segment);	      break;	    }	  /* If any ranges start *inside* this cluster, then we need	   * to split the previous cluster into a separate segment	   */	  if (range_start > state.iter.start_index &&	      state.iter.start_index != glyph_item->item->offset)	    {	      GSList *new_attrs = attr_slist_copy (state.segment_attrs);	      result = g_slist_prepend (result,					split_before_cluster_start (&state));	      state.segment_attrs = new_attrs;	    }	  state.segment_attrs = g_slist_concat (state.segment_attrs,						pango_attr_iterator_get_attrs (iter));	}      while (have_next);    } out:  /* What's left in glyph_item is the remaining portion   */  append_attrs (glyph_item, state.segment_attrs);  result = g_slist_prepend (result, glyph_item);  if (LTR (glyph_item))    result = g_slist_reverse (result);  pango_attr_iterator_destroy (iter);  return result;}/** * pango_glyph_item_letter_space: * @glyph_item: a #PangoGlyphItem * @text: text that @glyph_item corresponds to *   (glyph_item->item->offset is an offset from the *    start of @text) * @log_attrs: logical attributes for the item (the *   first logical attribute refers to the position *   before the first character in the item) * @letter_spacing: amount of letter spacing to add *   in Pango units. May be negative, though too large *   negative values will give ugly results. * * Adds spacing between the graphemes of @glyph_item to * give the effect of typographic letter spacing. * * Since: 1.6 **/voidpango_glyph_item_letter_space (PangoGlyphItem *glyph_item,			       const char     *text,			       PangoLogAttr   *log_attrs,			       int             letter_spacing){  PangoGlyphItemIter iter;  PangoGlyphInfo *glyphs = glyph_item->glyphs->glyphs;  gboolean have_cluster;  int space_left, space_right;  space_left = letter_spacing / 2;  /* hinting */  if ((letter_spacing & (PANGO_SCALE - 1)) == 0)    {      space_left = PANGO_UNITS_ROUND (space_left);    }  space_right = letter_spacing - space_left;  for (have_cluster = _pango_glyph_item_iter_init_start (&iter, glyph_item, text);       have_cluster;       have_cluster = _pango_glyph_item_iter_next_cluster (&iter))    {      if (!log_attrs[iter.start_char].is_cursor_position)        continue;      if (iter.start_glyph < iter.end_glyph) /* LTR */	{	  if (iter.start_char > 0)	    {	      glyphs[iter.start_glyph].geometry.width    += space_left ;	      glyphs[iter.start_glyph].geometry.x_offset += space_left ;	    }	  if (iter.end_char < glyph_item->item->num_chars)	    {	      glyphs[iter.end_glyph-1].geometry.width    += space_right;	    }	}      else			                 /* RTL */	{	  if (iter.start_char > 0)	    {	      glyphs[iter.start_glyph].geometry.width    += space_right;	    }	  if (iter.end_char < glyph_item->item->num_chars)	    {	      glyphs[iter.end_glyph+1].geometry.x_offset += space_left ;	      glyphs[iter.end_glyph+1].geometry.width    += space_left ;	    }	}    }}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91久久线看在观草草青青| 精品日韩欧美一区二区| 亚洲激情中文1区| 日韩视频免费观看高清完整版 | 一区二区三区免费看视频| 一区二区三区高清在线| 国产精品久久久久婷婷| av不卡在线观看| 亚洲免费在线视频一区 二区| 91麻豆免费观看| 樱桃国产成人精品视频| 欧美区一区二区三区| 捆绑调教一区二区三区| 国产女同性恋一区二区| 99精品国产一区二区三区不卡| 亚洲欧美激情在线| 欧美男男青年gay1069videost | 欧美一级一区二区| 国产一区美女在线| 亚洲丝袜另类动漫二区| 欧美日韩精品免费观看视频| 精品无人码麻豆乱码1区2区| 国产精品色噜噜| 欧美色手机在线观看| 国产尤物一区二区在线| 亚洲色图第一区| 精品精品国产高清一毛片一天堂| 成人免费va视频| 日本视频中文字幕一区二区三区| 国产午夜一区二区三区| 在线亚洲一区观看| 国产乱子轮精品视频| 亚洲综合区在线| 久久九九99视频| 欧美夫妻性生活| aaa欧美大片| 久久99热国产| 一区二区三区中文字幕| 久久久午夜精品理论片中文字幕| 91视频精品在这里| 国产一区二区日韩精品| 风流少妇一区二区| 中文字幕日韩欧美一区二区三区| 欧美色爱综合网| 成人免费视频视频在线观看免费| 亚洲成精国产精品女| 中文字幕欧美一| 2023国产精品视频| 在线观看91av| 色综合久久88色综合天天| 国产一区二区毛片| 麻豆成人久久精品二区三区小说| 亚洲激情网站免费观看| 国产精品麻豆一区二区| 久久综合色天天久久综合图片| 国产精品久久久久久久久久久免费看| 久久精品99国产精品日本| 91精品国产入口在线| 美女免费视频一区| 亚洲欧美日韩一区二区三区在线观看| 国产在线一区观看| 国产精品乱码人人做人人爱| 国产不卡一区视频| 一区二区三区不卡在线观看| 欧美日韩高清不卡| 国产真实乱偷精品视频免| 精品福利av导航| 国产盗摄女厕一区二区三区| 欧美大胆人体bbbb| 国产成人免费视频网站| 国产欧美一区二区在线| 在线观看免费亚洲| 精品噜噜噜噜久久久久久久久试看 | 青青草成人在线观看| 91亚洲精华国产精华精华液| www.在线成人| 亚洲男人的天堂在线aⅴ视频 | 亚洲综合色网站| 亚洲欧美综合网| 国产精品乱子久久久久| 中文字幕一区二区5566日韩| 久久久国产精华| 久久久精品2019中文字幕之3| 91亚洲大成网污www| 国产高清视频一区| 国产丝袜美腿一区二区三区| 日本精品裸体写真集在线观看| 黄页视频在线91| 亚洲女子a中天字幕| 欧美日韩一区在线观看| 日本欧美大码aⅴ在线播放| 国产欧美精品区一区二区三区 | 在线精品视频一区二区三四| 不卡的av电影| 成人性色生活片免费看爆迷你毛片| 中文字幕在线不卡视频| 亚洲人成影院在线观看| 国产校园另类小说区| 亚洲丝袜精品丝袜在线| 成人欧美一区二区三区黑人麻豆 | caoporn国产一区二区| 日本欧美久久久久免费播放网| 麻豆一区二区99久久久久| 免费人成在线不卡| 国产麻豆成人精品| 成人精品鲁一区一区二区| 色成年激情久久综合| 欧美色老头old∨ideo| 欧美电影免费提供在线观看| 日韩欧美一区二区视频| 国产精品久久久久久久久免费相片| 中文字幕乱码一区二区免费| 亚洲国产另类精品专区| 日韩国产精品久久| 不卡的电视剧免费网站有什么| 91丨porny丨国产| 欧美videofree性高清杂交| 久久亚洲一区二区三区四区| 一区二区三区高清在线| 奇米一区二区三区av| www.欧美日韩| 欧美日韩国产成人在线91 | 欧美丰满高潮xxxx喷水动漫| 精品国产凹凸成av人导航| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 午夜婷婷国产麻豆精品| 久久电影国产免费久久电影| 日本韩国一区二区三区视频| 成人永久看片免费视频天堂| 精品一区二区免费| 成人永久aaa| 欧美日韩国产一二三| 日韩欧美一级二级三级 | 91精品麻豆日日躁夜夜躁| 欧美高清性hdvideosex| 精品少妇一区二区三区在线视频| 久久综合久久综合久久| 国产女人18水真多18精品一级做| 国产精品免费视频网站| 国产一区免费电影| 在线精品亚洲一区二区不卡| 日韩三级视频在线看| 日韩美女视频一区| 国产盗摄一区二区| 91亚洲精品乱码久久久久久蜜桃| 亚洲色图视频网| 亚洲超丰满肉感bbw| 自拍偷拍国产亚洲| 麻豆精品视频在线观看| 欧美视频一区二区三区| 日本一区二区不卡视频| 91.com视频| 久久美女艺术照精彩视频福利播放| 欧美精品一区二区久久婷婷| 欧美国产禁国产网站cc| 久草精品在线观看| 欧美影片第一页| 一区二区三区中文字幕| 成人免费毛片a| 久久久综合网站| 免费在线看一区| 欧美日韩亚洲国产综合| 中文字幕在线观看不卡| 555www色欧美视频| 一区二区成人在线| 色欧美日韩亚洲| 亚洲国产精品久久不卡毛片| 99久久精品久久久久久清纯| 欧美激情综合在线| 亚洲欧美一区二区三区极速播放| 91网站在线观看视频| 18成人在线视频| 欧美日韩不卡在线| 韩国一区二区视频| 国产中文字幕精品| 一本大道久久a久久综合婷婷| 日韩欧美一区二区视频| 日韩一区二区麻豆国产| 亚洲日本一区二区三区| 精品国产污污免费网站入口 | 精品成人一区二区三区| 久久影院电视剧免费观看| 18欧美乱大交hd1984| 欧美aaaaaa午夜精品| 福利一区福利二区| 91麻豆精品国产自产在线观看一区 | 中文字幕日韩一区| 欧美揉bbbbb揉bbbbb| 国产综合一区二区| 丝袜美腿亚洲一区| 亚洲视频每日更新| 日韩激情一二三区| 欧美日韩一区二区欧美激情| 亚欧色一区w666天堂| 8x8x8国产精品| 国产麻豆精品一区二区| 久久久精品影视| 一本色道a无线码一区v| 亚洲资源在线观看| 精品国产一区a|