Merge remote-tracking branch 'cappuccino/master'

This commit is contained in:
daboe01
2016-10-16 13:20:13 +02:00
3 changed files with 37 additions and 99 deletions
+27 -14
View File
@@ -26,11 +26,12 @@
// Browser Engines
CPUnknownBrowserEngine = 0;
CPGeckoBrowserEngine = 1;
CPInternetExplorerBrowserEngine = 2;
CPKHTMLBrowserEngine = 3;
CPOperaBrowserEngine = 4;
CPWebKitBrowserEngine = 5;
CPGeckoBrowserEngine = 1 << 0;
CPInternetExplorerBrowserEngine = 1 << 1;
CPKHTMLBrowserEngine = 1 << 2;
CPOperaBrowserEngine = 1 << 3;
CPWebKitBrowserEngine = 1 << 4; // Safari + Chrome
CPBlinkBrowserEngine = 1 << 5; // Recent Chrome
// Operating Systems
CPMacOperatingSystem = 0;
@@ -84,14 +85,23 @@ CPAltEnterTextAreaFeature = 32;
/*
When an absolutely positioned div (CPView) with an absolutely positioned canvas in it (CPView with drawRect:) moves things on top of the canvas (subviews) don't redraw correctly. E.g. if you have a bunch of text fields in a CPBox in a sheet which animates in, some of the text fields might not be visible because the CPBox has a canvas at the bottom and the box moved form offscreen to onscreen. This bug is probably very related: https://bugs.webkit.org/show_bug.cgi?id=67203
*/
*/
CPCanvasParentDrawErrorsOnMovementBug = 1 << 0;
// The paste event is only sent if an input or textarea has focus.
CPJavaScriptPasteRequiresEditableTarget = 1 << 1;
CPJavaScriptPasteRequiresEditableTarget = 1 << 1;
// Redirecting the focus of the browser on keydown to an input for Cmd-V or Ctrl-V makes the paste fail.
CPJavaScriptPasteCantRefocus = 1 << 2;
/*
Safari calculates incorrect text size unless you set the canvas font even if it is already set
You can see the bug after disabling the workaround and opening any panel while typing.
You can use the font panel in the manual test for CPTextView.
Look out for a displaced cursor, i.e. after typing letters of small width, such as the 'i'.
https://bugs.webkit.org/show_bug.cgi?id=150224
*/
CPTextSizingAlwaysNeedsSetFontBug = 1 << 3;
var USER_AGENT = "",
PLATFORM_ENGINE = CPUnknownBrowserEngine,
@@ -110,7 +120,7 @@ if (typeof window !== "undefined" && typeof window.navigator !== "undefined")
// Opera
if (typeof window !== "undefined" && window.opera)
{
PLATFORM_ENGINE = CPOperaBrowserEngine;
PLATFORM_ENGINE |= CPOperaBrowserEngine;
PLATFORM_FEATURES[CPJavaScriptCanvasDrawFeature] = YES;
}
@@ -118,7 +128,7 @@ if (typeof window !== "undefined" && window.opera)
// Internet Explorer
else if (typeof window !== "undefined" && (window.attachEvent || (!(window.ActiveXObject) && "ActiveXObject" in window))) // Must follow Opera check.
{
PLATFORM_ENGINE = CPInternetExplorerBrowserEngine;
PLATFORM_ENGINE |= CPInternetExplorerBrowserEngine;
// Features we can only be sure of with IE (no known independent tests)
PLATFORM_FEATURES[CPVMLFeature] = YES;
@@ -136,10 +146,10 @@ else if (typeof window !== "undefined" && (window.attachEvent || (!(window.Activ
PLATFORM_FEATURES[CPJavaScriptClipboardAccessFeature] = YES;
}
// WebKit
// Safari + Chrome (WebKit and Blink)
else if (USER_AGENT.indexOf("AppleWebKit/") != -1)
{
PLATFORM_ENGINE = CPWebKitBrowserEngine;
PLATFORM_ENGINE |= CPWebKitBrowserEngine;
// Features we can only be sure of with WebKit (no known independent tests)
PLATFORM_FEATURES[CPCSSRGBAFeature] = YES;
@@ -179,7 +189,10 @@ else if (USER_AGENT.indexOf("AppleWebKit/") != -1)
PLATFORM_BUGS |= CPJavaScriptPasteRequiresEditableTarget;
// https://bugs.webkit.org/show_bug.cgi?id=39689
PLATFORM_BUGS |= CPJavaScriptPasteCantRefocus;
PLATFORM_BUGS |= CPTextSizingAlwaysNeedsSetFontBug;
}
else if ((window.chrome || (window.Intl && Intl.v8BreakIterator)) && 'CSS' in window)
PLATFORM_ENGINE |= CPBlinkBrowserEngine;
// Assume this bug was introduced around Safari 5.1/Chrome 16. This could probably be tighter.
if (majorVersion > 533)
@@ -189,13 +202,13 @@ else if (USER_AGENT.indexOf("AppleWebKit/") != -1)
// KHTML
else if (USER_AGENT.indexOf("KHTML") != -1) // Must follow WebKit check.
{
PLATFORM_ENGINE = CPKHTMLBrowserEngine;
PLATFORM_ENGINE |= CPKHTMLBrowserEngine;
}
// Gecko
else if (USER_AGENT.indexOf("Gecko") !== -1) // Must follow KHTML check.
{
PLATFORM_ENGINE = CPGeckoBrowserEngine;
PLATFORM_ENGINE |= CPGeckoBrowserEngine;
PLATFORM_FEATURES[CPJavaScriptCanvasDrawFeature] = YES;
@@ -286,7 +299,7 @@ function CPPlatformHasBug(aBug)
function CPBrowserIsEngine(anEngine)
{
return PLATFORM_ENGINE === anEngine;
return PLATFORM_ENGINE & anEngine;
}
function CPBrowserIsOperatingSystem(anOperatingSystem)
+9 -25
View File
@@ -30,9 +30,7 @@
var CPStringSizeWithFontInWidthCache = [],
CPStringSizeWithFontHeightCache = [],
CPStringSizeMeasuringContext,
CPStringSizeIsCanvasSizingInvalid,
CPStringSizeDidTestCanvasSizingValid;
CPStringSizeMeasuringContext;
CPStringSizeCachingEnabled = YES;
@@ -59,22 +57,14 @@ CPStringSizeCachingEnabled = YES;
return [self sizeWithFont:aFont inWidth:NULL];
}
- (void) _initializeStringSizing
+ (void) initialize
{
if ([self class] != [CPString class])
return;
#if PLATFORM(DOM)
CPStringSizeIsCanvasSizingInvalid = YES;
if (CPFeatureIsCompatible(CPHTMLCanvasFeature))
{
var aFont = [CPFont systemFontOfSize:12.0];
if (!CPStringSizeMeasuringContext)
CPStringSizeMeasuringContext = CGBitmapGraphicsContextCreate();
CPStringSizeMeasuringContext.font = [aFont cssString];
var teststring = "0123456879abcdefghiklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,.-()";
CPStringSizeIsCanvasSizingInvalid = ABS([CPPlatformString sizeOfString:teststring withFont:aFont forWidth:0].width - CPStringSizeMeasuringContext.measureText(teststring).width) > 2;
}
if (CPFeatureIsCompatible(CPHTMLCanvasFeature) && !CPStringSizeMeasuringContext)
CPStringSizeMeasuringContext = CGBitmapGraphicsContextCreate();
#endif
}
@@ -99,17 +89,11 @@ CPStringSizeCachingEnabled = YES;
if (size !== undefined && sizeCacheForFont.hasOwnProperty(cacheKey))
return CGSizeMakeCopy(size);
if (CPStringSizeDidTestCanvasSizingValid === undefined)
{
[self _initializeStringSizing];
CPStringSizeDidTestCanvasSizingValid = YES;
}
if (CPStringSizeIsCanvasSizingInvalid || aWidth > 0)
if (!CPFeatureIsCompatible(CPHTMLCanvasFeature) || aWidth > 0)
size = [CPPlatformString sizeOfString:self withFont:aFont forWidth:aWidth];
else
{
if (CPStringSizeMeasuringContext.font !== cssString)
if (CPPlatformHasBug(CPTextSizingAlwaysNeedsSetFontBug) || CPStringSizeMeasuringContext.font !== cssString)
CPStringSizeMeasuringContext.font = cssString;
var fontHeight = CPStringSizeWithFontHeightCache[cssString];
+1 -60
View File
@@ -4,8 +4,7 @@
*
* TODOs:
* 1. make browser-width for size smaller and fix columns
* 2. sampleview is currently not shown
* 3. add all the missing features from the MacOS X counterpart
* 2. add all the missing features from the MacOS X counterpart (sampleview)
*
*
* Created by Daniel Boehringer on 2/JAN/2014.
@@ -68,54 +67,6 @@ var kTypefaceIndex_Normal = 0,
var _availableTraits= [@"Normal", @"Italic", @"Bold", @"Bold Italic"],
_availableSizes = [@"9", @"10", @"11", @"12", @"13", @"14", @"18", @"24", @"36", @"48", @"72", @"96"];
@implementation _CPFontPanelSampleView : CPView
{
CPLayoutManager _layoutManager;
CPTextStorage _textStorage;
CPTextContainer _textContainer;
}
- (id)initWithFrame:(CGRect)rect
{
if (self = [super initWithFrame:rect])
{
_textStorage = [[CPTextStorage alloc] init];
_layoutManager = [[CPLayoutManager alloc] init];
_textContainer = [[CPTextContainer alloc] init];
[_layoutManager addTextContainer:_textContainer];
[_textStorage addLayoutManager:_layoutManager];
}
return self;
}
- (void)setAttributedString:(CPAttributedString)aSting
{
[_textStorage replaceCharactersInRange:CPMakeRange(0, [_textStorage length])
withAttributedString:aSting];
[self setNeedsDisplay:YES];
}
- (void)drawRect:(CGRect)rect
{
var ctx = [[CPGraphicsContext currentContext] graphicsPort],
glyphRange = [_layoutManager glyphRangeForTextContainer:_textContainer],
usedRect = [_layoutManager usedRectForTextContainer:_textContainer],
bounds = [self bounds],
pos = CGPointMake((bounds.size.width - usedRect.size.width) / 2.0, (bounds.size.height - usedRect.size.height) / 2.0);
CGContextSaveGState(ctx);
CGContextSetFillColor(ctx, [CPColor whiteColor]);
CGContextFillRect(ctx, bounds);
CGContextRestoreGState(ctx);
[_layoutManager drawGlyphsForGlyphRange:glyphRange atPoint:pos];
}
@end
/*!
@ingroup appkit
@@ -132,8 +83,6 @@ var _availableTraits= [@"Normal", @"Italic", @"Bold", @"Bold Italic"],
int _currentColorButtonTag;
BOOL _setupDone;
int _fontChanges;
_CPFontPanelSampleView _sampleView;
}
@@ -187,8 +136,6 @@ var _availableTraits= [@"Normal", @"Italic", @"Bold", @"Bold Italic"],
/*! @ignore */
- (void)_setupToolbarView
{
var colorPanel = [CPColorPanel sharedColorPanel];
_toolbarView = [[CPView alloc] initWithFrame:CGRectMake(0, kBorderSpacing, CGRectGetWidth([self frame]), kToolbarHeight)];
[_toolbarView setAutoresizingMask:CPViewWidthSizable];
@@ -196,8 +143,6 @@ var _availableTraits= [@"Normal", @"Italic", @"Bold", @"Bold Italic"],
_textColorWell = [[CPColorWell alloc] initWithFrame:CGRectMake(10, 0, 25, 25)];
[_textColorWell setColor:_textColor];
[_toolbarView addSubview:_textColorWell];
[colorPanel setTarget:self];
[colorPanel setAction:@selector(changeColor:)];
}
- (void)_setupBrowser:(CPBrowser)aBrowser
@@ -425,10 +370,6 @@ var _availableTraits= [@"Normal", @"Italic", @"Bold", @"Bold Italic"],
if ([self currentTrait] != typefaceIndex)
[self setCurrentTrait:typefaceIndex ];
[_sampleView setAttributedString: [[CPAttributedString alloc] initWithString:[font familyName]
attributes:[CPDictionary dictionaryWithObjects:[font, [CPColor blackColor]]
forKeys:[CPFontAttributeName, CPForegroundColorAttributeName]]]];
_fontChanges = kNothingChanged;
}