diff options
author | Iru Cai <mytbk920423@gmail.com> | 2018-09-07 14:04:31 +0800 |
---|---|---|
committer | Iru Cai <mytbk920423@gmail.com> | 2018-09-07 14:07:15 +0800 |
commit | eb25162b231d83d47a86098c60028a598880bbcb (patch) | |
tree | 086d953acbb99fd954a2e41cfd4a03232d07c8ad /csrc/drawing.c | |
parent | 6055a1d0b62ce33ae8926bb6495f3e3b151dceae (diff) | |
download | rich4-eb25162b231d83d47a86098c60028a598880bbcb.tar.xz |
fcn_00455b3a
Diffstat (limited to 'csrc/drawing.c')
-rw-r--r-- | csrc/drawing.c | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/csrc/drawing.c b/csrc/drawing.c index cd9e303..96cc871 100644 --- a/csrc/drawing.c +++ b/csrc/drawing.c @@ -4,6 +4,58 @@ struct st st_46caec; +void fcn_00455b3a(int a1, int a2, uint16_t *a3, struct st *a4, int a5, int a6) +{ + int ret = 1; + a5 -= (int16_t)a4->f4; + a6 -= (int16_t)a4->f6; + int t1, t2, t3, t4; + + if (a5 < a1 && a5 + (uint16_t)a4->f0 > 0 && a6 < a2 && a6 + (uint16_t)a4->f2 > 0) { + t1 = 0; + t2 = 0; + t3 = (uint16_t)a4->f0; + t4 = (uint16_t)a4->f2; + + if (a5 < 0) { + t1 -= a5; + t3 += a5; + a5 = 0; + } else { + int t = t3 + a5 - a1; + if (a5 > t) { + t3 = a1 - a5; + } + } + + if (a6 < 0) { + t2 -= a6; + t4 += a6; + a6 = 0; + } else { + int t = t4 + a6 - a2; + if (a6 > t) { + t4 = a2 - a6; + } + } + uint16_t *esi = &a4->f8[a4->f0 * t2 + t1]; + uint16_t *edi = &a3[a6 * a1 + a5]; + size_t r1 = (a4->f0 - t3); + size_t r2 = (a1 - t3); + + if (t3 != 0) { + do { + memcpy(edi, esi, sizeof(uint16_t) * t3); + esi += t3 + r1; + edi += t3 + r2; + t4--; + } while (t4 != 0); + ret = 0; + } + } + return ret; +} + int fcn_455c52(uint32_t a0, uint32_t a1, uint16_t *a2, struct st * a3, int a4, int a5, int a6) { a4 -= (int16_t)a3->f4; |