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 cib
s. 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.CPSearchField
s 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
.CPComboBox
es 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
.CPPopover
s 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
.CPWindow
s 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 _CPTableDrawView
s 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.CPPlatformWindow
s, 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.j
s 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.CPAlert
s 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:
CPPushOnPushOffButton
CPToggleButton
CPMomentaryChangeButton
CPOnOffButton
CPMomentaryPushInButton
CPMomentaryPushButton
CPMomentaryLight
CPPopUpButton
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'
.CPEvent
s 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.CPTokenField
s 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 CPArrayController
s 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:
CPTabView
s 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
.