1544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin/************************************************************************** 2544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * 3544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * Copyright 2009 VMware, Inc. All Rights Reserved. 4544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * 5544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * Permission is hereby granted, free of charge, to any person obtaining a 6544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * copy of this software and associated documentation files (the 7544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * "Software"), to deal in the Software without restriction, including 8544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * without limitation the rights to use, copy, modify, merge, publish, 9544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * distribute, sub license, and/or sell copies of the Software, and to 10544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * permit persons to whom the Software is furnished to do so, subject to 11544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * the following conditions: 12544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * 13544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * The above copyright notice and this permission notice (including the 14544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * next paragraph) shall be included in all copies or substantial portions 15544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * of the Software. 16544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * 17544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 18544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 19544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 20544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR 21544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 22544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 23544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 24544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * 25544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin **************************************************************************/ 26544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 27544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin#include "VG/openvg.h" 28544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 29544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin#include "mask.h" 3075143ef05576ee9f25ee176bc28c3c4d03705bf5Chia-I Wu#include "api.h" 31d41e694cf78ada8c9258f96995115c9da8437894Brian Paul#include "handle.h" 326b241f532a21990a7849c5a786504f7ac4124f76Chia-I Wu#include "renderer.h" 33544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 34544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin#include "vg_context.h" 35544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin#include "pipe/p_context.h" 36544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 3775143ef05576ee9f25ee176bc28c3c4d03705bf5Chia-I Wuvoid vegaMask(VGHandle mask, VGMaskOperation operation, 3875143ef05576ee9f25ee176bc28c3c4d03705bf5Chia-I Wu VGint x, VGint y, 3975143ef05576ee9f25ee176bc28c3c4d03705bf5Chia-I Wu VGint width, VGint height) 40544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin{ 41544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin struct vg_context *ctx = vg_current_context(); 42544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 43544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin if (width <=0 || height <= 0) { 44544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR); 45544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin return; 46544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin } 47544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 48544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin if (operation < VG_CLEAR_MASK || operation > VG_SUBTRACT_MASK) { 49544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR); 50544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin return; 51544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin } 52544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 53544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 54544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin vg_validate_state(ctx); 55544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 56544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin if (operation == VG_CLEAR_MASK) { 57544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin mask_fill(x, y, width, height, 0.f); 58544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin } else if (operation == VG_FILL_MASK) { 59544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin mask_fill(x, y, width, height, 1.f); 60d41e694cf78ada8c9258f96995115c9da8437894Brian Paul } else if (vg_object_is_valid(mask, VG_OBJECT_IMAGE)) { 61d41e694cf78ada8c9258f96995115c9da8437894Brian Paul struct vg_image *image = handle_to_image(mask); 62544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin mask_using_image(image, operation, x, y, width, height); 63d41e694cf78ada8c9258f96995115c9da8437894Brian Paul } else if (vg_object_is_valid(mask, VG_OBJECT_MASK)) { 64d41e694cf78ada8c9258f96995115c9da8437894Brian Paul struct vg_mask_layer *layer = handle_to_masklayer(mask); 65544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin mask_using_layer(layer, operation, x, y, width, height); 66544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin } else { 67544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin vg_set_error(ctx, VG_BAD_HANDLE_ERROR); 68544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin } 69544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin} 70544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 7175143ef05576ee9f25ee176bc28c3c4d03705bf5Chia-I Wuvoid vegaClear(VGint x, VGint y, 7275143ef05576ee9f25ee176bc28c3c4d03705bf5Chia-I Wu VGint width, VGint height) 73544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin{ 74544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin struct vg_context *ctx = vg_current_context(); 7596c6637a1360f146bbf49ffb207ae943ecbbdf49Chia-I Wu struct st_framebuffer *stfb = ctx->draw_buffer; 76544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 77544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin if (width <= 0 || height <= 0) { 78544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR); 79544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin return; 80544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin } 81544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 82544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin vg_validate_state(ctx); 83544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin#if 0 84544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin debug_printf("Clear [%d, %d, %d, %d] with [%f, %f, %f, %f]\n", 85544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin x, y, width, height, 86544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin ctx->state.vg.clear_color[0], 87544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin ctx->state.vg.clear_color[1], 88544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin ctx->state.vg.clear_color[2], 89544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin ctx->state.vg.clear_color[3]); 90544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin#endif 91544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 92544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin /* check for a whole surface clear */ 93544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin if (!ctx->state.vg.scissoring && 9496c6637a1360f146bbf49ffb207ae943ecbbdf49Chia-I Wu (x == 0 && y == 0 && width == stfb->width && height == stfb->height)) { 956dd284f7c8fac22f64c13fdf9909094f5ec59086Dave Airlie union pipe_color_union clear_color; 966dd284f7c8fac22f64c13fdf9909094f5ec59086Dave Airlie clear_color.f[0] = ctx->state.vg.clear_color[0]; 976dd284f7c8fac22f64c13fdf9909094f5ec59086Dave Airlie clear_color.f[1] = ctx->state.vg.clear_color[1]; 986dd284f7c8fac22f64c13fdf9909094f5ec59086Dave Airlie clear_color.f[2] = ctx->state.vg.clear_color[2]; 996dd284f7c8fac22f64c13fdf9909094f5ec59086Dave Airlie clear_color.f[3] = ctx->state.vg.clear_color[3]; 100544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin ctx->pipe->clear(ctx->pipe, PIPE_CLEAR_COLOR | PIPE_CLEAR_DEPTHSTENCIL, 1016dd284f7c8fac22f64c13fdf9909094f5ec59086Dave Airlie &clear_color, 1., 0); 1026b241f532a21990a7849c5a786504f7ac4124f76Chia-I Wu } else if (renderer_clear_begin(ctx->renderer)) { 1036b241f532a21990a7849c5a786504f7ac4124f76Chia-I Wu /* XXX verify coord round-off */ 1046b241f532a21990a7849c5a786504f7ac4124f76Chia-I Wu renderer_clear(ctx->renderer, x, y, width, height, ctx->state.vg.clear_color); 1056b241f532a21990a7849c5a786504f7ac4124f76Chia-I Wu renderer_clear_end(ctx->renderer); 106544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin } 107544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin} 108544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 109544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 110544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin#ifdef OPENVG_VERSION_1_1 111544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 112544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 11375143ef05576ee9f25ee176bc28c3c4d03705bf5Chia-I Wuvoid vegaRenderToMask(VGPath path, 11475143ef05576ee9f25ee176bc28c3c4d03705bf5Chia-I Wu VGbitfield paintModes, 11575143ef05576ee9f25ee176bc28c3c4d03705bf5Chia-I Wu VGMaskOperation operation) 116544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin{ 117544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin struct vg_context *ctx = vg_current_context(); 118544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 119544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin if (path == VG_INVALID_HANDLE) { 120544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin vg_set_error(ctx, VG_BAD_HANDLE_ERROR); 121544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin return; 122544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin } 123544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin if (!paintModes || (paintModes&(~(VG_STROKE_PATH|VG_FILL_PATH)))) { 124544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR); 125544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin return; 126544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin } 127544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin if (operation < VG_CLEAR_MASK || 128544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin operation > VG_SUBTRACT_MASK) { 129544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR); 130544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin return; 131544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin } 132d41e694cf78ada8c9258f96995115c9da8437894Brian Paul if (!vg_object_is_valid(path, VG_OBJECT_PATH)) { 133544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin vg_set_error(ctx, VG_BAD_HANDLE_ERROR); 134544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin return; 135544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin } 136544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 137544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin vg_validate_state(ctx); 138544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 139d41e694cf78ada8c9258f96995115c9da8437894Brian Paul mask_render_to(handle_to_path(path), paintModes, operation); 140544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin} 141544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 14275143ef05576ee9f25ee176bc28c3c4d03705bf5Chia-I WuVGMaskLayer vegaCreateMaskLayer(VGint width, VGint height) 143544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin{ 144544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin struct vg_context *ctx = vg_current_context(); 145544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 146544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin if (width <= 0 || height <= 0 || 14705e5b53128fc4dc25769fecace671cdaa7004630Chia-I Wu width > vegaGeti(VG_MAX_IMAGE_WIDTH) || 14805e5b53128fc4dc25769fecace671cdaa7004630Chia-I Wu height > vegaGeti(VG_MAX_IMAGE_HEIGHT)) { 149544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR); 150544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin return VG_INVALID_HANDLE; 151544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin } 152544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 153d41e694cf78ada8c9258f96995115c9da8437894Brian Paul return masklayer_to_handle(mask_layer_create(width, height)); 154544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin} 155544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 15675143ef05576ee9f25ee176bc28c3c4d03705bf5Chia-I Wuvoid vegaDestroyMaskLayer(VGMaskLayer maskLayer) 157544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin{ 158544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin struct vg_mask_layer *mask = 0; 159544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin struct vg_context *ctx = vg_current_context(); 160544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 161544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin if (maskLayer == VG_INVALID_HANDLE) { 162544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin vg_set_error(ctx, VG_BAD_HANDLE_ERROR); 163544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin return; 164544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin } 165d41e694cf78ada8c9258f96995115c9da8437894Brian Paul if (!vg_object_is_valid(maskLayer, VG_OBJECT_MASK)) { 166544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin vg_set_error(ctx, VG_BAD_HANDLE_ERROR); 167544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin return; 168544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin } 169544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 170d41e694cf78ada8c9258f96995115c9da8437894Brian Paul mask = handle_to_masklayer(maskLayer); 171544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin mask_layer_destroy(mask); 172544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin} 173544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 17475143ef05576ee9f25ee176bc28c3c4d03705bf5Chia-I Wuvoid vegaFillMaskLayer(VGMaskLayer maskLayer, 17575143ef05576ee9f25ee176bc28c3c4d03705bf5Chia-I Wu VGint x, VGint y, 17675143ef05576ee9f25ee176bc28c3c4d03705bf5Chia-I Wu VGint width, VGint height, 17775143ef05576ee9f25ee176bc28c3c4d03705bf5Chia-I Wu VGfloat value) 178544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin{ 179544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin struct vg_mask_layer *mask = 0; 180544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin struct vg_context *ctx = vg_current_context(); 181544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 182544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin if (maskLayer == VG_INVALID_HANDLE) { 183544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin vg_set_error(ctx, VG_BAD_HANDLE_ERROR); 184544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin return; 185544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin } 186544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 187544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin if (value < 0 || value > 1) { 188544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR); 189544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin return; 190544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin } 191544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 192544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin if (width <= 0 || height <= 0) { 193544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR); 194544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin return; 195544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin } 196544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin if (x < 0 || y < 0 || (x + width) < 0 || (y + height) < 0) { 197544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR); 198544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin return; 199544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin } 200544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 201d41e694cf78ada8c9258f96995115c9da8437894Brian Paul if (!vg_object_is_valid(maskLayer, VG_OBJECT_MASK)) { 202544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin vg_set_error(ctx, VG_BAD_HANDLE_ERROR); 203544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin return; 204544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin } 205544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 206d41e694cf78ada8c9258f96995115c9da8437894Brian Paul mask = handle_to_masklayer(maskLayer); 207544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 208544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin if (x + width > mask_layer_width(mask) || 209544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin y + height > mask_layer_height(mask)) { 210544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR); 211544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin return; 212544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin } 213544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 21430cab4b6cbf741e1ae727bfaed10cc3772e4dff9Chia-I Wu vg_validate_state(ctx); 21530cab4b6cbf741e1ae727bfaed10cc3772e4dff9Chia-I Wu 216544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin mask_layer_fill(mask, x, y, width, height, value); 217544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin} 218544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 21975143ef05576ee9f25ee176bc28c3c4d03705bf5Chia-I Wuvoid vegaCopyMask(VGMaskLayer maskLayer, 22075143ef05576ee9f25ee176bc28c3c4d03705bf5Chia-I Wu VGint sx, VGint sy, 22175143ef05576ee9f25ee176bc28c3c4d03705bf5Chia-I Wu VGint dx, VGint dy, 22275143ef05576ee9f25ee176bc28c3c4d03705bf5Chia-I Wu VGint width, VGint height) 223544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin{ 224544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin struct vg_context *ctx = vg_current_context(); 225544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin struct vg_mask_layer *mask = 0; 226544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 227544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin if (maskLayer == VG_INVALID_HANDLE) { 228544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin vg_set_error(ctx, VG_BAD_HANDLE_ERROR); 229544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin return; 230544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin } 231544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin if (width <= 0 || height <= 0) { 232544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR); 233544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin return; 234544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin } 235d41e694cf78ada8c9258f96995115c9da8437894Brian Paul if (!vg_object_is_valid(maskLayer, VG_OBJECT_MASK)) { 236544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin vg_set_error(ctx, VG_BAD_HANDLE_ERROR); 237544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin return; 238544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin } 239544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 24030cab4b6cbf741e1ae727bfaed10cc3772e4dff9Chia-I Wu vg_validate_state(ctx); 241544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 242d41e694cf78ada8c9258f96995115c9da8437894Brian Paul mask = handle_to_masklayer(maskLayer); 243544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin mask_copy(mask, sx, sy, dx, dy, width, height); 244544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin} 245544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 246544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin#endif 247