int main(void) { halInit(); chSysInit(); /* Initialize and clear the display */ gdispInit(); gdispClear(Lime); /* Create two windows */ GW1 = gwinCreateWindow(NULL, 20, 10, 200, 150); GW2 = gwinCreateWindow(NULL, 50, 190, 150, 100); /* Set fore- and background colors for both windows */ gwinSetColor(GW1, Black); gwinSetBgColor(GW1, White); gwinSetColor(GW2, White); gwinSetBgColor(GW2, Blue); /* Clear both windows - to set background color */ gwinClear(GW1); gwinClear(GW2); /* * Draw two filled circles at the same coordinate * of each window to demonstrate the relative coordinates * of windows */ gwinFillCircle(GW1, 20, 20, 15); gwinFillCircle(GW2, 20, 20, 15); while(TRUE) { chThdSleepMilliseconds(500); } }
int main(void) { uint8_t i; font_t font1, font2; /* initialize and clear the display */ gfxInit(); /* Set some fonts */ font1 = gdispOpenFont("UI2"); font2 = gdispOpenFont("DejaVu Sans 12"); gwinSetDefaultFont(font1); /* create the three console windows */ { GWindowInit wi; wi.show = TRUE; wi.x = 0; wi.y = 0; wi.width = gdispGetWidth(); wi.height = gdispGetHeight()/2; GW1 = gwinConsoleCreate(NULL, &wi); wi.y = gdispGetHeight()/2; wi.width = gdispGetWidth()/2; wi.height = gdispGetHeight(); GW2 = gwinConsoleCreate(NULL, &wi); wi.x = gdispGetWidth()/2; wi.height = gdispGetHeight(); GW3 = gwinConsoleCreate(NULL, &wi); } /* Use a special font for GW1 */ gwinSetFont(GW1, font2); /* Set the fore- and background colors for each console */ gwinSetColor(GW1, Green); gwinSetBgColor(GW1, Black); gwinSetColor(GW2, White); gwinSetBgColor(GW2, Blue); gwinSetColor(GW3, Black); gwinSetBgColor(GW3, Red); /* clear all console windows - to set background */ gwinClear(GW1); gwinClear(GW2); gwinClear(GW3); /* Output some data on the first console */ for(i = 0; i < 10; i++) { gwinPrintf(GW1, "Hello uGFX!\r\n"); } /* Output some data on the second console */ for(i = 0; i < 16; i++) { gwinPrintf(GW2, "Message Nr.: %d\r\n", i+1); } /* Output some data on the third console */ for(i = 0; i < 18; i++) { gwinPrintf(GW3, "Message Nr.: %d\r\n", i+1); } while(TRUE) { gfxSleepMilliseconds(500); } }
int main(void) { uint8_t i; font_t font1, font2; halInit(); chSysInit(); /* initialize and clear the display */ gdispInit(); gdispClear(Black); font1 = gdispOpenFont("UI2 Double"); font2 = gdispOpenFont("Small"); /* create the three console windows and set a font for each */ GW1 = gwinCreateConsole(NULL, 0, 0, gdispGetWidth(), gdispGetHeight()/2, font1); GW2 = gwinCreateConsole(NULL, 0, gdispGetHeight()/2, gdispGetWidth()/2, gdispGetHeight(), font2); GW3 = gwinCreateConsole(NULL, gdispGetWidth()/2, gdispGetHeight()/2, gdispGetWidth(), gdispGetHeight(), font2); /* Set the fore- and background colors for each console */ gwinSetColor(GW1, Green); gwinSetBgColor(GW1, Black); gwinSetColor(GW2, White); gwinSetBgColor(GW2, Blue); gwinSetColor(GW3, Black); gwinSetBgColor(GW3, Red); /* clear all console windows - to set background */ gwinClear(GW1); gwinClear(GW2); gwinClear(GW3); /* receive the stream pointers of each console */ S1 = gwinGetConsoleStream(GW1); S2 = gwinGetConsoleStream(GW2); S3 = gwinGetConsoleStream(GW3); /* Output some data on the first console */ for(i = 0; i < 10; i++) { chprintf(S1, "Hello ChibiOS/GFX!\r\n"); } /* Output some data on the second console */ for(i = 0; i < 16; i++) { chprintf(S2, "Message Nr.: %d\r\n", i+1); } /* Output some data on the third console */ for(i = 0; i < 18; i++) { chprintf(S3, "Message Nr.: %d\r\n", i+1); } while(TRUE) { chThdSleepMilliseconds(500); } }
static void createWidgets(void) { GWidgetInit wi; // Apply some default values for GWIN wi.customDraw = 0; wi.customParam = 0; wi.customStyle = 0; wi.g.show = TRUE; // Apply the console parameters wi.g.width = 215; wi.g.height = 280; wi.g.y = 20; wi.g.x = 10; // Create the actual console ghConsole = gwinConsoleCreate(NULL, &wi.g); // Set the console fore- and background colors gwinSetColor(ghConsole, Yellow); gwinSetBgColor(ghConsole, Black); // Clear the console gwinClear(ghConsole); }
static void _updateColor(void) { uint32_t color; color = (unsigned)gwinSliderGetPosition(ghSliderR) << 16; color |= (unsigned)gwinSliderGetPosition(ghSliderG) << 8; color |= (unsigned)gwinSliderGetPosition(ghSliderB) << 0; gwinSetBgColor(ghWindow1, HTML2COLOR(color)); gwinClear(ghWindow1); }
/* * Application entry point. */ int main(void) { GHandle ghScope; coord_t swidth, sheight; gfxInit(); /* Get the screen dimensions */ swidth = gdispGetWidth(); sheight = gdispGetHeight(); /* Set up the scope window to fill the screen */ ghScope = gwinCreateScope(&gScopeWindow, 0, 0, swidth, sheight, MY_AUDIO_CHANNEL, MY_AUDIO_FREQUENCY); gwinSetBgColor(ghScope, White); gwinSetColor(ghScope, Red); gwinClear(ghScope); /* Just keep displaying the scope traces */ while (TRUE) { gwinWaitForScopeTrace(ghScope); } }
/** * Create the widgets. */ static void createWidgets(void) { GWidgetInit wi; gwinWidgetClearInit(&wi); // Create the console - set colors before making it visible wi.g.show = FALSE; wi.g.x = 0; wi.g.y = 0; wi.g.width = gdispGetWidth(); wi.g.height = gdispGetHeight()/2; ghConsole = gwinConsoleCreate(0, &wi.g); gwinSetColor(ghConsole, Black); gwinSetBgColor(ghConsole, HTML2COLOR(0xF0F0F0)); gwinShow(ghConsole); gwinClear(ghConsole); // Create the keyboard wi.g.show = TRUE; wi.g.x = 0; wi.g.y = gdispGetHeight()/2; wi.g.width = gdispGetWidth(); wi.g.height = gdispGetHeight()/2; ghKeyboard = gwinKeyboardCreate(0, &wi); }
/* * Application entry point. */ int main(void) { GHandle ghScope; coord_t swidth, sheight; gfxInit(); /** * Allocate audio buffers - eg. 4 x 128 byte buffers. * You may need to increase this for slower cpu's. * You may be able to decrease this for low latency operating systems. * 8 x 256 seems to work on the really slow Olimex SAM7EX256 board (display speed limitation) @8kHz * If your oscilloscope display stops then it is likely that your driver has stalled due to running * out of free buffers. Increase the number of buffers.. */ gfxBufferAlloc(8, 256); /* Get the screen dimensions */ swidth = gdispGetWidth(); sheight = gdispGetHeight(); /* Set up the scope window to fill the screen */ { GWindowInit wi; gwinClearInit(&wi); wi.show = TRUE; wi.x = wi.y = 0; wi.width = swidth; wi.height = sheight; ghScope = gwinScopeCreate(&gScopeWindow, &wi, MY_AUDIO_CHANNEL, MY_AUDIO_FREQUENCY, MY_AUDIO_FORMAT); } gwinSetBgColor(ghScope, White); gwinSetColor(ghScope, Red); gwinClear(ghScope); /* Just keep displaying the scope traces */ while (TRUE) { gwinScopeWaitForTrace(ghScope); } }
int main(void) { GEventKeyboard *pk; unsigned i; /* initialize and clear the display */ gfxInit(); /* Set a font */ gwinSetDefaultFont(gdispOpenFont("*")); // We want to listen for keyboard events geventListenerInit(&gl); geventAttachSource(&gl, ginputGetKeyboard(0), GLISTEN_KEYTRANSITIONS|GLISTEN_KEYUP); /* create the console window */ { GWindowInit wi; gwinClearInit(&wi); wi.show = TRUE; wi.x = 0; wi.y = 0; wi.width = gdispGetWidth(); wi.height = gdispGetHeight(); GW = gwinConsoleCreate(0, &wi); /* Set the fore- and background colors for the console */ gwinSetColor(GW, Yellow); gwinSetBgColor(GW, Black); gwinClear(GW); } /* Say Hello */ gwinPrintf(GW, "Keyboard Monitor...\n"); while(1) { // Get an Event pk = (GEventKeyboard *)geventEventWait(&gl, TIME_INFINITE); if (pk->type != GEVENT_KEYBOARD) continue; gwinPrintf(GW, "KEYSTATE: 0x%04X [ %s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s]", pk->keystate, (!pk->keystate ? "NONE " : ""), ((pk->keystate & GKEYSTATE_KEYUP) ? "KEYUP " : ""), ((pk->keystate & GKEYSTATE_REPEAT) ? "REPEAT " : ""), ((pk->keystate & GKEYSTATE_SPECIAL) ? "SPECIAL " : ""), ((pk->keystate & GKEYSTATE_RAW) ? "RAW " : ""), ((pk->keystate & GKEYSTATE_SHIFT_L) ? "LSHIFT " : ""), ((pk->keystate & GKEYSTATE_SHIFT_R) ? "RSHIFT " : ""), ((pk->keystate & GKEYSTATE_CTRL_L) ? "LCTRL " : ""), ((pk->keystate & GKEYSTATE_CTRL_R) ? "RCTRL " : ""), ((pk->keystate & GKEYSTATE_ALT_L) ? "LALT " : ""), ((pk->keystate & GKEYSTATE_ALT_R) ? "RALT " : ""), ((pk->keystate & GKEYSTATE_FN) ? "FN " : ""), ((pk->keystate & GKEYSTATE_COMPOSE) ? "COMPOSE " : ""), ((pk->keystate & GKEYSTATE_WINKEY) ? "WINKEY " : ""), ((pk->keystate & GKEYSTATE_CAPSLOCK) ? "CAPSLOCK " : ""), ((pk->keystate & GKEYSTATE_NUMLOCK) ? "NUMLOCK " : ""), ((pk->keystate & GKEYSTATE_SCROLLLOCK) ? "SCROLLLOCK " : "") ); if (pk->bytecount) { gwinPrintf(GW, " Keys:"); for (i = 0; i < pk->bytecount; i++) gwinPrintf(GW, " 0x%02X", (uint8_t)pk->c[i]); gwinPrintf(GW, " ["); for (i = 0; i < pk->bytecount; i++) gwinPrintf(GW, "%c", pk->c[i] >= ' ' && pk->c[i] <= '~' ? pk->c[i] : ' '); gwinPrintf(GW, "]"); } gwinPrintf(GW, "\n"); } }
/** * Create all the widgets. * With the exception of the Pages they are all initially visible. * * This routine is complicated by the fact that we want a dynamic * layout so it looks good on small and large displays. * It is tested to work on 320x272 as a minimum LCD size. */ static void createWidgets(void) { GWidgetInit wi; coord_t border, pagewidth; gwinWidgetClearInit(&wi); // Calculate page borders based on screen size border = ScrWidth < 450 ? 1 : 5; // Create the Tabs #if GWIN_NEED_TABSET wi.g.show = TRUE; wi.g.x = border; wi.g.y = 0; wi.g.width = ScrWidth - 2*border; wi.g.height = ScrHeight-wi.g.y-border; ghTabset = gwinTabsetCreate(0, &wi, GWIN_TABSET_BORDER); ghPgButtons = gwinTabsetAddTab(ghTabset, "Buttons", FALSE); ghPgSliders = gwinTabsetAddTab(ghTabset, "Sliders", FALSE); ghPgCheckboxes = gwinTabsetAddTab(ghTabset, "Checkbox", FALSE); ghPgRadios = gwinTabsetAddTab(ghTabset, "Radios", FALSE); ghPgLists = gwinTabsetAddTab(ghTabset, "Lists", FALSE); ghPgLabels = gwinTabsetAddTab(ghTabset, "Labels", FALSE); ghPgImages = gwinTabsetAddTab(ghTabset, "Images", FALSE); ghPgProgressbars = gwinTabsetAddTab(ghTabset, "Progressbar", FALSE); pagewidth = gwinGetInnerWidth(ghTabset)/2; // Console - we apply some special colors before making it visible // We put the console on the tabset itself rather than a tab-page. // This makes it appear on every page :) wi.g.parent = ghTabset; wi.g.x = pagewidth; wi.g.width = pagewidth; ghConsole = gwinConsoleCreate(0, &wi.g); gwinSetColor(ghConsole, Black); gwinSetBgColor(ghConsole, HTML2COLOR(0xF0F0F0)); #else wi.g.show = TRUE; wi.customDraw = gwinRadioDraw_Tab; wi.g.height = TAB_HEIGHT; wi.g.y = 0; wi.g.x = 0; setbtntext(&wi, ScrWidth, "Buttons"); ghTabButtons = gwinRadioCreate(0, &wi, GROUP_TABS); wi.g.x += wi.g.width; settabtext(&wi, "Sliders"); ghTabSliders = gwinRadioCreate(0, &wi, GROUP_TABS); wi.g.x += wi.g.width; settabtext(&wi, "Checkbox"); ghTabCheckboxes = gwinRadioCreate(0, &wi, GROUP_TABS); wi.g.x += wi.g.width; settabtext(&wi, "Radios"); ghTabRadios = gwinRadioCreate(0, &wi, GROUP_TABS); wi.g.x += wi.g.width; settabtext(&wi, "Lists"); ghTabLists = gwinRadioCreate(0, &wi, GROUP_TABS); wi.g.x += wi.g.width; settabtext(&wi, "Labels"); ghTabLabels = gwinRadioCreate(0, &wi, GROUP_TABS); wi.g.x += wi.g.width; settabtext(&wi, "Images"); ghTabImages = gwinRadioCreate(0, &wi, GROUP_TABS); wi.g.x += wi.g.width; settabtext(&wi, "Progressbar"); ghTabProgressbar = gwinRadioCreate(0, &wi, GROUP_TABS); wi.g.y += wi.g.height; wi.customDraw = 0; // Create the Pages wi.g.show = FALSE; wi.g.x = border; wi.g.y += border; wi.g.width = ScrWidth/2 - border; wi.g.height = ScrHeight-wi.g.y-border; ghPgButtons = gwinContainerCreate(0, &wi, GWIN_CONTAINER_BORDER); ghPgSliders = gwinContainerCreate(0, &wi, GWIN_CONTAINER_BORDER); ghPgCheckboxes = gwinContainerCreate(0, &wi, GWIN_CONTAINER_BORDER); ghPgRadios = gwinContainerCreate(0, &wi, GWIN_CONTAINER_BORDER); ghPgLists = gwinContainerCreate(0, &wi, GWIN_CONTAINER_BORDER); ghPgLabels = gwinContainerCreate(0, &wi, GWIN_CONTAINER_BORDER); ghPgImages = gwinContainerCreate(0, &wi, GWIN_CONTAINER_BORDER); ghPgProgressbars = gwinContainerCreate(0, &wi, GWIN_CONTAINER_BORDER); wi.g.show = TRUE; // Console - we apply some special colors before making it visible wi.g.x = ScrWidth/2+border; wi.g.width = ScrWidth/2 - 2*border; ghConsole = gwinConsoleCreate(0, &wi.g); gwinSetColor(ghConsole, Black); gwinSetBgColor(ghConsole, HTML2COLOR(0xF0F0F0)); pagewidth = gwinGetInnerWidth(ghPgButtons); #endif // Buttons wi.g.parent = ghPgButtons; wi.g.width = BUTTON_WIDTH; wi.g.height = BUTTON_HEIGHT; wi.g.y = 5; wi.g.x = 5; setbtntext(&wi, pagewidth, "Button 1"); ghButton1 = gwinButtonCreate(0, &wi); wi.g.x += wi.g.width+3; setbtntext(&wi, pagewidth, "Button 2"); ghButton2 = gwinButtonCreate(0, &wi); wi.g.x += wi.g.width+3; setbtntext(&wi, pagewidth, "Button 3"); ghButton3 = gwinButtonCreate(0, &wi); wi.g.x += wi.g.width+3; setbtntext(&wi, pagewidth, "Button 4"); ghButton4 = gwinButtonCreate(0, &wi); // Horizontal Sliders wi.g.parent = ghPgSliders; wi.g.width = pagewidth - 10; wi.g.height = SLIDER_WIDTH; wi.g.x = 5; wi.g.y = 5; wi.text = "S1"; ghSlider1 = gwinSliderCreate(0, &wi); gwinSliderSetPosition(ghSlider1, 33); wi.g.y += wi.g.height + 1; wi.text = "S2"; ghSlider2 = gwinSliderCreate(0, &wi); gwinSliderSetPosition(ghSlider2, 86); // Vertical Sliders wi.g.y += wi.g.height + 5; wi.g.width = SLIDER_WIDTH; wi.g.height = gwinGetInnerHeight(ghPgSliders) - 5 - wi.g.y; wi.g.x = 5; wi.text = "S3"; ghSlider3 = gwinSliderCreate(0, &wi); gwinSliderSetPosition(ghSlider3, 13); wi.g.x += wi.g.width+1; wi.text = "S4"; ghSlider4 = gwinSliderCreate(0, &wi); gwinSliderSetPosition(ghSlider4, 76); // Checkboxes - for the 2nd and 3rd checkbox we apply special drawing before making it visible wi.g.parent = ghPgCheckboxes; wi.g.width = CHECKBOX_WIDTH; wi.g.height = CHECKBOX_HEIGHT; wi.g.x = 5; wi.g.y = 5; wi.text = "C1"; ghCheckbox1 = gwinCheckboxCreate(0, &wi); wi.customDraw = gwinCheckboxDraw_CheckOnRight; wi.g.y += wi.g.height+1; wi.text = "C2"; ghCheckbox2 = gwinCheckboxCreate(0, &wi); wi.customDraw = gwinCheckboxDraw_Button; wi.g.y += wi.g.height+1; wi.text = "C3"; wi.g.width = BUTTON_WIDTH; wi.g.height = BUTTON_HEIGHT; ghCheckbox3 = gwinCheckboxCreate(0, &wi); wi.g.y += wi.g.height+1; wi.text = "Disable All"; wi.customDraw = 0; wi.g.width = DISABLEALL_WIDTH; wi.g.height = CHECKBOX_HEIGHT; ghCheckDisableAll = gwinCheckboxCreate(0, &wi); // Labels wi.g.parent = ghPgLabels; wi.g.width = pagewidth-10; wi.g.height = LABEL_HEIGHT; wi.g.x = wi.g.y = 5; wi.text = "N/A"; ghLabelSlider1 = gwinLabelCreate(0, &wi); gwinLabelSetAttribute(ghLabelSlider1, 100, "Slider 1:"); wi.g.y += LABEL_HEIGHT + 2; ghLabelSlider2 = gwinLabelCreate(0, &wi); gwinLabelSetAttribute(ghLabelSlider2, 100, "Slider 2:"); wi.g.y += LABEL_HEIGHT + 2; ghLabelSlider3 = gwinLabelCreate(0, &wi); gwinLabelSetAttribute(ghLabelSlider3, 100, "Slider 3:"); wi.g.y += LABEL_HEIGHT + 2; ghLabelSlider4 = gwinLabelCreate(0, &wi); gwinLabelSetAttribute(ghLabelSlider4, 100, "Slider 4:"); wi.g.y += LABEL_HEIGHT + 2; ghLabelRadio1 = gwinLabelCreate(0, &wi); gwinLabelSetAttribute(ghLabelRadio1, 100, "RadioButton 1:"); // Radio Buttons wi.g.parent = ghPgRadios; wi.g.width = RADIO_WIDTH; wi.g.height = RADIO_HEIGHT; wi.g.y = 5; wi.g.x = 5; wi.text = "Yes"; ghRadio1 = gwinRadioCreate(0, &wi, GROUP_YESNO); wi.g.x += wi.g.width; wi.text = "No"; if (wi.g.x + wi.g.width > pagewidth) { wi.g.x = 5; wi.g.y += RADIO_HEIGHT; } ghRadio2 = gwinRadioCreate(0, &wi, GROUP_YESNO); gwinRadioPress(ghRadio1); wi.g.width = COLOR_WIDTH; wi.g.y += RADIO_HEIGHT+5; wi.g.x = 5; wi.text = "Black"; ghRadioBlack = gwinRadioCreate(0, &wi, GROUP_COLORS); wi.g.x += wi.g.width; wi.text = "White"; if (wi.g.x + wi.g.width > pagewidth) { wi.g.x = 5; wi.g.y += RADIO_HEIGHT; } ghRadioWhite = gwinRadioCreate(0, &wi, GROUP_COLORS); wi.g.x += wi.g.width; wi.text = "Yellow"; if (wi.g.x + wi.g.width > pagewidth) { wi.g.x = 5; wi.g.y += RADIO_HEIGHT; } ghRadioYellow = gwinRadioCreate(0, &wi, GROUP_COLORS); gwinRadioPress(ghRadioWhite); // Lists border = pagewidth < 10+2*LIST_WIDTH ? 2 : 5; wi.g.parent = ghPgLists; wi.g.width = LIST_WIDTH; wi.g.height = LIST_HEIGHT; wi.g.y = border; wi.g.x = border; wi.text = "L1"; ghList1 = gwinListCreate(0, &wi, FALSE); gwinListAddItem(ghList1, "Item 0", FALSE); gwinListAddItem(ghList1, "Item 1", FALSE); gwinListAddItem(ghList1, "Item 2", FALSE); gwinListAddItem(ghList1, "Item 3", FALSE); gwinListAddItem(ghList1, "Item 4", FALSE); gwinListAddItem(ghList1, "Item 5", FALSE); gwinListAddItem(ghList1, "Item 6", FALSE); gwinListAddItem(ghList1, "Item 7", FALSE); gwinListAddItem(ghList1, "Item 8", FALSE); gwinListAddItem(ghList1, "Item 9", FALSE); gwinListAddItem(ghList1, "Item 10", FALSE); gwinListAddItem(ghList1, "Item 11", FALSE); gwinListAddItem(ghList1, "Item 12", FALSE); gwinListAddItem(ghList1, "Item 13", FALSE); wi.text = "L2"; wi.g.x += LIST_WIDTH+border; if (wi.g.x + LIST_WIDTH > pagewidth) { wi.g.x = border; wi.g.y += LIST_HEIGHT+border; } ghList2 = gwinListCreate(0, &wi, TRUE); gwinListAddItem(ghList2, "Item 0", FALSE); gwinListAddItem(ghList2, "Item 1", FALSE); gwinListAddItem(ghList2, "Item 2", FALSE); gwinListAddItem(ghList2, "Item 3", FALSE); gwinListAddItem(ghList2, "Item 4", FALSE); gwinListAddItem(ghList2, "Item 5", FALSE); gwinListAddItem(ghList2, "Item 6", FALSE); gwinListAddItem(ghList2, "Item 7", FALSE); gwinListAddItem(ghList2, "Item 8", FALSE); gwinListAddItem(ghList2, "Item 9", FALSE); gwinListAddItem(ghList2, "Item 10", FALSE); gwinListAddItem(ghList2, "Item 11", FALSE); gwinListAddItem(ghList2, "Item 12", FALSE); gwinListAddItem(ghList2, "Item 13", FALSE); wi.text = "L3"; wi.g.x += LIST_WIDTH+border; if (wi.g.x + LIST_WIDTH > pagewidth) { wi.g.x = border; wi.g.y += LIST_HEIGHT+border; } ghList3 = gwinListCreate(0, &wi, TRUE); gwinListAddItem(ghList3, "Item 0", FALSE); gwinListAddItem(ghList3, "Item 1", FALSE); gwinListAddItem(ghList3, "Item 2", FALSE); gwinListAddItem(ghList3, "Item 3", FALSE); gdispImageOpenFile(&imgYesNo, "image_yesno.gif"); gwinListItemSetImage(ghList3, 1, &imgYesNo); gwinListItemSetImage(ghList3, 3, &imgYesNo); wi.text = "L4"; wi.g.x += LIST_WIDTH+border; if (wi.g.x + LIST_WIDTH > pagewidth) { wi.g.x = border; wi.g.y += LIST_HEIGHT+border; } ghList4 = gwinListCreate(0, &wi, TRUE); gwinListAddItem(ghList4, "Item 0", FALSE); gwinListAddItem(ghList4, "Item 1", FALSE); gwinListAddItem(ghList4, "Item 2", FALSE); gwinListAddItem(ghList4, "Item 3", FALSE); gwinListAddItem(ghList4, "Item 4", FALSE); gwinListAddItem(ghList4, "Item 5", FALSE); gwinListAddItem(ghList4, "Item 6", FALSE); gwinListAddItem(ghList4, "Item 7", FALSE); gwinListAddItem(ghList4, "Item 8", FALSE); gwinListAddItem(ghList4, "Item 9", FALSE); gwinListAddItem(ghList4, "Item 10", FALSE); gwinListAddItem(ghList4, "Item 11", FALSE); gwinListAddItem(ghList4, "Item 12", FALSE); gwinListAddItem(ghList4, "Item 13", FALSE); gwinListSetScroll(ghList4, scrollSmooth); // Image wi.g.parent = ghPgImages; wi.g.x = wi.g.y = 0; wi.g.width = pagewidth; wi.g.height = gwinGetInnerHeight(ghPgImages); ghImage1 = gwinImageCreate(0, &wi.g); gwinImageOpenFile(ghImage1, "romfs_img_ugfx.gif"); // Progressbar wi.g.parent = ghPgProgressbars; wi.g.width = pagewidth-10; wi.g.height = SLIDER_WIDTH; wi.g.y = 5; wi.g.x = 5; wi.text = "Progressbar 1"; ghProgressbar1 = gwinProgressbarCreate(0, &wi); gwinProgressbarSetResolution(ghProgressbar1, 10); }
static msg_t notepadThread(void *param) { GEventMouse *pem; GEventGWinButton *peb; GHandle ghc; (void)param; /* Get the display dimensions */ swidth = gdispGetWidth(); sheight = gdispGetHeight(); font = gdispOpenFont("UI2"); /* Initialize the mouse */ geventListenerInit(&gl); ginputGetMouse(0); initButtons(); /* Configure the GIF decoder with the toolbar Icon images */ gdispImageSetMemoryReader(&toolbarImageFilmstrip, toolbarIcons); gdispImageOpen(&toolbarImageFilmstrip); /* Set clip to the entire screen */ gdispSetClip(0, 0, swidth, sheight); /* Clear the screen with the window background * Also, draw the title bars */ gdispClear(nCurColorScheme.winBgColor); gdispDrawBox(0, 0, swidth, sheight, nCurColorScheme.titleBarColor); gdispFillArea(0, 0, swidth, NPAD_TITLEBAR_HEIGHT, nCurColorScheme.titleBarColor); gdispDrawStringBox(NPAD_TITLETEXT_START_X, NPAD_TITLETEXT_START_Y, swidth, NPAD_TITLEBAR_HEIGHT, NPAD_TITLETEXT_STR, font, nCurColorScheme.titleTextColor, justifyLeft); /* Create the drawing window, draw its border */ gdispDrawBox(NPAD_DRAWING_AREA_START_X - 1, NPAD_DRAWING_AREA_START_Y - 1, NPAD_DRAWING_AREA_WIDTH + 2, NPAD_DRAWING_AREA_HEIGHT + 2, nCurColorScheme.drawingWinBorder); nDrawingArea = gwinCreateWindow(NULL, NPAD_DRAWING_AREA_START_X, NPAD_DRAWING_AREA_START_Y, NPAD_DRAWING_AREA_WIDTH, NPAD_DRAWING_AREA_HEIGHT); /* Create the bottom status bar console */ ghc = gwinCreateConsole(NULL, NPAD_STATUSBAR_START_X, NPAD_STATUSBAR_START_Y, NPAD_STATUSBAR_WIDTH, NPAD_STATUSBAR_HEIGHT, font); gdispImageDraw(&toolbarImageFilmstrip, NPAD_STATUSBAR_ICON_START_X, NPAD_STATUSBAR_ICON_START_Y, NPAD_ICON_WIDTH, NPAD_ICON_HEIGHT, NPAD_ICON_START(12), 0); gwinSetBgColor(ghc, nCurColorScheme.winBgColor); gwinSetColor(ghc, Black); gstatusConsole = gwinGetConsoleStream(ghc); /* draw the buttons */ gwinSetColor(nDrawingArea, Black); gwinSetBgColor(nDrawingArea, White); gwinClear(nDrawingArea); gwinClear(ghc); drawButtons(); drawVButtons(); chprintf(gstatusConsole, "Welcome to ChibiOS/GFX Notepad demo."); ncoreSpawnDrawThread(nDrawingArea, gstatusConsole); while(TRUE) { pem = (GEventMouse *) geventEventWait(&gl, TIME_INFINITE); /* button pressed... */ if (pem->type == GEVENT_GWIN_BUTTON) { peb = (GEventGWinButton *)pem; if (peb->button == H(btnNew)) { // Reset all the settings selColorIndex = 0; selPenWidth = 0; ncoreSetMode(NCORE_MODE_DRAW); gwinSetColor(nDrawingArea, Black); gwinSetBgColor(nDrawingArea, White); // Refresh the buttons drawButtons(); drawVButtons(); gwinClear(nDrawingArea); chprintf(gstatusConsole, "\nScreen Cleared."); } else if (peb->button == H(btnOpen)) { chprintf(gstatusConsole, "\nFile Open not implemented."); } else if (peb->button == H(btnSave)) { chprintf(gstatusConsole, "\nFile Save not implemented."); } else if (peb->button == H(btnPencil)) { ncoreSetMode(NCORE_MODE_DRAW); drawVButtons(); chprintf(gstatusConsole, "\nPencil Tool Selected."); } else if (peb->button == H(btnEraser)) { ncoreSetMode(NCORE_MODE_ERASE); drawVButtons(); chprintf(gstatusConsole, "\nEraser Tool Selected."); } else if (peb->button == H(btnFill)) { ncoreSetMode(NCORE_MODE_FILL); drawVButtons(); chprintf(gstatusConsole, "\nFill Tool Selected."); } else if (peb->button == H(btnClose)) { break; } } } gwinDestroyWindow(ghc); // No need to destroy the buttons as they are statically allocated gdispCloseFont(font); ncoreTerminateDrawThread(); gdispImageClose(&toolbarImageFilmstrip); return 0; }
int main(void) { uint8_t i; font_t font1, font2; /* initialize and clear the display */ gfxInit(); /* Set some fonts */ font1 = gdispOpenFont("UI2"); font2 = gdispOpenFont("DejaVu Sans 12"); gwinSetDefaultFont(font1); /* create the three console windows */ { GWindowInit wi; gwinClearInit(&wi); wi.show = TRUE; wi.x = 0; wi.y = 0; wi.width = gdispGetWidth(); wi.height = gdispGetHeight()/2; GW1 = gwinConsoleCreate(0, &wi); wi.y = gdispGetHeight()/2; wi.width = gdispGetWidth()/2; wi.height = gdispGetHeight(); GW2 = gwinConsoleCreate(0, &wi); wi.x = gdispGetWidth()/2; wi.height = gdispGetHeight(); GW3 = gwinConsoleCreate(0, &wi); } /* Use a special font for GW1 */ gwinSetFont(GW1, font2); /* Set the fore- and background colors for each console */ gwinSetColor(GW1, Green); gwinSetBgColor(GW1, Black); gwinSetColor(GW2, White); gwinSetBgColor(GW2, Blue); gwinSetColor(GW3, Black); gwinSetBgColor(GW3, Red); /* clear all console windows - to set background */ gwinClear(GW1); gwinClear(GW2); gwinClear(GW3); /* Output some data on the first console */ for(i = 0; i < 10; i++) { gwinPrintf(GW1, "Hello \033buGFX\033B!\n"); } /* Output some data on the second console - Fast */ for(i = 0; i < 32; i++) { gwinPrintf(GW2, "Message Nr.: \0331\033b%d\033B\033C\n", i+1); } /* Output some data on the third console - Slowly */ for(i = 0; i < 32; i++) { gwinPrintf(GW3, "Message Nr.: \033u%d\033U\n", i+1); gfxSleepMilliseconds(500); } /* Make console 3 invisible and then visible again to demonstrate the history buffer */ gwinPrintf(GW2, "Making red window \033uinvisible\033U\n"); gwinSetVisible(GW3, FALSE); gfxSleepMilliseconds(1000); gwinPrintf(GW2, "Making red window \033uvisible\033U\n"); gwinSetVisible(GW3, TRUE); gwinPrintf(GW3, "\033bI'm back!!!\033B\n", i+1); while(TRUE) { gfxSleepMilliseconds(500); } }
/** * Create all the widgets. * With the exception of the Tabs they are all created invisible. */ static void createWidgets(void) { GWidgetInit wi; wi.customDraw = 0; wi.customParam = 0; wi.customStyle = 0; // Create the Tabs wi.g.show = TRUE; wi.customDraw = gwinRadioDraw_Tab; wi.g.width = ScrWidth/7; wi.g.height = TAB_HEIGHT; wi.g.y = 0; wi.g.x = 0*wi.g.width; wi.text = "Buttons"; ghTabButtons = gwinRadioCreate(NULL, &wi, GROUP_TABS); wi.g.x = 1*wi.g.width; wi.text = "Sliders"; ghTabSliders = gwinRadioCreate(NULL, &wi, GROUP_TABS); wi.g.x = 2*wi.g.width; wi.text = "Checkbox"; ghTabCheckboxes = gwinRadioCreate(NULL, &wi, GROUP_TABS); wi.g.x = 3*wi.g.width; wi.text = "Radios"; ghTabRadios = gwinRadioCreate(NULL, &wi, GROUP_TABS); wi.g.x = 4*wi.g.width; wi.text = "Lists"; ghTabLists = gwinRadioCreate(NULL, &wi, GROUP_TABS); wi.g.x = 5*wi.g.width; wi.text = "Labels"; ghTabLabels = gwinRadioCreate(NULL, &wi, GROUP_TABS); wi.g.x = 6*wi.g.width; wi.text = "Images"; ghTabImages = gwinRadioCreate(NULL, &wi, GROUP_TABS); // Buttons wi.g.show = FALSE; wi.customDraw = 0; wi.g.width = BUTTON_WIDTH; wi.g.height = BUTTON_HEIGHT; wi.g.y = TAB_HEIGHT+5; wi.g.x = 0+0*(BUTTON_WIDTH+1); wi.text = "B1"; ghButton1 = gwinButtonCreate(NULL, &wi); wi.g.x = 0+1*(BUTTON_WIDTH+1); wi.text = "B2"; ghButton2 = gwinButtonCreate(NULL, &wi); wi.g.x = 0+2*(BUTTON_WIDTH+1); wi.text = "B3"; ghButton3 = gwinButtonCreate(NULL, &wi); wi.g.x = 0+3*(BUTTON_WIDTH+1); wi.text = "B4"; ghButton4 = gwinButtonCreate(NULL, &wi); // Horizontal Sliders wi.g.width = ScrWidth/2-2; wi.g.height = SLIDER_WIDTH; wi.g.x = ScrWidth/2+1; wi.g.y = ScrHeight/2-2*(SLIDER_WIDTH+1); wi.text = "S1"; ghSlider1 = gwinSliderCreate(NULL, &wi); wi.g.y = ScrHeight/2-1*(SLIDER_WIDTH+1); wi.text = "S2"; ghSlider2 = gwinSliderCreate(NULL, &wi); // Vertical Sliders wi.g.width = SLIDER_WIDTH; wi.g.height = ScrHeight/2-2; wi.g.y = ScrHeight/2+1; wi.g.x = 0+0*(SLIDER_WIDTH+1); wi.text = "S3"; ghSlider3 = gwinSliderCreate(NULL, &wi); wi.g.x = 0+1*(SLIDER_WIDTH+1); wi.text = "S4"; ghSlider4 = gwinSliderCreate(NULL, &wi); // Checkboxes - for the 2nd checkbox we apply special drawing before making it visible wi.g.width = CHECKBOX_WIDTH; wi.g.height = CHECKBOX_HEIGHT; wi.g.x = 0; wi.g.y = TAB_HEIGHT+5+0*(CHECKBOX_HEIGHT+1); wi.text = "C1"; ghCheckbox1 = gwinCheckboxCreate(NULL, &wi); wi.customDraw = gwinCheckboxDraw_CheckOnRight; wi.g.y = TAB_HEIGHT+5+1*(CHECKBOX_HEIGHT+1); wi.text = "C2"; ghCheckbox2 = gwinCheckboxCreate(NULL, &wi); wi.customDraw = 0; wi.g.width = DISABLEALL_WIDTH; wi.g.y = TAB_HEIGHT+5+2*(CHECKBOX_HEIGHT+1); wi.text = "Disable All"; ghCheckDisableAll = gwinCheckboxCreate(NULL, &wi); // Labels wi.g.width = 0; wi.g.height = LABEL_HEIGHT; // dynamic width, fixed height wi.g.y = TAB_HEIGHT+5+2*(CHECKBOX_HEIGHT+1); wi.text = "Label"; ghLabel1 = gwinLabelCreate(NULL, &wi); // Radio Buttons wi.g.width = RADIO_WIDTH; wi.g.height = RADIO_HEIGHT; wi.g.y = TAB_HEIGHT+5; wi.g.x = 0*wi.g.width; wi.text = "Yes"; ghRadio1 = gwinRadioCreate(NULL, &wi, GROUP_YESNO); wi.g.x = 1*wi.g.width; wi.text = "No"; ghRadio2 = gwinRadioCreate(NULL, &wi, GROUP_YESNO); wi.g.width = COLOR_WIDTH; wi.g.y += RADIO_HEIGHT+5; wi.g.x = 0*wi.g.width; wi.text = "Black"; ghRadioBlack = gwinRadioCreate(NULL, &wi, GROUP_COLORS); wi.g.x = 1*wi.g.width; wi.text = "White"; ghRadioWhite = gwinRadioCreate(NULL, &wi, GROUP_COLORS); wi.g.x = 2*wi.g.width; wi.text = "Yellow"; ghRadioYellow = gwinRadioCreate(NULL, &wi, GROUP_COLORS); gwinRadioPress(ghRadioWhite); // Lists wi.g.show = FALSE; wi.customDraw = 0; wi.g.width = LIST_WIDTH; wi.g.height = LIST_HEIGHT; wi.g.y = TAB_HEIGHT+5; wi.g.x = 0+0*(LIST_WIDTH+1); wi.text = "L1"; ghList1 = gwinListCreate(NULL, &wi, FALSE); gwinListAddItem(ghList1, "Item 0", FALSE); gwinListAddItem(ghList1, "Item 1", FALSE); gwinListAddItem(ghList1, "Item 2", FALSE); gwinListAddItem(ghList1, "Item 3", FALSE); gwinListAddItem(ghList1, "Item 4", FALSE); gwinListAddItem(ghList1, "Item 5", FALSE); gwinListAddItem(ghList1, "Item 6", FALSE); gwinListAddItem(ghList1, "Item 7", FALSE); gwinListAddItem(ghList1, "Item 8", FALSE); gwinListAddItem(ghList1, "Item 9", FALSE); gwinListAddItem(ghList1, "Item 10", FALSE); gwinListAddItem(ghList1, "Item 11", FALSE); gwinListAddItem(ghList1, "Item 12", FALSE); gwinListAddItem(ghList1, "Item 13", FALSE); wi.g.x = 0+1*(LIST_WIDTH+1); wi.text = "L2"; ghList2 = gwinListCreate(NULL, &wi, TRUE); gwinListAddItem(ghList2, "Item 0", FALSE); gwinListAddItem(ghList2, "Item 1", FALSE); gwinListAddItem(ghList2, "Item 2", FALSE); gwinListAddItem(ghList2, "Item 3", FALSE); gwinListAddItem(ghList2, "Item 4", FALSE); gwinListAddItem(ghList2, "Item 5", FALSE); gwinListAddItem(ghList2, "Item 6", FALSE); gwinListAddItem(ghList2, "Item 7", FALSE); gwinListAddItem(ghList2, "Item 8", FALSE); gwinListAddItem(ghList2, "Item 9", FALSE); gwinListAddItem(ghList2, "Item 10", FALSE); gwinListAddItem(ghList2, "Item 11", FALSE); gwinListAddItem(ghList2, "Item 12", FALSE); gwinListAddItem(ghList2, "Item 13", FALSE); wi.g.x = 0+2*(LIST_WIDTH+1); wi.text = "L3"; ghList3 = gwinListCreate(NULL, &wi, TRUE); gwinListAddItem(ghList3, "Item 0", FALSE); gwinListAddItem(ghList3, "Item 1", FALSE); gwinListAddItem(ghList3, "Item 2", FALSE); gwinListAddItem(ghList3, "Item 3", FALSE); gdispImageSetMemoryReader(&imgYesNo, image_yesno); gdispImageOpen(&imgYesNo); gwinListItemSetImage(ghList3, 1, &imgYesNo); gwinListItemSetImage(ghList3, 3, &imgYesNo); // Image wi.g.x = ScrWidth-210; wi.g.y = TAB_HEIGHT + 10; wi.g.width = 200; wi.g.height = 200; ghImage1 = gwinImageCreate(NULL, &wi.g); gwinImageOpenMemory(ghImage1, image_chibios); gwinImageCache(ghImage1); // Console - we apply some special colors before making it visible wi.g.width = ScrWidth/2-1; wi.g.height = ScrHeight/2-1; wi.g.x = ScrWidth/2+1; wi.g.y = ScrHeight/2+1; ghConsole = gwinConsoleCreate(NULL, &wi.g); gwinSetColor(ghConsole, Yellow); gwinSetBgColor(ghConsole, Black); }