Fix initialization and memory issues

git-svn-id: file:///srv/svn/repos/haiku/trunk/current@2158 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
shadow303 2002-12-04 01:16:15 +00:00
parent 325a5f6bb6
commit 7348e71fc3
3 changed files with 31 additions and 22 deletions

View File

@ -306,7 +306,6 @@ ScreenDriver::ScreenDriver(void)
under_cursor=NULL;
cursorframe.Set(0,0,0,0);
oldcursorframe.Set(0,0,0,0);
}
ScreenDriver::~ScreenDriver(void)
@ -319,12 +318,19 @@ ScreenDriver::~ScreenDriver(void)
bool ScreenDriver::Initialize(void)
{
int8 cross[] = { 16,1,5,5,
14,0,4,0,4,0,4,0,128,32,241,224,128,32,4,0,
4,0,4,0,14,0,0,0,0,0,0,0,0,0,0,0,
14,0,4,0,4,0,4,0,128,32,245,224,128,32,4,0,
4,0,4,0,14,0,0,0,0,0,0,0,0,0,0,0 };
ServerBitmap *crosscursor;
fbuffer->Show();
// draw on the module's default cursor here to make it look preety
// wait 1 sec for the window to show...
snooze(500000);
crosscursor = new ServerBitmap(cross);
SetCursor(crosscursor,BPoint(5,5));
delete crosscursor;
return true;
}
@ -1303,16 +1309,13 @@ void ScreenDriver::MoveCursorTo(float x, float y)
printf("ScreenDriver::MoveCursorTo(%f,%f)\n",x,y);
#endif
Lock();
if(!IsCursorHidden() && under_cursor)
if(!IsCursorHidden())
BlitBitmap(under_cursor,under_cursor->Bounds(),cursorframe);
oldcursorframe=cursorframe;
cursorframe.OffsetTo(x,y);
if (under_cursor)
ExtractToBitmap(under_cursor,under_cursor->Bounds(),cursorframe);
ExtractToBitmap(under_cursor,under_cursor->Bounds(),cursorframe);
if(!IsCursorHidden() && cursor)
if(!IsCursorHidden())
BlitBitmap(cursor,cursor->Bounds(),cursorframe);
Unlock();
@ -1327,7 +1330,7 @@ printf("ScreenDriver::ShowCursor\n");
if(fbuffer->IsConnected())
{
SetCursorHidden(false);
if(CursorStateChanged() && cursor)
if(CursorStateChanged())
BlitBitmap(cursor,cursor->Bounds(),cursorframe);
}
Unlock();
@ -1340,7 +1343,7 @@ printf("ScreenDriver::ObscureCursor\n");
#endif
Lock();
SetCursorObscured(true);
if(!IsCursorHidden() && fbuffer->IsConnected() && under_cursor)
if(!IsCursorHidden() && fbuffer->IsConnected())
BlitBitmap(under_cursor,under_cursor->Bounds(),cursorframe);
Unlock();
}
@ -1372,13 +1375,12 @@ printf("ScreenDriver::SetCursor\n");
else
SetHotSpot(BPoint(0,0));
cursorframe.right=cursorframe.left+csr->Bounds().Width()-1;
cursorframe.bottom=cursorframe.top+csr->Bounds().Height()-1;
oldcursorframe=cursorframe;
cursorframe.right=cursorframe.left+csr->Bounds().Width();
cursorframe.bottom=cursorframe.top+csr->Bounds().Height();
ExtractToBitmap(under_cursor,under_cursor->Bounds(),cursorframe);
if(!IsCursorHidden() && cursor)
if(!IsCursorHidden())
BlitBitmap(cursor,cursor->Bounds(),cursorframe);
Unlock();
@ -1477,7 +1479,7 @@ printf("ScreenDriver::BlitBitmap(): Incompatible bitmap pixel depth\n");
return;
}
uint8 colorspace_size=sourcebmp->BitsPerPixel();
uint8 colorspace_size=sourcebmp->BitsPerPixel()/8;
// First, clip source rect to destination
if(sourcerect.Width() > destrect.Width())
sourcerect.right=sourcerect.left+destrect.Width();
@ -1532,7 +1534,7 @@ printf("ScreenDriver::BlitBitmap(): Incompatible bitmap pixel depth\n");
src_bits += uint32 ( (sourcerect.top * src_width) + (sourcerect.left * colorspace_size) );
dest_bits += uint32 ( (destrect.top * dest_width) + (destrect.left * colorspace_size) );
uint32 line_length = uint32 ((destrect.right - destrect.left)*colorspace_size);
uint32 line_length = uint32 ((destrect.right - destrect.left+1)*colorspace_size);
uint32 lines = uint32 (destrect.bottom-destrect.top+1);
for (uint32 pos_y = 0; pos_y != lines; pos_y++)
@ -1548,7 +1550,7 @@ printf("ScreenDriver::BlitBitmap(): Incompatible bitmap pixel depth\n");
void ScreenDriver::ExtractToBitmap(ServerBitmap *destbmp,BRect destrect, BRect sourcerect)
{
// Another internal function called from other functions.
if(!destbmp)
{
#ifdef DEBUG_DRIVER
@ -1565,7 +1567,7 @@ printf("ScreenDriver::ExtractToBitmap(): Incompatible bitmap pixel depth\n");
return;
}
uint8 colorspace_size=destbmp->BitsPerPixel();
uint8 colorspace_size=destbmp->BitsPerPixel()/8;
// First, clip source rect to destination
if(sourcerect.Width() > destrect.Width())
sourcerect.right=sourcerect.left+destrect.Width();
@ -1620,7 +1622,7 @@ printf("ScreenDriver::ExtractToBitmap(): Incompatible bitmap pixel depth\n");
src_bits += uint32 ( (sourcerect.top * src_width) + (sourcerect.left * colorspace_size) );
dest_bits += uint32 ( (destrect.top * dest_width) + (destrect.left * colorspace_size) );
uint32 line_length = uint32 ((destrect.right - destrect.left)*colorspace_size);
uint32 line_length = uint32 ((destrect.right - destrect.left+1)*colorspace_size);
uint32 lines = uint32 (destrect.bottom-destrect.top+1);
for (uint32 pos_y = 0; pos_y != lines; pos_y++)

View File

@ -106,7 +106,7 @@ protected:
int hide_cursor;
ServerBitmap *cursor, *under_cursor;
int32 drawmode;
BRect cursorframe, oldcursorframe;
BRect cursorframe;
};
#endif

