Release date: 2017-07-11
Cappuccino 0.9.10 introduces CPTextView, CPViewAnimator, CGContextText, support of node as a narwhal engine and over 100 other changes and improvements.
Highlights in this release:
CPTextView in AppKit.CGContextText in AppKit.CPAnimationContext and CPViewAnimator in AppKit.CPNumber -integerValue and CPString -integerValue.CPObject +instancesImplementSelector:(SEL)aSelector.Bug fixes:
CPKeyedUnarchiver.CPNumber intValue did not return an integer.CPCache.CPURLRequest.CPObject +implementsSelector: did not work with proxies and KVO swizzled classes.gcc > 4.9.CPViewController -loadViewAsynchronously:.CPAnimationContext and CPViewAnimator.CPViewController -viewWill/DidAppear and CPViewController viewWill/didDisappear.CPTextView in AppKit.CGContextText in CoreGraphics.CPSegmentedControl.CPView.CPTabView loads the views asynchronously when possible.CPSetPlatformFeature function in CPCompatibility.CoreAnimation (‘CSS animations’).Bug fixes:
CPTextField in a CPTableView with a double click; focus was lost under some conditions.CPSearchField did not support CPMenuItem -setIndentationLevel:.CPTableViewHeader without a CPTableView.CPPopUpItem was always selected if selected binding value was set before content binding value.CPObjectController -setEntityName did not work.CPTableView viewBasedCib manual test was broken due to CPBox.SmartFoldersDemo.CPCollectionView content binding.CPViewController -isViewLoaded property was always set to NO in async mode.CPPredicateEditor.CPPredicateEditor.CPPredicateEditor predicate when the template has a CPFloatAttributeType.CPColorPanel always opened in main platform window.CPTextField didn’t optimize tracking areas management.CPColorPicker.CPCollectionView.CPView received multiple -viewDidHide/Unhide messages.CPPasteBoard dead code.CPApp on slower systems under Chrome 52.CPTableView was broken in an editing session.CPControl.CPView.CPView.CPAnimationContext and CPView animator.CPCache.wantsPeriodicFrameUpdates animator property.CPAnimationContext.CSSAnimation linting.CPTabViewNibTest.CPViewAnimator was not giving correct frame information.CPBox drawing artifacts when used in CPSeparator mode.-tableView:didDragTableColumn: was never sent.Bug fixes:
//@ sourceURL=... has now been replaced by //# sourceURL=... when compiling Objective-J code.Bug fixes:
XcodeCapp copyright year.XcodeCapp was broken under macOS Sierra.Bug fixes:
capp_env did not use the master version of Cappuccino.nib2cib support for CPButton -imageScaling.Bug fixes:
NSClasses in nib2cib verbose mode.nib2cib‘ed files different with jake release and jake deploy.nib2cib incorrect vs jake release.CPTabView when set through nib2cib.Bug fixes:
_mainDOMWindow did not actually return the main DOM window but the key DOM window.dumpGuiObject was called two times for the class CPScrollView.Bug fixes:
Release date : 2016-03-31
Cappuccino 0.9.9 introduces CPLocalization, XcodeCapp 4.0, CPTrackingArea, retina drawing support and over 250 other changes and improvements.
Highlights in this release:
CPUserNotification and CPUserNotificationCenter support.CPCache support.CPTrackingArea support.canvas2D.capp_env virtual environments support.Cucapp.CPAppearance and CPVisualEffectView support.CPTableView.CPCache has been added to Foundation.CPURLRequest.CPURLConnectionDelegate protocol.CPURLConnection +sendAsynchronousRequest:queue:completionHandler:.CPNotificationQueue.strings and cibs. The language to use is selected from the browser or from the Info.plist.CPArray -arrayByApplyingBlock:.unionOfObjects, distinctUnionOfObjects, unionOfArrays, distinctUnionOfArrays and distinctUnionOfSets.Bug Fixes:
CPArray initWithObjects:count: did not work on a native CPJavascriptArray when the argument count was different than the length of the provided array.CPDictionary -initWithObjectsAndKeys: and CPDictionary -initWithObjects:forKeys: were not compliant with Cocoa when duplicated keys were passed to the method.queue of the method CPNotificationCenter -addObserverForName:object:queue:usingBlock: was ignored. It now creates a new operation and adds it to the given queue if needed.withCredentials property is now set after the XMLHttpRequest has been opened.CPDateFormatter did not work with the symbols MM and LL for the month of December.CPObjectController -setValue:forKey: incorrectly used the key as the value.CPPlatformWindow -initWithWindow. This feature allows you to manipulate a CPPlatformWindow through the given CPWindow, which is easier than regular platform window manipulation.image-search-inset and image-cancel-inset have been added for CPSearchField.CPScrollViewDelegate has been added for CPScrollView.j.windowWillResize:toSize: for CPWindow.windowDidMiniaturize:, windowWillMiniaturize: and windowDidDeminiaturize: for CPWindow.CPAppKitDefined notification when the application is launched.CPProgressBarIndicator.baseWritingDirection to CPControl. This allows you to write from left to right or right to left.CPUserNotification and CPUserNotificationCenter.CPPlatform +closeAllPlatformWindows. This method is called when reloading or closing the Cappuccino application. The method closes every platform window opened in the application.applicationShouldTerminate and applicationShouldTerminateMessage for the CPApplicationDelegateProtocol.CPVisualEffectView and CPAppearance.CPTextField.DOMCanvas only if CPView -drawRect: or CPView -viewWillDraw are overridden, and do it lazily (on the first viewWillLayout).CPView viewWillLayout and CPView viewDidLayout.CPColor alternateSelectedControlColor and related CPColor fields can now be themed.CPRunLoop -performBlock:argument:order:modes:.CPTrackingArea.CPDatePicker now disallows dates outside of the specified minDate and maxDate.canvas2D. You can disable this feature globally using the method CPView +setAllowsHighDPIDrawing:.CPView -setNeedsLayout: and CPView -needsLayout have been added. This makes it possible to choose not to lay out a view when needed, whereas previously once a layout had been scheduled it would always occur.CPTableView -viewAtColumn:row:makeIfNecessary.Bug Fixes:
CPTableColumn’s binding documentation was not clear.CPSearchFields were not properly aligned when coming from a xib.CPSegmentedControl -widthForSegment: and CPSegmentedControl -frameForSegment: did not return the correct value when using CPSegmentedControl -sizeToFit. The selectedSegment variable is now correctly updated.CPView. This was due to handlers not being released.CPPlatformWindow did not close its main CPWindow.CPComboBoxes were not properly aligned when coming from a xib.CPTableView -reloadData caused an extra run loop perform.capp gen -t ThemeDescriptor was slightly non-standard compared to that of Aristo 1 and Aristo 2.CPTableView, clickedRow and clickedColumn did not behave like in Cocoa outside of the scope of a mouse event.CPView -scrollRectToVisible: did not behave like in Cocoa.CPSegmentedControl brought in via nib2cib was incorrect.keyWindow and mainWindow of the application were not updated when switching from a platform window to another one.CPPlatformWindow was not clipped; it was possible to scroll a platform window.CPPopover closed itself even on a click in another platform window.CPEvent -_initOtherEventWithType:location:modifierFlags:timestamp:windowNumber:context: did not save the windowNumber provided.willBecomeActive: and didBecomeActive: were called even if the application was already active. These notifications are now also sent when the application just finished launch.willBecomeActive:, didBecomeActive:, willResignActive:, didResignActive: were not sent when the application focus was lost or gained.nextValidKeyView calculated by Cappuccino in a CPScrollView did not behave as in Cocoa. It didn’t take the scroll position into consideration.CPTextField could not become first responder when not visible.CPTextField first responder resignation behavior for a non key window CPWindow.CPDatePicker did not respect the English format.CPSplitView when using a delegate.CPScrollView -documentVisibleRect did not return the expected result when the document view was scaled.CPButton -sizeToFit was broken when calling the method with a new title or a new image.AppKit unit-tests were not stand-alone.CPPredicate format.CPTableView contained a data view that contained an editable CPTextField.CPPopovers were blinking in Chrome and Opera.CPTabView did not accept the first mouse event when the CPTabView was in an unfocused window.CPRuleEditor when dragging the first row.CPToolTip did not work in an external CPWindow.CPTableView broken after the CPAppearance feature was added.CPAppearance and CPVisualEffectView.CPImage -size returned internal object ref.CPTabView improvements. The methods CPTabViewItem -tabViewItemWithViewController: and CPTabViewItem -setImage: have been added. New bindings options (CPContentBinding - CPSelectedIndexBinding - CPSelectionIndexesBinding) have been added to CPTabView.CPTabView -insertTabViewItem:atIndex:.CPPlatformWindow was blocked by the browser when opening (e.g. by a popup blocker).CPView -layoutSubviews and CPView -viewWillLayout.CPString -stringByReplacingCharactersInRange:.CPPlatformWindow.CPTextField became the first key responder.CPThemeAttribute. Speed improvements of up 20% when loading a cib.CPTabView didn’t not work.CPBundle +loadCibNamed:owner: was asynchronous instead of synchronous.CPTextField was wrong when the CPTextField became the first responder.CPString -charPositionOfString:withFont:forPoint:.CPPredicate were ignored.CPTabViewBindings.CPSplitView divider when having one view.CPTrackingArea.CPRadioButton cropped in the manual test Theme Kitchen Sink.CPPredicate’s predicateFormat with a CPNull value as right expression wasn’t working.CPArray -arrayByApplyingBlock:.CPDomDisplayServerSetStyleBackgroundSize to CPDOMDisplayServerSetStyleBackgroundSize.CPDOMDisplayServer.h.CPStepper class initializer methods returned an object of type id instead of CPStepper.CPTableView class has been refactored and optimized. The methods CPTableView -preparedViewAtColumn:row: and CPTableView -enumerateAvailableViewsUsingblock: have been added.CPDatePicker will now raise CPInvalidArgumentException if given an invalid date.CPSegmentedControl.CPPopover didn’t update its position when the frame of one of its superviews changed.CPTokenField was open, the enter key was not consumed by the menu but forwarded to the application.CPTextField in a CPTableView.(8c2f0ba) Optimization: runtime methods objj_msgSend, objj_msgSendSuper and objj_method are now faster. Arrays and dictionaries use more efficient code. This improves app speed by up to 20%.
New: ability to inline functions when compiling with the option -O2 or the compiler flag InlineMsgSend.
* (751e76b) New: include type signatures by default when compiling an Objective-J file. This can be disabled by removing the compiler flag IncludeTypeSignatures or compiling with the -T option.
* (751e76b) New: runtime methods method_copyReturnType, method_copyArgumentType and method_getNumberOfArguments.
* (4b81e0d) Some AppKit speed improvements through the use of the new objj_msgSend in some places including CPTableView and CPWindow.
Bug Fixes:
Bug Fixes:
nib2cib failed when having a custom formatter in a cell.nib2cib failed when having a CPTableView in a CPBox.CPObjectController didn’t get entityName and lazyFetching attributes from the xib/cib file.objj2objcskeleton. This tool converts an Objective-J files to a basic Objective-C file containing an interface representing the original file.-x (alternatively --xml) to objj. This option allows you to specify the output format of objj to be XML.capp_env has been added to Cappuccino. This tools allows you to create virtual environments for Cappuccino.-n option added to objj2objcskeleton. This option allows you to specify the name of the generated file.objj now has the key sourcePath instead of path.Bug Fixes:
jake. Jake now properly closes files when done with them.objj2objcskeleton did not transform Objective-J categories.--xml option for the objj command did not output every error in XML.XcodeCapp build failed.verifyThatAllExpectationsHaveBeenMetInOrder: has been added to OJMoq. This method allows you to check if certain registered methods are called in order.-x to stop the suite of tests when a test fails.jake install will update OJTest on your system.Bug Fixes:
OBJMoq and OJMockSpy worked incorrectly if set up multiple times with different arguments.CPRunLoop was not called at the end of every tests.backgroundColor, textColor and borderColor in generated XML.-simulateScrollWheelOnPoint:.jake install for Cucapp. The command will install Cucapp in narwhal and the gems required (Cucumber, Thin, Nokogiri, Launchy and JSON).cucapp. This command allows you to create a testing architecture in your Cappuccino application. The architecture provides a new command jake cucumber-test, creates a soft link to where Cucapp is installed and creates every file needed to create Ceucumber tests.watir-webdriver as support for the browser.WATIR_CHROME_DRIVER and WATIR_CHROME_SWITCHES to configure watir for Chrome.CPResponder+CuCapp.j and CuCapp+Record.j are now copied to the targeted folder when using the cucapp command.DOM events to the main document instead of sending events to the CPApp.CPControl value in test_application_steps.rb.BROWSER_SIZE_WIDTH and BROWSER_SIZE_HEIGHT to specify the size of the browser when testing.CAPP_INSTALL_DIR can be used to specify where Cucapp should be installed when using jake install.BROWSER_FULL_SCREEN can be set to have the browser in full screen when testing.Bug Fixes:
simulateScrollWheel: did not work in a CPScrollView.simulateScrollWheel: did not return a result.textFor: and objectValue did not return the string value of a CPPopUpButton.CPWindows of the application not all closed when the test was over.CPRunLoop was not called between every event simulated.Encumber. Drag and drop events were generated from the Cappuccino side. They are now generated from the Cucumber side instead.document used to dispatch the events generated by Cucapp could be null.cappuccino_mappings.rb.<AppKit/AppKit.j>. This could raise exceptions when testing a compiled application.CPView.The changes above summarize a few hundred of the most important changes in Cappuccino 0.9.9. You can review the other 250 or so changes in the 0.9.8…0.9.9 compare view.
Release date : 2015-03-29
Cappuccino 0.9.8 introduces multiline support for CPTextField, Cucapp, XcodeCapp 3.2 and over 300 other changes and improvements.
Highlights in this release:
@typdef support.CPTextField.CFError, CPURLErrors and CFError.CPControl -setControlSize:.@protocols in Foundation and AppKit.capp_lint and objj to XcodeCapp (now version 3.2).objj_msgSend.CPCoding for CPAttributedString.CPDate +dateByAddingTimeInterval:.CPNotificationCenter -addObserverName:object:queue:usingBlock:.CPDiacriticInsensitiveSearch support in CPString for the method -(CPRange)rangeOfString:options:range:. Added support for strip variants of ‘E’ ‘I’ ‘O’ ‘U’.Bug Fixes:
CPDateFormatter -_dateWithTimeZone: when timeZone is null.CPDateFormatter‘s relativeDateFormating didn’t work in January and was inaccurate for some time intervals around daylight saving time changes.CPNumber +numberWithBool: broke CPComparisonPredicate.CPAttributedString -isEqual: true despite attribute differences.CPDateFormatter didn’t work for non-“en” locales.CPUserDefault -setFloat:forKey: used @selector(aValue) instead of @selector(floatValue).encodeValueOfObjCType has been renamed to encodeValueOfObjJType in CPCoder.CPURLRequest and CPURLConnection:
withCredentials has been moved from CPURLConnection to CPURLRequest.originalRequest and currentRequest have been added to CPURLConnection.CPURLRequest.CPOperation marked as cancelled could not be restarted.CPDate did not raise warnings when the arguments were not floats or ints.CPTableViewDelegate and CPTableViewDataSource.CPAlertDelegate.CPCollectionViewDelegate.CPApplicationDelegate.CPOutlineViewDelegate and CPOutlineViewDataSource.CPTabViewDelegate.CPToolbarDelegate.CPPopoverDelegate.CPSplitViewDelegate.CPAnimationDelegate.CPSoundDelegate.CPImageDelegate.CPMenuDelegate.CPComboDelegate.CPRuleEditorDelegate.CPTokenFieldDelegate.CPWindowDelegate.CPControlTextEditingDelegate and CPTextFieldDelegate.CPBrowserDelegate.CPComboBoxDataSource.CPLevelIndicator behavior.CPTheme state definitions.CPDatePicker now reacts correctly to clicks on the arrow buttons with Cmd / ctrl / alt depressed.CPTableView -tableView:willRemoveView:forTableColumn:row.CPOutlineView -outlineView:willRemoveView:forTableColumn:item:.CPColor +checkerBoardColor for debug use.CPThemeStateFirstResponder for CPView.CPThemeStateKeyWindow for CPView.CPDatePicker.documentVisibleRect in CPClipView and CPScrollView.CPEvent scrollingDeltaX, scrollingDeltaY and hasPreciseScrollingDeltas.CPControl -setControlSize:.nib2cib-adjustment-frame.-(void)bind:toObject:withKeyPath:options: now checks if another exclusive binding exists.+(void)_reverseSetValueFromExclusiveBinderForObject: in CPBinder to send the value back to the bound object when you don’t know the original binding name.CPTextField.CPDatePicker now has a focus ring when editing.CPWindow -setContentView: now checks that the new view is not the same as the existing content view.Bug Fixes:
CPDatePicker textual issues.CPDateFormatter -getObjectValue:forString:errorDescription: with nil errorDescription.CPDateFormatter -stringFromDate: did not return a default date.CPDatePicker.CPDatePicker) in CPPredicateEditor.CPTableView with variable row height.objectController.selection.keyPath and the objectController selection changed.CPTabView did not update its tab’s labels when laid out.CPRoundRectBezelStyle gave a CPNull ThemeState.CPTextField.CPPopover not closing in some browsers.CPTableView -selectionIndexesForProposedSelection:
CPOutlineView.aDOMEvent.returnValue.CPPopover transitionend not correctly called in random cases.CPPopover.CPToolTip added to CPWindow wrong.CPToolTip still shown when closing a window asynchronously.CPPopover did not update its frame after setContentSize:.CPMenu enabled state was not visually updated upon change of a bound value.CPPopover -popverWillShow: was called too early.CPPopover -updateFrameWithSize: always assumed the popover was open.CPTooltip remaining attached to a closed CPWindow.CPSegmentedControl.contentInset theme value read two times in CPToolBar.CPDatePicker stepper incorrectly enabled after decode.CALayer when running non-DOM platform.CPTableView.CPPopover for the first time.CPDatePicker firstResponder issue.CPComboBox doesn’t work in modal.CPTableView cell when editing another cell.CPTextField didn’t update its style while editing.CPTokenField erased by CPTextField.CPPanel and CPPopover didn’t close when hitting escape.CPDatePicker value became wrong after a stepper was clicked.CPPanel with escape, the delegates were not called.CPTextField -setTextColor: did not change the color of the placeholder.popoverWillShow: called when the popover was already open.stringValue was used instead of intValue in CPDatePicker.CPPopover _closeOnBlur had accessors.CPanel or a CPPopover broke the key chain event.CPCollectionView height was too low.CPPopover didn’t work as in Cocoa.CPPopover didn’t handle semi-transient behavior.CPTextField -setTextFieldBackgroundColor: had not effect.CPDatePicker did not use days, months, year when used within a CPPredicateEditor.CPTextField.CPPopover not showing in correct platform window.CPTextField bindings delete data in case of multiple selection after tabbing out with no editing.CPPopover animation issues.CPRuleEditor/CPPredicateEditor alignments.CPOutlineView and corrupted itemInfos dictionary.CPTextField.CPTextField is usable in a CPPlatformWindow.popoverDidShow: not called with a none animated CPPopover.activateIgnoringOtherApps:shouldIgnoreOtherApps did not call _didBecomeActive in CPApplication.collectionViewDidChangeSelection: delegate method.CPApplication in _didBecomeActive.viewDidMoveToSuperview, viewDidMoveToWindow, viewWillMoveToSuperview and viewWillMoveToWindow not called as in Cocoa.CPNotification.CPOutlineView when reloading and asssigning an item to another parent.CPButtonBar were never removed from the CPButtonBar
CPTooltip content alignement was mistakenly set to be justified.CPDatePicker.CPDatePicker didn’t work in a CPTableView.CPPlatformString +sizeWithFont:inWidth sometimes calculated a width 1 px too narrow.CPTextField triggered the browser’s page back button.CPButton -setHidden: in a button bar was not working.-(void)unbindAllForObject: of the class CPBinder did not work.CPImageView due to the CPImageDidLoadNotification.CPPopUpButton, CPRadio and CPSegmentedControl when using bindings.CPDatePicker incorrectly sent an action to its target when using the method -(void)setObjectValue: or -(void)setDateValue:.CPDatePicker did not behave a a CPTextField in a CPTableView with regards to row selection.CPTableView, several _CPTableDrawViews were added to the view.CPPopover’s -popoverShouldClose: delegate method was not called in transient or semi-transient mode.CPPopover windows now trap the next mouse event automatically if the popover is still visible after a performClose:.CPDatePicker when dragging.Key Value Observing generated new and old values in the change dictionary regardless of the options provided when adding the observer. Now it respects the options passed in the method addObserver:forKeyPath:options:context:. This can result in speed improvements of up to 200%.CPTableView had its selection style set to CPTableViewSelectionHighlightStyleNone, two clicks were required to select a control in a row.CPTableView enabled the bezeled state of a non-selectable CPTextField when right clicked.CPTextField.CPWindow the first responder would not reset.CPComboBox would not move in tandem with its control’s window.CPComboBox APIs. You can now set the font, alignment, intercellSpacing and itemHeight of the CPComboBox without listDelegate.content-inset of a CPComboBox has been changed for better alignment.CPTextField didn’t take the content-inset into account.CPPlatformWindows, the new targeted window didn’t get the first CPEvent which instead went to the previous window.CPPanel could not be opened in a CPPlatformWindow other than the main one.CPTextField even if a control size is set.CPWindow wouldn’t work.CPMenu with items and then opening a CPMenu without any items would cause a crash.CPDatePicker no longer holds the character CPCarriageReturnCharacter.CPRuleEditor above the first line of the rule editor.CPPopover would no longer move together with the control it was attached to.z-index of the main div of the Cappuccino is now set to 0 instead of -1000.CPTableView, CPScrollView, CPClipeView, CPComboBox, CPTextField and CPView.intercellSpacing would crash CPComboBox. The delegate method comboBoxWillDismiss: did not work.CPPredicateEditor were blurred.CPCheckBox was incorrectly calculated when using the constructor checkBoxWithTitle:.CPStepper class method returned id instead of CPStepper type.CPDOMDisplayServerSetStyleBackgroundSize
CPDatePicker did not gray out dates outside of minDate and maxDate.@typedef has been added to Objective-J. This keyword allows you to define new types for your application.CFError has been added to the framework. CPError is now toll-free bridged with CFError. This mirrors the implementation in Cocoa.CPURLErrors and CFNetworkErrors have been added to the framework. They respect the same error codes as in Cocoa.objj_msgSend.CFHTTPRequest now accepts the withCredentials property.CPURLRequest now accepts withCredentials.Bug Fixes:
CPURLConnection in IE11.Objective-J now gives an understandable error when the compiler cannot find a protocol in a class declaration.@ref did not work correctly if the variable was an ivar.capp_lint in XcodeCapp.Bug Fixes:
nib2cib support for the standard color panel toolbar item.Bug Fixes:
CPSegementedControl causes an error in nib2cib.nib2cib of CPDatePicker would not convert enabled state.nib2cib of segmented control would not convert enabled state.bootstrap.sh now uses SSL.Doxygen theme refresh.CFPropertyList unit tests have been added.AppKit tests have been added.capp_lint is installed with jake install.-m, -I, -h added to objj to compile several files.CommonJS build phase by setting the system environement variable IGNORE_ENV_COMMONJS.--theme option for capp tool.Objective-C VIM highlighting and the official JavaScript VIM highlighting.doxygen have been redesigned. The command jake docset has been added.Bug Fixes:
homebrew.jakefile.capp_lint didn’t handle protocol.fontinfo.bootstrap.sh didn’t handle specific OpenJDK Runtime Environment version. bootstrap.sh could not filter the OpenJDK version key out correctly.jake did not work in the Cappuccino directory for non-Mac OS X systems.Jakefile template, the configuration build environment parameter could have multiple values. Now this variable is correctly set by detecting the build environment.rhino.+setUp and +tearDown methods.OJTest.Bug Fixes:
OJTest.The changes above summarise a few hundred of the most important changes in Cappuccino 0.9.8. You can review the other 700 or so changes in the 0.9.7…0.9.8 compare view.
Release date: 2013-11-28
Cappuccino 0.9.7 introduces Aristo 2, Objective-J 2.0 and over 500 other changes and improvements.
Highlights in this release:
CPView ('zoom in’ or out within a view and all its subviews).CPTableView. While Cappuccino already supported view based table views, this new API matches Cocoa’s and allows more convenient table customisation in Interface Builder and easier use of bindings (such as when binding a custom table cell view to a key of the row data).CPDatePicker.CPLocale.- CPObject performSelector:withObject:afterDelay:.CPError.CPByteCountFormatter.- CPURLConnection sendSynchronousRequest: return nil if CPHTTPRequest failed.CPNotFound to an index set.CPError class.- CPArray objectsAtIndexes: when the array is a native array (up to 6X).- CPMutableArray removeObjectIdenticalTo: when the array is a native array (up to 10X).- CPObject performSelector:withObject:afterDelay: and related methods.- CPArray enumerateObjectsWithOptions:usingBlock:.CFBundle.identifier, CFBundle.bundleWithIdentifier, - CPBundle -bundleWithIdentifier.+ CPException raise:format:.- CPNumberFormatter localizedStringFromNumber:numberStyle:.setValue:forKey: now automatically unwraps CPValue.objj_getClassList().OBJJ_PROGRESS_CALLBACK calls, allowing smoother progress bars.- CPDictionary description. This makes it easier to find an item in a large dictionary.CPURL and CFURL.Bug Fixes:
CPDescriptionOfObject when a JSON object property has a null value.CPPredicate TRUEPREDICATE didn’t work.CPNumberFormatter.removeObjectsInArray:.mutableArrayValueForKey: … removeObjectsInArray should remove all instances of the found objects.CPDecimalCompare problems when comparing to zero.CPDecimalRound should return a result in all cases.CPString compare: method against nil and CPNull.CPNull.CPMutableArray had broken removeObject:.- CPMutableArray removeObjectIdenticalTo: did not remove all instances, was documented incorrectly.CPAttributedString problems with empty strings and out of range indexes.- CPDictionary setObject:forKey: will log deprecated warning when passing nil object or key.CPDecimal to handle decimal numbers with leading zeros.- CPUndoManager isUndoRegistrationEnabled.CPNumberFormatter formatted @“” wrong.CPString stringByTrimmingCharactersInSet.CPArray did not allow binding to @count.CFBundle.prototype.bundleURL() did not return an absolute URL.- CPBundle bundleWithIdentifier did not create CPBundle when necessary.[CPExpression isEqual:nil] and [CPPredicate isEqual:nil].CGRectFromString made bad CGSizeFromString call.CPArray/CPDictionary description if a value was the window object.CPArray/CPDictionary description containing self referential JS object.CPNumber vs nil or CPNull didn’t throw an exception.CPTimer number of seconds interval set to 0.1 if equal to 0.0, like in Cocoa.CPNumberFormatter minimum and maximum wrong encoding when set to nil.CPNumber numberWithBool: not returning a number.- CPCollectionView draggingViewForItemsAtIndexes:withEvent:offset:.CPTableView.CPTableView with Lion’s view-based API.CPThemeStateEditable in CPTextField setEditable:.- CPCib initWithContentsOfURL: return nil if the returned data is nil.scrollRectToVisible when CPTokenField becomes first responder.CPBox themable.CPLevelIndicator themable.CPSplitView themable.CPBrowser themable.CPCursor will now look in the theme to get system cursors.CPTokenField menu per token support (tokenField:menuForRepresentedObject:).CPGradient initWithStartingColor:endingColor:.CPShadow mutable (e.g. setShadowColor:).- CPGradient drawInBezierPath:angle:.- CPShadow set.value and isIndeterminate binding support for CPProgressIndicator.+ CPBezierPath bezierPathWithRoundedRect:xRadius:yRadius:.CPMenuItem.selectAll: and deselectAll:.selectedValue, selectedTag, selectedIndex, enabled and hidden.shouldReorderColumn delegate method for CPTableView._CPStateMarker, instead of CPString for selection markers.CPSegmentedControl segment selection bindings support.CGContextSetLineDash.- CPBezierPath setLineDash: and getLineDash:.- CPDocumentController documentForWindow and hasEditedDocuments.CPDatePicker.CPLocale.CPTokenField sends focus and blur notifications.- CPColor hueComponent, saturationComponent and brightnessComponent.CPPasteBoard setString:forType: to catch strange bugs earlier.CGContextDrawRadialGradient support.CGPathContainsPoint.CPPopover theamability.- CPTextField deleteForward:.shouldExpand/Collapse delegate for CPOutlineView.CPView (scaleUnitSquareToSize and setScaleSize).selectionIndexesForProposedSelection in CPOutlineView.userInfo for CPTextDidEndEditingNotification.CPTableView drop view themable.CGContext: render any arbitrary drawing to a pattern context and use that as a fill or stroke pattern.CPAlert custom didEnd selector or block.Bug Fixes:
CPCollectionView dragging: bug where the dragging view was created from content instead of selection.CPTableView auto-save columns.CPFlashView minor bugs.CPArrayController selection binding failure in retrieving initial selection values.CPBrowser.scrollRectToVisible in CPView.CPCollectionView when the collection view is a drop destination but not a source.CPWindow.CPStepper.CPMenu.CPBox in Chrome.CPBox with CPBezelBorder had unexpected inner shadow.- CPWindow setRepresentedFilename: set as a string, not a CPURL.CPArrayController add: adding wrong object, insert: not inserting in right position when there’s a selection.CPWebView scroll-wheel.isClockwise property to CGPath.CGContextCanvas and CGPath.CPColorWithImages and CPImageInBundle.CGContext fixes/enhancements.CPToolbar calls incorrect notification method.CPView removeFromSuperview performance.CPClipView could result in duplicate subviews.view(Will/Did)MoveToSuperview:.CGPathEqualToPath did not compare all subpath types.CPWebScriptObject callWebScriptMethod:withArguments:.mouseEntered and mouseExited was mixed up for custom views.resizeWithOldSuperviewSize not working like in Cocoa.CPTextField when using bindings.CPCollectionView threw exception.resizeWithOldSuperviewSize did not maintain size ratio.CPTextFieldInputOwner set.orderOut: was not called for a popover, it would not detach from its parent.CPThemeStateSelectedTableDataView.-tableView:dataViewForTableColumn:row: and -outlineView:dataViewForTableColumn:item:
CPTableViewSelectionHighlightStyleNone had white text.CPDocumentController missing method currentDocument.setAnimates: on a popover would only be applied after closing/reopening the popover._CPImageAndTextView.j.CPMenuBar theming.CPNullPlaceholderBindingOption in binding was setting the actual value of a text field instead of just its placeholder.CPMenu ghosts after many right clicks.CPColor colorWithHue:saturation:brightness: were in degrees and percent rather than factors.- CPColor hsbComponents range.CPColor colorWithHue:saturation:brightness: parameters not clamped.CPColor colorWithHue:saturation:brightness: returning undefined.CPComboBox popupList should close if mouse is clicked outside of the control.CPPopover in a secondary platform window opened in the main window.CPAlert always shows on main platform window.[pasteboard declareTypes:...owner:nil] would emit a warning.CPBezierPath.CPGradient.CGPath wrong when creating an arc.CPCollectionView range bounds exception if shift key was held for first selection.removeTableColumn: did not remove column from tableColumns array.CPWindows contentView “Autoresizes Subviews” set in Cib not honoured.CPDocument API “firstEligibleExistingWindowController”.CPTextField would not actually put the string value in the Cappuccino pasteboard.- CPView nextValidKeyView infinite loop.CPWindow subclasses breaking flatten.-CPImage initWithContentsOfFile:nil created broken image.CPImageView‘s _DOMImageElement was not created during initWithCoder.viewDidHide and viewDidUnhide were not called when a view was being added to/removed from hidden ancestor.CPTextField would not become/resign key responder when first responder and unhidden/hidden.setObjectValue.CPTableView.CGContextAddArc would fail if the path was empty.- CPTextField copy: only worked for editable text fields.CPTextField deleteBackward: left 1 character.CPMenuItem could still have a selected background.- CPTextField deleteBackward: required a selection.lineBreakMode set to CPLineBreakByTruncating* was trimming consecutive white spaces.CPTableView.CPComboBox not reacting correctly when its menu scroll bar was clicked.shouldSelectItem in CPOutlineView.shouldSelectTableColumn not called by CPTableView and CPOutlineView.CPByteCountFormatter, a complete implementation of NSByteCountFormatter.CPView identifier property.NSTableCellView nib to plist.CPCheckBox and CPRadio to have themed height and adjusts it correctly.awakeFromNib. Having class specific code in the class makes more sense, and this will make it easier to add more class specific transformations.CPDateFormatter and CPTimeZone support.Bug Fixes:
NSMenu autoEnablesItems was not supported.CPScroller orientation import.CPTabView decoding causing tab selection errors.CPNumberFormatter.CPComboBox enabled state.CPTextField enabled state.Bug Fixes:
The changes above summarise a few hundred of the most important changes in Cappuccino 0.9.7. You can review the other 1000 or so changes in the 0.9.6…0.9.7 compare view.
Release date: 2013-01-20
Everything that was new in RC1 and RC2 and the following:
describe format of CPDictionary and CPArray to be more like literals. E.g. a dictionary is expressed as @{key1: value1}, an array like @[value2, value2], a string like @“CPNumberFormatterPercentStyle in CPNumberFormatter.CPPointInRect. This improves source code compatibility with Cocoa when replacing NS with CP.CPHTTPURLResponse allHeaderFields. When a CPURLConnection response is of the CPHTTPURLResponse type, the raw HTTP headers can now be retrieved through the allHeaderFields message.CPIndexSet indexSetWithIndex:. Without this check, an index set could be initialised with NaN which would later lead to an infinite loop when enumerating the index set. This error makes the error early and explicit.Bug Fixes:
setTimeout(f) did not work for some JS libraries such as PDF.js when running in a Cappuccino context.CPURL was not encoding self.baseURL and self.string.CPTabView optimisation.CPToolbar validation.CPSegmentedButton setEnabled:forSegment:.CPTableView.- CPTableView clickedColumn.CPTableColumn value binding option. With this option an array controller driven table view can be sorted by clicking the table column headers without manually setting up sort descriptor prototypes.CPColor colorUsingColorSpaceName:.+ CPFont systemFontSizeForControlSize:.- CPBox setTitleFont: support.- CPBezierPath appendBezierPathWithArcFromPoint:toPoint:radius: and CGPathAddArcToPoint.CGContextIsPathEmpty for non-canvas based platforms.- CPBezierPath controlPointBounds and CGPathGetBoundingBox.- CPBezierPath addClip and setClip. This enables e.g. a CPGradient to be drawn clipped by an arbitrary bezier path.CPGraphicsContext saveGraphicsState and restoreGraphicsState.CPString but if a date or a number is passed this will now work without a crash.- CPBox titleView.popoverDidShow: timing.CPTokenField token spacing.CPStepper bindings support for CPValueBinding, CPMinValueBinding, CPMaxValueBinding. Placehoders defaults are minValue, minValue, maxValue.CPThemeStateEditable for text fields.CPBrowserStyleProperty for getting browser specific CSS and JS names.Bug Fixes:
CPBox not drawing properly as the box moved.CPStepper graphics.
CPStepper looked larger than the regular stepper due to the outline becoming white.CPScrollView was calculated incorrectly.CPOutlineView delegate that item did collapse after reloading them.CPPredicateEditor.selectionIndexes. CPTableView‘s selectionIndexes binding shouldn’t be set automatically unless the content binding was also set automatically (through a table column binding). Assume that manual content binding implies a desire to manually bind selection indexes (and sort descriptors) as well.CPAlerts above popovers.Error: Permission denied to access property '_childAppIsStarting' in Firefox. This error would occur when running an app in an iframe which could not access its parent frame.- CPWindow contentRectForFrameRect: and frameRectForContentRect: for borderless windows with toolbars.autoresizesSubviews to NO for tab views by default. In Cocoa this doesn’t make any difference because NSTabView ignores this setting. This fix makes it so that Cappuccino’s tab view also works with autoresizesSubviews off.canBecomeKeyWindow response for auxiliary windows. Without this fix Cappuccino always returned YES for canBecomeKeyWindow for every window. But in Cocoa, only “standard” windows with a title bar and/or resizing return YES. With this fix Cappuccino better matches Cocoa’s behaviour.popoverDidShow in Firefox.[CPApp windows] contained nil.CPAlert sheet crash.CPAlert was a CPView.CPSegmentedControl not reducing its size when removing segments.- CPWindow setInitialFirstResponder now works reliably and follows Cocoa behavior in that if -makeFirstResponder is called with something other than the window before the window is first shown, it will override the initial first responder.- CPWindow autorecalculatesKeyViewLoop now behaves per Cocoa, it only has an effect when views are added or removed.CPTextField will no longer lose focus unnecessarily.- CPWindow canBecomeKeyWindow and -canBecomeMainWindow to match Cocoa behavior (and misleading documentation).CPButton. For examples CPPopUpButton can get another height then CPButton.Bug Fixes:
NSStepper to CPStepper.CPColorWell, CPComboBox, CPPopUpButton and CPSegmentedControl.nib2cib support for NSMatrix based radio groups. Without this fix, a matrix with a target-action pair would crash when the cib was loaded due to the matrix having been replaced with a CPView (which cannot take a target-action pair). Now if the matrix is for radio buttons, the action connection for the matrix is made to the CPRadioGroup instead and works as expected when radio selections are made.CAPP_NOSUDO=1.--quiet and --verbose bootstrap.sh options.Bug Fixes:
jake test runs.d1c9786, acd98b5, d0fa16b, 63bad1d, bf3a152, 48e797a, e4a6d85, 2f428fa, 2e7afc3, df28a46, ad5b9b6, a7b40a5, d4b0e2a, 117d946, c8a37b4, 02a885e, 59ad849, 8a59235, 90d52a8, 95246d7, d718c29, ce167cf, 1edcc51, e46cd14, c2da96e, b629b88, 084e0a3, a973be2, 6c265fe, c896101, 8a39561, 6bc8ad0, 632e226, 2236e7d, 9d4e816, da01d3a, 282e966, 2611e86, f5bb8ab, 947b116, 8ec1325, e2f19c3, 7b2464a, 1ebdd8e, d82da5d, a202cfb, 2a11bdb, 9705f1f, 787dd10, dcdcd8e, 0d31f79, d072f17, 3e65178, f1a171a, 002c49b, 964f3fe, 45ad537, a9be167, c81b8fb, 32eafb7, 50031db, 19f668f, 6284f29, 40ab25d, 29fe631, 295eedc, 110bd20, 1f8306d, 6e3f822, 18f8294, 71f502a, 23817a0, 95511b5, 7fdc3ab, 0e82504, 4021eae, 7de4fe7, c9434ec, 2b1b1ea, 848c893, af2e034
Release date: 2012-08-22
CFURL.createCopyDeletingLastPathComponent.CPURL URLByDeletingLastPathComponent.CFData.bytes() and CFData.base64().CPData +dataWithBytes and CPData +dataWithBase64:.CPString pathWithComponents:, stringByAppendingPathComponent:, and stringByAppendingPathExtension:.CPArray and CPDictionary descriptions now attempt to describe JavaScript member objects in more detail than just [Object object].CPMutableArray sortUsingDescriptors: optimised.CPArray, CPString.CPArray indexesOfObjectPassingTest:.CPIndexSet indexPassingTest:, indexesPassingTest:, indexWithOptions:passingTest:, indexesWithOptions:passingTest:, indexInRange:options:passingTest: and indexesInRange:options:passingTest:.CPGeometry using CGGeometry since they are equivalent in Objective-J.CPDictionary keysOfEntriesPassingTest:, keysOfEntriesWithOptions:passingTest: and keysSortedByValueUsingComparator:.CPDictionary enumerateKeysAndObjectsUsingBlock:.CGInsetMakeInvertedCopy.CPUndoManager posts CPUndoManagerDidCloseUndoGroupNotification.CFData base64 encoding optimised.CPNumberFormatter setMinimumFractionDigits: support.CPNumberFormatter currency style.CPNumberFormatter generatesDecimalNumbers support, enabled by default.Bug Fixes:
CPURLRequest created without using the designated initialiser wouldn’t work.JAVA_OPTS support when running Cappuccino utilities through rhino. This generally improves configurability for special cases, and specifically enables a work around for the failed to map segment from shared object error on some platforms.CPDecimalNumber result for 220000/220. In general divisions where the quotient had fewer digits than the dividend when disregarding exponent would fail.LOG global function.CPString path methods should collect // into /./ when running in CommonJS.CPDateReferenceDate should be 'Jan 1 2001’ instead of ‘Feb 1 2001’CPDate distantPast and distantFuture with Cocoa.CPCopyRange function.willChange… / didChange….CPNumberFormatter grouping was wrong.CPNumberFormatter grouping separator support. perMillSymbol was incorrectly used as the grouping separator.CPSet used identity checks, not Objective-J equality checks.CPArray should throw an exception when observer is added/removed.CPSet removeObject: for an object not a member is not an error.CPNumberFormatter to operate on most CPNumber types. This only worked by accident before.CPNumberFormatter maximumFractionalDigits default.CPNumberFormatter maximum fraction digits property name.CPNumberFormatter CPCoding support and fix rounding default.CPDecimal would not accept strings such as ‘.003’ or ‘-.003’ (no integer component).CPPredicateEditor improvements. Bindings compatibility.+ (BOOL)automaticallyNotifiesObserversOf<Key> support.showRelativeToRect: is called while a popover is closing, it is ignored.showRelativeToRect: is called when the popover is already open the existing popover is repositioned.CGInsetUnion and CGInsetDifference.CPImageView CPValueURLBinding and CPValuePathBinding read-only support.CPImageView CPImageScaleProportionallyUpOrDown.CPSplitView adjustSubviews.CPView tooltips.CPWindow sheet delegate messages.CPImage -initWithData:.CPImageView support for CPDataBinding.CPTableView themed attribute for round rect selection of rows. Selections in the tableview can now have round corners. The default is a regular rect.CPTableView content binding (especially useful for Lion style view-based tables.)CPImage data. If the image was not initialised using data but the browser supports canvas, data is generated.CPToolbarDisplayModeIconOnly support.CPTableView you always wanted in your toolbar.CPTokenField delegate method tokenField:representedObjectForEditingString:. This improves support for represented objects and is used both when an autocompletion suggestion is used or when the name of a token is typed in by hand.textDidChange: which better meets the expectations of Cappuccino programmers. Eliminated custom non-Cappuccino key press handler.CPTokenField keyUp: support.CPTextField superclass and subclassing support by properly using interpretKeyEvents: like CPTextField.defaultCompletionDelay.insertText: to be somewhat overridden. If insertText: is overridden to do nothing, nothing in inserted.CPArrayController removeObjectAtArrangedObjectIndex:.CPTokenField.CPButton types, highlightsBy and showsStateBy support, including for subclasses (CPCheckBox and CPRadio) when appropriate. All button types now supported:
CPPushOnPushOffButtonCPToggleButtonCPMomentaryChangeButtonCPOnOffButtonCPMomentaryPushInButtonCPMomentaryPushButtonCPMomentaryLightCPPopUpButton bindings support.CPToolbar autovalidate support.CPSplitViewWillResizeSubviewsNotification notification userInfo now contains the divider index.CPComboBox.CPTextField and all subclasses, and improved drawing of disabled contents.CPColorWell with Aristo look. Highlighted and disabled visuals.CPColorWell‘s mouse handling and highlighting. Switch to setNeedsLayout based drawing.CGRectInsetByInset.nib2cib.) There is no need to recompile if the system font is changed in Info.plist.CPControl now archives its formatter. This allows you to use a formatter with a table column’s data view.CPFontManager setSelectedFont:isMultiple: and other basic properties.CPFontManager convertFont:, convertFont:toHaveTrait: and addFontTrait:.CPFontManager weightOfFont: and traitsOfFont:.CPFontManager convertFont:toFace:.CPTableView column moves through CPTableViewColumnDidMoveNotification and the delegate.+CPEvent modifierFlags.CPEvent description.CPViewController isViewLoaded.CPTokenField, CPView, CPTableColumn and CPWindow documentation.Bug Fixes:
CPRuleEditor was not compatible with Internet Explorer 7, 8 or 9.CPRuleEditor would not scroll properly in a scroll view as more rules were added.CPTabView item selection could not be fully disabled through the delegate.CPPopUpButton then dragging to an item and releasing the mouse button did not select the item.CPMenu would not close after certain mouse interactions.CPPopover close consulted the delegate’s popoverShouldClose.@min, @max and @sum operators.valueForUndefinedKey: value properly for KVC.CPSet valueForKeyPath: returned incorrect results in some cases.CPTextField did not send CPControlTextDidEndEditingNotification if editing had not started, contrary to Cocoa.CPTextField insertion point when text field becomes the first responder.CPTextField cursor to jump to the end after every character typed when continuouslyUpdatesValue was on.CPEvent timeStamp did not return seconds since startup.CPScroller decoding bugs which would lead to errors such as CPInvalidArgumentException: CPScroller does not contain theme attribute 'scroller-width'.CPEvents from periodic events.CPInvalidArgumentException: - [_CPMenuBarWindow scrollByDelta:] unrecognized selector sent to instance when attempting to scroll in a menu.CPPredicateEditor Display value must be… exception in recent revisions.CPOutlineView setMenu: was not effective.orderOut: message, unlike Cocoa.CPProgressIndicator encoder wasted space and caused errors. The errors would cause exceptions such as Not allowed to load local resource: file:///<some local path from the machine that ran nib2cib> when loading cib driven app through a web server.CPPopover typo (setBehaviour: -> setBehavior:).CPTextField delegate method control:didFailToFormatString:errorDescription: did not actually send a string.CPTableView bug where dragged rows didn’t have their bindings applied.CPPopover closes implicitly, popoverShouldClose delegate method should be checked.CGSizeFromString and CGPointFromString would try to parse only integer values.CPDocumentController instantiation.window.status access when not running in the browser by CPApplication.CPOutlineView disclosure control width was hardcoded.CPMenu highlights wouldn’t always disappear.CPTableView selectedColumn.CPButton’s “dim image when disabled” should be on by default.CPTokenField autocomplete scrolling.CPTokenField autocomplete menu could show up underneath other windows.CPTokenField keyDown: handling. Previous nonstand implementation interacted poorly with Cappuccino’s event handling and subclasses.CPTokenField object value for half finished tokens. Try to convert to a representedObject before responding to objectValue.CPTokenField nil representedObjectForEditingString: handling. If tokenField: representedObjectForEditingString: returns nil, act the same as if the delegate method didn’t exist.CPTokenField token layout when tokens are selected.CPTokenField was active.CPToolbar delegate method toolbarDefaultItemIdentifiers: is optional. This fix makes it possible for a cib-defined toolbar to have a delegate set without defining toolbarDefaultItemIdentifiers:. You might be implementing other delegate methods.CPPredicateEditor CPTextField action bug.viewDidLoad.CPWindowController setViewControllerContainerView: and fix CPWindowController setViewControllerView:.CPColorWell bordered state. This is more consistent with the rest of Cappuccino and prepares for theming support.CPColorPanel errors.CPGeometry moved to Foundation.CPRuleEditor fixes regarding format strings and regexes.[CPPlatformWindow _willPropagateCurrentDOMEvent] unrecognized selector sent to instance error if an event was sent in a non DOM environment.CPTableView.CPArrayController driven table could show an empty selection after removeObject:.CPPopUpButton item. When the selected item of a CPPopUpButton is removed the first item should become selected.CPCib instantiateCibWithOwner:topLevelObjects: did not allow a nil owner.CPTextField in some browsers, especially Firefox and newer versions of Chrome.CPCib initWithContentsOfURL: returns nil if the requested data is nil.CPTokenFields would sometimes unexpectedly steal first responder status. If an autocomplete choice was made followed by immediately focusing on another control, the token field would reclaim first responder status a moment later.CPTokenField scrolling away from selected token. Sometimes clicking a token would cause the token field to scroll to some other spot.CPEvent data1 and data2 weren’t stored right. They were stored in globals instead of ivars, allowing only one data1 or data2 in the whole app.CPArrayController wrong indexes would become selected when removing arranged objects.CPWindowController setViewController: was incorrectly causing view loading.@font-face syntax, Cappuccino would calculate the wrong sizes for strings throughout.CPControl formatter to format nil.CPDateFormatter (although actual formatting not yet implemented in Cappuccino.)CPProgressIndicator size.NSCell, useful for radio groups.Bug Fixes:
NSButton now allows buttons that are not fixed height, if the theme allows it.imageDimsWhenDisabled default.CPTableView.NSClipView obey the Draw Background checkbox in IBcapp ThemeDescriptor template with better tasks, documentation and structure.dump_theme tool to inspect themes.capp_lint added to Tools.narwhaljs.org in bootstrap.sh - it doesn’t exist anymore.xcode-select in bootstrap.sh.capp_lint check for space inside parens and dependent statement on same lineBug Fixes:
objcc --includeTypeSignatures typo.Release date: 2012-04-26
CPNotificationCenter removeObserver:.isEqual: support for CPExpression and CPPredicate subclasses.CPObject performSelector:withObject:.CPSet and CPMutableSet.objcc -T (or --includeTypeSignatures) option which activates the IncludeTypeSignatures option.CFPropertyList support for date decoding.CPIndexSet enumerateIndexesUsingBlock:, enumerateIndexesWithOptions:usingBlock: and enumerateIndexesInRange:options:usingBlock:.CPIndexSet optimisations.CPArray enumerateObjectsWithOptions:usingBlock:.Bug Fixes:
TypeError: framework is not a function, it is undefined when compiling Objective-J on Linux.Error: Could not load file at Foundation/Foundation.j when compiling Aristo on Linux.CPNotificatioNCenter notifications were sent to removed observers. If one observer of a notification centre notification removed another observer, that other observer would still be notified even that it was no longer observing.pngcrush.CFPropertyList.propertyListFromXML did not properly decode base64 encoded data values.CPKeyedUnarchiver decodeBytesForKey:.CPPopUpButton.CPBox.shouldAdjustSizeOfSubview: delegate method.CPSplitView resizing which plays well with a mix of fixed size and non-fixed size panes.CPCollectionView optimisations.CPCollectionView.CPWorkspace openFile: and openURL:.CPToolbar sizeMode).CPSplitView and CPScrollView.autorecalculatesKeyViewLoop is NO.CPColor components to [0.0, 1.0].CPColor colorWithSRGBRed:green:blue:alpha:.CPColorSpace (basic).CPGradient with drawInRect:angle:.CPView inLiveResize.CPGraphicsContext isFlipped.CPColorWell bindings support.CPOutlineView delegate method outlineView:shouldShowOutlineDisclosureControlForItem: (corresponding to shouldShowOutlineCellForItem: in Cocoa).appkit_tag_dom_elements debug option adds a data-cappuccino-view attribute to most Cappuccino controls, making it easier to troubleshoot in a browser based document inspector.CPSet sortedArrayUsingDescriptors:.CPView registerThemeValues: to change view theme attributes at runtime in a manner similar to ThemeDescriptors.j.CPPopover animation tweaks and improvements.CPOutlineView item parent with left arrow key.CPOutlineView selectionShouldChangeInOutlineView: delegate method.Bug Fixes:
CPBrowser did not notify its delegate of new selections if the selection was made using the keyboard.colorWithCSSString: crash. Syntax such as [[CPColor colorWithCSSString:@"rgba(0,0,0,0.5)"] cssString] lead to a CSS string incompatible with browsers without the CSS rgba feature.CPArray filteredArrayUsingPredicate: and CPArray filterUsingPredicate: did not work for certain types of arrays, and could potentially cause erroneous results for CPArrayControllers with filter predicates.CPShadowView shadowViewEnclosingView: on a subclass of CPShadowView would return an instance of the superclass.CPTabView selectedTabViewItem would raise an exception when there were no tab items instead of nil.CPTabView would not properly reflect changed views if the view changed while the tab was not selected.CPSplitView tried to auto save even without an auto save name.+ CPFont boldFontWithName:size:italic: sometimes returned a non-bold, non-italic font.CPCompoundPredicate of CPNotPredicateType error.+ CPFont fontWithName:size:italic: sometimes returned a non-italic font even for italic:YES.CPTableColumn decoded and set its header view twice.CPArrayController avoidsEmptySelection incorrectly was applied when setting an empty selection through code.CPCollectionView setSelectionIndexes:nil would freeze the app.CPCollectionView with no item prototype view from a cib.CPWindow setAutorecalculatesKeyViewLoop:NO caused the window to recalculate the key view loop.[CPString count] unrecognized selector error when binding an array controller’s content array to a key of another AC’s selection.CPWindow autorecalculatesKeyViewLoop now defaults to NO rather than null.CPOutlineView disclosure triangle.CPViewController view loading behaviour tweaks.CPViewController initWithCibNamed:bundle: ignored the bundle argument.CPPopover created a new window every time it opened, leaking memory in the process.CPPopover delegate method popoverDidClose could be called before animation finished.CPPopUpButton exposed an unintended selectedTag method.CPStepper support.CPTableView background colour support.Bug Fixes:
CPTabViews could not be converted.NSToolbarShowColorsItem didn’t convert right.CPBox title position 'none’ was converted to ‘on top’.CPWindow autorecalculatesKeyViewLoop.Release date: 2011-11-16
The final release of Cappuccino 0.9.5 is identical to RC5.
Release date: 2011-11-16
Release date: 2011-11-16
CPTokenField: quickly entered tokens would be ignored.CPTokenField: crash if added to a window in a unit test.CPTokenField, deleting tokens in front of selected tokens would shift the selection to the right.CPTokenField selection is initialised when loading from cib.Release date: 2011-11-11
CPScanner fixes.objj_backtrace_decorator.CPString -substringWithRange: and -rangeOfString:options:range now throws CPRangeException for out of bounds ranges.-forwardingTargetForSelector: support.CPNumberFormatter with CPNumberFormatterDecimalStyle support.CPDictionary's +dictionaryWithJSObject:recursively: (issue #1299).@STATIC tags, suitable for JavaScript linters.[CPString copy].Bug Fixes:
CPURL -isEqual: for URLs with redundant slashes.CPDate timezone calculation in initWithString:.CPString -rangeOfString: backwards search did not work.CPString -rangeOfString: anchored backwards search did not work.CPString -rangeOfString: returned results other than CPNotFound.CPString -rangeOfString:options:range returned locations relative to the passed-in range instead of the full string.CPMutableSet -addObject: should raise with nil or undefined.-description method into a string.CPDecimal: decimal numbers below 1.0 would compare incorrectly with 0.0.CPButton continuous mode.CPSound error handling and better Cocoa compliance.CPProgressIndicator is now coding compliant.CGContext (CGContextSetFillColor with a pattern color).CPWebView -isLoading method.CPObjectController automaticallyPreparesContent support.CPNullPlaceholderBindingOption for bound text fields.CPContinuouslyUpdatesValueBindingOption.CPOutlineView outlineViewDeleteKeyPressed: delegate method.CPEvents sent during mouseDragged: now have deltaX and deltaY appropriately set (issues #1210, #1211).CPIndexPath.CPMenu item validation.collectionView:menuForItemAtIndex: delegate method support.CPDictionary -keysSortedByValueUsingSelector: which, just as it sounds, returns the keys of the dictionary sorted using a given selector.CPMenu -removeAll method (issue #1260).CPPredicateEditor allows a search or filter predicate to be constructed visually by the user.addObject: by eliminating entirely pointless rearrange when added objects did not pass the filter. Also avoid double rearrange if clearsFilterPredicateOnInsertion.CPUserDefaultsController which can be used to easily bind controls to user default keys, in Interface Builder or elsewhere.CPArrayController insertObject:atArrangedObjectIndex:.filterPredicate change notification if clearsFilterPredicateOnInsertion is YES but filterPredicate is already nil when insertObject:atArrangedObjectIndex: is called.CPArrayController handlesContentAsCompoundValue support for contentArray binding.CPOutlineView.CPLevelIndicator shows a meter with discrete levels from empty to full.CPFormatter support for CPControl.scrollViewWillScroll: and scrollViewDidScroll: delegate methods, inspired by UIScrollViewDelegate (issue #1177).CPMenu opening, closing and handling of submenus.CPCharacterSet when the set is of the characterSetWithCharactersInString kind.CPCharacterSet -isEqual: support when the set is of the characterSetWithCharactersInString kind.CPCharacterSet +characterSetWithCharactersInString now archive properly.CPTokenField.CPArray range checking (issue #1334).CPBoxes created with +boxEnclosingView: now take on the autoresizing mask of the passed view (issue #1335).usesAlternatingBackgroundColors is YES (issue #1341).CPAlert subclasses to use +alertWithMessageText:... et al (issue #1333).valueForKeyPath: (issue #1344).[CPSound play] now plays the sound once it has been loaded if it hasn’t yet (issue #1345).CPRangeException if CPString substringToIndex: is out of bounds.willChange<Key> and didChange<Key> calls. When multiple calls are nested, only the first willChange... and the last didChange... will notify observers, avoiding duplicate notifications for the same change. This can massively improve performance since observations sometimes lead to cascading updates (issue #1343).didChange in reverse order of willChange in CPObjectController setContent:.CPTokenField tokenField:shouldAddObjects:atIndex: delegate method (issue #1360).CPStepper button sizes can now be themed.CPColorWithImages() convenience function to quickly create a CPColor from single, 3-part or 9-part images (issue #1274).-description method of CPImage and CPColor to show the exact content, especially for pattern colors (issue #1274).splitViewDidResizeSubviews: messages.CPWindow setMovable: support which specifies whether a window can be dragged (issue #1358).CPPopover control to create small “pop up” widgets attached to other controls, similar to the Downloads pop-over in Safari 5 (issue #1316).Bug Fixes:
CPViewAnimation: all animation curves behaved like a linear curve (issue #1313).CPSound in Firefox.CPFlashView setParameters: bugs.CPSearchField layout glitch.CPSplitView setIsPaneSplitter: had the opposite effect of what it should have been.CPTextField: cut and paste using the mouse did not set stringValue properly.CPTextField: CPControlTextDidBeginEditingNotification and CPControlTextDidChangeNotification were not sent after cut and paste.CPTableView column resizing.CPOutLineView outlineView:sortDescriptorsDidChange: delegate message was not sent.addObserver: when one replacement would do.CPBrowser.setScrollMode: message did nothing.[CPArrayController arrangedObjects] could be nil.CPSearchField delegate method controlTextDidChange: didn’t always get fired.CPSearchField.unarchiver:didDecodeObject: returned nil, the original object was still replaced (with nil) instead of being kept.webView:didFinishLoadForFrame: delegate message.CPSlider isContinuous disagreed with setContinuous:.CPSliders always became continuous when archived/unarchived.nextKeyView is self.rectOfColumn: method returned a rect reduced by the intercell spacing. It should return the rect of the entire column.contentArray would sometimes fail when add:, remove: and similar methods were called.CPColor colorWithCSSString: did not properly handle the alpha component of the CSS rbga() syntax.CPInvalidArgumentException: Unsupported method on CPArray when attempting to bind to a CPArrayController's arrangedObjects before calling setContent:.CPArrayController _arrangedObjects initialisation error.CPOutlineView provided dragged items in reverse order.CPBox would have the wrong autoresizing mask.CPTextField's custom inset would decode fine, but a subclass of a CPTextField would fail to decode the inset.CGGradientCreateWithColorComponents assumed there’d only be two colors in each gradient.CGColorCreateGenericGray, CGColorCreateGenericRGB and CGColorCreateGenericCMYK.CGColorCreateCopyWithAlpha could create colors with an alpha value incorrectly linked to other cached colors.CPPopUpButton itemWithTitle:.[CPIndexSet indexPathByRemovingLastIndex] didn’t remove the last index.[CPIndexSet indexes] did not return a copy of the indexes._CPImageAndTextViews sharing the same CPImage failed to properly observe its loading.CPWebView.CPColor isEqual: sometimes failed to recognise equal instances specified with colorWithCSSString:.CPColor isEqual: for pattern images.addObject: (on arrangedObjects).CPTableColumn width, minWidth and maxWidth encoding.CPController initWithCoder:.CPUserDefault change notifications, objectForKey: could return the value from prior to the change.remove: would not only remove selected rows, but also any other rows isEqual: to the selected rows.CPMenu could return a separator as the highligted item.CPTextField's target action changed the first responder then the target action was called twice if the textfield edit was completed by hitting the enter/return key.CPPredicate would crash if a beginsWith or endsWith comparison was made where the right hand string was longer than the left hand string.setEnabled: for auto enabled items.tokenField:tokenField completionsForSubstring:indexOfToken:indexOfSelectedItem: ignored its indexOfToken: parameter.CPArrayController setSelectionIndexes: sometimes modified its input.CPArrayController methods returned undefined instead of booleans.CPWindow did not return NO to acceptsFirstResponder messages.selectNextKeyView:, selectPreviousKeyView:, selectKeyViewFollowingView: and selectKeyViewPrecedingView: not acting like in Cocoa).mutableArrayValueForKey: KVO proxy objects did not use plural selectors (e.g. remove<Key>AtIndexes:, replace<Key>AtIndexes:) when implemented by the proxied object.CPStepper setFrame: method modified its input.CPRadio sent its action after a programmatic setState: change.CPTextField: if a field lost focus while a key was depressed the string value would not update with the last pressed key.CPMenu -removeAllItems was not KVO compliant.CPPopupButton -selectedIndex could become wrong when menu items were removed.CPProgressIndicator support.sendsActionOnEndEditing flag.NSButtonCell (e.g. checkboxes) in table columns.NSAddTemplate and NSRemoveTemplate (standard plus and minus buttons).Bug Fixes:
Result of expression '_subviews[index]' [null] is not an object error for nib2cibbed radio groups.NSColorWell was not read properly.capp --help.capp.https://github.com/cappuccino/cappuccino.NARWHAL_ENGINE to jsc if it’s already jsc.