(Theoretically) fixed the build
Replaced ServerCursor class with ServerBitmap use DisplayDriver updated ScreenDriver now does DrawString and DrawChar (!) and looks good Fixed stupid jamfile mistakes git-svn-id: file:///srv/svn/repos/haiku/trunk/current@1894 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -2,6 +2,7 @@
|
|||||||
#include <View.h>
|
#include <View.h>
|
||||||
#include "LayerData.h"
|
#include "LayerData.h"
|
||||||
#include "ColorUtils.h"
|
#include "ColorUtils.h"
|
||||||
|
#include "ColorSet.h"
|
||||||
#include "BeDecorator.h"
|
#include "BeDecorator.h"
|
||||||
#include "RGBColor.h"
|
#include "RGBColor.h"
|
||||||
#include "Desktop.h"
|
#include "Desktop.h"
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ int8 default_cursor[]={
|
|||||||
//--------------------GLOBALS-------------------------
|
//--------------------GLOBALS-------------------------
|
||||||
uint32 workspace_count, active_workspace;
|
uint32 workspace_count, active_workspace;
|
||||||
BList *desktop;
|
BList *desktop;
|
||||||
ServerCursor *startup_cursor;
|
ServerBitmap *startup_cursor;
|
||||||
Workspace *pactive_workspace;
|
Workspace *pactive_workspace;
|
||||||
DisplayDriver *gfxdriver;
|
DisplayDriver *gfxdriver;
|
||||||
int32 token_count=-1;
|
int32 token_count=-1;
|
||||||
@@ -145,9 +145,9 @@ printf("init_desktop(%d)\n",workspaces);
|
|||||||
workspace_count++;
|
workspace_count++;
|
||||||
|
|
||||||
// Instantiate and initialize display driver
|
// Instantiate and initialize display driver
|
||||||
// gfxdriver=new ViewDriver();
|
gfxdriver=new ViewDriver();
|
||||||
// gfxdriver=new SecondDriver();
|
// gfxdriver=new SecondDriver();
|
||||||
gfxdriver=new ScreenDriver();
|
// gfxdriver=new ScreenDriver();
|
||||||
gfxdriver->Initialize();
|
gfxdriver->Initialize();
|
||||||
|
|
||||||
workspacelock=new BLocker();
|
workspacelock=new BLocker();
|
||||||
@@ -194,8 +194,17 @@ printf("Driver %s\n", (gfxdriver->IsInitialized()==true)?"initialized":"NOT init
|
|||||||
// Clear the screen
|
// Clear the screen
|
||||||
pactive_workspace->toplayer->SetColor(RGBColor(80,85,152));
|
pactive_workspace->toplayer->SetColor(RGBColor(80,85,152));
|
||||||
// gfxdriver->Clear(pactive_workspace->toplayer->GetColor());
|
// gfxdriver->Clear(pactive_workspace->toplayer->GetColor());
|
||||||
startup_cursor=new ServerCursor(default_cursor);
|
|
||||||
gfxdriver->SetCursor(startup_cursor);
|
// CURSOR_ARROW
|
||||||
|
startup_cursor=new ServerBitmap('CURS',"CURSOR_DEFAULT");
|
||||||
|
if(!startup_cursor->InitCheck())
|
||||||
|
{
|
||||||
|
// Apparently, something is screwed up beyond recognition in loading the cursor,
|
||||||
|
// so we'll put in one just so we have something usable.
|
||||||
|
delete startup_cursor;
|
||||||
|
startup_cursor=new ServerBitmap(default_cursor);
|
||||||
|
}
|
||||||
|
gfxdriver->SetCursor(startup_cursor, BPoint(0,0));
|
||||||
gfxdriver->ShowCursor();
|
gfxdriver->ShowCursor();
|
||||||
|
|
||||||
pactive_workspace->toplayer->SetVisible(true);
|
pactive_workspace->toplayer->SetVisible(true);
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
#include "DisplayDriver.h"
|
#include "DisplayDriver.h"
|
||||||
#include "LayerData.h"
|
#include "LayerData.h"
|
||||||
#include "ServerCursor.h"
|
|
||||||
|
|
||||||
DisplayDriver::DisplayDriver(void)
|
DisplayDriver::DisplayDriver(void)
|
||||||
{
|
{
|
||||||
@@ -71,8 +70,19 @@ void DisplayDriver::ObscureCursor(void)
|
|||||||
SetCursorObscured(true);
|
SetCursorObscured(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DisplayDriver::SetCursor(ServerCursor *cursor)
|
void DisplayDriver::SetCursor(ServerBitmap *cursor, const BPoint &hotspot)
|
||||||
{
|
{
|
||||||
|
SetHotSpot(hotspot);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DisplayDriver::SetHotSpot(const BPoint &pt)
|
||||||
|
{
|
||||||
|
cursor_hotspot=pt;
|
||||||
|
}
|
||||||
|
|
||||||
|
BPoint DisplayDriver::GetHotSpot(void)
|
||||||
|
{
|
||||||
|
return cursor_hotspot;
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------
|
//---------------------------------------------------------
|
||||||
@@ -147,7 +157,7 @@ void DisplayDriver::SetCursorObscured(bool state)
|
|||||||
void DisplayDriver::Shutdown(void) {}
|
void DisplayDriver::Shutdown(void) {}
|
||||||
void DisplayDriver::CopyBits(BRect src, BRect dest) {}
|
void DisplayDriver::CopyBits(BRect src, BRect dest) {}
|
||||||
void DisplayDriver::DrawBitmap(ServerBitmap *bmp, BRect src, BRect dest) {}
|
void DisplayDriver::DrawBitmap(ServerBitmap *bmp, BRect src, BRect dest) {}
|
||||||
void DisplayDriver::DrawChar(char c, BPoint pt) {}
|
void DisplayDriver::DrawChar(char c, BPoint pt, LayerData *d) {}
|
||||||
//void DisplayDriver::DrawPicture(SPicture *pic, BPoint pt) {}
|
//void DisplayDriver::DrawPicture(SPicture *pic, BPoint pt) {}
|
||||||
void DisplayDriver::DrawString(const char *string, int32 length, BPoint pt, LayerData *d, escapement_delta *delta=NULL) {}
|
void DisplayDriver::DrawString(const char *string, int32 length, BPoint pt, LayerData *d, escapement_delta *delta=NULL) {}
|
||||||
|
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ public:
|
|||||||
virtual void Shutdown(void);
|
virtual void Shutdown(void);
|
||||||
virtual void CopyBits(BRect src, BRect dest);
|
virtual void CopyBits(BRect src, BRect dest);
|
||||||
virtual void DrawBitmap(ServerBitmap *bmp, BRect src, BRect dest);
|
virtual void DrawBitmap(ServerBitmap *bmp, BRect src, BRect dest);
|
||||||
virtual void DrawChar(char c, BPoint pt);
|
virtual void DrawChar(char c, BPoint pt, LayerData *d);
|
||||||
// virtual void DrawPicture(SPicture *pic, 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 DrawString(const char *string, int32 length, BPoint pt, LayerData *d, escapement_delta *delta=NULL);
|
||||||
|
|
||||||
@@ -85,7 +85,7 @@ public:
|
|||||||
virtual void InvertRect(BRect r);
|
virtual void InvertRect(BRect r);
|
||||||
virtual void ShowCursor(void);
|
virtual void ShowCursor(void);
|
||||||
virtual void ObscureCursor(void);
|
virtual void ObscureCursor(void);
|
||||||
virtual void SetCursor(ServerCursor *cursor);
|
virtual void SetCursor(ServerBitmap *cursor, const BPoint &hotspot);
|
||||||
|
|
||||||
virtual void StrokeArc(BRect r, float angle, float span, LayerData *d, int8 *pat);
|
virtual void StrokeArc(BRect r, float angle, float span, LayerData *d, int8 *pat);
|
||||||
virtual void StrokeBezier(BPoint *pts, LayerData *d, int8 *pat);
|
virtual void StrokeBezier(BPoint *pts, LayerData *d, int8 *pat);
|
||||||
@@ -104,6 +104,8 @@ public:
|
|||||||
uint16 GetHeight(void);
|
uint16 GetHeight(void);
|
||||||
uint16 GetWidth(void);
|
uint16 GetWidth(void);
|
||||||
int32 GetMode(void);
|
int32 GetMode(void);
|
||||||
|
void SetHotSpot(const BPoint &pt);
|
||||||
|
BPoint GetHotSpot(void);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void Lock(void);
|
void Lock(void);
|
||||||
@@ -126,6 +128,7 @@ private:
|
|||||||
drawing_mode drawmode;
|
drawing_mode drawmode;
|
||||||
int32 is_cursor_hidden;
|
int32 is_cursor_hidden;
|
||||||
bool is_cursor_obscured, cursor_state_changed;
|
bool is_cursor_obscured, cursor_state_changed;
|
||||||
|
BPoint cursor_hotspot;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -17,11 +17,14 @@ FontStyle::FontStyle(const char *filepath, FT_Face face)
|
|||||||
has_kerning=(face->face_flags & FT_FACE_FLAG_KERNING)?true:false;
|
has_kerning=(face->face_flags & FT_FACE_FLAG_KERNING)?true:false;
|
||||||
glyphcount=face->num_glyphs;
|
glyphcount=face->num_glyphs;
|
||||||
charmapcount=face->num_charmaps;
|
charmapcount=face->num_charmaps;
|
||||||
|
path=new BString(filepath);
|
||||||
|
fbounds.Set(0,0,0,0);
|
||||||
}
|
}
|
||||||
|
|
||||||
FontStyle::~FontStyle(void)
|
FontStyle::~FontStyle(void)
|
||||||
{
|
{
|
||||||
delete name;
|
delete name;
|
||||||
|
delete path;
|
||||||
delete cachedface;
|
delete cachedface;
|
||||||
|
|
||||||
// Mark all instances as Free here
|
// Mark all instances as Free here
|
||||||
@@ -42,7 +45,7 @@ FontStyle::~FontStyle(void)
|
|||||||
|
|
||||||
const char *FontStyle::Style(void)
|
const char *FontStyle::Style(void)
|
||||||
{
|
{
|
||||||
return name->String();
|
return path->String();
|
||||||
}
|
}
|
||||||
|
|
||||||
FT_Face FontStyle::GetFace(void)
|
FT_Face FontStyle::GetFace(void)
|
||||||
@@ -51,6 +54,11 @@ FT_Face FontStyle::GetFace(void)
|
|||||||
return (FTC_Manager_Lookup_Face(ftmanager,cachedface,&f)!=0)?f:NULL;
|
return (FTC_Manager_Lookup_Face(ftmanager,cachedface,&f)!=0)?f:NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *FontStyle::GetPath(void)
|
||||||
|
{
|
||||||
|
return path->String();
|
||||||
|
}
|
||||||
|
|
||||||
int16 FontStyle::ConvertToUnicode(uint16 c)
|
int16 FontStyle::ConvertToUnicode(uint16 c)
|
||||||
{
|
{
|
||||||
FT_Face f;
|
FT_Face f;
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
#define FONT_FAMILY_H_
|
#define FONT_FAMILY_H_
|
||||||
|
|
||||||
#include <String.h>
|
#include <String.h>
|
||||||
|
#include <Rect.h>
|
||||||
#include <Font.h>
|
#include <Font.h>
|
||||||
#include <List.h>
|
#include <List.h>
|
||||||
#include <ft2build.h>
|
#include <ft2build.h>
|
||||||
@@ -49,6 +50,7 @@ public:
|
|||||||
const char *Style(void);
|
const char *Style(void);
|
||||||
FontFamily *Family(void) { return family; }
|
FontFamily *Family(void) { return family; }
|
||||||
FT_Face GetFace(void);
|
FT_Face GetFace(void);
|
||||||
|
const char *GetPath(void);
|
||||||
int16 ConvertToUnicode(uint16 c);
|
int16 ConvertToUnicode(uint16 c);
|
||||||
protected:
|
protected:
|
||||||
friend FontFamily;
|
friend FontFamily;
|
||||||
@@ -59,6 +61,7 @@ protected:
|
|||||||
bool is_fixedwidth, is_scalable, has_kerning, has_bitmaps;
|
bool is_fixedwidth, is_scalable, has_kerning, has_bitmaps;
|
||||||
CachedFace cachedface;
|
CachedFace cachedface;
|
||||||
uint8 format;
|
uint8 format;
|
||||||
|
BRect fbounds;
|
||||||
};
|
};
|
||||||
|
|
||||||
class FontFamily : public SharedObject
|
class FontFamily : public SharedObject
|
||||||
|
|||||||
@@ -1,53 +0,0 @@
|
|||||||
#ifndef FONTINSTANCE_H_
|
|
||||||
#define FONTINSTANCE_H_
|
|
||||||
|
|
||||||
class FontStyle;
|
|
||||||
|
|
||||||
#include <Font.h>
|
|
||||||
|
|
||||||
class FontInstance
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
FontInstance(void);
|
|
||||||
FontInstance(float size, float rotation, float shear);
|
|
||||||
~FontInstance(void);
|
|
||||||
|
|
||||||
void SetProperties(float size=12.0, float rotation=0.0, float shear=90.0);
|
|
||||||
void SetSpacing(uint8 spacing);
|
|
||||||
void SetFlags(int32 flags);
|
|
||||||
void SetFace(int32 face);
|
|
||||||
void SetSize(float size);
|
|
||||||
void SetRotation(float rotation);
|
|
||||||
void SetShear(float shear);
|
|
||||||
void SetEncoding(uint8 encoding);
|
|
||||||
|
|
||||||
unicode_block Blocks(void);
|
|
||||||
BRect BoundingBox(void);
|
|
||||||
float Rotation(void) { return fRotation; }
|
|
||||||
float Shear(void) { return fShear; }
|
|
||||||
float Size(void) { return fSize; }
|
|
||||||
uint8 Spacing(void) { return fSpacing; }
|
|
||||||
uint8 Encoding(void) { return fEncoding; }
|
|
||||||
font_direction Direction(void) { return fDirection; }
|
|
||||||
FontStyle *Style(void) { return fStyle; }
|
|
||||||
|
|
||||||
void Height(font_height *height) { *height=fHeight; }
|
|
||||||
|
|
||||||
float fSize,
|
|
||||||
fRotation,
|
|
||||||
fShear;
|
|
||||||
|
|
||||||
int32 fToken,
|
|
||||||
fFlags,
|
|
||||||
fFace;
|
|
||||||
|
|
||||||
uint8 fEncoding,
|
|
||||||
fSpacing;
|
|
||||||
|
|
||||||
font_height fHeight;
|
|
||||||
font_direction fDirection;
|
|
||||||
|
|
||||||
FontStyle *fStyle;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -366,6 +366,9 @@ void FontServer::SaveList(void)
|
|||||||
|
|
||||||
// Check to see if it has prerendered strikes (has "tuned" fonts)
|
// Check to see if it has prerendered strikes (has "tuned" fonts)
|
||||||
sty=fam->GetStyle(styname.String());
|
sty=fam->GetStyle(styname.String());
|
||||||
|
if(!sty)
|
||||||
|
continue;
|
||||||
|
|
||||||
if(sty->HasTuned() && sty->IsScalable())
|
if(sty->HasTuned() && sty->IsScalable())
|
||||||
tuned=true;
|
tuned=true;
|
||||||
|
|
||||||
|
|||||||
@@ -5,8 +5,9 @@
|
|||||||
#include <List.h>
|
#include <List.h>
|
||||||
#include <SupportDefs.h>
|
#include <SupportDefs.h>
|
||||||
#include <Font.h>
|
#include <Font.h>
|
||||||
#include <freetype.h>
|
#include <ft2build.h>
|
||||||
#include <ftcache.h>
|
#include FT_FREETYPE_H
|
||||||
|
#include FT_CACHE_H
|
||||||
|
|
||||||
class FontFamily;
|
class FontFamily;
|
||||||
class FontStyle;
|
class FontStyle;
|
||||||
|
|||||||
@@ -4,8 +4,10 @@ UseFreeTypeHeaders ;
|
|||||||
|
|
||||||
Server OBAppServer :
|
Server OBAppServer :
|
||||||
# Misc. Sources
|
# Misc. Sources
|
||||||
|
Angle.cpp
|
||||||
BeDecorator.cpp
|
BeDecorator.cpp
|
||||||
ColorUtils.cc
|
ColorUtils.cc
|
||||||
|
ColorSet.cpp
|
||||||
DebugTools.cpp
|
DebugTools.cpp
|
||||||
Decorator.cpp
|
Decorator.cpp
|
||||||
PortLink.cpp
|
PortLink.cpp
|
||||||
@@ -18,7 +20,6 @@ Server OBAppServer :
|
|||||||
Layer.cpp
|
Layer.cpp
|
||||||
ServerApp.cpp
|
ServerApp.cpp
|
||||||
ServerBitmap.cpp
|
ServerBitmap.cpp
|
||||||
ServerCursor.cpp
|
|
||||||
ServerWindow.cpp
|
ServerWindow.cpp
|
||||||
WindowBorder.cpp
|
WindowBorder.cpp
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
#define LAYERDATA_H_
|
#define LAYERDATA_H_
|
||||||
|
|
||||||
#include <Point.h>
|
#include <Point.h>
|
||||||
|
#include <Font.h>
|
||||||
#include "RGBColor.h"
|
#include "RGBColor.h"
|
||||||
#include "ServerFont.h"
|
#include "ServerFont.h"
|
||||||
#include "FontServer.h"
|
#include "FontServer.h"
|
||||||
@@ -16,12 +17,16 @@ LayerData(void)
|
|||||||
pensize=1.0;
|
pensize=1.0;
|
||||||
penlocation.Set(0,0);
|
penlocation.Set(0,0);
|
||||||
draw_mode=B_OP_COPY;
|
draw_mode=B_OP_COPY;
|
||||||
|
blending_mode=B_ALPHA_OVERLAY;
|
||||||
|
alpha_mode=B_CONSTANT_ALPHA;
|
||||||
bitmap_background=NULL;
|
bitmap_background=NULL;
|
||||||
bitmap_overlay=NULL;
|
bitmap_overlay=NULL;
|
||||||
highcolor.SetColor(0,0,0,255);
|
highcolor.SetColor(0,0,0,255);
|
||||||
lowcolor.SetColor(255,255,255,255);
|
lowcolor.SetColor(255,255,255,255);
|
||||||
font=fontserver->GetSystemPlain();
|
font=fontserver->GetSystemPlain();
|
||||||
scale=1.0;
|
scale=1.0;
|
||||||
|
edelta.space=0;
|
||||||
|
edelta.nonspace=0;
|
||||||
}
|
}
|
||||||
~LayerData(void)
|
~LayerData(void)
|
||||||
{
|
{
|
||||||
@@ -34,11 +39,14 @@ LayerData(void)
|
|||||||
float pensize;
|
float pensize;
|
||||||
BPoint penlocation;
|
BPoint penlocation;
|
||||||
drawing_mode draw_mode;
|
drawing_mode draw_mode;
|
||||||
|
source_alpha alpha_mode;
|
||||||
|
alpha_function blending_mode;
|
||||||
ServerBitmap *bitmap_background;
|
ServerBitmap *bitmap_background;
|
||||||
ServerBitmap *bitmap_overlay;
|
ServerBitmap *bitmap_overlay;
|
||||||
RGBColor highcolor, lowcolor;
|
RGBColor highcolor, lowcolor;
|
||||||
ServerFont *font;
|
ServerFont *font;
|
||||||
float scale;
|
float scale;
|
||||||
|
escapement_delta edelta;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern int8 *solidhigh;
|
extern int8 *solidhigh;
|
||||||
|
|||||||
@@ -174,3 +174,15 @@ void RGBColor::PrintToStream(void)
|
|||||||
{
|
{
|
||||||
printf("RGBColor (%u,%u,%u,%u)\n", color32.red,color32.green,color32.blue,color32.alpha);
|
printf("RGBColor (%u,%u,%u,%u)\n", color32.red,color32.green,color32.blue,color32.alpha);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool RGBColor::operator==(const rgb_color &col)
|
||||||
|
{
|
||||||
|
return (color32.red==col.red && color32.green==col.green
|
||||||
|
&& color32.blue==col.blue)?true:false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool RGBColor::operator==(const RGBColor &col)
|
||||||
|
{
|
||||||
|
return (color32.red==col.color32.red && color32.green==col.color32.green
|
||||||
|
&& color32.blue==col.color32.blue)?true:false;
|
||||||
|
}
|
||||||
|
|||||||
@@ -26,6 +26,8 @@ public:
|
|||||||
RGBColor MakeBlendColor(RGBColor color, float position);
|
RGBColor MakeBlendColor(RGBColor color, float position);
|
||||||
RGBColor & operator=(const RGBColor &col);
|
RGBColor & operator=(const RGBColor &col);
|
||||||
RGBColor & operator=(rgb_color col);
|
RGBColor & operator=(rgb_color col);
|
||||||
|
bool operator==(const rgb_color &col);
|
||||||
|
bool operator==(const RGBColor &col);
|
||||||
protected:
|
protected:
|
||||||
rgb_color color32;
|
rgb_color color32;
|
||||||
uint16 color16;
|
uint16 color16;
|
||||||
|
|||||||
@@ -16,12 +16,15 @@
|
|||||||
to the video card
|
to the video card
|
||||||
Internal functions for doing graphics on the buffer
|
Internal functions for doing graphics on the buffer
|
||||||
*/
|
*/
|
||||||
|
#include "Angle.h"
|
||||||
#include "ScreenDriver.h"
|
#include "ScreenDriver.h"
|
||||||
#include "ServerProtocol.h"
|
#include "ServerProtocol.h"
|
||||||
#include "ServerBitmap.h"
|
#include "ServerBitmap.h"
|
||||||
|
#include "ServerCursor.h"
|
||||||
#include "SystemPalette.h"
|
#include "SystemPalette.h"
|
||||||
#include "ColorUtils.h"
|
#include "ColorUtils.h"
|
||||||
#include "PortLink.h"
|
#include "PortLink.h"
|
||||||
|
#include "FontFamily.h"
|
||||||
#include "RGBColor.h"
|
#include "RGBColor.h"
|
||||||
#include "DebugTools.h"
|
#include "DebugTools.h"
|
||||||
#include "LayerData.h"
|
#include "LayerData.h"
|
||||||
@@ -30,6 +33,7 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <String.h>
|
#include <String.h>
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
//#define DEBUG_DRIVER
|
//#define DEBUG_DRIVER
|
||||||
#define DEBUG_SERVER_EMU
|
#define DEBUG_SERVER_EMU
|
||||||
@@ -1051,8 +1055,8 @@ printf("ScreenDriver::ObscureCursor\n");
|
|||||||
BlitBitmap(under_cursor,under_cursor->Bounds(),oldcursorframe);
|
BlitBitmap(under_cursor,under_cursor->Bounds(),oldcursorframe);
|
||||||
Unlock();
|
Unlock();
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
void ScreenDriver::SetCursor(ServerBitmap *csr)
|
void ScreenDriver::SetCursor(ServerBitmap *csr, const BPoint &spot)
|
||||||
{
|
{
|
||||||
#ifdef DEBUG_DRIVER
|
#ifdef DEBUG_DRIVER
|
||||||
printf("ScreenDriver::SetCursor\n");
|
printf("ScreenDriver::SetCursor\n");
|
||||||
@@ -1074,6 +1078,11 @@ printf("ScreenDriver::SetCursor\n");
|
|||||||
cursor=new ServerBitmap(csr);
|
cursor=new ServerBitmap(csr);
|
||||||
under_cursor=new ServerBitmap(csr);
|
under_cursor=new ServerBitmap(csr);
|
||||||
|
|
||||||
|
if(cursor->Bounds().Contains(spot))
|
||||||
|
SetHotSpot(spot);
|
||||||
|
else
|
||||||
|
SetHotSpot(BPoint(0,0));
|
||||||
|
|
||||||
cursorframe.right=cursorframe.left+csr->Bounds().Width();
|
cursorframe.right=cursorframe.left+csr->Bounds().Width();
|
||||||
cursorframe.bottom=cursorframe.top+csr->Bounds().Height();
|
cursorframe.bottom=cursorframe.top+csr->Bounds().Height();
|
||||||
oldcursorframe=cursorframe;
|
oldcursorframe=cursorframe;
|
||||||
@@ -1085,7 +1094,7 @@ printf("ScreenDriver::SetCursor\n");
|
|||||||
|
|
||||||
Unlock();
|
Unlock();
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
void ScreenDriver::HLine(int32 x1, int32 x2, int32 y, RGBColor color)
|
void ScreenDriver::HLine(int32 x1, int32 x2, int32 y, RGBColor color)
|
||||||
{
|
{
|
||||||
// Internal function called from others in the driver
|
// Internal function called from others in the driver
|
||||||
@@ -1293,3 +1302,449 @@ void ScreenDriver::InvertRect(BRect r)
|
|||||||
}
|
}
|
||||||
Unlock();
|
Unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ScreenDriver::DrawChar(char c, BPoint pt, LayerData *d)
|
||||||
|
{
|
||||||
|
char st[2];
|
||||||
|
st[0]=c;
|
||||||
|
st[1]='\0';
|
||||||
|
DrawString(st,1,pt,d);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScreenDriver::DrawString(const char *string, int32 length, BPoint pt, LayerData *d, escapement_delta *edelta=NULL)
|
||||||
|
{
|
||||||
|
if(!string || !d || !d->font)
|
||||||
|
return;
|
||||||
|
|
||||||
|
pt.y--; // because of Be's backward compatibility hack
|
||||||
|
|
||||||
|
ServerFont *font=d->font;
|
||||||
|
FontStyle *style=font->Style();
|
||||||
|
|
||||||
|
if(!style)
|
||||||
|
return;
|
||||||
|
|
||||||
|
FT_Face face;
|
||||||
|
FT_GlyphSlot slot;
|
||||||
|
FT_Matrix rmatrix,smatrix;
|
||||||
|
FT_UInt glyph_index, previous=0;
|
||||||
|
FT_Vector pen,delta,space,nonspace;
|
||||||
|
int16 error=0;
|
||||||
|
int32 strlength,i;
|
||||||
|
Angle rotation(font->Rotation()), shear(font->Shear());
|
||||||
|
|
||||||
|
bool antialias=( (font->Size()<18 && font->Flags()& B_DISABLE_ANTIALIASING==0)
|
||||||
|
|| font->Flags()& B_FORCE_ANTIALIASING)?true:false;
|
||||||
|
|
||||||
|
// Originally, I thought to do this shear checking here, but it really should be
|
||||||
|
// done in BFont::SetShear()
|
||||||
|
float shearangle=shear.Value();
|
||||||
|
if(shearangle>135)
|
||||||
|
shearangle=135;
|
||||||
|
if(shearangle<45)
|
||||||
|
shearangle=45;
|
||||||
|
|
||||||
|
if(shearangle>90)
|
||||||
|
shear=90+((180-shearangle)*2);
|
||||||
|
else
|
||||||
|
shear=90-(90-shearangle)*2;
|
||||||
|
|
||||||
|
error=FT_New_Face(ftlib, style->GetPath(), 0, &face);
|
||||||
|
if(error)
|
||||||
|
{
|
||||||
|
printf("Couldn't create face object\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
slot=face->glyph;
|
||||||
|
|
||||||
|
bool use_kerning=FT_HAS_KERNING(face) && font->Spacing()==B_STRING_SPACING;
|
||||||
|
|
||||||
|
error=FT_Set_Char_Size(face, 0,int32(font->Size())*64,72,72);
|
||||||
|
if(error)
|
||||||
|
{
|
||||||
|
printf("Couldn't set character size - error 0x%x\n",error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// if we do any transformation, we do a call to FT_Set_Transform() here
|
||||||
|
|
||||||
|
// First, rotate
|
||||||
|
rmatrix.xx = (FT_Fixed)( rotation.Cosine()*0x10000);
|
||||||
|
rmatrix.xy = (FT_Fixed)(-rotation.Sine()*0x10000);
|
||||||
|
rmatrix.yx = (FT_Fixed)( rotation.Sine()*0x10000);
|
||||||
|
rmatrix.yy = (FT_Fixed)( rotation.Cosine()*0x10000);
|
||||||
|
|
||||||
|
// Next, shear
|
||||||
|
smatrix.xx = (FT_Fixed)(0x10000);
|
||||||
|
smatrix.xy = (FT_Fixed)(-shear.Cosine()*0x10000);
|
||||||
|
smatrix.yx = (FT_Fixed)(0);
|
||||||
|
smatrix.yy = (FT_Fixed)(0x10000);
|
||||||
|
|
||||||
|
FT_Matrix_Multiply(&rmatrix,&smatrix);
|
||||||
|
|
||||||
|
// Set up the increment value for escapement padding
|
||||||
|
space.x=int32(d->edelta.space * rotation.Cosine()*64);
|
||||||
|
space.y=int32(d->edelta.space * rotation.Sine()*64);
|
||||||
|
nonspace.x=int32(d->edelta.nonspace * rotation.Cosine()*64);
|
||||||
|
nonspace.y=int32(d->edelta.nonspace * rotation.Sine()*64);
|
||||||
|
|
||||||
|
// set the pen position in 26.6 cartesian space coordinates
|
||||||
|
pen.x=(int32)pt.x * 64;
|
||||||
|
pen.y=(int32)pt.y * 64;
|
||||||
|
|
||||||
|
slot=face->glyph;
|
||||||
|
|
||||||
|
|
||||||
|
strlength=strlen(string);
|
||||||
|
if(length<strlength)
|
||||||
|
strlength=length;
|
||||||
|
|
||||||
|
for(i=0;i<strlength;i++)
|
||||||
|
{
|
||||||
|
FT_Set_Transform(face,&smatrix,&pen);
|
||||||
|
|
||||||
|
// Handle escapement padding option
|
||||||
|
if((uint8)string[i]<=0x20)
|
||||||
|
{
|
||||||
|
pen.x+=space.x;
|
||||||
|
pen.y+=space.y;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pen.x+=nonspace.x;
|
||||||
|
pen.y+=nonspace.y;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// get kerning and move pen
|
||||||
|
if(use_kerning && previous && glyph_index)
|
||||||
|
{
|
||||||
|
FT_Get_Kerning(face, previous, glyph_index,ft_kerning_default, &delta);
|
||||||
|
pen.x+=delta.x;
|
||||||
|
pen.y+=delta.y;
|
||||||
|
}
|
||||||
|
|
||||||
|
error=FT_Load_Char(face,string[i],
|
||||||
|
((antialias)?FT_LOAD_RENDER:FT_LOAD_RENDER | FT_LOAD_MONOCHROME) );
|
||||||
|
|
||||||
|
if(!error)
|
||||||
|
{
|
||||||
|
if(antialias)
|
||||||
|
BlitGray2RGB32(&slot->bitmap,
|
||||||
|
BPoint(slot->bitmap_left,pt.y-(slot->bitmap_top-pt.y)), d);
|
||||||
|
else
|
||||||
|
BlitMono2RGB32(&slot->bitmap,
|
||||||
|
BPoint(slot->bitmap_left,pt.y-(slot->bitmap_top-pt.y)), d);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
printf("Couldn't load character %c\n", string[i]);
|
||||||
|
|
||||||
|
// increment pen position
|
||||||
|
pen.x+=slot->advance.x;
|
||||||
|
pen.y+=slot->advance.y;
|
||||||
|
previous=glyph_index;
|
||||||
|
}
|
||||||
|
FT_Done_Face(face);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScreenDriver::BlitMono2RGB32(FT_Bitmap *src, BPoint pt, LayerData *d)
|
||||||
|
{
|
||||||
|
rgb_color color=d->highcolor.GetColor32();
|
||||||
|
|
||||||
|
// pointers to the top left corner of the area to be copied in each bitmap
|
||||||
|
uint8 *srcbuffer, *destbuffer;
|
||||||
|
|
||||||
|
// index pointers which are incremented during the course of the blit
|
||||||
|
uint8 *srcindex, *destindex, *rowptr, value;
|
||||||
|
|
||||||
|
// increment values for the index pointers
|
||||||
|
int32 srcinc=src->pitch, destinc=fbuffer->gcinfo.bytes_per_row;
|
||||||
|
|
||||||
|
int16 i,j,k, srcwidth=src->pitch, srcheight=src->rows;
|
||||||
|
int32 x=(int32)pt.x,y=(int32)pt.y;
|
||||||
|
|
||||||
|
// starting point in source bitmap
|
||||||
|
srcbuffer=(uint8*)src->buffer;
|
||||||
|
|
||||||
|
if(y<0)
|
||||||
|
{
|
||||||
|
if(y<pt.y)
|
||||||
|
y++;
|
||||||
|
srcbuffer+=srcinc * (0-y);
|
||||||
|
srcheight-=srcinc;
|
||||||
|
destbuffer+=destinc * (0-y);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(y+srcheight>fbuffer->gcinfo.height)
|
||||||
|
{
|
||||||
|
if(y>pt.y)
|
||||||
|
y--;
|
||||||
|
srcheight-=(y+srcheight-1)-fbuffer->gcinfo.height;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(x+srcwidth>fbuffer->gcinfo.width)
|
||||||
|
{
|
||||||
|
if(x>pt.x)
|
||||||
|
x--;
|
||||||
|
srcwidth-=(x+srcwidth-1)-fbuffer->gcinfo.width;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(x<0)
|
||||||
|
{
|
||||||
|
if(x<pt.x)
|
||||||
|
x++;
|
||||||
|
srcbuffer+=(0-x)>>3;
|
||||||
|
srcwidth-=0-x;
|
||||||
|
destbuffer+=(0-x)*4;
|
||||||
|
}
|
||||||
|
|
||||||
|
// starting point in destination bitmap
|
||||||
|
destbuffer=(uint8*)fbuffer->gcinfo.frame_buffer+int32( (pt.y*fbuffer->gcinfo.bytes_per_row)+(pt.x*4) );
|
||||||
|
|
||||||
|
srcindex=srcbuffer;
|
||||||
|
destindex=destbuffer;
|
||||||
|
|
||||||
|
for(i=0; i<srcheight; i++)
|
||||||
|
{
|
||||||
|
rowptr=destindex;
|
||||||
|
|
||||||
|
for(j=0;j<srcwidth;j++)
|
||||||
|
{
|
||||||
|
for(k=0; k<8; k++)
|
||||||
|
{
|
||||||
|
value=*(srcindex+j) & (1 << (7-k));
|
||||||
|
if(value)
|
||||||
|
{
|
||||||
|
rowptr[0]=color.blue;
|
||||||
|
rowptr[1]=color.green;
|
||||||
|
rowptr[2]=color.red;
|
||||||
|
rowptr[3]=color.alpha;
|
||||||
|
}
|
||||||
|
|
||||||
|
rowptr+=4;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
srcindex+=srcinc;
|
||||||
|
destindex+=destinc;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScreenDriver::BlitGray2RGB32(FT_Bitmap *src, BPoint pt, LayerData *d)
|
||||||
|
{
|
||||||
|
// pointers to the top left corner of the area to be copied in each bitmap
|
||||||
|
uint8 *srcbuffer=NULL, *destbuffer=NULL;
|
||||||
|
|
||||||
|
// index pointers which are incremented during the course of the blit
|
||||||
|
uint8 *srcindex=NULL, *destindex=NULL, *rowptr=NULL;
|
||||||
|
|
||||||
|
rgb_color highcolor=d->highcolor.GetColor32(), lowcolor=d->lowcolor.GetColor32(); float rstep,gstep,bstep,astep;
|
||||||
|
|
||||||
|
rstep=float(highcolor.red-lowcolor.red)/255.0;
|
||||||
|
gstep=float(highcolor.green-lowcolor.green)/255.0;
|
||||||
|
bstep=float(highcolor.blue-lowcolor.blue)/255.0;
|
||||||
|
astep=float(highcolor.alpha-lowcolor.alpha)/255.0;
|
||||||
|
|
||||||
|
// increment values for the index pointers
|
||||||
|
int32 x=(int32)pt.x,
|
||||||
|
y=(int32)pt.y,
|
||||||
|
srcinc=src->pitch,
|
||||||
|
// destinc=dest->BytesPerRow(),
|
||||||
|
destinc=fbuffer->gcinfo.bytes_per_row,
|
||||||
|
srcwidth=src->width,
|
||||||
|
srcheight=src->rows,
|
||||||
|
incval=0;
|
||||||
|
|
||||||
|
int16 i,j;
|
||||||
|
|
||||||
|
// starting point in source bitmap
|
||||||
|
srcbuffer=(uint8*)src->buffer;
|
||||||
|
|
||||||
|
// starting point in destination bitmap
|
||||||
|
// destbuffer=(uint8*)dest->Bits()+(y*dest->BytesPerRow()+(x*4));
|
||||||
|
destbuffer=(uint8*)fbuffer->gcinfo.frame_buffer+(y*fbuffer->gcinfo.bytes_per_row+(x*4));
|
||||||
|
|
||||||
|
|
||||||
|
if(y<0)
|
||||||
|
{
|
||||||
|
if(y<pt.y)
|
||||||
|
y++;
|
||||||
|
|
||||||
|
incval=0-y;
|
||||||
|
|
||||||
|
srcbuffer+=incval * srcinc;
|
||||||
|
srcheight-=incval;
|
||||||
|
destbuffer+=incval * destinc;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(y+srcheight>fbuffer->gcinfo.height)
|
||||||
|
{
|
||||||
|
if(y>pt.y)
|
||||||
|
y--;
|
||||||
|
srcheight-=(y+srcheight-1)-fbuffer->gcinfo.height;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(x+srcwidth>fbuffer->gcinfo.width)
|
||||||
|
{
|
||||||
|
if(x>pt.x)
|
||||||
|
x--;
|
||||||
|
srcwidth-=(x+srcwidth-1)-fbuffer->gcinfo.width;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(x<0)
|
||||||
|
{
|
||||||
|
if(x<pt.x)
|
||||||
|
x++;
|
||||||
|
incval=0-x;
|
||||||
|
srcbuffer+=incval;
|
||||||
|
srcwidth-=incval;
|
||||||
|
destbuffer+=incval*4;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32 value;
|
||||||
|
|
||||||
|
srcindex=srcbuffer;
|
||||||
|
destindex=destbuffer;
|
||||||
|
|
||||||
|
for(i=0; i<srcheight; i++)
|
||||||
|
{
|
||||||
|
rowptr=destindex;
|
||||||
|
|
||||||
|
for(j=0;j<srcwidth;j++)
|
||||||
|
{
|
||||||
|
value=*(srcindex+j) ^ 255;
|
||||||
|
|
||||||
|
if(value!=255)
|
||||||
|
{
|
||||||
|
if(d->draw_mode==B_OP_COPY)
|
||||||
|
{
|
||||||
|
rowptr[0]=uint8(highcolor.blue-(value*bstep));
|
||||||
|
rowptr[1]=uint8(highcolor.green-(value*gstep));
|
||||||
|
rowptr[2]=uint8(highcolor.red-(value*rstep));
|
||||||
|
rowptr[3]=255;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if(d->draw_mode==B_OP_OVER)
|
||||||
|
{
|
||||||
|
if(highcolor.alpha>127)
|
||||||
|
{
|
||||||
|
rowptr[0]=uint8(highcolor.blue-(value*(float(highcolor.blue-rowptr[0])/255.0)));
|
||||||
|
rowptr[1]=uint8(highcolor.green-(value*(float(highcolor.green-rowptr[1])/255.0)));
|
||||||
|
rowptr[2]=uint8(highcolor.red-(value*(float(highcolor.red-rowptr[2])/255.0)));
|
||||||
|
rowptr[3]=255;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
rowptr+=4;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
srcindex+=srcinc;
|
||||||
|
destindex+=destinc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
rgb_color ScreenDriver::GetBlitColor(rgb_color src, rgb_color dest, LayerData *d, bool use_high=true)
|
||||||
|
{
|
||||||
|
rgb_color returncolor={0,0,0,0};
|
||||||
|
int16 value;
|
||||||
|
if(!d)
|
||||||
|
return returncolor;
|
||||||
|
|
||||||
|
switch(d->draw_mode)
|
||||||
|
{
|
||||||
|
case B_OP_COPY:
|
||||||
|
{
|
||||||
|
return src;
|
||||||
|
}
|
||||||
|
case B_OP_ADD:
|
||||||
|
{
|
||||||
|
value=src.red+dest.red;
|
||||||
|
returncolor.red=(value>255)?255:value;
|
||||||
|
|
||||||
|
value=src.green+dest.green;
|
||||||
|
returncolor.green=(value>255)?255:value;
|
||||||
|
|
||||||
|
value=src.blue+dest.blue;
|
||||||
|
returncolor.blue=(value>255)?255:value;
|
||||||
|
return returncolor;
|
||||||
|
}
|
||||||
|
case B_OP_SUBTRACT:
|
||||||
|
{
|
||||||
|
value=src.red-dest.red;
|
||||||
|
returncolor.red=(value<0)?0:value;
|
||||||
|
|
||||||
|
value=src.green-dest.green;
|
||||||
|
returncolor.green=(value<0)?0:value;
|
||||||
|
|
||||||
|
value=src.blue-dest.blue;
|
||||||
|
returncolor.blue=(value<0)?0:value;
|
||||||
|
return returncolor;
|
||||||
|
}
|
||||||
|
case B_OP_BLEND:
|
||||||
|
{
|
||||||
|
value=int16(src.red+dest.red)>>1;
|
||||||
|
returncolor.red=value;
|
||||||
|
|
||||||
|
value=int16(src.green+dest.green)>>1;
|
||||||
|
returncolor.green=value;
|
||||||
|
|
||||||
|
value=int16(src.blue+dest.blue)>>1;
|
||||||
|
returncolor.blue=value;
|
||||||
|
return returncolor;
|
||||||
|
}
|
||||||
|
case B_OP_MIN:
|
||||||
|
{
|
||||||
|
|
||||||
|
return ( uint16(src.red+src.blue+src.green) >
|
||||||
|
uint16(dest.red+dest.blue+dest.green) )?dest:src;
|
||||||
|
}
|
||||||
|
case B_OP_MAX:
|
||||||
|
{
|
||||||
|
return ( uint16(src.red+src.blue+src.green) <
|
||||||
|
uint16(dest.red+dest.blue+dest.green) )?dest:src;
|
||||||
|
}
|
||||||
|
case B_OP_OVER:
|
||||||
|
{
|
||||||
|
return (use_high && src.alpha>127)?src:dest;
|
||||||
|
}
|
||||||
|
case B_OP_INVERT:
|
||||||
|
{
|
||||||
|
returncolor.red=dest.red ^ 255;
|
||||||
|
returncolor.green=dest.green ^ 255;
|
||||||
|
returncolor.blue=dest.blue ^ 255;
|
||||||
|
return (use_high && src.alpha>127)?returncolor:dest;
|
||||||
|
}
|
||||||
|
// This is a pain in the arse to implement, so I'm saving it for the real
|
||||||
|
// server
|
||||||
|
case B_OP_ALPHA:
|
||||||
|
{
|
||||||
|
return src;
|
||||||
|
}
|
||||||
|
case B_OP_ERASE:
|
||||||
|
{
|
||||||
|
// This one's tricky.
|
||||||
|
return (use_high && src.alpha>127)?d->lowcolor.GetColor32():dest;
|
||||||
|
}
|
||||||
|
case B_OP_SELECT:
|
||||||
|
{
|
||||||
|
// This one's tricky, too. We are passed a color in src. If it's the layer's
|
||||||
|
// high color or low color, we check for a swap.
|
||||||
|
if(d->highcolor==src)
|
||||||
|
return (use_high && d->highcolor==dest)?d->lowcolor.GetColor32():dest;
|
||||||
|
|
||||||
|
if(d->lowcolor==src)
|
||||||
|
return (use_high && d->lowcolor==dest)?d->highcolor.GetColor32():dest;
|
||||||
|
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return returncolor;
|
||||||
|
}
|
||||||
|
|||||||
@@ -11,6 +11,9 @@
|
|||||||
#include <Region.h> // for clipping_rect definition
|
#include <Region.h> // for clipping_rect definition
|
||||||
#include <Bitmap.h>
|
#include <Bitmap.h>
|
||||||
#include "DisplayDriver.h"
|
#include "DisplayDriver.h"
|
||||||
|
#include <ft2build.h>
|
||||||
|
#include FT_FREETYPE_H
|
||||||
|
#include FT_GLYPH_H
|
||||||
|
|
||||||
class VDWindow;
|
class VDWindow;
|
||||||
class ServerCursor;
|
class ServerCursor;
|
||||||
@@ -49,9 +52,9 @@ public:
|
|||||||
// Settings functions
|
// Settings functions
|
||||||
// virtual void CopyBits(BRect src, BRect dest);
|
// virtual void CopyBits(BRect src, BRect dest);
|
||||||
virtual void DrawBitmap(ServerBitmap *bmp, 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 DrawPicture(SPicture *pic, BPoint pt);
|
||||||
// virtual void DrawString(const char *string, int32 length, BPoint pt, LayerData *d, escapement_delta *delta=NULL);
|
virtual void DrawChar(char c, BPoint pt, LayerData *d);
|
||||||
|
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 FillArc(BRect r, float angle, float span, LayerData *d, int8 *pat);
|
||||||
// virtual void FillBezier(BPoint *pts, LayerData *d, int8 *pat);
|
// virtual void FillBezier(BPoint *pts, LayerData *d, int8 *pat);
|
||||||
@@ -67,7 +70,7 @@ public:
|
|||||||
virtual void InvertRect(BRect r);
|
virtual void InvertRect(BRect r);
|
||||||
virtual void ShowCursor(void);
|
virtual void ShowCursor(void);
|
||||||
virtual void ObscureCursor(void);
|
virtual void ObscureCursor(void);
|
||||||
// virtual void SetCursor(ServerBitmap *cursor);
|
virtual void SetCursor(ServerBitmap *cursor, const BPoint &spot);
|
||||||
|
|
||||||
// virtual void StrokeArc(BRect r, float angle, float span, LayerData *d, int8 *pat);
|
// virtual void StrokeArc(BRect r, float angle, float span, LayerData *d, int8 *pat);
|
||||||
// virtual void StrokeBezier(BPoint *pts, LayerData *d, int8 *pat);
|
// virtual void StrokeBezier(BPoint *pts, LayerData *d, int8 *pat);
|
||||||
@@ -82,10 +85,13 @@ public:
|
|||||||
virtual void SetMode(int32 mode);
|
virtual void SetMode(int32 mode);
|
||||||
// virtual bool DumpToFile(const char *path);
|
// virtual bool DumpToFile(const char *path);
|
||||||
protected:
|
protected:
|
||||||
|
void BlitMono2RGB32(FT_Bitmap *src, BPoint pt, LayerData *d);
|
||||||
|
void BlitGray2RGB32(FT_Bitmap *src, BPoint pt, LayerData *d);
|
||||||
void BlitBitmap(ServerBitmap *sourcebmp, BRect sourcerect, BRect destrect);
|
void BlitBitmap(ServerBitmap *sourcebmp, BRect sourcerect, BRect destrect);
|
||||||
void SetPixelPattern(int x, int y, uint8 *pattern, uint8 patternindex);
|
void SetPixelPattern(int x, int y, uint8 *pattern, uint8 patternindex);
|
||||||
void Line(BPoint start, BPoint end, LayerData *d, int8 *pat);
|
void Line(BPoint start, BPoint end, LayerData *d, int8 *pat);
|
||||||
void HLine(int32 x1, int32 x2, int32 y, RGBColor color);
|
void HLine(int32 x1, int32 x2, int32 y, RGBColor color);
|
||||||
|
rgb_color GetBlitColor(rgb_color src, rgb_color dest, LayerData *d, bool use_high=true);
|
||||||
void SetPixel(int x, int y, RGBColor col);
|
void SetPixel(int x, int y, RGBColor col);
|
||||||
void SetPixel32(int x, int y, rgb_color col);
|
void SetPixel32(int x, int y, rgb_color col);
|
||||||
void SetPixel16(int x, int y, uint16 col);
|
void SetPixel16(int x, int y, uint16 col);
|
||||||
|
|||||||
@@ -411,8 +411,8 @@ printf("ServerApp: ActivateWorkspace(%ld)\n",*((int32*)index));
|
|||||||
memcpy(cdata, buffer, 68);
|
memcpy(cdata, buffer, 68);
|
||||||
if(cursor)
|
if(cursor)
|
||||||
delete cursor;
|
delete cursor;
|
||||||
cursor=new ServerCursor(cdata);
|
cursor=new ServerBitmap(cdata);
|
||||||
driver->SetCursor(cursor);
|
driver->SetCursor(cursor,BPoint(cdata[2],cdata[3]));
|
||||||
#ifdef DEBUG_SERVERAPP_CURSOR
|
#ifdef DEBUG_SERVERAPP_CURSOR
|
||||||
printf("ServerApp: SetCursor(%d,%d,%d,%d)\n",r,g,b,a);
|
printf("ServerApp: SetCursor(%d,%d,%d,%d)\n",r,g,b,a);
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ public:
|
|||||||
thread_id monitor_thread;
|
thread_id monitor_thread;
|
||||||
PortLink *applink;
|
PortLink *applink;
|
||||||
BList *winlist, *bmplist;
|
BList *winlist, *bmplist;
|
||||||
ServerCursor *cursor;
|
ServerBitmap *cursor;
|
||||||
DisplayDriver *driver;
|
DisplayDriver *driver;
|
||||||
rgb_color high, low; // just for testing until layers are implemented
|
rgb_color high, low; // just for testing until layers are implemented
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,6 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <Bitmap.h>
|
#include <Bitmap.h>
|
||||||
|
|
||||||
#include <assert.h>
|
|
||||||
#include "ServerBitmap.h"
|
#include "ServerBitmap.h"
|
||||||
#include "Desktop.h"
|
#include "Desktop.h"
|
||||||
#include "DisplayDriver.h"
|
#include "DisplayDriver.h"
|
||||||
@@ -23,8 +22,16 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
long pow2(int power)
|
||||||
|
{
|
||||||
|
if(power==0)
|
||||||
|
return 1;
|
||||||
|
return long(2 << (power-1));
|
||||||
|
}
|
||||||
|
|
||||||
ServerBitmap::ServerBitmap(BRect rect,color_space space,int32 BytesPerLine=0)
|
ServerBitmap::ServerBitmap(BRect rect,color_space space,int32 BytesPerLine=0)
|
||||||
{
|
{
|
||||||
|
is_initialized=true;
|
||||||
width=rect.IntegerWidth()+1;
|
width=rect.IntegerWidth()+1;
|
||||||
height=rect.IntegerHeight()+1;
|
height=rect.IntegerHeight()+1;
|
||||||
cspace=space;
|
cspace=space;
|
||||||
@@ -36,6 +43,7 @@ ServerBitmap::ServerBitmap(BRect rect,color_space space,int32 BytesPerLine=0)
|
|||||||
|
|
||||||
ServerBitmap::ServerBitmap(int32 w,int32 h,color_space space,int32 BytesPerLine=0)
|
ServerBitmap::ServerBitmap(int32 w,int32 h,color_space space,int32 BytesPerLine=0)
|
||||||
{
|
{
|
||||||
|
is_initialized=true;
|
||||||
width=w;
|
width=w;
|
||||||
height=h;
|
height=h;
|
||||||
cspace=space;
|
cspace=space;
|
||||||
@@ -45,22 +53,22 @@ ServerBitmap::ServerBitmap(int32 w,int32 h,color_space space,int32 BytesPerLine=
|
|||||||
buffer=new uint8[bytesperline*height];
|
buffer=new uint8[bytesperline*height];
|
||||||
}
|
}
|
||||||
|
|
||||||
// This particular version is not intended for use except for testing purposes.
|
// This loads a bitmap from disk, given a path
|
||||||
// It loads a BBitmap and copies it to the ServerBitmap. Probably will disappear
|
|
||||||
// when the *real* server is written
|
|
||||||
ServerBitmap::ServerBitmap(const char *path)
|
ServerBitmap::ServerBitmap(const char *path)
|
||||||
{
|
{
|
||||||
|
is_initialized=true;
|
||||||
if(!path)
|
if(!path)
|
||||||
{
|
{
|
||||||
width=0;
|
width=0;
|
||||||
height=0;
|
height=0;
|
||||||
cspace=B_NO_COLOR_SPACE;
|
cspace=B_NO_COLOR_SPACE;
|
||||||
bytesperline=0;
|
bytesperline=0;
|
||||||
|
is_initialized=false;
|
||||||
|
buffer=NULL;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
BBitmap *bmp=BTranslationUtils::GetBitmap(path);
|
BBitmap *bmp=BTranslationUtils::GetBitmap(path);
|
||||||
assert(bmp!=NULL);
|
|
||||||
|
|
||||||
if(bmp==NULL)
|
if(bmp==NULL)
|
||||||
{
|
{
|
||||||
@@ -68,6 +76,59 @@ ServerBitmap::ServerBitmap(const char *path)
|
|||||||
height=0;
|
height=0;
|
||||||
cspace=B_NO_COLOR_SPACE;
|
cspace=B_NO_COLOR_SPACE;
|
||||||
bytesperline=0;
|
bytesperline=0;
|
||||||
|
is_initialized=false;
|
||||||
|
buffer=NULL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
width=bmp->Bounds().IntegerWidth();
|
||||||
|
height=bmp->Bounds().IntegerHeight();
|
||||||
|
cspace=bmp->ColorSpace();
|
||||||
|
bytesperline=bmp->BytesPerRow();
|
||||||
|
buffer=new uint8[bmp->BitsLength()];
|
||||||
|
memcpy(buffer,(void *)bmp->Bits(),bmp->BitsLength());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load a bitmap from a resource file
|
||||||
|
ServerBitmap::ServerBitmap(uint32 type,int32 id)
|
||||||
|
{
|
||||||
|
is_initialized=true;
|
||||||
|
BBitmap *bmp=BTranslationUtils::GetBitmap(type,id);
|
||||||
|
|
||||||
|
if(bmp==NULL)
|
||||||
|
{
|
||||||
|
width=0;
|
||||||
|
height=0;
|
||||||
|
cspace=B_NO_COLOR_SPACE;
|
||||||
|
bytesperline=0;
|
||||||
|
is_initialized=false;
|
||||||
|
buffer=NULL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
width=bmp->Bounds().IntegerWidth();
|
||||||
|
height=bmp->Bounds().IntegerHeight();
|
||||||
|
cspace=bmp->ColorSpace();
|
||||||
|
bytesperline=bmp->BytesPerRow();
|
||||||
|
buffer=new uint8[bmp->BitsLength()];
|
||||||
|
memcpy(buffer,(void *)bmp->Bits(),bmp->BitsLength());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ServerBitmap::ServerBitmap(uint32 type, const char *name)
|
||||||
|
{
|
||||||
|
is_initialized=true;
|
||||||
|
BBitmap *bmp=BTranslationUtils::GetBitmap(type,name);
|
||||||
|
|
||||||
|
if(bmp==NULL)
|
||||||
|
{
|
||||||
|
width=0;
|
||||||
|
height=0;
|
||||||
|
cspace=B_NO_COLOR_SPACE;
|
||||||
|
bytesperline=0;
|
||||||
|
is_initialized=false;
|
||||||
|
buffer=NULL;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -82,6 +143,7 @@ ServerBitmap::ServerBitmap(const char *path)
|
|||||||
|
|
||||||
ServerBitmap::ServerBitmap(ServerBitmap *bitmap)
|
ServerBitmap::ServerBitmap(ServerBitmap *bitmap)
|
||||||
{
|
{
|
||||||
|
is_initialized=true;
|
||||||
width=bitmap->width;
|
width=bitmap->width;
|
||||||
height=bitmap->height;
|
height=bitmap->height;
|
||||||
cspace=bitmap->cspace;
|
cspace=bitmap->cspace;
|
||||||
@@ -92,6 +154,65 @@ ServerBitmap::ServerBitmap(ServerBitmap *bitmap)
|
|||||||
memcpy(buffer, bitmap->buffer, bytesperline * height);
|
memcpy(buffer, bitmap->buffer, bytesperline * height);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ServerBitmap::ServerBitmap(int8 *data)
|
||||||
|
{
|
||||||
|
// 68-byte array used in R5 for holding cursors.
|
||||||
|
// This API has serious problems and should be deprecated(but supported) in R2
|
||||||
|
|
||||||
|
// Now that we have all the setup, we're going to map (for now) the cursor
|
||||||
|
// to RGBA32. Eventually, there will be support for 16 and 8-bit depths
|
||||||
|
is_initialized=true;
|
||||||
|
if(data)
|
||||||
|
{
|
||||||
|
uint32 black=0xFF000000,
|
||||||
|
white=0xFFFFFFFF,
|
||||||
|
*bmppos;
|
||||||
|
uint16 *cursorpos, *maskpos,cursorflip, maskflip,
|
||||||
|
cursorval, maskval;
|
||||||
|
uint8 i,j;
|
||||||
|
|
||||||
|
cursorpos=(uint16*)(data+4);
|
||||||
|
maskpos=(uint16*)(data+36);
|
||||||
|
|
||||||
|
buffer=new uint8[1024]; // 16x16x4 - RGBA32 space
|
||||||
|
width=16;
|
||||||
|
height=16;
|
||||||
|
bytesperline=64;
|
||||||
|
|
||||||
|
// for each row in the cursor data
|
||||||
|
for(j=0;j<16;j++)
|
||||||
|
{
|
||||||
|
bmppos=(uint32*)(buffer+ (j*64) );
|
||||||
|
|
||||||
|
// On intel, our bytes end up swapped, so we must swap them back
|
||||||
|
cursorflip=(cursorpos[j] & 0xFF) << 8;
|
||||||
|
cursorflip |= (cursorpos[j] & 0xFF00) >> 8;
|
||||||
|
maskflip=(maskpos[j] & 0xFF) << 8;
|
||||||
|
maskflip |= (maskpos[j] & 0xFF00) >> 8;
|
||||||
|
|
||||||
|
// for each column in each row of cursor data
|
||||||
|
for(i=0;i<16;i++)
|
||||||
|
{
|
||||||
|
// Get the values and dump them to the bitmap
|
||||||
|
cursorval=cursorflip & pow2(15-i);
|
||||||
|
maskval=maskflip & pow2(15-i);
|
||||||
|
bmppos[i]=((cursorval!=0)?black:white) & ((maskval>0)?0xFFFFFFFF:0x00FFFFFF);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
buffer=NULL;
|
||||||
|
width=0;
|
||||||
|
height=0;
|
||||||
|
bytesperline=0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef DEBUG_SERVER_CURSOR
|
||||||
|
PrintToStream();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
ServerBitmap::~ServerBitmap(void)
|
ServerBitmap::~ServerBitmap(void)
|
||||||
{
|
{
|
||||||
if(buffer)
|
if(buffer)
|
||||||
|
|||||||
@@ -14,6 +14,9 @@ public:
|
|||||||
ServerBitmap(int32 w,int32 h,color_space space,int32 BytesPerLine=0);
|
ServerBitmap(int32 w,int32 h,color_space space,int32 BytesPerLine=0);
|
||||||
ServerBitmap(const char *path);
|
ServerBitmap(const char *path);
|
||||||
ServerBitmap(ServerBitmap *bitmap);
|
ServerBitmap(ServerBitmap *bitmap);
|
||||||
|
ServerBitmap(uint32 type, int32 id);
|
||||||
|
ServerBitmap(int8 *data);
|
||||||
|
ServerBitmap(uint32 type, const char *name);
|
||||||
~ServerBitmap(void);
|
~ServerBitmap(void);
|
||||||
void UpdateSettings(void);
|
void UpdateSettings(void);
|
||||||
void SetBuffer(void *ptr) { buffer=(uint8*)ptr; }
|
void SetBuffer(void *ptr) { buffer=(uint8*)ptr; }
|
||||||
@@ -26,6 +29,7 @@ public:
|
|||||||
int32 BytesPerRow(void) { return bytesperline; };
|
int32 BytesPerRow(void) { return bytesperline; };
|
||||||
uint8 BitsPerPixel(void) { return bpp; }
|
uint8 BitsPerPixel(void) { return bpp; }
|
||||||
color_space ColorSpace(void) { return cspace; }
|
color_space ColorSpace(void) { return cspace; }
|
||||||
|
const bool &InitCheck(void) { return is_initialized; }
|
||||||
|
|
||||||
int32 width,height;
|
int32 width,height;
|
||||||
int32 bytesperline;
|
int32 bytesperline;
|
||||||
@@ -33,6 +37,7 @@ public:
|
|||||||
int bpp;
|
int bpp;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
bool is_initialized;
|
||||||
void HandleSpace(color_space space, int32 BytesPerLine);
|
void HandleSpace(color_space space, int32 BytesPerLine);
|
||||||
DisplayDriver *driver;
|
DisplayDriver *driver;
|
||||||
area_id areaid;
|
area_id areaid;
|
||||||
|
|||||||
@@ -1,113 +0,0 @@
|
|||||||
/*
|
|
||||||
ServerCursor.cpp
|
|
||||||
This is the server-side class used to handle cursors. Note that it
|
|
||||||
will handle the R5 cursor API, but it will also handle taking a bitmap.
|
|
||||||
|
|
||||||
ServerCursors are 32-bit. Eventually, we will be mapping colors to fit
|
|
||||||
when the set is called.
|
|
||||||
|
|
||||||
This is new code, and there may be changes to the API before it settles
|
|
||||||
in.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "ServerCursor.h"
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <math.h>
|
|
||||||
|
|
||||||
long pow2(int power)
|
|
||||||
{
|
|
||||||
if(power==0)
|
|
||||||
return 1;
|
|
||||||
return long(2 << (power-1));
|
|
||||||
}
|
|
||||||
|
|
||||||
//#define DEBUG_SERVER_CURSOR
|
|
||||||
|
|
||||||
/*
|
|
||||||
ServerCursor::ServerCursor(ServerBitmap *bmp, ServerBitmap *cmask=NULL)
|
|
||||||
{
|
|
||||||
// The OpenBeOS R1 API can use Bitmaps to create cursors - more flexibility that way.
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
ServerCursor::ServerCursor(int8 *data)
|
|
||||||
{
|
|
||||||
// 68-byte array used in R5 for holding cursors.
|
|
||||||
// This API has serious problems and should be deprecated(but supported) in R2
|
|
||||||
|
|
||||||
// Now that we have all the setup, we're going to map (for now) the cursor
|
|
||||||
// to RGBA32. Eventually, there will be support for 16 and 8-bit depths
|
|
||||||
if(data)
|
|
||||||
{
|
|
||||||
uint32 black=0xFF000000,
|
|
||||||
white=0xFFFFFFFF,
|
|
||||||
*bmppos;
|
|
||||||
uint16 *cursorpos, *maskpos,cursorflip, maskflip,
|
|
||||||
cursorval, maskval;
|
|
||||||
uint8 i,j;
|
|
||||||
|
|
||||||
cursorpos=(uint16*)(data+4);
|
|
||||||
maskpos=(uint16*)(data+36);
|
|
||||||
|
|
||||||
buffer=new uint8[1024]; // 16x16x4 - RGBA32 space
|
|
||||||
width=16;
|
|
||||||
height=16;
|
|
||||||
bytesperline=64;
|
|
||||||
|
|
||||||
// for each row in the cursor data
|
|
||||||
for(j=0;j<16;j++)
|
|
||||||
{
|
|
||||||
bmppos=(uint32*)(buffer+ (j*64) );
|
|
||||||
|
|
||||||
// On intel, our bytes end up swapped, so we must swap them back
|
|
||||||
cursorflip=(cursorpos[j] & 0xFF) << 8;
|
|
||||||
cursorflip |= (cursorpos[j] & 0xFF00) >> 8;
|
|
||||||
maskflip=(maskpos[j] & 0xFF) << 8;
|
|
||||||
maskflip |= (maskpos[j] & 0xFF00) >> 8;
|
|
||||||
|
|
||||||
// for each column in each row of cursor data
|
|
||||||
for(i=0;i<16;i++)
|
|
||||||
{
|
|
||||||
// Get the values and dump them to the bitmap
|
|
||||||
cursorval=cursorflip & pow2(15-i);
|
|
||||||
maskval=maskflip & pow2(15-i);
|
|
||||||
bmppos[i]=((cursorval!=0)?black:white) & ((maskval>0)?0xFFFFFFFF:0x00FFFFFF);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
buffer=NULL;
|
|
||||||
width=0;
|
|
||||||
height=0;
|
|
||||||
bytesperline=0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef DEBUG_SERVER_CURSOR
|
|
||||||
PrintToStream();
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
ServerCursor::~ServerCursor(void)
|
|
||||||
{
|
|
||||||
if(buffer)
|
|
||||||
delete buffer;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ServerCursor::PrintToStream(void)
|
|
||||||
{
|
|
||||||
if(!buffer)
|
|
||||||
{
|
|
||||||
printf("ServerCursor with NULL buffer\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
rgb_color *color=(rgb_color*)buffer;
|
|
||||||
printf("Server Cursor\n");
|
|
||||||
for(int32 i=0; i<height; i++)
|
|
||||||
{
|
|
||||||
for(int32 j=0; j<width; j++)
|
|
||||||
printf("%c ", (color[(i*height)+j].alpha>0)?'*':'.');
|
|
||||||
|
|
||||||
printf("\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
#ifndef _SERVER_CURSOR_H
|
|
||||||
#define _SERVER_CURSOR_H
|
|
||||||
|
|
||||||
#include <GraphicsDefs.h>
|
|
||||||
#include <Rect.h>
|
|
||||||
#include "ServerBitmap.h"
|
|
||||||
|
|
||||||
class ServerCursor
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
// ServerCursor(ServerBitmap *bmp,ServerBitmap *cmask=NULL);
|
|
||||||
ServerCursor(int8 *data);
|
|
||||||
~ServerCursor(void);
|
|
||||||
BRect Bounds() { return BRect(0,0,width-1,height-1); };
|
|
||||||
uint8 *Buffer(void) const { return buffer;}
|
|
||||||
int32 Width(void) const { return width; }
|
|
||||||
int32 Height(void) const { return height; }
|
|
||||||
int32 BytesPerLine(void) const { return bytesperline; };
|
|
||||||
void PrintToStream(void);
|
|
||||||
protected:
|
|
||||||
uint8 *buffer;
|
|
||||||
int32 width,height;
|
|
||||||
int32 bytesperline;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -21,6 +21,7 @@ ServerFont::ServerFont(FontStyle *style, float size=12.0, float rotation=0.0, fl
|
|||||||
fface=B_REGULAR_FACE;
|
fface=B_REGULAR_FACE;
|
||||||
ftruncate=B_TRUNCATE_END;
|
ftruncate=B_TRUNCATE_END;
|
||||||
fencoding=B_UNICODE_UTF8;
|
fencoding=B_UNICODE_UTF8;
|
||||||
|
fbounds.Set(0,0,0,0);
|
||||||
if(fstyle)
|
if(fstyle)
|
||||||
fstyle->AddDependent();
|
fstyle->AddDependent();
|
||||||
}
|
}
|
||||||
@@ -37,6 +38,7 @@ ServerFont::ServerFont(const ServerFont &font)
|
|||||||
fface=font.fface;
|
fface=font.fface;
|
||||||
ftruncate=font.ftruncate;
|
ftruncate=font.ftruncate;
|
||||||
fencoding=font.fencoding;
|
fencoding=font.fencoding;
|
||||||
|
fbounds.Set(0,0,0,0);
|
||||||
if(fstyle)
|
if(fstyle)
|
||||||
fstyle->AddDependent();
|
fstyle->AddDependent();
|
||||||
}
|
}
|
||||||
@@ -56,6 +58,17 @@ escapement_delta Escapements(char c)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
const BRect &ServerFont::BoundingBox(void)
|
||||||
|
{
|
||||||
|
return fbounds;
|
||||||
|
}
|
||||||
|
|
||||||
|
BRect ServerFont::StringBounds(const char *string)
|
||||||
|
{
|
||||||
|
return BRect(0,0,0,0);
|
||||||
|
}
|
||||||
|
|
||||||
void ServerFont::Height(font_height *fh)
|
void ServerFont::Height(font_height *fh)
|
||||||
{
|
{
|
||||||
fh->ascent=fheight.ascent;
|
fh->ascent=fheight.ascent;
|
||||||
|
|||||||
@@ -35,16 +35,17 @@ public:
|
|||||||
void SetRotation(const float &value) { frotation=value; }
|
void SetRotation(const float &value) { frotation=value; }
|
||||||
void SetFace(const uint16 &value) { fface=value; }
|
void SetFace(const uint16 &value) { fface=value; }
|
||||||
|
|
||||||
// BRect BoundingBox(void);
|
const BRect &BoundingBox(void);
|
||||||
|
BRect StringBounds(const char *string);
|
||||||
// escapement_delta Escapements(char c);
|
// escapement_delta Escapements(char c);
|
||||||
void Height(font_height *fh);
|
void Height(font_height *fh);
|
||||||
protected:
|
protected:
|
||||||
friend FontStyle;
|
friend FontStyle;
|
||||||
FontStyle *fstyle;
|
FontStyle *fstyle;
|
||||||
font_height fheight;
|
font_height fheight;
|
||||||
escapement_delta fescapements;
|
|
||||||
edge_info fedges;
|
edge_info fedges;
|
||||||
float fsize, frotation, fshear;
|
float fsize, frotation, fshear;
|
||||||
|
BRect fbounds;
|
||||||
uint32 fflags;
|
uint32 fflags;
|
||||||
uint8 fspacing;
|
uint8 fspacing;
|
||||||
uint16 fface;
|
uint16 fface;
|
||||||
|
|||||||
@@ -732,7 +732,7 @@ void ViewDriver::MoveCursorTo(float x, float y)
|
|||||||
screenwin->Unlock();
|
screenwin->Unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ViewDriver::SetCursor(ServerCursor *cursor)
|
void ViewDriver::SetCursor(ServerBitmap *cursor, const BPoint &spot)
|
||||||
{
|
{
|
||||||
#ifdef DEBUG_DRIVER_MODULE
|
#ifdef DEBUG_DRIVER_MODULE
|
||||||
printf("ViewDriver:: SetCursor(%p)\n",cursor);
|
printf("ViewDriver:: SetCursor(%p)\n",cursor);
|
||||||
@@ -743,14 +743,19 @@ printf("ViewDriver:: SetCursor(%p)\n",cursor);
|
|||||||
BBitmap *bmp=new BBitmap(cursor->Bounds(),B_RGBA32);
|
BBitmap *bmp=new BBitmap(cursor->Bounds(),B_RGBA32);
|
||||||
|
|
||||||
// Copy the server bitmap in the cursor to a BBitmap
|
// Copy the server bitmap in the cursor to a BBitmap
|
||||||
uint8 *sbmppos=(uint8*)cursor->Buffer(),
|
uint8 *sbmppos=(uint8*)cursor->Bits(),
|
||||||
*bbmppos=(uint8*)bmp->Bits();
|
*bbmppos=(uint8*)bmp->Bits();
|
||||||
|
|
||||||
int32 bytes=cursor->BytesPerLine(),
|
int32 bytes=cursor->BytesPerRow(),
|
||||||
bbytes=bmp->BytesPerRow();
|
bbytes=bmp->BytesPerRow();
|
||||||
|
|
||||||
for(int i=0;i<cursor->Height();i++)
|
for(int i=0;i<=cursor->Bounds().IntegerHeight();i++)
|
||||||
memcpy(bbmppos+(i*bbytes), sbmppos+(i*bytes), bytes);
|
memcpy(bbmppos+(i*bbytes), sbmppos+(i*bytes), bytes);
|
||||||
|
|
||||||
|
if(cursor->Bounds().Contains(spot))
|
||||||
|
SetHotSpot(spot);
|
||||||
|
else
|
||||||
|
SetHotSpot(BPoint(0,0));
|
||||||
|
|
||||||
// Replace the bitmap
|
// Replace the bitmap
|
||||||
delete screenwin->view->cursor;
|
delete screenwin->view->cursor;
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ public:
|
|||||||
void ObscureCursor(void);
|
void ObscureCursor(void);
|
||||||
// BPoint PenPosition(void);
|
// BPoint PenPosition(void);
|
||||||
// float PenSize(void);
|
// float PenSize(void);
|
||||||
void SetCursor(ServerCursor *cursor);
|
void SetCursor(ServerBitmap *cursor, const BPoint &spot);
|
||||||
// drawing_mode GetDrawingMode(void);
|
// drawing_mode GetDrawingMode(void);
|
||||||
// void SetDrawingMode(drawing_mode mode);
|
// void SetDrawingMode(drawing_mode mode);
|
||||||
void ShowCursor(void);
|
void ShowCursor(void);
|
||||||
|
|||||||
@@ -4,14 +4,15 @@
|
|||||||
kept on the client side.
|
kept on the client side.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "ClientFontList.h"
|
||||||
#include <File.h>
|
#include <File.h>
|
||||||
#include <Message.h>
|
#include <Message.h>
|
||||||
#include <String.h>
|
#include <String.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <String.h>
|
||||||
#include "PortLink.h"
|
#include "PortLink.h"
|
||||||
#include "ServerProtocol.h"
|
#include "ServerProtocol.h"
|
||||||
#include "ClientFontList.h"
|
|
||||||
|
|
||||||
#define DEBUG_CLIENT_FONT_LIST
|
#define DEBUG_CLIENT_FONT_LIST
|
||||||
|
|
||||||
|
|||||||
@@ -10,4 +10,4 @@ App proto7_test_app :
|
|||||||
<$(SOURCE_GRIST)>OBWindow.cpp
|
<$(SOURCE_GRIST)>OBWindow.cpp
|
||||||
<$(SOURCE_GRIST)>PortLink.cpp
|
<$(SOURCE_GRIST)>PortLink.cpp
|
||||||
;
|
;
|
||||||
LinkSharedOSLibs OBApplication : be stdc++.r4 ;
|
LinkSharedOSLibs proto7_test_app : be stdc++.r4 ;
|
||||||
|
|||||||
Reference in New Issue
Block a user