On 12 Dec 2018, at 01:03, Lars C. Hassing <l...@ccieurope.com> wrote:
> 
> If I assign an image to an NSButton it is displayed with nice pressed and 
> disabled effects.
> 
> In my custom NSButton, that should display image1+title+image2, I override 
> drawRect:, but how do I obtain the EXACT SAME system effects for the two 
> images?

Override -drawRect: to call the cell’s -drawWithFrame:inRect: *twice*, once 
with the cell’s image set to image1 and the alignment set to left, and once 
with the cell’s image set to image2 and the alignment set to right, making sure 
to clip appropriately so it only draws the portions you want. Obviously your 
custom button is going to have its own “image1” and “image2” properties, right, 
so you don’t care that the “image” property is all over the place :-)

e.g. on the first call, draw this:

................
.+---+         .
.| 1 |  Title  .
.+---+         .
................

Then on the second call, add this part:

               .......
 +---+         .+---+.
 | 1 |  Title  .| 2 |.
 +---+         .+---+.
               .......

Do note that if you take this approach, you’re relying on controls being 
NSCell-based. At some point in the future, I think that’s likely to change, at 
which point you might need to do something else.

It’s also conceivable that this might work better on current versions of the 
macOS if you made a custom NSButtonCell subclass and did the clipping and two 
calls in that. Why? Because various controls currently try to detect whether 
they’re using a custom cell or not and use different rendering code if they are 
not…

> I am looking for system functions to produce the SAME look and feel as Cocoa 
> controls.
> 
> Motif, Windows and Carbon all have system functions to draw control parts in 
> various states
> to help developers achieve a consistent look and feel, why wouldn’t Cocoa be 
> interested in supporting that?


Cocoa does in fact have this kind of functionality internally, but it’s 
currently SPI rather than API. I’m not sure whether Apple intends to expose the 
theme support at some time in the future.

Kind regards,

Alastair.

--
http://alastairs-place.net

_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to