Some cleanup, some removed typos, some unification, some fixes and some added todos. Most of it related to client-server communication. Apps that rely on BFont stuff should work now (StyledEdit, Fonts, Keymap, Menu, ...). Or should not hang/quit at startup at least.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13625 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Michael Lotz 2005-07-10 21:16:43 +00:00
parent 1de84caa7d
commit 3f319b3346
13 changed files with 267 additions and 291 deletions

View File

@ -8,7 +8,6 @@
#ifndef BITMAP_MANAGER_H_ #ifndef BITMAP_MANAGER_H_
#define BITMAP_MANAGER_H_ #define BITMAP_MANAGER_H_
#include <GraphicsDefs.h> #include <GraphicsDefs.h>
#include <List.h> #include <List.h>
#include <OS.h> #include <OS.h>
@ -32,22 +31,23 @@ class ServerBitmap;
by the BitmapManager lock. by the BitmapManager lock.
*/ */
class BitmapManager { class BitmapManager {
public: public:
BitmapManager(); BitmapManager();
virtual ~BitmapManager(); virtual ~BitmapManager();
ServerBitmap* CreateBitmap(BRect bounds, ServerBitmap *CreateBitmap( BRect bounds,
color_space space, color_space space,
int32 flags, int32 flags,
int32 bytesPerRow = -1, int32 bytesPerRow = -1,
screen_id screen = B_MAIN_SCREEN_ID); screen_id screen = B_MAIN_SCREEN_ID);
void DeleteBitmap(ServerBitmap* bitmap); void DeleteBitmap(ServerBitmap* bitmap);
protected:
BList fBitmapList; protected:
int8* fBuffer; BList fBitmapList;
TokenHandler fTokenizer; int8 *fBuffer;
BLocker fLock; TokenHandler fTokenizer;
AreaPool fMemPool; BLocker fLock;
AreaPool fMemPool;
}; };
extern BitmapManager *gBitmapManager; extern BitmapManager *gBitmapManager;

View File

@ -37,69 +37,65 @@
\class ColorSet ColorSet.h \class ColorSet ColorSet.h
\brief Encapsulates GUI system colors \brief Encapsulates GUI system colors
*/ */
class ColorSet : public BLocker class ColorSet : public BLocker {
{
public: public:
ColorSet(void); ColorSet();
ColorSet(const ColorSet &cs); ColorSet(const ColorSet &cs);
ColorSet & operator=(const ColorSet &cs); ColorSet & operator=(const ColorSet &cs);
void SetColors(const ColorSet &cs);
void PrintToStream(void) const;
bool ConvertToMessage(BMessage *msg) const;
bool ConvertFromMessage(const BMessage *msg);
void SetToDefaults(void);
rgb_color StringToColor(const char *string);
rgb_color AttributeToColor(int32 which);
status_t SetColor(const char *string, rgb_color value);
rgb_color panel_background,
panel_text,
document_background,
document_text,
control_background,
control_text,
control_highlight,
control_border,
tooltip_background,
tooltip_text,
menu_background,
menu_selected_background,
menu_text,
menu_selected_text,
menu_selected_border,
keyboard_navigation_base,
keyboard_navigation_pulse,
success,
failure,
shine,
shadow,
window_tab,
// Not all of these guys don't exist in InterfaceDefs.h,
// but we keep them as part of the color set anyway -
// they're important nonetheless
window_tab_text,
inactive_window_tab,
inactive_window_tab_text;
private:
rgb_color * StringToMember(const char *string);
void PrintMember(const rgb_color &color) const;
};
void SetColors(const ColorSet &cs);
void PrintToStream(void) const;
bool ConvertToMessage(BMessage *msg) const;
bool ConvertFromMessage(const BMessage *msg);
void SetToDefaults(void);
rgb_color StringToColor(const char *string);
rgb_color AttributeToColor(int32 which);
status_t SetColor(const char *string, rgb_color value);
rgb_color panel_background,
panel_text,
document_background,
document_text,
control_background,
control_text,
control_highlight,
control_border,
tooltip_background,
tooltip_text,
menu_background,
menu_selected_background,
menu_text,
menu_selected_text,
menu_selected_border,
keyboard_navigation_base,
keyboard_navigation_pulse,
success,
failure,
shine,
shadow,
window_tab,
// Not all of these guys do exist in InterfaceDefs.h,
// but we keep them as part of the color set anyway -
// they're important nonetheless
window_tab_text,
inactive_window_tab,
inactive_window_tab_text;
private:
rgb_color *StringToMember(const char *string);
void PrintMember(const rgb_color &color) const;
};
status_t LoadColorSet(const char *path, ColorSet *set); status_t LoadColorSet(const char *path, ColorSet *set);
status_t SaveColorSet(const char *path, const ColorSet &set); status_t SaveColorSet(const char *path, const ColorSet &set);

View File

@ -174,7 +174,7 @@ count_font_styles(font_family name)
link.StartMessage(AS_COUNT_FONT_STYLES); link.StartMessage(AS_COUNT_FONT_STYLES);
if (link.FlushWithReply(code) != B_OK if (link.FlushWithReply(code) != B_OK
&& code != SERVER_TRUE) || code != SERVER_TRUE)
return -1; return -1;
link.Read<int32>(&count); link.Read<int32>(&count);
@ -186,7 +186,7 @@ count_font_styles(font_family name)
\brief Retrieves the family name at the specified index \brief Retrieves the family name at the specified index
\param index Unique font identifier code. \param index Unique font identifier code.
\param name font_family string to receive the name of the family \param name font_family string to receive the name of the family
\param flags iF non-NULL, the values of the flags IS_FIXED and B_HAS_TUNED_FONT are returned \param flags if non-NULL, the values of the flags IS_FIXED and B_HAS_TUNED_FONT are returned
\return B_ERROR if the index does not correspond to a font family \return B_ERROR if the index does not correspond to a font family
*/ */
@ -209,8 +209,10 @@ get_font_family(int32 index, font_family *name, uint32 *flags)
link.Read<font_family>(name); link.Read<font_family>(name);
uint32 value;
link.Read<uint32>(&value);
if (flags) if (flags)
link.Read<uint32>(flags); *flags = value;
return B_OK; return B_OK;
} }
@ -220,7 +222,7 @@ get_font_family(int32 index, font_family *name, uint32 *flags)
\brief Retrieves the family name at the specified index \brief Retrieves the family name at the specified index
\param index Unique font identifier code. \param index Unique font identifier code.
\param name font_family string to receive the name of the family \param name font_family string to receive the name of the family
\param flags iF non-NULL, the values of the flags IS_FIXED and B_HAS_TUNED_FONT are returned \param flags if non-NULL, the values of the flags IS_FIXED and B_HAS_TUNED_FONT are returned
\return B_ERROR if the index does not correspond to a font style \return B_ERROR if the index does not correspond to a font style
*/ */
@ -235,19 +237,24 @@ get_font_style(font_family family, int32 index, font_style *name,
BPrivate::AppServerLink link; BPrivate::AppServerLink link;
link.StartMessage(AS_GET_STYLE_NAME); link.StartMessage(AS_GET_STYLE_NAME);
link.Attach(family,sizeof(font_family)); link.Attach(family, sizeof(font_family));
link.Attach<int32>(index); link.Attach<int32>(index);
if (link.FlushWithReply(code) != B_OK if (link.FlushWithReply(code) != B_OK
|| code != SERVER_TRUE) || code != SERVER_TRUE)
return B_ERROR; return B_ERROR;
link.Read<font_style>(name); font_style style;
if (flags) { link.Read<font_style>(&style);
uint16 face; if (name)
link.Read<uint16>(&face); strcpy(*name, style);
link.Read<uint32>(flags);
} uint32 value;
link.Read<uint32>(&value); // face - unused
link.Read<uint32>(&value); // flags
if (flags)
*flags = value;
return B_OK; return B_OK;
} }

View File

@ -939,7 +939,7 @@ get_system_colors(ColorSet *colors)
link.StartMessage(AS_GET_UI_COLORS); link.StartMessage(AS_GET_UI_COLORS);
int32 code; int32 code;
if (link.FlushWithReply(code) == B_OK) if (link.FlushWithReply(code) == B_OK && code == SERVER_TRUE)
link.Read<ColorSet>(colors); link.Read<ColorSet>(colors);
} }

View File

@ -218,7 +218,7 @@ BPrivateScreen::DesktopColor(uint32 workspace)
BPrivate::AppServerLink link; BPrivate::AppServerLink link;
link.StartMessage(AS_GET_DESKTOP_COLOR); link.StartMessage(AS_GET_DESKTOP_COLOR);
link.Attach<int32>(workspace); link.Attach<uint32>(workspace);
int32 code; int32 code;
if (link.FlushWithReply(code) == B_OK if (link.FlushWithReply(code) == B_OK

View File

@ -2061,7 +2061,7 @@ BWindow::InitData(BRect frame, const char* title, window_look look,
locked = true; locked = true;
} }
// let app_server to know that a window has been created. // let app_server know that a window has been created.
fLink = new BPrivate::PortLink( fLink = new BPrivate::PortLink(
BApplication::Private::ServerLink()->SenderPort(), receivePort); BApplication::Private::ServerLink()->SenderPort(), receivePort);
@ -2073,8 +2073,8 @@ BWindow::InitData(BRect frame, const char* title, window_look look,
} }
fLink->Attach<BRect>(fFrame); fLink->Attach<BRect>(fFrame);
fLink->Attach<int32>((int32)fLook); fLink->Attach<uint32>((uint32)fLook);
fLink->Attach<int32>((int32)fFeel); fLink->Attach<uint32>((uint32)fFeel);
fLink->Attach<uint32>(fFlags); fLink->Attach<uint32>(fFlags);
fLink->Attach<uint32>(workspace); fLink->Attach<uint32>(workspace);
fLink->Attach<int32>(_get_object_token_(this)); fLink->Attach<int32>(_get_object_token_(this));

View File

@ -49,7 +49,7 @@ Angle::Angle(float angle)
} }
//! Constructor //! Constructor
Angle::Angle(void) Angle::Angle()
{ {
fAngleValue=0; fAngleValue=0;
if(tables_initialized==false) if(tables_initialized==false)
@ -60,7 +60,7 @@ Angle::Angle(void)
} }
//! Empty destructor //! Empty destructor
Angle::~Angle(void) Angle::~Angle()
{ {
} }
@ -116,7 +116,7 @@ Angle Angle::InvSine(float value)
// current sintable[i] is less than value. Pick the degree value which is closer // current sintable[i] is less than value. Pick the degree value which is closer
// to the passed value // to the passed value
if( (value - sintable[i]) > (sintable[i+1] - value) ) if( (value - sintable[i]) > (sintable[i+1] - value) )
return (i+1); return Angle(i+1);
return Angle(i); // value is closer to previous return Angle(i); // value is closer to previous
} }
@ -155,7 +155,7 @@ Angle Angle::InvCosine(float value)
// current costable[i] is less than value. Pick the degree value which is closer // current costable[i] is less than value. Pick the degree value which is closer
// to the passed value // to the passed value
if( (value - costable[i]) < (costable[i+1] - value) ) if( (value - costable[i]) < (costable[i+1] - value) )
return (i+1); return Angle(i+1);
return Angle(i); // value is closer to previous return Angle(i); // value is closer to previous
} }
@ -196,7 +196,7 @@ Angle Angle::InvTangent(float value)
i--; i--;
if( (value - tantable[i]) < (tantable[i+1] - value) ) if( (value - tantable[i]) < (tantable[i+1] - value) )
return (i+1); return Angle(i+1);
return Angle(i); // value is closer to previous return Angle(i); // value is closer to previous
} }

View File

