Text completion and RTL

2008-03-14 Thread Dov Feldstern

Hi!

There's a small problem with the text completion and RTL text:

The grayed-out inline completion appears backwards in RTL text (see 
attached image).


I can explain why it is happening (and why this problem wasn't observed 
 when RTL was tested with latin characters), but I don't know how to 
easily solve the issue. The reason is something like this: when painting 
text, LyX applies the bidi algorithm, so that the string that it 
ultimately passes to Qt for painting is already in visual order; 
however, Qt 4 now applies its own bidi algorithm to all strings that it 
paints, and it doesn't seem to provide any API for saying the string is 
already in visual order, just paint it as it is. To get around this 
problem, we paint RTL strings one character at a time (see 
http://www.lyx.org/trac/browser/lyx-devel/trunk/src/rowpainter.cpp?rev=23522#L259). 
But I imagine that the grayed-out inline completion is painted as a full 
string...


I haven't looked at the completion code at all, so I'm not sure exactly 
what's going on; but I'm pretty sure that this is the correct 
explanation of the problem. Any ideas on what can be done to solve it?


Thanks!
Dov
inline: rtl_text_completion.png

Re: Text completion and RTL

2008-03-14 Thread Dov Feldstern

Stefan Schimanski wrote:


Am 14.03.2008 um 15:05 schrieb Dov Feldstern:


Hi!

There's a small problem with the text completion and RTL text:

The grayed-out inline completion appears backwards in RTL text (see 
attached image).


I have to check my code as well. The idea was to reverse the string if 
needed before telling Qt about. But maybe I got something wrong in this 
logic. Take a look at RowPainter::paintInlineCompletion. That's the code 
for the text mode.


It's a bit more involved than you might expect, because the inline 
completion consists of the unique part (drawn in dark grey) and the 
non-unique part (drawn in light grey).


I do a reversal of the rtl text there. No idea why it does not work. Or 
maybe Qt its own bidi magic?


Thanks, I'll take a look at this. But I'll be a few days though...



Stefan




Re: Text completion and RTL

2008-03-14 Thread Stefan Schimanski


Am 14.03.2008 um 15:25 schrieb Dov Feldstern:


Stefan Schimanski wrote:

Am 14.03.2008 um 15:05 schrieb Dov Feldstern:

Hi!

There's a small problem with the text completion and RTL text:

The grayed-out inline completion appears backwards in RTL text  
(see attached image).


I have to check my code as well. The idea was to reverse the string  
if needed before telling Qt about. But maybe I got something wrong  
in this logic. Take a look at RowPainter::paintInlineCompletion.  
That's the code for the text mode.
It's a bit more involved than you might expect, because the inline  
completion consists of the unique part (drawn in dark grey) and the  
non-unique part (drawn in light grey).
I do a reversal of the rtl text there. No idea why it does not  
work. Or maybe Qt its own bidi magic?


Thanks, I'll take a look at this. But I'll be a few days though...


Sure, no problem. Btw, do you use a rtl locale for the gui? I mean  
maybe your Qt does some RTL magic which mine does not. Just an idea...


Stefan


Re: Text completion and RTL

2008-03-14 Thread Dov Feldstern

Stefan Schimanski wrote:


Am 14.03.2008 um 15:25 schrieb Dov Feldstern:


Stefan Schimanski wrote:

Am 14.03.2008 um 15:05 schrieb Dov Feldstern:

Hi!

There's a small problem with the text completion and RTL text:

The grayed-out inline completion appears backwards in RTL text (see 
attached image).


I have to check my code as well. The idea was to reverse the string 
if needed before telling Qt about. But maybe I got something wrong in 
this logic. Take a look at RowPainter::paintInlineCompletion. That's 
the code for the text mode.
It's a bit more involved than you might expect, because the inline 
completion consists of the unique part (drawn in dark grey) and the 
non-unique part (drawn in light grey).
I do a reversal of the rtl text there. No idea why it does not work. 
Or maybe Qt its own bidi magic?


Thanks, I'll take a look at this. But I'll be a few days though...


Sure, no problem. Btw, do you use a rtl locale for the gui? I mean maybe 
your Qt does some RTL magic which mine does not. Just an idea...




I'll keep this possibility in mind, thanks...


Stefan




Re: Text completion and RTL

2008-03-14 Thread Stefan Schimanski


Am 14.03.2008 um 15:05 schrieb Dov Feldstern:


Hi!

There's a small problem with the text completion and RTL text:

The grayed-out inline completion appears backwards in RTL text (see  
attached image).


I can explain why it is happening (and why this problem wasn't  
observed  when RTL was tested with latin characters), but I don't  
know how to easily solve the issue. The reason is something like  
this: when painting text, LyX applies the bidi algorithm, so that  
the string that it ultimately passes to Qt for painting is already  
in visual order; however, Qt 4 now applies its own bidi algorithm to  
all strings that it paints, and it doesn't seem to provide any API  
for saying the string is already in visual order, just paint it as  
it is. To get around this problem, we paint RTL strings one  
character at a time (see http://www.lyx.org/trac/browser/lyx-devel/trunk/src/rowpainter.cpp?rev=23522#L259) 
. But I imagine that the grayed-out inline completion is painted as  
a full string...


I haven't looked at the completion code at all, so I'm not sure  
exactly what's going on; but I'm pretty sure that this is the  
correct explanation of the problem. Any ideas on what can be done to  
solve it?


I have to check my code as well. The idea was to reverse the string if  
needed before telling Qt about. But maybe I got something wrong in  
this logic. Take a look at RowPainter::paintInlineCompletion. That's  
the code for the text mode.


It's a bit more involved than you might expect, because the inline  
completion consists of the unique part (drawn in dark grey) and the  
non-unique part (drawn in light grey).


I do a reversal of the rtl text there. No idea why it does not work.  
Or maybe Qt its own bidi magic?


Stefan


Text completion and RTL

2008-03-14 Thread Dov Feldstern

Hi!

There's a small problem with the text completion and RTL text:

The grayed-out inline completion appears backwards in RTL text (see 
attached image).


I can explain why it is happening (and why this problem wasn't observed 
 when RTL was tested with latin characters), but I don't know how to 
easily solve the issue. The reason is something like this: when painting 
text, LyX applies the bidi algorithm, so that the string that it 
ultimately passes to Qt for painting is already in visual order; 
however, Qt 4 now applies its own bidi algorithm to all strings that it 
paints, and it doesn't seem to provide any API for saying "the string is 
already in visual order, just paint it as it is". To get around this 
problem, we paint RTL strings one character at a time (see 
http://www.lyx.org/trac/browser/lyx-devel/trunk/src/rowpainter.cpp?rev=23522#L259). 
But I imagine that the grayed-out inline completion is painted as a full 
string...


I haven't looked at the completion code at all, so I'm not sure exactly 
what's going on; but I'm pretty sure that this is the correct 
explanation of the problem. Any ideas on what can be done to solve it?


Thanks!
Dov
<>

Re: Text completion and RTL

2008-03-14 Thread Dov Feldstern

Stefan Schimanski wrote:


Am 14.03.2008 um 15:05 schrieb Dov Feldstern:


Hi!

There's a small problem with the text completion and RTL text:

The grayed-out inline completion appears backwards in RTL text (see 
attached image).


I have to check my code as well. The idea was to reverse the string if 
needed before telling Qt about. But maybe I got something wrong in this 
logic. Take a look at RowPainter::paintInlineCompletion. That's the code 
for the text mode.


It's a bit more involved than you might expect, because the inline 
completion consists of the unique part (drawn in dark grey) and the 
non-unique part (drawn in light grey).


I do a reversal of the rtl text there. No idea why it does not work. Or 
maybe Qt its own bidi magic?


Thanks, I'll take a look at this. But I'll be a few days though...



Stefan




Re: Text completion and RTL

2008-03-14 Thread Stefan Schimanski


Am 14.03.2008 um 15:25 schrieb Dov Feldstern:


Stefan Schimanski wrote:

Am 14.03.2008 um 15:05 schrieb Dov Feldstern:

Hi!

There's a small problem with the text completion and RTL text:

The grayed-out inline completion appears backwards in RTL text  
(see attached image).


I have to check my code as well. The idea was to reverse the string  
if needed before telling Qt about. But maybe I got something wrong  
in this logic. Take a look at RowPainter::paintInlineCompletion.  
That's the code for the text mode.
It's a bit more involved than you might expect, because the inline  
completion consists of the unique part (drawn in dark grey) and the  
non-unique part (drawn in light grey).
I do a reversal of the rtl text there. No idea why it does not  
work. Or maybe Qt its own bidi magic?


Thanks, I'll take a look at this. But I'll be a few days though...


Sure, no problem. Btw, do you use a rtl locale for the gui? I mean  
maybe your Qt does some RTL magic which mine does not. Just an idea...


Stefan


Re: Text completion and RTL

2008-03-14 Thread Dov Feldstern

Stefan Schimanski wrote:


Am 14.03.2008 um 15:25 schrieb Dov Feldstern:


Stefan Schimanski wrote:

Am 14.03.2008 um 15:05 schrieb Dov Feldstern:

Hi!

There's a small problem with the text completion and RTL text:

The grayed-out inline completion appears backwards in RTL text (see 
attached image).


I have to check my code as well. The idea was to reverse the string 
if needed before telling Qt about. But maybe I got something wrong in 
this logic. Take a look at RowPainter::paintInlineCompletion. That's 
the code for the text mode.
It's a bit more involved than you might expect, because the inline 
completion consists of the unique part (drawn in dark grey) and the 
non-unique part (drawn in light grey).
I do a reversal of the rtl text there. No idea why it does not work. 
Or maybe Qt its own bidi magic?


Thanks, I'll take a look at this. But I'll be a few days though...


Sure, no problem. Btw, do you use a rtl locale for the gui? I mean maybe 
your Qt does some RTL magic which mine does not. Just an idea...




I'll keep this possibility in mind, thanks...


Stefan




Re: Text completion and RTL

2008-03-14 Thread Stefan Schimanski


Am 14.03.2008 um 15:05 schrieb Dov Feldstern:


Hi!

There's a small problem with the text completion and RTL text:

The grayed-out inline completion appears backwards in RTL text (see  
attached image).


I can explain why it is happening (and why this problem wasn't  
observed  when RTL was tested with latin characters), but I don't  
know how to easily solve the issue. The reason is something like  
this: when painting text, LyX applies the bidi algorithm, so that  
the string that it ultimately passes to Qt for painting is already  
in visual order; however, Qt 4 now applies its own bidi algorithm to  
all strings that it paints, and it doesn't seem to provide any API  
for saying "the string is already in visual order, just paint it as  
it is". To get around this problem, we paint RTL strings one  
character at a time (see http://www.lyx.org/trac/browser/lyx-devel/trunk/src/rowpainter.cpp?rev=23522#L259) 
. But I imagine that the grayed-out inline completion is painted as  
a full string...


I haven't looked at the completion code at all, so I'm not sure  
exactly what's going on; but I'm pretty sure that this is the  
correct explanation of the problem. Any ideas on what can be done to  
solve it?


I have to check my code as well. The idea was to reverse the string if  
needed before telling Qt about. But maybe I got something wrong in  
this logic. Take a look at RowPainter::paintInlineCompletion. That's  
the code for the text mode.


It's a bit more involved than you might expect, because the inline  
completion consists of the unique part (drawn in dark grey) and the  
non-unique part (drawn in light grey).


I do a reversal of the rtl text there. No idea why it does not work.  
Or maybe Qt its own bidi magic?


Stefan