Windows receive focus when shown
System cursor API and infrastructure largely implemented Added Decorator::SetFont Removed unnecessary parameter copying in WinBorder class API Optimized screen updates when a decorator button is clicked Moved TokenHandler and BitmapManager to libappserver to allow decorators to use bitmaps Began reworking of DefaultDecorator::_DrawFrame to draw only what it is asked to Partly implemented ViewDriver::StrokeLineArray - calls StrokeLine Fixed a Layer init bug - visibility regions were initialized to Bounds() and not Frame() git-svn-id: file:///srv/svn/repos/haiku/trunk/current@4060 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
aea9bed9de
commit
2a8283e420
@ -618,6 +618,11 @@ void AppServer::DispatchMessage(int32 code, int8 *buffer)
|
||||
_exit_poller=true;
|
||||
break;
|
||||
}
|
||||
case AS_SET_SYSCURSOR_DEFAULTS:
|
||||
{
|
||||
cursormanager->SetDefaults();
|
||||
break;
|
||||
}
|
||||
default:
|
||||
// we should never get here.
|
||||
break;
|
||||
@ -980,7 +985,10 @@ Decorator *new_decorator(BRect rect, const char *title, int32 wlook, int32 wfeel
|
||||
dec=app_server->make_decorator(rect,wlook,wfeel,wflags);
|
||||
|
||||
gui_colorset.Lock();
|
||||
dec->SetDriver(ddriver);
|
||||
dec->SetColors(gui_colorset);
|
||||
dec->SetFont(fontserver->GetSystemPlain());
|
||||
dec->SetTitle(title);
|
||||
gui_colorset.Unlock();
|
||||
|
||||
return dec;
|
||||
|
@ -29,7 +29,10 @@
|
||||
#include "CursorManager.h"
|
||||
#include "ServerCursor.h"
|
||||
#include "CursorData.h"
|
||||
#include "ServerConfig.h"
|
||||
#include <Errors.h>
|
||||
#include <Directory.h>
|
||||
#include <String.h>
|
||||
#include <string.h>
|
||||
|
||||
//! The global cursor manager object. Allocated and freed by AppServer class
|
||||
@ -39,7 +42,6 @@ CursorManager *cursormanager;
|
||||
CursorManager::CursorManager(void)
|
||||
{
|
||||
_cursorlist=new BList(0);
|
||||
_lock=create_sem(1,"cursor_manager_sem");
|
||||
|
||||
// Error code for AddCursor
|
||||
_tokenizer.ExcludeValue(B_ERROR);
|
||||
@ -53,21 +55,21 @@ CursorManager::CursorManager(void)
|
||||
AddCursor(ctext);
|
||||
_textcsr=ctext;
|
||||
|
||||
ServerCursor *cdrag=new ServerCursor(default_drag_data);
|
||||
AddCursor(cdrag);
|
||||
_dragcsr=cdrag;
|
||||
|
||||
ServerCursor *cmove=new ServerCursor(default_move_data);
|
||||
AddCursor(cmove);
|
||||
_movecsr=cmove;
|
||||
|
||||
ServerCursor *cdrag=new ServerCursor(default_drag_data);
|
||||
AddCursor(cdrag);
|
||||
_dragcsr=cdrag;
|
||||
|
||||
ServerCursor *cresize=new ServerCursor(default_resize_data);
|
||||
AddCursor(cresize);
|
||||
_resizecsr=cresize;
|
||||
|
||||
ServerCursor *cresizeew=new ServerCursor(default_resize_ew_data);
|
||||
AddCursor(cresizeew);
|
||||
_resize_ew_csr=cresizeew;
|
||||
ServerCursor *cresizenwse=new ServerCursor(default_resize_nwse_data);
|
||||
AddCursor(cresizenwse);
|
||||
_resize_nwse_csr=cresizenwse;
|
||||
|
||||
ServerCursor *cresizenesw=new ServerCursor(default_resize_nesw_data);
|
||||
AddCursor(cresizenesw);
|
||||
@ -77,9 +79,10 @@ CursorManager::CursorManager(void)
|
||||
AddCursor(cresizens);
|
||||
_resize_ns_csr=cresizens;
|
||||
|
||||
ServerCursor *cresizenwse=new ServerCursor(default_resize_nwse_data);
|
||||
AddCursor(cresizenwse);
|
||||
_resize_nwse_csr=cresizenwse;
|
||||
ServerCursor *cresizeew=new ServerCursor(default_resize_ew_data);
|
||||
AddCursor(cresizeew);
|
||||
_resize_ew_csr=cresizeew;
|
||||
|
||||
}
|
||||
|
||||
//! Does all the teardown
|
||||
@ -95,8 +98,6 @@ CursorManager::~CursorManager(void)
|
||||
_cursorlist->MakeEmpty();
|
||||
delete _cursorlist;
|
||||
|
||||
delete_sem(_lock);
|
||||
|
||||
// Note that it is not necessary to remove and delete the system
|
||||
// cursors. These cursors are kept in the list with a NULL application
|
||||
// signature so they cannot be removed very easily except via
|
||||
@ -114,11 +115,11 @@ int32 CursorManager::AddCursor(ServerCursor *sc)
|
||||
if(!sc)
|
||||
return B_ERROR;
|
||||
|
||||
acquire_sem(_lock);
|
||||
Lock();
|
||||
_cursorlist->AddItem(sc);
|
||||
int32 value=_tokenizer.GetToken();
|
||||
sc->_token=value;
|
||||
release_sem(_lock);
|
||||
Unlock();
|
||||
|
||||
return value;
|
||||
}
|
||||
@ -131,7 +132,7 @@ int32 CursorManager::AddCursor(ServerCursor *sc)
|
||||
*/
|
||||
void CursorManager::DeleteCursor(int32 token)
|
||||
{
|
||||
acquire_sem(_lock);
|
||||
Lock();
|
||||
|
||||
ServerCursor *temp;
|
||||
for(int32 i=0; i<_cursorlist->CountItems();i++)
|
||||
@ -144,7 +145,7 @@ void CursorManager::DeleteCursor(int32 token)
|
||||
break;
|
||||
}
|
||||
}
|
||||
release_sem(_lock);
|
||||
Unlock();
|
||||
}
|
||||
|
||||
/*!
|
||||
@ -156,7 +157,7 @@ void CursorManager::RemoveAppCursors(const char *signature)
|
||||
// OPTIMIZATION: For an optimization, it perhaps may be wise down
|
||||
// the road to replace the ServerCursor's app signature with a
|
||||
// pointer to its application and compare ServerApp pointers instead.
|
||||
acquire_sem(_lock);
|
||||
Lock();
|
||||
|
||||
ServerCursor *temp;
|
||||
for(int32 i=0; i<_cursorlist->CountItems();i++)
|
||||
@ -170,37 +171,37 @@ void CursorManager::RemoveAppCursors(const char *signature)
|
||||
break;
|
||||
}
|
||||
}
|
||||
release_sem(_lock);
|
||||
Unlock();
|
||||
}
|
||||
|
||||
//! Wrapper around the DisplayDriver ShowCursor call
|
||||
void CursorManager::ShowCursor(void)
|
||||
{
|
||||
acquire_sem(_lock);
|
||||
Lock();
|
||||
|
||||
DisplayDriver *driver=GetGfxDriver(ActiveScreen());
|
||||
driver->ShowCursor();
|
||||
release_sem(_lock);
|
||||
Unlock();
|
||||
}
|
||||
|
||||
//! Wrapper around the DisplayDriver HideCursor call
|
||||
void CursorManager::HideCursor(void)
|
||||
{
|
||||
acquire_sem(_lock);
|
||||
Lock();
|
||||
|
||||
DisplayDriver *driver=GetGfxDriver(ActiveScreen());
|
||||
driver->HideCursor();
|
||||
release_sem(_lock);
|
||||
Unlock();
|
||||
}
|
||||
|
||||
//! Wrapper around the DisplayDriver ObscureCursor call
|
||||
void CursorManager::ObscureCursor(void)
|
||||
{
|
||||
acquire_sem(_lock);
|
||||
Lock();
|
||||
|
||||
DisplayDriver *driver=GetGfxDriver(ActiveScreen());
|
||||
driver->ObscureCursor();
|
||||
release_sem(_lock);
|
||||
Unlock();
|
||||
}
|
||||
|
||||
/*!
|
||||
@ -209,7 +210,7 @@ void CursorManager::ObscureCursor(void)
|
||||
*/
|
||||
void CursorManager::SetCursor(int32 token)
|
||||
{
|
||||
acquire_sem(_lock);
|
||||
Lock();
|
||||
ServerCursor *c=_FindCursor(token);
|
||||
if(c)
|
||||
{
|
||||
@ -217,12 +218,12 @@ void CursorManager::SetCursor(int32 token)
|
||||
driver->SetCursor(c);
|
||||
_current_which=B_CURSOR_OTHER;
|
||||
}
|
||||
release_sem(_lock);
|
||||
Unlock();
|
||||
}
|
||||
|
||||
void CursorManager::SetCursor(cursor_which which)
|
||||
{
|
||||
acquire_sem(_lock);
|
||||
Lock();
|
||||
|
||||
DisplayDriver *driver=GetGfxDriver(ActiveScreen());
|
||||
switch(which)
|
||||
@ -285,7 +286,90 @@ void CursorManager::SetCursor(cursor_which which)
|
||||
break;
|
||||
}
|
||||
|
||||
release_sem(_lock);
|
||||
Unlock();
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief Sets all the cursors from a specified CursorSet
|
||||
\param path Path to the cursor set
|
||||
|
||||
All cursors in the set will be assigned. If the set does not specify a cursor for a
|
||||
particular cursor specifier, it will remain unchanged. This function will fail if passed
|
||||
a NULL path, an invalid path, or the path to a non-CursorSet file.
|
||||
*/
|
||||
void CursorManager::SetCursorSet(const char *path)
|
||||
{
|
||||
Lock();
|
||||
CursorSet cs(NULL);
|
||||
|
||||
if(!path || cs.Load(path)!=B_OK)
|
||||
return;
|
||||
ServerCursor *csr;
|
||||
|
||||
if(cs.FindCursor(B_CURSOR_DEFAULT,&csr)==B_OK)
|
||||
{
|
||||
if(_defaultcsr)
|
||||
delete _defaultcsr;
|
||||
_defaultcsr=csr;
|
||||
}
|
||||
|
||||
if(cs.FindCursor(B_CURSOR_TEXT,&csr)==B_OK)
|
||||
{
|
||||
if(_textcsr)
|
||||
delete _textcsr;
|
||||
_textcsr=csr;
|
||||
}
|
||||
|
||||
if(cs.FindCursor(B_CURSOR_MOVE,&csr)==B_OK)
|
||||
{
|
||||
if(_movecsr)
|
||||
delete _movecsr;
|
||||
_movecsr=csr;
|
||||
}
|
||||
|
||||
if(cs.FindCursor(B_CURSOR_DRAG,&csr)==B_OK)
|
||||
{
|
||||
if(_dragcsr)
|
||||
delete _dragcsr;
|
||||
_dragcsr=csr;
|
||||
}
|
||||
|
||||
if(cs.FindCursor(B_CURSOR_RESIZE,&csr)==B_OK)
|
||||
{
|
||||
if(_resizecsr)
|
||||
delete _resizecsr;
|
||||
_resizecsr=csr;
|
||||
}
|
||||
|
||||
if(cs.FindCursor(B_CURSOR_RESIZE_NWSE,&csr)==B_OK)
|
||||
{
|
||||
if(_resize_nwse_csr)
|
||||
delete _resize_nwse_csr;
|
||||
_resize_nwse_csr=csr;
|
||||
}
|
||||
|
||||
if(cs.FindCursor(B_CURSOR_RESIZE_NESW,&csr)==B_OK)
|
||||
{
|
||||
if(_resize_nesw_csr)
|
||||
delete _resize_nesw_csr;
|
||||
_resize_nesw_csr=csr;
|
||||
}
|
||||
|
||||
if(cs.FindCursor(B_CURSOR_RESIZE_NS,&csr)==B_OK)
|
||||
{
|
||||
if(_resize_ns_csr)
|
||||
delete _resize_ns_csr;
|
||||
_resize_ns_csr=csr;
|
||||
}
|
||||
|
||||
if(cs.FindCursor(B_CURSOR_RESIZE_EW,&csr)==B_OK)
|
||||
{
|
||||
if(_resize_ew_csr)
|
||||
delete _resize_ew_csr;
|
||||
_resize_ew_csr=csr;
|
||||
}
|
||||
Unlock();
|
||||
|
||||
}
|
||||
|
||||
/*!
|
||||
@ -298,7 +382,7 @@ ServerCursor *CursorManager::GetCursor(cursor_which which)
|
||||
{
|
||||
ServerCursor *temp=NULL;
|
||||
|
||||
acquire_sem(_lock);
|
||||
Lock();
|
||||
|
||||
switch(which)
|
||||
{
|
||||
@ -351,7 +435,7 @@ ServerCursor *CursorManager::GetCursor(cursor_which which)
|
||||
break;
|
||||
}
|
||||
|
||||
release_sem(_lock);
|
||||
Unlock();
|
||||
return temp;
|
||||
}
|
||||
|
||||
@ -363,9 +447,9 @@ cursor_which CursorManager::GetCursorWhich(void)
|
||||
{
|
||||
cursor_which temp;
|
||||
|
||||
acquire_sem(_lock);
|
||||
Lock();
|
||||
temp=_current_which;
|
||||
release_sem(_lock);
|
||||
Unlock();
|
||||
return temp;
|
||||
}
|
||||
|
||||
@ -380,7 +464,7 @@ cursor_which CursorManager::GetCursorWhich(void)
|
||||
*/
|
||||
void CursorManager::ChangeCursor(cursor_which which, int32 token)
|
||||
{
|
||||
acquire_sem(_lock);
|
||||
Lock();
|
||||
|
||||
// Find the cursor, based on the token
|
||||
ServerCursor *cursor=_FindCursor(token);
|
||||
@ -388,7 +472,7 @@ void CursorManager::ChangeCursor(cursor_which which, int32 token)
|
||||
// Did we find a cursor with this token?
|
||||
if(!cursor)
|
||||
{
|
||||
release_sem(_lock);
|
||||
Unlock();
|
||||
return;
|
||||
}
|
||||
|
||||
@ -407,6 +491,7 @@ void CursorManager::ChangeCursor(cursor_which which, int32 token)
|
||||
delete cursor->_app_signature;
|
||||
cursor->_app_signature=NULL;
|
||||
}
|
||||
_cursorlist->RemoveItem(cursor);
|
||||
break;
|
||||
}
|
||||
case B_CURSOR_TEXT:
|
||||
@ -421,6 +506,7 @@ void CursorManager::ChangeCursor(cursor_which which, int32 token)
|
||||
delete cursor->_app_signature;
|
||||
cursor->_app_signature=NULL;
|
||||
}
|
||||
_cursorlist->RemoveItem(cursor);
|
||||
break;
|
||||
}
|
||||
case B_CURSOR_MOVE:
|
||||
@ -435,6 +521,7 @@ void CursorManager::ChangeCursor(cursor_which which, int32 token)
|
||||
delete cursor->_app_signature;
|
||||
cursor->_app_signature=NULL;
|
||||
}
|
||||
_cursorlist->RemoveItem(cursor);
|
||||
break;
|
||||
}
|
||||
case B_CURSOR_DRAG:
|
||||
@ -449,6 +536,7 @@ void CursorManager::ChangeCursor(cursor_which which, int32 token)
|
||||
delete cursor->_app_signature;
|
||||
cursor->_app_signature=NULL;
|
||||
}
|
||||
_cursorlist->RemoveItem(cursor);
|
||||
break;
|
||||
}
|
||||
case B_CURSOR_RESIZE:
|
||||
@ -463,6 +551,7 @@ void CursorManager::ChangeCursor(cursor_which which, int32 token)
|
||||
delete cursor->_app_signature;
|
||||
cursor->_app_signature=NULL;
|
||||
}
|
||||
_cursorlist->RemoveItem(cursor);
|
||||
break;
|
||||
}
|
||||
case B_CURSOR_RESIZE_NWSE:
|
||||
@ -477,6 +566,7 @@ void CursorManager::ChangeCursor(cursor_which which, int32 token)
|
||||
delete cursor->_app_signature;
|
||||
cursor->_app_signature=NULL;
|
||||
}
|
||||
_cursorlist->RemoveItem(cursor);
|
||||
break;
|
||||
}
|
||||
case B_CURSOR_RESIZE_NESW:
|
||||
@ -491,6 +581,7 @@ void CursorManager::ChangeCursor(cursor_which which, int32 token)
|
||||
delete cursor->_app_signature;
|
||||
cursor->_app_signature=NULL;
|
||||
}
|
||||
_cursorlist->RemoveItem(cursor);
|
||||
break;
|
||||
}
|
||||
case B_CURSOR_RESIZE_NS:
|
||||
@ -505,6 +596,7 @@ void CursorManager::ChangeCursor(cursor_which which, int32 token)
|
||||
delete cursor->_app_signature;
|
||||
cursor->_app_signature=NULL;
|
||||
}
|
||||
_cursorlist->RemoveItem(cursor);
|
||||
break;
|
||||
}
|
||||
case B_CURSOR_RESIZE_EW:
|
||||
@ -519,13 +611,14 @@ void CursorManager::ChangeCursor(cursor_which which, int32 token)
|
||||
delete cursor->_app_signature;
|
||||
cursor->_app_signature=NULL;
|
||||
}
|
||||
_cursorlist->RemoveItem(cursor);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
release_sem(_lock);
|
||||
Unlock();
|
||||
}
|
||||
|
||||
/*!
|
||||
@ -544,3 +637,31 @@ ServerCursor *CursorManager::_FindCursor(int32 token)
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
//! Sets the cursors to the defaults and saves them to CURSOR_SETTINGS_DIR/"d
|
||||
void CursorManager::SetDefaults(void)
|
||||
{
|
||||
Lock();
|
||||
CursorSet cs("Default");
|
||||
cs.AddCursor(B_CURSOR_DEFAULT,default_cursor_data);
|
||||
cs.AddCursor(B_CURSOR_TEXT,default_text_data);
|
||||
cs.AddCursor(B_CURSOR_MOVE,default_move_data);
|
||||
cs.AddCursor(B_CURSOR_DRAG,default_drag_data);
|
||||
cs.AddCursor(B_CURSOR_RESIZE,default_resize_data);
|
||||
cs.AddCursor(B_CURSOR_RESIZE_NWSE,default_resize_nwse_data);
|
||||
cs.AddCursor(B_CURSOR_RESIZE_NESW,default_resize_nesw_data);
|
||||
cs.AddCursor(B_CURSOR_RESIZE_NS,default_resize_ns_data);
|
||||
cs.AddCursor(B_CURSOR_RESIZE_EW,default_resize_ew_data);
|
||||
|
||||
BDirectory dir;
|
||||
if(dir.SetTo(CURSOR_SET_DIR)==B_ENTRY_NOT_FOUND)
|
||||
create_directory(CURSOR_SET_DIR,0777);
|
||||
|
||||
BString string(CURSOR_SET_DIR);
|
||||
string+="Default";
|
||||
cs.Save(string.String(),B_CREATE_FILE | B_FAIL_IF_EXISTS);
|
||||
|
||||
SetCursorSet(string.String());
|
||||
Unlock();
|
||||
}
|
||||
|
||||
|
@ -30,6 +30,7 @@
|
||||
#include <List.h>
|
||||
#include <OS.h>
|
||||
#include <SysCursor.h>
|
||||
#include <Locker.h>
|
||||
#include "TokenHandler.h"
|
||||
|
||||
class ServerCursor;
|
||||
@ -42,7 +43,7 @@ class ServerCursor;
|
||||
any BeOS platform. It also provides tokens for BCursors and frees all
|
||||
of an application's cursors whenever an application closes.
|
||||
*/
|
||||
class CursorManager
|
||||
class CursorManager : public BLocker
|
||||
{
|
||||
public:
|
||||
CursorManager(void);
|
||||
@ -55,16 +56,16 @@ public:
|
||||
void ObscureCursor(void);
|
||||
void SetCursor(int32 token);
|
||||
void SetCursor(cursor_which which);
|
||||
void SetCursorSet(const char *path);
|
||||
ServerCursor *GetCursor(cursor_which which);
|
||||
cursor_which GetCursorWhich(void);
|
||||
void ChangeCursor(cursor_which which, int32 token);
|
||||
|
||||
void SetDefaults(void);
|
||||
private:
|
||||
ServerCursor *_FindCursor(int32 token);
|
||||
|
||||
BList *_cursorlist;
|
||||
TokenHandler _tokenizer;
|
||||
sem_id _lock;
|
||||
|
||||
// System cursor members
|
||||
ServerCursor *_defaultcsr,
|
||||
|
@ -160,6 +160,21 @@ void Decorator::SetFeel(int32 wfeel)
|
||||
_feel=wfeel;
|
||||
}
|
||||
|
||||
/*
|
||||
\brief Sets the decorator's font
|
||||
\param font The new font object to copy from
|
||||
*/
|
||||
void Decorator::SetFont(ServerFont *font)
|
||||
{
|
||||
if(!font)
|
||||
return;
|
||||
|
||||
if(_layerdata.font)
|
||||
delete _layerdata.font;
|
||||
|
||||
_layerdata.font=new ServerFont(*font);
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief Sets the decorator's window look
|
||||
\param wflags New value for the look
|
||||
|
@ -31,9 +31,8 @@
|
||||
#include "ColorUtils.h"
|
||||
#include "DefaultDecorator.h"
|
||||
#include "RGBColor.h"
|
||||
|
||||
//#define DEBUG_DECORATOR
|
||||
|
||||
#include "RectUtils.h"
|
||||
#include <stdio.h>
|
||||
|
||||
#define USE_VIEW_FILL_HACK
|
||||
|
||||
@ -44,22 +43,19 @@
|
||||
DefaultDecorator::DefaultDecorator(BRect rect, int32 wlook, int32 wfeel, int32 wflags)
|
||||
: Decorator(rect,wlook,wfeel,wflags)
|
||||
{
|
||||
|
||||
taboffset=0;
|
||||
titlepixelwidth=0;
|
||||
|
||||
framecolors=new RGBColor[5];
|
||||
framecolors[0].SetColor(255,255,255);
|
||||
framecolors[1].SetColor(216,216,216);
|
||||
framecolors[2].SetColor(152,152,152);
|
||||
framecolors[3].SetColor(136,136,136);
|
||||
framecolors[4].SetColor(96,96,96);
|
||||
|
||||
_SetFocus();
|
||||
|
||||
// These hard-coded assignments will go bye-bye when the system _colors
|
||||
// API is implemented
|
||||
frame_highercol.SetColor(216,216,216);
|
||||
frame_lowercol.SetColor(110,110,110);
|
||||
|
||||
textcol.SetColor(0,0,0);
|
||||
|
||||
frame_highcol=frame_lowercol.MakeBlendColor(frame_highercol,0.75);
|
||||
frame_midcol=frame_lowercol.MakeBlendColor(frame_highercol,0.5);
|
||||
frame_lowcol=frame_lowercol.MakeBlendColor(frame_highercol,0.25);
|
||||
|
||||
_DoLayout();
|
||||
|
||||
// This flag is used to determine whether or not we're moving the tab
|
||||
@ -81,6 +77,7 @@ DefaultDecorator::~DefaultDecorator(void)
|
||||
#ifdef DEBUG_DECORATOR
|
||||
printf("DefaultDecorator: ~DefaultDecorator()\n");
|
||||
#endif
|
||||
delete [] framecolors;
|
||||
}
|
||||
|
||||
click_type DefaultDecorator::Clicked(BPoint pt, int32 buttons, int32 modifiers)
|
||||
@ -183,6 +180,21 @@ printf("DefaultDecorator: Do Layout\n");
|
||||
_resizerect=_frame;
|
||||
_borderrect=_frame;
|
||||
_closerect=_frame;
|
||||
|
||||
switch(GetLook())
|
||||
{
|
||||
case B_BORDERED_WINDOW_LOOK:
|
||||
case B_TITLED_WINDOW_LOOK:
|
||||
case B_DOCUMENT_WINDOW_LOOK:
|
||||
borderwidth=5;
|
||||
break;
|
||||
case B_FLOATING_WINDOW_LOOK:
|
||||
case B_MODAL_WINDOW_LOOK:
|
||||
borderwidth=3;
|
||||
break;
|
||||
default:
|
||||
borderwidth=0;
|
||||
}
|
||||
|
||||
textoffset=(_look==B_FLOATING_WINDOW_LOOK)?5:7;
|
||||
|
||||
@ -190,8 +202,22 @@ printf("DefaultDecorator: Do Layout\n");
|
||||
_closerect.top+=(_look==B_FLOATING_WINDOW_LOOK)?6:4;
|
||||
_closerect.right=_closerect.left+10;
|
||||
_closerect.bottom=_closerect.top+10;
|
||||
|
||||
|
||||
|
||||
_borderrect.top+=19;
|
||||
|
||||
if(borderwidth)
|
||||
{
|
||||
// Set up the border rectangles to handle the window's frame
|
||||
rightborder=leftborder=topborder=bottomborder=_borderrect;
|
||||
|
||||
// We want the rectangles to intersect because of the beveled intersections, so all
|
||||
// that is necessary is to set the short dimension of each side
|
||||
leftborder.right=leftborder.left+borderwidth;
|
||||
rightborder.left=rightborder.right-borderwidth;
|
||||
topborder.bottom=topborder.top+borderwidth;
|
||||
bottomborder.top=bottomborder.bottom-borderwidth;
|
||||
}
|
||||
|
||||
_resizerect.top=_resizerect.bottom-18;
|
||||
_resizerect.left=_resizerect.right-18;
|
||||
@ -307,7 +333,7 @@ printf("DefaultDecorator: Draw(%.1f,%.1f,%.1f,%.1f)\n",update.left,update.top,up
|
||||
_layerdata.highcolor=_colors->document_background;
|
||||
|
||||
if(_borderrect.Intersects(update))
|
||||
_driver->FillRect(_borderrect,&_layerdata,(int8*)&solidhigh);
|
||||
_driver->FillRect(_borderrect & update,&_layerdata,(int8*)&solidhigh);
|
||||
|
||||
_DrawFrame(update);
|
||||
}
|
||||
@ -318,9 +344,9 @@ void DefaultDecorator::Draw(void)
|
||||
// things
|
||||
|
||||
// Draw the top view's client area - just a hack :)
|
||||
_layerdata.highcolor=_colors->document_background;
|
||||
// _layerdata.highcolor=_colors->document_background;
|
||||
|
||||
_driver->FillRect(_borderrect,&_layerdata,(int8*)&solidhigh);
|
||||
// _driver->FillRect(_borderrect,&_layerdata,(int8*)&solidhigh);
|
||||
DrawFrame();
|
||||
|
||||
DrawTab();
|
||||
@ -354,7 +380,7 @@ void DefaultDecorator::_DrawTab(BRect r)
|
||||
|
||||
_layerdata.highcolor=(GetFocus())?_colors->window_tab:_colors->inactive_window_tab;
|
||||
_driver->FillRect(_tabrect,&_layerdata,(int8*)&solidhigh);
|
||||
_layerdata.highcolor=frame_lowcol;
|
||||
_layerdata.highcolor=framecolors[3];
|
||||
_driver->StrokeLine(_tabrect.LeftBottom(),_tabrect.RightBottom(),&_layerdata,(int8*)&solidhigh);
|
||||
|
||||
_DrawTitle(_tabrect);
|
||||
@ -423,69 +449,154 @@ void DefaultDecorator::DrawBlendedRect(BRect r, bool down)
|
||||
|
||||
// _layerdata.highcolor=startcol;
|
||||
// _driver->FillRect(r,&_layerdata,(int8*)&solidhigh);
|
||||
_layerdata.highcolor=frame_lowcol;
|
||||
_layerdata.highcolor=framecolors[3];
|
||||
_driver->StrokeRect(r,&_layerdata,(int8*)&solidhigh);
|
||||
}
|
||||
|
||||
void DefaultDecorator::_DrawFrame(BRect rect)
|
||||
void DefaultDecorator::_DrawFrame(BRect invalid)
|
||||
{
|
||||
// Duh, draws the window frame, I think. ;)
|
||||
// We need to test each side to determine whether or not it needs drawn. Additionally,
|
||||
// we must clip the lines drawn by this function to the invalid rectangle we are given
|
||||
|
||||
#ifdef USE_VIEW_FILL_HACK
|
||||
_driver->FillRect(_borderrect,&_layerdata,(int8*)&solidhigh);
|
||||
#endif
|
||||
|
||||
#ifdef USE_VIEW_FILL_HACK
|
||||
_driver->FillRect(_borderrect,&_layerdata,(int8*)&solidhigh);
|
||||
#endif
|
||||
|
||||
if(_look==B_NO_BORDER_WINDOW_LOOK)
|
||||
if(!borderwidth)
|
||||
return;
|
||||
|
||||
BRect r=_borderrect;
|
||||
// Data specifically for the StrokeLineArray call.
|
||||
int32 numlines=0, maxlines=20;
|
||||
|
||||
_layerdata.highcolor=frame_midcol;
|
||||
BPoint points[maxlines*2];
|
||||
RGBColor colors[maxlines];
|
||||
|
||||
// For quick calculation of gradients for each side. Top is same as left, right is same as
|
||||
// bottom
|
||||
int8 rightindices[borderwidth],leftindices[borderwidth];
|
||||
|
||||
if(borderwidth==5)
|
||||
{
|
||||
leftindices[0]=2;
|
||||
leftindices[1]=0;
|
||||
leftindices[2]=1;
|
||||
leftindices[3]=3;
|
||||
leftindices[4]=2;
|
||||
|
||||
rightindices[0]=2;
|
||||
rightindices[1]=0;
|
||||
rightindices[2]=1;
|
||||
rightindices[3]=3;
|
||||
rightindices[4]=4;
|
||||
}
|
||||
else
|
||||
{
|
||||
// TODO: figure out border colors for floating window look
|
||||
}
|
||||
|
||||
// Right side
|
||||
if(TestRectIntersection(rightborder,invalid))
|
||||
{
|
||||
|
||||
// We may not have to redraw the entire width of the frame itself. Rare case, but
|
||||
// it must be accounted for.
|
||||
int32 startx=(int32) MAX(invalid.left,rightborder.left);
|
||||
int32 endx=(int32) MIN(invalid.right,rightborder.right);
|
||||
|
||||
|
||||
// We'll need these flags to see if we must include the corners in final line
|
||||
// calculations
|
||||
BRect r(rightborder);
|
||||
r.bottom=r.top+borderwidth;
|
||||
bool topcorner=TestRectIntersection(invalid,r);
|
||||
|
||||
r=rightborder;
|
||||
r.top=r.bottom-borderwidth;
|
||||
bool bottomcorner=TestRectIntersection(invalid,r);
|
||||
|
||||
// Generate the lines for this side
|
||||
for(int32 i=startx; i<endx; i++)
|
||||
{
|
||||
BPoint start, end;
|
||||
|
||||
start.x=end.x=i;
|
||||
|
||||
if(topcorner)
|
||||
{
|
||||
start.y=rightborder.top+(borderwidth-(i-rightborder.left));
|
||||
start.y=MAX(start.y,invalid.top);
|
||||
}
|
||||
else
|
||||
start.y=MAX(start.y+borderwidth,invalid.top);
|
||||
|
||||
if(bottomcorner)
|
||||
{
|
||||
end.y=rightborder.bottom-(borderwidth-(i-rightborder.left));
|
||||
end.y=MAX(end.y,invalid.top);
|
||||
}
|
||||
else
|
||||
end.y=MAX(end.y-borderwidth,invalid.top);
|
||||
|
||||
// Make the appropriate
|
||||
points[numlines*2]=start;
|
||||
points[(numlines*2)+1]=end;
|
||||
colors[numlines]=framecolors[rightindices[endx-i]];
|
||||
|
||||
numlines++;
|
||||
}
|
||||
}
|
||||
debugger("");
|
||||
_driver->StrokeLineArray(points,numlines,colors,&_layerdata);
|
||||
|
||||
/* BRect r=_borderrect;
|
||||
|
||||
_layerdata.highcolor=framecolors[2];
|
||||
_driver->StrokeLine(BPoint(r.left,r.top),BPoint(r.right-1,r.top),
|
||||
&_layerdata,(int8*)&solidhigh);
|
||||
_layerdata.highcolor=frame_lowcol;
|
||||
_layerdata.highcolor=framecolors[3];
|
||||
_driver->StrokeLine(BPoint(r.left,r.top),BPoint(r.left,r.bottom),
|
||||
&_layerdata,(int8*)&solidhigh);
|
||||
_layerdata.highcolor=frame_lowercol;
|
||||
_layerdata.highcolor=framecolors[4];
|
||||
_driver->StrokeLine(BPoint(r.right,r.bottom),BPoint(r.right,r.top),
|
||||
&_layerdata,(int8*)&solidhigh);
|
||||
_layerdata.highcolor=frame_lowercol;
|
||||
_layerdata.highcolor=framecolors[4];
|
||||
_driver->StrokeLine(BPoint(r.right,r.bottom),BPoint(r.left,r.bottom),
|
||||
&_layerdata,(int8*)&solidhigh);
|
||||
|
||||
r.InsetBy(1,1);
|
||||
_layerdata.highcolor=frame_highercol;
|
||||
_layerdata.highcolor=framecolors[0];
|
||||
_driver->StrokeLine(BPoint(r.left,r.top),BPoint(r.right-1,r.top),
|
||||
&_layerdata,(int8*)&solidhigh);
|
||||
_layerdata.highcolor=frame_highercol;
|
||||
_layerdata.highcolor=framecolors[0];
|
||||
_driver->StrokeLine(BPoint(r.left,r.top),BPoint(r.left,r.bottom),
|
||||
&_layerdata,(int8*)&solidhigh);
|
||||
_layerdata.highcolor=frame_midcol;
|
||||
_layerdata.highcolor=framecolors[2];
|
||||
_driver->StrokeLine(BPoint(r.right,r.bottom),BPoint(r.right,r.top),
|
||||
&_layerdata,(int8*)&solidhigh);
|
||||
_layerdata.highcolor=frame_midcol;
|
||||
_layerdata.highcolor=framecolors[2];
|
||||
_driver->StrokeLine(BPoint(r.right,r.bottom),BPoint(r.left,r.bottom),
|
||||
&_layerdata,(int8*)&solidhigh);
|
||||
|
||||
r.InsetBy(1,1);
|
||||
_layerdata.highcolor=frame_highcol;
|
||||
_layerdata.highcolor=framecolors[1];
|
||||
_driver->StrokeRect(r,&_layerdata,(int8*)&solidhigh);
|
||||
|
||||
r.InsetBy(1,1);
|
||||
_layerdata.highcolor=frame_lowercol;
|
||||
_layerdata.highcolor=framecolors[4];
|
||||
_driver->StrokeLine(BPoint(r.left,r.top),BPoint(r.right-1,r.top),
|
||||
&_layerdata,(int8*)&solidhigh);
|
||||
_layerdata.highcolor=frame_lowercol;
|
||||
_layerdata.highcolor=framecolors[4];
|
||||
_driver->StrokeLine(BPoint(r.left,r.top),BPoint(r.left,r.bottom),
|
||||
&_layerdata,(int8*)&solidhigh);
|
||||
_layerdata.highcolor=frame_highercol;
|
||||
_layerdata.highcolor=framecolors[0];
|
||||
_driver->StrokeLine(BPoint(r.right,r.bottom),BPoint(r.right,r.top),
|
||||
&_layerdata,(int8*)&solidhigh);
|
||||
_layerdata.highcolor=frame_highercol;
|
||||
_layerdata.highcolor=framecolors[0];
|
||||
_driver->StrokeLine(BPoint(r.right,r.bottom),BPoint(r.left,r.bottom),
|
||||
&_layerdata,(int8*)&solidhigh);
|
||||
_driver->StrokeRect(_borderrect,&_layerdata,(int8*)&solidhigh);
|
||||
|
||||
|
||||
|
||||
// Draw the resize thumb if we're supposed to
|
||||
if(!(_flags & B_NOT_RESIZABLE))
|
||||
{
|
||||
@ -501,10 +612,10 @@ _driver->FillRect(_borderrect,&_layerdata,(int8*)&solidhigh);
|
||||
|
||||
int steps=(w<h)?w:h;
|
||||
|
||||
startcol=frame_highercol.GetColor32();
|
||||
endcol=frame_lowercol.GetColor32();
|
||||
startcol=framecolors[0].GetColor32();
|
||||
endcol=framecolors[4].GetColor32();
|
||||
|
||||
halfcol=frame_highercol.MakeBlendColor(frame_lowercol,0.5).GetColor32();
|
||||
halfcol=framecolors[0].MakeBlendColor(framecolors[4],0.5).GetColor32();
|
||||
|
||||
rstep=(startcol.red-halfcol.red)/steps;
|
||||
gstep=(startcol.green-halfcol.green)/steps;
|
||||
@ -525,16 +636,18 @@ _driver->FillRect(_borderrect,&_layerdata,(int8*)&solidhigh);
|
||||
_driver->StrokeLine(BPoint(r.left+steps,r.top+i),
|
||||
BPoint(r.left+i,r.top+steps),&_layerdata,(int8*)&solidhigh);
|
||||
}
|
||||
_layerdata.highcolor=frame_lowercol;
|
||||
_layerdata.highcolor=framecolors[4];
|
||||
_driver->StrokeRect(r,&_layerdata,(int8*)&solidhigh);
|
||||
}
|
||||
else
|
||||
{
|
||||
_layerdata.highcolor=frame_lowercol;
|
||||
_layerdata.highcolor=framecolors[4];
|
||||
_driver->StrokeLine(BPoint(r.right,r.top),BPoint(r.right-3,r.top),
|
||||
&_layerdata,(int8*)&solidhigh);
|
||||
_driver->StrokeLine(BPoint(r.left,r.bottom),BPoint(r.left,r.bottom-3),
|
||||
&_layerdata,(int8*)&solidhigh);
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
}
|
||||
|
@ -59,7 +59,14 @@ protected:
|
||||
RGBColor frame_highcol, frame_midcol, frame_lowcol, frame_highercol,
|
||||
frame_lowercol;
|
||||
RGBColor textcol;
|
||||
|
||||
RGBColor *framecolors;
|
||||
|
||||
// Individual rects for handling window frame rendering the proper way
|
||||
BRect rightborder,leftborder,topborder,bottomborder;
|
||||
uint64 solidhigh, solidlow;
|
||||
|
||||
int32 borderwidth;
|
||||
|
||||
bool slidetab;
|
||||
int textoffset;
|
||||
|
@ -28,8 +28,7 @@
|
||||
#include "ServerFont.h"
|
||||
#include FT_CACHE_H
|
||||
|
||||
FTC_Manager ftmanager;
|
||||
FT_Library ftlib;
|
||||
FTC_Manager ftmanager;
|
||||
|
||||
/*!
|
||||
\brief Constructor
|
||||
|
@ -37,6 +37,8 @@
|
||||
#include "ServerFont.h"
|
||||
#include "ServerConfig.h"
|
||||
|
||||
extern FTC_Manager ftmanager;
|
||||
FT_Library ftlib;
|
||||
FontServer *fontserver;
|
||||
|
||||
/*!
|
||||
|
@ -7,6 +7,9 @@ UsePrivateHeaders app interface [ FDirName servers app ] ;
|
||||
UseFreeTypeHeaders ;
|
||||
|
||||
SharedLibrary appserver :
|
||||
areafunc.c
|
||||
bget.c
|
||||
BitmapManager.cpp
|
||||
ColorSet.cpp
|
||||
Decorator.cpp
|
||||
DisplayDriver.cpp
|
||||
@ -17,7 +20,9 @@ SharedLibrary appserver :
|
||||
ServerBitmap.cpp
|
||||
ServerCursor.cpp
|
||||
ServerFont.cpp
|
||||
SysCursor.cpp
|
||||
SystemPalette.cpp
|
||||
TokenHandler.cpp
|
||||
;
|
||||
|
||||
LinkSharedOSLibs libappserver.so : root be
|
||||
@ -26,11 +31,8 @@ LinkSharedOSLibs libappserver.so : root be
|
||||
|
||||
Server app_server :
|
||||
# Misc. Sources
|
||||
areafunc.c
|
||||
Angle.cpp
|
||||
bget.c
|
||||
CursorData.cpp
|
||||
TokenHandler.cpp
|
||||
PicturePlayer.cpp
|
||||
|
||||
PNGDump.cpp
|
||||
@ -39,7 +41,6 @@ Server app_server :
|
||||
# Manager Classes
|
||||
AppServer.cpp
|
||||
BitmapDriver.cpp
|
||||
BitmapManager.cpp
|
||||
CursorManager.cpp
|
||||
Desktop.cpp
|
||||
ServerApp.cpp
|
||||
|
@ -36,7 +36,7 @@
|
||||
#include "RectUtils.h"
|
||||
|
||||
//#define DEBUG_LAYER
|
||||
#define DEBUG_REGIONS
|
||||
//#define DEBUG_REGIONS
|
||||
|
||||
#ifdef DEBUG_REGIONS
|
||||
#include "Desktop.h"
|
||||
@ -71,9 +71,9 @@ Layer::Layer(BRect frame, const char *name, int32 resize, int32 flags,ServerWind
|
||||
_topchild=NULL;
|
||||
_bottomchild=NULL;
|
||||
|
||||
_visible=new BRegion(Bounds());
|
||||
_full=new BRegion(Bounds());
|
||||
_invalid=new BRegion(Bounds());
|
||||
_visible=new BRegion(Frame());
|
||||
_full=new BRegion(Frame());
|
||||
_invalid=new BRegion(Frame());
|
||||
|
||||
_serverwin=win;
|
||||
|
||||
|
@ -337,11 +337,13 @@ void ServerApp::_DispatchMessage(int32 code, int8 *buffer)
|
||||
// Attached data:
|
||||
// 1) port_id reply port
|
||||
// 2) BRect window frame
|
||||
// 3) uint32 window flags
|
||||
// 4) port_id window's message port
|
||||
// 5) uint32 workspace index
|
||||
// 6) int32 BHandler token of the window
|
||||
// 7) const char * title
|
||||
// 3) uint32 window look
|
||||
// 4) uint32 window feel
|
||||
// 5) uint32 window flags
|
||||
// 6) port_id window's message port
|
||||
// 7) uint32 workspace index
|
||||
// 8) int32 BHandler token of the window
|
||||
// 9) const char * title
|
||||
|
||||
// Find the necessary data
|
||||
port_id reply_port=*((port_id*)index); index+=sizeof(port_id);
|
||||
@ -483,33 +485,33 @@ void ServerApp::_DispatchMessage(int32 code, int8 *buffer)
|
||||
case AS_CREATE_PICTURE:
|
||||
{
|
||||
// TODO: Implement
|
||||
#ifdef DEBUG_SERVERAPP
|
||||
printf("ServerApp %s: Create Picture unimplemented\n",_signature.String());
|
||||
#endif
|
||||
#ifdef DEBUG_SERVERAPP
|
||||
printf("ServerApp %s: Create Picture unimplemented\n",_signature.String());
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
case AS_DELETE_PICTURE:
|
||||
{
|
||||
// TODO: Implement
|
||||
#ifdef DEBUG_SERVERAPP
|
||||
printf("ServerApp %s: Delete Picture unimplemented\n",_signature.String());
|
||||
#endif
|
||||
#ifdef DEBUG_SERVERAPP
|
||||
printf("ServerApp %s: Delete Picture unimplemented\n",_signature.String());
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
case AS_CLONE_PICTURE:
|
||||
{
|
||||
// TODO: Implement
|
||||
#ifdef DEBUG_SERVERAPP
|
||||
printf("ServerApp %s: Clone Picture unimplemented\n",_signature.String());
|
||||
#endif
|
||||
#ifdef DEBUG_SERVERAPP
|
||||
printf("ServerApp %s: Clone Picture unimplemented\n",_signature.String());
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
case AS_DOWNLOAD_PICTURE:
|
||||
{
|
||||
// TODO; Implement
|
||||
#ifdef DEBUG_SERVERAPP
|
||||
printf("ServerApp %s: Download Picture unimplemented\n",_signature.String());
|
||||
#endif
|
||||
#ifdef DEBUG_SERVERAPP
|
||||
printf("ServerApp %s: Download Picture unimplemented\n",_signature.String());
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
case AS_SET_SCREEN_MODE:
|
||||
@ -669,7 +671,7 @@ printf("ServerApp %s: Download Picture unimplemented\n",_signature.String());
|
||||
default:
|
||||
{
|
||||
#ifdef DEBUG_SERVERAPP
|
||||
printf("ServerApp %s received unhandled message code %lx\n",_signature.String(),code);
|
||||
printf("ServerApp %s received unhandled message code offset %lx\n",_signature.String(),MsgCodeToString(code));
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
|
@ -223,6 +223,7 @@ void ServerWindow::Show(void)
|
||||
if(_winborder)
|
||||
{
|
||||
_winborder->Show();
|
||||
_winborder->SetFocus(true);
|
||||
_winborder->UpdateRegions(true);
|
||||
}
|
||||
}
|
||||
@ -261,6 +262,7 @@ void ServerWindow::SetFocus(bool value)
|
||||
if(_active!=value)
|
||||
{
|
||||
_active=value;
|
||||
_winborder->SetFocus(value);
|
||||
_winborder->RequestDraw();
|
||||
}
|
||||
}
|
||||
@ -627,7 +629,7 @@ void ServerWindow::DispatchMessage(PortMessage *msg)
|
||||
}
|
||||
default:
|
||||
{
|
||||
printf("ServerWindow %s received unexpected code %s\n",_title->String(),MsgCodeToString(msg->Code()));
|
||||
printf("ServerWindow %s received unexpected code - message offset %lx\n",_title->String(),msg->Code()-SERVER_TRUE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -1040,9 +1040,43 @@ void ViewDriver::StrokeLine(BPoint start, BPoint end, LayerData *d, int8 *pat)
|
||||
|
||||
void ViewDriver::StrokeLineArray(BPoint *pts, int32 numlines, RGBColor *colors, LayerData *d)
|
||||
{
|
||||
#ifdef DEBUG_DRIVER_MODULE
|
||||
printf("ViewDriver:: StrokeLineArray unimplemented\n");
|
||||
#endif
|
||||
if(!d || numlines==0 || !pts || !colors)
|
||||
return;
|
||||
|
||||
screenwin->Lock();
|
||||
framebuffer->Lock();
|
||||
SetLayerData(d);
|
||||
|
||||
// Do LineArray stuff here.
|
||||
|
||||
// drawview->Sync();
|
||||
// screenwin->view->Invalidate();
|
||||
|
||||
// for now, just print the data and hope we don't crash
|
||||
printf("ViewDriver::StrokeLineArray(): \n");
|
||||
BPoint *ptindex=pts;
|
||||
|
||||
for(int32 i=0; i<numlines; i++)
|
||||
{
|
||||
BPoint pt1=*ptindex;
|
||||
ptindex+=sizeof(BPoint);
|
||||
BPoint pt2=*ptindex;
|
||||
ptindex+=sizeof(BPoint);
|
||||
rgb_color col=colors[i].GetColor32();
|
||||
|
||||
drawview->SetHighColor(col);
|
||||
drawview->StrokeLine(pt1,pt2,B_SOLID_HIGH);
|
||||
|
||||
|
||||
printf("\tLine (%.1f,%.1f)-(%.1f,%.1f) in color (%d,%d,%d)\n",pt1.x,pt1.y,pt2.x,pt2.y,
|
||||
col.red,col.green,col.blue);
|
||||
}
|
||||
drawview->Sync();
|
||||
screenwin->view->Invalidate();
|
||||
|
||||
framebuffer->Unlock();
|
||||
screenwin->Unlock();
|
||||
|
||||
}
|
||||
|
||||
void ViewDriver::StrokePolygon(BPoint *ptlist, int32 numpts, BRect rect, LayerData *d, int8 *pat, bool is_closed)
|
||||
|
@ -37,6 +37,8 @@
|
||||
#include "WinBorder.h"
|
||||
#include "AppServer.h" // for new_decorator()
|
||||
|
||||
// TODO: Document this file completely
|
||||
|
||||
//#define DEBUG_WINBORDER
|
||||
//#define DEBUG_WINBORDER_MOUSE
|
||||
//#define DEBUG_WINBORDER_CLICK
|
||||
@ -72,9 +74,13 @@ void set_is_sliding_tab(bool state) { winborder_private::is_sliding_tab=state; }
|
||||
WinBorder * get_active_winborder(void) { return winborder_private::active_winborder; }
|
||||
void set_active_winborder(WinBorder *win) { winborder_private::active_winborder=win; }
|
||||
|
||||
WinBorder::WinBorder(BRect r, const char *name, int32 look, int32 feel, int32 flags, ServerWindow *win)
|
||||
WinBorder::WinBorder(const BRect &r, const char *name, const int32 look, const int32 feel,
|
||||
const int32 flags, ServerWindow *win)
|
||||
: Layer(r,name,B_FOLLOW_NONE,flags,win)
|
||||
{
|
||||
// unlike BViews, windows start off as hidden, so we need to tweak the hidecount
|
||||
// assignment made by Layer().
|
||||
_hidecount=1;
|
||||
_mbuttons=0;
|
||||
_kmodifiers=0;
|
||||
_win=win;
|
||||
@ -153,7 +159,7 @@ printf("Click: MoveToFront\n");
|
||||
printf("Click: Close\n");
|
||||
#endif
|
||||
_decorator->SetClose(true);
|
||||
_decorator->Draw();
|
||||
_decorator->DrawClose();
|
||||
break;
|
||||
}
|
||||
case CLICK_ZOOM:
|
||||
@ -162,7 +168,7 @@ printf("Click: Close\n");
|
||||
printf("Click: Zoom\n");
|
||||
#endif
|
||||
_decorator->SetZoom(true);
|
||||
_decorator->Draw();
|
||||
_decorator->DrawZoom();
|
||||
break;
|
||||
}
|
||||
case CLICK_MINIMIZE:
|
||||
@ -171,7 +177,7 @@ printf("Click: Zoom\n");
|
||||
printf("Click: Minimize\n");
|
||||
#endif
|
||||
_decorator->SetMinimize(true);
|
||||
_decorator->Draw();
|
||||
_decorator->DrawMinimize();
|
||||
break;
|
||||
}
|
||||
case CLICK_DRAG:
|
||||
@ -357,7 +363,7 @@ void WinBorder::MouseUp(int8 *buffer)
|
||||
BPoint pt(x,y);
|
||||
|
||||
#ifdef DEBUG_WINBORDER_MOUSE
|
||||
printf("WinBorder %s: MouseUp unimplmented\n",_title->String());
|
||||
printf("WinBorder %s: MouseUp unimplemented\n",_title->String());
|
||||
#endif
|
||||
|
||||
_mbuttons=0;
|
||||
@ -374,7 +380,7 @@ printf("WinBorder %s: MouseUp unimplmented\n",_title->String());
|
||||
case CLICK_CLOSE:
|
||||
{
|
||||
_decorator->SetClose(false);
|
||||
_decorator->Draw();
|
||||
_decorator->DrawClose();
|
||||
|
||||
// call close window stuff here
|
||||
|
||||
@ -383,7 +389,7 @@ printf("WinBorder %s: MouseUp unimplmented\n",_title->String());
|
||||
case CLICK_ZOOM:
|
||||
{
|
||||
_decorator->SetZoom(false);
|
||||
_decorator->Draw();
|
||||
_decorator->DrawZoom();
|
||||
|
||||
// call zoom stuff here
|
||||
|
||||
@ -392,7 +398,7 @@ printf("WinBorder %s: MouseUp unimplmented\n",_title->String());
|
||||
case CLICK_MINIMIZE:
|
||||
{
|
||||
_decorator->SetMinimize(false);
|
||||
_decorator->Draw();
|
||||
_decorator->DrawMinimize();
|
||||
|
||||
// call minimize stuff here
|
||||
|
||||
@ -404,6 +410,16 @@ printf("WinBorder %s: MouseUp unimplmented\n",_title->String());
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief Function to pass focus value on to decorator
|
||||
\param active Focus flag
|
||||
*/
|
||||
void WinBorder::SetFocus(const bool &active)
|
||||
{
|
||||
if(_decorator)
|
||||
_decorator->SetFocus(active);
|
||||
}
|
||||
|
||||
void WinBorder::RequestDraw(const BRect &r)
|
||||
{
|
||||
#ifdef DEBUG_WINBORDER
|
||||
|
@ -38,7 +38,8 @@ class DisplayDriver;
|
||||
class WinBorder : public Layer
|
||||
{
|
||||
public:
|
||||
WinBorder(BRect r, const char *name, int32 look, int32 feel, int32 flags, ServerWindow *win);
|
||||
WinBorder(const BRect &r, const char *name, const int32 look, const int32 feel,
|
||||
const int32 flags, ServerWindow *win);
|
||||
~WinBorder(void);
|
||||
void RequestDraw(void);
|
||||
void RequestDraw(const BRect &r);
|
||||
@ -53,8 +54,8 @@ public:
|
||||
void UpdateDecorator(void);
|
||||
void UpdateFont(void);
|
||||
void UpdateScreen(void);
|
||||
void RebuildRegions(bool recursive=true);
|
||||
void Activate(bool active=false);
|
||||
void RebuildRegions(const bool &recursive=true);
|
||||
void SetFocus(const bool &active=false);
|
||||
ServerWindow *Window(void) { return _win; }
|
||||
Decorator *GetDecorator(void) { return _decorator; }
|
||||
protected:
|
||||
|
Loading…
Reference in New Issue
Block a user