@ -33,44 +33,45 @@
\class Angle Angle.h \class Angle Angle.h
\brief Class for speeding up trig functions. Works in degrees only. \brief Class for speeding up trig functions. Works in degrees only.
*/ */
class Angle class Angle {
{
public: public:
Angle(float angle); Angle(float angle);
Angle(void); Angle();
virtual ~Angle(void); virtual ~Angle();
void Normalize(void); void Normalize();
float Sine(void); float Sine(void);
Angle InvSine(float value); Angle InvSine(float value);
float Cosine(void); float Cosine(void);
Angle InvCosine(float value); Angle InvCosine(float value);
float Tangent(int *status=NULL); float Tangent(int *status=NULL);
Angle InvTangent(float value); Angle InvTangent(float value);
uint8 Quadrant(void); uint8 Quadrant(void);
Angle Constrain180(void); Angle Constrain180(void);
Angle Constrain90(void); Angle Constrain90(void);
void SetValue(float angle); void SetValue(float angle);
float Value(void) const; float Value(void) const;
Angle &operator=(const Angle &from);
Angle &operator=(const float &from); Angle &operator=(const Angle &from);
Angle &operator=(const long &from); Angle &operator=(const float &from);
Angle &operator=(const int &from); Angle &operator=(const long &from);
bool operator==(const Angle &from); Angle &operator=(const int &from);
bool operator!=(const Angle &from);
bool operator<(const Angle &from); bool operator==(const Angle &from);
bool operator>(const Angle &from); bool operator!=(const Angle &from);
bool operator>=(const Angle &from); bool operator<(const Angle &from);
bool operator<=(const Angle &from); bool operator>(const Angle &from);
bool operator>=(const Angle &from);
bool operator<=(const Angle &from);
protected: protected:
float fAngleValue; float fAngleValue;
void InitTrigTables(void); void InitTrigTables(void);
}; };
#endif #endif

View File

@ -81,9 +81,9 @@ ColorSet gGUIColorSet;
threads, loads user preferences for the UI and decorator, and allocates various locks. threads, loads user preferences for the UI and decorator, and allocates various locks.
*/ */
#if TEST_MODE #if TEST_MODE
AppServer::AppServer(void) : BApplication (SERVER_SIGNATURE), AppServer::AppServer() : BApplication (SERVER_SIGNATURE),
#else #else
AppServer::AppServer(void) : AppServer::AppServer() :
#endif #endif
fAppListLock("application list"), fAppListLock("application list"),
fCursorSem(-1), fCursorSem(-1),
@ -419,7 +419,7 @@ AppServer::DispatchMessage(int32 code, BPrivate::PortLink &msg)
// Attached data: // Attached data:
// 1) port_id - receiver port of a regular app // 1) port_id - receiver port of a regular app
// 2) port_id - client looper port - for send messages to the client // 2) port_id - client looper port - for sending messages to the client
// 2) team_id - app's team ID // 2) team_id - app's team ID
// 3) int32 - handler token of the regular app // 3) int32 - handler token of the regular app
// 4) char * - signature of the regular app // 4) char * - signature of the regular app

View File

@ -4,6 +4,7 @@
* *
* Author: DarkWyrm <bpmagic@columbus.rr.com> * Author: DarkWyrm <bpmagic@columbus.rr.com>
*/ */
#ifndef _HAIKU_APP_SERVER_H_ #ifndef _HAIKU_APP_SERVER_H_
#define _HAIKU_APP_SERVER_H_ #define _HAIKU_APP_SERVER_H_
@ -16,13 +17,8 @@
#include "ServerConfig.h" #include "ServerConfig.h"
class Layer;
class BMessage;
class ServerApp; class ServerApp;
class DisplayDriver;
class CursorManager;
class BitmapManager; class BitmapManager;
class DecorManager;
class ColorSet; class ColorSet;
namespace BPrivate { namespace BPrivate {
@ -44,48 +40,46 @@ class AppServer
#endif #endif
{ {
public: public:
AppServer(void); AppServer();
~AppServer(void); ~AppServer();
static int32 PollerThread(void *data); static int32 PollerThread(void *data);
static int32 PicassoThread(void *data); static int32 PicassoThread(void *data);
thread_id Run(void); thread_id Run(void);
void MainLoop(void); void MainLoop(void);
void PostMessage(int32 code); void PostMessage(int32 code);
void DispatchMessage(int32 code, BPrivate::PortLink &link); void DispatchMessage(int32 code, BPrivate::PortLink &link);
ServerApp* FindApp(const char *sig); ServerApp* FindApp(const char *sig);
private: private:
friend void BroadcastToAllApps(const int32 &code); friend void BroadcastToAllApps(const int32 &code);
void LaunchCursorThread();
void LaunchInputServer();
static int32 CursorThread(void *data);
port_id fMessagePort; void LaunchCursorThread();
port_id fServerInputPort; void LaunchInputServer();
static int32 CursorThread(void *data);
volatile bool fQuitting; port_id fMessagePort;
port_id fServerInputPort;
BLocker fAppListLock; volatile bool fQuitting;
BList fAppList;
thread_id fPicassoThreadID; BLocker fAppListLock;
BList fAppList;
thread_id fISThreadID; thread_id fPicassoThreadID;
thread_id fCursorThreadID;
sem_id fCursorSem;
area_id fCursorArea;
uint32 *fCursorAddr;
port_id fISASPort; thread_id fISThreadID;
port_id fISPort; thread_id fCursorThreadID;
sem_id fCursorSem;
area_id fCursorArea;
uint32 *fCursorAddr;
sem_id fShutdownSemaphore; port_id fISASPort;
int32 fShutdownCount; port_id fISPort;
DisplayDriver *fDriver; sem_id fShutdownSemaphore;
int32 fShutdownCount;
}; };
extern BitmapManager *gBitmapManager; extern BitmapManager *gBitmapManager;

View File

@ -35,10 +35,8 @@
#include "ColorSet.h" #include "ColorSet.h"
#include "ServerConfig.h" #include "ServerConfig.h"
//! Constructor which does nothing //! Constructor which does nothing
ColorSet::ColorSet(void) ColorSet::ColorSet()
{ {
} }
@ -56,7 +54,8 @@ ColorSet::ColorSet(const ColorSet &cs)
\param cs Color set to copy from \param cs Color set to copy from
\return The new values assigned to the color set \return The new values assigned to the color set
*/ */
ColorSet & ColorSet::operator=(const ColorSet &cs) ColorSet &
ColorSet::operator=(const ColorSet &cs)
{ {
SetColors(cs); SetColors(cs);
return *this; return *this;
@ -67,7 +66,8 @@ ColorSet & ColorSet::operator=(const ColorSet &cs)
and, yes, *IT EVEN MAKES french fries!!* and, yes, *IT EVEN MAKES french fries!!*
\param cs Color set to copy from \param cs Color set to copy from
*/ */
void ColorSet::SetColors(const ColorSet &cs) void
ColorSet::SetColors(const ColorSet &cs)
{ {
panel_background=cs.panel_background; panel_background=cs.panel_background;
panel_text=cs.panel_text; panel_text=cs.panel_text;
@ -104,7 +104,8 @@ void ColorSet::SetColors(const ColorSet &cs)
} }
//! Prints all color set elements to stdout //! Prints all color set elements to stdout
void ColorSet::PrintToStream(void) const void
ColorSet::PrintToStream(void) const
{ {
printf("panel_background "); PrintMember(panel_background); printf("panel_background "); PrintMember(panel_background);
printf("panel_text "); PrintMember(panel_text); printf("panel_text "); PrintMember(panel_text);
@ -145,7 +146,8 @@ void ColorSet::PrintToStream(void) const
\brief Assigns the default system colors to the passed ColorSet object \brief Assigns the default system colors to the passed ColorSet object
\param set The ColorSet object to set to defaults \param set The ColorSet object to set to defaults
*/ */
void ColorSet::SetToDefaults(void) void
ColorSet::SetToDefaults(void)
{ {
#ifdef DEBUG_COLORSET #ifdef DEBUG_COLORSET
printf("Initializing color settings to defaults\n"); printf("Initializing color settings to defaults\n");
@ -182,7 +184,8 @@ printf("Initializing color settings to defaults\n");
\brief Attaches the color set's members as data to the given BMessage \brief Attaches the color set's members as data to the given BMessage
\param msg The message to receive the attributes \param msg The message to receive the attributes
*/ */
bool ColorSet::ConvertToMessage(BMessage *msg) const bool
ColorSet::ConvertToMessage(BMessage *msg) const
{ {
if(!msg) if(!msg)
return false; return false;
@ -236,7 +239,8 @@ bool ColorSet::ConvertToMessage(BMessage *msg) const
\param msg The message containing the data for the color set's colors \param msg The message containing the data for the color set's colors
*/ */
bool ColorSet::ConvertFromMessage(const BMessage *msg) bool
ColorSet::ConvertFromMessage(const BMessage *msg)
{ {
if(!msg) if(!msg)
return false; return false;
@ -304,7 +308,8 @@ bool ColorSet::ConvertFromMessage(const BMessage *msg)
\param string name of the color to receive the value \param string name of the color to receive the value
\param value An rgb_color which is the new value of the member \param value An rgb_color which is the new value of the member
*/ */
status_t ColorSet::SetColor(const char *string, rgb_color value) status_t
ColorSet::SetColor(const char *string, rgb_color value)
{ {
if(!string) if(!string)
return B_BAD_VALUE; return B_BAD_VALUE;
@ -321,7 +326,8 @@ status_t ColorSet::SetColor(const char *string, rgb_color value)
\param string name of the color to obtain \param string name of the color to obtain
\return The set's color or (0,0,0,0) if not found \return The set's color or (0,0,0,0) if not found
*/ */
rgb_color ColorSet::StringToColor(const char *string) rgb_color
ColorSet::StringToColor(const char *string)
{ {
rgb_color *col=StringToMember(string); rgb_color *col=StringToMember(string);
if(!col) if(!col)
@ -338,7 +344,8 @@ rgb_color ColorSet::StringToColor(const char *string)
\param string name of the color member to obtain \param string name of the color member to obtain
\return An RGBColor pointer or NULL if not found \return An RGBColor pointer or NULL if not found
*/ */
rgb_color *ColorSet::StringToMember(const char *string) rgb_color *
ColorSet::StringToMember(const char *string)
{ {
if(!string) if(!string)
return NULL; return NULL;
@ -398,7 +405,8 @@ rgb_color *ColorSet::StringToMember(const char *string)
} }
rgb_color ColorSet::AttributeToColor(int32 which) rgb_color
ColorSet::AttributeToColor(int32 which)
{ {
switch(which) switch(which)
{ {
@ -541,7 +549,8 @@ rgb_color ColorSet::AttributeToColor(int32 which)
} }
} }
void ColorSet::PrintMember(const rgb_color &color) const void
ColorSet::PrintMember(const rgb_color &color) const
{ {
printf("rgb_color(%d, %d, %d, %d)", color.red,color.green,color.blue,color.alpha); printf("rgb_color(%d, %d, %d, %d)", color.red,color.green,color.blue,color.alpha);
} }
@ -551,7 +560,8 @@ void ColorSet::PrintMember(const rgb_color &color) const
\param set the set to receive the system colors \param set the set to receive the system colors
\return B_OK if successful. See BFile for other error codes \return B_OK if successful. See BFile for other error codes
*/ */
status_t LoadColorSet(const char *path, ColorSet *set) status_t
LoadColorSet(const char *path, ColorSet *set)
{ {
BFile file(path,B_READ_ONLY); BFile file(path,B_READ_ONLY);
if(file.InitCheck()!=B_OK) if(file.InitCheck()!=B_OK)
@ -573,7 +583,8 @@ status_t LoadColorSet(const char *path, ColorSet *set)
\param set ColorSet containing the colors to save \param set ColorSet containing the colors to save
\return B_OK if successful. See BFile for other error codes \return B_OK if successful. See BFile for other error codes
*/ */
status_t SaveColorSet(const char *path, const ColorSet &set) status_t
SaveColorSet(const char *path, const ColorSet &set)
{ {
// TODO: Move this check to the app_server // TODO: Move this check to the app_server
BEntry entry(SERVER_SETTINGS_DIR); BEntry entry(SERVER_SETTINGS_DIR);
@ -591,4 +602,3 @@ status_t SaveColorSet(const char *path, const ColorSet &set)
msg.Flatten(&file); msg.Flatten(&file);
return B_OK; return B_OK;
} }

View File

@ -420,13 +420,14 @@ ServerApp::_MessageLooper()
// Go ahead and fix if you have an idea for unification... // Go ahead and fix if you have an idea for unification...
// Attached data: // Attached data:
// 2) BRect window frame // 1) BRect window frame
// 3) uint32 window look // 2) uint32 window look
// 4) uint32 window feel // 3) uint32 window feel
// 5) uint32 window flags // 4) uint32 window flags
// 6) uint32 workspace index // 5) uint32 workspace index
// 7) int32 BHandler token of the window // 6) int32 BHandler token of the window
// 8) port_id window's message port // 7) port_id window's reply port
// 8) port_id window's looper port
// 9) const char * title // 9) const char * title
BRect frame; BRect frame;
@ -488,14 +489,16 @@ ServerApp::_MessageLooper()
// NOTE/TODO: Code duplication in part to above case. // NOTE/TODO: Code duplication in part to above case.
// Attached data: // Attached data:
// 1) int32 bitmap token
// 2) BRect window frame // 2) BRect window frame
// 3) uint32 window look // 3) uint32 window look
// 4) uint32 window feel // 4) uint32 window feel
// 5) uint32 window flags // 5) uint32 window flags
// 6) uint32 workspace index // 6) uint32 workspace index
// 7) int32 BHandler token of the window // 7) int32 BHandler token of the window
// 8) port_id window's message port // 8) port_id window's reply port
// 9) const char * title // 9) port_id window's looper port
// 10) const char * title
BRect frame; BRect frame;
int32 bitmapToken; int32 bitmapToken;
@ -842,7 +845,7 @@ ServerApp::_DispatchMessage(int32 code, BPrivate::LinkReceiver &link)
STRACE(("ServerApp %s: Received BBitmap creation request\n", Signature())); STRACE(("ServerApp %s: Received BBitmap creation request\n", Signature()));
// Allocate a bitmap for an application // Allocate a bitmap for an application
// Attached Data: // Attached Data:
// 1) BRect bounds // 1) BRect bounds
// 2) color_space space // 2) color_space space
// 3) int32 bitmap_flags // 3) int32 bitmap_flags
@ -878,7 +881,7 @@ ServerApp::_DispatchMessage(int32 code, BPrivate::LinkReceiver &link)
if (bitmap && fBitmapList.AddItem((void*)bitmap)) { if (bitmap && fBitmapList.AddItem((void*)bitmap)) {
fLink.StartMessage(SERVER_TRUE); fLink.StartMessage(SERVER_TRUE);
fLink.Attach<int32>(bitmap->Token()); fLink.Attach<int32>(bitmap->Token());
fLink.Attach<int32>(bitmap->Area()); fLink.Attach<area_id>(bitmap->Area());
fLink.Attach<int32>(bitmap->AreaOffset()); fLink.Attach<int32>(bitmap->AreaOffset());
} else { } else {
// alternatively, if something went wrong, we reply with SERVER_FALSE // alternatively, if something went wrong, we reply with SERVER_FALSE
@ -896,7 +899,7 @@ ServerApp::_DispatchMessage(int32 code, BPrivate::LinkReceiver &link)
// Attached Data: // Attached Data:
// 1) int32 token // 1) int32 token
// 2) int32 reply port // 2) int32 reply port
// Reply Code: SERVER_TRUE if successful, // Reply Code: SERVER_TRUE if successful,
// SERVER_FALSE if the buffer was already deleted or was not found // SERVER_FALSE if the buffer was already deleted or was not found
int32 id; int32 id;
@ -1013,8 +1016,6 @@ ServerApp::_DispatchMessage(int32 code, BPrivate::LinkReceiver &link)
case AS_QUERY_CURSOR_HIDDEN: case AS_QUERY_CURSOR_HIDDEN:
{ {
STRACE(("ServerApp %s: Received IsCursorHidden request\n", Signature())); STRACE(("ServerApp %s: Received IsCursorHidden request\n", Signature()));
// Attached data
// 1) int32 port to reply to
fLink.StartMessage(fCursorHidden ? SERVER_TRUE : SERVER_FALSE); fLink.StartMessage(fCursorHidden ? SERVER_TRUE : SERVER_FALSE);
fLink.Flush(); fLink.Flush();
break; break;
@ -1131,6 +1132,9 @@ ServerApp::_DispatchMessage(int32 code, BPrivate::LinkReceiver &link)
scroll_bar_info info; scroll_bar_info info;
if (link.Read<scroll_bar_info>(&info) == B_OK) if (link.Read<scroll_bar_info>(&info) == B_OK)
gDesktop->SetScrollBarInfo(info); gDesktop->SetScrollBarInfo(info);
fLink.StartMessage(SERVER_TRUE);
fLink.Flush();
break; break;
} }
case AS_FOCUS_FOLLOWS_MOUSE: case AS_FOCUS_FOLLOWS_MOUSE:
@ -1145,7 +1149,9 @@ ServerApp::_DispatchMessage(int32 code, BPrivate::LinkReceiver &link)
case AS_SET_FOCUS_FOLLOWS_MOUSE: case AS_SET_FOCUS_FOLLOWS_MOUSE:
{ {
STRACE(("ServerApp %s: Set Focus Follows Mouse in use\n", Signature())); STRACE(("ServerApp %s: Set Focus Follows Mouse in use\n", Signature()));
// ToDo: implement me! bool follow;
if (link.Read<bool>(&follow) == B_OK)
gDesktop->UseFFMouse(follow);
break; break;
} }
case AS_SET_MOUSE_MODE: case AS_SET_MOUSE_MODE:
@ -1172,8 +1178,6 @@ ServerApp::_DispatchMessage(int32 code, BPrivate::LinkReceiver &link)
{ {
// Client application is asking for all the system colors at once // Client application is asking for all the system colors at once
// using a ColorSet object // using a ColorSet object
gGUIColorSet.Lock(); gGUIColorSet.Lock();
fLink.StartMessage(SERVER_TRUE); fLink.StartMessage(SERVER_TRUE);
@ -1181,7 +1185,6 @@ ServerApp::_DispatchMessage(int32 code, BPrivate::LinkReceiver &link)
fLink.Flush(); fLink.Flush();
gGUIColorSet.Unlock(); gGUIColorSet.Unlock();
break; break;
} }
case AS_SET_UI_COLORS: case AS_SET_UI_COLORS:
@ -1191,7 +1194,6 @@ ServerApp::_DispatchMessage(int32 code, BPrivate::LinkReceiver &link)
// Attached data: // Attached data:
// 1) ColorSet new colors to use // 1) ColorSet new colors to use
gGUIColorSet.Lock(); gGUIColorSet.Lock();
link.Read<ColorSet>(&gGUIColorSet); link.Read<ColorSet>(&gGUIColorSet);
gGUIColorSet.Unlock(); gGUIColorSet.Unlock();
@ -1239,6 +1241,7 @@ ServerApp::_DispatchMessage(int32 code, BPrivate::LinkReceiver &link)
// if just checking, just give an answer, // if just checking, just give an answer,
// if not and needs updated, // if not and needs updated,
// sync the font list and return true else return false // sync the font list and return true else return false
// TODO: actually do the above...
fLink.StartMessage(SERVER_FALSE); fLink.StartMessage(SERVER_FALSE);
fLink.Flush(); fLink.Flush();
break; break;
@ -1259,9 +1262,11 @@ ServerApp::_DispatchMessage(int32 code, BPrivate::LinkReceiver &link)
FontFamily *ffamily = gFontServer->GetFamily(id); FontFamily *ffamily = gFontServer->GetFamily(id);
if (ffamily) { if (ffamily) {
font_family fam; font_family fam;
strcpy(fam, ffamily->Name()); strncpy(fam, ffamily->Name(), sizeof(font_family) - 1);
fam[sizeof(font_family) - 1] = 0;
fLink.StartMessage(SERVER_TRUE);
fLink.Attach(fam, sizeof(font_family)); fLink.Attach(fam, sizeof(font_family));
fLink.Attach<int32>(ffamily->GetFlags()); fLink.Attach<uint32>(ffamily->GetFlags());
} else } else
fLink.StartMessage(SERVER_FALSE); fLink.StartMessage(SERVER_FALSE);
@ -1281,25 +1286,26 @@ ServerApp::_DispatchMessage(int32 code, BPrivate::LinkReceiver &link)
// 2) uint16 - appropriate face values // 2) uint16 - appropriate face values
// 3) uint32 - flags of font style (B_IS_FIXED || B_HAS_TUNED_FONT) // 3) uint32 - flags of font style (B_IS_FIXED || B_HAS_TUNED_FONT)
int32 styid; int32 styleid;
font_family fam; font_family fam;
link.Read(fam,sizeof(font_family)); link.Read(fam, sizeof(font_family));
link.Read<int32>(&styid); link.Read<int32>(&styleid);
gFontServer->Lock(); gFontServer->Lock();
FontStyle *fstyle = gFontServer->GetStyle(fam, styid); FontStyle *fstyle = gFontServer->GetStyle(fam, styleid);
if (fstyle) { if (fstyle) {
font_family sty; font_style style;
strcpy(sty, fstyle->Name()); strncpy(style, fstyle->Name(), sizeof(font_style) - 1);
style[sizeof(font_style) - 1] = 0;
fLink.StartMessage(SERVER_TRUE); fLink.StartMessage(SERVER_TRUE);
fLink.Attach(sty,sizeof(font_style)); fLink.Attach(style, sizeof(font_style));
fLink.Attach<int32>(fstyle->GetFace()); fLink.Attach<uint32>(fstyle->GetFace());
fLink.Attach<int32>(fstyle->GetFlags()); fLink.Attach<uint32>(fstyle->GetFlags());
} else } else
fLink.StartMessage(SERVER_FALSE); fLink.StartMessage(SERVER_FALSE);
fLink.Flush(); fLink.Flush();
gFontServer->Unlock(); gFontServer->Unlock();
break; break;
} }
@ -1323,8 +1329,10 @@ ServerApp::_DispatchMessage(int32 code, BPrivate::LinkReceiver &link)
gFontServer->Lock(); gFontServer->Lock();
FontStyle *fstyle = gFontServer->GetStyle(famid, styid); FontStyle *fstyle = gFontServer->GetStyle(famid, styid);
if (fstyle) { if (fstyle) {
strcpy(fam, fstyle->Family()->Name()); strncpy(fam, fstyle->Family()->Name(), sizeof(font_family) - 1);
strcpy(sty, fstyle->Name()); strncpy(sty, fstyle->Name(), sizeof(font_style) - 1);
fam[sizeof(font_family) - 1] = 0;
sty[sizeof(font_style) - 1] = 0;
fLink.StartMessage(SERVER_TRUE); fLink.StartMessage(SERVER_TRUE);
fLink.Attach(fam, sizeof(font_family)); fLink.Attach(fam, sizeof(font_family));
@ -1350,7 +1358,7 @@ ServerApp::_DispatchMessage(int32 code, BPrivate::LinkReceiver &link)
// NOTE: While this may be unimplemented, we can safely return // NOTE: While this may be unimplemented, we can safely return
// SERVER_FALSE. This will force the BFont code to default to // SERVER_FALSE. This will force the BFont code to default to
// B_LEFT_TO_RIGHT, which is what the vast majority of fonts will be. // B_LEFT_TO_RIGHT, which is what the vast majority of fonts will be.
// This will be fixed later. // TODO: This will be fixed later.
int32 famid, styid; int32 famid, styid;
link.Read<int32>(&famid); link.Read<int32>(&famid);
link.Read<int32>(&styid); link.Read<int32>(&styid);
@ -1642,6 +1650,8 @@ ServerApp::_DispatchMessage(int32 code, BPrivate::LinkReceiver &link)
break; break;
} }
case AS_SET_SYSFONT_PLAIN: case AS_SET_SYSFONT_PLAIN:
case AS_SET_SYSFONT_BOLD:
case AS_SET_SYSFONT_FIXED:
{ {
FTRACE(("ServerApp %s: AS_SET_SYSFONT_PLAIN\n", Signature())); FTRACE(("ServerApp %s: AS_SET_SYSFONT_PLAIN\n", Signature()));
// Returns: // Returns:
@ -1652,7 +1662,14 @@ ServerApp::_DispatchMessage(int32 code, BPrivate::LinkReceiver &link)
// 5) uint32 - font flags // 5) uint32 - font flags
gFontServer->Lock(); gFontServer->Lock();
ServerFont *sf = gFontServer->GetSystemPlain(); ServerFont *sf = NULL;
switch (code) {
case AS_SET_SYSFONT_PLAIN: sf = gFontServer->GetSystemPlain(); break;
case AS_SET_SYSFONT_BOLD: sf = gFontServer->GetSystemBold(); break;
case AS_SET_SYSFONT_FIXED: sf = gFontServer->GetSystemFixed(); break;
}
if (sf) { if (sf) {
fLink.StartMessage(SERVER_TRUE); fLink.StartMessage(SERVER_TRUE);
fLink.Attach<uint16>(sf->FamilyID()); fLink.Attach<uint16>(sf->FamilyID());
@ -1692,58 +1709,6 @@ ServerApp::_DispatchMessage(int32 code, BPrivate::LinkReceiver &link)
gFontServer->Unlock(); gFontServer->Unlock();
break; break;
} }
case AS_SET_SYSFONT_BOLD:
{
FTRACE(("ServerApp %s: AS_SET_SYSFONT_BOLD\n", Signature()));
// Returns:
// 1) uint16 - family ID
// 2) uint16 - style ID
// 3) float - size in points
// 4) uint16 - face flags
// 5) uint32 - font flags
gFontServer->Lock();
ServerFont *sf = gFontServer->GetSystemBold();
if (sf) {
fLink.StartMessage(SERVER_TRUE);
fLink.Attach<uint16>(sf->FamilyID());
fLink.Attach<uint16>(sf->StyleID());
fLink.Attach<float>(sf->Size());
fLink.Attach<uint16>(sf->Face());
fLink.Attach<uint32>(sf->Flags());
} else
fLink.StartMessage(SERVER_FALSE);
fLink.Flush();
gFontServer->Unlock();
break;
}
case AS_SET_SYSFONT_FIXED:
{
FTRACE(("ServerApp %s: AS_SET_SYSFONT_FIXED\n", Signature()));
// Returns:
// 1) uint16 - family ID
// 2) uint16 - style ID
// 3) float - size in points
// 4) uint16 - face flags
// 5) uint32 - font flags
gFontServer->Lock();
ServerFont *sf = gFontServer->GetSystemFixed();
if (sf) {
fLink.StartMessage(SERVER_TRUE);
fLink.Attach<uint16>(sf->FamilyID());
fLink.Attach<uint16>(sf->StyleID());
fLink.Attach<float>(sf->Size());
fLink.Attach<uint16>(sf->Face());
fLink.Attach<uint32>(sf->Flags());
} else
fLink.StartMessage(SERVER_FALSE);
fLink.Flush();
gFontServer->Unlock();
break;
}
case AS_GET_GLYPH_SHAPES: case AS_GET_GLYPH_SHAPES:
{ {
FTRACE(("ServerApp %s: AS_GET_GLYPH_SHAPES\n", Signature())); FTRACE(("ServerApp %s: AS_GET_GLYPH_SHAPES\n", Signature()));
@ -1776,8 +1741,7 @@ ServerApp::_DispatchMessage(int32 code, BPrivate::LinkReceiver &link)
link.Read<int32>(&numChars); link.Read<int32>(&numChars);
char charArray[numChars]; char charArray[numChars];
for (int32 i = 0; i < numChars; i++) link.Read(&charArray, numChars);
link.Read<char>(&charArray[i]);
ServerFont font; ServerFont font;
if (font.SetFamilyAndStyle(famid, styid) == B_OK) { if (font.SetFamilyAndStyle(famid, styid) == B_OK) {
@ -1935,9 +1899,8 @@ ServerApp::_DispatchMessage(int32 code, BPrivate::LinkReceiver &link)
{ {
STRACE(("ServerApp %s: AS_SCREEN_GET_MODE\n", Signature())); STRACE(("ServerApp %s: AS_SCREEN_GET_MODE\n", Signature()));
// Attached data // Attached data
// 1) int32 port to reply to // 1) screen_id screen
// 2) screen_id // 2) uint32 workspace index
// 3) workspace index
screen_id id; screen_id id;
link.Read<screen_id>(&id); link.Read<screen_id>(&id);
uint32 workspace; uint32 workspace;
@ -1962,11 +1925,10 @@ ServerApp::_DispatchMessage(int32 code, BPrivate::LinkReceiver &link)
{ {
STRACE(("ServerApp %s: AS_SCREEN_SET_MODE\n", Signature())); STRACE(("ServerApp %s: AS_SCREEN_SET_MODE\n", Signature()));
// Attached data // Attached data
// 1) int32 port to reply to // 1) screen_id
// 2) screen_id // 2) workspace index
// 3) workspace index // 3) display_mode to set
// 4) display_mode to set // 4) 'makedefault' boolean
// 5) 'makedefault' boolean
// TODO: See above: workspaces support, etc. // TODO: See above: workspaces support, etc.
screen_id id; screen_id id;
@ -1984,7 +1946,7 @@ ServerApp::_DispatchMessage(int32 code, BPrivate::LinkReceiver &link)
// TODO: lock RootLayer, set mode and tell it to update it's frame and all clipping // TODO: lock RootLayer, set mode and tell it to update it's frame and all clipping
// optionally put this into a message and let the root layer thread handle it. // optionally put this into a message and let the root layer thread handle it.
// status_t ret = gDesktop->ScreenAt(0)->SetMode(mode); // status_t ret = gDesktop->ScreenAt(0)->SetMode(mode);
status_t ret = B_ERROR; status_t ret = B_ERROR;
fLink.StartMessage(SERVER_TRUE); fLink.StartMessage(SERVER_TRUE);
fLink.Attach<status_t>(ret); fLink.Attach<status_t>(ret);
@ -2015,6 +1977,10 @@ status_t ret = B_ERROR;
case AS_GET_MODE_LIST: case AS_GET_MODE_LIST:
{ {
screen_id id;
link.Read<screen_id>(&id);
// TODO: use this screen id
display_mode* modeList; display_mode* modeList;
uint32 count; uint32 count;
if (gDesktop->GetHWInterface()->GetModeList(&modeList, &count) == B_OK) { if (gDesktop->GetHWInterface()->GetModeList(&modeList, &count) == B_OK) {
@ -2052,8 +2018,8 @@ status_t ret = B_ERROR;
{ {
STRACE(("ServerApp %s: get desktop color\n", Signature())); STRACE(("ServerApp %s: get desktop color\n", Signature()));
int32 workspaceIndex = 0; uint32 workspaceIndex = 0;
link.Read<int32>(&workspaceIndex); link.Read<uint32>(&workspaceIndex);
// ToDo: for some reason, we currently get "1" as no. of workspace // ToDo: for some reason, we currently get "1" as no. of workspace
workspaceIndex = 0; workspaceIndex = 0;
@ -2066,7 +2032,6 @@ status_t ret = B_ERROR;
Workspace *workspace = root->WorkspaceAt(workspaceIndex); Workspace *workspace = root->WorkspaceAt(workspaceIndex);
if (workspace != NULL) { if (workspace != NULL) {
fLink.StartMessage(SERVER_TRUE); fLink.StartMessage(SERVER_TRUE);
//rgb_color color;
fLink.Attach<rgb_color>(workspace->BGColor().GetColor32()); fLink.Attach<rgb_color>(workspace->BGColor().GetColor32());
} else } else
fLink.StartMessage(SERVER_FALSE); fLink.StartMessage(SERVER_FALSE);
@ -2093,7 +2058,6 @@ status_t ret = B_ERROR;
fLink.StartMessage(SERVER_FALSE); fLink.StartMessage(SERVER_FALSE);
fLink.Flush(); fLink.Flush();
break; break;
} }
@ -2109,7 +2073,6 @@ status_t ret = B_ERROR;
fLink.StartMessage(SERVER_TRUE); fLink.StartMessage(SERVER_TRUE);
fLink.Attach<sem_id>(semaphore); fLink.Attach<sem_id>(semaphore);
fLink.Flush(); fLink.Flush();
break; break;
} }
@ -2119,6 +2082,7 @@ status_t ret = B_ERROR;
// We aren't using the screen_id for now... // We aren't using the screen_id for now...
screen_id id; screen_id id;
link.Read<screen_id>(&id); link.Read<screen_id>(&id);
display_timing_constraints constraints; display_timing_constraints constraints;
if (gDesktop->GetHWInterface()->GetTimingConstraints(&constraints) == B_OK) { if (gDesktop->GetHWInterface()->GetTimingConstraints(&constraints) == B_OK) {
fLink.StartMessage(SERVER_TRUE); fLink.StartMessage(SERVER_TRUE);
@ -2127,7 +2091,6 @@ status_t ret = B_ERROR;
fLink.StartMessage(SERVER_FALSE); fLink.StartMessage(SERVER_FALSE);
fLink.Flush(); fLink.Flush();
break; break;
} }
@ -2149,7 +2112,6 @@ status_t ret = B_ERROR;
fLink.StartMessage(SERVER_FALSE); fLink.StartMessage(SERVER_FALSE);
fLink.Flush(); fLink.Flush();
break; break;
} }
@ -2168,7 +2130,6 @@ status_t ret = B_ERROR;
fLink.StartMessage(SERVER_FALSE); fLink.StartMessage(SERVER_FALSE);
fLink.Flush(); fLink.Flush();
break; break;
} }
@ -2183,7 +2144,6 @@ status_t ret = B_ERROR;
fLink.StartMessage(SERVER_TRUE); fLink.StartMessage(SERVER_TRUE);
fLink.Attach<uint32>(state); fLink.Attach<uint32>(state);
fLink.Flush(); fLink.Flush();
break; break;
} }

View File

@ -1088,13 +1088,21 @@ myRootLayer->Unlock();
fLink.Flush(); fLink.Flush();
} else { } else {
// TODO: Watch out for the coordinate system in AS_LAYER_GET_CLIP_REGION // TODO: Watch out for the coordinate system in AS_LAYER_GET_CLIP_REGION
#ifndef NEW_CLIPPING
int32 rectCount = fCurrentLayer->fVisible.CountRects(); int32 rectCount = fCurrentLayer->fVisible.CountRects();
#else
int32 rectCount = fCurrentLayer->fVisible2.CountRects();
#endif
fLink.StartMessage(SERVER_TRUE); fLink.StartMessage(SERVER_TRUE);
fLink.Attach<int32>(rectCount); fLink.Attach<int32>(rectCount);
for (int32 i = 0; i < rectCount; i++) for (int32 i = 0; i < rectCount; i++)
#ifndef NEW_CLIPPING
fLink.Attach<BRect>(fCurrentLayer->ConvertFromTop(fCurrentLayer->fVisible.RectAt(i))); fLink.Attach<BRect>(fCurrentLayer->ConvertFromTop(fCurrentLayer->fVisible.RectAt(i)));
#else
fLink.Attach<BRect>(fCurrentLayer->ConvertFromTop(fCurrentLayer->fVisible2.RectAt(i)));
#endif
fLink.Flush(); fLink.Flush();
} }