void subScreenRender(void) { int i, j; /* Render all screens */ for(i = 0; i < subtle->screens->ndata; i++) { SubScreen *s = SCREEN(subtle->screens->data[i]); Window panel = s->panel1; ScreenClear(s, subtle->styles.subtle.top); /* Render panel items */ for(j = 0; s->panels && j < s->panels->ndata; j++) { SubPanel *p = PANEL(s->panels->data[j]); if(p->flags & SUB_PANEL_HIDDEN) continue; if(panel != s->panel2 && p->flags & SUB_PANEL_BOTTOM) { ScreenCopy(s, panel); ScreenClear(s, subtle->styles.subtle.bottom); panel = s->panel2; } subPanelRender(p, s->drawable); } ScreenCopy(s, panel); } XSync(subtle->dpy, False); ///< Sync before going on } /* }}} */
int ButtonGetCursor(LcdSpi *lcd, ScreenData *screen, CursorData cur) { int ret; int fd1; int fd2; int fd3; uint8_t val1; uint8_t val2; uint8_t val3; uint8_t val1_old = 0; uint8_t val2_old = 0; uint8_t val3_old = 0; int result = 0; int counter = COUNTER_MAX; ScreenData *screenOut; long int start; long int end; ret = 0; ret += GpioFdOpen(PIN_KEY_1, &fd1); ret += GpioFdOpen(PIN_KEY_2, &fd2); ret += GpioFdOpen(PIN_KEY_3, &fd3); if (ret != 3) { return -1; } if (!screen) { return 0; } screenOut = ScreenInit(screen->mX, screen->mY); ScreenCopy(screenOut, screen); start = GetTime(); while (!gEnde) { if (gConfig.mTimeout) { end = GetTime(); if (end - start >= gConfig.mTimeout) { result = ASCII_CAN; break; } } counter++; if (counter > COUNTER_MAX) { ScreenBlink(screenOut, cur); LcdWriteImageScreen(lcd, screenOut); counter = 0; } GpioGetValue(PIN_KEY_1, &val1); GpioGetValue(PIN_KEY_2, &val2); GpioGetValue(PIN_KEY_3, &val3); if (val1 != val1_old && val1 == 0) { usleep(DEBOUNCE * 1000); result = '1'; break; } if (val2 != val2_old && val2 == 0) { usleep(DEBOUNCE * 1000); result = '2'; break; } if (val3 != val3_old && val3 == 0) { usleep(DEBOUNCE * 1000); result = '3'; break; } val1_old = val1; val2_old = val2; val3_old = val3; usleep(50 * 1000); } ScreenDestroy(screenOut); return result; }