📄 form.c
字号:
}#endifexit: group_reset_children((GroupingNode*)st); if (eff->traversing_mode==TRAVERSE_GET_BOUNDS) gf_bbox_from_rect(&eff->bbox, &st->clip); form_reset(st);}void R3D_InitForm(Render3D *sr, GF_Node *node){ FormStack *stack; GF_SAFEALLOC(stack, FormStack); SetupGroupingNode((GroupingNode*)stack, sr->compositor, node, & ((M_Form *)node)->children); stack->grouplist = gf_list_new(); gf_node_set_private(node, stack); gf_node_set_callback_function(node, RenderForm);}/* FORM CONSTRAINTS*/static void shin_apply(FormStack *st, u32 *group_idx, u32 count){ u32 i, len; Fixed tot_len, inter_space; tot_len = 0; inter_space = st->clip.width; len = 0; for (i=0; i<count; i++) { if (group_idx[i] != 0) { tot_len += form_get_group(st, group_idx[i])->final.width; len++; } } inter_space -= tot_len; inter_space /= (len+1); for (i=0; i<count; i++) { if(group_idx[i] == 0) continue; if (!i) { form_get_group(st, group_idx[0])->final.x = st->clip.x + inter_space; } else { form_get_group(st, group_idx[i])->final.x = form_get_group(st, group_idx[i-1])->final.x + form_get_group(st, group_idx[i-1])->final.width + inter_space; } fg_update_bounds(form_get_group(st, group_idx[i])); }}static void sh_apply(FormStack *st, Fixed space, u32 *group_idx, u32 count){ u32 i, k; GF_Rect *l, *r; Fixed inter_space, tot_len; tot_len = 0; if (space == -FIX_ONE) { r = &form_get_group(st, group_idx[count-1])->final; l = &form_get_group(st, group_idx[0])->final; inter_space = r->x - l->x; if(group_idx[0] != 0) inter_space -= l->width; for (i=1; i<count-1; i++) tot_len += form_get_group(st, group_idx[i])->final.width; inter_space -= tot_len; inter_space /= (count-1); } else { inter_space = space; } k = count - 1; if (space != -1) k += 1; for (i=1; i<k; i++) { if (group_idx[i] ==0) continue; l = &form_get_group(st, group_idx[i-1])->final; r = &form_get_group(st, group_idx[i])->final; r->x = l->x + inter_space; if(group_idx[i-1] != 0) r->x += l->width; fg_update_bounds(form_get_group(st, group_idx[i])); }}static void svin_apply(FormStack *st, u32 *group_idx, u32 count){ u32 i, len; Fixed tot_len, inter_space; tot_len = 0; inter_space = st->clip.height; len = 0; for (i=0; i<count;i++) { if (group_idx[i] != 0) { tot_len += form_get_group(st, group_idx[i])->final.height; len++; } } inter_space -= tot_len; inter_space /= (len+1); for (i=0; i<count; i++) { if (group_idx[i] == 0) continue; if (!i) { form_get_group(st, group_idx[0])->final.y = st->clip.y - inter_space; } else { form_get_group(st, group_idx[i])->final.y = form_get_group(st, group_idx[i-1])->final.y - form_get_group(st, group_idx[i-1])->final.height - inter_space; } fg_update_bounds(form_get_group(st, group_idx[i])); }}static void sv_apply(FormStack *st, Fixed space, u32 *group_idx, u32 count){ u32 i, k; Fixed tot_len, inter_space; GF_Rect *t, *b; tot_len = 0; if(space > -FIX_ONE) { inter_space = space; } else { t = &form_get_group(st, group_idx[count-1])->final; b = &form_get_group(st, group_idx[0])->final; inter_space = b->y - t->y; if (group_idx[0]!=0) inter_space -= t->height; for (i=1; i<count-1; i++) tot_len += form_get_group(st, group_idx[i])->final.height; inter_space -= tot_len; inter_space /= count-1; } k = count-1; if (space > -1) k += 1; for (i=1; i<k; i++) { if (group_idx[i] == 0) continue; form_get_group(st, group_idx[i])->final.y = form_get_group(st, group_idx[i-1])->final.y - inter_space; if (group_idx[i-1] != 0) { form_get_group(st, group_idx[i])->final.y -= form_get_group(st, group_idx[i-1])->final.height; } fg_update_bounds(form_get_group(st, group_idx[i])); }}static void al_apply(FormStack *st, Fixed space, u32 *group_idx, u32 count){ Fixed min_x; GF_Rect *rc; u32 i, start; start = 0; min_x = form_get_group(st, group_idx[0])->final.x; if (space>-FIX_ONE) { start = 1; min_x += space; } else { for (i=1; i<count; i++) { rc = &form_get_group(st, group_idx[0])->final; if (group_idx[i]==0) { min_x = rc->x; break; } if (rc->x < min_x) min_x = rc->x; } } for (i=start; i<count; i++) { if( group_idx[i] == 0) continue; form_get_group(st, group_idx[i])->final.x = min_x; fg_update_bounds(form_get_group(st, group_idx[i])); }}static void ar_apply(FormStack *st, Fixed space, u32 *group_idx, u32 count){ Fixed max_x; u32 i, start; GF_Rect *rc; start = 0; rc = &form_get_group(st, group_idx[0])->final; max_x = rc->x + rc->width; if(space>-FIX_ONE) { max_x -= space; start = 1; } else { for (i=1; i<count; i++) { rc = &form_get_group(st, group_idx[i])->final; if (group_idx[i]==0) { max_x = rc->x + rc->width; break; } if (rc->x + rc->width > max_x) max_x = rc->x + rc->width; } } for (i=start; i<count; i++) { if(group_idx[i] == 0) continue; rc = &form_get_group(st, group_idx[i])->final; rc->x = max_x - rc->width; fg_update_bounds(form_get_group(st, group_idx[i])); }}static void at_apply(FormStack *st, Fixed space, u32 *group_idx, u32 count){ Fixed max_y; u32 i, start; GF_Rect *rc; start = 0; max_y = form_get_group(st, group_idx[0])->final.y; if(space>-FIX_ONE) { start = 1; max_y -= space; } else { for (i=1; i<count; i++) { rc = &form_get_group(st, group_idx[i])->final; if (group_idx[i]==0) { max_y = rc->y; break; } if (rc->y > max_y) max_y = rc->y; } } for (i=start; i<count; i++) { if(group_idx[i] == 0) continue; form_get_group(st, group_idx[i])->final.y = max_y; fg_update_bounds(form_get_group(st, group_idx[i])); }}static void ab_apply(FormStack *st, Fixed space, u32 *group_idx, u32 count){ Fixed min_y; u32 i, start; GF_Rect *rc; start = 0; rc = &form_get_group(st, group_idx[0])->final; min_y = rc->y - rc->height; if(space>-FIX_ONE) { start = 1; min_y += space; } else { for (i=1; i<count; i++) { rc = &form_get_group(st, group_idx[i])->final; if (group_idx[i]==0) { min_y = rc->y - rc->height; break; } if (rc->y - rc->height < min_y) min_y = rc->y - rc->height; } } for (i=start; i<count; i++) { if(group_idx[i] == 0) continue; rc = &form_get_group(st, group_idx[i])->final; rc->y = min_y + rc->height; fg_update_bounds(form_get_group(st, group_idx[i])); }}static void ah_apply(FormStack *st, u32 *group_idx, u32 count){ GF_Rect *rc; u32 i; Fixed left, right, center; left = right = center = 0; for (i=0; i<count; i++) { rc = &form_get_group(st, group_idx[i])->final; if(group_idx[i] == 0) { center = rc->x + rc->width / 2; break; } if (left > rc->x) left = rc->x; if (right < rc->x + rc->width) right = rc->x + rc->width; center = (left+right)/2; } for (i=0; i<count; i++) { if(group_idx[i] == 0) continue; rc = &form_get_group(st, group_idx[i])->final; rc->x = center - rc->width/2; fg_update_bounds(form_get_group(st, group_idx[i])); }}static void av_apply(FormStack *st, u32 *group_idx, u32 count){ u32 i; Fixed top, bottom, center; GF_Rect *rc; top = bottom = center = 0; for (i=0; i<count; i++) { rc = &form_get_group(st, group_idx[i])->final; if (group_idx[i] == 0) { center = rc->y - rc->height / 2; break; } if (top < rc->y) top = rc->y; if (bottom > rc->y - rc->height) bottom = rc->y - rc->height; center = (top+bottom)/2; } for (i=0; i<count; i++) { if(group_idx[i] == 0) continue; rc = &form_get_group(st, group_idx[i])->final; rc->y = center + rc->height/2; fg_update_bounds(form_get_group(st, group_idx[i])); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -