RT1050 GUI demo using emWin library

Revision:
0:dd702039127a
diff -r 000000000000 -r dd702039127a source/main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/source/main.cpp	Thu Sep 20 19:16:34 2018 +0000
@@ -0,0 +1,348 @@
+/*
+ * The Clear BSD License
+ * Copyright (c) 2016, Freescale Semiconductor, Inc.
+ * Copyright 2016-2017 NXP
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted (subject to the limitations in the disclaimer below) provided
+ *  that the following conditions are met:
+ *
+ * o Redistributions of source code must retain the above copyright notice, this list
+ *   of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright notice, this
+ *   list of conditions and the following disclaimer in the documentation and/or
+ *   other materials provided with the distribution.
+ *
+ * o Neither the name of the copyright holder nor the names of its
+ *   contributors may be used to endorse or promote products derived from this
+ *   software without specific prior written permission.
+ *
+ * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "mbed.h"
+
+#include "GUI.h"
+#include "BUTTON.h"
+#include "CHECKBOX.h"
+#include "SLIDER.h"
+#include "DROPDOWN.h"
+#include "RADIO.h"
+#include "MULTIPAGE.h"
+
+extern "C" {
+#include "board.h"
+#include "pin_mux.h"    
+#include "emwin_support.h"
+}
+/*******************************************************************************
+ * Definitions
+ ******************************************************************************/
+
+#ifndef GUI_NORMAL_FONT
+#define GUI_NORMAL_FONT (&GUI_Font16_ASCII)
+#endif
+
+#ifndef GUI_LARGE_FONT
+#define GUI_LARGE_FONT (&GUI_Font16B_ASCII)
+#endif
+
+#ifndef GUI_SCALE_FACTOR
+#define GUI_SCALE_FACTOR 1
+#endif
+
+#ifndef GUI_SCALE_FACTOR_X
+#define GUI_SCALE_FACTOR_X GUI_SCALE_FACTOR
+#endif
+
+#ifndef GUI_SCALE_FACTOR_Y
+#define GUI_SCALE_FACTOR_Y GUI_SCALE_FACTOR
+#endif
+
+#define GUI_SCALE(a) ((int)((a) * (GUI_SCALE_FACTOR)))
+#define GUI_SCALE_X(x) ((int)((x) * (GUI_SCALE_FACTOR_X)))
+#define GUI_SCALE_Y(y) ((int)((y) * (GUI_SCALE_FACTOR_Y)))
+#define GUI_SCALE_COORDS(x, y) GUI_SCALE_X(x), GUI_SCALE_Y(y)
+#define GUI_SCALE_RECT(x0, y0, xs, ys) GUI_SCALE_X(x0), GUI_SCALE_Y(y0), GUI_SCALE_X(xs), GUI_SCALE_Y(ys)
+
+#define GUI_ID_DRAWAREA (GUI_ID_USER + 0)
+#define GUI_ID_PAGEWIN1 (GUI_ID_USER + 1)
+#define GUI_ID_PAGEWIN2 (GUI_ID_USER + 2)
+
+/*******************************************************************************
+ * Variables
+ ******************************************************************************/
+Serial pc(USBTX, USBRX);
+
+/*******************************************************************************
+ * Prototypes
+ ******************************************************************************/
+void BOARD_EnableLcdInterrupt(void);
+
+/*******************************************************************************
+ * Code
+ ******************************************************************************/
+
+static DROPDOWN_Handle hDropdown0;
+static RADIO_Handle hRadio0;
+static CHECKBOX_Handle hCheck0;
+static WM_HWIN hDrawArea;
+
+static SLIDER_Handle hSlider0;
+static SLIDER_Handle hSlider1;
+static SPINBOX_Handle hSpinbox0;
+static PROGBAR_Handle hProgbar0;
+
+static const GUI_COLOR color_list[] = {GUI_BLACK,   GUI_YELLOW, GUI_ORANGE, GUI_RED,
+                                       GUI_MAGENTA, GUI_BLUE,   GUI_CYAN,   GUI_GREEN};
+static const GUI_POINT triangle_points[] = {
+    {GUI_SCALE(0), GUI_SCALE(0)}, {GUI_SCALE(-50), GUI_SCALE(100)}, {GUI_SCALE(50), GUI_SCALE(100)}};
+
+static void cbDrawArea(WM_MESSAGE *pMsg)
+{
+    switch (pMsg->MsgId)
+    {
+        case WM_PAINT:
+            GUI_SetColor(color_list[DROPDOWN_GetSel(hDropdown0)]);
+            switch (RADIO_GetValue(hRadio0))
+            {
+                case 0:
+                    if (CHECKBOX_GetState(hCheck0))
+                    {
+                        GUI_FillRect(GUI_SCALE_X(70) - GUI_SCALE(50), GUI_SCALE_Y(70) - GUI_SCALE(50),
+                                     GUI_SCALE_X(70) + GUI_SCALE(50), GUI_SCALE_Y(70) + GUI_SCALE(50));
+                    }
+                    else
+                    {
+                        GUI_DrawRect(GUI_SCALE_X(70) - GUI_SCALE(50), GUI_SCALE_Y(70) - GUI_SCALE(50),
+                                     GUI_SCALE_X(70) + GUI_SCALE(50), GUI_SCALE_Y(70) + GUI_SCALE(50));
+                    }
+                    break;
+                case 1:
+                    if (CHECKBOX_GetState(hCheck0))
+                    {
+                        GUI_FillPolygon(triangle_points, 3, GUI_SCALE_COORDS(70, 20));
+                    }
+                    else
+                    {
+                        GUI_DrawPolygon(triangle_points, 3, GUI_SCALE_COORDS(70, 20));
+                    }
+                    break;
+                case 2:
+                    if (CHECKBOX_GetState(hCheck0))
+                    {
+                        GUI_FillEllipse(GUI_SCALE_COORDS(70, 70), GUI_SCALE(50), GUI_SCALE(50));
+                    }
+                    else
+                    {
+                        GUI_DrawEllipse(GUI_SCALE_COORDS(70, 70), GUI_SCALE(50), GUI_SCALE(50));
+                    }
+                    break;
+            }
+            break;
+        default:
+            WM_DefaultProc(pMsg);
+            break;
+    }
+}
+
+static void cbPageWin1(WM_MESSAGE *pMsg)
+{
+    int NCode;
+    int Id;
+
+    switch (pMsg->MsgId)
+    {
+        case WM_NOTIFY_PARENT:
+            Id = WM_GetId(pMsg->hWinSrc);
+            NCode = pMsg->Data.v;
+
+            switch (Id)
+            {
+                case GUI_ID_RADIO0:
+                    switch (NCode)
+                    {
+                        case WM_NOTIFICATION_VALUE_CHANGED:
+                            WM_InvalidateWindow(hDrawArea);
+                            break;
+                    }
+                    break;
+
+                case GUI_ID_DROPDOWN0:
+                    switch (NCode)
+                    {
+                        case WM_NOTIFICATION_SEL_CHANGED:
+                            WM_InvalidateWindow(hDrawArea);
+                            break;
+                    }
+                    break;
+
+                case GUI_ID_CHECK0:
+                    switch (NCode)
+                    {
+                        case WM_NOTIFICATION_VALUE_CHANGED:
+                            WM_InvalidateWindow(hDrawArea);
+                            break;
+                    }
+                    break;
+            }
+            break;
+
+        default:
+            WM_DefaultProc(pMsg);
+            break;
+    }
+}
+
+static void cbPageWin2(WM_MESSAGE *pMsg)
+{
+    int NCode;
+    int Id;
+
+    switch (pMsg->MsgId)
+    {
+        case WM_NOTIFY_PARENT:
+            Id = WM_GetId(pMsg->hWinSrc);
+            NCode = pMsg->Data.v;
+
+            switch (Id)
+            {
+                case GUI_ID_SLIDER0:
+                    switch (NCode)
+                    {
+                        case WM_NOTIFICATION_VALUE_CHANGED:
+                            PROGBAR_SetValue(hProgbar0, SLIDER_GetValue(hSlider0));
+                            break;
+                    }
+                    break;
+
+                case GUI_ID_SLIDER1:
+                    switch (NCode)
+                    {
+                        case WM_NOTIFICATION_VALUE_CHANGED:
+                            SPINBOX_SetValue(hSpinbox0, SLIDER_GetValue(hSlider1));
+                            break;
+                    }
+                    break;
+
+                case GUI_ID_SPINBOX0:
+                    switch (NCode)
+                    {
+                        case WM_NOTIFICATION_VALUE_CHANGED:
+                            SLIDER_SetValue(hSlider1, SPINBOX_GetValue(hSpinbox0));
+                            break;
+                    }
+                    break;
+            }
+            break;
+
+        default:
+            WM_DefaultProc(pMsg);
+            break;
+    }
+}
+
+/*!
+ * @brief Main function
+ */
+int main(void)
+{
+    BOARD_InitPins();
+    BOARD_InitI2C1Pins();
+    BOARD_InitSemcPins();
+    BOARD_InitLcdifPixelClock();
+    BOARD_InitLcd();
+    
+    pc.baud(115200);
+    pc.printf("GUI demo start.\r\n");
+
+    GUI_Init();
+
+    CHECKBOX_SetDefaultFont(GUI_NORMAL_FONT);
+    DROPDOWN_SetDefaultFont(GUI_NORMAL_FONT);
+    MULTIPAGE_SetDefaultFont(GUI_NORMAL_FONT);
+    RADIO_SetDefaultFont(GUI_NORMAL_FONT);
+
+    /* Create multipage widget */
+    MULTIPAGE_Handle hMultipage0;
+    hMultipage0 = MULTIPAGE_CreateEx(GUI_SCALE_RECT(10, 10, 300, 220), 0, WM_CF_SHOW, 0, GUI_ID_MULTIPAGE0);
+
+    WM_HWIN hPageWin;
+
+    /* Create window for page 1 and add it */
+    hPageWin = WINDOW_CreateEx(GUI_SCALE_RECT(0, 0, 300, 200), WM_HBKWIN, 0, 0, GUI_ID_PAGEWIN1, cbPageWin1);
+    MULTIPAGE_AddPage(hMultipage0, hPageWin, "Shapes & Colors");
+
+    /* Create widgets on page 1 */
+    hDropdown0 = DROPDOWN_CreateEx(GUI_SCALE_RECT(10, 10, 100, 80), hPageWin, WM_CF_SHOW, DROPDOWN_CF_AUTOSCROLLBAR,
+                                   GUI_ID_DROPDOWN0);
+    DROPDOWN_SetTextHeight(hDropdown0, GUI_SCALE_Y(20));
+    DROPDOWN_SetScrollbarWidth(hDropdown0, GUI_SCALE_X(20));
+    DROPDOWN_AddString(hDropdown0, "Black");
+    DROPDOWN_AddString(hDropdown0, "Yellow");
+    DROPDOWN_AddString(hDropdown0, "Orange");
+    DROPDOWN_AddString(hDropdown0, "Red");
+    DROPDOWN_AddString(hDropdown0, "Purple");
+    DROPDOWN_AddString(hDropdown0, "Blue");
+    DROPDOWN_AddString(hDropdown0, "Cyan");
+    DROPDOWN_AddString(hDropdown0, "Green");
+
+    hRadio0 =
+        RADIO_CreateEx(GUI_SCALE_RECT(10, 50, 100, 90), hPageWin, WM_CF_SHOW, 0, GUI_ID_RADIO0, 3, GUI_SCALE_Y(30));
+    RADIO_SetText(hRadio0, "Square", 0);
+    RADIO_SetText(hRadio0, "Triangle", 1);
+    RADIO_SetText(hRadio0, "Circle", 2);
+
+    hCheck0 = CHECKBOX_CreateEx(GUI_SCALE_RECT(10, 150, 100, 16), hPageWin, WM_CF_SHOW, 0, GUI_ID_CHECK0);
+    CHECKBOX_SetText(hCheck0, "Fill");
+
+    hDrawArea =
+        WINDOW_CreateEx(GUI_SCALE_RECT(130, 30, 140, 140), hPageWin, WM_CF_SHOW, 0, GUI_ID_DRAWAREA, cbDrawArea);
+
+    /* Create window for page 2 and add it */
+    hPageWin = WINDOW_CreateEx(GUI_SCALE_RECT(0, 0, 300, 200), WM_HBKWIN, 0, 0, GUI_ID_PAGEWIN2, cbPageWin2);
+    MULTIPAGE_AddPage(hMultipage0, hPageWin, "Sliders & spinbox");
+
+    /* Create widgets on page 2 */
+    hSlider0 = SLIDER_CreateEx(GUI_SCALE_RECT(60, 160, 200, 30), hPageWin, WM_CF_SHOW, 0, GUI_ID_SLIDER0);
+    SLIDER_SetWidth(hSlider0, GUI_SCALE(10));
+    SLIDER_SetValue(hSlider0, 50);
+
+    hSlider1 =
+        SLIDER_CreateEx(GUI_SCALE_RECT(10, 10, 30, 180), hPageWin, WM_CF_SHOW, SLIDER_CF_VERTICAL, GUI_ID_SLIDER1);
+    SLIDER_SetWidth(hSlider1, GUI_SCALE(10));
+    SLIDER_SetValue(hSlider1, 50);
+
+    hSpinbox0 = SPINBOX_CreateEx(GUI_SCALE_RECT(100, 80, 100, 50), hPageWin, WM_CF_SHOW, GUI_ID_SPINBOX0, 0, 100);
+    SPINBOX_SetFont(hSpinbox0, GUI_LARGE_FONT);
+    SPINBOX_SetValue(hSpinbox0, 50);
+
+    hProgbar0 =
+        PROGBAR_CreateEx(GUI_SCALE_RECT(60, 10, 200, 40), hPageWin, WM_CF_SHOW, PROGBAR_CF_HORIZONTAL, GUI_ID_PROGBAR0);
+    PROGBAR_SetFont(hProgbar0, GUI_LARGE_FONT);
+    PROGBAR_SetValue(hProgbar0, 50);
+
+    WM_SetDesktopColor(GUI_WHITE);
+    WM_Exec();
+
+    while (1)
+    {
+        /* Poll touch controller for update */
+        if (BOARD_Touch_Poll())
+        {
+            GUI_Exec();
+        }
+    }
+}