Infatti intendevo una cosa del genere.
Però per semplicità e compattezza del codice ti conviene fare:
un primo if che verifica in ogni caso se giri < giriprec, in questo caso infatti i rettangoli da disegnare sono tutti neri, indipendentemente da quanto valgano giri e giripreced, quindi questo if lo metti all'inizio una volta sola per tutti i casi
poi ci sarebbe il caso di giri = giripreced, in questo caso ovviamente non devi fare nulla, quindi per escluderlo ti basta mettere un secondo if (giri > giriprec), così giri è < esegue il primo (quello dei rettangoli neri), se giri è > esegue il secondo (quello che vedremo fra poco), se giri è = a giripreced non esegue nulla
Cosa mettere in questo secondo caso... if (giri > giriprec)... vediamo un po'.
La prima parte della barra deve rimanere uguale, devi solo aggiungere il pezzetto di barra che manca. E' quello che hai fatto tu, ma lo hai fatto colore per colore... invece ti conviene fare un solo ciclo for che va da giripreced + 1 (devi iniziare dal rettangolini SUCCESSIVO all'ultimo disegnato) a giri.
Dentro questo for, come hai già fatto, dovresti disegnare il rettangolino corrispondente all'indice i del ciclo, del colore che corrisponde al blocco di cui fa parte. Quindi dentro il for metti prima un pezzetto di codice che ti setta il colore del rettangolino a seconda del valore di i e poi il codice che disegna il rettangolino.
Come lo avevi fatto tu, oltretutto, credo che potresti avere degli errori sui colori nel caso di un aumento repentino, quando passi dal blocco 1 al blocco 3 te li fa tutti del colore del blocco 3, anche quelli dei blocchi precedenti.