Sizing the images stored in the list should stick to the convention adopted in the native wxImageList implemented in wxMSW. Images stored in the list should have the sizes as it is declared for the list even if provided bitmaps have different sizes. In case of discrepancies their dimensions should be adjusted accordingly (cropped or extended).
		
			
				
	
	
		
			609 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			609 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
///////////////////////////////////////////////////////////////////////////////
 | 
						|
// Name:        tests/graphics/imagelist.cpp
 | 
						|
// Purpose:     image list unit tests
 | 
						|
// Author:      Artur Wieczorek
 | 
						|
// Created:     2021-01-11
 | 
						|
// Copyright:   (c) 2021 wxWidgets development team
 | 
						|
///////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
// ----------------------------------------------------------------------------
 | 
						|
// headers
 | 
						|
// ----------------------------------------------------------------------------
 | 
						|
 | 
						|
#include "testprec.h"
 | 
						|
 | 
						|
 | 
						|
#include "wx/bitmap.h"
 | 
						|
#include "wx/graphics.h"
 | 
						|
#include "wx/icon.h"
 | 
						|
#include "wx/imaglist.h"
 | 
						|
 | 
						|
#include "wx/dcmemory.h"
 | 
						|
 | 
						|
// ----------------------------------------------------------------------------
 | 
						|
// tests
 | 
						|
// ----------------------------------------------------------------------------
 | 
						|
 | 
						|
