Add Background colours to a TextArea gadget
BlitzMax Forums/BlitzMax Module Tweaks/Add Background colours to a TextArea gadget
| ||
EDIT : Added MacOS code This tweak enables background colouring to a TextArea gadget. Works just like FormatTextArea... where you give it a range of the text to affect the colour-change against. Generic code changes : Firstly, we need to update MaxGUI to add a new function. maxgui.bmx Add this new function Function FormatTextAreaBackground( textarea:TGadget,r,g,b,pos=0,length=TEXTAREA_ALL,units=TEXTAREA_CHARS ) textarea.SetBGStyle(r,g,b,pos,length,units) End Function gadget.bmx Add this method to the "textarea commands" section of the TGadget type. Method SetBGStyle(r,g,b,pos,length,units) End Method Part 1 - WINDOWS :-) We'll be modifying win32maxgui module... win32gui.bmx Add to the Extern section Function bbFormatTextAreaBackground( textarea,r,g,b,pos=0,length=-1,units=1 ) Add method to TWin32Gadget Method SetBGStyle(r,g,b,pos,length,units) bbFormatTextAreaBackground(handle,r,g,b,pos,length,units) End Method textarea.h Add to public def of BBTextArea virtual void formatBackground( int r,int g,int b,int pos,int len,int units )=0; Add to extern "C" section void bbFormatTextAreaBackground( BBTextArea *t,int r,int g,int b,int pos,int len,int units ); win32textarea.cpp Add function to BBTextArea void bbFormatTextAreaBackground( BBTextArea *t,int r,int g,int b,int pos,int len,int units ){ t->debug(); t->formatBackground( r,g,b,pos,len,units ); } win32textarea.h Add to public def of Win32TextArea void formatBackground( int r,int g,int b,int pos,int len,int units ); win32textarea2.cpp Add new function void Win32TextArea::formatBackground( int r,int g,int b, int pos,int len,int units ){ if( !adjustRange( pos,len,units ) ) return; CHARFORMAT2 cf={sizeof(cf)}; cf.dwMask=0x4000000; // CFM_BACKCOLOR... bug with mingw - not defined in richedit.h cf.crBackColor=(b<<16)|(g<<8)|r; lock( pos,len ); SendMessage( _gadget.hwnd(),EM_SETCHARFORMAT,SCF_SELECTION,(DWORD)&cf ); unlock(); } ..as noted in the code comment, richedit.h that comes with the Mingw that we use is missing CFM_BACKCOLOR. Part 2 - MAC OS :-) We'll be modifying cocoamaxgui module... cocoagui.bmx Add new Extern function Function NSSetBGStyle(gadget:TNSGadget,r,g,b,pos,length,units) Add new TNSGadget method Method SetBGStyle(r,g,b,pos,length,units) ?debug If pos<0 Or pos+length>AreaLen(units) Throw "Illegal Range" ? If length NSSetBGStyle Self,r,g,b,pos,length,units End Method cocoa.macos.m Add new function void NSSetBGStyle(nsgadget *gadget,int r,int g,int b,int pos,int length,int units) { TextView *textarea; NSRange _range; NSColor *color; textarea=(TextView*)gadget->handle; _range=GetRange([textarea storage],pos,length,units); color=[NSColor colorWithDeviceRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:1.0]; [[textarea storage] addAttribute:NSBackgroundColorAttributeName value:color range:_range]; } And there are Win32 and MacOS done. Alas, it turns out that FLTK doesn't support range-specific background colours, only for the whole gadget. But then again, FLTK doesn't support BOLD, ITALIC, UNDERLINE or STRIKETHROUGH for text formatting, so I don't think that would be a reason not to allow this for the other platforms ;-) I've also applied changes to the GTK GUI module, which also enables background colour changing. All we need now is for BRL to decide if they want to add it :-) :o) |
| ||
A test program... :-) |
| ||
Have now added MacOS changes to the first post. What else do we need? :-) |