cc02b3cece
This reverts commitb6d305e4f2
because silently discarding images using a different scale factor is simply too user-unfriendly: this can silently break the existing code, i.e. it can still compile perfectly and not give any errors during run-time but not show any images neither. Also revert most ofdc43d15cf7
(Add tests of storing HiDPI images in generic wxImageList (wxOSX, wxGTK3), 2021-04-05) as these tests don't pass any longer because the behaviour was intentionally changed. See #22189.
809 lines
23 KiB
C++
809 lines
23 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);
|
|
}
|
|
}
|
|
|
|
TEST_CASE("ImageList:NegativeTests", "[imagelist][negative]")
|
|
{
|
|
wxBitmap bmp(32, 32, 24);
|
|
{
|
|
wxMemoryDC mdc(bmp);
|
|
mdc.SetBackground(*wxBLUE_BRUSH);
|
|
mdc.Clear();
|
|
mdc.SetBrush(*wxRED_BRUSH);
|
|
mdc.DrawRectangle(4, 4, 24, 24);
|
|
}
|
|
REQUIRE(bmp.IsOk());
|
|
|
|
SECTION("Invalid size (negative)")
|
|
{
|
|
wxImageList il;
|
|
bool ok = il.Create(-1, -1);
|
|
CHECK_FALSE(ok);
|
|
#ifdef __WXDEBUG__
|
|
REQUIRE_THROWS(il.GetImageCount());
|
|
#else
|
|
CHECK(il.GetImageCount() == 0);
|
|
#endif
|
|
|
|
wxSize sz = il.GetSize();
|
|
CHECK(sz.x == 0);
|
|
CHECK(sz.y == 0);
|
|
|
|
int w = -1;
|
|
int h = -1;
|
|
#ifdef __WXDEBUG__
|
|
REQUIRE_THROWS(il.GetSize(0, w, h));
|
|
#else
|
|
ok = il.GetSize(0, w, h);
|
|
CHECK_FALSE(ok);
|
|
CHECK(w == 0);
|
|
CHECK(h == 0);
|
|
#endif
|
|
|
|
int idx = il.Add(bmp);
|
|
CHECK(idx == -1);
|
|
#ifdef __WXDEBUG__
|
|
REQUIRE_THROWS(il.GetImageCount());
|
|
#else
|
|
CHECK(il.GetImageCount() == 0);
|
|
#endif
|
|
}
|
|
|
|
SECTION("Invalid size (zero)")
|
|
{
|
|
wxImageList il;
|
|
bool ok = il.Create(0, 0);
|
|
CHECK_FALSE(ok);
|
|
#ifdef __WXDEBUG__
|
|
REQUIRE_THROWS(il.GetImageCount());
|
|
#else
|
|
CHECK(il.GetImageCount() == 0);
|
|
#endif
|
|
|
|
wxSize sz = il.GetSize();
|
|
CHECK(sz.x == 0);
|
|
CHECK(sz.y == 0);
|
|
|
|
int w = -1;
|
|
int h = -1;
|
|
#ifdef __WXDEBUG__
|
|
REQUIRE_THROWS(ok = il.GetSize(0, w, h));
|
|
#else
|
|
ok = il.GetSize(0, w, h);
|
|
CHECK_FALSE(ok);
|
|
CHECK(w == 0);
|
|
CHECK(h == 0);
|
|
#endif
|
|
|
|
int idx = il.Add(bmp);
|
|
CHECK(idx == -1);
|
|
#ifdef __WXDEBUG__
|
|
REQUIRE_THROWS(il.GetImageCount());
|
|
#else
|
|
CHECK(il.GetImageCount() == 0);
|
|
#endif
|
|
|
|
ok = il.Replace(0, bmp);
|
|
CHECK_FALSE(ok);
|
|
#ifdef __WXDEBUG__
|
|
REQUIRE_THROWS(il.GetImageCount());
|
|
#else
|
|
CHECK(il.GetImageCount() == 0);
|
|
#endif
|
|
}
|
|
|
|
SECTION("Invalid Get/Replace/Remove indices")
|
|
{
|
|
wxImageList il(32, 32, false);
|
|
CHECK(il.GetImageCount() == 0);
|
|
|
|
wxSize sz = il.GetSize();
|
|
CHECK(sz.x == 32);
|
|
CHECK(sz.y == 32);
|
|
|
|
int w = -1;
|
|
int h = -1;
|
|
bool ok = il.GetSize(0, w, h);
|
|
CHECK(ok == true);
|
|
CHECK(w == 32);
|
|
CHECK(h == 32);
|
|
|
|
int idx = il.Add(bmp);
|
|
CHECK(idx == 0);
|
|
CHECK(il.GetImageCount() == 1);
|
|
|
|
wxBitmap bmp2 = il.GetBitmap(-1);
|
|
CHECK_FALSE(bmp2.IsOk());
|
|
CHECK(il.GetImageCount() == 1);
|
|
|
|
wxBitmap bmp3 = il.GetBitmap(5);
|
|
CHECK_FALSE(bmp3.IsOk());
|
|
CHECK(il.GetImageCount() == 1);
|
|
|
|
wxIcon icon2 = il.GetIcon(-1);
|
|
CHECK_FALSE(icon2.IsOk());
|
|
CHECK(il.GetImageCount() == 1);
|
|
|
|
wxBitmap icon3 = il.GetIcon(5);
|
|
CHECK_FALSE(icon3.IsOk());
|
|
CHECK(il.GetImageCount() == 1);
|
|
|
|
ok = il.Replace(-1, bmp);
|
|
CHECK_FALSE(ok);
|
|
CHECK(il.GetImageCount() == 1);
|
|
|
|
ok = il.Replace(5, bmp);
|
|
CHECK_FALSE(ok);
|
|
CHECK(il.GetImageCount() == 1);
|
|
|
|
ok = il.Remove(-1);
|
|
CHECK_FALSE(ok);
|
|
CHECK(il.GetImageCount() == 1);
|
|
|
|
ok = il.Remove(5);
|
|
CHECK_FALSE(ok);
|
|
CHECK(il.GetImageCount() == 1);
|
|
}
|
|
}
|
|
|
|
// This test relies on logical pixels being different from physical ones.
|
|
#ifdef wxHAS_DPI_INDEPENDENT_PIXELS
|
|
|
|
TEST_CASE("ImageList:HiDPI", "[imagelist][hidpi]")
|
|
{
|
|
wxImage img1(8, 4);
|
|
img1.SetRGB(wxRect(0, 0, 8, 4), 0, 63, 127);
|
|
REQUIRE(img1.IsOk());
|
|
|
|
wxImage img2(16, 8);
|
|
img2.SetRGB(wxRect(0, 0, 16, 8), 255, 128, 64);
|
|
REQUIRE(img2.IsOk());
|
|
|
|
wxBitmap bmp1x(img1, -1, 1.0);
|
|
REQUIRE(bmp1x.IsOk());
|
|
CHECK(bmp1x.GetSize() == wxSize(8, 4));
|
|
CHECK(bmp1x.GetLogicalSize() == wxSize(8, 4));
|
|
CHECK_FALSE(bmp1x.HasAlpha());
|
|
CHECK(bmp1x.GetMask() == NULL);
|
|
|
|
wxBitmap bmp2x(img2, -1, 2.0);
|
|
REQUIRE(bmp2x.IsOk());
|
|
CHECK(bmp2x.GetSize() == wxSize(16, 8));
|
|
CHECK(bmp2x.GetLogicalSize() == wxSize(8, 4));
|
|
CHECK_FALSE(bmp2x.HasAlpha());
|
|
CHECK(bmp2x.GetMask() == NULL);
|
|
|
|
// Logical image size
|
|
wxImageList il(8, 4, false);
|
|
|
|
int idx = il.Add(bmp2x);
|
|
REQUIRE(idx == 0);
|
|
REQUIRE(il.GetImageCount() == 1);
|
|
|
|
idx = il.Add(bmp1x);
|
|
REQUIRE(idx == 1);
|
|
REQUIRE(il.GetImageCount() == 2);
|
|
|
|
wxBitmap bmp = il.GetBitmap(0);
|
|
REQUIRE(bmp.IsOk() == true);
|
|
CHECK(bmp.GetScaleFactor() == 2.0);
|
|
CHECK(bmp.GetSize() == wxSize(16, 8));
|
|
CHECK(bmp.GetLogicalSize() == wxSize(8, 4));
|
|
CHECK_FALSE(bmp.HasAlpha());
|
|
CHECK(bmp.GetMask() == NULL);
|
|
|
|
bmp = il.GetBitmap(1);
|
|
REQUIRE(bmp.IsOk() == true);
|
|
CHECK(bmp.GetScaleFactor() == 1.0);
|
|
CHECK(bmp.GetSize() == wxSize(8, 4));
|
|
CHECK(bmp.GetLogicalSize() == wxSize(8, 4));
|
|
CHECK_FALSE(bmp.HasAlpha());
|
|
CHECK(bmp.GetMask() == NULL);
|
|
}
|
|
#endif // wxHAS_DPI_INDEPENDENT_PIXELS
|