* Modified a few lines from BSession::WriteInt32( uint32 ) into WriteUInt32( uint32 )
* in updateCachedState(), now all font attributes are received at once; I realized app_server doesn't need the flag based system. :-) * added a new method: PrintToStream() - used for debugging. * now the view state is allocated and initialized in BView::InitData(...) * modified a few things in addToList(...) 'cause I don't know what was in my head when I wrote it?! * added _ReservedView2-18() methods because of linker errors. * a new method used for debugging: PrintTree() * added debugging messages for a few methods * TESTED view hierarchy methods like AddChild() and RemoveChild() RemoveSelf() - They WORK! :-))) * minor but significant :-) ( = instead of == ) change in findView(...) *** Tree structure is in place now, mirrored on app_server ... and working :-) git-svn-id: file:///srv/svn/repos/haiku/trunk/current@4684 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
+307
-77
@@ -60,8 +60,24 @@
|
|||||||
#include <ServerProtocol.h>
|
#include <ServerProtocol.h>
|
||||||
|
|
||||||
// Local Includes --------------------------------------------------------------
|
// Local Includes --------------------------------------------------------------
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
// Local Defines ---------------------------------------------------------------
|
// Local Defines ---------------------------------------------------------------
|
||||||
|
|
||||||
|
#define DEBUG_BVIEW
|
||||||
|
#ifdef DEBUG_BVIEW
|
||||||
|
# include <stdio.h>
|
||||||
|
# define STRACE(x) printf x
|
||||||
|
#else
|
||||||
|
# define STRACE(x) ;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef DEBUG_BVIEW
|
||||||
|
# define BVTRACE PrintToStream()
|
||||||
|
#else
|
||||||
|
# define BVTRACE ;
|
||||||
|
#endif
|
||||||
|
|
||||||
inline rgb_color _get_rgb_color( uint32 color );
|
inline rgb_color _get_rgb_color( uint32 color );
|
||||||
inline uint32 _get_uint32_color( rgb_color c );
|
inline uint32 _get_uint32_color( rgb_color c );
|
||||||
inline rgb_color _set_static_rgb_color( uint8 r, uint8 g, uint8 b, uint8 a=255 );
|
inline rgb_color _set_static_rgb_color( uint8 r, uint8 g, uint8 b, uint8 a=255 );
|
||||||
@@ -331,6 +347,7 @@ NOTE: we do not use this flag any more
|
|||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
BView::~BView(){
|
BView::~BView(){
|
||||||
|
STRACE(("BView(%s)::~BView()\n", this->Name()));
|
||||||
if (owner)
|
if (owner)
|
||||||
debugger("Trying to delete a view that belongs to a window. Call RemoveSelf first.");
|
debugger("Trying to delete a view that belongs to a window. Call RemoveSelf first.");
|
||||||
|
|
||||||
@@ -2908,11 +2925,14 @@ void BView::InvertRect(BRect r){
|
|||||||
// View Hierarchy Functions
|
// View Hierarchy Functions
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
void BView::AddChild(BView* child, BView* before){
|
void BView::AddChild(BView* child, BView* before){
|
||||||
|
STRACE(("BView(%s)::AddChild(child='%s' before='%s')\n", this->Name(),
|
||||||
|
child? child->Name(): "NULL",
|
||||||
|
before? before->Name(): "NULL"));
|
||||||
if ( !child )
|
if ( !child )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (child->parent != NULL)
|
if (child->parent != NULL)
|
||||||
debugger("AddChild failed - the view already belonged to someone else.");
|
debugger("AddChild failed - the view already belongs to someone else.");
|
||||||
|
|
||||||
if (owner)
|
if (owner)
|
||||||
owner->Lock();
|
owner->Lock();
|
||||||
@@ -2923,21 +2943,31 @@ void BView::AddChild(BView* child, BView* before){
|
|||||||
if (owner){
|
if (owner){
|
||||||
check_lock();
|
check_lock();
|
||||||
|
|
||||||
|
STRACE(("BView(%s)::AddChild(child='%s' before='%s')... contacting app_server\n", this->Name(),
|
||||||
|
child? child->Name(): "NULL",
|
||||||
|
before? before->Name(): "NULL"));
|
||||||
|
|
||||||
child->setOwner( this->owner);
|
child->setOwner( this->owner);
|
||||||
attachView( child );
|
attachView( child );
|
||||||
|
|
||||||
owner->Unlock();
|
owner->Unlock();
|
||||||
}
|
}
|
||||||
|
// BVTRACE;
|
||||||
|
PrintTree();
|
||||||
|
// PrintToStream();
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
bool BView::RemoveChild(BView* child){
|
bool BView::RemoveChild(BView* child){
|
||||||
|
STRACE(("BView(%s)::RemoveChild(%s)\n", this->Name(), child->Name() ));
|
||||||
if (!child)
|
if (!child)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return child->removeSelf();
|
bool rv = child->removeSelf();
|
||||||
|
// BVTRACE;
|
||||||
|
PrintTree();
|
||||||
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
@@ -3251,13 +3281,18 @@ void BView::MessageReceived( BMessage *msg )
|
|||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
status_t BView::Perform(perform_code d, void* arg){
|
||||||
|
return B_BAD_VALUE;
|
||||||
|
}
|
||||||
|
|
||||||
// Private Functions
|
// Private Functions
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
void BView::InitData(BRect frame, const char *name, uint32 resizingMode, uint32 flags){
|
void BView::InitData(BRect frame, const char *name, uint32 resizingMode, uint32 flags){
|
||||||
|
|
||||||
// Info: The name of the view is set by BHandler constructor
|
// Info: The name of the view is set by BHandler constructor
|
||||||
|
|
||||||
|
// initialize members
|
||||||
fFlags = (resizingMode & _RESIZE_MASK_) | (flags & ~_RESIZE_MASK_);
|
fFlags = (resizingMode & _RESIZE_MASK_) | (flags & ~_RESIZE_MASK_);
|
||||||
|
|
||||||
originX = frame.left;
|
originX = frame.left;
|
||||||
@@ -3273,6 +3308,7 @@ void BView::InitData(BRect frame, const char *name, uint32 resizingMode, uint32
|
|||||||
top_level_view = false;
|
top_level_view = false;
|
||||||
|
|
||||||
cpicture = NULL;
|
cpicture = NULL;
|
||||||
|
comm = NULL;
|
||||||
|
|
||||||
fVerScroller = NULL;
|
fVerScroller = NULL;
|
||||||
fHorScroller = NULL;
|
fHorScroller = NULL;
|
||||||
@@ -3280,13 +3316,17 @@ void BView::InitData(BRect frame, const char *name, uint32 resizingMode, uint32
|
|||||||
f_is_printing = false;
|
f_is_printing = false;
|
||||||
|
|
||||||
fPermanentState = NULL;
|
fPermanentState = NULL;
|
||||||
fState = NULL; // ALLMOST allways use this member!!!
|
fState = new _view_attr_;
|
||||||
|
|
||||||
fBounds = frame.OffsetToCopy(0.0, 0.0);
|
fBounds = frame.OffsetToCopy(0.0, 0.0);
|
||||||
fShelf = NULL;
|
fShelf = NULL;
|
||||||
|
pr_state = NULL;
|
||||||
|
|
||||||
fEventMask = 0;
|
fEventMask = 0;
|
||||||
fEventOptions = 0;
|
fEventOptions = 0;
|
||||||
|
|
||||||
|
// call initialization methods.
|
||||||
|
initCachedState();
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
@@ -3341,6 +3381,7 @@ void BView::setOwner(BWindow *theOwner)
|
|||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
bool BView::removeSelf(){
|
bool BView::removeSelf(){
|
||||||
|
STRACE(("BView(%s)::removeSelf()...\n", this->Name() ));
|
||||||
/* # check for dirty flags - by updateCachedState()
|
/* # check for dirty flags - by updateCachedState()
|
||||||
* # check for dirty flags on 'child' children - by updateCachedState()
|
* # check for dirty flags on 'child' children - by updateCachedState()
|
||||||
* # handle if in middle of Begin/EndLineArray() - by setOwner(NULL)
|
* # handle if in middle of Begin/EndLineArray() - by setOwner(NULL)
|
||||||
@@ -3354,13 +3395,17 @@ bool BView::removeSelf(){
|
|||||||
*/
|
*/
|
||||||
bool returnValue = true;
|
bool returnValue = true;
|
||||||
|
|
||||||
|
if (!parent){
|
||||||
|
STRACE(("BView(%s)::removeSelf()... NO parent\n", this->Name()));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
check_lock();
|
check_lock();
|
||||||
|
|
||||||
if (!parent)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (owner){
|
if (owner){
|
||||||
|
|
||||||
|
updateCachedState();
|
||||||
|
|
||||||
if (owner->fDefaultButton == this){
|
if (owner->fDefaultButton == this){
|
||||||
owner->SetDefaultButton( NULL );
|
owner->SetDefaultButton( NULL );
|
||||||
}
|
}
|
||||||
@@ -3374,7 +3419,6 @@ bool BView::removeSelf(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
callDetachHooks( this );
|
callDetachHooks( this );
|
||||||
updateCachedState();
|
|
||||||
|
|
||||||
BWindow *ownerZ = owner;
|
BWindow *ownerZ = owner;
|
||||||
|
|
||||||
@@ -3388,7 +3432,8 @@ bool BView::removeSelf(){
|
|||||||
parent = NULL;
|
parent = NULL;
|
||||||
next_sibling = NULL;
|
next_sibling = NULL;
|
||||||
prev_sibling = NULL;
|
prev_sibling = NULL;
|
||||||
|
|
||||||
|
STRACE(("DONE: BView(%s)::removeSelf()\n", this->Name()));
|
||||||
return returnValue;
|
return returnValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3439,24 +3484,42 @@ bool BView::addToList(BView *aView, BView *before){
|
|||||||
if ( !aView )
|
if ( !aView )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
BView *current = first_child;
|
BView *current = first_child;
|
||||||
|
BView *last = current;
|
||||||
|
|
||||||
while( current && current->next_sibling != before )
|
while( current && current != before){
|
||||||
current = current->next_sibling;
|
last = current;
|
||||||
|
current = current->next_sibling;
|
||||||
if ( !current && before )
|
}
|
||||||
|
|
||||||
|
if( !current && before )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if ( current ){
|
// we're at begining of the list, OR between two elements
|
||||||
aView->next_sibling = current->next_sibling;
|
if( current ){
|
||||||
current->next_sibling = aView;
|
if ( current == first_child ){
|
||||||
aView->prev_sibling = current;
|
aView->next_sibling = current;
|
||||||
|
current->prev_sibling = aView;
|
||||||
if( aView->next_sibling )
|
first_child = aView;
|
||||||
aView->next_sibling->prev_sibling = aView;
|
}
|
||||||
|
else{
|
||||||
|
aView->next_sibling = current;
|
||||||
|
aView->prev_sibling = current->prev_sibling;
|
||||||
|
current->prev_sibling->next_sibling = aView;
|
||||||
|
current->prev_sibling = aView;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
// we have reached the end of the list
|
||||||
else{
|
else{
|
||||||
first_child = aView;
|
// if last!=NULL then we add to the end.
|
||||||
|
if ( last ){
|
||||||
|
last->next_sibling = aView;
|
||||||
|
aView->prev_sibling = last;
|
||||||
|
}
|
||||||
|
// if last==NULL, then aView is the first child in the list
|
||||||
|
else{
|
||||||
|
first_child = aView;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
aView->parent = this;
|
aView->parent = this;
|
||||||
@@ -3490,6 +3553,7 @@ bool BView::attachView(BView *aView){
|
|||||||
owner->session->WriteRect( aView->Frame() );
|
owner->session->WriteRect( aView->Frame() );
|
||||||
owner->session->WriteUInt32( aView->ResizingMode() );
|
owner->session->WriteUInt32( aView->ResizingMode() );
|
||||||
owner->session->WriteUInt32( aView->Flags() );
|
owner->session->WriteUInt32( aView->Flags() );
|
||||||
|
owner->session->WriteBool( aView->IsHidden() );
|
||||||
owner->session->WriteInt32( aView->CountChildren() );
|
owner->session->WriteInt32( aView->CountChildren() );
|
||||||
|
|
||||||
setCachedState();
|
setCachedState();
|
||||||
@@ -3536,7 +3600,7 @@ BView* BView::findView(const BView* aView, const char* viewName) const{
|
|||||||
if ( (child = aView->first_child) ){
|
if ( (child = aView->first_child) ){
|
||||||
while ( child ) {
|
while ( child ) {
|
||||||
BView* view = NULL;
|
BView* view = NULL;
|
||||||
if ( view == findView( child, viewName ) )
|
if ( (view = findView( child, viewName )) )
|
||||||
return view;
|
return view;
|
||||||
child = child->next_sibling;
|
child = child->next_sibling;
|
||||||
}
|
}
|
||||||
@@ -3587,14 +3651,14 @@ void BView::setCachedState(){
|
|||||||
void BView::setFontState(const BFont* font, uint16 mask){
|
void BView::setFontState(const BFont* font, uint16 mask){
|
||||||
|
|
||||||
owner->session->WriteInt32( AS_LAYER_SET_FONT_STATE );
|
owner->session->WriteInt32( AS_LAYER_SET_FONT_STATE );
|
||||||
owner->session->WriteInt32( mask );
|
owner->session->WriteUInt16( mask );
|
||||||
|
|
||||||
// always present.
|
// always present.
|
||||||
if ( mask & B_FONT_FAMILY_AND_STYLE ){
|
if ( mask & B_FONT_FAMILY_AND_STYLE ){
|
||||||
uint32 fontID;
|
uint32 fontID;
|
||||||
fontID = font->FamilyAndStyle( );
|
fontID = font->FamilyAndStyle( );
|
||||||
|
|
||||||
owner->session->WriteInt32( fontID );
|
owner->session->WriteUInt32( fontID );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( mask & B_FONT_SIZE ){
|
if ( mask & B_FONT_SIZE ){
|
||||||
@@ -3610,26 +3674,26 @@ void BView::setFontState(const BFont* font, uint16 mask){
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ( mask & B_FONT_SPACING ){
|
if ( mask & B_FONT_SPACING ){
|
||||||
owner->session->WriteInt8( font->Spacing() ); // uint8
|
owner->session->WriteUInt8( font->Spacing() ); // uint8
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( mask & B_FONT_ENCODING ){
|
if ( mask & B_FONT_ENCODING ){
|
||||||
owner->session->WriteInt8( font->Encoding() ); // uint8
|
owner->session->WriteUInt8( font->Encoding() ); // uint8
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( mask & B_FONT_FACE ){
|
if ( mask & B_FONT_FACE ){
|
||||||
owner->session->WriteInt16( font->Face() ); // uint16
|
owner->session->WriteUInt16( font->Face() ); // uint16
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( mask & B_FONT_FLAGS ){
|
if ( mask & B_FONT_FLAGS ){
|
||||||
owner->session->WriteInt32( font->Flags() ); // uint32
|
owner->session->WriteUInt32( font->Flags() ); // uint32
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
void BView::initCachedState(){
|
void BView::initCachedState(){
|
||||||
fState->font = be_plain_font;
|
fState->font = *be_plain_font;
|
||||||
|
|
||||||
fState->penPosition.Set( 0.0, 0.0 );
|
fState->penPosition.Set( 0.0, 0.0 );
|
||||||
fState->penSize = 1.0;
|
fState->penSize = 1.0;
|
||||||
@@ -3666,7 +3730,7 @@ void BView::initCachedState(){
|
|||||||
|
|
||||||
fState->scale = 1.0;
|
fState->scale = 1.0;
|
||||||
|
|
||||||
fState->fontAliasing = true;
|
fState->fontAliasing = false;
|
||||||
|
|
||||||
/* INFO: We include(invalidate) only B_VIEW_CLIP_REGION_BIT flag,
|
/* INFO: We include(invalidate) only B_VIEW_CLIP_REGION_BIT flag,
|
||||||
* because we should get the clipping region from app_server.
|
* because we should get the clipping region from app_server.
|
||||||
@@ -3683,10 +3747,11 @@ void BView::initCachedState(){
|
|||||||
|
|
||||||
void BView::updateCachedState(){
|
void BView::updateCachedState(){
|
||||||
// fail if we do not have an owner
|
// fail if we do not have an owner
|
||||||
|
STRACE(("BView(%s)::updateCachedState()\n", Name() ));
|
||||||
do_owner_check();
|
do_owner_check();
|
||||||
|
|
||||||
owner->session->WriteInt32( AS_LAYER_GET_STATE );
|
owner->session->WriteInt32( AS_LAYER_GET_STATE );
|
||||||
owner->Sync();
|
owner->session->Sync();
|
||||||
|
|
||||||
uint32 fontID;
|
uint32 fontID;
|
||||||
float size;
|
float size;
|
||||||
@@ -3699,49 +3764,27 @@ void BView::updateCachedState(){
|
|||||||
int32 noOfRects;
|
int32 noOfRects;
|
||||||
BRect rect;
|
BRect rect;
|
||||||
|
|
||||||
owner->session->ReadInt16( (int16*)&(fState->fontFlags) );
|
// read and set the font state
|
||||||
|
owner->session->ReadInt32( (int32*)&fontID );
|
||||||
|
owner->session->ReadFloat( &size );
|
||||||
|
owner->session->ReadFloat( &shear );
|
||||||
|
owner->session->ReadFloat( &rotation );
|
||||||
|
owner->session->ReadInt8( (int8*)&spacing );
|
||||||
|
owner->session->ReadInt8( (int8*)&encoding );
|
||||||
|
owner->session->ReadInt16( (int16*)&face );
|
||||||
|
owner->session->ReadInt32( (int32*)&flags );
|
||||||
|
|
||||||
// always present.
|
fState->fontFlags = B_FONT_ALL;
|
||||||
if ( fState->fontFlags & B_FONT_FAMILY_AND_STYLE ){
|
fState->font.SetFamilyAndStyle( fontID );
|
||||||
owner->session->ReadInt32( (int32*)&fontID );
|
fState->font.SetSize( size );
|
||||||
fState->font.SetFamilyAndStyle( fontID );
|
fState->font.SetShear( shear );
|
||||||
}
|
fState->font.SetRotation( rotation );
|
||||||
|
fState->font.SetSpacing( spacing );
|
||||||
if ( fState->fontFlags & B_FONT_SIZE ){
|
fState->font.SetEncoding( encoding );
|
||||||
owner->session->ReadFloat( &size );
|
fState->font.SetFace( face );
|
||||||
fState->font.SetSize( size );
|
fState->font.SetFlags( flags );
|
||||||
}
|
|
||||||
|
|
||||||
if ( fState->fontFlags & B_FONT_SHEAR ){
|
// read and set view's state
|
||||||
owner->session->ReadFloat( &shear );
|
|
||||||
fState->font.SetShear( shear );
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( fState->fontFlags & B_FONT_ROTATION ){
|
|
||||||
owner->session->ReadFloat( &rotation );
|
|
||||||
fState->font.SetRotation( rotation );
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( fState->fontFlags & B_FONT_SPACING ){
|
|
||||||
owner->session->ReadInt8( (int8*)&spacing );
|
|
||||||
fState->font.SetSpacing( spacing );
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( fState->fontFlags & B_FONT_ENCODING ){
|
|
||||||
owner->session->ReadInt8( (int8*)&encoding );
|
|
||||||
fState->font.SetEncoding( encoding );
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( fState->fontFlags & B_FONT_FACE ){
|
|
||||||
owner->session->ReadInt16( (int16*)&face );
|
|
||||||
fState->font.SetFace( face );
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( fState->fontFlags & B_FONT_FLAGS ){
|
|
||||||
owner->session->ReadInt32( (int32*)&flags );
|
|
||||||
fState->font.SetFlags( flags );
|
|
||||||
}
|
|
||||||
|
|
||||||
owner->session->ReadPoint( &(fState->penPosition) );
|
owner->session->ReadPoint( &(fState->penPosition) );
|
||||||
owner->session->ReadFloat( &(fState->penSize) );
|
owner->session->ReadFloat( &(fState->penSize) );
|
||||||
owner->session->ReadData( &(fState->highColor), sizeof(rgb_color) );
|
owner->session->ReadData( &(fState->highColor), sizeof(rgb_color) );
|
||||||
@@ -3772,6 +3815,7 @@ void BView::updateCachedState(){
|
|||||||
owner->session->ReadRect( &fBounds );
|
owner->session->ReadRect( &fBounds );
|
||||||
|
|
||||||
fState->flags = B_VIEW_CLIP_REGION_BIT;
|
fState->flags = B_VIEW_CLIP_REGION_BIT;
|
||||||
|
STRACE(("BView(%s)::updateCachedState() - DONE\n", Name() ));
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
@@ -3813,17 +3857,22 @@ void BView::SetPattern(pattern pat){
|
|||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
bool BView::do_owner_check() const{
|
bool BView::do_owner_check() const{
|
||||||
|
STRACE(("BView(%s)::do_owner_check()...", Name()));
|
||||||
int32 serverToken = _get_object_token_(this);
|
int32 serverToken = _get_object_token_(this);
|
||||||
|
|
||||||
if (owner){
|
if (owner){
|
||||||
owner->AssertLocked();
|
owner->AssertLocked();
|
||||||
|
|
||||||
if (owner->fLastViewToken != serverToken){
|
if (owner->fLastViewToken != serverToken){
|
||||||
|
STRACE(("contacting app_server... sending token: %ld\n", serverToken));
|
||||||
owner->session->WriteInt32( AS_SET_CURRENT_LAYER );
|
owner->session->WriteInt32( AS_SET_CURRENT_LAYER );
|
||||||
owner->session->WriteInt32( serverToken );
|
owner->session->WriteInt32( serverToken );
|
||||||
|
|
||||||
owner->fLastViewToken = serverToken;
|
owner->fLastViewToken = serverToken;
|
||||||
}
|
}
|
||||||
|
else{
|
||||||
|
STRACE(("this is the lastViewToken\n"));
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
@@ -3835,17 +3884,25 @@ bool BView::do_owner_check() const{
|
|||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
void BView::check_lock() const{
|
void BView::check_lock() const{
|
||||||
|
STRACE(("BView(%s)::check_lock()...", Name()));
|
||||||
int32 serverToken = _get_object_token_(this);
|
int32 serverToken = _get_object_token_(this);
|
||||||
|
|
||||||
if (owner){
|
if (owner){
|
||||||
owner->AssertLocked();
|
owner->AssertLocked();
|
||||||
|
|
||||||
if (owner->fLastViewToken != serverToken){
|
if (owner->fLastViewToken != serverToken){
|
||||||
|
STRACE(("contacting app_server... sending token: %ld\n", serverToken));
|
||||||
owner->session->WriteInt32( AS_SET_CURRENT_LAYER );
|
owner->session->WriteInt32( AS_SET_CURRENT_LAYER );
|
||||||
owner->session->WriteInt32( serverToken );
|
owner->session->WriteInt32( serverToken );
|
||||||
|
|
||||||
owner->fLastViewToken = serverToken;
|
owner->fLastViewToken = serverToken;
|
||||||
}
|
}
|
||||||
|
else{
|
||||||
|
STRACE(("quiet2\n"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
STRACE(("quiet1\n"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3871,6 +3928,38 @@ bool BView::do_owner_check_no_pick() const{
|
|||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void BView::_ReservedView2(){
|
||||||
|
}
|
||||||
|
void BView::_ReservedView3(){
|
||||||
|
}
|
||||||
|
void BView::_ReservedView4(){
|
||||||
|
}
|
||||||
|
void BView::_ReservedView5(){
|
||||||
|
}
|
||||||
|
void BView::_ReservedView6(){
|
||||||
|
}
|
||||||
|
void BView::_ReservedView7(){
|
||||||
|
}
|
||||||
|
void BView::_ReservedView8(){
|
||||||
|
}
|
||||||
|
#if !_PR3_COMPATIBLE_
|
||||||
|
void BView::_ReservedView9(){
|
||||||
|
}
|
||||||
|
void BView::_ReservedView10(){
|
||||||
|
}
|
||||||
|
void BView::_ReservedView11(){
|
||||||
|
}
|
||||||
|
void BView::_ReservedView12(){
|
||||||
|
}
|
||||||
|
void BView::_ReservedView13(){
|
||||||
|
}
|
||||||
|
void BView::_ReservedView14(){
|
||||||
|
}
|
||||||
|
void BView::_ReservedView15(){
|
||||||
|
}
|
||||||
|
void BView::_ReservedView16(){
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
@@ -3933,8 +4022,149 @@ inline bool _is_new_pattern( const pattern& p1, const pattern& p2 ){
|
|||||||
else
|
else
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void BView::PrintToStream(){
|
||||||
|
printf("BView::PrintToStream()\n");
|
||||||
|
printf("\tName: %s
|
||||||
|
\tParent: %s
|
||||||
|
\tFirstChild: %s
|
||||||
|
\tNextSibling: %s
|
||||||
|
\tPrevSibling: %s
|
||||||
|
\tOwner(Window): %s
|
||||||
|
\tToken: %ld
|
||||||
|
\tFlags: %ld
|
||||||
|
\tView origin: (%f,%f)
|
||||||
|
\tView Bounds rectangle: (%f,%f,%f,%f)
|
||||||
|
\tShow level: %d
|
||||||
|
\tTopView?: %s
|
||||||
|
\tBPicture: %s
|
||||||
|
\tVertical Scrollbar %s
|
||||||
|
\tHorizontal Scrollbar %s
|
||||||
|
\tIs Printing?: %s
|
||||||
|
\tShelf?: %s
|
||||||
|
\tEventMask: %ld
|
||||||
|
\tEventOptions: %ld\n",
|
||||||
|
Name(),
|
||||||
|
parent? parent->Name() : "NULL",
|
||||||
|
first_child? first_child->Name() : "NULL",
|
||||||
|
next_sibling? next_sibling->Name() : "NULL",
|
||||||
|
prev_sibling? prev_sibling->Name() : "NULL",
|
||||||
|
owner? owner->Name() : "NULL",
|
||||||
|
_get_object_token_(this),
|
||||||
|
fFlags,
|
||||||
|
originX, originY,
|
||||||
|
fBounds.left, fBounds.top, fBounds.right, fBounds.bottom,
|
||||||
|
fShowLevel,
|
||||||
|
top_level_view? "YES" : "NO",
|
||||||
|
cpicture? "YES" : "NULL",
|
||||||
|
fVerScroller? "YES" : "NULL",
|
||||||
|
fHorScroller? "YES" : "NULL",
|
||||||
|
f_is_printing? "YES" : "NO",
|
||||||
|
fShelf? "YES" : "NO",
|
||||||
|
fEventMask,
|
||||||
|
fEventOptions);
|
||||||
|
|
||||||
|
printf("\tState status:
|
||||||
|
\t\tLocalCoordianteSystem: (%f,%f)
|
||||||
|
\t\tPenLocation: (%f,%f)
|
||||||
|
\t\tPenSize: %f
|
||||||
|
\t\tHighColor: [%d,%d,%d,%d]
|
||||||
|
\t\tLowColor: [%d,%d,%d,%d]
|
||||||
|
\t\tViewColor: [%d,%d,%d,%d]
|
||||||
|
\t\tPattern: %llx
|
||||||
|
\t\tDrawingMode: %d
|
||||||
|
\t\tLineJoinMode: %d
|
||||||
|
\t\tLineCapMode: %d
|
||||||
|
\t\tMiterLimit: %f
|
||||||
|
\t\tAlphaSource: %d
|
||||||
|
\t\tAlphaFuntion: %d
|
||||||
|
\t\tScale: %f
|
||||||
|
\t\t(Print)FontAliasing: %s
|
||||||
|
\t\tFont Info:\n",
|
||||||
|
fState->coordSysOrigin.x, fState->coordSysOrigin.y,
|
||||||
|
fState->penPosition.x, fState->penPosition.y,
|
||||||
|
fState->penSize,
|
||||||
|
fState->highColor.red, fState->highColor.blue, fState->highColor.green, fState->highColor.alpha,
|
||||||
|
fState->lowColor.red, fState->lowColor.blue, fState->lowColor.green, fState->lowColor.alpha,
|
||||||
|
fState->viewColor.red, fState->viewColor.blue, fState->viewColor.green, fState->viewColor.alpha,
|
||||||
|
*((uint64*)&(fState->patt)),
|
||||||
|
fState->drawingMode,
|
||||||
|
fState->lineJoin,
|
||||||
|
fState->lineCap,
|
||||||
|
fState->miterLimit,
|
||||||
|
fState->alphaSrcMode,
|
||||||
|
fState->alphaFncMode,
|
||||||
|
fState->scale,
|
||||||
|
fState->fontAliasing? "YES" : "NO");
|
||||||
|
|
||||||
|
fState->font.PrintToStream();
|
||||||
|
// TODO: also print the line array.
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void BView::PrintTree(){
|
||||||
|
|
||||||
|
int32 spaces = 2;
|
||||||
|
BView *c = first_child; //c = short for: current
|
||||||
|
printf( "'%s'\n", Name() );
|
||||||
|
if( c != NULL )
|
||||||
|
while( true ){
|
||||||
|
// action block
|
||||||
|
{
|
||||||
|
for( int i = 0; i < spaces; i++)
|
||||||
|
printf(" ");
|
||||||
|
|
||||||
|
printf( "'%s'\n", c->Name() );
|
||||||
|
}
|
||||||
|
|
||||||
|
// go deep
|
||||||
|
if( c->first_child ){
|
||||||
|
c = c->first_child;
|
||||||
|
spaces += 2;
|
||||||
|
}
|
||||||
|
// go right or up
|
||||||
|
else
|
||||||
|
// go right
|
||||||
|
if( c->next_sibling ){
|
||||||
|
c = c->next_sibling;
|
||||||
|
}
|
||||||
|
// go up
|
||||||
|
else{
|
||||||
|
while( !c->parent->next_sibling && c->parent != this ){
|
||||||
|
c = c->parent;
|
||||||
|
spaces -= 2;
|
||||||
|
}
|
||||||
|
// that enough! We've reached this view.
|
||||||
|
if( c->parent == this )
|
||||||
|
break;
|
||||||
|
|
||||||
|
c = c->parent->next_sibling;
|
||||||
|
spaces -= 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
/* TODOs
|
/* TODOs
|
||||||
* -implement SetDiskMode() what's with this method? what does it do? test!
|
* -implement SetDiskMode() what's with this method? what does it do? test!
|
||||||
* does it has something to do with DrawPictureAsync( filename* .. )?
|
* does it has something to do with DrawPictureAsync( filename* .. )?
|
||||||
* -implement DrawAfterChildren()
|
* -implement DrawAfterChildren()
|
||||||
*/
|
*/
|
||||||
|
/*
|
||||||
|
@log:
|
||||||
|
|
||||||
|
* Modified a few lines from BSession::WriteInt32( uint32 ) into WriteUInt32( uint32 )
|
||||||
|
* in updateCachedState(), now all font attributes are received at once; I realized app_server doesn't need the flag based system. :-)
|
||||||
|
* added a new method: PrintToStream() - used for debugging.
|
||||||
|
* now the view state is allocated and initialized in BView::InitData(...)
|
||||||
|
* modified a few things in addToList(...) 'cause I don't know what was in my head when I wrote it?!
|
||||||
|
* added _ReservedView2-18() methods because of linker errors.
|
||||||
|
* a new method used for debugging: PrintTree()
|
||||||
|
* added debugging messages for a few methods
|
||||||
|
* TESTED view hierarchy methods like AddChild() and RemoveChild() RemoveSelf() - They WORK! :-)))
|
||||||
|
* minor but significant :-) ( = instead of == ) change in findView(...)
|
||||||
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user