#include "libcef_dll/cpptoc/image_cpptoc.h"
#include "libcef_dll/cpptoc/binary_value_cpptoc.h"
#include "libcef_dll/shutdown_checker.h"
CEF_EXPORT cef_image_t* cef_image_create() {
shutdown_checker::AssertNotShutdown();
CefRefPtr<CefImage> _retval = CefImage::CreateImage();
return CefImageCppToC::Wrap(_retval);
}
namespace {
int CEF_CALLBACK image_is_empty(struct _cef_image_t* self) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return 0;
bool _retval = CefImageCppToC::Get(self)->IsEmpty();
return _retval;
}
int CEF_CALLBACK image_is_same(struct _cef_image_t* self,
struct _cef_image_t* that) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return 0;
DCHECK(that);
if (!that)
return 0;
bool _retval =
CefImageCppToC::Get(self)->IsSame(CefImageCppToC::Unwrap(that));
return _retval;
}
int CEF_CALLBACK image_add_bitmap(struct _cef_image_t* self,
float scale_factor,
int pixel_width,
int pixel_height,
cef_color_type_t color_type,
cef_alpha_type_t alpha_type,
const void* pixel_data,
size_t pixel_data_size) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return 0;
DCHECK(pixel_data);
if (!pixel_data)
return 0;
bool _retval = CefImageCppToC::Get(self)->AddBitmap(
scale_factor, pixel_width, pixel_height, color_type, alpha_type,
pixel_data, pixel_data_size);
return _retval;
}
int CEF_CALLBACK image_add_png(struct _cef_image_t* self,
float scale_factor,
const void* png_data,
size_t png_data_size) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return 0;
DCHECK(png_data);
if (!png_data)
return 0;
bool _retval =
CefImageCppToC::Get(self)->AddPNG(scale_factor, png_data, png_data_size);
return _retval;
}
int CEF_CALLBACK image_add_jpeg(struct _cef_image_t* self,
float scale_factor,
const void* jpeg_data,
size_t jpeg_data_size) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return 0;
DCHECK(jpeg_data);
if (!jpeg_data)
return 0;
bool _retval = CefImageCppToC::Get(self)->AddJPEG(scale_factor, jpeg_data,
jpeg_data_size);
return _retval;
}
size_t CEF_CALLBACK image_get_width(struct _cef_image_t* self) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return 0;
size_t _retval = CefImageCppToC::Get(self)->GetWidth();
return _retval;
}
size_t CEF_CALLBACK image_get_height(struct _cef_image_t* self) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return 0;
size_t _retval = CefImageCppToC::Get(self)->GetHeight();
return _retval;
}
int CEF_CALLBACK image_has_representation(struct _cef_image_t* self,
float scale_factor) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return 0;
bool _retval = CefImageCppToC::Get(self)->HasRepresentation(scale_factor);
return _retval;
}
int CEF_CALLBACK image_remove_representation(struct _cef_image_t* self,
float scale_factor) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return 0;
bool _retval = CefImageCppToC::Get(self)->RemoveRepresentation(scale_factor);
return _retval;
}
int CEF_CALLBACK image_get_representation_info(struct _cef_image_t* self,
float scale_factor,
float* actual_scale_factor,
int* pixel_width,
int* pixel_height) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return 0;
DCHECK(actual_scale_factor);
if (!actual_scale_factor)
return 0;
DCHECK(pixel_width);
if (!pixel_width)
return 0;
DCHECK(pixel_height);
if (!pixel_height)
return 0;
float actual_scale_factorVal = actual_scale_factor ? *actual_scale_factor : 0;
int pixel_widthVal = pixel_width ? *pixel_width : 0;
int pixel_heightVal = pixel_height ? *pixel_height : 0;
bool _retval = CefImageCppToC::Get(self)->GetRepresentationInfo(
scale_factor, actual_scale_factorVal, pixel_widthVal, pixel_heightVal);
if (actual_scale_factor)
*actual_scale_factor = actual_scale_factorVal;
if (pixel_width)
*pixel_width = pixel_widthVal;
if (pixel_height)
*pixel_height = pixel_heightVal;
return _retval;
}
struct _cef_binary_value_t* CEF_CALLBACK
image_get_as_bitmap(struct _cef_image_t* self,
float scale_factor,
cef_color_type_t color_type,
cef_alpha_type_t alpha_type,
int* pixel_width,
int* pixel_height) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return NULL;
DCHECK(pixel_width);
if (!pixel_width)
return NULL;
DCHECK(pixel_height);
if (!pixel_height)
return NULL;
int pixel_widthVal = pixel_width ? *pixel_width : 0;
int pixel_heightVal = pixel_height ? *pixel_height : 0;
CefRefPtr<CefBinaryValue> _retval = CefImageCppToC::Get(self)->GetAsBitmap(
scale_factor, color_type, alpha_type, pixel_widthVal, pixel_heightVal);
if (pixel_width)
*pixel_width = pixel_widthVal;
if (pixel_height)
*pixel_height = pixel_heightVal;
return CefBinaryValueCppToC::Wrap(_retval);
}
struct _cef_binary_value_t* CEF_CALLBACK
image_get_as_png(struct _cef_image_t* self,
float scale_factor,
int with_transparency,
int* pixel_width,
int* pixel_height) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return NULL;
DCHECK(pixel_width);
if (!pixel_width)
return NULL;
DCHECK(pixel_height);
if (!pixel_height)
return NULL;
int pixel_widthVal = pixel_width ? *pixel_width : 0;
int pixel_heightVal = pixel_height ? *pixel_height : 0;
CefRefPtr<CefBinaryValue> _retval = CefImageCppToC::Get(self)->GetAsPNG(
scale_factor, with_transparency ? true : false, pixel_widthVal,
pixel_heightVal);
if (pixel_width)
*pixel_width = pixel_widthVal;
if (pixel_height)
*pixel_height = pixel_heightVal;
return CefBinaryValueCppToC::Wrap(_retval);
}
struct _cef_binary_value_t* CEF_CALLBACK
image_get_as_jpeg(struct _cef_image_t* self,
float scale_factor,
int quality,
int* pixel_width,
int* pixel_height) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return NULL;
DCHECK(pixel_width);
if (!pixel_width)
return NULL;
DCHECK(pixel_height);
if (!pixel_height)
return NULL;
int pixel_widthVal = pixel_width ? *pixel_width : 0;
int pixel_heightVal = pixel_height ? *pixel_height : 0;
CefRefPtr<CefBinaryValue> _retval = CefImageCppToC::Get(self)->GetAsJPEG(
scale_factor, quality, pixel_widthVal, pixel_heightVal);
if (pixel_width)
*pixel_width = pixel_widthVal;
if (pixel_height)
*pixel_height = pixel_heightVal;
return CefBinaryValueCppToC::Wrap(_retval);
}
}
CefImageCppToC::CefImageCppToC() {
GetStruct()->is_empty = image_is_empty;
GetStruct()->is_same = image_is_same;
GetStruct()->add_bitmap = image_add_bitmap;
GetStruct()->add_png = image_add_png;
GetStruct()->add_jpeg = image_add_jpeg;
GetStruct()->get_width = image_get_width;
GetStruct()->get_height = image_get_height;
GetStruct()->has_representation = image_has_representation;
GetStruct()->remove_representation = image_remove_representation;
GetStruct()->get_representation_info = image_get_representation_info;
GetStruct()->get_as_bitmap = image_get_as_bitmap;
GetStruct()->get_as_png = image_get_as_png;
GetStruct()->get_as_jpeg = image_get_as_jpeg;
}
CefImageCppToC::~CefImageCppToC() {
shutdown_checker::AssertNotShutdown();
}
template <>
CefRefPtr<CefImage>
CefCppToCRefCounted<CefImageCppToC, CefImage, cef_image_t>::UnwrapDerived(
CefWrapperType type,
cef_image_t* s) {
NOTREACHED() << "Unexpected class type: " << type;
return nullptr;
}
template <>
CefWrapperType
CefCppToCRefCounted<CefImageCppToC, CefImage, cef_image_t>::kWrapperType =
WT_IMAGE;