objective c - How can I set [NSTextView selectedTextAttributes] on a background window? -
the default value [nstextview selectedtextattributes]
unusable in app, because allow user select colors (syntax highlighting) same background color.
i have written math determine suitable color , can use set it:
textview.selectedtextattributes = @{ nsbackgroundcolorattributename: [nscolor yellowcolor], nsforegroundcolorattributename: [nscolor redcolor] };
but when window in background, still uses system default light grey.
i've attached screenshots of above code active vs inactive window. — how can change selected text background colour of inactive window?
you can override colour overriding drawing method of nslayoutmanager
.
final class layoutmanager1: nslayoutmanager { override func fillbackgroundrectarray(rectarray: unsafepointer<nsrect>, count rectcount: int, forcharacterrange charrange: nsrange, color: nscolor) { let color1 = color == nscolor.secondaryselectedcontrolcolor() ? nscolor.redcolor() : color color1.setfill() super.fillbackgroundrectarray(rectarray, count: rectcount, forcharacterrange: charrange, color: color1) color.setfill() } }
and replace nstextview
's layout manager it.
textview.textcontainer!.replacelayoutmanager(layoutmanager1)
here's full working example.
as @kyle asks reason of setfill
, add update.
from apple manual:
... charrange , color parameters passed in merely informational purposes; color set in graphics state. if reason modify it, must restore before returning method. ...
which means passing-in other color super
call has no effect, , need nscolor.setfill
make work super
call. also, manual requires set original one.
Comments
Post a Comment