*Major* update

Bugfixes galore, updated support sources
Works very nicely with the supplied decorators


git-svn-id: file:///srv/svn/repos/haiku/trunk/current@3892 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
DarkWyrm 2003-07-07 19:53:47 +00:00
parent cc10522e49
commit 10b4673564
12 changed files with 215 additions and 137 deletions

View File

@ -7,7 +7,7 @@ APRApplication::APRApplication()
BRect rect;
// This is just the size and location of the window when Show() is called
rect.Set(100,100,520,345);
rect.Set(100,100,540,345);
aprwin=new APRWindow(rect);
aprwin->Show();
}

View File

@ -146,25 +146,14 @@ APRView::APRView(const BRect &frame, const char *name, int32 resize, int32 flags
new BMessage(REVERT_SETTINGS),B_FOLLOW_LEFT |B_FOLLOW_TOP,
B_WILL_DRAW | B_NAVIGABLE);
AddChild(revert);
// Eventually we might want to have this disabled at the start and
// enabled when the user makes changes and such. Then again, maybe we won't.
// revert->SetEnabled(false);
cvrect.OffsetBy(70,0);
try_settings=new BButton(cvrect,"TryButton","Try",
new BMessage(TRY_SETTINGS),B_FOLLOW_LEFT |B_FOLLOW_TOP,
B_WILL_DRAW | B_NAVIGABLE);
AddChild(try_settings);
// Eventually we might want to have this disabled at the start and
// enabled when the user makes changes and such. Then again, maybe we won't.
// try_settings->SetEnabled(false);
revert->SetEnabled(false);
cvrect.OffsetBy(70,0);
apply=new BButton(cvrect,"ApplyButton","Apply",
new BMessage(APPLY_SETTINGS),B_FOLLOW_LEFT |B_FOLLOW_TOP,
B_WILL_DRAW | B_NAVIGABLE);
AddChild(apply);
apply->SetEnabled(false);
BEntry entry(COLOR_SET_DIR);
entry_ref ref;
@ -173,9 +162,8 @@ APRView::APRView(const BRect &frame, const char *name, int32 resize, int32 flags
&ref, 0, false);
attribute=B_PANEL_BACKGROUND_COLOR;
attrstring="PANEL_BACKGROUND";
attrstring="Background";
LoadSettings();
picker->SetValue(GetColorFromMessage(&settings,attrstring.String()));
}
APRView::~APRView(void)
@ -191,7 +179,6 @@ void APRView::AllAttached(void)
attrlist->SetTarget(this);
apply->SetTarget(this);
defaults->SetTarget(this);
try_settings->SetTarget(this);
revert->SetTarget(this);
settings_menu->SetTargetForItems(this);
colorset_menu->SetTargetForItems(this);
@ -199,6 +186,7 @@ void APRView::AllAttached(void)
BMessenger msgr(this);
savepanel->SetTarget(msgr);
picker->SetValue(GetColorFromMessage(&settings,attrstring.String()));
}
void APRView::MessageReceived(BMessage *msg)
@ -302,12 +290,15 @@ printf("MSG: Save Request - couldn't find file name\n");
colorwell->Invalidate();
// Update current attribute in the settings
settings.ReplaceData(attrstring.String(),(type_code)'RGBC',
&col,sizeof(rgb_color));
settings.ReplaceData(attrstring.String(),(type_code)'RGBC',&col,sizeof(rgb_color));
if(apply->IsEnabled()==false)
apply->SetEnabled(true);
if(revert->IsEnabled()==false)
revert->SetEnabled(true);
SetColorSetName("<untitled>");
if(Window())
Window()->PostMessage(SET_UI_COLORS);
Window()->PostMessage(SET_UI_COLORS);
break;
}
case ATTRIBUTE_CHOSEN:
@ -316,7 +307,7 @@ printf("MSG: Save Request - couldn't find file name\n");
ColorWhichItem *whichitem=(ColorWhichItem*)attrlist->ItemAt(attrlist->CurrentSelection());
if(!whichitem)
break;
attrstring=whichitem->Text();
rgb_color col=GetColorFromMessage(&settings,whichitem->Text(),0);
picker->SetValue(col);
colorwell->SetColor(col);
@ -343,13 +334,18 @@ printf("MSG: Save Request - couldn't find file name\n");
}
case REVERT_SETTINGS:
{
LoadSettings();
/* LoadSettings();
rgb_color col=GetColorFromMessage(&settings,attrstring.String(),0);
picker->SetValue(col);
colorwell->SetColor(col);
colorwell->Invalidate();
if(Window())
Window()->PostMessage(SET_UI_COLORS);
*/
if(prev_set_name=="Default")
SetDefaults();
LoadColorSet(prev_set_name);
break;
}
case DEFAULT_SETTINGS:
@ -587,6 +583,9 @@ printf("SaveSettings: %s\n",path.String());
BFile file(path.String(),B_READ_WRITE|B_CREATE_FILE|B_ERASE_FILE);
settings.Flatten(&file);
prev_set_name=*colorset_name;
revert->SetEnabled(false);
revert->SetEnabled(false);
}
void APRView::LoadSettings(void)
@ -625,7 +624,7 @@ printf("Couldn't open file %s for read\n",path.String());
{
settings.FindString("name",colorset_name);
SetColorSetName(colorset_name->String());
prev_set_name=*colorset_name;
picker->SetValue(GetColorFromMessage(&settings,attrstring.String()));
colorwell->SetColor(picker->ValueAsColor());
#ifdef DEBUG_COLORSET
@ -805,40 +804,6 @@ printf("NotifyServer: Setting Desktop color to "); PrintRGBColor(col);
if(Window())
Window()->PostMessage(SET_UI_COLORS);
/* // Name taken from ServerProtocol.h
port_id serverport=find_port("OBappserver");
if(serverport==B_NAME_NOT_FOUND)
return;
PortLink *pl=new PortLink(serverport);
// 'suic'==SET_UI_COLORS message from ServerProtocol.h
pl->SetOpCode('suic');
rgb_color col;
col=GetColorFromMessage(&settings,"PANEL_BACKGROUND");
pl->Attach(&col,sizeof(rgb_color));
col=GetColorFromMessage(&settings,"MENU_BACKGROUND");
pl->Attach(&col,sizeof(rgb_color));
col=GetColorFromMessage(&settings,"MENU_SELECTION_BACKGROUND");
pl->Attach(&col,sizeof(rgb_color));
col=GetColorFromMessage(&settings,"MENU_ITEM_TEXT");
pl->Attach(&col,sizeof(rgb_color));
col=GetColorFromMessage(&settings,"MENU_SELECTED_ITEM_TEXT");
pl->Attach(&col,sizeof(rgb_color));
col=GetColorFromMessage(&settings,"WINDOW_TAB");
pl->Attach(&col,sizeof(rgb_color));
col=GetColorFromMessage(&settings,"KEYBOARD_NAVIGATION");
pl->Attach(&col,sizeof(rgb_color));
col=GetColorFromMessage(&settings,"DESKTOP");
pl->Attach(&col,sizeof(rgb_color));
pl->Flush();
delete pl;
*/
}
rgb_color APRView::GetColorFromMessage(BMessage *msg, const char *name, int32 index=0)

