Feature #17 ยป ttxtsubs-8bpp.patch
ttxtsubsdisplay.c | ||
---|---|---|
if(rowcount > MAXTTXTROWS)
|
||
rowcount = MAXTTXTROWS;
|
||
y = bottom - SCREENTOP - ROWH - ((ROWINCR + globals.lineSpacing()) * (rowcount-1));
|
||
int bpp = 2;
|
||
if (Setup.AntiAlias) {
|
||
bpp = 8;
|
||
}
|
||
for(i = 0; i < rowcount; i++) {
|
||
int w = 0;
|
||
int left = SIDEMARGIN;
|
||
... | ... | |
left = SCREENRIGHT - SIDEMARGIN - w;
|
||
break;
|
||
}
|
||
tArea area = {left, y, left+w-1, y+ROWH-1, 2};
|
||
tArea area = {left, y, left+w-1, y+ROWH-1, bpp};
|
||
areas[numAreas++] = area;
|
||
y += (ROWINCR + globals.lineSpacing());
|
||
}
|
||
if (mOsd->CanHandleAreas(areas, numAreas) != oeOk) {
|
||
dprint("ttxtsubs: OSD Cannot handle areas (error code: %d) - try to enlarge the line spacing!\n", mOsd->CanHandleAreas(areas, numAreas));
|
||
}
|
||
else {
|
||
mOsd->SetAreas(areas, numAreas);
|
||
y = bottom - SCREENTOP - ROWH - ((ROWINCR + globals.lineSpacing()) * (rowcount-1));
|
||
for(i = 0; i < rowcount; i++) {
|
||
int w = 0;
|
||
int left = SIDEMARGIN;
|
||
w = mOsdFont->Width(buf[i]) + 2 * TEXTX;
|
||
if(w % 4)
|
||
w += 4 - (w % 4);
|
||
switch(globals.textPos()) {
|
||
case 1:
|
||
left = (SCREENRIGHT - w) / 2;
|
||
break;
|
||
case 2:
|
||
left = SCREENRIGHT - SIDEMARGIN - w;
|
||
break;
|
||
// try lower color depth
|
||
if (bpp > 2) {
|
||
for(i = 0; i < numAreas; i++) areas[numAreas++].bpp = 2;
|
||
if (mOsd->CanHandleAreas(areas, numAreas) != oeOk) {
|
||
dprint("ttxtsubs: OSD Cannot handle areas (error code: %d) - try to enlarge the line spacing!\n", mOsd->CanHandleAreas(areas, numAreas));
|
||
return;
|
||
}
|
||
mOsd->DrawRectangle(left, y, left + w, y + ROWH, getcolor(globals.bgColor()));
|
||
mOsd->DrawText(left + TEXTX, y + TEXTY, buf[i], getcolor(globals.fgColor()), getcolor(globals.bgColor()), mOsdFont);
|
||
//dprint("%d/%d (%d,%d) (%d,%d): %s\n", i, rowcount-1, areas[i].x1, areas[i].y1, left + TEXTX, y + TEXTY, buf[i]);
|
||
y += (ROWINCR + globals.lineSpacing());
|
||
}
|
||
mOsd->Flush();
|
||
}
|
||
mOsd->SetAreas(areas, numAreas);
|
||
y = bottom - SCREENTOP - ROWH - ((ROWINCR + globals.lineSpacing()) * (rowcount-1));
|
||
for(i = 0; i < rowcount; i++) {
|
||
int w = 0;
|
||
int left = SIDEMARGIN;
|
||
w = mOsdFont->Width(buf[i]) + 2 * TEXTX;
|
||
if(w % 4)
|
||
w += 4 - (w % 4);
|
||
switch(globals.textPos()) {
|
||
case 1:
|
||
left = (SCREENRIGHT - w) / 2;
|
||
break;
|
||
case 2:
|
||
left = SCREENRIGHT - SIDEMARGIN - w;
|
||
break;
|
||
}
|
||
mOsd->DrawRectangle(left, y, left + w, y + ROWH, getcolor(globals.bgColor()));
|
||
mOsd->DrawText(left + TEXTX, y + TEXTY, buf[i], getcolor(globals.fgColor()), getcolor(globals.bgColor()), mOsdFont);
|
||
//dprint("%d/%d (%d,%d) (%d,%d): %s\n", i, rowcount-1, areas[i].x1, areas[i].y1, left + TEXTX, y + TEXTY, buf[i]);
|
||
y += (ROWINCR + globals.lineSpacing());
|
||
}
|
||
mOsd->Flush();
|
||
}
|
||