[Aptitude-svn-commit] r3436 - in branches/aptitude-0.3/aptitude: . src/vscreen

Daniel Burrows dburrows@costa.debian.org
Sat, 25 Jun 2005 21:12:32 +0000


Author: dburrows
Date: Sat Jun 25 21:12:30 2005
New Revision: 3436

Modified:
   branches/aptitude-0.3/aptitude/ChangeLog
   branches/aptitude-0.3/aptitude/src/vscreen/fragment.cc
Log:
Rewrite clipboxes for wide characters.

Modified: branches/aptitude-0.3/aptitude/ChangeLog
==============================================================================
--- branches/aptitude-0.3/aptitude/ChangeLog	(original)
+++ branches/aptitude-0.3/aptitude/ChangeLog	Sat Jun 25 21:12:30 2005
@@ -2,6 +2,10 @@
 
 	* src/vscreen/fragment.cc:
 
+	  Rewrite the clipbox for wide characters.
+
+	* src/vscreen/fragment.cc:
+
 	  Fix the fill algorithm to compile, and rewrite the hard-wrapping
 	  algorithm to handle wide characters.
 

Modified: branches/aptitude-0.3/aptitude/src/vscreen/fragment.cc
==============================================================================
--- branches/aptitude-0.3/aptitude/src/vscreen/fragment.cc	(original)
+++ branches/aptitude-0.3/aptitude/src/vscreen/fragment.cc	Sat Jun 25 21:12:30 2005
@@ -824,11 +824,19 @@
 
     for(fragment_contents::const_iterator i=lines.begin(); i!=lines.end(); ++i)
       {
-	if(i->size()<=firstw)
-	  rval.push_back(*i);
-	else
-	  rval.push_back(fragment_line(*i, 0, firstw));
+	size_t chars=0;
+	int width;
 
+	while(width<(signed) firstw)
+	  {
+	    width+=wcwidth((*i)[chars].ch);
+	    ++chars;
+	  }
+
+	if(width>(signed) firstw && chars>1)
+	  --chars;
+
+	rval.push_back(fragment_line(*i, 0, chars));
 	firstw=restw;
       }