TEST_CASE("ImageList:WithMask", "[imagelist][withmask]")
 | 
						|
{
 | 
						|
    wxInitAllImageHandlers();
 | 
						|
 | 
						|
    wxBitmap bmpRGB(32, 32, 24);
 | 
						|
    {
 | 
						|
        wxMemoryDC mdc(bmpRGB);
 | 
						|
        mdc.SetBackground(*wxBLUE_BRUSH);
 | 
						|
        mdc.Clear();
 | 
						|
        mdc.SetBrush(*wxRED_BRUSH);
 | 
						|
        mdc.DrawRectangle(4, 4, 24, 24);
 | 
						|
    }
 | 
						|
    REQUIRE(bmpRGB.IsOk());
 | 
						|
 | 
						|
    wxBitmap bmpRGBA;
 | 
						|
    bmpRGBA.LoadFile("image/wx.png", wxBITMAP_TYPE_PNG);
 | 
						|
    REQUIRE(bmpRGBA.IsOk());
 | 
						|
 | 
						|
    wxBitmap bmpMask(32, 32, 1);
 | 
						|
    {
 | 
						|
        wxMemoryDC mdc(bmpMask);
 | 
						|
#if wxUSE_GRAPHICS_CONTEXT
 | 
						|
        wxGraphicsContext* gc = mdc.GetGraphicsContext();
 | 
						|
        if ( gc )
 | 
						|
            gc->SetAntialiasMode(wxANTIALIAS_NONE);
 | 
						|
#endif //wxUSE_GRAPHICS_CONTEXT
 | 
						|
        mdc.SetBackground(*wxBLACK_BRUSH);
 | 
						|
        mdc.Clear();
 | 
						|
        mdc.SetBrush(*wxWHITE_BRUSH);
 | 
						|
        mdc.DrawRectangle(0, 0, 16, 32);
 | 
						|
    }
 | 
						|
 | 
						|
    wxBitmap bmpRGBWithMask(bmpRGB);
 | 
						|
    bmpRGBWithMask.SetMask(new wxMask(bmpMask));
 | 
						|
    REQUIRE(bmpRGBWithMask.IsOk());
 | 
						|
 | 
						|
    wxBitmap bmpRGBAWithMask(bmpRGBA);
 | 
						|
    bmpRGBAWithMask.SetMask(new wxMask(bmpMask));
 | 
						|
    REQUIRE(bmpRGBAWithMask.IsOk());
 | 
						|
 | 
						|
    wxIcon ico;
 | 
						|
    ico.LoadFile("image/wx.ico", wxBITMAP_TYPE_ICO);
 | 
						|
    REQUIRE(ico.IsOk());
 | 
						|
 | 
						|
    REQUIRE(bmpRGB.HasAlpha() == false);
 | 
						|
    REQUIRE(bmpRGB.GetMask() == NULL);
 | 
						|
 | 
						|
    REQUIRE(bmpRGBWithMask.HasAlpha() == false);
 | 
						|
    REQUIRE(bmpRGBWithMask.GetMask() != NULL);
 | 
						|
 | 
						|
    REQUIRE(bmpRGBA.HasAlpha() == true);
 | 
						|
    REQUIRE(bmpRGBA.GetMask() == NULL);
 | 
						|
 | 
						|
    REQUIRE(bmpRGBAWithMask.HasAlpha() == true);
 | 
						|
    REQUIRE(bmpRGBAWithMask.GetMask() != NULL);
 | 
						|
 | 
						|
    wxImageList il(32, 32, true);
 | 
						|
 | 
						|
    SECTION("Add RGB image to list")
 | 
						|
    {
 | 
						|
        il.RemoveAll();
 | 
						|
        int idx = il.Add(bmpRGB);
 | 
						|
        CHECK(il.GetImageCount() == 1);
 | 
						|
        wxBitmap bmp1 = il.GetBitmap(idx);
 | 
						|
        CHECK(bmp1.HasAlpha() == false);
 | 
						|
        CHECK(bmp1.GetMask() != NULL);
 | 
						|
        CHECK(bmp1.GetWidth() == 32);
 | 
						|
        CHECK(bmp1.GetHeight() == 32);
 | 
						|
 | 
						|
        idx = il.Add(bmpRGBWithMask);
 | 
						|
        CHECK(il.GetImageCount() == 2);
 | 
						|
        wxBitmap bmp2 = il.GetBitmap(idx);
 | 
						|
        CHECK(bmp2.HasAlpha() == false);
 | 
						|
        CHECK(bmp2.GetMask() != NULL);
 | 
						|
        CHECK(bmp2.GetWidth() == 32);
 | 
						|
        CHECK(bmp2.GetHeight() == 32);
 | 
						|
 | 
						|
        idx = il.Add(bmpRGB, *wxRED);
 | 
						|
        CHECK(il.GetImageCount() == 3);
 | 
						|
        wxBitmap bmp3 = il.GetBitmap(idx);
 | 
						|
        CHECK(bmp3.HasAlpha() == false);
 | 
						|
        CHECK(bmp3.GetMask() != NULL);
 | 
						|
        CHECK(bmp3.GetWidth() == 32);
 | 
						|
        CHECK(bmp3.GetHeight() == 32);
 | 
						|
    }
 | 
						|
 | 
						|
    SECTION("Add RGBA image to list")
 | 
						|
    {
 | 
						|
        il.RemoveAll();
 | 
						|
        int idx = il.Add(bmpRGBA);
 | 
						|
        CHECK(il.GetImageCount() == 1);
 | 
						|
        wxBitmap bmp1 = il.GetBitmap(idx);
 | 
						|
        CHECK(bmp1.HasAlpha() == false);
 | 
						|
        CHECK(bmp1.GetMask() != NULL);
 | 
						|
        CHECK(bmp1.GetWidth() == 32);
 | 
						|
        CHECK(bmp1.GetHeight() == 32);
 | 
						|
 | 
						|
        idx = il.Add(bmpRGBAWithMask);
 | 
						|
        CHECK(il.GetImageCount() == 2);
 | 
						|
        wxBitmap bmp2 = il.GetBitmap(idx);
 | 
						|
        CHECK(bmp2.HasAlpha() == false);
 | 
						|
        CHECK(bmp2.GetMask() != NULL);
 | 
						|
        CHECK(bmp2.GetWidth() == 32);
 | 
						|
        CHECK(bmp2.GetHeight() == 32);
 | 
						|
 | 
						|
        idx = il.Add(bmpRGBA, *wxRED);
 | 
						|
        CHECK(il.GetImageCount() == 3);
 | 
						|
        wxBitmap bmp3 = il.GetBitmap(idx);
 | 
						|
        CHECK(bmp3.HasAlpha() == false);
 | 
						|
        CHECK(bmp3.GetMask() != NULL);
 | 
						|
        CHECK(bmp3.GetWidth() == 32);
 | 
						|
        CHECK(bmp3.GetHeight() == 32);
 | 
						|
    }
 | 
						|
 | 
						|
    SECTION("Add icon to list")
 | 
						|
    {
 | 
						|
        il.RemoveAll();
 | 
						|
        int idx = il.Add(ico);
 | 
						|
        CHECK(il.GetImageCount() == 1);
 | 
						|
        wxIcon icon1 = il.GetIcon(idx);
 | 
						|
        CHECK(icon1.GetWidth() == 32);
 | 
						|
        CHECK(icon1.GetHeight() == 32);
 | 
						|
    }
 | 
						|
 | 
						|
    SECTION("Replace with RGB image")
 | 
						|
    {
 | 
						|
        il.RemoveAll();
 | 
						|
        int idx1 = il.Add(bmpRGBA);
 | 
						|
        CHECK(il.GetImageCount() == 1);
 | 
						|
        int idx2 = il.Add(bmpRGBAWithMask);
 | 
						|
        CHECK(il.GetImageCount() == 2);
 | 
						|
 | 
						|
        il.Replace(idx1, bmpRGB);
 | 
						|
        il.Replace(idx2, bmpRGBWithMask);
 | 
						|
 | 
						|
        wxBitmap bmp1 = il.GetBitmap(idx1);
 | 
						|
        CHECK(bmp1.HasAlpha() == false);
 | 
						|
        CHECK(bmp1.GetMask() != NULL);
 | 
						|
        CHECK(bmp1.GetWidth() == 32);
 | 
						|
        CHECK(bmp1.GetHeight() == 32);
 | 
						|
 | 
						|
        wxBitmap bmp2 = il.GetBitmap(idx2);
 | 
						|
        CHECK(bmp2.HasAlpha() == false);
 | 
						|
        CHECK(bmp2.GetMask() != NULL);
 | 
						|
        CHECK(bmp2.GetWidth() == 32);
 | 
						|
        CHECK(bmp2.GetHeight() == 32);
 | 
						|
    }
 | 
						|
 | 
						|
    SECTION("Replace with RGBA image")
 | 
						|
    {
 | 
						|
        il.RemoveAll();
 | 
						|
        int idx1 = il.Add(bmpRGB);
 | 
						|
        CHECK(il.GetImageCount() == 1);
 | 
						|
        int idx2 = il.Add(bmpRGBWithMask);
 | 
						|
        CHECK(il.GetImageCount() == 2);
 | 
						|
 | 
						|
        il.Replace(idx1, bmpRGBA);
 | 
						|
        il.Replace(idx2, bmpRGBAWithMask);
 | 
						|
 | 
						|
        wxBitmap bmp1 = il.GetBitmap(idx1);
 | 
						|
        CHECK(bmp1.HasAlpha() == false);
 | 
						|
        CHECK(bmp1.GetMask() != NULL);
 | 
						|
        CHECK(bmp1.GetWidth() == 32);
 | 
						|
        CHECK(bmp1.GetHeight() == 32);
 | 
						|
 | 
						|
        wxBitmap bmp2 = il.GetBitmap(idx2);
 | 
						|
        CHECK(bmp2.HasAlpha() == false);
 | 
						|
        CHECK(bmp2.GetMask() != NULL);
 | 
						|
        CHECK(bmp2.GetWidth() == 32);
 | 
						|
        CHECK(bmp2.GetHeight() == 32);
 | 
						|
    }
 | 
						|
 | 
						|
    SECTION("Add images with incompatible sizes")
 | 
						|
    {
 | 
						|
        il.RemoveAll();
 | 
						|
        wxSize sz = il.GetSize();
 | 
						|
 | 
						|
        wxBitmap bmpSmallerW(sz.GetWidth() / 2, sz.GetHeight(), 24);
 | 
						|
        {
 | 
						|
            wxMemoryDC mdc(bmpSmallerW);
 | 
						|
            mdc.SetBackground(*wxBLUE_BRUSH);
 | 
						|
            mdc.Clear();
 | 
						|
        }
 | 
						|
        REQUIRE(bmpSmallerW.IsOk());
 | 
						|
 | 
						|
        wxBitmap bmpSmallerH(sz.GetWidth(), sz.GetHeight() / 2, 24);
 | 
						|
        {
 | 
						|
            wxMemoryDC mdc(bmpSmallerH);
 | 
						|
            mdc.SetBackground(*wxBLUE_BRUSH);
 | 
						|
            mdc.Clear();
 | 
						|
        }
 | 
						|
        REQUIRE(bmpSmallerH.IsOk());
 | 
						|
 | 
						|
        wxBitmap bmpSmallerWH(sz.GetWidth() / 2, sz.GetHeight() / 2, 24);
 | 
						|
        {
 | 
						|
            wxMemoryDC mdc(bmpSmallerWH);
 | 
						|
            mdc.SetBackground(*wxBLUE_BRUSH);
 | 
						|
            mdc.Clear();
 | 
						|
        }
 | 
						|
        REQUIRE(bmpSmallerWH.IsOk());
 | 
						|
 | 
						|
        wxBitmap bmpBiggerW(sz.GetWidth() * 3 / 2, sz.GetHeight(), 24);
 | 
						|
        {
 | 
						|
            wxMemoryDC mdc(bmpBiggerW);
 | 
						|
            mdc.SetBackground(*wxBLUE_BRUSH);
 | 
						|
            mdc.Clear();
 | 
						|
        }
 | 
						|
        REQUIRE(bmpBiggerW.IsOk());
 | 
						|
 | 
						|
        wxBitmap bmpBiggerW2x(sz.GetWidth() * 2, sz.GetHeight(), 24);
 | 
						|
        {
 | 
						|
            wxMemoryDC mdc(bmpBiggerW2x);
 | 
						|
            mdc.SetBackground(*wxBLUE_BRUSH);
 | 
						|
            mdc.Clear();
 | 
						|
        }
 | 
						|
        REQUIRE(bmpBiggerW2x.IsOk());
 | 
						|
 | 
						|
        wxBitmap bmpBiggerH(sz.GetWidth(), sz.GetHeight() * 3 / 2, 24);
 | 
						|
        {
 | 
						|
            wxMemoryDC mdc(bmpBiggerH);
 | 
						|
            mdc.SetBackground(*wxBLUE_BRUSH);
 | 
						|
            mdc.Clear();
 | 
						|
        }
 | 
						|
        REQUIRE(bmpBiggerH.IsOk());
 | 
						|
 | 
						|
        wxBitmap bmpBiggerH2x(sz.GetWidth(), sz.GetHeight() * 2, 24);
 | 
						|
        {
 | 
						|
            wxMemoryDC mdc(bmpBiggerH2x);
 | 
						|
            mdc.SetBackground(*wxBLUE_BRUSH);
 | 
						|
            mdc.Clear();
 | 
						|
        }
 | 
						|
        REQUIRE(bmpBiggerH2x.IsOk());
 | 
						|
 | 
						|
        wxBitmap bmpBiggerWH(sz.GetWidth() * 3 / 2, sz.GetHeight() * 3 / 2, 24);
 | 
						|
        {
 | 
						|
            wxMemoryDC mdc(bmpBiggerWH);
 | 
						|
            mdc.SetBackground(*wxBLUE_BRUSH);
 | 
						|
            mdc.Clear();
 | 
						|
        }
 | 
						|
        REQUIRE(bmpBiggerWH.IsOk());
 | 
						|
 | 
						|
        wxBitmap bmpBiggerWH2x(sz.GetWidth() * 2, sz.GetHeight() * 2, 24);
 | 
						|
        {
 | 
						|
            wxMemoryDC mdc(bmpBiggerWH2x);
 | 
						|
            mdc.SetBackground(*wxBLUE_BRUSH);
 | 
						|
            mdc.Clear();
 | 
						|
        }
 | 
						|
        REQUIRE(bmpBiggerWH2x.IsOk());
 | 
						|
 | 
						|
        // Adding
 | 
						|
        int cnt = il.GetImageCount();
 | 
						|
        int idx = il.Add(bmpSmallerW);
 | 
						|
        CHECK(idx == -1);
 | 
						|
        CHECK(il.GetImageCount() == cnt);
 | 
						|
 | 
						|
        cnt = il.GetImageCount();
 | 
						|
        idx = il.Add(bmpSmallerH);
 | 
						|
        CHECK(idx >= 0);
 | 
						|
        CHECK(il.GetImageCount() == cnt + 1);
 | 
						|
        wxBitmap bmp = il.GetBitmap(idx);
 | 
						|
        CHECK(bmp.GetWidth() == sz.GetWidth());
 | 
						|
        CHECK(bmp.GetHeight() == sz.GetHeight());
 | 
						|
 | 
						|
        cnt = il.GetImageCount();
 | 
						|
        idx = il.Add(bmpSmallerWH);
 | 
						|
        CHECK(idx == -1);
 | 
						|
        CHECK(il.GetImageCount() == cnt);
 | 
						|
 | 
						|
        cnt = il.GetImageCount();
 | 
						|
        idx = il.Add(bmpBiggerW);
 | 
						|
        CHECK(idx >= 0);
 | 
						|
        CHECK(il.GetImageCount() == cnt + 1);
 | 
						|
        bmp = il.GetBitmap(idx);
 | 
						|
        CHECK(bmp.GetWidth() == sz.GetWidth());
 | 
						|
        CHECK(bmp.GetHeight() == sz.GetHeight());
 | 
						|
 | 
						|
        cnt = il.GetImageCount();
 | 
						|
        idx = il.Add(bmpBiggerW2x);
 | 
						|
        CHECK(idx >= 0);
 | 
						|
        CHECK(il.GetImageCount() == cnt + 2);
 | 
						|
        bmp = il.GetBitmap(idx);
 | 
						|
        CHECK(bmp.GetWidth() == sz.GetWidth());
 | 
						|
        CHECK(bmp.GetHeight() == sz.GetHeight());
 | 
						|
 | 
						|
        cnt = il.GetImageCount();
 | 
						|
        idx = il.Add(bmpBiggerH);
 | 
						|
        CHECK(idx >= 0);
 | 
						|
        CHECK(il.GetImageCount() == cnt + 1);
 | 
						|
        bmp = il.GetBitmap(idx);
 | 
						|
        CHECK(bmp.GetWidth() == sz.GetWidth());
 | 
						|
        CHECK(bmp.GetHeight() == sz.GetHeight());
 | 
						|
 | 
						|
        cnt = il.GetImageCount();
 | 
						|
        idx = il.Add(bmpBiggerH2x);
 | 
						|
        CHECK(idx >= 0);
 | 
						|
        CHECK(il.GetImageCount() == cnt + 1);
 | 
						|
        bmp = il.GetBitmap(idx);
 | 
						|
        CHECK(bmp.GetWidth() == sz.GetWidth());
 | 
						|
        CHECK(bmp.GetHeight() == sz.GetHeight());
 | 
						|
 | 
						|
        cnt = il.GetImageCount();
 | 
						|
        idx = il.Add(bmpBiggerWH);
 | 
						|
        CHECK(idx >= 0);
 | 
						|
        CHECK(il.GetImageCount() == cnt + 1);
 | 
						|
        bmp = il.GetBitmap(idx);
 | 
						|
        CHECK(bmp.GetWidth() == sz.GetWidth());
 | 
						|
        CHECK(bmp.GetHeight() == sz.GetHeight());
 | 
						|
 | 
						|
        cnt = il.GetImageCount();
 | 
						|
        idx = il.Add(bmpBiggerWH2x);
 | 
						|
        CHECK(idx >= 0);
 | 
						|
        CHECK(il.GetImageCount() == cnt + 2);
 | 
						|
        bmp = il.GetBitmap(idx);
 | 
						|
        CHECK(bmp.GetWidth() == sz.GetWidth());
 | 
						|
        CHECK(bmp.GetHeight() == sz.GetHeight());
 | 
						|
 | 
						|
        // Replacing
 | 
						|
        il.RemoveAll();
 | 
						|
 | 
						|
        cnt = il.GetImageCount();
 | 
						|
        bool ok = il.Replace(0, bmpRGBA);
 | 
						|
        CHECK(ok == false);
 | 
						|
        CHECK(il.GetImageCount() == cnt);
 | 
						|
 | 
						|
        // List with 1 image
 | 
						|
        idx = il.Add(bmpRGB);
 | 
						|
        CHECK(idx >= 0);
 | 
						|
 | 
						|
        cnt = il.GetImageCount();
 | 
						|
        ok = il.Replace(0, bmpRGBA);
 | 
						|
        CHECK(ok == true);
 | 
						|
        CHECK(il.GetImageCount() == cnt);
 | 
						|
        bmp = il.GetBitmap(0);
 | 
						|
        CHECK(bmp.GetWidth() == sz.GetWidth());
 | 
						|
        CHECK(bmp.GetHeight() == sz.GetHeight());
 | 
						|
 | 
						|
        cnt = il.GetImageCount();
 | 
						|
        ok = il.Replace(0, bmpSmallerW);
 | 
						|
        CHECK(ok == true);
 | 
						|
        CHECK(il.GetImageCount() == cnt);
 | 
						|
        bmp = il.GetBitmap(0);
 | 
						|
        CHECK(bmp.GetWidth() == sz.GetWidth());
 | 
						|
        CHECK(bmp.GetHeight() == sz.GetHeight());
 | 
						|
 | 
						|
        cnt = il.GetImageCount();
 | 
						|
        ok = il.Replace(0, bmpSmallerH);
 | 
						|
        CHECK(ok == true);
 | 
						|
        CHECK(il.GetImageCount() == cnt);
 | 
						|
        bmp = il.GetBitmap(0);
 | 
						|
        CHECK(bmp.GetWidth() == sz.GetWidth());
 | 
						|
        CHECK(bmp.GetHeight() == sz.GetHeight());
 | 
						|
 | 
						|
        cnt = il.GetImageCount();
 | 
						|
        ok = il.Replace(0, bmpSmallerWH);
 | 
						|
        CHECK(ok == true);
 | 
						|
        CHECK(il.GetImageCount() == cnt);
 | 
						|
        bmp = il.GetBitmap(0);
 | 
						|
        CHECK(bmp.GetWidth() == sz.GetWidth());
 | 
						|
        CHECK(bmp.GetHeight() == sz.GetHeight());
 | 
						|
 | 
						|
        cnt = il.GetImageCount();
 | 
						|
        ok = il.Replace(0, bmpBiggerW);
 | 
						|
        CHECK(ok == true);
 | 
						|
        CHECK(il.GetImageCount() == cnt);
 | 
						|
        bmp = il.GetBitmap(0);
 | 
						|
        CHECK(bmp.GetWidth() == sz.GetWidth());
 | 
						|
        CHECK(bmp.GetHeight() == sz.GetHeight());
 | 
						|
 | 
						|
        cnt = il.GetImageCount();
 | 
						|
        ok = il.Replace(0, bmpBiggerW2x);
 | 
						|
        CHECK(ok == true);
 | 
						|
        CHECK(il.GetImageCount() == cnt);
 | 
						|
        bmp = il.GetBitmap(0);
 | 
						|
        CHECK(bmp.GetWidth() == sz.GetWidth());
 | 
						|
        CHECK(bmp.GetHeight() == sz.GetHeight());
 | 
						|
 | 
						|
        cnt = il.GetImageCount();
 | 
						|
        ok = il.Replace(0, bmpBiggerH);
 | 
						|
        CHECK(ok == true);
 | 
						|
        CHECK(il.GetImageCount() == cnt);
 | 
						|
        bmp = il.GetBitmap(0);
 | 
						|
        CHECK(bmp.GetWidth() == sz.GetWidth());
 | 
						|
        CHECK(bmp.GetHeight() == sz.GetHeight());
 | 
						|
 | 
						|
        cnt = il.GetImageCount();
 | 
						|
        ok = il.Replace(0, bmpBiggerH2x);
 | 
						|
        CHECK(ok == true);
 | 
						|
        CHECK(il.GetImageCount() == cnt);
 | 
						|
        bmp = il.GetBitmap(0);
 | 
						|
        CHECK(bmp.GetWidth() == sz.GetWidth());
 | 
						|
        CHECK(bmp.GetHeight() == sz.GetHeight());
 | 
						|
 | 
						|
        cnt = il.GetImageCount();
 | 
						|
        ok = il.Replace(0, bmpBiggerWH);
 | 
						|
        CHECK(ok == true);
 | 
						|
        CHECK(il.GetImageCount() == cnt);
 | 
						|
        bmp = il.GetBitmap(0);
 | 
						|
        CHECK(bmp.GetWidth() == sz.GetWidth());
 | 
						|
        CHECK(bmp.GetHeight() == sz.GetHeight());
 | 
						|
 | 
						|
        cnt = il.GetImageCount();
 | 
						|
        ok = il.Replace(0, bmpBiggerWH2x);
 | 
						|
        CHECK(ok == true);
 | 
						|
        CHECK(il.GetImageCount() == cnt);
 | 
						|
        bmp = il.GetBitmap(0);
 | 
						|
        CHECK(bmp.GetWidth() == sz.GetWidth());
 | 
						|
        CHECK(bmp.GetHeight() == sz.GetHeight());
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
TEST_CASE("ImageList:NoMask", "[imagelist][nomask]")
 | 
						|
{
 | 
						|
    wxInitAllImageHandlers();
 | 
						|
 | 
						|
    wxBitmap bmpRGB(32, 32, 24);
 | 
						|
    {
 | 
						|
        wxMemoryDC mdc(bmpRGB);
 | 
						|
        mdc.SetBackground(*wxBLUE_BRUSH);
 | 
						|
        mdc.Clear();
 | 
						|
        mdc.SetBrush(*wxRED_BRUSH);
 | 
						|
        mdc.DrawRectangle(4, 4, 24, 24);
 | 
						|
    }
 | 
						|
    REQUIRE(bmpRGB.IsOk());
 | 
						|
 | 
						|
    wxBitmap bmpRGBA;
 | 
						|
    bmpRGBA.LoadFile("image/wx.png", wxBITMAP_TYPE_PNG);
 | 
						|
    REQUIRE(bmpRGBA.IsOk());
 | 
						|
 | 
						|
    wxBitmap bmpMask(32, 32, 1);
 | 
						|
    {
 | 
						|
        wxMemoryDC mdc(bmpMask);
 | 
						|
#if wxUSE_GRAPHICS_CONTEXT
 | 
						|
        wxGraphicsContext* gc = mdc.GetGraphicsContext();
 | 
						|
        if ( gc )
 | 
						|
            gc->SetAntialiasMode(wxANTIALIAS_NONE);
 | 
						|
#endif //wxUSE_GRAPHICS_CONTEXT
 | 
						|
        mdc.SetBackground(*wxBLACK_BRUSH);
 | 
						|
        mdc.Clear();
 | 
						|
        mdc.SetBrush(*wxWHITE_BRUSH);
 | 
						|
        mdc.DrawRectangle(0, 0, 16, 32);
 | 
						|
    }
 | 
						|
 | 
						|
    wxBitmap bmpRGBWithMask(bmpRGB);
 | 
						|
    bmpRGBWithMask.SetMask(new wxMask(bmpMask));
 | 
						|
    REQUIRE(bmpRGBWithMask.IsOk());
 | 
						|
 | 
						|
    wxBitmap bmpRGBAWithMask(bmpRGBA);
 | 
						|
    bmpRGBAWithMask.SetMask(new wxMask(bmpMask));
 | 
						|
    REQUIRE(bmpRGBAWithMask.IsOk());
 | 
						|
 | 
						|
    wxIcon ico;
 | 
						|
    ico.LoadFile("image/wx.ico", wxBITMAP_TYPE_ICO);
 | 
						|
    REQUIRE(ico.IsOk());
 | 
						|
 | 
						|
    REQUIRE(bmpRGB.HasAlpha() == false);
 | 
						|
    REQUIRE(bmpRGB.GetMask() == NULL);
 | 
						|
 | 
						|
    REQUIRE(bmpRGBWithMask.HasAlpha() == false);
 | 
						|
    REQUIRE(bmpRGBWithMask.GetMask() != NULL);
 | 
						|
 | 
						|
    REQUIRE(bmpRGBA.HasAlpha() == true);
 | 
						|
    REQUIRE(bmpRGBA.GetMask() == NULL);
 | 
						|
 | 
						|
    REQUIRE(bmpRGBAWithMask.HasAlpha() == true);
 | 
						|
    REQUIRE(bmpRGBAWithMask.GetMask() != NULL);
 | 
						|
 | 
						|
    wxImageList il(32, 32, false);
 | 
						|
 | 
						|
    SECTION("Add RGB image to list")
 | 
						|
    {
 | 
						|
        il.RemoveAll();
 | 
						|
        int idx = il.Add(bmpRGB);
 | 
						|
        CHECK(il.GetImageCount() == 1);
 | 
						|
        wxBitmap bmp1 = il.GetBitmap(idx);
 | 
						|
        CHECK(bmp1.HasAlpha() == false);
 | 
						|
        CHECK(bmp1.GetMask() == NULL);
 | 
						|
        CHECK(bmp1.GetWidth() == 32);
 | 
						|
        CHECK(bmp1.GetHeight() == 32);
 | 
						|
 | 
						|
        idx = il.Add(bmpRGBWithMask);
 | 
						|
        CHECK(il.GetImageCount() == 2);
 | 
						|
        wxBitmap bmp2 = il.GetBitmap(idx);
 | 
						|
        CHECK(bmp2.HasAlpha() == true);
 | 
						|
        CHECK(bmp2.GetMask() == NULL);
 | 
						|
        CHECK(bmp2.GetWidth() == 32);
 | 
						|
        CHECK(bmp2.GetHeight() == 32);
 | 
						|
 | 
						|
        idx = il.Add(bmpRGB, *wxRED);
 | 
						|
        CHECK(il.GetImageCount() == 3);
 | 
						|
        wxBitmap bmp3 = il.GetBitmap(idx);
 | 
						|
        CHECK(bmp3.HasAlpha() == true);
 | 
						|
        CHECK(bmp3.GetMask() == NULL);
 | 
						|
        CHECK(bmp3.GetWidth() == 32);
 | 
						|
        CHECK(bmp3.GetHeight() == 32);
 | 
						|
    }
 | 
						|
 | 
						|
    SECTION("Add RGBA image to list")
 | 
						|
    {
 | 
						|
        il.RemoveAll();
 | 
						|
        int idx = il.Add(bmpRGBA);
 | 
						|
        CHECK(il.GetImageCount() == 1);
 | 
						|
        wxBitmap bmp1 = il.GetBitmap(idx);
 | 
						|
        CHECK(bmp1.HasAlpha() == true);
 | 
						|
        CHECK(bmp1.GetMask() == NULL);
 | 
						|
        CHECK(bmp1.GetWidth() == 32);
 | 
						|
        CHECK(bmp1.GetHeight() == 32);
 | 
						|
 | 
						|
        idx = il.Add(bmpRGBAWithMask);
 | 
						|
        CHECK(il.GetImageCount() == 2);
 | 
						|
        wxBitmap bmp2 = il.GetBitmap(idx);
 | 
						|
        CHECK(bmp2.HasAlpha() == true);
 | 
						|
        CHECK(bmp2.GetMask() == NULL);
 | 
						|
        CHECK(bmp2.GetWidth() == 32);
 | 
						|
        CHECK(bmp2.GetHeight() == 32);
 | 
						|
 | 
						|
        idx = il.Add(bmpRGBA, *wxRED);
 | 
						|
        CHECK(il.GetImageCount() == 3);
 | 
						|
        wxBitmap bmp3 = il.GetBitmap(idx);
 | 
						|
        CHECK(bmp3.HasAlpha() == true);
 | 
						|
        CHECK(bmp3.GetMask() == NULL);
 | 
						|
        CHECK(bmp3.GetWidth() == 32);
 | 
						|
        CHECK(bmp3.GetHeight() == 32);
 | 
						|
    }
 | 
						|
 | 
						|
    SECTION("Add icon to list")
 | 
						|
    {
 | 
						|
        il.RemoveAll();
 | 
						|
        int idx = il.Add(ico);
 | 
						|
        CHECK(il.GetImageCount() == 1);
 | 
						|
        wxIcon icon1 = il.GetIcon(idx);
 | 
						|
        CHECK(icon1.GetWidth() == 32);
 | 
						|
        CHECK(icon1.GetHeight() == 32);
 | 
						|
    }
 | 
						|
 | 
						|
    SECTION("Replace with RGB image")
 | 
						|
    {
 | 
						|
        il.RemoveAll();
 | 
						|
        int idx1 = il.Add(bmpRGBA);
 | 
						|
        CHECK(il.GetImageCount() == 1);
 | 
						|
        int idx2 = il.Add(bmpRGBAWithMask);
 | 
						|
        CHECK(il.GetImageCount() == 2);
 | 
						|
 | 
						|
        il.Replace(idx1, bmpRGB);
 | 
						|
        il.Replace(idx2, bmpRGBWithMask);
 | 
						|
 | 
						|
        wxBitmap bmp1 = il.GetBitmap(idx1);
 | 
						|
        CHECK(bmp1.HasAlpha() == false);
 | 
						|
        CHECK(bmp1.GetMask() == NULL);
 | 
						|
        CHECK(bmp1.GetWidth() == 32);
 | 
						|
        CHECK(bmp1.GetHeight() == 32);
 | 
						|
 | 
						|
        wxBitmap bmp2 = il.GetBitmap(idx2);
 | 
						|
        CHECK(bmp2.HasAlpha() == true);
 | 
						|
        CHECK(bmp2.GetMask() == NULL);
 | 
						|
        CHECK(bmp2.GetWidth() == 32);
 | 
						|
        CHECK(bmp2.GetHeight() == 32);
 | 
						|
    }
 | 
						|
 | 
						|
    SECTION("Replace with RGBA image")
 | 
						|
    {
 | 
						|
        il.RemoveAll();
 | 
						|
        int idx1 = il.Add(bmpRGB);
 | 
						|
        CHECK(il.GetImageCount() == 1);
 | 
						|
        int idx2 = il.Add(bmpRGBWithMask);
 | 
						|
        CHECK(il.GetImageCount() == 2);
 | 
						|
 | 
						|
        il.Replace(idx1, bmpRGBA);
 | 
						|
        il.Replace(idx2, bmpRGBAWithMask);
 | 
						|
 | 
						|
        wxBitmap bmp1 = il.GetBitmap(idx1);
 | 
						|
        CHECK(bmp1.HasAlpha() == true);
 | 
						|
        CHECK(bmp1.GetMask() == NULL);
 | 
						|
        CHECK(bmp1.GetWidth() == 32);
 | 
						|
        CHECK(bmp1.GetHeight() == 32);
 | 
						|
 | 
						|
        wxBitmap bmp2 = il.GetBitmap(idx2);
 | 
						|
        CHECK(bmp2.HasAlpha() == true);
 | 
						|
        CHECK(bmp2.GetMask() == NULL);
 | 
						|
        CHECK(bmp2.GetWidth() == 32);
 | 
						|
        CHECK(bmp2.GetHeight() == 32);
 | 
						|
    }
 | 
						|
}
 |