[prev in list] [next in list] [prev in thread] [next in thread] 

List:       lyx-devel
Subject:    Re: [patch] cosmetics: change tracker
From:       Juergen Spitzmueller <juergen.sp () t-online ! de>
Date:       2005-03-21 10:10:13
Message-ID: 200503211110.14197.juergen.sp () t-online ! de
[Download RAW message or body]

Johnathan Burchill wrote:
> Juergen Spitzmueller wrote:
> > Sun, 20 Mar 2005 08:26:53 -0800
> > The striking-out line for erased text is misplaced in the first row of
> > the main text, since this also includes the top margin, which is not
> > honoured by the strikeout calculation. The attached patch fixes it.
>
> This works for the first row, which looks good. But the next row has its
> strikeout line slightly higher than the first.

One drawback of the hack is that it looks different on every system (dependig 
on the settings). On my system, the lines are adjusted correctly.

Anyway, I decided to get rid of the hack and use the default font height 
instead (not the actual current font, since then the lines are "jumping" if 
the cursor moves into areas with different font sizes).

Personally, I'd rather draw the line not exactly in the middle of the max. 
Ascent (char 'M'), but rather in the middle of the char's x-height, since 
this looks better especially with lowercase text. That would be

	yo_ - font_metrics::ascent('x', text_.defaultfont_) / 2;
instead of
	yo_ - font_metrics::maxAscent(text_.defaultfont_) / 2;

but this is a pure matter of taste, of course (and it looks not so good with 
bigger font sizes, e.g. headings).

Please test, this should fix all drawing issues.

Jürgen

["ct_cosmetics2.diff" (text/x-diff)]

Index: rowpainter.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/rowpainter.C,v
retrieving revision 1.142
diff -u -r1.142 rowpainter.C
--- rowpainter.C	15 Feb 2005 19:34:44 -0000	1.142
+++ rowpainter.C	21 Mar 2005 10:08:29 -0000
@@ -664,10 +664,9 @@
 		// if we reach the end of a struck out range, paint it
 		// we also don't paint across things like tables
 		if (running_strikeout && (highly_editable_inset || !is_struckout)) {
-			// FIXME this should take real text height into account, not
-			// the whole row including padding whitespace
-			//int const middle = yo_ + (- row_.ascent() + row_.top_of_text()) / 2;
-			int const middle = yo_ - row_.ascent() / 2;
+			// calculate 1/2 height of the buffer's default font
+			int const middle =
+				yo_ - font_metrics::maxAscent(text_.defaultfont_) / 2;
 			pain_.line(last_strikeout_x, middle, int(x_), middle,
 				LColor::strikeout, Painter::line_solid, Painter::line_thin);
 			running_strikeout = false;
@@ -718,9 +717,9 @@
 
 	// if we reach the end of a struck out range, paint it
 	if (running_strikeout) {
-		//top_of_text = font_metrics::maxAscent(font);
-		//int const middle = yo_ - top_of_text() / 2;
-		int const middle = yo_ - row_.ascent() / 2;
+		// calculate 1/2 height of the buffer's default font
+		int const middle =
+			yo_ - font_metrics::maxAscent(text_.defaultfont_) / 2;
 		pain_.line(last_strikeout_x, middle, int(x_), middle,
 			LColor::strikeout, Painter::line_solid, Painter::line_thin);
 		running_strikeout = false;


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic