summaryrefslogtreecommitdiffstats
path: root/platform/windows/native_menu_windows.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'platform/windows/native_menu_windows.cpp')
-rw-r--r--platform/windows/native_menu_windows.cpp40
1 files changed, 24 insertions, 16 deletions
diff --git a/platform/windows/native_menu_windows.cpp b/platform/windows/native_menu_windows.cpp
index 40a08f87df..96bd422f03 100644
--- a/platform/windows/native_menu_windows.cpp
+++ b/platform/windows/native_menu_windows.cpp
@@ -35,6 +35,8 @@
#include "scene/resources/image_texture.h"
HBITMAP NativeMenuWindows::_make_bitmap(const Ref<Image> &p_img) const {
+ p_img->convert(Image::FORMAT_RGBA8);
+
Vector2i texture_size = p_img->get_size();
UINT image_size = texture_size.width * texture_size.height;
@@ -349,12 +351,14 @@ int NativeMenuWindows::add_icon_item(const RID &p_rid, const Ref<Texture2D> &p_i
item_data->checkable_type = CHECKABLE_TYPE_NONE;
item_data->max_states = 0;
item_data->state = 0;
- item_data->img = p_icon->get_image();
- item_data->img = item_data->img->duplicate();
- if (item_data->img->is_compressed()) {
- item_data->img->decompress();
+ if (p_icon.is_valid() && p_icon->get_width() > 0 && p_icon->get_height() > 0 && p_icon->get_image().is_valid()) {
+ item_data->img = p_icon->get_image();
+ item_data->img = item_data->img->duplicate();
+ if (item_data->img->is_compressed()) {
+ item_data->img->decompress();
+ }
+ item_data->bmp = _make_bitmap(item_data->img);
}
- item_data->bmp = _make_bitmap(item_data->img);
Char16String label = p_label.utf16();
MENUITEMINFOW item;
@@ -389,12 +393,14 @@ int NativeMenuWindows::add_icon_check_item(const RID &p_rid, const Ref<Texture2D
item_data->checkable_type = CHECKABLE_TYPE_CHECK_BOX;
item_data->max_states = 0;
item_data->state = 0;
- item_data->img = p_icon->get_image();
- item_data->img = item_data->img->duplicate();
- if (item_data->img->is_compressed()) {
- item_data->img->decompress();
+ if (p_icon.is_valid() && p_icon->get_width() > 0 && p_icon->get_height() > 0 && p_icon->get_image().is_valid()) {
+ item_data->img = p_icon->get_image();
+ item_data->img = item_data->img->duplicate();
+ if (item_data->img->is_compressed()) {
+ item_data->img->decompress();
+ }
+ item_data->bmp = _make_bitmap(item_data->img);
}
- item_data->bmp = _make_bitmap(item_data->img);
Char16String label = p_label.utf16();
MENUITEMINFOW item;
@@ -462,12 +468,14 @@ int NativeMenuWindows::add_icon_radio_check_item(const RID &p_rid, const Ref<Tex
item_data->checkable_type = CHECKABLE_TYPE_RADIO_BUTTON;
item_data->max_states = 0;
item_data->state = 0;
- item_data->img = p_icon->get_image();
- item_data->img = item_data->img->duplicate();
- if (item_data->img->is_compressed()) {
- item_data->img->decompress();
+ if (p_icon.is_valid() && p_icon->get_width() > 0 && p_icon->get_height() > 0 && p_icon->get_image().is_valid()) {
+ item_data->img = p_icon->get_image();
+ item_data->img = item_data->img->duplicate();
+ if (item_data->img->is_compressed()) {
+ item_data->img->decompress();
+ }
+ item_data->bmp = _make_bitmap(item_data->img);
}
- item_data->bmp = _make_bitmap(item_data->img);
Char16String label = p_label.utf16();
MENUITEMINFOW item;
@@ -1082,7 +1090,7 @@ void NativeMenuWindows::set_item_icon(const RID &p_rid, int p_idx, const Ref<Tex
if (item_data->bmp) {
DeleteObject(item_data->bmp);
}
- if (p_icon.is_valid()) {
+ if (p_icon.is_valid() && p_icon->get_width() > 0 && p_icon->get_height() > 0 && p_icon->get_image().is_valid()) {
item_data->img = p_icon->get_image();
item_data->img = item_data->img->duplicate();
if (item_data->img->is_compressed()) {