• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
strange values for boundingRectForGlyphRange with SE-Asian fonts
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

strange values for boundingRectForGlyphRange with SE-Asian fonts


  • Subject: strange values for boundingRectForGlyphRange with SE-Asian fonts
  • From: "Gerriet M. Denkmann" <email@hidden>
  • Date: Tue, 13 Sep 2011 12:10:02 +0700

I get the bounding rect for all glyphs in my TextView subclass and display them.
Looks perfect: the boxes snugly fit the characters.

But when a line contains any Thai character (similar for Laos, Burma, Khmer) then the boxes are strangly wide.

Why? Is there some good reason for this? Or am I doing something wrong?

Example: font = Thonburi 48pt. One line of "Wim" prints:
2011-09-13 12:01:36.072 NSFontAttributeExplorer[5156:707] -[FontView setFont:andString:] 3 glyps - self {{0, 0}, {205, 231}}
2011-09-13 12:01:36.075 NSFontAttributeExplorer[5156:707] -[FontView setFont:andString:] textContainer {205, 10000000}
2011-09-13 12:01:36.075 NSFontAttributeExplorer[5156:707] -[FontView setFont:andString:] glyphs[0] =  172           rect {{5, 0}, {45.450000000000003, 66}}
2011-09-13 12:01:36.077 NSFontAttributeExplorer[5156:707] -[FontView setFont:andString:] glyphs[1] =  190           rect {{50.450000000000003, 0}, {11.268749999999997, 66}}
2011-09-13 12:01:36.077 NSFontAttributeExplorer[5156:707] -[FontView setFont:andString:] glyphs[2] =  194           rect {{61.71875, 0}, {42.918746948242188, 66}}

but the line "Wimม" (last char is Thai character mo ma = U+0E21) prints:
2011-09-13 12:03:55.684 NSFontAttributeExplorer[5156:707] -[FontView setFont:andString:] 4 glyps - self {{0, 0}, {205, 231}}
2011-09-13 12:03:55.685 NSFontAttributeExplorer[5156:707] -[FontView setFont:andString:] textContainer {205, 10000000}
2011-09-13 12:03:55.686 NSFontAttributeExplorer[5156:707] -[FontView setFont:andString:] glyphs[0] =  172           rect {{-28, -5.5250000000000057}, {99.318749999999994, 78.918750000000003}}
2011-09-13 12:03:55.687 NSFontAttributeExplorer[5156:707] -[FontView setFont:andString:] glyphs[1] =  190           rect {{17.450000000000003, -5.5250000000000057}, {99.318749999999994, 78.918750000000003}}
2011-09-13 12:03:55.688 NSFontAttributeExplorer[5156:707] -[FontView setFont:andString:] glyphs[2] =  194           rect {{28.71875, -5.5250000000000057}, {99.318749999999994, 78.918750000000003}}
2011-09-13 12:03:55.689 NSFontAttributeExplorer[5156:707] -[FontView setFont:andString:] glyphs[3] =   61           rect {{71.637500000000003, -5.5250000000000057}, {99.318750000000009, 78.918750000000003}}


Code fragment:
	NSUInteger numberOfGlyphs = [ layoutManager numberOfGlyphs ];
	#ifdef LOG_BOXES
		NSLog(@"%s %lu glyps - self %@", __FUNCTION__, numberOfGlyphs, NSStringFromRect([self bounds]) );
	#endif
	for( NSUInteger glyphIndex = 0; glyphIndex < numberOfGlyphs; )
	{
		NSRange effectiveGlyphRange;
		NSTextContainer *container = 	[ layoutManager textContainerForGlyphAtIndex: 	glyphIndex
														effectiveRange: 				&effectiveGlyphRange
										];
		#ifdef LOG_BOXES
			NSLog(@"%s textContainer %@", __FUNCTION__, NSStringFromSize([container containerSize]) );
		#endif
		NSUInteger max = NSMaxRange(effectiveGlyphRange);
		NSRange sux; sux.length = 1;
		for( NSUInteger i = effectiveGlyphRange.location; i < max; i++)
		{
			sux.location = i;
			NSRect r = [ layoutManager boundingRectForGlyphRange: sux inTextContainer: container ];
			NSGlyph g = [ layoutManager glyphAtIndex: i ];
			if 		( g == NSControlGlyph )
			{
				#ifdef LOG_BOXES
					NSLog(@"%s glyphs[%lu] = NSControlGlyph rect %@", __FUNCTION__, i, NSStringFromRect(r) );
				#endif
			}
			else if ( g == NSNullGlyph )
			{
				#ifdef LOG_BOXES
					NSLog(@"%s glyphs[%lu] = NSNullGlyph    rect %@", __FUNCTION__, i, NSStringFromRect(r) );
				#endif
			}
			else
			{
				#ifdef LOG_BOXES
					NSLog(@"%s glyphs[%lu] = %4u           rect %@", __FUNCTION__, i, g, NSStringFromRect(r) );
				#endif
			};
		};

		glyphIndex = max;
	};


Kind regards,

Gerriet.

_______________________________________________

Cocoa-dev mailing list (email@hidden)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:

This email sent to email@hidden

  • Prev by Date: Re: Problem with NSAppleScript execution
  • Next by Date: ikimageview delegate
  • Previous by thread: web view moving in split view when keyboard comes up
  • Next by thread: ikimageview delegate
  • Index(es):
    • Date
    • Thread