diff --git a/AppKit/CPView.j b/AppKit/CPView.j index 1347f2e35..3659f0aa9 100644 --- a/AppKit/CPView.j +++ b/AppKit/CPView.j @@ -1474,6 +1474,24 @@ var CPViewHighDPIDrawingEnabled = YES; origin.y *= size.height / frameSize.height; } + var newScaleSize; + + if (size && size.width !== 0 && size.height !== 0 && frameSize) + newScaleSize = CGSizeMake(frameSize.width / size.width, frameSize.height / size.height); + else + newScaleSize = CGSizeMake(1.0, 1.0); + + // Only update and propagate if the scale factor has actually changed + if (!CGSizeEqualToSize(_scaleSize, newScaleSize)) + { + [self willChangeValueForKey:@"scaleSize"]; + _scaleSize = newScaleSize; + _isScaled = (_scaleSize.width !== 1.0 || _scaleSize.height !== 1.0); + [self didChangeValueForKey:@"scaleSize"]; + + [self _scaleSizeUnitSquareToSize:CGSizeMake(1.0, 1.0)]; + } + if (_layer) [_layer _owningViewBoundsChanged]; @@ -1487,7 +1505,6 @@ var CPViewHighDPIDrawingEnabled = YES; [self _updateTrackingAreasWithRecursion:YES]; } - /*! Notifies subviews that the superview changed size. @param aSize the size of the old superview @@ -2606,7 +2623,7 @@ setBoundsOrigin: */ - (void)_scaleSizeUnitSquareToSize:(CGSize)aSize { - _hierarchyScaleSize = CGSizeMakeCopy([_superview _hierarchyScaleSize]); + _hierarchyScaleSize = _superview ? CGSizeMakeCopy([_superview _hierarchyScaleSize]) : CGSizeMake(1.0, 1.0); if (_isScaled) {