void MembersBox::Inner::paintEvent(QPaintEvent *e) { QRect r(e->rect()); Painter p(this); _time = unixtime(); p.fillRect(r, st::contactsBg); auto ms = getms(); auto yFrom = r.y() - st::membersMarginTop; auto yTo = r.y() + r.height() - st::membersMarginTop; p.translate(0, st::membersMarginTop); if (_rows.isEmpty()) { p.setFont(st::noContactsFont); p.setPen(st::noContactsColor); p.drawText(QRect(0, 0, width(), st::noContactsHeight), lang(lng_contacts_loading), style::al_center); } else { int32 from = floorclamp(yFrom, _rowHeight, 0, _rows.size()); int32 to = ceilclamp(yTo, _rowHeight, 0, _rows.size()); p.translate(0, from * _rowHeight); for (; from < to; ++from) { auto selected = (_pressed >= 0) ? (from == _pressed) : (from == _selected); auto kickSelected = (_pressed >= 0) ? (from == _kickPressed && from == _kickSelected) : (from == _kickSelected); paintDialog(p, ms, _rows[from], data(from), selected, kickSelected); p.translate(0, _rowHeight); } if (to == _rows.size() && _filter == MembersFilter::Recent && (_rows.size() < _channel->membersCount() || _rows.size() >= Global::ChatSizeMax())) { p.setPen(st::membersAboutLimitFg); _about.draw(p, st::contactsPadding.left(), st::membersAboutLimitPadding.top(), _aboutWidth, style::al_center); } } }
void ContactsInner::paintEvent(QPaintEvent *e) { QRect r(e->rect()); QPainter p(this); _time = unixtime(); p.fillRect(r, st::white->b); int32 yFrom = r.top(); int32 rh = st::profileListPhotoSize + st::profileListPadding.height() * 2; if (_filter.isEmpty()) { if (_contacts->list.count) { _contacts->list.adjustCurrent(yFrom, rh); DialogRow *drawFrom = _contacts->list.current; p.translate(0, drawFrom->pos * rh); while (drawFrom != _contacts->list.end && drawFrom->pos * rh < r.bottom()) { paintDialog(p, drawFrom, (drawFrom == _sel)); p.translate(0, rh); drawFrom = drawFrom->next; } } else { p.setFont(st::noContactsFont->f); p.setPen(st::noContactsColor->p); p.drawText(QRect(0, 0, width(), st::noContactsHeight - (cContactsReceived() ? st::noContactsFont->height : 0)), lang(cContactsReceived() ? lng_no_contacts : lng_contacts_loading), style::al_center); } } else { if (_filtered.isEmpty()) { p.setFont(st::noContactsFont->f); p.setPen(st::noContactsColor->p); p.drawText(QRect(0, 0, width(), st::noContactsHeight), lang(lng_contacts_not_found), style::al_center); } else { int32 from = yFrom / rh; if (from < 0) from = 0; if (from < _filtered.size()) { int32 to = (r.bottom() / rh) + 1; if (to > _filtered.size()) to = _filtered.size(); p.translate(0, from * rh); for (; from < to; ++from) { paintDialog(p, _filtered[from], (_filteredSel == from)); p.translate(0, rh); } } } } }
void ContactsInner::paintEvent(QPaintEvent *e) { QRect r(e->rect()); QPainter p(this); _time = unixtime(); p.fillRect(r, st::white->b); int32 yFrom = r.top(); int32 rh = st::profileListPhotoSize + st::profileListPadding.height() * 2; if (_filter.isEmpty()) { if (_contacts->list.count) { _contacts->list.adjustCurrent(yFrom, rh); DialogRow *drawFrom = _contacts->list.current; p.translate(0, drawFrom->pos * rh); while (drawFrom != _contacts->list.end && drawFrom->pos * rh < r.bottom()) { paintDialog(p, drawFrom, (drawFrom == _sel)); p.translate(0, rh); drawFrom = drawFrom->next; } } else { // .. } } else { if (_filtered.isEmpty()) { // .. } else { int32 from = yFrom / rh; if (from < 0) from = 0; if (from < _filtered.size()) { int32 to = (r.bottom() / rh) + 1; if (to > _filtered.size()) to = _filtered.size(); p.translate(0, from * rh); for (; from < to; ++from) { paintDialog(p, _filtered[from], (_filteredSel == from)); p.translate(0, rh); } } } } }
int main(int argc, char **argv) { AppInfo app; XEvent event; memset(&app, 0, sizeof(app)); progclass = "SshAskpass"; app.toplevelShell = XtAppInitialize(&(app.appContext), progclass, NULL, 0, &argc, argv, defaults, NULL, 0); app.argc = argc; app.argv = argv; app.dpy = XtDisplay(app.toplevelShell); app.screen = DefaultScreenOfDisplay(app.dpy); app.rootWindow = RootWindowOfScreen(app.screen); app.black = BlackPixel(app.dpy, DefaultScreen(app.dpy)); app.white = WhitePixel(app.dpy, DefaultScreen(app.dpy)); app.colormap = DefaultColormapOfScreen(app.screen); app.resourceDb = XtDatabase(app.dpy); XtGetApplicationNameAndClass(app.dpy, &progname, &progclass); app.appName = progname; app.appClass = progclass; /* For resources.c. */ db = app.resourceDb; /* Seconds after which keyboard/pointer grab fail. */ app.grabFailTimeout = 5; /* Number of seconds to wait between grab attempts. */ app.grabRetryInterval = 1; app.pid = getpid(); { struct rlimit resourceLimit; int status; status = getrlimit(RLIMIT_CORE, &resourceLimit); if (-1 == status) { fprintf(stderr, "%s[%ld]: getrlimit failed (%s)\n", app.appName, (long) app.pid, strerror(errno)); exit(EXIT_STATUS_ERROR); } resourceLimit.rlim_cur = 0; status = setrlimit(RLIMIT_CORE, &resourceLimit); if (-1 == status) { fprintf(stderr, "%s[%ld]: setrlimit failed (%s)\n", app.appName, (long) app.pid, strerror(errno)); exit(EXIT_STATUS_ERROR); } } app.xResolution = WidthOfScreen(app.screen) * 1000 / WidthMMOfScreen(app.screen); app.yResolution = HeightOfScreen(app.screen) * 1000 / HeightMMOfScreen(app.screen); createDialog(&app); createGCs(&app); app.eventMask = 0; app.eventMask |= ExposureMask; app.eventMask |= ButtonPressMask; app.eventMask |= ButtonReleaseMask; app.eventMask |= Button1MotionMask; app.eventMask |= KeyPressMask; createDialogWindow(&app); XMapWindow(app.dpy, app.dialog->dialogWindow); if (app.inputTimeout > 0) { app.inputTimeoutActive = True; app.inputTimeoutTimerId = XtAppAddTimeOut(app.appContext, app.inputTimeout, handleInputTimeout, (XtPointer) &app); } while(True) { XtAppNextEvent(app.appContext, &event); switch (event.type) { case Expose: grabServer(&app); grabKeyboard(&app); grabPointer(&app); if (event.xexpose.count) { break; } paintDialog(&app); break; case ButtonPress: case ButtonRelease: handleButtonPress(&app, &event); break; case MotionNotify: handlePointerMotion(&app, &event); case KeyPress: handleKeyPress(&app, &event); break; case ClientMessage: if ((32 == event.xclient.format) && ((unsigned long) event.xclient.data.l[0] == app.wmDeleteWindowAtom)) { cancelAction(&app); } break; default: break; } } fprintf(stderr, "%s[%ld]: This should not happen.\n", app.appName, (long) app.pid); return(EXIT_STATUS_ANOMALY); }