/* gdkDPSline.c --- DPS line representation in gdk * * Copyright (C) 1999 Masatake YAMATO * * Author: Masatake YAMATO * Time-stamp: <99/11/12 05:23:28 masata-y> * * This file is part of gtkDPS Library. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "gdkDPSline.h" static gint g_array_length(GArray * array); gboolean gdk_dps_join_style_is_in_range(GdkDPSJoinStyle join_style) { if (GDK_DPS_JOIN_MITER == join_style || GDK_DPS_JOIN_ROUND == join_style || GDK_DPS_JOIN_BEVEL == join_style) return TRUE; else return FALSE; } gboolean gdk_dps_cap_style_is_in_range(GdkDPSCapStyle cap_style) { if (GDK_DPS_CAP_BUTT == cap_style || GDK_DPS_CAP_ROUND == cap_style || GDK_DPS_CAP_SQUARE == cap_style) return TRUE; else return FALSE; } GdkDPSDashPattern * gdk_dps_dash_pattern_new(gint default_length) { GdkDPSDashPattern * result; gfloat init_val = 0.0; gint i; g_return_val_if_fail (default_length >= 0, NULL); result = g_new(GdkDPSDashPattern, 1); result->phase = 0.0; result->pattern = g_array_new(FALSE, TRUE, sizeof(gfloat)); for (i = 0; i < default_length; i++) g_array_append_val(result->pattern, init_val); return result; } void gdk_dps_dash_pattern_free(GdkDPSDashPattern * dash_pattern) { g_return_if_fail (dash_pattern); g_return_if_fail(dash_pattern->pattern); g_array_free(dash_pattern->pattern, TRUE); dash_pattern->pattern = NULL; g_free(dash_pattern); } gint gdk_dps_dash_pattern_length(GdkDPSDashPattern * dash_pattern) { g_return_val_if_fail(dash_pattern, 0); g_return_val_if_fail(dash_pattern->pattern, 0); return g_array_length(dash_pattern->pattern); } gboolean gdk_dps_dash_pattern_empty(GdkDPSDashPattern * dash_pattern) { gint length, i; g_return_val_if_fail(dash_pattern, TRUE); g_return_val_if_fail(dash_pattern->pattern, TRUE); length = gdk_dps_dash_pattern_length(dash_pattern); /* TODO Checking empty is too simple... */ if (0 == gdk_dps_dash_pattern_length(dash_pattern)) return TRUE; /* ??? */ else { for (i = 0; i < length; i++) { if (0.0 != gdk_dps_dash_pattern_get_at (dash_pattern, i)) break; } if (i == length) return TRUE; } return FALSE; } void gdk_dps_dash_pattern_set_at(GdkDPSDashPattern * dash_pattern, gint index, gfloat value) { gint length = gdk_dps_dash_pattern_length(dash_pattern); g_return_if_fail(dash_pattern); g_return_if_fail(dash_pattern->pattern); g_return_if_fail(length > index); g_array_index(dash_pattern->pattern, gfloat, index) = value; } gfloat gdk_dps_dash_pattern_get_at(GdkDPSDashPattern * dash_pattern, gint index) { gint length; g_return_val_if_fail(dash_pattern, 0.0); g_return_val_if_fail(dash_pattern->pattern, 0.0); length = gdk_dps_dash_pattern_length(dash_pattern); g_return_val_if_fail(length > index, 0.0); return g_array_index(dash_pattern->pattern, gfloat, index); } void gdk_dps_dash_pattern_get(GdkDPSDashPattern * dash_pattern, gfloat * to) { gint length, i; g_return_if_fail(dash_pattern); g_return_if_fail(to); g_return_if_fail(dash_pattern->pattern); length = gdk_dps_dash_pattern_length(dash_pattern); for (i = 0; i < length; i++) { to[i] = gdk_dps_dash_pattern_get_at(dash_pattern, i); } } gfloat gdk_dps_dash_pattern_phase(GdkDPSDashPattern * dash_pattern) { g_return_val_if_fail(dash_pattern, 0.0); return dash_pattern->phase; } void gdk_dps_dash_pattern_set_phase(GdkDPSDashPattern * dash_pattern, gfloat phase) { g_return_if_fail(dash_pattern); dash_pattern->phase = phase; } /* Utilities */ static gint g_array_length(GArray * array) { g_return_val_if_fail(array, -1); return array->len; }