doc view code inteprets wxSTREAM_EOF as correct,

Added wxMask( bitmap, colour ).


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@4851 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling 1999-12-07 09:35:42 +00:00
parent c61f4f6dbd
commit 1fb4de3138
3 changed files with 124 additions and 8 deletions

View File

@ -293,7 +293,7 @@ bool wxDocument::OnSaveDocument(const wxString& file)
if (store.fail() || store.bad())
#else
wxFileOutputStream store(wxString(file.fn_str()));
if (store.LastError() != 0)
if (store.LastError() != wxSTREAM_NOERROR)
#endif
{
(void)wxMessageBox(_("Sorry, could not open this file for saving."), msgTitle, wxOK | wxICON_EXCLAMATION,
@ -329,14 +329,20 @@ bool wxDocument::OnOpenDocument(const wxString& file)
if (store.fail() || store.bad())
#else
wxFileInputStream store(wxString(file.fn_str()));
if (store.LastError() != 0)
if (store.LastError() != wxSTREAM_NOERROR)
#endif
{
(void)wxMessageBox(_("Sorry, could not open this file."), msgTitle, wxOK|wxICON_EXCLAMATION,
GetDocumentWindow());
return FALSE;
}
#if wxUSE_STD_IOSTREAM
if (!LoadObject(store))
#else
int res = LoadObject(store).LastError();
if ((res != wxSTREAM_NOERROR) &&
(res != wxSTREAM_EOF))
#endif
{
(void)wxMessageBox(_("Sorry, could not open this file."), msgTitle, wxOK|wxICON_EXCLAMATION,
GetDocumentWindow());

View File

@ -55,17 +55,72 @@ wxMask::~wxMask()
gdk_bitmap_unref( m_bitmap );
}
bool wxMask::Create( const wxBitmap& WXUNUSED(bitmap),
const wxColour& WXUNUSED(colour) )
bool wxMask::Create( const wxBitmap& bitmap,
const wxColour& colour )
{
if (m_bitmap)
{
gdk_bitmap_unref( m_bitmap );
m_bitmap = (GdkBitmap*) NULL;
}
wxImage image( bitmap );
if (!image.Ok()) return FALSE;
GdkVisual *visual = gdk_visual_get_system();
GdkImage *mask_image = gdk_image_new( GDK_IMAGE_FASTEST, visual, image.GetWidth(), image.GetHeight() );
if (!mask_image) return FALSE;
wxFAIL_MSG( wxT("TODO") );
GdkWindow *parent = (GdkWindow*) &gdk_root_parent;
m_bitmap = gdk_pixmap_new( parent, image.GetWidth(), image.GetHeight(), 1 );
unsigned char *data = image.GetData();
int index = 0;
unsigned char red = colour.Red();
unsigned char green = colour.Green();
unsigned char blue = colour.Blue();
int bpp = visual->depth;
if ((bpp == 16) && (visual->red_mask != 0xf800)) bpp = 15;
if (bpp == 15)
{
red = red & 0xf8;
blue = blue & 0xf8;
green = green & 0xf8;
}
if (bpp == 16)
{
red = red & 0xf8;
blue = blue & 0xfc;
green = green & 0xf8;
}
for (int j = 0; j < image.GetHeight(); j++)
for (int i = 0; i < image.GetWidth(); i++)
{
if ((data[index] == red) &&
(data[index+1] == green) &&
(data[index+2] == blue))
{
gdk_image_put_pixel( mask_image, i, j, 1 );
}
else
{
gdk_image_put_pixel( mask_image, i, j, 1 );
}
index += 3;
}
GdkGC *mask_gc = gdk_gc_new( m_bitmap );
gdk_draw_image( m_bitmap, mask_gc, mask_image, 0, 0, 0, 0, image.GetWidth(), image.GetHeight() );
gdk_gc_unref( mask_gc );
gdk_image_destroy( mask_image );
return FALSE;
}

View File

@ -55,17 +55,72 @@ wxMask::~wxMask()
gdk_bitmap_unref( m_bitmap );
}
bool wxMask::Create( const wxBitmap& WXUNUSED(bitmap),
const wxColour& WXUNUSED(colour) )
bool wxMask::Create( const wxBitmap& bitmap,
const wxColour& colour )
{
if (m_bitmap)
{
gdk_bitmap_unref( m_bitmap );
m_bitmap = (GdkBitmap*) NULL;
}
wxImage image( bitmap );
if (!image.Ok()) return FALSE;
GdkVisual *visual = gdk_visual_get_system();
GdkImage *mask_image = gdk_image_new( GDK_IMAGE_FASTEST, visual, image.GetWidth(), image.GetHeight() );
if (!mask_image) return FALSE;
wxFAIL_MSG( wxT("TODO") );
GdkWindow *parent = (GdkWindow*) &gdk_root_parent;
m_bitmap = gdk_pixmap_new( parent, image.GetWidth(), image.GetHeight(), 1 );
unsigned char *data = image.GetData();
int index = 0;
unsigned char red = colour.Red();
unsigned char green = colour.Green();
unsigned char blue = colour.Blue();
int bpp = visual->depth;
if ((bpp == 16) && (visual->red_mask != 0xf800)) bpp = 15;
if (bpp == 15)
{
red = red & 0xf8;
blue = blue & 0xf8;
green = green & 0xf8;
}
if (bpp == 16)
{
red = red & 0xf8;
blue = blue & 0xfc;
green = green & 0xf8;
}
for (int j = 0; j < image.GetHeight(); j++)
for (int i = 0; i < image.GetWidth(); i++)
{
if ((data[index] == red) &&
(data[index+1] == green) &&
(data[index+2] == blue))
{
gdk_image_put_pixel( mask_image, i, j, 1 );
}
else
{
gdk_image_put_pixel( mask_image, i, j, 1 );
}
index += 3;
}
GdkGC *mask_gc = gdk_gc_new( m_bitmap );
gdk_draw_image( m_bitmap, mask_gc, mask_image, 0, 0, 0, 0, image.GetWidth(), image.GetHeight() );
gdk_gc_unref( mask_gc );
gdk_image_destroy( mask_image );
return FALSE;
}