diff --git a/.gitignore b/.gitignore index f32a99c0..f2f80fc7 100644 --- a/.gitignore +++ b/.gitignore @@ -22,4 +22,5 @@ Makefile.in /*.pc /*config.h /*config.h.in +/*config.h.in~ diff --git a/README.md b/README.md index cd78ea7a..3f739153 100644 --- a/README.md +++ b/README.md @@ -102,12 +102,15 @@ for examples: FMSoft had created the public repositories for MiniGUI core, MiniGUI components, and other open source apps on GitHub. You can visit them on: -https://github.com/VincentWei + -FMSoft also releases miniStudio, which is a WYSIWYG IDE for MiniGUI, as a shareware. -You can also download it from the official site of MiniGUI. +and -http://www.minigui.com/en/download + + +We now maintain all documents about MiniGUI on the following public repo: + + ## A BRIEF BUILDING INSTRUCTION @@ -349,31 +352,48 @@ the commercial license of MiniGUI, please write to sales@minigui.com. ## COPYING - Copyright (C) 2002~2019, Beijing FMSoft Technologies Co., Ltd. - Copyright (C) 1998~2002, WEI Yongming +Copyright (C) 2002 ~ 2019, 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 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. +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 . +You should have received a copy of the GNU General Public License +along with this program. If not, see . - Or, +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. +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. +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 - . +For more information about the commercial license, please refer to +. + +### Special Statement + +The above open source or free software license does +not apply to any entity in the Exception List published by +Beijing FMSoft Technologies Co., Ltd. + +If you are or the entity you represent is listed in the Exception List, +the above open source or free software license does not apply to you +or the entity you represent. Regardless of the purpose, you should not +use the software in any way whatsoever, including but not limited to +downloading, viewing, copying, distributing, compiling, and running. +If you have already downloaded it, you MUST destroy all of its copies. + +The Exception List is published by FMSoft and may be updated +from time to time. For more information, please see +. diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index 89b1f177..2569a5c8 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -18,7 +18,7 @@ Please report any bugs and incompatibilities in * macro: `_MGUSE_SYNC_UPDATE` 1. New API `UpdateInvalidClient`. You can use this function to update the invalid client region of a window instantly. - 1. New API `LoadDevFontFromFile`. You can use this function to load + 1. New API `LoadDevFontFromIncoreData`. You can use this function to load a device font from incore data. 1. Use different colors for the output of `_DBG_PRINTF` and `_ERR_PRINTF`. 1. Add `__mg_save_jpg` function for storing MYBITMAP as JPEG file (10km). diff --git a/build/buildlib-min b/build/buildlib-min index 4cfeee0c..75778213 100755 --- a/build/buildlib-min +++ b/build/buildlib-min @@ -1,6 +1,7 @@ #!/bin/sh ./configure \ + --with-runmode=ths \ --disable-dblclk \ --disable-cursor \ --disable-mousecalibrate \ diff --git a/build/rules-pc.linux b/build/rules-pc.linux new file mode 100644 index 00000000..4fd61044 --- /dev/null +++ b/build/rules-pc.linux @@ -0,0 +1,36 @@ +# rules for pc-linux + +# set your own targaet_os +TARGET_OS=linux + +################################################## +# set your compile tool # +CC=gcc +CXX=g++ +CPP=g++ +AR=ar +AS=as +RANLIB=ranlib +MAKE=/usr/bin/make +################################################## + +ARFLAGS=-rc +COFLAG=-c + +OBJ=o +LIBA=a + +################################################## +# if you don't want to create dynamic, delete it # +LIBSO=so +SOFLAGS=-fPIC -shared -o +################################################## + + +################################################## +# set your compile flags and install prefix path # +PREFIX=/usr/local +CFLAGS+=-g -Wall -fPIC `pkg-config --cflags freetype2` +LDFLAGS+= +################################################## + diff --git a/configure.ac b/configure.ac index 4db400a6..2e83876f 100644 --- a/configure.ac +++ b/configure.ac @@ -18,7 +18,7 @@ MINIGUI_MAJOR_VERSION=3 MINIGUI_MINOR_VERSION=2 MINIGUI_MICRO_VERSION=2 MINIGUI_INTERFACE_AGE=0 -MINIGUI_BINARY_AGE=1 +MINIGUI_BINARY_AGE=2 MINIGUI_VERSION=$MINIGUI_MAJOR_VERSION.$MINIGUI_MINOR_VERSION.$MINIGUI_MICRO_VERSION AC_SUBST(MINIGUI_MAJOR_VERSION) @@ -76,7 +76,7 @@ AC_FUNC_ALLOCA AC_FUNC_MEMCMP AC_FUNC_MMAP AC_FUNC_VPRINTF -AC_CHECK_FUNCS(time mktime localtime strdup strcasecmp strncasecmp strerror setlocale getpt) +AC_CHECK_FUNCS(time mktime localtime strdup strcasecmp strncasecmp strerror setlocale) dnl ======================================================================== dnl User selectable options @@ -89,8 +89,6 @@ message_string="no" runtime_mode="procs" -stand_alone="no" - incore_res="no" use_miniguientry="no" fixed_math="yes" @@ -304,10 +302,6 @@ AC_ARG_WITH(runmode, [ --with-runmode=procs/ths/sa the MiniGUI runtime mode ], runtime_mode=$withval) -AC_ARG_ENABLE(standalone, -[ --enable-standalone build MiniGUI-Standalone version ], -stand_alone=$enableval) - AC_ARG_ENABLE(incoreres, [ --enable-incoreres use incore resource instead file IO to initialize MiniGUI ], incore_res=$enableval) @@ -732,9 +726,8 @@ AC_ARG_ENABLE(ctrlbidisledit, [ --enable-ctrlbidisledit include Single-Line BIDI EDIT control ], build_ctrl_bidisledit=$enableval) -dnl enable new textedit -AC_ARG_ENABLE(newtextedit, -[ --enable-ctrlnewtextedit include the new implementation of TEXTEDIT control ], +AC_ARG_ENABLE(ctrlnewtextedit, +[ --disable-ctrlnewtextedit include the new implementation of TEXTEDIT control ], build_ctrl_textedit_new=$enableval) AC_ARG_ENABLE(ctrllistbox, diff --git a/include/ctrl/listview.h b/include/ctrl/listview.h index a137edef..04285a45 100644 --- a/include/ctrl/listview.h +++ b/include/ctrl/listview.h @@ -871,7 +871,7 @@ typedef LVNM_ITEMRUP *PLVNM_ITEMRUP; */ #define LVM_GETITEMSTATE 0xF128 -/** +/* * \def LVM_GETSELECTEDCOLUMN * \brief Retrieves the index of the currently selected column of a listview. * diff --git a/include/gdi.h b/include/gdi.h index 35ea01a4..eb22baad 100644 --- a/include/gdi.h +++ b/include/gdi.h @@ -8018,7 +8018,7 @@ MG_EXPORT HDC GUIAPI InitSlaveScreenEx (const char* name, const char* mode, int * * \return Valid handle on success, HDC_INVALID on failure. */ -inline HDC InitSlaveScreen (const char* name, const char* mode) +static inline HDC InitSlaveScreen (const char* name, const char* mode) { return InitSlaveScreenEx(name, mode, GDCAP_DPI_DEFAULT); } diff --git a/include/minigui.h b/include/minigui.h index 6d6914f5..17b368fb 100644 --- a/include/minigui.h +++ b/include/minigui.h @@ -2726,6 +2726,7 @@ MG_EXPORT HCURSOR GUIAPI GetSystemCursor (int csrid); * \return Handle to the current system cursor, zero means no current cursor. */ MG_EXPORT HCURSOR GUIAPI GetCurrentCursor (void); + #else // #define LoadCursorFromFile(filename) (do_nothing(), 0) // #define CreateCursor(x, y, w, h, ANDbs, XORbs, cr) (do_nothing(), 0) @@ -2866,6 +2867,7 @@ MG_EXPORT void GUIAPI GetCursorPos (POINT* ppt); MG_EXPORT void GUIAPI SetCursorPos (int x, int y); #ifdef _MGHAVE_CURSOR + /** * \fn HCURSOR GUIAPI SetCursorEx (HCURSOR hcsr, BOOL set_def) * \brief Changes the current cursor. @@ -2884,7 +2886,7 @@ MG_EXPORT void GUIAPI SetCursorPos (int x, int y); * * \sa SetCursor, SetDefaultCursor, GetDefaultCursor */ - MG_EXPORT HCURSOR GUIAPI SetCursorEx (HCURSOR hcsr, BOOL set_def); +MG_EXPORT HCURSOR GUIAPI SetCursorEx (HCURSOR hcsr, BOOL set_def); /** * \fn HCURSOR GUIAPI GetDefaultCursor (void) @@ -2898,77 +2900,6 @@ MG_EXPORT void GUIAPI SetCursorPos (int x, int y); */ MG_EXPORT HCURSOR GUIAPI GetDefaultCursor (void); -#else -static inline HCURSOR SetCursorEx(HCURSOR hcsr, BOOL set_def) { - return (HCURSOR)0; -} - -static inline HCURSOR GetDefaultCursor(void) { - return (HCURSOR)0; -} - -#endif /* _MGHAVE_CURSOR */ - -/** - * \def SetCursor(hcsr) - * \brief Changes the current cursor. - * - * This function changes the current cursor to be \a hcsr. - * - * \param hcsr The expected cursor handle. - * \return The old cursor handle. - * - * \note This function defined as a macro calling \a SetCursorEx with - * passing \a set_def as FALSE. - * - * \sa SetCursorEx, SetDefaultCursor - */ - #define SetCursor(hcsr) SetCursorEx (hcsr, FALSE) - -/** - * \def SetDefaultCursor(hcsr) - * \brief Changes the current cursor, and set it as the default cursor. - * - * This function changes the current cursor to be \a hcsr, and set it as - * the default cursor. - * - * \param hcsr The expected cursor handle. - * \return The old cursor handle. - * - * \note This function defined as a macro calling \a SetCursorEx with - * passing \a set_def as TRUE. - * - * \sa SetCursorEx, SetCursor - */ - #define SetDefaultCursor(hcsr) SetCursorEx (hcsr, TRUE) - -/** - * \fn HCURSOR GUIAPI GetDefaultCursor (void) - * \brief Gets the default cursor. - * - * This function gets the current default cursor. - * - * \return The current default cursor handle. - * - * \sa SetCursorEx, SetDefaultCursor - */ -//MG_EXPORT HCURSOR GUIAPI GetDefaultCursor (void); - -#else -//// #define SetCursorEx(hcsr, set_def) (do_nothing(), (HCURSOR)0) -//// #define SetCursor(hcsr) (do_nothing(), (HCURSOR)0) -//// #define SetDefaultCursor(hcsr) (do_nothing(), (HCURSOR)0) -//// #define GetDefaultCursor() (do_nothing(), (HCURSOR)0) - -//static inline HCURSOR SetCursorEx(HCURSOR hcsr, BOOL set_def) { return (HCURSOR) 0;} -//static inline HCURSOR SetCursor(HCURSOR hcsr) { return (HCURSOR) 0;} -//static inline HCURSOR SetDefaultCursor(HCURSOR hcsr) { return (HCURSOR) 0;} -//static inline HCURSOR GetDefaultCursor(void) { return (HCURSOR) 0;} - -#endif /* _MGHAVE_CURSOR */ - -#ifdef _MGHAVE_CURSOR - /** * \fn int GUIAPI ShowCursor (BOOL fShow) * \brief Shows or hides cursor. @@ -2985,15 +2916,54 @@ static inline HCURSOR GetDefaultCursor(void) { */ MG_EXPORT int GUIAPI ShowCursor (BOOL fShow); -#else -//// #define ShowCursor(fShow) (do_nothing(), (HCURSOR)0) -//static inline int ShowCursor(BOOL fShow) {return 0;} +#else /* _MGHAVE_CURSOR */ + +static inline HCURSOR SetCursorEx(HCURSOR hcsr, BOOL set_def) { + return (HCURSOR)0; +} + +static inline HCURSOR GetDefaultCursor(void) { + return (HCURSOR)0; +} static inline int GUIAPI ShowCursor (BOOL fShow) { return 0; } -#endif /* _MGHAVE_CURSOR */ +#endif /* !_MGHAVE_CURSOR */ + +/** + * \def SetCursor(hcsr) + * \brief Changes the current cursor. + * + * This function changes the current cursor to be \a hcsr. + * + * \param hcsr The expected cursor handle. + * \return The old cursor handle. + * + * \note This function defined as a macro calling \a SetCursorEx with + * passing \a set_def as FALSE. + * + * \sa SetCursorEx, SetDefaultCursor + */ +#define SetCursor(hcsr) SetCursorEx (hcsr, FALSE) + +/** + * \def SetDefaultCursor(hcsr) + * \brief Changes the current cursor, and set it as the default cursor. + * + * This function changes the current cursor to be \a hcsr, and set it as + * the default cursor. + * + * \param hcsr The expected cursor handle. + * \return The old cursor handle. + * + * \note This function defined as a macro calling \a SetCursorEx with + * passing \a set_def as TRUE. + * + * \sa SetCursorEx, SetCursor + */ +#define SetDefaultCursor(hcsr) SetCursorEx (hcsr, TRUE) /** @} end of cursor_fns */ diff --git a/rules.make b/rules.make index b36c7ae0..c47593ca 100644 --- a/rules.make +++ b/rules.make @@ -14,7 +14,6 @@ include $(abs_top_srcdir)/$(TARGET_RULES) # Flags that can be set on the nmake command line: # DEBUG=1 for compiling a debugging version # PREFIX=Some/Directory Base directory for installation -# CONFIGH=YourConfigHeader for defining the mgconfig.h file to use ifndef DEBUG DEBUG=0 @@ -37,8 +36,6 @@ docdir = $(datadir)/doc/minigui # The directory where the include files will be installed libminiguiincludedir = $(includedir)/minigui -libmgextincludedir = $(includedir)/minigui - # Programs used by "make": CP = cp @@ -93,14 +90,6 @@ TIFF_LIBS = $(TIFF_NOLZW_LIBS) ZLIB_CFLAGS = -I $(ZLIB) ZLIB_LIBS = $(ZLIB)/zlib.lib -ifdef COMPILE_MGEXTLIB -MGEXT_CFLAGS = -D__MGEXT_LIB__ -else -MGEXT_CFLAGS = -endif - -MG_PRE_DEFINES = -D__MINIGUI_LIB__ $(MGEXT_CFLAGS) - ################################################################################# ifdef LOCAL_INC @@ -119,10 +108,10 @@ endif DEPLIBINC = -I$(DEPLIBDIR)/include -CFLAGS += $(OPTIMIZE) $(DEBUGINFO) $(DEPLIBINC) $(INCLUDES) $(DEFINES) $(DEPCFLAGS) $(MG_PRE_DEFINES) -c +CFLAGS += $(OPTIMIZE) $(DEBUGINFO) $(DEPLIBINC) $(DEFINES) $(DEPCFLAGS) -c DEFS += -D__MINIGUI_LIB__ -D_REENTRANT -CFLAGS += -I$(abs_top_srcdir) $(INCLUDES) $(DEFS) $(INCS) +CFLAGS += -I$(abs_top_srcdir) -I$(abs_top_srcdir)/include -I$(abs_top_srcdir)/src/include $(INCLUDES) $(DEFS) $(INCS) %.$(OBJ): %.c $(CC) $(CFLAGS) $(COFLAG) $< diff --git a/src/ex_ctrl/makefile.ng b/src/ex_ctrl/makefile.ng index 90a2e284..95ce96da 100644 --- a/src/ex_ctrl/makefile.ng +++ b/src/ex_ctrl/makefile.ng @@ -1,4 +1,5 @@ abs_top_srcdir=../.. +LOCAL_INC=-I$(abs_top_srcdir)/src/control/ include Makefile.am include ../../rules.make diff --git a/src/font/freetype2.c b/src/font/freetype2.c index 11f4cc38..e35ad162 100644 --- a/src/font/freetype2.c +++ b/src/font/freetype2.c @@ -511,7 +511,7 @@ char_bitmap_pixmap (LOGFONT* logfont, DEVFONT* devfont, if (pitch) *pitch = cacheinfo->pitch; - if (!is_grey && sz) { + if (sz) { sz->cx = cacheinfo->width; sz->cy = cacheinfo->height; } @@ -592,7 +592,7 @@ char_bitmap_pixmap (LOGFONT* logfont, DEVFONT* devfont, pcache->flag = TRUE; } - if (!is_grey && sz) { + if (sz) { sz->cx = pcache->width; sz->cy = pcache->height; } @@ -604,7 +604,7 @@ char_bitmap_pixmap (LOGFONT* logfont, DEVFONT* devfont, buffer = get_raster_bitmap_buffer (source->rows * source->pitch); memcpy(buffer, source->buffer, source->rows * source->pitch); - if (!is_grey && sz) { + if (sz) { sz->cx = source->width; sz->cy = source->rows; } diff --git a/src/font/in-core/makefile.ng b/src/font/in-core/makefile.ng index 8aeb2a2b..b06f26bf 100644 --- a/src/font/in-core/makefile.ng +++ b/src/font/in-core/makefile.ng @@ -1,4 +1,5 @@ -abs_top_srcdir=../../../ +abs_top_srcdir=../../.. +LOCAL_INC=-I$(abs_top_srcdir)/src/font/ include Makefile.am include ../../../rules.make diff --git a/src/kernel/message.c b/src/kernel/message.c index 61af4671..fe34008f 100644 --- a/src/kernel/message.c +++ b/src/kernel/message.c @@ -1230,8 +1230,9 @@ int GUIAPI ThrowAwayMessages (HWND hWnd) for (slot = 0; slot < DEF_NR_TIMERS; slot++) { if (pMsgQueue->TimerMask & (0x01UL << slot)) { HWND timer_wnd = __mg_get_timer_hwnd (slot); - if (timer_wnd == hWnd - || gui_GetMainWindowPtrOfControl (timer_wnd) == (PMAINWIN)hWnd){ + if (timer_wnd == hWnd + || (MG_IS_MAIN_WINDOW (hWnd) && + gui_GetMainWindowPtrOfControl (timer_wnd) == (PMAINWIN)hWnd)) { RemoveMsgQueueTimerFlag (pMsgQueue, slot); } } diff --git a/src/newgal/commlcd/makefile.ng b/src/newgal/commlcd/makefile.ng index 17baec14..ab5eee8b 100644 --- a/src/newgal/commlcd/makefile.ng +++ b/src/newgal/commlcd/makefile.ng @@ -1,4 +1,5 @@ abs_top_srcdir=../../.. +LOCAL_INC=-I$(abs_top_srcdir)/src/newgal/ include Makefile.am include ../../../rules.make diff --git a/src/newgal/dummy/makefile.ng b/src/newgal/dummy/makefile.ng index 17baec14..ab5eee8b 100644 --- a/src/newgal/dummy/makefile.ng +++ b/src/newgal/dummy/makefile.ng @@ -1,4 +1,5 @@ abs_top_srcdir=../../.. +LOCAL_INC=-I$(abs_top_srcdir)/src/newgal/ include Makefile.am include ../../../rules.make diff --git a/src/newgdi/glyph.c b/src/newgdi/glyph.c index 91da77cf..2ccee5c7 100644 --- a/src/newgdi/glyph.c +++ b/src/newgdi/glyph.c @@ -3786,6 +3786,8 @@ static BOOL _gdi_get_glyph_data (PDC pdc, Glyph32 glyph_value, /* the returned bits will be the subpixled pixmap */ data = (BYTE*)(*devfont->font_ops->get_glyph_greybitmap) (logfont, devfont, REAL_GLYPH(glyph_value), bbox, &pitch, &scale); + // the width of SUBPIXEL bitmap is 3x real width of bbox + bbox->cx /= 3; ctxt->cb = _dc_ft2subpixel_scan_line; } #endif