Updated PreviewDriver to the new DisplayDriver API and made appropriate changes to DecView as a result

git-svn-id: file:///srv/svn/repos/haiku/trunk/current@6387 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
DarkWyrm
2004-01-28 02:23:20 +00:00
parent 5d0cc8ac2e
commit 8a14aea116
3 changed files with 79 additions and 284 deletions
+4 -4
View File
@@ -100,7 +100,7 @@ DecView::DecView(BRect frame, const char *name, int32 resize, int32 flags)
// Finish setup
ldata.highcolor.SetColor(51,102,160);
pat_solid_high=0xFFFFFFFFFFFFFFFFLL;
driver->FillRect(preview_bounds,&ldata,(int8*)&pat_solid_high);
driver->FillRect(preview_bounds,&ldata);
decorator=NULL;
decorator_id=-1;
@@ -110,7 +110,7 @@ DecView::DecView(BRect frame, const char *name, int32 resize, int32 flags)
BString path(ConvertIndexToPath(0L));
if(LoadDecorator(path.String()))
{
driver->FillRect(preview_bounds,&ldata,(int8*)&pat_solid_high);
driver->FillRect(preview_bounds,&ldata);
if(decorator)
{
BStringItem *item=(BStringItem*)declist->ItemAt(declist->CurrentSelection());
@@ -166,7 +166,7 @@ void DecView::MessageReceived(BMessage *msg)
break;
}
driver->FillRect(preview_bounds,&ldata,(int8*)&pat_solid_high);
driver->FillRect(preview_bounds,&ldata);
if(decorator)
{
BStringItem *item=(BStringItem*)declist->ItemAt(declist->CurrentSelection());
@@ -415,7 +415,7 @@ void DecView::SetColors(const ColorSet &set)
colorset=set;
if(decorator)
{
driver->FillRect(preview_bounds,&ldata,(int8*)&pat_solid_high);
driver->FillRect(preview_bounds,&ldata);
decorator->SetColors(colorset);
decorator->Draw();
}
+56 -249
View File
@@ -54,13 +54,14 @@
#include <Font.h>
#include <GraphicsDefs.h>
#include "PortLink.h"
#include "PatternHandler.h"
#include "PreviewDriver.h"
#include "LayerData.h"
#include "ColorSet.h"
BRect preview_bounds(0,0,150,150);;
PVView::PVView(BRect bounds)
PVView::PVView(const BRect &bounds)
: BView(bounds,"previewdriver_view",B_FOLLOW_NONE, B_WILL_DRAW)
{
viewbmp=new BBitmap(bounds,B_RGB32,true);
@@ -117,64 +118,11 @@ void PreviewDriver::Shutdown(void)
view->viewbmp->Unlock();
}
void PreviewDriver::CopyBits(BRect src, BRect dest)
{
view->viewbmp->Lock();
drawview->CopyBits(src,dest);
drawview->Sync();
view->Invalidate(dest);
view->viewbmp->Unlock();
}
void PreviewDriver::DrawBitmap(ServerBitmap *bmp, BRect src, BRect dest, LayerData *d)
void PreviewDriver::DrawBitmap(ServerBitmap *bmp, const BRect &src, const BRect &dest, const DrawData *d)
{
}
void PreviewDriver::DrawChar(char c, BPoint pt)
{
view->viewbmp->Lock();
drawview->DrawChar(c,pt);
drawview->Sync();
view->Invalidate();
view->viewbmp->Unlock();
}
/*
void DrawPicture(SPicture *pic, BPoint pt)
{
}
*/
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)
void PreviewDriver::InvertRect(const BRect &r)
{
view->viewbmp->Lock();
drawview->InvertRect(r);
@@ -183,191 +131,7 @@ void PreviewDriver::InvertRect(BRect r)
view->viewbmp->Unlock();
}
void PreviewDriver::StrokeBezier(BPoint *pts, LayerData *d, const Pattern &pat)
{
BPoint points[4];
for(uint8 i=0;i<4;i++)
points[i]=pts[i];
view->viewbmp->Lock();
drawview->SetHighColor(d->highcolor.GetColor32());
drawview->SetLowColor(d->lowcolor.GetColor32());
drawview->SetPenSize(d->pensize);
drawview->StrokeBezier(points,*((pattern *)pat.GetInt8()));
drawview->Sync();
view->Invalidate();
view->viewbmp->Unlock();
}
void PreviewDriver::FillBezier(BPoint *pts, LayerData *d, const Pattern &pat)
{
BPoint points[4];
for(uint8 i=0;i<4;i++)
points[i]=pts[i];
view->viewbmp->Lock();
drawview->SetHighColor(d->highcolor.GetColor32());
drawview->SetLowColor(d->lowcolor.GetColor32());
drawview->SetPenSize(d->pensize);
drawview->StrokeBezier(points,*((pattern *)pat.GetInt8()));
drawview->Sync();
view->Invalidate();
view->viewbmp->Unlock();
}
void PreviewDriver::StrokeEllipse(BRect r, LayerData *d, const Pattern &pat)
{
view->viewbmp->Lock();
drawview->SetHighColor(d->highcolor.GetColor32());
drawview->SetLowColor(d->lowcolor.GetColor32());
drawview->SetPenSize(d->pensize);
drawview->StrokeEllipse(r,*((pattern *)pat.GetInt8()));
drawview->Sync();
view->Invalidate(r);
view->viewbmp->Unlock();
}
void PreviewDriver::FillEllipse(BRect r, LayerData *d, const Pattern &pat)
{
view->viewbmp->Lock();
drawview->SetHighColor(d->highcolor.GetColor32());
drawview->SetLowColor(d->lowcolor.GetColor32());
drawview->SetPenSize(d->pensize);
drawview->FillEllipse(r,*((pattern *)pat.GetInt8()));
drawview->Sync();
view->Invalidate(r);
view->viewbmp->Unlock();
}
void PreviewDriver::StrokeArc(BRect r, float angle, float span, LayerData *d, const Pattern &pat)
{
view->viewbmp->Lock();
drawview->SetHighColor(d->highcolor.GetColor32());
drawview->SetLowColor(d->lowcolor.GetColor32());
drawview->SetPenSize(d->pensize);
drawview->StrokeArc(r,angle,span,*((pattern *)pat.GetInt8()));
drawview->Sync();
view->Invalidate(r);
view->viewbmp->Unlock();
}
void PreviewDriver::FillArc(BRect r, float angle, float span, LayerData *d, const Pattern &pat)
{
view->viewbmp->Lock();
drawview->SetHighColor(d->highcolor.GetColor32());
drawview->SetLowColor(d->lowcolor.GetColor32());
drawview->SetPenSize(d->pensize);
drawview->FillArc(r,angle,span,*((pattern *)pat.GetInt8()));
drawview->Sync();
view->Invalidate(r);
view->viewbmp->Unlock();
}
void PreviewDriver::StrokeLine(BPoint start, BPoint end, LayerData *d, const Pattern &pat)
{
view->viewbmp->Lock();
drawview->SetHighColor(d->highcolor.GetColor32());
drawview->SetLowColor(d->lowcolor.GetColor32());
drawview->SetPenSize(d->pensize);
drawview->StrokeLine(start,end,*((pattern *)pat.GetInt8()));
drawview->Sync();
view->Invalidate();
view->viewbmp->Unlock();
}
void PreviewDriver::StrokePolygon(BPoint *ptlist, int32 numpts, BRect rect, LayerData *d, const Pattern &pat, bool is_closed=true)
{
}
void PreviewDriver::FillPolygon(BPoint *ptlist, int32 numpts, BRect rect, LayerData *d, const Pattern &pat)
{
}
void PreviewDriver::StrokeRect(BRect r, LayerData *d, const Pattern &pat)
{
view->viewbmp->Lock();
drawview->SetHighColor(d->highcolor.GetColor32());
drawview->SetLowColor(d->lowcolor.GetColor32());
drawview->SetPenSize(d->pensize);
drawview->StrokeRect(r,*((pattern *)pat.GetInt8()));
drawview->Sync();
view->Invalidate(r);
view->viewbmp->Unlock();
}
void PreviewDriver::FillRect(BRect r, LayerData *d, const Pattern &pat)
{
view->viewbmp->Lock();
drawview->SetHighColor(d->highcolor.GetColor32());
drawview->SetLowColor(d->lowcolor.GetColor32());
drawview->SetPenSize(d->pensize);
drawview->FillRect(r,*((pattern *)pat.GetInt8()));
drawview->Sync();
view->Invalidate(r);
view->viewbmp->Unlock();
}
void PreviewDriver::StrokeRoundRect(BRect r, float xrad, float yrad, LayerData *d, const Pattern &pat)
{
view->viewbmp->Lock();
drawview->SetHighColor(d->highcolor.GetColor32());
drawview->SetLowColor(d->lowcolor.GetColor32());
drawview->SetPenSize(d->pensize);
drawview->StrokeRoundRect(r,xrad,yrad,*((pattern *)pat.GetInt8()));
drawview->Sync();
view->Invalidate(r);
view->viewbmp->Unlock();
}
void PreviewDriver::FillRoundRect(BRect r, float xrad, float yrad, LayerData *d, const Pattern &pat)
{
view->viewbmp->Lock();
drawview->SetHighColor(d->highcolor.GetColor32());
drawview->SetLowColor(d->lowcolor.GetColor32());
drawview->SetPenSize(d->pensize);
drawview->FillRoundRect(r,xrad,yrad,*((pattern *)pat.GetInt8()));
drawview->Sync();
view->Invalidate(r);
view->viewbmp->Unlock();
}
/*
void StrokeShape(SShape *sh, LayerData *d, const Pattern &pat)
{
}
void FillShape(SShape *sh, LayerData *d, const Pattern &pat)
{
}
*/
void PreviewDriver::StrokeTriangle(BPoint *pts, BRect r, LayerData *d, const Pattern &pat)
{
view->viewbmp->Lock();
drawview->SetHighColor(d->highcolor.GetColor32());
drawview->SetLowColor(d->lowcolor.GetColor32());
drawview->SetPenSize(d->pensize);
drawview->StrokeTriangle(pts[0],pts[1],
pts[2],r,*((pattern *)pat.GetInt8()));
drawview->Sync();
view->Invalidate(r);
view->viewbmp->Unlock();
}
void PreviewDriver::FillTriangle(BPoint *pts, BRect r, LayerData *d, const Pattern &pat)
{
view->viewbmp->Lock();
drawview->SetHighColor(d->highcolor.GetColor32());
drawview->SetLowColor(d->lowcolor.GetColor32());
drawview->SetPenSize(d->pensize);
drawview->FillTriangle(pts[0],pts[1],
pts[2],r,*((pattern *)pat.GetInt8()));
drawview->Sync();
view->Invalidate(r);
view->viewbmp->Unlock();
}
void PreviewDriver::StrokeLineArray(BPoint *pts, int32 numlines, RGBColor *colors, LayerData *d)
void PreviewDriver::StrokeLineArray(BPoint *pts, const int32 &numlines, const DrawData *d, RGBColor *colors)
{
view->viewbmp->Lock();
drawview->SetHighColor(d->highcolor.GetColor32());
@@ -382,26 +146,69 @@ void PreviewDriver::StrokeLineArray(BPoint *pts, int32 numlines, RGBColor *color
view->viewbmp->Unlock();
}
void PreviewDriver::SetMode(int32 mode)
void PreviewDriver::SetMode(const int32 &mode)
{
}
bool PreviewDriver::DumpToFile(const char *path)
void PreviewDriver::SetMode(const display_mode &mode)
{
return false;
}
float PreviewDriver::StringWidth(const char *string, int32 length, LayerData *d)
void PreviewDriver::FillSolidRect(const BRect &rect, RGBColor &color)
{
view->viewbmp->Lock();
float returnval=drawview->StringWidth(string,length);
drawview->SetHighColor(color.GetColor32());
drawview->FillRect(rect);
drawview->Sync();
view->Invalidate(rect);
view->viewbmp->Unlock();
return returnval;
}
void PreviewDriver::GetTruncatedStrings( const char **instrings, int32 stringcount, uint32 mode, float maxwidth, char **outstrings)
void PreviewDriver::FillPatternRect(const BRect &rect, const DrawData *d)
{
if(!d)
return;
view->viewbmp->Lock();
be_plain_font->GetTruncatedStrings(instrings,stringcount,mode,maxwidth,outstrings);
drawview->SetHighColor(d->highcolor.GetColor32());
drawview->SetLowColor(d->lowcolor.GetColor32());
drawview->FillRect(rect,*((pattern*)d->patt.GetInt8()));
drawview->Sync();
view->Invalidate(rect);
view->viewbmp->Unlock();
}
void PreviewDriver::StrokeSolidLine(const BPoint &start, const BPoint &end, RGBColor &color)
{
view->viewbmp->Lock();
drawview->SetHighColor(color.GetColor32());
drawview->StrokeLine(start,end);
drawview->Sync();
view->Invalidate(BRect(start,end));
view->viewbmp->Unlock();
}
void PreviewDriver::StrokePatternLine(const BPoint &start, const BPoint &end, const DrawData *d)
{
if(!d)
return;
view->viewbmp->Lock();
drawview->SetHighColor(d->highcolor.GetColor32());
drawview->SetLowColor(d->lowcolor.GetColor32());
drawview->StrokeLine(start,end,*((pattern*)d->patt.GetInt8()));
drawview->Sync();
view->Invalidate(BRect(start,end));
view->viewbmp->Unlock();
}
void PreviewDriver::StrokeSolidRect(const BRect &rect, RGBColor &color)
{
view->viewbmp->Lock();
drawview->SetHighColor(color.GetColor32());
drawview->StrokeRect(rect);
drawview->Sync();
view->Invalidate(rect);
view->viewbmp->Unlock();
}
+19 -31
View File
@@ -45,7 +45,7 @@ class ColorSet;
class PVView : public BView
{
public:
PVView(BRect bounds);
PVView(const BRect &bounds);
~PVView(void);
void AttachedToWindow(void);
void DetachedFromWindow(void);
@@ -61,39 +61,27 @@ public:
PreviewDriver(void);
~PreviewDriver(void);
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, const Pattern &pat);
void FillBezier(BPoint *pts, LayerData *d, const Pattern &pat);
void StrokeEllipse(BRect r, LayerData *d, const Pattern &pat);
void FillEllipse(BRect r, LayerData *d, const Pattern &pat);
void StrokeArc(BRect r, float angle, float span, LayerData *d, const Pattern &pat);
void FillArc(BRect r, float angle, float span, LayerData *d, const Pattern &pat);
void StrokeLine(BPoint start, BPoint end, LayerData *d, const Pattern &pat);
void StrokePolygon(BPoint *ptlist, int32 numpts, BRect rect, LayerData *d, const Pattern &pat, bool is_closed=true);
void FillPolygon(BPoint *ptlist, int32 numpts, BRect rect, LayerData *d, const Pattern &pat);
void StrokeRect(BRect r, LayerData *d, const Pattern &pat);
void FillRect(BRect r, LayerData *d, const Pattern &pat);
void StrokeRoundRect(BRect r, float xrad, float yrad, LayerData *d, const Pattern &pat);
void FillRoundRect(BRect r, float xrad, float yrad, LayerData *d, const Pattern &pat);
// void StrokeShape(SShape *sh, LayerData *d, const Pattern &pat);
// void FillShape(SShape *sh, LayerData *d, const Pattern &pat);
void StrokeTriangle(BPoint *pts, BRect r, LayerData *d, const Pattern &pat);
void FillTriangle(BPoint *pts, BRect r, LayerData *d, const Pattern &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);
bool Initialize(void); // Sets the driver
void Shutdown(void); // You never know when you'll need this
// Drawing functions
void DrawBitmap(ServerBitmap *bmp, const BRect &src, const BRect &dest, const DrawData *d);
void InvertRect(const BRect &r);
virtual void StrokeLineArray(BPoint *pts, const int32 &numlines, const DrawData *d, RGBColor *colors);
void SetMode(const int32 &mode);
void SetMode(const display_mode &mode);
BView *View(void) { return (BView*)view; };
protected:
virtual void FillSolidRect(const BRect &rect, RGBColor &color);
virtual void FillPatternRect(const BRect &rect, const DrawData *d);
virtual void StrokeSolidLine(const BPoint &start, const BPoint &end, RGBColor &color);
virtual void StrokePatternLine(const BPoint &start, const BPoint &end, const DrawData *d);
virtual void StrokeSolidRect(const BRect &rect, RGBColor &color);
BBitmap *framebuffer;
BView *drawview;