static int barPaint(GOC_HANDLER uchwyt) { GOC_StBar *pasek = (GOC_StBar*)uchwyt; int i; GOC_StElement elem; GOC_POSITION w = goc_elementGetWidth(uchwyt); memcpy(&elem, pasek, sizeof(GOC_StElement)); goc_elementGetLabelDrawer(uchwyt)(&elem, ""); if ( pasek->nText == 0 ) return GOC_ERR_OK; if ( pasek->rozmiar == GOC_BAR_COUNTEDSIZE ) elem.width = w / pasek->nText; else elem.width = pasek->rozmiar; for ( i=pasek->start; i<pasek->nText; i++ ) { if ( i<(elem.width%(pasek->nText)) ) elem.width++; if ( elem.x + elem.width > pasek->x + w ) elem.width = pasek->x + w - elem.x; if ( i != pasek->kursor ) elem.color = pasek->color; else elem.color = pasek->kolorZaznaczony; goc_elementGetLabelDrawer(uchwyt)(&elem, pasek->tekst[i]); elem.x += elem.width; if ( i<(elem.width%(pasek->nText)) ) { elem.x++; elem.width--; } } fflush(stdout); return GOC_ERR_OK; }
static int labelPaint(GOC_StLabel *napis) { // char *line; // line do wypisania // unsigned int d; // d³ugo¶æ do kopiowania dla linii do wypisania // unsigned int p = 0; // przesuniêcie wzglêdem pocz±tku punktu pisania unsigned int i; // licznik GOC_POSITION height; if ( napis->nText == 0 ) return GOC_ERR_OK; if ( !(napis->flag & GOC_EFLAGA_PAINTED) ) return GOC_ERR_OK; // line = (char *)malloc(napis->width+1); // memset(line, 0, napis->width+1); height = goc_elementGetHeight((GOC_HANDLER)napis); for ( i = 0; i < height; i++ ) { GOC_StElement elem; if ( i + napis->start >= napis->nText ) break; memcpy( &elem, napis, sizeof(GOC_StElement) ); // memset( line, ' ', napis->width ); // d = strlen(napis->tekst[i+napis->start].line) > napis->width ? napis->width : // strlen(napis->tekst[i+napis->start].line); // switch ( napis->tekst[i+napis->start].flag & COC_EFLAGA_G_JUSTIFY ) // { // case GOC_EFLAGA_RIGHT: // p = napis->width - d; // break; // case GOC_EFLAGA_LEFT: // p = 0; // break; // case GOC_EFLAGA_CENTER: // p = napis->width - d; // p >>= 1; // break; // } elem.flag = napis->tekst[i+napis->start].flag; // memcpy( line + p, napis->tekst[i+napis->start].line, d ); elem.y += i; elem.color = napis->tekst[i+napis->start].color; goc_elementGetLabelDrawer( (GOC_HANDLER)napis )( &elem, napis->tekst[i+napis->start].line ); // goc_textallcolor( napis->tekst[i+napis->start].color ); // fputs( line, stdout ); } napis->flag |= GOC_EFLAGA_SHOWN; fflush(stdout); // free(line); return GOC_ERR_OK; }
// bez konrtoli - odrysuj wskazana linie (pozycja na liscie) static void listRedrawLine(GOC_HANDLER u, int pos) { GOC_StList *lista = (GOC_StList*)u; GOC_StElement e; GOC_COLUMN *k; GOC_FUN_LABELDRAWER *drawer; int j; // licznik kolumn drawer = goc_elementGetLabelDrawer(u); memcpy(&e, lista, sizeof(GOC_StElement)); goc_systemSendMsg(u, GOC_MSG_LISTSETCOLOR, &(e.color), pos); e.y += pos - lista->start + 1; (e.x)++; for ( j = 0; j < lista->nKolumna; j++ ) { k = lista->pKolumna[j]; e.width = k->position; if ( pos<k->nText ) drawer(&e, k->pText[pos]); else drawer(&e, ""); e.x += k->position; } }
static int goc_listPaint(GOC_HANDLER u) { GOC_StList *lista = (GOC_StList*)u; int i; // licznik zdañ int j; // licznik kolumn int n; // maksymalna liczba wierszy GOC_COLUMN *k; GOC_StElement e; GOC_FUN_LABELDRAWER *drawer; if ( !(lista->flag & GOC_EFLAGA_PAINTED) ) return GOC_ERR_OK; drawer = goc_elementGetLabelDrawer(u); memcpy(&e, lista, sizeof(GOC_StElement)); e.color = lista->kolorRamka; goc_elementGetFrameDrawer(u)(&e, "*-*| |*-*"); // rysowanie tytulu, jesli obecny if ( lista->pTytul ) { GOC_StElement elTytul; memcpy( &elTytul, lista, sizeof(GOC_StElement)); elTytul.color = lista->kolorRamka; elTytul.height = 1; elTytul.x += 2; elTytul.flag = GOC_EFLAGA_CENTER; if ( elTytul.width > 2 ) { elTytul.width -= 4; if ( strlen(lista->pTytul)+2 < elTytul.width ) elTytul.width = strlen(lista->pTytul)+2; } else elTytul.width = 0; drawer(&elTytul, lista->pTytul); } n = goc_listGetRowsAmmount(u); j=0; for ( i=lista->start; i<n; i++ ) { if ( i - lista->start > goc_elementGetHeight(u)-3 ) break; goc_systemSendMsg(u, GOC_MSG_LISTSETCOLOR, &(e.color), i); // j %= lista->nKolumna; e.y++; e.x = lista->x; (e.x)++; for ( j = 0; j < lista->nKolumna; j++ ) { k = lista->pKolumna[j]; e.width = k->position; if ( i<k->nText ) drawer(&e, k->pText[i]); else drawer(&e, ""); e.x += k->position; } // if (!j) // { // } // e.width = lista->pKolumna[j]; // j++; } if (lista->kursor != -1) goc_gotoxy( goc_elementGetScreenX(u)+1, goc_elementGetScreenY(u)+(lista->kursor-lista->start) + 1); fflush(stdout); lista->flag |= GOC_EFLAGA_SHOWN; return GOC_ERR_OK; }