View File

@ -87,6 +87,7 @@ ServerBitmap::ServerBitmap(const char *path)
bytesperline=bmp->BytesPerRow();
buffer=new uint8[bmp->BitsLength()];
memcpy(buffer,(void *)bmp->Bits(),bmp->BitsLength());
HandleSpace(cspace,bytesperline);
}
}
@ -113,6 +114,7 @@ ServerBitmap::ServerBitmap(uint32 type,int32 id)
bytesperline=bmp->BytesPerRow();
buffer=new uint8[bmp->BitsLength()];
memcpy(buffer,(void *)bmp->Bits(),bmp->BitsLength());
HandleSpace(cspace,bytesperline);
}
}
@ -138,6 +140,7 @@ ServerBitmap::ServerBitmap(uint32 type, const char *name)
bytesperline=bmp->BytesPerRow();
buffer=new uint8[bmp->BitsLength()];
memcpy(buffer,(void *)bmp->Bits(),bmp->BitsLength());
HandleSpace(cspace,bytesperline);
}
}
@ -146,6 +149,7 @@ ServerBitmap::ServerBitmap(ServerBitmap *bitmap)
is_initialized=true;
width=bitmap->width;
height=bitmap->height;
bytesperline = bitmap->bytesperline;
cspace=bitmap->cspace;
areaid=B_ERROR;
@ -178,6 +182,8 @@ ServerBitmap::ServerBitmap(int8 *data)
width=16;
height=16;
bytesperline=64;
cspace=B_RGBA32;
HandleSpace(cspace,bytesperline);
// for each row in the cursor data
for(j=0;j<16;j++)
@ -206,6 +212,7 @@ ServerBitmap::ServerBitmap(int8 *data)
width=0;
height=0;
bytesperline=0;
cspace=B_NO_COLOR_SPACE;
}
#ifdef DEBUG_SERVER_CURSOR
@ -216,7 +223,7 @@ ServerBitmap::ServerBitmap(int8 *data)
ServerBitmap::~ServerBitmap(void)
{
if(buffer)
delete buffer;
delete[] buffer;
}
void ServerBitmap::UpdateSettings(void)