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 "vg_context.h" 30544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin#include "paint.h" 3175143ef05576ee9f25ee176bc28c3c4d03705bf5Chia-I Wu#include "api.h" 32d41e694cf78ada8c9258f96995115c9da8437894Brian Paul#include "handle.h" 33d41e694cf78ada8c9258f96995115c9da8437894Brian Paul 34544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 3575143ef05576ee9f25ee176bc28c3c4d03705bf5Chia-I WuVGPaint vegaCreatePaint(void) 36544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin{ 37d41e694cf78ada8c9258f96995115c9da8437894Brian Paul return paint_to_handle(paint_create(vg_current_context())); 38544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin} 39544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 4075143ef05576ee9f25ee176bc28c3c4d03705bf5Chia-I Wuvoid vegaDestroyPaint(VGPaint p) 41544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin{ 42544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin struct vg_context *ctx = vg_current_context(); 43544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 44544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin if (p == VG_INVALID_HANDLE) { 45544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin vg_set_error(ctx, VG_BAD_HANDLE_ERROR); 46544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin return; 47544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin } 48544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 49d41e694cf78ada8c9258f96995115c9da8437894Brian Paul paint_destroy(handle_to_paint(p)); 50544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin} 51544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 5275143ef05576ee9f25ee176bc28c3c4d03705bf5Chia-I Wuvoid vegaSetPaint(VGPaint paint, VGbitfield paintModes) 53544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin{ 54544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin struct vg_context *ctx = vg_current_context(); 55544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 56544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin if (paint == VG_INVALID_HANDLE) { 57544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin /* restore the default */ 58d41e694cf78ada8c9258f96995115c9da8437894Brian Paul paint = paint_to_handle(ctx->default_paint); 59d41e694cf78ada8c9258f96995115c9da8437894Brian Paul } else if (!vg_object_is_valid(paint, VG_OBJECT_PAINT)) { 60544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin vg_set_error(ctx, VG_BAD_HANDLE_ERROR); 61544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin return; 62544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin } 63544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 64544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin if (!(paintModes & ((VG_FILL_PATH|VG_STROKE_PATH)))) { 65544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR); 66544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin return; 67544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin } 68544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 69544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin if (paintModes & VG_FILL_PATH) { 70d41e694cf78ada8c9258f96995115c9da8437894Brian Paul ctx->state.vg.fill_paint = handle_to_paint(paint); 71544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin } 72544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin if (paintModes & VG_STROKE_PATH) { 73d41e694cf78ada8c9258f96995115c9da8437894Brian Paul ctx->state.vg.stroke_paint = handle_to_paint(paint); 74544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin } 753f0a966807f03a364edea0272ddf45f08ab7ce4fChia-I Wu 763f0a966807f03a364edea0272ddf45f08ab7ce4fChia-I Wu ctx->state.dirty |= PAINT_DIRTY; 77544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin} 78544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 7975143ef05576ee9f25ee176bc28c3c4d03705bf5Chia-I WuVGPaint vegaGetPaint(VGPaintMode paintMode) 80544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin{ 81544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin struct vg_context *ctx = vg_current_context(); 82544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin VGPaint paint = VG_INVALID_HANDLE; 83544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 84544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin if (paintMode < VG_STROKE_PATH || paintMode > VG_FILL_PATH) { 85544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR); 86544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin return VG_INVALID_HANDLE; 87544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin } 88544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 89544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin if (paintMode == VG_FILL_PATH) 90d41e694cf78ada8c9258f96995115c9da8437894Brian Paul paint = paint_to_handle(ctx->state.vg.fill_paint); 91544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin else if (paintMode == VG_STROKE_PATH) 92d41e694cf78ada8c9258f96995115c9da8437894Brian Paul paint = paint_to_handle(ctx->state.vg.stroke_paint); 93544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 94d41e694cf78ada8c9258f96995115c9da8437894Brian Paul if (paint == paint_to_handle(ctx->default_paint)) 95544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin paint = VG_INVALID_HANDLE; 96544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 97544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin return paint; 98544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin} 99544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 10075143ef05576ee9f25ee176bc28c3c4d03705bf5Chia-I Wuvoid vegaSetColor(VGPaint paint, VGuint rgba) 101544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin{ 102544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin struct vg_context *ctx = vg_current_context(); 1033f0a966807f03a364edea0272ddf45f08ab7ce4fChia-I Wu struct vg_paint *p; 104544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 105544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin if (paint == VG_INVALID_HANDLE) { 106544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin vg_set_error(ctx, VG_BAD_HANDLE_ERROR); 107544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin return; 108544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin } 109544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 110d41e694cf78ada8c9258f96995115c9da8437894Brian Paul if (!vg_object_is_valid(paint, VG_OBJECT_PAINT)) { 111544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin vg_set_error(ctx, VG_BAD_HANDLE_ERROR); 112544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin return; 113544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin } 114d41e694cf78ada8c9258f96995115c9da8437894Brian Paul 1153f0a966807f03a364edea0272ddf45f08ab7ce4fChia-I Wu p = handle_to_paint(paint); 1163f0a966807f03a364edea0272ddf45f08ab7ce4fChia-I Wu paint_set_colori(p, rgba); 1173f0a966807f03a364edea0272ddf45f08ab7ce4fChia-I Wu 1183f0a966807f03a364edea0272ddf45f08ab7ce4fChia-I Wu if (ctx->state.vg.fill_paint == p || 1193f0a966807f03a364edea0272ddf45f08ab7ce4fChia-I Wu ctx->state.vg.stroke_paint == p) 1203f0a966807f03a364edea0272ddf45f08ab7ce4fChia-I Wu ctx->state.dirty |= PAINT_DIRTY; 121544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin} 122544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 12375143ef05576ee9f25ee176bc28c3c4d03705bf5Chia-I WuVGuint vegaGetColor(VGPaint paint) 124544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin{ 125544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin struct vg_context *ctx = vg_current_context(); 126544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin struct vg_paint *p; 127544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin VGuint rgba = 0; 128544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 129544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin if (paint == VG_INVALID_HANDLE) { 130544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin vg_set_error(ctx, VG_BAD_HANDLE_ERROR); 131544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin return rgba; 132544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin } 133544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 134d41e694cf78ada8c9258f96995115c9da8437894Brian Paul if (!vg_object_is_valid(paint, VG_OBJECT_PAINT)) { 135544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin vg_set_error(ctx, VG_BAD_HANDLE_ERROR); 136544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin return rgba; 137544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin } 138d41e694cf78ada8c9258f96995115c9da8437894Brian Paul p = handle_to_paint(paint); 139544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 140544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin return paint_colori(p); 141544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin} 142544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 14375143ef05576ee9f25ee176bc28c3c4d03705bf5Chia-I Wuvoid vegaPaintPattern(VGPaint paint, VGImage pattern) 144544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin{ 145544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin struct vg_context *ctx = vg_current_context(); 146544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 147544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin if (paint == VG_INVALID_HANDLE || 148d41e694cf78ada8c9258f96995115c9da8437894Brian Paul !vg_context_is_object_valid(ctx, VG_OBJECT_PAINT, paint)) { 149544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin vg_set_error(ctx, VG_BAD_HANDLE_ERROR); 150544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin return; 151544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin } 152544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 153544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin if (pattern == VG_INVALID_HANDLE) { 154d41e694cf78ada8c9258f96995115c9da8437894Brian Paul paint_set_type(handle_to_paint(paint), VG_PAINT_TYPE_COLOR); 155544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin return; 156544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin } 157544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 158d41e694cf78ada8c9258f96995115c9da8437894Brian Paul if (!vg_context_is_object_valid(ctx, VG_OBJECT_IMAGE, pattern)) { 159544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin vg_set_error(ctx, VG_BAD_HANDLE_ERROR); 160544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin return; 161544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin } 162544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 163544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 164d41e694cf78ada8c9258f96995115c9da8437894Brian Paul if (!vg_object_is_valid(paint, VG_OBJECT_PAINT) || 165d41e694cf78ada8c9258f96995115c9da8437894Brian Paul !vg_object_is_valid(pattern, VG_OBJECT_IMAGE)) { 166544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin vg_set_error(ctx, VG_BAD_HANDLE_ERROR); 167544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin return; 168544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin } 169d41e694cf78ada8c9258f96995115c9da8437894Brian Paul paint_set_pattern(handle_to_paint(paint), 170d41e694cf78ada8c9258f96995115c9da8437894Brian Paul handle_to_image(pattern)); 171544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin} 172544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin 173