1
0
Fork 0
forked from len0rd/rockbox

Fix wide view mode on viewer

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@10036 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Karl Kurbjun 2006-06-03 07:04:02 +00:00
parent fcd65e56db
commit ca8fa65ab7

View file

@ -265,8 +265,9 @@ unsigned char* get_ucs(const unsigned char* str, unsigned short* ch)
bool done = false;
int col = 0;
#define ADVANCE_COUNTERS(c) do { width += glyph_width(c); k++; } while(0)
#define LINE_IS_FULL ((k>MAX_COLUMNS-1) || (width > draw_columns))
#define ADVANCE_COUNTERS(c) { width += glyph_width(c); k++; }
#define LINE_IS_FULL ((k<MAX_COLUMNS-1) ||( width > draw_columns))
#define LINE_IS_NOT_FULL ((k<MAX_COLUMNS-1) &&( width < draw_columns))
static unsigned char* crop_at_width(const unsigned char* p)
{
int k,width;
@ -275,7 +276,7 @@ static unsigned char* crop_at_width(const unsigned char* p)
k=width=0;
while (!LINE_IS_FULL) {
while (LINE_IS_NOT_FULL) {
oldp = p;
p = get_ucs(p, &ch);
ADVANCE_COUNTERS(ch);
@ -738,7 +739,7 @@ static void viewer_draw(int col)
if (col != -1) {
scratch_buffer[k] = 0;
endptr = rb->iso_decode(scratch_buffer + col, utf8_buffer,
prefs.encoding, k-col);
prefs.encoding, draw_columns/glyph_width('a'));
*endptr = 0;
}
}
@ -836,18 +837,26 @@ static void viewer_draw(int col)
if (line_width > col) {
str = oldstr = line_begin;
k = col;
while (k > draw_columns) {
while (k > 0) {
str = crop_at_width(str);
k-=draw_columns;
}
oldstr=line_begin=str;
width = 0;
while (width <= k) {
oldstr = str;
str = get_ucs(str, &ch);
while( (width<draw_columns) && (oldstr<line_end) )
{
oldstr = get_ucs(oldstr, &ch);
width += glyph_width(ch);
}
endptr = rb->iso_decode(oldstr, utf8_buffer,
prefs.encoding, line_end-oldstr);
if(prefs.view_mode==WIDE)
endptr = rb->iso_decode(line_begin, utf8_buffer,
prefs.encoding, oldstr-line_begin);
else
endptr = rb->iso_decode(line_begin, utf8_buffer,
prefs.encoding, line_end-line_begin);
*endptr = 0;
}
}