Added prototype #7 and test application to tree
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@1863 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -0,0 +1,38 @@
|
|||||||
|
#ifndef COLORSET_H_
|
||||||
|
#define COLORSET_H_
|
||||||
|
|
||||||
|
#include "RGBColor.h"
|
||||||
|
|
||||||
|
class ColorSet
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
ColorSet(void);
|
||||||
|
ColorSet(const ColorSet &cs);
|
||||||
|
ColorSet & operator=(const ColorSet &cs);
|
||||||
|
void SetColors(const ColorSet &cs);
|
||||||
|
void PrintToStream(void);
|
||||||
|
|
||||||
|
RGBColor panel_background,
|
||||||
|
panel_text,
|
||||||
|
document_background,
|
||||||
|
document_text,
|
||||||
|
control_background,
|
||||||
|
control_text,
|
||||||
|
control_border,
|
||||||
|
control_highlight,
|
||||||
|
tooltip_background,
|
||||||
|
tooltip_text,
|
||||||
|
menu_background,
|
||||||
|
menu_selected_background,
|
||||||
|
menu_text,
|
||||||
|
menu_selected_text,
|
||||||
|
menu_separator_high,
|
||||||
|
menu_separator_low,
|
||||||
|
menu_triggers,
|
||||||
|
window_tab,
|
||||||
|
window_tab_text,
|
||||||
|
keyboard_navigation,
|
||||||
|
desktop;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,486 @@
|
|||||||
|
#include <String.h>
|
||||||
|
#include <Directory.h>
|
||||||
|
#include <Entry.h>
|
||||||
|
#include <Path.h>
|
||||||
|
#include <File.h>
|
||||||
|
#include <Message.h>
|
||||||
|
#include <String.h>
|
||||||
|
#include "FontFamily.h"
|
||||||
|
#include "FontServer.h"
|
||||||
|
#include "ServerFont.h"
|
||||||
|
#include "ServerProtocol.h"
|
||||||
|
|
||||||
|
//#define DEBUG_FONTSERVER
|
||||||
|
//#define DEBUG_SCANDIR
|
||||||
|
|
||||||
|
#ifdef DEBUG_FONTSERVER
|
||||||
|
#include <stdio.h>
|
||||||
|
#else
|
||||||
|
#ifdef DEBUG_SCANDIR
|
||||||
|
#include <stdio.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
FTC_Manager ftmanager;
|
||||||
|
FT_Library ftlib;
|
||||||
|
FontServer *fontserver;
|
||||||
|
|
||||||
|
static FT_Error face_requester(FTC_FaceID face_id, FT_Library library,
|
||||||
|
FT_Pointer request_data, FT_Face *aface)
|
||||||
|
{
|
||||||
|
CachedFace face = (CachedFace) face_id;
|
||||||
|
return FT_New_Face(ftlib,face->file_path.String(),face->face_index,aface);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
FontServer::FontServer(void)
|
||||||
|
{
|
||||||
|
lock=create_sem(1,"fontserver_lock");
|
||||||
|
init=(FT_Init_FreeType(&ftlib)==0)?true:false;
|
||||||
|
|
||||||
|
/*
|
||||||
|
Fire up the font caching subsystem.
|
||||||
|
The three zeros tell FreeType to use the defaults, which are 2 faces,
|
||||||
|
4 face sizes, and a maximum of 200000 bytes. I will probably change
|
||||||
|
these numbers in the future to maximize performance for your "average"
|
||||||
|
application.
|
||||||
|
*/
|
||||||
|
if(FTC_Manager_New(ftlib,0,0,0,&face_requester,NULL,&ftmanager)!=0
|
||||||
|
&& init)
|
||||||
|
init=false;
|
||||||
|
|
||||||
|
families=new BList(0);
|
||||||
|
plain=NULL;
|
||||||
|
bold=NULL;
|
||||||
|
fixed=NULL;
|
||||||
|
|
||||||
|
#ifdef DEBUG_FONTSERVER
|
||||||
|
if(!init)
|
||||||
|
printf("Couldn't initialize FreeType library\n");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
FontServer::~FontServer(void)
|
||||||
|
{
|
||||||
|
delete_sem(lock);
|
||||||
|
delete families;
|
||||||
|
FTC_Manager_Done(ftmanager);
|
||||||
|
FT_Done_FreeType(ftlib);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FontServer::Lock(void)
|
||||||
|
{
|
||||||
|
acquire_sem(lock);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FontServer::Unlock(void)
|
||||||
|
{
|
||||||
|
release_sem(lock);
|
||||||
|
}
|
||||||
|
|
||||||
|
int32 FontServer::CountFamilies(void)
|
||||||
|
{
|
||||||
|
if(init)
|
||||||
|
return families->CountItems();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32 FontServer::CountStyles(const char *family)
|
||||||
|
{
|
||||||
|
FontFamily *f=_FindFamily(family);
|
||||||
|
if(f)
|
||||||
|
{
|
||||||
|
return f->CountStyles();
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void FontServer::RemoveFamily(const char *family)
|
||||||
|
{
|
||||||
|
FontFamily *f=_FindFamily(family);
|
||||||
|
if(f)
|
||||||
|
{
|
||||||
|
families->RemoveItem(f);
|
||||||
|
delete f;
|
||||||
|
}
|
||||||
|
#ifdef DEBUG_FONTSERVER
|
||||||
|
else
|
||||||
|
printf("FontServer::RemoveFamily(): Couldn't remove %s\n",family);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
FontFamily *FontServer::_FindFamily(const char *name)
|
||||||
|
{
|
||||||
|
if(!init)
|
||||||
|
return NULL;
|
||||||
|
int32 count=families->CountItems(), i;
|
||||||
|
FontFamily *family;
|
||||||
|
for(i=0; i<count; i++)
|
||||||
|
{
|
||||||
|
family=(FontFamily*)families->ItemAt(i);
|
||||||
|
if(strcmp(family->GetName(),name)==0)
|
||||||
|
return family;
|
||||||
|
}
|
||||||
|
//#ifdef DEBUG_FONTSERVER
|
||||||
|
//printf("FontServer::_FindFamily(): Couldn't find %s\n",name);
|
||||||
|
//#endif
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
status_t FontServer::ScanDirectory(const char *fontspath)
|
||||||
|
{
|
||||||
|
// This bad boy does all the real work. It loads each entry in the
|
||||||
|
// directory. If a valid font file, it adds both the family and the style.
|
||||||
|
// Both family and style are stored internally as BStrings. Once everything
|
||||||
|
|
||||||
|
#ifdef DEBUG_SCANDIR
|
||||||
|
printf("FontServer::ScanDirectory(%s)\n",fontspath);
|
||||||
|
#endif
|
||||||
|
BDirectory dir;
|
||||||
|
BEntry entry;
|
||||||
|
BPath path;
|
||||||
|
entry_ref ref;
|
||||||
|
status_t stat;
|
||||||
|
int32 refcount,i, validcount=0;
|
||||||
|
FT_Face face;
|
||||||
|
FT_Error error;
|
||||||
|
FT_CharMap charmap;
|
||||||
|
FontFamily *family;
|
||||||
|
// int32 familycount;
|
||||||
|
|
||||||
|
stat=dir.SetTo(fontspath);
|
||||||
|
if(stat!=B_OK)
|
||||||
|
{
|
||||||
|
#ifdef DEBUG_SCANDIR
|
||||||
|
printf("FontServer::ScanDirectory(): couldn't open path\n");
|
||||||
|
#endif
|
||||||
|
return stat;
|
||||||
|
}
|
||||||
|
refcount=dir.CountEntries();
|
||||||
|
#ifdef DEBUG_SCANDIR
|
||||||
|
printf("FontServer::ScanDirectory(): %ld entries\n",refcount);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
for(i=0;i<refcount;i++)
|
||||||
|
{
|
||||||
|
if(dir.GetNextEntry(&entry)==B_ENTRY_NOT_FOUND)
|
||||||
|
{
|
||||||
|
#ifdef DEBUG_SCANDIR
|
||||||
|
printf("FontServer::ScanDirectory(): ran out of entries\n");
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
stat=entry.GetPath(&path);
|
||||||
|
if(stat!=B_OK)
|
||||||
|
{
|
||||||
|
#ifdef DEBUG_SCANDIR
|
||||||
|
if(stat==B_NO_INIT)
|
||||||
|
printf("FontServer::ScanDirectory(): BEntry not initialized\n");
|
||||||
|
if(stat==B_BUSY)
|
||||||
|
printf("FontServer::ScanDirectory(): BEntry busy\n");
|
||||||
|
#endif
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
error=FT_New_Face(ftlib,path.Path(),0,&face);
|
||||||
|
|
||||||
|
if (error!=0)
|
||||||
|
{
|
||||||
|
#ifdef DEBUG_SCANDIR
|
||||||
|
printf("FontServer::ScanDirectory(): FreeType couldn't load %s\n", path.Path());
|
||||||
|
#endif
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
charmap=_GetSupportedCharmap(face);
|
||||||
|
if(!charmap)
|
||||||
|
{
|
||||||
|
#ifdef DEBUG_SCANDIR
|
||||||
|
printf("FontServer::ScanDirectory(): %s has no supported charmaps\n", path.Path());
|
||||||
|
#endif
|
||||||
|
FT_Done_Face(face);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
face->charmap=charmap;
|
||||||
|
|
||||||
|
family=_FindFamily(face->family_name);
|
||||||
|
|
||||||
|
if(!family)
|
||||||
|
{
|
||||||
|
family=new FontFamily(face->family_name);
|
||||||
|
families->AddItem(family);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(family->HasStyle(face->style_name))
|
||||||
|
{
|
||||||
|
#ifdef DEBUG_SCANDIR
|
||||||
|
printf("FontServer::ScanDirectory(): %s : %s already loaded\n", face->family_name,face->style_name);
|
||||||
|
#endif
|
||||||
|
FT_Done_Face(face);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Has vertical metrics?
|
||||||
|
#ifdef DEBUG_SCANDIR
|
||||||
|
if(FT_HAS_VERTICAL(face))
|
||||||
|
printf("%s : %s has vertical metrics\n",face->family_name, face->style_name);
|
||||||
|
#endif
|
||||||
|
family->AddStyle(path.Path(),face);
|
||||||
|
validcount++;
|
||||||
|
|
||||||
|
#ifdef DEBUG_SCANDIR
|
||||||
|
printf( "FontServer::ScanDirectory: Added %s : %s\n", face->family_name, face->style_name);
|
||||||
|
if(face->num_fixed_sizes>0)
|
||||||
|
{
|
||||||
|
for(int32 j=0;j<face->num_fixed_sizes;++j)
|
||||||
|
printf( " Fixed size #%ld : %dx%d\n", j, face->available_sizes[j].width, face->available_sizes[j].height );
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
FT_Done_Face(face);
|
||||||
|
} // end for(i<refcount)
|
||||||
|
|
||||||
|
#ifdef DEBUG_SCANDIR
|
||||||
|
printf("Directory %s contains %ld supported fonts\n", fontspath, validcount);
|
||||||
|
#endif
|
||||||
|
dir.Unset();
|
||||||
|
|
||||||
|
// This step is in the AtheOS code, but I doubt it will be necessary here
|
||||||
|
// because of implementation differences between this and AtheOS.
|
||||||
|
|
||||||
|
// cull empty families from family list
|
||||||
|
/* familycount=families->CountItems();
|
||||||
|
for(i=0;i<familycount;i++)
|
||||||
|
{
|
||||||
|
family=(FontFamily*)families->ItemAt(i);
|
||||||
|
if(family)
|
||||||
|
{
|
||||||
|
if(family->CountStyles()<1)
|
||||||
|
{
|
||||||
|
#ifdef DEBUG_SCANDIR
|
||||||
|
printf("FontServer::ScanDirectory(): deleting empty family %s\n", family->GetName());
|
||||||
|
#endif
|
||||||
|
families->RemoveItem(family);
|
||||||
|
delete family;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
need_update=true;
|
||||||
|
return B_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
FT_CharMap FontServer::_GetSupportedCharmap(const FT_Face &face)
|
||||||
|
{
|
||||||
|
int32 i;
|
||||||
|
FT_CharMap charmap;
|
||||||
|
for(i=0; i< face->num_charmaps; i++)
|
||||||
|
{
|
||||||
|
charmap=face->charmaps[i];
|
||||||
|
switch(charmap->platform_id)
|
||||||
|
{
|
||||||
|
case 3:
|
||||||
|
{
|
||||||
|
// if Windows Symbol or Windows Unicode
|
||||||
|
if(charmap->encoding_id==0 || charmap->encoding_id==1)
|
||||||
|
return charmap;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 1:
|
||||||
|
{
|
||||||
|
// if Apple Unicode
|
||||||
|
if(charmap->encoding_id==0)
|
||||||
|
return charmap;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 0:
|
||||||
|
{
|
||||||
|
// if Apple Roman
|
||||||
|
if(charmap->encoding_id==0)
|
||||||
|
return charmap;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
#ifdef DEBUG_SCANDIR
|
||||||
|
printf("Font %s:%s has unknown platform id %d\n",face->family_name,face->style_name, charmap->platform_id);
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
This saves all family names and styles to the file
|
||||||
|
/boot/home/config/app_server/fontlist as a flattened BMessage
|
||||||
|
|
||||||
|
This operation is not done very often because the access to disk adds a significant
|
||||||
|
performance hit.
|
||||||
|
|
||||||
|
The format for storage consists of two things: an array of strings with the name 'family'
|
||||||
|
and a number of small string arrays which have the name of the font family. These are
|
||||||
|
the style lists.
|
||||||
|
|
||||||
|
Additionally, any fonts which have bitmap strikes contained in them or any fonts which
|
||||||
|
are fixed-width are named in the arrays 'tuned' and 'fixed'
|
||||||
|
|
||||||
|
*/
|
||||||
|
void FontServer::SaveList(void)
|
||||||
|
{
|
||||||
|
#ifdef DEBUG_FONTSERVER
|
||||||
|
printf("FontServer::SaveList()\n");
|
||||||
|
#endif
|
||||||
|
int32 famcount=0, stycount=0,i=0,j=0;
|
||||||
|
FontFamily *fam;
|
||||||
|
FontStyle *sty;
|
||||||
|
BMessage fontmsg, familymsg('FONT');
|
||||||
|
BString famname, styname, extraname;
|
||||||
|
bool fixed,tuned;
|
||||||
|
|
||||||
|
famcount=families->CountItems();
|
||||||
|
for(i=0; i<famcount; i++)
|
||||||
|
{
|
||||||
|
fam=(FontFamily*)families->ItemAt(i);
|
||||||
|
fixed=false;
|
||||||
|
tuned=false;
|
||||||
|
if(!fam)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
famname=fam->GetName();
|
||||||
|
|
||||||
|
// Add the family to the message
|
||||||
|
familymsg.AddString("name",famname);
|
||||||
|
|
||||||
|
stycount=fam->CountStyles();
|
||||||
|
for(j=0;j<stycount;j++)
|
||||||
|
{
|
||||||
|
styname.SetTo(fam->GetStyle(j));
|
||||||
|
if(styname.CountChars()>0)
|
||||||
|
{
|
||||||
|
// Add to list
|
||||||
|
familymsg.AddString("styles", styname);
|
||||||
|
|
||||||
|
// Check to see if it has prerendered strikes (has "tuned" fonts)
|
||||||
|
sty=fam->GetStyle(styname.String());
|
||||||
|
if(sty->HasTuned() && sty->IsScalable())
|
||||||
|
tuned=true;
|
||||||
|
|
||||||
|
// Check to see if it is fixed-width
|
||||||
|
if(sty->IsFixedWidth())
|
||||||
|
fixed=true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(tuned)
|
||||||
|
familymsg.AddBool("tuned",true);
|
||||||
|
if(fixed)
|
||||||
|
familymsg.AddBool("fixed",true);
|
||||||
|
|
||||||
|
fontmsg.AddMessage("family",&familymsg);
|
||||||
|
#ifdef DEBUG_FONTSERVER
|
||||||
|
familymsg.PrintToStream();
|
||||||
|
#endif
|
||||||
|
familymsg.MakeEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
BFile file(SERVER_FONT_LIST,B_READ_WRITE | B_CREATE_FILE | B_ERASE_FILE);
|
||||||
|
if(file.InitCheck()==B_OK)
|
||||||
|
fontmsg.Flatten(&file);
|
||||||
|
#ifdef DEBUG_FONTSERVER
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("FontServer::SaveList(): Couldn't open %s for write\n",SERVER_FONT_LIST);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
FontStyle *FontServer::GetStyle(font_family family, font_style face)
|
||||||
|
{
|
||||||
|
FontFamily *ffam=_FindFamily(family);
|
||||||
|
|
||||||
|
if(ffam)
|
||||||
|
{
|
||||||
|
FontStyle *fsty=ffam->GetStyle(face);
|
||||||
|
return fsty;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ServerFont *FontServer::GetSystemPlain(void)
|
||||||
|
{
|
||||||
|
if(plain)
|
||||||
|
{
|
||||||
|
ServerFont *f=new ServerFont(*plain);
|
||||||
|
return f;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ServerFont *FontServer::GetSystemBold(void)
|
||||||
|
{
|
||||||
|
if(bold)
|
||||||
|
{
|
||||||
|
ServerFont *f=new ServerFont(*bold);
|
||||||
|
return f;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ServerFont *FontServer::GetSystemFixed(void)
|
||||||
|
{
|
||||||
|
if(fixed)
|
||||||
|
{
|
||||||
|
ServerFont *f=new ServerFont(*fixed);
|
||||||
|
return f;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool FontServer::SetSystemPlain(const char *family, const char *style, float size)
|
||||||
|
{
|
||||||
|
FontFamily *fam=_FindFamily(family);
|
||||||
|
if(!fam)
|
||||||
|
return false;
|
||||||
|
FontStyle *sty=fam->GetStyle(style);
|
||||||
|
if(!sty)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if(plain)
|
||||||
|
delete plain;
|
||||||
|
plain=sty->Instantiate(size);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool FontServer::SetSystemBold(const char *family, const char *style, float size)
|
||||||
|
{
|
||||||
|
FontFamily *fam=_FindFamily(family);
|
||||||
|
if(!fam)
|
||||||
|
return false;
|
||||||
|
FontStyle *sty=fam->GetStyle(style);
|
||||||
|
if(!sty)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if(bold)
|
||||||
|
delete bold;
|
||||||
|
bold=sty->Instantiate(size);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool FontServer::SetSystemFixed(const char *family, const char *style, float size)
|
||||||
|
{
|
||||||
|
FontFamily *fam=_FindFamily(family);
|
||||||
|
if(!fam)
|
||||||
|
return false;
|
||||||
|
FontStyle *sty=fam->GetStyle(style);
|
||||||
|
if(!sty)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if(fixed)
|
||||||
|
delete fixed;
|
||||||
|
fixed=sty->Instantiate(size);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,100 @@
|
|||||||
|
#ifndef _SCREENDRIVER_H_
|
||||||
|
#define _SCREENDRIVER_H_
|
||||||
|
|
||||||
|
#include <Application.h>
|
||||||
|
#include <WindowScreen.h>
|
||||||
|
#include <View.h>
|
||||||
|
#include <GraphicsCard.h>
|
||||||
|
#include <Message.h>
|
||||||
|
#include <OS.h>
|
||||||
|
#include <Locker.h>
|
||||||
|
#include <Region.h> // for clipping_rect definition
|
||||||
|
#include <Bitmap.h>
|
||||||
|
#include "DisplayDriver.h"
|
||||||
|
|
||||||
|
class VDWindow;
|
||||||
|
class ServerCursor;
|
||||||
|
class ServerBitmap;
|
||||||
|
class RGBColor;
|
||||||
|
class PortLink;
|
||||||
|
|
||||||
|
|
||||||
|
class FrameBuffer : public BWindowScreen
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
FrameBuffer(const char *title, uint32 space, status_t *st,bool debug);
|
||||||
|
~FrameBuffer(void);
|
||||||
|
void ScreenConnected(bool connected);
|
||||||
|
void MessageReceived(BMessage *msg);
|
||||||
|
bool IsConnected(void) const { return is_connected; }
|
||||||
|
bool QuitRequested(void);
|
||||||
|
|
||||||
|
graphics_card_info gcinfo;
|
||||||
|
protected:
|
||||||
|
bool is_connected;
|
||||||
|
PortLink *serverlink;
|
||||||
|
BPoint mousepos;
|
||||||
|
int32 buttons;
|
||||||
|
};
|
||||||
|
|
||||||
|
class ScreenDriver : public DisplayDriver
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
ScreenDriver(void);
|
||||||
|
~ScreenDriver(void);
|
||||||
|
|
||||||
|
bool Initialize(void);
|
||||||
|
void Shutdown(void);
|
||||||
|
|
||||||
|
// Settings functions
|
||||||
|
// virtual void CopyBits(BRect src, BRect dest);
|
||||||
|
virtual void DrawBitmap(ServerBitmap *bmp, BRect src, BRect dest);
|
||||||
|
// virtual void DrawChar(char c, BPoint pt);
|
||||||
|
// virtual void DrawPicture(SPicture *pic, BPoint pt);
|
||||||
|
// virtual void DrawString(const char *string, int32 length, BPoint pt, LayerData *d, escapement_delta *delta=NULL);
|
||||||
|
|
||||||
|
// virtual void FillArc(BRect r, float angle, float span, LayerData *d, int8 *pat);
|
||||||
|
// virtual void FillBezier(BPoint *pts, LayerData *d, int8 *pat);
|
||||||
|
virtual void FillEllipse(BRect r, LayerData *d, int8 *pat);
|
||||||
|
// virtual void FillPolygon(BPoint *ptlist, int32 numpts, BRect rect, LayerData *d, int8 *pat);
|
||||||
|
virtual void FillRect(BRect r, LayerData *d, int8 *pat);
|
||||||
|
virtual void FillRoundRect(BRect r, float xrad, float yrad, LayerData *d, int8 *pat);
|
||||||
|
// virtual void FillShape(SShape *sh, LayerData *d, int8 *pat);
|
||||||
|
virtual void FillTriangle(BPoint *pts, BRect r, LayerData *d, int8 *pat);
|
||||||
|
|
||||||
|
virtual void HideCursor(void);
|
||||||
|
virtual void MoveCursorTo(float x, float y);
|
||||||
|
virtual void InvertRect(BRect r);
|
||||||
|
virtual void ShowCursor(void);
|
||||||
|
virtual void ObscureCursor(void);
|
||||||
|
// virtual void SetCursor(ServerBitmap *cursor);
|
||||||
|
|
||||||
|
// virtual void StrokeArc(BRect r, float angle, float span, LayerData *d, int8 *pat);
|
||||||
|
// virtual void StrokeBezier(BPoint *pts, LayerData *d, int8 *pat);
|
||||||
|
virtual void StrokeEllipse(BRect r, 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 StrokeRect(BRect r, LayerData *d, int8 *pat);
|
||||||
|
virtual void StrokeRoundRect(BRect r, float xrad, float yrad, LayerData *d, int8 *pat);
|
||||||
|
// virtual void StrokeShape(SShape *sh, LayerData *d, int8 *pat);
|
||||||
|
virtual void StrokeTriangle(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);
|
||||||
|
protected:
|
||||||
|
void BlitBitmap(ServerBitmap *sourcebmp, BRect sourcerect, BRect destrect);
|
||||||
|
void SetPixelPattern(int x, int y, uint8 *pattern, uint8 patternindex);
|
||||||
|
void Line(BPoint start, BPoint end, LayerData *d, int8 *pat);
|
||||||
|
void HLine(int32 x1, int32 x2, int32 y, RGBColor color);
|
||||||
|
void SetPixel(int x, int y, RGBColor col);
|
||||||
|
void SetPixel32(int x, int y, rgb_color col);
|
||||||
|
void SetPixel16(int x, int y, uint16 col);
|
||||||
|
void SetPixel8(int x, int y, uint8 col);
|
||||||
|
FrameBuffer *fbuffer;
|
||||||
|
int hide_cursor;
|
||||||
|
ServerBitmap *cursor, *under_cursor;
|
||||||
|
int32 drawmode;
|
||||||
|
BRect cursorframe, oldcursorframe;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
#ifndef _SYSTEM_PALETTE_H_
|
||||||
|
#define _SYSTEM_PALETTE_H_
|
||||||
|
|
||||||
|
#include <GraphicsDefs.h>
|
||||||
|
|
||||||
|
void GenerateSystemPalette(rgb_color *palette);
|
||||||
|
extern rgb_color system_palette[];
|
||||||
|
|
||||||
|
#endif
|
||||||
Reference in New Issue
Block a user