yeah, you have to draw by setting a bgl.color**
before each new differently coloured text. It's not like a terminal print command, though you could write really simple functions that take
(x, y, [(str, col),...])
Because you can query the x,y dimensions of a string, you can easily generate the offset coordinates.
Something like this:
def draw_string(x, y, packed_strings):
font_id = 0
blf.size(font_id, 18, 72)
x_offset = 0
for pstr, pcol in packed_strings:
bgl.glColor4f(*pcol)
text_width, text_height = blf.dimensions(font_id, pstr)
blf.position(font_id, (x + x_offset), y, 0)
blf.draw(font_id, pstr)
x_offset += text_width
x = 60
y = 100
RED = (1, 0, 0, 1)
GREEN = (0, 1, 0, 1)
BLUE = (0, 0, 1, 1)
ps = [("Blue ", RED),("Yellow ", BLUE),("White ", GREEN)]
draw_string(x, y, ps)