View File

@ -65,7 +65,7 @@ protected:
void LoadColorSet(const BString &name);
void SetColorSetName(const char *name);
BColorControl *picker;
BButton *apply,*revert,*defaults,*try_settings;
BButton *apply,*revert,*defaults;
BListView *attrlist;
color_which attribute;
BMessage settings;
@ -76,6 +76,7 @@ protected:
BFilePanel *savepanel;
ColorWell *colorwell;
BString *colorset_name;
BString prev_set_name;
};
#endif

View File

@ -43,9 +43,7 @@ void APRWindow::WorkspaceActivated(int32 wkspc, bool is_active)
void APRWindow::MessageReceived(BMessage *msg)
{
if(msg->what==SET_UI_COLORS)
{
decorators->SetColors(colors->settings);
}
else
BWindow::MessageReceived(msg);
}

View File

@ -8,7 +8,7 @@
#define B_WINDOW_TAB_TEXT_COLOR 'wttx'
#define B_INACTIVE_WINDOW_TAB_COLOR 'iwtb'
#ifdef BUILD_UNDER_R5
//#ifdef BUILD_UNDER_R5
#define B_MENU_SELECTED_BACKGROUND_COLOR B_MENU_SELECTION_BACKGROUND_COLOR
#define B_PANEL_TEXT_COLOR 'ptxt'
#define B_DOCUMENT_BACKGROUND_COLOR 'dbgc'
@ -26,7 +26,7 @@
#define B_TOOLTIP_TEXT_COLOR 'tttx'
#define B_SUCCESS_COLOR 'sucs'
#define B_FAILURE_COLOR 'fail'
#endif
//#endif
class ColorWhichItem : public BStringItem
{

View File

@ -42,7 +42,7 @@
#include "PreviewDriver.h"
#include "Decorator.h"
#define DEBUG_DECORATOR
//#define DEBUG_DECORATOR
DecView::DecView(BRect frame, const char *name, int32 resize, int32 flags)
:BView(frame,name,resize,flags)
@ -89,6 +89,21 @@ DecView::DecView(BRect frame, const char *name, int32 resize, int32 flags)
decorator_id=-1;
GetDecorators();
LoadSettings();
BString path(ConvertIndexToPath(0L));
if(LoadDecorator(path.String()))
{
driver->FillRect(preview_bounds,&ldata,(int8*)&pat_solid_high);
if(decorator)
{
BStringItem *item=(BStringItem*)declist->ItemAt(declist->CurrentSelection());
path=(item)?item->Text():path="Title";
decorator->SetDriver(driver);
decorator->SetTitle(path.String());
decorator->SetColors(colorset);
decorator->Draw();
}
}
}
DecView::~DecView(void)
@ -138,10 +153,13 @@ printf("MSG: Decorator NOT Chosen - couldn't load decorator\n");
break;
}
// ldata.highcolor.SetColor(colorset.desktop);
driver->FillRect(preview_bounds,&ldata,(int8*)&pat_solid_high);
if(decorator)
{
BStringItem *item=(BStringItem*)declist->ItemAt(declist->CurrentSelection());
path=(item)?item->Text():path="Title";
decorator->SetDriver(driver);
decorator->SetTitle(path.String());
decorator->SetColors(colorset);
decorator->Draw();
}
@ -375,7 +393,7 @@ void DecView::SetColors(const BMessage &message)
#ifdef DEBUG_DECORATOR
printf("DecView::SetColors\n");
#endif
if(UnpackSettings(&colorset,&message))
if(UnpackSettings(&colorset,message))
{
if(decorator)
{
@ -399,36 +417,68 @@ printf("DecView::SetColors: UnpackSetting returned false\n");
}
}
bool DecView::UnpackSettings(ColorSet *set, const BMessage *msg)
bool DecView::UnpackSettings(ColorSet *set, const BMessage &msg)
{
if(!set || !msg)
if(!set)
{
#ifdef DEBUG_DECORATOR
printf("UnpackSettings(): NULL parameter\n");
#endif
return false;
}
rgb_color *col;
ssize_t size;
// Once the OBOS app_server is in place, there will be more attributes
if(msg.FindData("Background",(type_code)'RGBC',(const void**)&col,&size)==B_OK)
set->panel_background=*col;
if(msg.FindData("Panel Text",(type_code)'RGBC',(const void**)&col,&size)==B_OK)
set->panel_text=*col;
if(msg.FindData("Document Background",(type_code)'RGBC',(const void**)&col,&size)==B_OK)
set->document_background=*col;
if(msg.FindData("Document Text",(type_code)'RGBC',(const void**)&col,&size)==B_OK)
set->document_text=*col;
if(msg.FindData("Control Background",(type_code)'RGBC',(const void**)&col,&size)==B_OK)
set->control_background=*col;
if(msg.FindData("Control Text",(type_code)'RGBC',(const void**)&col,&size)==B_OK)
set->control_text=*col;
if(msg.FindData("Control Highlight",(type_code)'RGBC',(const void**)&col,&size)==B_OK)
set->control_highlight=*col;
if(msg.FindData("Control Border",(type_code)'RGBC',(const void**)&col,&size)==B_OK)
set->control_border=*col;
if(msg.FindData("Tooltip Background",(type_code)'RGBC',(const void**)&col,&size)==B_OK)
set->tooltip_background=*col;
if(msg.FindData("Tooltip Text",(type_code)'RGBC',(const void**)&col,&size)==B_OK)
set->tooltip_text=*col;
if(msg.FindData("Menu Background",(type_code)'RGBC',(const void**)&col,&size)==B_OK)
set->menu_background=*col;
if(msg.FindData("Selected Menu Item Background",(type_code)'RGBC',(const void**)&col,&size)==B_OK)
set->menu_selected_background=*col;
if(msg.FindData("Navigation Base",(type_code)'RGBC',(const void**)&col,&size)==B_OK)
set->keyboard_navigation_base=*col;
if(msg.FindData("Navigation Pulse",(type_code)'RGBC',(const void**)&col,&size)==B_OK)
set->keyboard_navigation_pulse=*col;
if(msg.FindData("Menu Item Text",(type_code)'RGBC',(const void**)&col,&size)==B_OK)
set->menu_text=*col;
if(msg.FindData("Selected Menu Item Text",(type_code)'RGBC',(const void**)&col,&size)==B_OK)
set->menu_selected_text=*col;
if(msg.FindData("Selected Menu Item Border",(type_code)'RGBC',(const void**)&col,&size)==B_OK)
set->menu_selected_border=*col;
if(msg.FindData("Success",(type_code)'RGBC',(const void**)&col,&size)==B_OK)
set->success=*col;
if(msg.FindData("Failure",(type_code)'RGBC',(const void**)&col,&size)==B_OK)
set->failure=*col;
if(msg.FindData("Shine",(type_code)'RGBC',(const void**)&col,&size)==B_OK)
set->shine=*col;
if(msg.FindData("Shadow",(type_code)'RGBC',(const void**)&col,&size)==B_OK)
set->shadow=*col;
if(msg.FindData("Window Tab",(type_code)'RGBC',(const void**)&col,&size)==B_OK)
set->window_tab=*col;
if(msg.FindData("Window Tab Text",(type_code)'RGBC',(const void**)&col,&size)==B_OK)
set->window_tab_text=*col;
if(msg.FindData("Inactive Window Tab",(type_code)'RGBC',(const void**)&col,&size)==B_OK)
set->inactive_window_tab=*col;
if(msg.FindData("Inactive Window Tab Text",(type_code)'RGBC',(const void**)&col,&size)==B_OK)
set->inactive_window_tab_text=*col;
if(msg->FindData("PANEL_BACKGROUND",(type_code)'RGBC',(const void**)&col,&size)==B_OK)
set->panel_background.SetColor(*col);
if(msg->FindData("MENU_BACKGROUND",(type_code)'RGBC',(const void**)&col,&size)==B_OK)
set->menu_background.SetColor(*col);
if(msg->FindData("MENU_SELECTION_BACKGROUND",(type_code)'RGBC',(const void**)&col,&size)==B_OK)
set->menu_selected_background.SetColor(*col);
if(msg->FindData("MENU_ITEM_TEXT",(type_code)'RGBC',(const void**)&col,&size)==B_OK)
set->menu_text.SetColor(*col);
if(msg->FindData("MENU_SELECTED_ITEM_TEXT",(type_code)'RGBC',(const void**)&col,&size)==B_OK)
set->menu_selected_text.SetColor(*col);
if(msg->FindData("WINDOW_TAB",(type_code)'RGBC',(const void**)&col,&size)==B_OK)
set->window_tab.SetColor(*col);
if(msg->FindData("KEYBOARD_NAVIGATION_BASE",(type_code)'RGBC',(const void**)&col,&size)==B_OK)
set->keyboard_navigation_base.SetColor(*col);
if(msg->FindData("KEYBOARD_NAVIGATION_PULSE",(type_code)'RGBC',(const void**)&col,&size)==B_OK)
set->keyboard_navigation_pulse.SetColor(*col);
return true;
}

