mirror of
https://github.com/zlgopen/awtk.git
synced 2025-05-08 19:44:45 +08:00
rollback nanovg changes
This commit is contained in:
parent
604e21dc65
commit
ff6bf8a660
@ -1089,7 +1089,6 @@ void nvgScissor(NVGcontext* ctx, float x, float y, float w, float h)
|
||||
|
||||
state->scissor.extent[0] = w*0.5f*scale_x;
|
||||
state->scissor.extent[1] = h*0.5f*scale_y;
|
||||
memcpy(state->scissor.state_xform, state->xform, sizeof(float)*6);
|
||||
}
|
||||
|
||||
static void nvg__isectRects(float* dst,
|
||||
@ -1129,7 +1128,7 @@ int nvgGetCurrScissor(NVGcontext* ctx, float* x, float* y, float* w, float* h)
|
||||
memcpy(pxform, state->scissor.xform, sizeof(float)*6);
|
||||
ex = state->scissor.extent[0] / scale_x;
|
||||
ey = state->scissor.extent[1] / scale_y;
|
||||
nvgTransformInverse(invxorm, state->scissor.state_xform);
|
||||
nvgTransformInverse(invxorm, state->xform);
|
||||
nvgTransformMultiply(pxform, invxorm);
|
||||
tex = ex*nvg__absf(pxform[0]) + ey*nvg__absf(pxform[2]);
|
||||
tey = ex*nvg__absf(pxform[1]) + ey*nvg__absf(pxform[3]);
|
||||
@ -1141,30 +1140,6 @@ int nvgGetCurrScissor(NVGcontext* ctx, float* x, float* y, float* w, float* h)
|
||||
return 1;
|
||||
}
|
||||
|
||||
void nvgIntersectScissorForOtherRect(NVGcontext* ctx, float x, float y, float w, float h, float dx, float dy, float dw, float dh)
|
||||
{
|
||||
NVGstate* state = nvg__getState(ctx);
|
||||
float rect[4];
|
||||
float invxorm[6];
|
||||
float ex = 0.0f, ey = 0.0f, tex = 0.0f, tey = 0.0f;
|
||||
/* 因为脏矩形默认坐标系就是没有旋转没有缩放没有平移的状态 */
|
||||
float pxform[6] = { 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f };
|
||||
ex = dw * 0.5f;
|
||||
ey = dh * 0.5f;
|
||||
pxform[4] = dx + dw * 0.5f;
|
||||
pxform[5] = dy + dh * 0.5f;
|
||||
memset(invxorm, 0, sizeof(float) * 6);
|
||||
nvgTransformInverse(invxorm, state->xform);
|
||||
nvgTransformMultiply(pxform, invxorm);
|
||||
tex = ex*nvg__absf(pxform[0]) + ey*nvg__absf(pxform[2]);
|
||||
tey = ex*nvg__absf(pxform[1]) + ey*nvg__absf(pxform[3]);
|
||||
|
||||
// Intersect rects.
|
||||
nvg__isectRects(rect, pxform[4] - tex, pxform[5] - tey, tex * 2, tey * 2, x, y, w, h);
|
||||
|
||||
nvgScissor(ctx, rect[0], rect[1], rect[2], rect[3]);
|
||||
}
|
||||
|
||||
void nvgIntersectScissor_ex(NVGcontext* ctx, float* x, float* y, float* w, float* h)
|
||||
{
|
||||
NVGstate* state = nvg__getState(ctx);
|
||||
@ -1188,7 +1163,7 @@ void nvgIntersectScissor_ex(NVGcontext* ctx, float* x, float* y, float* w, float
|
||||
memcpy(pxform, state->scissor.xform, sizeof(float)*6);
|
||||
ex = state->scissor.extent[0] / scale_x;
|
||||
ey = state->scissor.extent[1] / scale_y;
|
||||
nvgTransformInverse(invxorm, state->scissor.state_xform);
|
||||
nvgTransformInverse(invxorm, state->xform);
|
||||
nvgTransformMultiply(pxform, invxorm);
|
||||
tex = ex*nvg__absf(pxform[0]) + ey*nvg__absf(pxform[2]);
|
||||
tey = ex*nvg__absf(pxform[1]) + ey*nvg__absf(pxform[3]);
|
||||
@ -1228,7 +1203,7 @@ void nvgIntersectScissor(NVGcontext* ctx, float x, float y, float w, float h)
|
||||
memcpy(pxform, state->scissor.xform, sizeof(float)*6);
|
||||
ex = state->scissor.extent[0] / scale_x;
|
||||
ey = state->scissor.extent[1] / scale_y;
|
||||
nvgTransformInverse(invxorm, state->scissor.state_xform);
|
||||
nvgTransformInverse(invxorm, state->xform);
|
||||
nvgTransformMultiply(pxform, invxorm);
|
||||
tex = ex*nvg__absf(pxform[0]) + ey*nvg__absf(pxform[2]);
|
||||
tey = ex*nvg__absf(pxform[1]) + ey*nvg__absf(pxform[3]);
|
||||
|
@ -488,25 +488,6 @@ void nvgResetScissor(NVGcontext* ctx);
|
||||
*/
|
||||
int nvgGetCurrScissor(NVGcontext* ctx, float* x, float* y, float* w, float* h);
|
||||
|
||||
/**
|
||||
* @method nvgIntersectScissorForOtherRect
|
||||
* 设置一个裁剪区,但是该裁剪区收到脏矩形的影响
|
||||
* 首先会把脏矩形根据当前 nanovg 的坐标系转换为新的脏矩形区域,再和裁剪区做交集,把交集设为新的裁剪区
|
||||
*
|
||||
* @annotation ["scriptable"]
|
||||
* @param {NVGcontext*} ctx nanovg的对象
|
||||
* @param {float_t} x 裁剪区x坐标。
|
||||
* @param {float_t} y 裁剪区y坐标。
|
||||
* @param {float_t} w 裁剪区宽度。
|
||||
* @param {float_t} h 裁剪区高度。
|
||||
* @param {float_t} dx 脏矩形x坐标。
|
||||
* @param {float_t} dy 脏矩形y坐标。
|
||||
* @param {float_t} dw 脏矩形宽度。
|
||||
* @param {float_t} dh 脏矩形高度。
|
||||
*
|
||||
*/
|
||||
void nvgIntersectScissorForOtherRect(NVGcontext* ctx, float x, float y, float w, float h, float dx, float dy, float dw, float dh);
|
||||
|
||||
//
|
||||
// Paths
|
||||
//
|
||||
@ -696,7 +677,6 @@ enum NVGtexture {
|
||||
struct NVGscissor {
|
||||
float xform[6];
|
||||
float extent[2];
|
||||
float state_xform[6];
|
||||
};
|
||||
typedef struct NVGscissor NVGscissor;
|
||||
|
||||
|
@ -3,6 +3,7 @@
|
||||
2025/04/29
|
||||
* 优化nanovg_plus_gl (感谢智明提供补丁)
|
||||
* 修复nanovg_plus没有清除字体缓存的问题和还原获取裁剪区反算变换矩阵的逻辑(感谢智明提供补丁)
|
||||
* 修复nanovg还原获取裁剪区反算变换矩阵的逻辑(感谢智明提供补丁)
|
||||
|
||||
2025/04/28
|
||||
* mem_allocator_fixed_block 隔离管理链表与用户内存 (感谢兆坤提供补丁)。
|
||||
|
Loading…
x
Reference in New Issue
Block a user