Compare commits

...

18 Commits

Author SHA1 Message Date
Kazuki Sakamoto 109b8c134c MacVim Snapshot 116
Binary targets macOS 10.8+

- Vim patch 8.0.0094
- Fixed Non-native fullscreen issue on 10.12 Sierra (#312)

Script interfaces have compatibility with these versions

- Lua 5.2
- Perl 5.16
- Python2 2.7
- Python3 3.5.2
- Ruby 2.0
2016-11-20 01:08:04 -08:00
Kazuki Sakamoto 967b1a1814 Merge pull request #410 from macvim-dev/fix/fullscreen
Runtime 10.12 version check for CGLayer in non-native fullscreen
2016-11-20 00:35:38 -08:00
Kazuki Sakamoto 7fe35f8735 Runtime 10.12 version check for CGLayer in non-native fullscreen 2016-11-20 00:34:43 -08:00
Kazuki Sakamoto cab4040499 Merge pull request #405 from osheroff/master
Fix problems with non-native fullscreen and mac 10.12
2016-11-20 00:32:37 -08:00
Kazuki Sakamoto 4dba9d1e2f Merge remote-tracking branch 'vim/master' 2016-11-19 22:21:44 -08:00
Kazuki Sakamoto aedaad51cf Merge pull request #409 from macvim-dev/revert-408-xcode8.2
Revert "xcode8.2 on Travis CI"
2016-11-19 10:18:25 -08:00
Kazuki Sakamoto fbf66f9918 Revert "xcode8.2 on Travis CI" 2016-11-19 10:18:11 -08:00
Bram Moolenaar 63e4344edc patch 8.0.0094
Problem:    When vimrun.exe is not found the error message is not properly
            encoded.
Solution:   Use utf-16 and MessageBoxW(). (Ken Takata)
2016-11-19 17:28:44 +01:00
Bram Moolenaar dda39aeafc patch 8.0.0093
Problem:    Not using multiprocess build feature.
Solution:   Enable multiprocess build with MSVC 10. (Ken Takata)
2016-11-19 17:17:12 +01:00
Kazuki Sakamoto 3129be9a78 Merge pull request #408 from macvim-dev/xcode8.2
xcode8.2 on Travis CI
2016-11-18 21:27:14 -08:00
Kazuki Sakamoto 7c8684761b xcode8.2 on Travis CI 2016-11-18 21:26:31 -08:00
Kazuki Sakamoto 32418b98a0 Merge pull request #407 from macvim-dev/revert-406-fix/timer-feedkeys
Revert "Fix #401"
2016-11-18 08:29:12 -08:00
Kazuki Sakamoto abeb366f9f Revert "Fix #401" 2016-11-18 08:28:36 -08:00
Kazuki Sakamoto 28f88ac8e7 Merge pull request #406 from ichizok/fix/timer-feedkeys
Fix #401
2016-11-18 07:23:31 -08:00
ichizok a6d11c71a0 Enable Test_exit_callback_interval() 2016-11-18 23:55:33 +09:00
ichizok cf2ddc70a1 Check for jobs and channels more often 2016-11-18 23:55:32 +09:00
ichizok 1ed1ccc2c3 Fix feedkeys in timer callback 2016-11-17 05:36:07 +09:00
Ben Osheroff 4663f06f3e Fix problems with non-native fullscreen and mac 10.12
When you set a borderless style on a subclasses window in 10.12, the
original behavior in which you could progressively draw partially on a
stale window seems to be gone; it blanks the thing after each draw. It's
totally unclear to me whether the CoreText engine as written was ever
"correct", or maybe it just "accidentally worked" -- no documentation on
the internets seems to indicate you're allowed to only draw CoreGraphics
updates to a window in drawRect.

This PR works around that by drawing onto a persistent background layer
which we then blit to the screen.  This PR also makes resizing a
CoreGraphics view much smoother; the old code was pretty flickery.

addreses #312.
2016-11-14 22:03:10 -08:00
9 changed files with 145 additions and 21 deletions
+1 -1
View File
@@ -1255,7 +1255,7 @@
</dict>
</array>
<key>CFBundleVersion</key>
<string>115</string>
<string>116</string>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
+5
View File
@@ -39,6 +39,10 @@
CGPoint *positions;
NSMutableArray *fontCache;
BOOL cgLayerEnabled;
CGLayerRef cgLayer;
CGContextRef cgLayerContext;
// These are used in MMCoreTextView+ToolTip.m
id trackingRectOwner_; // (not retained)
void *trackingRectUserData_;
@@ -85,6 +89,7 @@
- (BOOL)convertPoint:(NSPoint)point toRow:(int *)row column:(int *)column;
- (NSRect)rectForRow:(int)row column:(int)column numRows:(int)nr
numColumns:(int)nc;
- (void)setCGLayerEnabled:(BOOL)enabled;
//
// NSTextView methods
+95 -14
View File
@@ -592,6 +592,23 @@ defaultAdvanceForFont(NSFont *font)
[self batchDrawData:data];
[drawData removeAllObjects];
if (cgLayerEnabled) {
// during a live resize, we will have around a stale layer until the
// refresh messages travel back from the vim process. We push the old
// layer in at an offset to get rid of jitter due to lines changing
// position.
CGLayerRef l = [self getCGLayer];
CGSize cgLayerSize = CGLayerGetSize(l);
CGSize frameSize = [self frame].size;
NSRect drawRect = NSMakeRect(
0,
frameSize.height - cgLayerSize.height,
cgLayerSize.width,
cgLayerSize.height);
CGContextDrawLayerInRect([context graphicsPort], drawRect, l);
}
}
- (void)performBatchDrawWithData:(NSData *)data
@@ -605,6 +622,47 @@ defaultAdvanceForFont(NSFont *font)
[self display];
}
- (void)setCGLayerEnabled:(BOOL)enabled
{
cgLayerEnabled = enabled;
if (!cgLayerEnabled)
[self releaseCGLayer];
}
- (void)releaseCGLayer
{
if (cgLayer) {
CGLayerRelease(cgLayer);
cgLayer = nil;
cgLayerContext = nil;
}
}
- (CGLayerRef)getCGLayer
{
NSParameterAssert(cgLayerEnabled);
if (!cgLayer) {
NSGraphicsContext *context = [NSGraphicsContext currentContext];
NSRect frame = [self frame];
cgLayer = CGLayerCreateWithContext(
[context graphicsPort], frame.size, NULL);
}
return cgLayer;
}
- (CGContextRef)getCGContext
{
if (cgLayerEnabled) {
if (!cgLayerContext)
cgLayerContext = CGLayerGetContext([self getCGLayer]);
return cgLayerContext;
} else {
return [[NSGraphicsContext currentContext] graphicsPort];
}
}
- (NSSize)constrainRows:(int *)rows columns:(int *)cols toSize:(NSSize)size
{
// TODO:
@@ -852,7 +910,7 @@ defaultAdvanceForFont(NSFont *font)
const void *end = bytes + [data length];
#if MM_DEBUG_DRAWING
ASLogNotice(@"====> BEGIN %s", _cmd);
ASLogNotice(@"====> BEGIN");
#endif
// TODO: Sanity check input
@@ -908,10 +966,18 @@ defaultAdvanceForFont(NSFont *font)
column:col
numRows:height
numColumns:width];
[signImg drawInRect:r
fromRect:NSZeroRect
operation:NSCompositingOperationSourceOver
fraction:1.0];
if (cgLayerEnabled) {
CGContextRef context = [self getCGContext];
CGImageRef cgImage = [signImg CGImageForProposedRect:&r
context:nil
hints:nil];
CGContextDrawImage(context, r, cgImage);
} else {
[signImg drawInRect:r
fromRect:NSZeroRect
operation:NSCompositingOperationSourceOver
fraction:1.0];
}
} else if (DrawStringDrawType == type) {
int bg = *((int*)bytes); bytes += sizeof(int);
int fg = *((int*)bytes); bytes += sizeof(int);
@@ -1013,11 +1079,11 @@ defaultAdvanceForFont(NSFont *font)
}
#if MM_DEBUG_DRAWING
ASLogNotice(@"<==== END %s", _cmd);
ASLogNotice(@"<==== END");
#endif
}
static CTFontRef
static CTFontRef
lookupFont(NSMutableArray *fontCache, const unichar *chars, UniCharCount count,
CTFontRef currFontRef)
{
@@ -1294,7 +1360,7 @@ recurseDraw(const unichar *chars, CGGlyph *glyphs, CGPoint *positions,
withFlags:(int)flags foregroundColor:(int)fg
backgroundColor:(int)bg specialColor:(int)sp
{
CGContextRef context = [[NSGraphicsContext currentContext] graphicsPort];
CGContextRef context = [self getCGContext];
NSRect frame = [self bounds];
float x = col*cellSize.width + insetSize.width;
float y = frame.size.height - insetSize.height - (1+row)*cellSize.height;
@@ -1412,8 +1478,22 @@ recurseDraw(const unichar *chars, CGGlyph *glyphs, CGPoint *positions,
- (void)scrollRect:(NSRect)rect lineCount:(int)count
{
NSSize delta={0, -count * cellSize.height};
[self scrollRect:rect by:delta];
if (cgLayerEnabled) {
CGContextRef context = [self getCGContext];
int yOffset = count * cellSize.height;
NSRect clipRect = rect;
clipRect.origin.y -= yOffset;
// draw self on top of self, offset so as to "scroll" lines vertically
CGContextSaveGState(context);
CGContextClipToRect(context, clipRect);
CGContextDrawLayerAtPoint(
context, CGPointMake(0, -yOffset), [self getCGLayer]);
CGContextRestoreGState(context);
} else {
NSSize delta={0, -count * cellSize.height};
[self scrollRect:rect by:delta];
}
}
- (void)deleteLinesFromRow:(int)row lineCount:(int)count
@@ -1455,7 +1535,7 @@ recurseDraw(const unichar *chars, CGGlyph *glyphs, CGPoint *positions,
- (void)clearBlockFromRow:(int)row1 column:(int)col1 toRow:(int)row2
column:(int)col2 color:(int)color
{
CGContextRef context = [[NSGraphicsContext currentContext] graphicsPort];
CGContextRef context = [self getCGContext];
NSRect rect = [self rectFromRow:row1 column:col1 toRow:row2 column:col2];
CGContextSetRGBFillColor(context, RED(color), GREEN(color), BLUE(color),
@@ -1468,7 +1548,8 @@ recurseDraw(const unichar *chars, CGGlyph *glyphs, CGPoint *positions,
- (void)clearAll
{
CGContextRef context = [[NSGraphicsContext currentContext] graphicsPort];
[self releaseCGLayer];
CGContextRef context = [self getCGContext];
NSRect rect = [self bounds];
float r = [defaultBackgroundColor redComponent];
float g = [defaultBackgroundColor greenComponent];
@@ -1484,7 +1565,7 @@ recurseDraw(const unichar *chars, CGGlyph *glyphs, CGPoint *positions,
- (void)drawInsertionPointAtRow:(int)row column:(int)col shape:(int)shape
fraction:(int)percent color:(int)color
{
CGContextRef context = [[NSGraphicsContext currentContext] graphicsPort];
CGContextRef context = [self getCGContext];
NSRect rect = [self rectForRow:row column:col numRows:1 numColumns:1];
CGContextSaveGState(context);
@@ -1533,7 +1614,7 @@ recurseDraw(const unichar *chars, CGGlyph *glyphs, CGPoint *positions,
numColumns:(int)ncols
{
// TODO: THIS CODE HAS NOT BEEN TESTED!
CGContextRef cgctx = [[NSGraphicsContext currentContext] graphicsPort];
CGContextRef cgctx = [self getCGContext];
CGContextSaveGState(cgctx);
CGContextSetBlendMode(cgctx, kCGBlendModeDifference);
CGContextSetRGBFillColor(cgctx, 1.0, 1.0, 1.0, 1.0);
+5
View File
@@ -172,6 +172,8 @@ enum {
oldPosition = [view frame].origin;
[view removeFromSuperviewWithoutNeedingDisplay];
if (floor(NSAppKitVersionNumber) >= NSAppKitVersionNumber10_12)
[[view textView] setCGLayerEnabled:YES];
[[self contentView] addSubview:view];
[self setInitialFirstResponder:[view textView]];
@@ -284,6 +286,9 @@ enum {
[view setFrameOrigin:oldPosition];
[self close];
if (floor(NSAppKitVersionNumber) >= NSAppKitVersionNumber10_12)
[[view textView] setCGLayerEnabled:NO];
// Set the text view to initial first responder, otherwise the 'plus'
// button on the tabline steals the first responder status.
[target setInitialFirstResponder:[view textView]];
+1
View File
@@ -72,4 +72,5 @@
// NOT IMPLEMENTED (only in Core Text renderer)
- (void)deleteSign:(NSString *)signName;
- (void)setToolTipAtMousePoint:(NSString *)string;
- (void)setCGLayerEnabled:(BOOL)enabled;
@end
+5
View File
@@ -517,6 +517,11 @@
// ONLY in Core Text!
}
- (void)setCGLayerEnabled:(BOOL)enabled
{
// ONLY in Core Text!
}
- (BOOL)isOpaque
{
return NO;
+11
View File
@@ -297,6 +297,9 @@ CPU = ix86
# Flag to turn on Win64 compatibility warnings for VC7.x and VC8.
WP64CHECK = /Wp64
# Use multiprocess build
USE_MP = yes
#>>>>> path of the compiler and linker; name of include and lib directories
# PATH = c:\msvc20\bin;$(PATH)
# INCLUDE = c:\msvc20\include
@@ -473,6 +476,14 @@ NODEFAULTLIB =
NODEFAULTLIB = /nodefaultlib
!endif
# Use multiprocess build on MSVC 10
!if "$(USE_MP)"=="yes"
!if $(MSVC_MAJOR) >= 10
CFLAGS = $(CFLAGS) /MP
!endif
!endif
!ifdef NODEBUG
VIM = vim
!if "$(OPTIMIZE)" == "SPACE"
+18 -6
View File
@@ -4705,12 +4705,24 @@ mch_call_shell(
#if defined(FEAT_GUI_W32)
if (need_vimrun_warning)
{
MessageBox(NULL,
_("VIMRUN.EXE not found in your $PATH.\n"
"External commands will not pause after completion.\n"
"See :help win32-vimrun for more information."),
_("Vim Warning"),
MB_ICONWARNING);
char *msg = _("VIMRUN.EXE not found in your $PATH.\n"
"External commands will not pause after completion.\n"
"See :help win32-vimrun for more information.");
char *title = _("Vim Warning");
# ifdef FEAT_MBYTE
if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
{
WCHAR *wmsg = enc_to_utf16((char_u *)msg, NULL);
WCHAR *wtitle = enc_to_utf16((char_u *)title, NULL);
if (wmsg != NULL && wtitle != NULL)
MessageBoxW(NULL, wmsg, wtitle, MB_ICONWARNING);
vim_free(wmsg);
vim_free(wtitle);
}
else
# endif
MessageBox(NULL, msg, title, MB_ICONWARNING);
need_vimrun_warning = FALSE;
}
if (!s_dont_use_vimrun && p_stmp)
+4
View File
@@ -779,6 +779,10 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
94,
/**/
93,
/**/
92,
/**/