From 8d2adaa61d6985eb34b27f1376e70b1b08c6677a Mon Sep 17 00:00:00 2001 From: Vincent Wei Date: Tue, 14 Jan 2020 08:50:18 +0800 Subject: [PATCH] For LoadCursorFromPNGMem, the array of offsets must have NR_CURSORS + 1 units --- src/sysres/cursor/cursors.c | 27 ++++++++++++++++----------- src/sysres/incoreres.c | 16 ++++++++++++++-- 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/src/sysres/cursor/cursors.c b/src/sysres/cursor/cursors.c index efd71618..bd5a4f78 100644 --- a/src/sysres/cursor/cursors.c +++ b/src/sysres/cursor/cursors.c @@ -11,35 +11,35 @@ // ////////////////////////////////////////////////////////////////////////////// /* - * This file is part of MiniGUI, a mature cross-platform windowing + * This file is part of MiniGUI, a mature cross-platform windowing * and Graphics User Interface (GUI) support system for embedded systems * and smart IoT devices. - * - * Copyright (C) 2002~2018, Beijing FMSoft Technologies Co., Ltd. + * + * Copyright (C) 2002~2020, Beijing FMSoft Technologies Co., Ltd. * Copyright (C) 1998~2002, WEI Yongming - * + * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with this program. If not, see . - * + * * Or, - * + * * As this program is a library, any link to this program must follow * GNU General Public License version 3 (GPLv3). If you cannot accept * GPLv3, you need to be licensed from FMSoft. - * + * * If you have got a commercial license of this program, please use it * under the terms and conditions of the commercial license. - * + * * For more information about the commercial license, please refer to * . */ @@ -48,9 +48,13 @@ #if defined(_MGHAVE_CURSOR) && defined(_MGINCORE_RES) #define NR_CURSORS 23 +/* + * Since 4.2.0: + * For LoadCursorFromPNGMem, the array of offsets must have NR_CURSORS + 1 units. + */ const int __mg_cursors_offset [] = { 0, - 766, + 766, 766 + 326, 766*2 + 326, 766*2 + 326*2, @@ -72,6 +76,7 @@ const int __mg_cursors_offset [] = { 766*11 + 326*7 + 518*2, 766*11 + 326*8 + 518*2, 766*11 + 326*9 + 518*2, + 766*11 + 326*10 + 518*2, }; const unsigned char __mg_cursors_data[] = { diff --git a/src/sysres/incoreres.c b/src/sysres/incoreres.c index 04033cd0..c849b4dc 100644 --- a/src/sysres/incoreres.c +++ b/src/sysres/incoreres.c @@ -135,9 +135,21 @@ HCURSOR __mg_load_cursor_from_res (int i) #ifdef _MGINCORE_RES # ifdef _MGSCHEMA_COMPOSITING - if (is_png) + if (is_png) { + size_t size; + + if (i == 0) { + size = __mg_cursors_offset [1] - __mg_cursors_offset [0]; + } + else { + /* For LoadCursorFromPNGMem, the array of offsets + * must have NR_CURSORS + 1 units. */ + size = __mg_cursors_offset [i + 1] - __mg_cursors_offset [i]; + } + hCursor = LoadCursorFromPNGMem (__mg_cursors_data + __mg_cursors_offset [i], - hotspot[0], hotspot[1]); + size, hotspot[0], hotspot[1]); + } else # endif hCursor = LoadCursorFromMem (__mg_cursors_data + __mg_cursors_offset [i]);