Merge pull request #1173 from ychin/code-clean-up-additional-logging

Code clean up / robustification and additional logging for render
This commit is contained in:
Yee Cheng Chin
2021-03-01 00:27:08 -08:00
committed by GitHub
5 changed files with 70 additions and 20 deletions
+2 -2
View File
@@ -1775,9 +1775,9 @@ fsEventCallback(ConstFSEventStreamRef streamRef,
[alert setMessageText:NSLocalizedString(@"Multiple files not found",
@"File not found dialog, title")];
text = [NSString stringWithFormat:NSLocalizedString(
@"Could not open file with name %@, and %d other files.",
@"Could not open file with name %@, and %u other files.",
@"File not found dialog, text"),
firstMissingFile, count-[files count]-1];
firstMissingFile, (unsigned int)(count-[files count]-1)];
}
[alert setInformativeText:text];
+53 -13
View File
@@ -176,7 +176,7 @@ static GridCell* grid_cell(Grid *grid, int row, int col) {
// with `:set nofu`. If that gets fixed, then delete this workaround.
static GridCell* grid_cell_safe(Grid *grid, int row, int col) {
if (row >= grid->rows || col >= grid->cols) {
static GridCell scratch_cell;
static GridCell scratch_cell = {};
return &scratch_cell;
}
return grid_cell(grid, row, col);
@@ -377,6 +377,7 @@ static void grid_free(Grid *grid) {
- (void)setFont:(NSFont *)newFont
{
if (!newFont) {
ASLogInfo(@"Trying to set null font");
return;
}
if (!forceRefreshFont) {
@@ -414,7 +415,9 @@ static void grid_free(Grid *grid) {
CTFontDescriptorRef desc = CTFontDescriptorCreateWithNameAndSize((CFStringRef)[newFont fontName], pt);
CTFontRef fontRef = CTFontCreateWithFontDescriptor(desc, pt, NULL);
CFRelease(desc);
if (!fontRef) {
ASLogInfo(@"CTFontCreateWithFontDescriptor failed (preserveLineHeight == false, fontName: %@), pt: %f", [newFont fontName], pt);
}
font = (NSFont*)fontRef;
} else {
font = [newFont retain];
@@ -439,7 +442,10 @@ static void grid_free(Grid *grid) {
if (!newFont) {
// Use the normal font as the wide font (note that the normal font may
// very well include wide characters.)
if (font) [self setWideFont:font];
if (font) {
[self setWideFont:font];
return;
}
} else if (newFont != fontWide) {
[fontWide release];
fontWide = [newFont retain];
@@ -730,14 +736,22 @@ static void grid_free(Grid *grid) {
NSGraphicsContext *context = [NSGraphicsContext currentContext];
CGContextRef ctx = context.CGContext;
[context setShouldAntialias:antialias];
CGContextSetFillColorSpace(ctx, CGColorSpaceCreateWithName(kCGColorSpaceSRGB));
{
CGColorSpaceRef colorSpace = CGColorSpaceCreateWithName(kCGColorSpaceSRGB);
if (colorSpace) {
CGContextSetFillColorSpace(ctx, colorSpace);
CGColorSpaceRelease(colorSpace);
} else {
ASLogInfo(@"Could not create sRGB color space");
}
}
CGContextSetTextMatrix(ctx, CGAffineTransformIdentity);
CGContextSetTextDrawingMode(ctx, kCGTextFill);
CGContextSetFontSize(ctx, [font pointSize]);
CGContextSetShouldSmoothFonts(ctx, YES);
CGContextSetBlendMode(ctx, kCGBlendModeCopy);
int originalSmoothingStyle;
int originalSmoothingStyle = 0;
if (thinStrokes) {
originalSmoothingStyle = CGContextGetFontSmoothingStyle(ctx);
CGContextSetFontSmoothingStyle(ctx, fontSmoothingStyleLight);
@@ -757,8 +771,8 @@ static void grid_free(Grid *grid) {
__block NSMutableString *lineString = nil;
__block CGFloat lineStringStart = 0;
__block CFRange lineStringRange;
__block GridCell lastStringCell;
__block CFRange lineStringRange = {};
__block GridCell lastStringCell = {};
void (^flushLineString)() = ^{
if (!lineString.length)
return;
@@ -774,8 +788,14 @@ static void grid_free(Grid *grid) {
CGContextSetFillColor(ctx, COMPONENTS(lastStringCell.fg));
CGContextSetTextPosition(ctx, lineStringStart, rowRect.origin.y + fontDescent);
CGContextSetBlendMode(ctx, kCGBlendModeNormal);
const NSUInteger lineStringLength = lineString.length;
CTLineRef line = [self lineForCharacterString:lineString textFlags:lastStringCell.textFlags];
for (id obj in (NSArray*)CTLineGetGlyphRuns(line)) {
NSArray* glyphRuns = (NSArray*)CTLineGetGlyphRuns(line);
if ([glyphRuns count] == 0) {
ASLogDebug(@"CTLineGetGlyphRuns no glyphs for: %@", lineString);
}
for (id obj in glyphRuns) {
CTRunRef run = (CTRunRef)obj;
CFIndex glyphCount = CTRunGetGlyphCount(run);
CFIndex indices[glyphCount];
@@ -783,11 +803,20 @@ static void grid_free(Grid *grid) {
CGGlyph glyphs[glyphCount];
CTRunGetStringIndices(run, CFRangeMake(0, 0), indices);
CTRunGetGlyphs(run, CFRangeMake(0, 0), glyphs);
for (CFIndex i = 0; i < glyphCount; i++)
for (CFIndex i = 0; i < glyphCount; i++) {
if (indices[i] >= lineStringLength) {
ASLogDebug(@"Invalid glyph pos index: %ld, len: %lu", (long)indices[i], (unsigned long)lineStringLength);
continue;
}
positions[i] = positionsByIndex[indices[i]];
}
CTFontRef font = CFDictionaryGetValue(CTRunGetAttributes(run), kCTFontAttributeName);
if (!font) {
ASLogDebug(@"Null font for rendering. glyphCount: %ld", (long)glyphCount);
}
CTFontDrawGlyphs(font, glyphs, positions, glyphCount, ctx);
}
CGContextSetBlendMode(ctx, kCGBlendModeCopy);
[lineString deleteCharactersInRange:NSMakeRange(0, lineString.length)];
};
@@ -867,8 +896,9 @@ static void grid_free(Grid *grid) {
[lineString release];
CGContextRestoreGState(ctx);
}
if (thinStrokes)
if (thinStrokes) {
CGContextSetFontSmoothingStyle(ctx, originalSmoothingStyle);
}
}
- (void)performBatchDrawWithData:(NSData *)data
@@ -1094,6 +1124,7 @@ static void grid_free(Grid *grid) {
fontRef = [NSFontManager.sharedFontManager convertFont:fontRef toHaveTrait:NSFontItalicTrait];
if (textFlags & DRAW_BOLD)
fontRef = [NSFontManager.sharedFontManager convertFont:fontRef toHaveTrait:NSFontBoldTrait];
fontVariants[cacheFlags] = fontRef;
}
return fontRef;
@@ -1104,8 +1135,9 @@ static void grid_free(Grid *grid) {
int cacheFlags = flags & (DRAW_WIDE | DRAW_ITALIC | DRAW_BOLD);
NSNumber *key = @(cacheFlags);
NSCache<NSString *,id> *strCache = characterLines[key];
if (!strCache)
if (!strCache){
strCache = characterLines[key] = [[[NSCache alloc] init] autorelease];
}
CTLineRef line = (CTLineRef)[strCache objectForKey:string];
if (!line) {
NSAttributedString *attrString = [[NSAttributedString alloc]
@@ -1476,12 +1508,13 @@ static int ReadDrawCmd(const void **bytesRef, struct DrawCmd *drawCmd)
withFlags:(int)flags foregroundColor:(int)fg
backgroundColor:(int)bg specialColor:(int)sp
{
BOOL wide = flags & DRAW_WIDE ? YES : NO;
const BOOL wide = flags & DRAW_WIDE ? YES : NO;
__block size_t cells_filled = 0;
[string enumerateSubstringsInRange:NSMakeRange(0, string.length)
options:NSStringEnumerationByComposedCharacterSequences
usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
GridCell *cell = grid_cell_safe(&grid, row, col + cells_filled++ * (wide ? 2 : 1));
const int curCol = col + cells_filled++ * (wide ? 2 : 1);
GridCell *cell = grid_cell_safe(&grid, row, curCol);
GridCellInsertionPoint insertionPoint = {0};
if (flags & DRAW_TRANSP)
insertionPoint = cell->insertionPoint;
@@ -1502,6 +1535,13 @@ static int ReadDrawCmd(const void **bytesRef, struct DrawCmd *drawCmd)
.insertionPoint = insertionPoint,
.string = characterString,
};
if (wide) {
// Also clear the next cell just to be tidy (even though this cell would be skipped during rendering)
const GridCell clearCell = { .bg = defaultBackgroundColor.argbInt };
GridCell *nextCell = grid_cell_safe(&grid, row, curCol + 1);
*nextCell = clearCell;
}
}];
[self setNeedsDisplayFromRow:row
column:col
+6 -3
View File
@@ -88,8 +88,6 @@ static BOOL isUnsafeMessage(int msgid);
@property (readonly) NSMutableDictionary *itemDict;
@property (readonly) NSMutableArray *itemOrder;
- (id)initWithVimController:(MMVimController *)controller;
@end
@interface MMTouchBarItemInfo : NSObject;
@@ -828,6 +826,7 @@ static BOOL isUnsafeMessage(int msgid);
// This should only happen if the system default font has changed
// name since MacVim was compiled in which case we fall back on
// using the user fixed width font.
ASLogInfo(@"Failed to load font '%@' / %f", name, size);
font = [NSFont userFixedPitchFontOfSize:size];
}
@@ -1634,7 +1633,7 @@ static BOOL isUnsafeMessage(int msgid);
touchbarItem = item;
}
MMTouchBarItemInfo *touchbarItemInfo = [[MMTouchBarItemInfo alloc] initWithItem:touchbarItem label:touchbarLabel];
MMTouchBarItemInfo *touchbarItemInfo = [[[MMTouchBarItemInfo alloc] initWithItem:touchbarItem label:touchbarLabel] autorelease];
if (submenu) {
[touchbarItemInfo makeChildTouchBar];
}
@@ -2009,6 +2008,10 @@ static BOOL isUnsafeMessage(int msgid);
- (id)init
{
if (!(self = [super init])) {
return nil;
}
_touchbar = [[NSTouchBar alloc] init];
_itemDict = [[NSMutableDictionary alloc] init];
-1
View File
@@ -75,7 +75,6 @@
- (void)setScrollbarThumbValue:(float)val proportion:(float)prop
identifier:(int32_t)ident;
- (unsigned int)calculateStyleMask;
- (void)setBackgroundOption:(int)dark;
- (void)refreshApperanceMode;
+9 -1
View File
@@ -692,7 +692,13 @@
- (void)setFont:(NSFont *)font
{
[[NSFontManager sharedFontManager] setSelectedFont:font isMultiple:NO];
const NSWindow* mainWindow = [NSApp mainWindow];
if (mainWindow && (mainWindow == decoratedWindow || mainWindow == fullScreenWindow)) {
// Update the shared font manager with the new font, but only if this is the main window,
// as the font manager is shared among all the windows.
[[NSFontManager sharedFontManager] setSelectedFont:font isMultiple:NO];
}
[[vimView textView] setFont:font];
[self updateResizeConstraints];
shouldMaximizeWindow = YES;
@@ -1159,6 +1165,7 @@
[[MMAppController sharedInstance] setMainMenu:[vimController mainMenu]];
if ([vimView textView]) {
// Update the shared font manager to always be set to the font of the main window.
NSFontManager *fm = [NSFontManager sharedFontManager];
[fm setSelectedFont:[[vimView textView] font] isMultiple:NO];
}
@@ -1247,6 +1254,7 @@
- (void)windowDidChangeBackingProperties:(NSNotification *)notification
{
ASLogDebug(@"");
[vimController sendMessage:BackingPropertiesChangedMsgID data:nil];
}