View File

@ -56,7 +56,7 @@ public:
bool LoadDecorator(const char *path);
BString ConvertIndexToPath(int32 index);
protected:
bool UnpackSettings(ColorSet *set, const BMessage *msg);
bool UnpackSettings(ColorSet *set, const BMessage &msg);
BButton *apply;
BListView *declist;
BMessage settings;

View File

@ -44,9 +44,10 @@ Decorator::Decorator(BRect rect, int32 wlook, int32 wfeel, int32 wflags)
_close_state=false;
_minimize_state=false;
_zoom_state=false;
_title_string=new BString;
_has_focus=false;
_title_string=new BString("");
_driver=NULL;
_closerect.Set(0,0,1,1);
_zoomrect.Set(0,0,1,1);
_minimizerect.Set(0,0,1,1);
@ -83,8 +84,8 @@ Decorator::~Decorator(void)
*/
void Decorator::SetColors(const ColorSet &cset)
{
if(_colors)
_colors->SetColors(cset);
_colors->SetColors(cset);
_SetColors();
}
/*!
@ -232,6 +233,7 @@ int32 Decorator::GetFlags(void)
void Decorator::SetTitle(const char *string)
{
_title_string->SetTo(string);
_DoLayout();
}
/*!
@ -330,7 +332,7 @@ void Decorator::MoveBy(BPoint pt)
necessarily reflect _tabrect offset by the amount given - few people want to
slide a tab right off the window - that would be a Bad Thing (TM).
*/
BRect Decorator::SlideTab(float dx, float dy=0)
BRect Decorator::SlideTab(float dx, float dy)
{
return BRect(0,0,0,0);
}
@ -486,6 +488,16 @@ void Decorator::_DrawZoom(BRect r)
{
}
/*!
\brief Hook function for when the color set is updated
This function is called after the decorator's color set is updated. Quite useful
if the decorator uses colors based on those in the system.
*/
void Decorator::_SetColors(void)
{
}
/*!
\brief Returns the "footprint" of the entire window, including decorator
\return Region representing the window's screen footprint

View File

@ -95,6 +95,11 @@ public:
protected:
int32 _ClipTitle(float width);
/*!
\brief Returns the number of characters in the title
\return The title character count
*/
int32 _TitleWidth(void) { return (_title_string)?_title_string->CountChars():0; }
virtual void _DrawClose(BRect r);
@ -105,6 +110,7 @@ protected:
virtual void _DrawZoom(BRect r);
virtual void _SetFocus(void)=0;
virtual void _DoLayout(void)=0;
virtual void _SetColors(void);
ColorSet *_colors;
DisplayDriver *_driver;

