mirror of
https://github.com/thorvg/thorvg.git
synced 2025-06-19 14:31:39 +00:00

Since the color space is set at the time of specifying the target buffer of the canvas, there is no way to know the color space when the picture is loaded. So, check the color space applied to SwCanvas at the time of reload() and change the color space. There is an issue of BGR color space support for each loader. The external_jpg loader resets the TJPF color space and calls read() to get a new buffer. In the case of external_png, we need to change the color value directly because it have to start over from begin_read_*. This solution can affect performance as much as it access again image buffer that have already been `read()` done. However, this only happens once.
59 lines
2.1 KiB
C++
59 lines
2.1 KiB
C++
/*
|
|
* Copyright (c) 2020 - 2023 the ThorVG project. All rights reserved.
|
|
|
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
* of this software and associated documentation files (the "Software"), to deal
|
|
* in the Software without restriction, including without limitation the rights
|
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
* copies of the Software, and to permit persons to whom the Software is
|
|
* furnished to do so, subject to the following conditions:
|
|
|
|
* The above copyright notice and this permission notice shall be included in all
|
|
* copies or substantial portions of the Software.
|
|
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
* SOFTWARE.
|
|
*/
|
|
|
|
#ifndef _TVG_LOAD_MODULE_H_
|
|
#define _TVG_LOAD_MODULE_H_
|
|
|
|
#include "tvgRender.h"
|
|
|
|
namespace tvg
|
|
{
|
|
|
|
class LoadModule
|
|
{
|
|
public:
|
|
//default view box, if any.
|
|
float vx = 0;
|
|
float vy = 0;
|
|
float vw = 0;
|
|
float vh = 0;
|
|
float w = 0, h = 0; //default image size
|
|
uint32_t colorSpace = SwCanvas::ARGB8888;
|
|
|
|
virtual ~LoadModule() {}
|
|
|
|
virtual bool open(const string& path) { return false; }
|
|
virtual bool open(const char* data, uint32_t size, bool copy) { return false; }
|
|
virtual bool open(const uint32_t* data, uint32_t w, uint32_t h, bool copy) { return false; }
|
|
|
|
//Override this if the vector-format has own resizing policy.
|
|
virtual bool resize(Paint* paint, float w, float h) { return false; }
|
|
|
|
virtual bool read() = 0;
|
|
virtual bool close() = 0;
|
|
virtual unique_ptr<Surface> bitmap(uint32_t colorSpace) { return nullptr; }
|
|
virtual unique_ptr<Paint> paint() { return nullptr; }
|
|
};
|
|
|
|
}
|
|
|
|
#endif //_TVG_LOAD_MODULE_H_
|