//
// GUIslice Library Examples
// - Calvin Hass
// - https://www.impulseadventure.com/elec/guislice-gui.html
// - https://github.com/ImpulseAdventure/GUIslice
// - Example 02 (Arduino):
// - Accept touch input, text button
// - Expected behavior: Clicking on button outputs a message
// to the serial monitor
// - NOTE: This is the simple version of the example without
// optimizing for memory consumption. A "minimal"
// version is located in the "arduino_min" folder which includes
// FLASH memory optimization for reduced memory devices.
//
// ARDUINO NOTES:
// - GUIslice_config.h must be edited to match the pinout connections
// between the Arduino CPU and the display controller (see ADAGFX_PIN_*).
#include "GUIslice.h"
#include "GUIslice_drv.h"
// Defines for resources
// ------------------------------------------------
// Load specific fonts
// ------------------------------------------------
// To demonstrate additional fonts, uncomment the following line:
#define USE_EXTRA_FONTS
// Different display drivers provide different fonts, so a few examples
// have been provided and selected here. Font files are usually
// located within the display library folder or fonts subfolder.
#ifdef USE_EXTRA_FONTS
#include <Adafruit_GFX.h>
#include <gfxfont.h>
#include "Fonts/FreeSansBold12pt7b.h"
#define FONT_NAME1 &FreeSansBold12pt7b
#else
// Use the default font
#define FONT_NAME1 NULL
#endif
// Enumerations for pages, elements, fonts, images
enum {E_PG_MAIN};
enum {E_ELEM_BOX,E_ELEM_BTN_QUIT};
enum {E_FONT_BTN,E_FONT_TXT,MAX_FONT}; // Use separate enum for fonts, MAX_FONT at end
bool m_bQuit = false;
// Instantiate the GUI
#define MAX_PAGE 1
#define MAX_ELEM_PG_MAIN 2
gslc_tsGui m_gui;
gslc_tsDriver m_drv;
gslc_tsFont m_asFont[MAX_FONT];
gslc_tsPage m_asPage[MAX_PAGE];
gslc_tsElem m_asPageElem[MAX_ELEM_PG_MAIN];
gslc_tsElemRef m_asPageElemRef[MAX_ELEM_PG_MAIN];
// Define debug message function
static int16_t DebugOut(char ch) { Serial.write(ch); return 0; }
// Button callbacks
// - This function gets called when the button is pressed
bool CbBtnQuit(void* pvGui,void *pvElemRef,gslc_teTouch eTouch,int16_t nX,int16_t nY)
{
// Determine what type of event occurred on the button
// - In this case we're just looking for the user releasing
// a touch over the button.
if (eTouch == GSLC_TOUCH_UP_IN) {
// Output a message when the button is pressed
Serial.println("Quit button pressed");
// Set a variable flag that we can use elsewhere
m_bQuit = true;
}
return true;
}
void setup()
{
gslc_tsElemRef* pElemRef = NULL;
// Initialize debug output
Serial.begin(9600);
gslc_InitDebug(&DebugOut);
//delay(1000); // NOTE: Some devices require a delay after Serial.begin() before serial port can be used
// Initialize
if (!gslc_Init(&m_gui,&m_drv,m_asPage,MAX_PAGE,m_asFont,MAX_FONT)) { return; }
// Load Fonts
if (!gslc_FontSet(&m_gui,E_FONT_BTN,GSLC_FONTREF_PTR,FONT_NAME1,1)) { return; }
if (!gslc_FontSet(&m_gui,E_FONT_TXT,GSLC_FONTREF_PTR,NULL,1)) { return; }
// -----------------------------------
// Create page elements
gslc_PageAdd(&m_gui,E_PG_MAIN,m_asPageElem,MAX_ELEM_PG_MAIN,m_asPageElemRef,MAX_ELEM_PG_MAIN);
// Background flat color
gslc_SetBkgndColor(&m_gui,GSLC_COL_GRAY_DK2);
// Create background box
pElemRef = gslc_ElemCreateBox(&m_gui,E_ELEM_BOX,E_PG_MAIN,(gslc_tsRect){10,50,300,150});
gslc_ElemSetCol(&m_gui,pElemRef,GSLC_COL_WHITE,GSLC_COL_BLACK,GSLC_COL_BLACK);
// Create Quit button with text label
pElemRef = gslc_ElemCreateBtnTxt(&m_gui,E_ELEM_BTN_QUIT,E_PG_MAIN,
(gslc_tsRect){120,100,80,40},(char*)"Quit",0,E_FONT_BTN,&CbBtnQuit);
// -----------------------------------
// Start up display on main page
gslc_SetPageCur(&m_gui,E_PG_MAIN);
m_bQuit = false;
}
void loop()
{
// Periodically call GUIslice update function
gslc_Update(&m_gui);
// In most programs, we would detect the button press and take an
// action. In this simplest of examples, the "Quit" button callback
// just outputs a message to the serial monitor when pressed and
// sets the variable m_bQuit to true but the main loop continues to run.
}