胶囊形(Capsule)是两端为半圆的"药丸"形状,常用于按钮、进度条轨道、血条等 UI 元素。
| 函数 | 说明 |
|---|---|
void xgeShapeCapsuleFill(xge_rect_t tRect, uint32_t iColor) | 填充胶囊形 |
void xgeShapeCapsuleFillPx(xge_rect_t tRect, uint32_t iColor) | 填充胶囊形(像素坐标) |
void xgeShapeCapsuleStroke(xge_rect_t tRect, float fWidth, uint32_t iColor) | 描边胶囊形 |
void xgeShapeCapsuleStrokePx(xge_rect_t tRect, float fWidth, uint32_t iColor) | 描边胶囊形(像素坐标) |
gcc -O2 -I. -o ch28.exe ch28_main.c build\xge.lib -lm -lws2_32 -liphlpapi -lgdi32 -luser32 -lshell32 -lopengl32 -lole32 -lwinmm -lavrt
.\ch28.exe
// 水平胶囊(宽 200,高 50)
xge_rect_t btn = { 300, 275, 200, 50 };
xgeShapeCapsuleFill(btn, 0x4FD8C2FF);
// 描边胶囊
xge_rect_t outline = { 300, 350, 200, 50 };
xgeShapeCapsuleStroke(outline, 2.0f, 0xFFB454FF);float fProgress = 0.65f; // 65%
float barX = 100, barY = 500, barW = 600, barH = 24;
// 背景轨道
xge_rect_t track = { barX, barY, barW, barH };
xgeShapeCapsuleFill(track, 0x333333FF);
// 前景进度
xge_rect_t fill = { barX, barY, barW * fProgress, barH };
xgeShapeCapsuleFill(fill, 0x4FD8C2FF);// 垂直胶囊
xge_rect_t vert = { 150, 100, 40, 160 };
xgeShapeCapsuleFill(vert, 0xFF6B5EFF);
// 正方形 → 圆形
xge_rect_t circle = { 250, 100, 80, 80 };
xgeShapeCapsuleFill(circle, 0x6DB3F2FF);将以下代码保存为 ch28_main.c,编译后运行即可看到胶囊形按钮与进度条效果:
#include "xge.h"
static int onFrame(void* pUser) {
(void)pUser;
xgeClear(0x081114FF);
// 水平胶囊按钮(填充)
xge_rect_t btn = { 300, 100, 200, 50 };
xgeShapeCapsuleFill(btn, 0x4FD8C2FF);
// 描边胶囊
xge_rect_t outline = { 300, 180, 200, 50 };
xgeShapeCapsuleStroke(outline, 2.0f, 0xFFB454FF);
// 进度条:背景轨道 + 前景
float fProgress = 0.65f;
xge_rect_t track = { 100, 300, 600, 24 };
xgeShapeCapsuleFill(track, 0x333333FF);
xge_rect_t fill = { 100, 300, 600 * fProgress, 24 };
xgeShapeCapsuleFill(fill, 0x4FD8C2FF);
// 垂直胶囊
xge_rect_t vert = { 150, 380, 40, 160 };
xgeShapeCapsuleFill(vert, 0xFF6B5EFF);
// 正方形 → 圆形
xge_rect_t circle = { 250, 380, 80, 80 };
xgeShapeCapsuleFill(circle, 0x6DB3F2FF);
return XGE_OK;
}
int main(void) {
xge_desc_t d = {0};
d.iWidth = 800;
d.iHeight = 600;
d.sTitle = "ch28 - Capsule";
d.iFlags = XGE_INIT_VSYNC;
xgeInit(&d);
xgeRun(onFrame, NULL);
xgeUnit();
return 0;
}xge_rect_t 定义包围盒,xgeShapeCapsuleFill 自动取 min(W,H)/2 为圆角半径。