int wxImageList::Add( const wxIcon &bitmap ) { wxASSERT_MSG( (bitmap.GetWidth() == m_width && bitmap.GetHeight() == m_height) || (m_width == 0 && m_height == 0), wxT("invalid bitmap size in wxImageList: this might work ") wxT("on this platform but definitely won't under Windows.") ); m_images.Append( new wxIcon( bitmap ) ); if (m_width == 0 && m_height == 0) { m_width = bitmap.GetWidth(); m_height = bitmap.GetHeight(); } return m_images.GetCount() - 1; }
// This function converts to the right size with the given background colour wxBitmap PrepareIcon(wxIcon icon, wxSize size) { if (icon.GetWidth() == size.GetWidth() && icon.GetHeight() == size.GetHeight()) return icon; wxBitmap bmp; bmp.CopyFromIcon(icon); return bmp.ConvertToImage().Rescale(size.GetWidth(), size.GetHeight()); }
void wxGCDCImpl::DoDrawIcon( const wxIcon &icon, wxCoord x, wxCoord y ) { wxCHECK_RET( IsOk(), wxT("wxGCDC(cg)::DoDrawIcon - invalid DC") ); wxCHECK_RET( icon.IsOk(), wxT("wxGCDC(cg)::DoDrawIcon - invalid icon") ); wxCoord w = icon.GetWidth(); wxCoord h = icon.GetHeight(); m_graphicContext->DrawIcon( icon , x, y, w, h ); }
void wxIconBundle::AddIcon( const wxIcon& icon ) { size_t i, max = m_icons.GetCount(); for( i = 0; i < max; ++i ) { wxIcon& tmp = m_icons[i]; if( tmp.Ok() && tmp.GetWidth() == icon.GetWidth() && tmp.GetHeight() == icon.GetHeight() ) { tmp = icon; return; } } m_icons.Add( icon ); }
// Operations: bool wxTaskBarIcon::SetIcon(const wxIcon& icon, const wxString& tooltip) { wxBitmap bmp( icon ) ; OSStatus err = noErr ; CGImageRef pImage; #if 0 // is always available under OSX now -- crashes on 10.2 in CFRetain() - RN pImage = (CGImageRef) bmp.CGImageCreate() ; #else WXHBITMAP iconport ; WXHBITMAP maskport ; iconport = bmp.GetHBITMAP( &maskport ) ; if (!maskport) { // Make a mask with no transparent pixels wxBitmap mbmp(icon.GetWidth(), icon.GetHeight()); wxMemoryDC dc; dc.SelectObject(mbmp); dc.SetBackground(*wxBLACK_BRUSH); dc.Clear(); dc.SelectObject(wxNullBitmap); bmp.SetMask( new wxMask(mbmp, *wxWHITE) ) ; iconport = bmp.GetHBITMAP( &maskport ) ; } //create the icon from the bitmap and mask bitmap contained within err = CreateCGImageFromPixMaps( GetGWorldPixMap(MAC_WXHBITMAP(iconport)), GetGWorldPixMap(MAC_WXHBITMAP(maskport)), &pImage ); wxASSERT(err == 0); #endif wxASSERT(pImage != NULL ); err = SetApplicationDockTileImage(pImage); wxASSERT(err == 0); if (pImage != NULL) CGImageRelease(pImage); return m_iconAdded = err == noErr; }
// Create a drag image from an icon and optional cursor bool wxDragImage::Create(const wxIcon& image, const wxCursor& cursor) { if ( m_hImageList ) ImageList_Destroy(GetHimageList()); m_hImageList = 0; #ifdef __WXWINCE__ UINT flags = ILC_COLOR; #else UINT flags wxDUMMY_INITIALIZE(0) ; if (image.GetDepth() <= 4) flags = ILC_COLOR4; else if (image.GetDepth() <= 8) flags = ILC_COLOR8; else if (image.GetDepth() <= 16) flags = ILC_COLOR16; else if (image.GetDepth() <= 24) flags = ILC_COLOR24; else flags = ILC_COLOR32; #endif flags |= ILC_MASK; m_hImageList = (WXHIMAGELIST) ImageList_Create(image.GetWidth(), image.GetHeight(), flags, 1, 1); HICON hIcon = (HICON) image.GetHICON(); int index = ImageList_AddIcon(GetHimageList(), hIcon); if ( index == -1 ) { wxLogError(_("Couldn't add an image to the image list.")); } m_cursor = cursor; // Can only combine with drag image after calling BeginDrag. return (index != -1) ; }
void wxSetIconsX11(WXDisplay* display, WXWindow window, const wxIconBundle& ib) { size_t size = 0; const size_t numIcons = ib.GetIconCount(); for ( size_t i = 0; i < numIcons; ++i ) { const wxIcon icon = ib.GetIconByIndex(i); size += 2 + icon.GetWidth() * icon.GetHeight(); } wxMAKE_ATOM(_NET_WM_ICON, (Display*)display); if ( size > 0 ) { unsigned long* data = new unsigned long[size]; unsigned long* ptr = data; for ( size_t i = 0; i < numIcons; ++i ) { const wxImage image = ib.GetIconByIndex(i).ConvertToImage(); int width = image.GetWidth(), height = image.GetHeight(); unsigned char* imageData = image.GetData(); unsigned char* imageDataEnd = imageData + ( width * height * 3 ); bool hasMask = image.HasMask(); unsigned char rMask, gMask, bMask; unsigned char r, g, b, a; if( hasMask ) { rMask = image.GetMaskRed(); gMask = image.GetMaskGreen(); bMask = image.GetMaskBlue(); } else // no mask, but still init the variables to avoid warnings { rMask = gMask = bMask = 0; } *ptr++ = width; *ptr++ = height; while ( imageData < imageDataEnd ) { r = imageData[0]; g = imageData[1]; b = imageData[2]; if( hasMask && r == rMask && g == gMask && b == bMask ) a = 0; else a = 255; *ptr++ = ( a << 24 ) | ( r << 16 ) | ( g << 8 ) | b; imageData += 3; } } XChangeProperty( (Display*)display, WindowCast(window), _NET_WM_ICON, XA_CARDINAL, 32, PropModeReplace, (unsigned char*)data, size ); delete[] data; } else { XDeleteProperty( (Display*)display, WindowCast(window), _NET_WM_ICON ); } }