View File

@ -2,6 +2,7 @@
#define LAYERDATA_H_
#include <Point.h>
#include <View.h>
class ServerBitmap;
class LayerData
@ -11,9 +12,9 @@ LayerData(void)
{
pensize=1.0;
penlocation.Set(0,0);
drawing_mode=0;
bitmap_background=NULL;
bitmap_overlay=NULL;
draw_mode=B_OP_COPY;
background=NULL;
overlay=NULL;
highcolor.SetColor(0,0,0,255);
lowcolor.SetColor(255,255,255,255);
//SFont font;
@ -21,15 +22,17 @@ LayerData(void)
scale=1.0;
};
float pensize;
BPoint penlocation;
int32 drawing_mode;
ServerBitmap *bitmap_background;
ServerBitmap *bitmap_overlay;
RGBColor highcolor, lowcolor;
//SFont font;
//bool antialias_text;
float scale;
float pensize;
BPoint penlocation;
drawing_mode draw_mode;
source_alpha alpha_mode;
alpha_function blending_mode;
ServerBitmap *background;
ServerBitmap *overlay;
RGBColor highcolor, lowcolor, viewcolor;
// ServerFont *font;
float scale;
escapement_delta edelta;
};

View File

@ -24,6 +24,7 @@
#include <Region.h>
#include <Bitmap.h>
#include <OS.h>
#include <Font.h>
#include <GraphicsDefs.h>
#include "PortLink.h"
#include "PreviewDriver.h"
@ -115,11 +116,36 @@ void PreviewDriver::DrawChar(char c, BPoint pt)
void DrawPicture(SPicture *pic, BPoint pt)
{
}
void DrawString(const char *string, int32 length, BPoint pt, escapement_delta *delta=NULL)
{
}
*/
void PreviewDriver::DrawString(const char *string, int32 length, BPoint pt, LayerData *d, escapement_delta *delta=NULL)
{
if(!d)
return;
BRect r;
view->viewbmp->Lock();
drawview->SetHighColor(d->highcolor.GetColor32());
drawview->SetLowColor(d->lowcolor.GetColor32());
drawview->SetPenSize(d->pensize);
pt.y--;
drawview->DrawString(string,length,pt,delta);
drawview->Sync();
// calculate the invalid rectangle
font_height fh;
BFont font;
drawview->GetFont(&font);
drawview->GetFontHeight(&fh);
r.left=pt.x;
r.right=pt.x+font.StringWidth(string);
r.top=pt.y-fh.ascent;
r.bottom=pt.y+fh.descent;
view->Invalidate(r);
view->viewbmp->Unlock();
}
void PreviewDriver::InvertRect(BRect r)
{
@ -337,3 +363,18 @@ bool PreviewDriver::DumpToFile(const char *path)
{
return false;
}
float PreviewDriver::StringWidth(const char *string, int32 length, LayerData *d)
{
view->viewbmp->Lock();
float returnval=drawview->StringWidth(string,length);
view->viewbmp->Unlock();
return returnval;
}
void PreviewDriver::GetTruncatedStrings( const char **instrings, int32 stringcount, uint32 mode, float maxwidth, char **outstrings)
{
view->viewbmp->Lock();
be_plain_font->GetTruncatedStrings(instrings,stringcount,mode,maxwidth,outstrings);
view->viewbmp->Unlock();
}

View File

@ -35,34 +35,36 @@ public:
PreviewDriver(void);
~PreviewDriver(void);
virtual bool Initialize(void);
virtual void Shutdown(void);
virtual void CopyBits(BRect src, BRect dest);
virtual void DrawBitmap(ServerBitmap *bmp, BRect src, BRect dest, LayerData *d);
virtual void DrawChar(char c, BPoint pt);
// virtual void DrawPicture(SPicture *pic, BPoint pt);
// virtual void DrawString(const char *string, int32 length, BPoint pt, escapement_delta *delta=NULL);
virtual void InvertRect(BRect r);
virtual void StrokeBezier(BPoint *pts, LayerData *d, int8 *pat);
virtual void FillBezier(BPoint *pts, LayerData *d, int8 *pat);
virtual void StrokeEllipse(BRect r, LayerData *d, int8 *pat);
virtual void FillEllipse(BRect r, LayerData *d, int8 *pat);
virtual void StrokeArc(BRect r, float angle, float span, LayerData *d, int8 *pat);
virtual void FillArc(BRect r, float angle, float span, LayerData *d, int8 *pat);
virtual void StrokeLine(BPoint start, BPoint end, LayerData *d, int8 *pat);
virtual void StrokePolygon(BPoint *ptlist, int32 numpts, BRect rect, LayerData *d, int8 *pat, bool is_closed=true);
virtual void FillPolygon(BPoint *ptlist, int32 numpts, BRect rect, LayerData *d, int8 *pat);
virtual void StrokeRect(BRect r, LayerData *d, int8 *pat);
virtual void FillRect(BRect r, LayerData *d, int8 *pat);
virtual void StrokeRoundRect(BRect r, float xrad, float yrad, LayerData *d, int8 *pat);
virtual void FillRoundRect(BRect r, float xrad, float yrad, LayerData *d, int8 *pat);
// virtual void StrokeShape(SShape *sh, LayerData *d, int8 *pat);
// virtual void FillShape(SShape *sh, LayerData *d, int8 *pat);
virtual void StrokeTriangle(BPoint *pts, BRect r, LayerData *d, int8 *pat);
virtual void FillTriangle(BPoint *pts, BRect r, LayerData *d, int8 *pat);
virtual void StrokeLineArray(BPoint *pts, int32 numlines, RGBColor *colors, LayerData *d);
virtual void SetMode(int32 mode);
virtual bool DumpToFile(const char *path);
bool Initialize(void);
void Shutdown(void);
void CopyBits(BRect src, BRect dest);
void DrawBitmap(ServerBitmap *bmp, BRect src, BRect dest, LayerData *d);
void DrawChar(char c, BPoint pt);
// void DrawPicture(SPicture *pic, BPoint pt);
void DrawString(const char *string, int32 length, BPoint pt, LayerData *d, escapement_delta *delta=NULL);
void InvertRect(BRect r);
void StrokeBezier(BPoint *pts, LayerData *d, int8 *pat);
void FillBezier(BPoint *pts, LayerData *d, int8 *pat);
void StrokeEllipse(BRect r, LayerData *d, int8 *pat);
void FillEllipse(BRect r, LayerData *d, int8 *pat);
void StrokeArc(BRect r, float angle, float span, LayerData *d, int8 *pat);
void FillArc(BRect r, float angle, float span, LayerData *d, int8 *pat);
void StrokeLine(BPoint start, BPoint end, LayerData *d, int8 *pat);
void StrokePolygon(BPoint *ptlist, int32 numpts, BRect rect, LayerData *d, int8 *pat, bool is_closed=true);
void FillPolygon(BPoint *ptlist, int32 numpts, BRect rect, LayerData *d, int8 *pat);
void StrokeRect(BRect r, LayerData *d, int8 *pat);
void FillRect(BRect r, LayerData *d, int8 *pat);
void StrokeRoundRect(BRect r, float xrad, float yrad, LayerData *d, int8 *pat);
void FillRoundRect(BRect r, float xrad, float yrad, LayerData *d, int8 *pat);
// void StrokeShape(SShape *sh, LayerData *d, int8 *pat);
// void FillShape(SShape *sh, LayerData *d, int8 *pat);
void StrokeTriangle(BPoint *pts, BRect r, LayerData *d, int8 *pat);
void FillTriangle(BPoint *pts, BRect r, LayerData *d, int8 *pat);
void StrokeLineArray(BPoint *pts, int32 numlines, RGBColor *colors, LayerData *d);
void SetMode(int32 mode);
float StringWidth(const char *string, int32 length, LayerData *d);
void GetTruncatedStrings( const char **instrings, int32 stringcount, uint32 mode, float maxwidth, char **outstrings);
bool DumpToFile(const char *path);
BView *View(void) { return (BView*)view; };
protected: