Added skeleton for desktop management classes
Implemented parts of desktop management functions in Desktop.h git-svn-id: file:///srv/svn/repos/haiku/trunk/current@2696 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
6e4bef603f
commit
d529723048
@ -27,26 +27,37 @@
|
|||||||
#include "DisplayDriver.h"
|
#include "DisplayDriver.h"
|
||||||
#include "Desktop.h"
|
#include "Desktop.h"
|
||||||
|
|
||||||
#ifdef VIEWDRIVER
|
|
||||||
#include "ViewDriver.h"
|
#include "ViewDriver.h"
|
||||||
#endif
|
|
||||||
#ifdef SCREENDRIVER
|
#if DISPLAYDRIVER == SCREENDRIVER
|
||||||
#include "ScreenDriver.h"
|
#include "ScreenDriver.h"
|
||||||
#endif
|
#endif
|
||||||
#ifdef HWDRIVER
|
|
||||||
|
#if DISPLAYDRIVER == HWDRIVER
|
||||||
#include "AccelerantDriver.h"
|
#include "AccelerantDriver.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//#include "ServerWindow.h"
|
#include "ServerWindow.h"
|
||||||
|
|
||||||
|
//! This namespace encapsulates all globals specifically for the desktop
|
||||||
namespace desktop_private {
|
namespace desktop_private {
|
||||||
int8 *dragmessage;
|
int8 *dragmessage;
|
||||||
int32 dragmessagesize;
|
int32 dragmessagesize;
|
||||||
sem_id draglock;
|
sem_id draglock,
|
||||||
|
layerlock,
|
||||||
|
workspacelock;
|
||||||
|
BList *screenlist;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief Initializes the desktop for use.
|
||||||
|
|
||||||
|
InitDesktop creates all workspaces, starts up the appropriate DisplayDriver, and
|
||||||
|
generally gets everything ready for the server to use.
|
||||||
|
*/
|
||||||
void InitDesktop(void)
|
void InitDesktop(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShutdownDesktop(void)
|
void ShutdownDesktop(void)
|
||||||
|
130
src/servers/app/server/DesktopClasses.cpp
Normal file
130
src/servers/app/server/DesktopClasses.cpp
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
#include "DesktopClasses.h"
|
||||||
|
|
||||||
|
Workspace::Workspace(const graphics_card_info &gcinfo, const frame_buffer_info &fbinfo)
|
||||||
|
{
|
||||||
|
_gcinfo=gcinfo;
|
||||||
|
_fbinfo=fbinfo;
|
||||||
|
|
||||||
|
//TODO: create the root layer here based on gcinfo and fbinfo.
|
||||||
|
_rootlayer=NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
Workspace::~Workspace(void)
|
||||||
|
{
|
||||||
|
if(_rootlayer)
|
||||||
|
{
|
||||||
|
_rootlayer->PruneTree();
|
||||||
|
delete _rootlayer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Workspace::SetBGColor(const RGBColor &c)
|
||||||
|
{
|
||||||
|
_rootlayer->SetColor(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
RootLayer *Workspace::GetRoot(void)
|
||||||
|
{
|
||||||
|
return _rootlayer;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Workspace::SetData(const graphics_card_info &gcinfo, const frame_buffer_info &fbinfo)
|
||||||
|
{
|
||||||
|
_gcinfo=gcinfo;
|
||||||
|
_fbinfo=fbinfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Workspace::GetData(graphics_card_info *gcinfo, frame_buffer_info *fbinfo)
|
||||||
|
{
|
||||||
|
*gcinfo=_gcinfo;
|
||||||
|
*fbinfo=_fbinfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
Screen::Screen(DisplayDriver *gfxmodule, uint8 workspaces)
|
||||||
|
{
|
||||||
|
// TODO: implement
|
||||||
|
_workspacelist=NULL;
|
||||||
|
_resolution=0;
|
||||||
|
_activewin=NULL;
|
||||||
|
_currentworkspace=-1;
|
||||||
|
_workspacecount=0;
|
||||||
|
_driver=NULL;
|
||||||
|
_init=false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Screen::~Screen(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void Screen::AddWorkspace(int32 index=-1)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void Screen::DeleteWorkspace(int32 index)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
int32 Screen::CountWorkspaces(void)
|
||||||
|
{
|
||||||
|
return _workspacecount;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Screen::SetWorkspaceCount(int32 count)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
int32 Screen::CurrentWorkspace(void)
|
||||||
|
{
|
||||||
|
return _currentworkspace;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Screen::SetWorkspace(int32 index)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void Screen::Activate(bool active=true)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
DisplayDriver *Screen::GetGfxDriver(void)
|
||||||
|
{
|
||||||
|
return _driver;
|
||||||
|
}
|
||||||
|
|
||||||
|
status_t Screen::SetSpace(int32 index, int32 res,bool stick=true)
|
||||||
|
{
|
||||||
|
return B_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Screen::AddWindow(ServerWindow *win, int32 workspace=B_CURRENT_WORKSPACE)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void Screen::RemoveWindow(ServerWindow *win)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
ServerWindow *Screen::ActiveWindow(void)
|
||||||
|
{
|
||||||
|
return _activewin;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Screen::SetActiveWindow(ServerWindow *win)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
Layer *Screen::GetRootLayer(int32 workspace=B_CURRENT_WORKSPACE)
|
||||||
|
{
|
||||||
|
return (Layer*)_activeworkspace->GetRoot();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Screen::IsInitialized(void)
|
||||||
|
{
|
||||||
|
return _init;
|
||||||
|
}
|
||||||
|
|
||||||
|
Workspace *Screen::GetActiveWorkspace(void)
|
||||||
|
{
|
||||||
|
return _activeworkspace;
|
||||||
|
}
|
||||||
|
|
62
src/servers/app/server/DesktopClasses.h
Normal file
62
src/servers/app/server/DesktopClasses.h
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
#ifndef DESKTOPCLASSES_H
|
||||||
|
#define DESKTOPCLASSES_H
|
||||||
|
|
||||||
|
#include <SupportDefs.h>
|
||||||
|
#include <GraphicsCard.h>
|
||||||
|
#include <Window.h> // for workspace defs
|
||||||
|
#include "RootLayer.h"
|
||||||
|
|
||||||
|
class DisplayDriver;
|
||||||
|
class ServerWindow;
|
||||||
|
class RGBColor;
|
||||||
|
|
||||||
|
class Workspace
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Workspace(const graphics_card_info &gcinfo, const frame_buffer_info &fbinfo);
|
||||||
|
~Workspace(void);
|
||||||
|
void SetBGColor(const RGBColor &c);
|
||||||
|
RootLayer *GetRoot(void);
|
||||||
|
void SetData(const graphics_card_info &gcinfo, const frame_buffer_info &fbinfo);
|
||||||
|
void GetData(graphics_card_info *gcinfo, frame_buffer_info *fbinfo);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
RootLayer *_rootlayer;
|
||||||
|
graphics_card_info _gcinfo;
|
||||||
|
frame_buffer_info _fbinfo;
|
||||||
|
};
|
||||||
|
|
||||||
|
class Screen
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Screen(DisplayDriver *gfxmodule, uint8 workspaces);
|
||||||
|
~Screen(void);
|
||||||
|
void AddWorkspace(int32 index=-1);
|
||||||
|
void DeleteWorkspace(int32 index);
|
||||||
|
int32 CountWorkspaces(void);
|
||||||
|
void SetWorkspaceCount(int32 count);
|
||||||
|
int32 CurrentWorkspace(void);
|
||||||
|
void SetWorkspace(int32 index);
|
||||||
|
void Activate(bool active=true);
|
||||||
|
DisplayDriver *GetGfxDriver(void);
|
||||||
|
status_t SetSpace(int32 index, int32 res,bool stick=true);
|
||||||
|
void AddWindow(ServerWindow *win, int32 workspace=B_CURRENT_WORKSPACE);
|
||||||
|
void RemoveWindow(ServerWindow *win);
|
||||||
|
ServerWindow *ActiveWindow(void);
|
||||||
|
void SetActiveWindow(ServerWindow *win);
|
||||||
|
Layer *GetRootLayer(int32 workspace=B_CURRENT_WORKSPACE);
|
||||||
|
bool IsInitialized(void);
|
||||||
|
Workspace *GetActiveWorkspace(void);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
int32 _resolution;
|
||||||
|
ServerWindow *_activewin;
|
||||||
|
int32 _currentworkspace;
|
||||||
|
int32 _workspacecount;
|
||||||
|
BList *_workspacelist;
|
||||||
|
DisplayDriver *_driver;
|
||||||
|
bool _init;
|
||||||
|
Workspace *_activeworkspace;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
@ -31,8 +31,10 @@ Server app_server :
|
|||||||
# Display Classes
|
# Display Classes
|
||||||
AccelerantDriver.cpp
|
AccelerantDriver.cpp
|
||||||
Decorator.cpp
|
Decorator.cpp
|
||||||
|
DesktopClasses.cpp
|
||||||
DisplayDriver.cpp
|
DisplayDriver.cpp
|
||||||
Layer.cpp
|
Layer.cpp
|
||||||
|
RootLayer.cpp
|
||||||
ScreenDriver.cpp
|
ScreenDriver.cpp
|
||||||
ServerBitmap.cpp
|
ServerBitmap.cpp
|
||||||
ServerCursor.cpp
|
ServerCursor.cpp
|
||||||
|
@ -38,6 +38,7 @@
|
|||||||
|
|
||||||
class ServerWindow;
|
class ServerWindow;
|
||||||
class PortLink;
|
class PortLink;
|
||||||
|
class RootLayer;
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\class Layer Layer.h
|
\class Layer Layer.h
|
||||||
@ -93,6 +94,8 @@ public:
|
|||||||
void PruneTree(void);
|
void PruneTree(void);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
friend RootLayer;
|
||||||
|
|
||||||
BRect _frame;
|
BRect _frame;
|
||||||
|
|
||||||
Layer *_parent,
|
Layer *_parent,
|
||||||
@ -118,7 +121,4 @@ protected:
|
|||||||
PortLink *_portlink;
|
PortLink *_portlink;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern BLocker *layerlock;
|
|
||||||
extern BList *layerlist;
|
|
||||||
extern Layer *rootlayer;
|
|
||||||
#endif
|
#endif
|
||||||
|
63
src/servers/app/server/RootLayer.cpp
Normal file
63
src/servers/app/server/RootLayer.cpp
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
#include <View.h>
|
||||||
|
#include "RootLayer.h"
|
||||||
|
#include "Desktop.h"
|
||||||
|
#include "DisplayDriver.h"
|
||||||
|
|
||||||
|
RootLayer::RootLayer(BRect rect, const char *layername)
|
||||||
|
: Layer(rect,layername,B_FOLLOW_NONE,0, NULL)
|
||||||
|
{
|
||||||
|
_driver=GetGfxDriver();
|
||||||
|
}
|
||||||
|
|
||||||
|
RootLayer::~RootLayer(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void RootLayer::RequestDraw(void)
|
||||||
|
{
|
||||||
|
if(!_invalid)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Redraw the base
|
||||||
|
for(int32 i=0; _invalid->CountRects();i++)
|
||||||
|
{
|
||||||
|
if(_invalid->RectAt(i).IsValid())
|
||||||
|
_driver->FillRect(_invalid->RectAt(i),_layerdata, 0LL);
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
delete _invalid;
|
||||||
|
_invalid=NULL;
|
||||||
|
_is_dirty=false;
|
||||||
|
|
||||||
|
// force redraw of all dirty windows
|
||||||
|
for(Layer *lay=_topchild; lay!=NULL; lay=lay->_lowersibling)
|
||||||
|
{
|
||||||
|
if(lay->IsDirty())
|
||||||
|
lay->RequestDraw(lay->Bounds());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void RootLayer::SetColor(const RGBColor &col)
|
||||||
|
{
|
||||||
|
_layerdata->lowcolor=col;
|
||||||
|
}
|
||||||
|
|
||||||
|
RGBColor RootLayer::GetColor(void) const
|
||||||
|
{
|
||||||
|
return _layerdata->lowcolor;
|
||||||
|
}
|
||||||
|
|
||||||
|
void RootLayer::MoveBy(float x, float y)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void RootLayer::MoveBy(BPoint pt)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void RootLayer::RebuildRegions(bool recursive)
|
||||||
|
{
|
||||||
|
}
|
27
src/servers/app/server/RootLayer.h
Normal file
27
src/servers/app/server/RootLayer.h
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
#ifndef _ROOTLAYER_H_
|
||||||
|
#define _ROOTLAYER_H_
|
||||||
|
|
||||||
|
#include "Layer.h"
|
||||||
|
|
||||||
|
class DisplayDriver;
|
||||||
|
class RGBColor;
|
||||||
|
|
||||||
|
class RootLayer : public Layer
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
RootLayer(BRect frame, const char *name);
|
||||||
|
~RootLayer(void);
|
||||||
|
void RequestDraw(void);
|
||||||
|
void MoveBy(float x, float y);
|
||||||
|
void MoveBy(BPoint pt);
|
||||||
|
void SetDriver(DisplayDriver *driver);
|
||||||
|
void SetColor(const RGBColor &col);
|
||||||
|
RGBColor GetColor(void) const;
|
||||||
|
void RebuildRegions(bool recursive=false);
|
||||||
|
private:
|
||||||
|
DisplayDriver *_driver;
|
||||||
|
RGBColor *_bgcolor;
|
||||||
|
bool _visible;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in New Issue
Block a user