Skip navigation.
 
mlRe: Dynamic color changes in a text view
FROM : Mike Ferris
DATE : Thu Jan 02 17:14:56 2003

I would say that's getting up there, evil-wise.  ;-)

Doing an NSColor subclass as Greg suggests is probably a better route.

Greg's latest reply has some other hints for what you might need to
watch out for if you go the subclass route.

Mike


Begin forwarded message:

> From: Daryn <<email_removed>>
> Date: Tue Dec 31, 2002  12:39:11 PM US/Pacific
> To: Daryn <<email_removed>>
> Cc: Mike Ferris <<email_removed>>, <email_removed>
> Subject: Re: Dynamic color changes in a text view
>
> Actually, how evil is it to subclass a color well to forward
> invocations to the well's color, and then use this new color well as
> the attribute value of fore/background color in the text storage? 
> Part of the color well's action message invokes display on the text
> view.  This _seems_ to work, but it makes me nervous.  What might go
> awry for me later?
>
> - (NSMethodSignature *)methodSignatureForSelector:(SEL)selector {
>     NSMethodSignature *signature = [super
> methodSignatureForSelector:selector];
>     if (!signature) signature = [[self color]
> methodSignatureForSelector:selector];
>     return signature;
> }
>
> - (void)forwardInvocation:(NSInvocation *)invocation {
>     [invocation invokeWithTarget:[self color]];
> }
>
>
> On Tuesday, December 31, 2002, at 01:17  PM, Daryn wrote:
>

>> In a nutshell, I'm displaying ansi color output from another app in a
>> text view.  Since the scrollback is arbitrarily large (user pref) and
>> thus the ranges may be excessive, I planned to dynamically update the
>> visible rect, and defer changing all text until the color ui is
>> dismissed.
>>
>> Greg Titus had a interesting suggestion for subversively faking a
>> mutable color, although I'm worried something else wouldn't work as
>> expected since the color thinks it's one thing, but is really
>> another.  I occasionally derive colors, although I can adapt that the
>> use the real colors.  I'll have to see if it interferes with
>> selection colors or text copying.
>>
>> Thanks for the feedback!
>>
>> On Tuesday, December 31, 2002, at 12:44  PM, Mike Ferris wrote:
>>

>>> Is there more than one color?
>>>
>>> If there's only a single color, just set a new
>>> NSForegroundColorAttribute over the whole range of text.
>>>
>>> But if you're doing something like syntax coloring and there's
>>> multiple ranges with different colors and you need to change one of
>>> those colors, then what you're describing is probably the wqay to
>>> go.  PB does something very similar.  It uses a custom syntax
>>> coloring attribute to mark sections that are comments or numbers or
>>> strings or whatever, and when the user changes the preference for
>>> one of the elements it scans through, finding ranges that are that
>>> element using the custom attribute and resetting the
>>> NSForegroundColorAttribute for the ranges that it needs to change.
>>>
>>> Because this can be arbitrarily expensive depending on how much text
>>> you've got and how many discreet ranges, you may want to consider
>>> not doing it immediately.  If you can't do the real change
>>> immediately you could still put some sample text near the color
>>> change UI and reflect changes immediately there (where you have
>>> control over how expensive it would be) and do the change throughout
>>> the user's real text only after the user has decided on a color.
>>>
>>> You cannot just change the color object that all the ranges use
>>> since NSColors are immutable...
>>>
>>> Mike
>>>
>>> Begin forwarded message:
>>>

>>>> From: Daryn <<email_removed>>
>>>> Date: Tue Dec 31, 2002  10:11:51 AM US/Pacific
>>>> To: <email_removed>
>>>> Subject: Dynamic color changes in a text view
>>>>
>>>> I have a text view that contains text with various configurable
>>>> colors.  Using a continous color well, I'd like the existing text
>>>> to change color.
>>>>
>>>> My thoughts about how to implement this would involve adding my own
>>>> attributes (ie. "MyRedColor", "MyGreenColor", etc) to the text
>>>> storage in order to use attribute:atIndex:effectiveRange: to
>>>> iterate over the storage and update the color.
>>>>
>>>> Is there a simpler method to achieve this result?  For example, is
>>>> it possible to conceptually change a single color object that all
>>>> the colored ranges use?
>>>>
>>>> Daryn
>>>> _______________________________________________
>>>> cocoa-dev mailing list | <email_removed>
>>>> Help/Unsubscribe/Archives:
>>>> http://www.lists.apple.com/mailman/listinfo/cocoa-dev
>>>> Do not post admin requests to the list. They will be ignored.

>>>
>>>
>>>

>> Daryn
>> _______________________________________________
>> cocoa-dev mailing list | <email_removed>
>> Help/Unsubscribe/Archives:
>> http://www.lists.apple.com/mailman/listinfo/cocoa-dev
>> Do not post admin requests to the list. They will be ignored.
>>
>>

> Daryn

_______________________________________________
cocoa-dev mailing list | <email_removed>
Help/Unsubscribe/Archives: http://www.lists.apple.com/mailman/listinfo/cocoa-dev
Do not post admin requests to the list. They will be ignored.

Related mailsAuthorDate
mlDynamic color changes in a text view Daryn Dec 31, 19:11
mlRe: Dynamic color changes in a text view Greg Titus Dec 31, 19:29
mlRe: Dynamic color changes in a text view Mike Ferris Dec 31, 19:44
mlRe: Dynamic color changes in a text view Mike Ferris Dec 31, 19:46
mlRe: Dynamic color changes in a text view Daryn Dec 31, 20:17
mlRe: Dynamic color changes in a text view Daryn Dec 31, 21:39
mlRe: Dynamic color changes in a text view Greg Titus Dec 31, 21:52
mlRe: Dynamic color changes in a text view Mike Ferris Jan 2, 17:14