[Lazarus] RegisterWSComponent documentation?
zoe at scootersoftware.com
Wed Nov 11 21:31:22 CET 2020
Thanks for the write-up, that's what I thought was going on, and details
like the "inherited" call were what I was worried about. :)
Now that I've had a chance to shake out the design, I do see a patch I
could pull together if you think it would be merged. General details are:
1) Add a new NSVisualEffectView descendant that wraps a
TCocoaManualScrollHost and passes things down to it, just like
TCocoaManualScrollHost does for its documentView.
2) TCocoaWSTreeView.CreateHandle would call the existing
TCocoaWSCustomControl.CreateHandle to create the TCocoaManualScrollHost
handle, then check the OS version, and if it's macOS 10.14 or later, it
would create the NSVisualEffectView and nest the inherited handle within
it. This new view becomes the handle, but only on versions of macOS
that require it.
3) Change a couple of places in TTreeView to call
GetColorResolvingParent so it can use clDefault, and add a
TCocoaWSTreeView.GetDefaultColor method that conditionally returns
either clWindow or clNone. The TTreeView code already skips doing a
fillRect on the background if you set Color to clNone.
Personally I need the new behavior for any TCustomControl descendant, so
I'd put most of the code in TCocoaWSCustomControl, but we have our own
TUiTreeView/TUiCustomControl classes already, so I can add the extra
configurability we'd need there.
The biggest concern I'd have with it being pushed into LCL proper is
that FillRect(clWindow) doesn't look right. The NSViualEffectView
changes color based on the average color of the desktop wallpaper behind
the window and shifts as you move the window around, so none of the
NSColors can match it. I had to adjust our owner draw functions to not
rely on drawing an opaque rectangle to clear/overwrite things, but it
wasn't too bad.
I know this might seem like an unnecessary flourish, but TListView and
TListBox already have the color shifting background. I'm just trying to
make TTreeView match them and NSOutlineView.
More information about the lazarus