mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-02-10 18:05:41 +08:00
Add new blender and use in by default
This commit is contained in:
@ -170,6 +170,52 @@ namespace agg
|
||||
}
|
||||
};
|
||||
|
||||
//=============================================================blender_rgba_src_over
|
||||
template<class ColorT, class Order> struct blender_rgba_unpre
|
||||
{
|
||||
typedef ColorT color_type;
|
||||
typedef Order order_type;
|
||||
typedef typename color_type::value_type value_type;
|
||||
typedef typename color_type::calc_type calc_type;
|
||||
enum base_scale_e
|
||||
{
|
||||
base_shift = color_type::base_shift,
|
||||
base_mask = color_type::base_mask
|
||||
};
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
static AGG_INLINE void blend_pix(value_type* p,
|
||||
unsigned cr, unsigned cg, unsigned cb,
|
||||
unsigned alpha,
|
||||
unsigned cover=0)
|
||||
{
|
||||
calc_type r = p[Order::R];
|
||||
calc_type g = p[Order::G];
|
||||
calc_type b = p[Order::B];
|
||||
calc_type a = p[Order::A];
|
||||
|
||||
p[Order::A] = (value_type)((alpha + a) - ((alpha * a + base_mask) >> base_shift));
|
||||
p[Order::R] = (value_type)((alpha * cr + a * r - ((a * r * alpha + base_mask) >> base_shift)) / p[Order::A]);
|
||||
p[Order::G] = (value_type)((alpha * cg + a * r - ((a * g * alpha + base_mask) >> base_shift)) / p[Order::A]);
|
||||
p[Order::B] = (value_type)((alpha * cb + a * r - ((a * b * alpha + base_mask) >> base_shift)) / p[Order::A]);
|
||||
}
|
||||
|
||||
static AGG_INLINE void blend_pix_subpix(value_type* p,
|
||||
unsigned cr, unsigned cg, unsigned cb,
|
||||
unsigned* covers,
|
||||
unsigned cover=0)
|
||||
{
|
||||
calc_type r = p[Order::R];
|
||||
calc_type g = p[Order::G];
|
||||
calc_type b = p[Order::B];
|
||||
//calc_type a = p[Order::A];
|
||||
p[Order::R] = (value_type)(((cr - r) * covers[Order::R] + (r << base_shift)) >> base_shift);
|
||||
p[Order::G] = (value_type)(((cg - g) * covers[Order::G] + (g << base_shift)) >> base_shift);
|
||||
p[Order::B] = (value_type)(((cb - b) * covers[Order::B] + (b << base_shift)) >> base_shift);
|
||||
//p[Order::A] = (value_type)((alpha + a) - ((alpha * a + base_mask) >> base_shift));
|
||||
}
|
||||
};
|
||||
|
||||
//=========================================================blender_rgba_pre
|
||||
template<class ColorT, class Order> struct blender_rgba_pre
|
||||
{
|
||||
|
||||
@ -11,10 +11,11 @@ namespace agg
|
||||
namespace svg
|
||||
{
|
||||
//---------------------------------------------------------------------------
|
||||
template<class Blender=agg::blender_rgba<color_type, component_order>>
|
||||
class frame_buffer_rgba
|
||||
{
|
||||
public:
|
||||
typedef agg::blender_rgba<color_type, component_order> blender_type;
|
||||
typedef Blender blender_type;
|
||||
typedef agg::pixfmt_alpha_blend_rgba<blender_type, agg::rendering_buffer, pixel_type> pixfmt_type;
|
||||
typedef agg::renderer_base<pixfmt_type> renderer_base_type;
|
||||
typedef agg::renderer_scanline_aa_solid<renderer_base_type> renderer_solid_type;
|
||||
|
||||
@ -127,10 +127,10 @@ namespace Aggplus
|
||||
typedef agg::rendering_buffer rendering_buffer_type;
|
||||
typedef agg::pixfmt_bgra32 pixformat_type;
|
||||
|
||||
typedef agg::blender_rgba< agg::svg::color_type, agg::svg::component_order > blender_type;
|
||||
typedef agg::comp_op_adaptor_rgba< agg::svg::color_type, agg::svg::component_order > blender_type_comp;
|
||||
typedef agg::pixfmt_alpha_blend_rgba< blender_type, agg::rendering_buffer, agg::svg::pixel_type > pixfmt_type;
|
||||
typedef agg::pixfmt_custom_blend_rgba< blender_type_comp, agg::rendering_buffer> pixfmt_type_comp;
|
||||
typedef agg::blender_rgba_unpre< agg::svg::color_type, agg::svg::component_order > blender_type;
|
||||
typedef agg::comp_op_adaptor_rgba< agg::svg::color_type, agg::svg::component_order > blender_type_comp;
|
||||
typedef agg::pixfmt_alpha_blend_rgba< blender_type, agg::rendering_buffer, agg::svg::pixel_type > pixfmt_type;
|
||||
typedef agg::pixfmt_custom_blend_rgba< blender_type_comp, agg::rendering_buffer> pixfmt_type_comp;
|
||||
|
||||
typedef agg::renderer_base<pixfmt_type> base_renderer_type;
|
||||
typedef agg::renderer_base<pixfmt_type_comp> comp_renderer_type;
|
||||
@ -278,8 +278,8 @@ protected:
|
||||
|
||||
CClipMulti m_oClip;
|
||||
|
||||
agg::svg::frame_buffer_rgba m_frame_buffer;
|
||||
agg::svg::rasterizer m_rasterizer;
|
||||
agg::svg::frame_buffer_rgba<blender_type> m_frame_buffer;
|
||||
agg::svg::rasterizer m_rasterizer;
|
||||
|
||||
#ifdef _WINDOW_GRAPHIS_USE_
|
||||
// для отрисовки картинок - используем Gdiplus
|
||||
@ -292,8 +292,6 @@ protected:
|
||||
CDIB* m_pDib;
|
||||
|
||||
public:
|
||||
agg::svg::frame_buffer_rgba& get_frame_buffer();
|
||||
agg::svg::rasterizer& get_rasterizer();
|
||||
|
||||
bool m_bIntegerGrid;
|
||||
double m_dGlobalAlpha;
|
||||
|
||||
Reference in New Issue
Block a user