summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gtk/gtkcssbordervalueprivate.h1
-rw-r--r--gtk/gtkcssnumbervalue.c14
-rw-r--r--gtk/gtkcssnumbervalueprivate.h11
-rw-r--r--gtk/gtkcssparser.c63
-rw-r--r--gtk/gtkcssparserprivate.h13
-rw-r--r--gtk/gtkcsstypes.c121
-rw-r--r--gtk/gtkcsstypesprivate.h21
7 files changed, 46 insertions, 198 deletions
diff --git a/gtk/gtkcssbordervalueprivate.h b/gtk/gtkcssbordervalueprivate.h
index 458462b615..704e25c051 100644
--- a/gtk/gtkcssbordervalueprivate.h
+++ b/gtk/gtkcssbordervalueprivate.h
@@ -21,6 +21,7 @@
#define __GTK_CSS_BORDER_VALUE_PRIVATE_H__
#include "gtkcssparserprivate.h"
+#include "gtkcssnumbervalueprivate.h"
#include "gtkcssvalueprivate.h"
G_BEGIN_DECLS
diff --git a/gtk/gtkcssnumbervalue.c b/gtk/gtkcssnumbervalue.c
index 531942bca3..aab2bc2d56 100644
--- a/gtk/gtkcssnumbervalue.c
+++ b/gtk/gtkcssnumbervalue.c
@@ -127,20 +127,6 @@ _gtk_css_number_value_new (double value,
return result;
}
-GtkCssValue *
-_gtk_css_number_value_parse (GtkCssParser *parser,
- GtkCssNumberParseFlags flags)
-{
- GtkCssNumber number;
-
- g_return_val_if_fail (parser != NULL, NULL);
-
- if (!_gtk_css_parser_read_number (parser, &number, flags))
- return NULL;
-
- return _gtk_css_number_value_new (number.value, number.unit);
-}
-
GtkCssUnit
_gtk_css_number_value_get_unit (const GtkCssValue *value)
{
diff --git a/gtk/gtkcssnumbervalueprivate.h b/gtk/gtkcssnumbervalueprivate.h
index 965b06d98e..ead4115082 100644
--- a/gtk/gtkcssnumbervalueprivate.h
+++ b/gtk/gtkcssnumbervalueprivate.h
@@ -26,8 +26,19 @@
G_BEGIN_DECLS
+typedef enum /*< skip >*/ {
+ GTK_CSS_POSITIVE_ONLY = (1 << 0),
+ GTK_CSS_PARSE_PERCENT = (1 << 1),
+ GTK_CSS_PARSE_NUMBER = (1 << 2),
+ GTK_CSS_NUMBER_AS_PIXELS = (1 << 3),
+ GTK_CSS_PARSE_LENGTH = (1 << 4),
+ GTK_CSS_PARSE_ANGLE = (1 << 5),
+ GTK_CSS_PARSE_TIME = (1 << 6)
+} GtkCssNumberParseFlags;
+
GtkCssValue * _gtk_css_number_value_new (double value,
GtkCssUnit unit);
+/* This function implemented in gtkcssparser.c */
GtkCssValue * _gtk_css_number_value_parse (GtkCssParser *parser,
GtkCssNumberParseFlags flags);
diff --git a/gtk/gtkcssparser.c b/gtk/gtkcssparser.c
index c50a9bb75c..96c367e8fd 100644
--- a/gtk/gtkcssparser.c
+++ b/gtk/gtkcssparser.c
@@ -18,6 +18,8 @@
#include "config.h"
#include "gtkcssparserprivate.h"
+
+#include "gtkcssnumbervalueprivate.h"
#include "gtkwin32themeprivate.h"
#include <errno.h>
@@ -551,9 +553,8 @@ _gtk_css_parser_has_number (GtkCssParser *parser)
return strchr ("+-0123456789.", parser->data[0]) != NULL;
}
-gboolean
-_gtk_css_parser_read_number (GtkCssParser *parser,
- GtkCssNumber *number,
+GtkCssValue *
+_gtk_css_number_value_parse (GtkCssParser *parser,
GtkCssNumberParseFlags flags)
{
static const struct {
@@ -576,94 +577,98 @@ _gtk_css_parser_read_number (GtkCssParser *parser,
{ "s", GTK_CSS_S, GTK_CSS_PARSE_TIME },
{ "ms", GTK_CSS_MS, GTK_CSS_PARSE_TIME }
};
- char *end, *unit;
+ char *end, *unit_name;
+ double value;
+ GtkCssUnit unit;
- g_return_val_if_fail (GTK_IS_CSS_PARSER (parser), FALSE);
- g_return_val_if_fail (number != NULL, FALSE);
+ g_return_val_if_fail (GTK_IS_CSS_PARSER (parser), NULL);
errno = 0;
- number->unit = GTK_CSS_NUMBER;
- number->value = g_ascii_strtod (parser->data, &end);
+ value = g_ascii_strtod (parser->data, &end);
if (errno)
{
_gtk_css_parser_error (parser, "not a number: %s", g_strerror (errno));
- return FALSE;
+ return NULL;
}
if (parser->data == end)
{
_gtk_css_parser_error (parser, "not a number");
- return FALSE;
+ return NULL;
}
parser->data = end;
if (flags & GTK_CSS_POSITIVE_ONLY &&
- number->value < 0)
+ value < 0)
{
_gtk_css_parser_error (parser, "negative values are not allowed.");
- return FALSE;
+ return NULL;
}
- unit = _gtk_css_parser_try_ident (parser, FALSE);
+ unit_name = _gtk_css_parser_try_ident (parser, FALSE);
- if (unit)
+ if (unit_name)
{
guint i;
for (i = 0; i < G_N_ELEMENTS (units); i++)
{
if (flags & units[i].required_flags &&
- g_ascii_strcasecmp (unit, units[i].name) == 0)
+ g_ascii_strcasecmp (unit_name, units[i].name) == 0)
break;
}
+ g_free (unit_name);
+
if (i >= G_N_ELEMENTS (units))
{
- _gtk_css_parser_error (parser, "`%s' is not a valid unit.", unit);
- g_free (unit);
- return FALSE;
+ _gtk_css_parser_error (parser, "`%s' is not a valid unit.", unit_name);
+ return NULL;
}
- number->unit = units[i].unit;
- g_free (unit);
+ unit = units[i].unit;
}
else
{
if ((flags & GTK_CSS_PARSE_PERCENT) &&
_gtk_css_parser_try (parser, "%", FALSE))
{
- number->unit = GTK_CSS_PERCENT;
+ unit = GTK_CSS_PERCENT;
}
- else if (number->value == 0.0)
+ else if (value == 0.0)
{
if (flags & GTK_CSS_PARSE_NUMBER)
- number->unit = GTK_CSS_NUMBER;
+ unit = GTK_CSS_NUMBER;
else if (flags & GTK_CSS_PARSE_LENGTH)
- number->unit = GTK_CSS_PX;
+ unit = GTK_CSS_PX;
+ else if (flags & GTK_CSS_PARSE_ANGLE)
+ unit = GTK_CSS_DEG;
+ else if (flags & GTK_CSS_PARSE_TIME)
+ unit = GTK_CSS_S;
else
- number->unit = GTK_CSS_PERCENT;
+ unit = GTK_CSS_PERCENT;
}
else if (flags & GTK_CSS_NUMBER_AS_PIXELS)
{
_gtk_css_parser_error_full (parser,
GTK_CSS_PROVIDER_ERROR_DEPRECATED,
"Not using units is deprecated. Assuming 'px'.");
- number->unit = GTK_CSS_PX;
+ unit = GTK_CSS_PX;
}
else if (flags & GTK_CSS_PARSE_NUMBER)
{
- number->unit = GTK_CSS_NUMBER;
+ unit = GTK_CSS_NUMBER;
}
else
{
_gtk_css_parser_error (parser, "Unit is missing.");
- return FALSE;
+ return NULL;
}
}
_gtk_css_parser_skip_whitespace (parser);
- return TRUE;
+ return _gtk_css_number_value_new (value, unit);
}
/* XXX: we should introduce GtkCssLenght that deals with
diff --git a/gtk/gtkcssparserprivate.h b/gtk/gtkcssparserprivate.h
index faeeda2b9b..d676c284b6 100644
--- a/gtk/gtkcssparserprivate.h
+++ b/gtk/gtkcssparserprivate.h
@@ -24,16 +24,6 @@
G_BEGIN_DECLS
-typedef enum /*< skip >*/ {
- GTK_CSS_POSITIVE_ONLY = (1 << 0),
- GTK_CSS_PARSE_PERCENT = (1 << 1),
- GTK_CSS_PARSE_NUMBER = (1 << 2),
- GTK_CSS_NUMBER_AS_PIXELS = (1 << 3),
- GTK_CSS_PARSE_LENGTH = (1 << 4),
- GTK_CSS_PARSE_ANGLE = (1 << 5),
- GTK_CSS_PARSE_TIME = (1 << 6)
-} GtkCssNumberParseFlags;
-
typedef struct _GtkCssParser GtkCssParser;
typedef void (* GtkCssParserErrorFunc) (GtkCssParser *parser,
@@ -93,9 +83,6 @@ gboolean _gtk_css_parser_try_enum (GtkCssParser *parser
int *value);
gboolean _gtk_css_parser_has_number (GtkCssParser *parser);
-gboolean _gtk_css_parser_read_number (GtkCssParser *parser,
- GtkCssNumber *number,
- GtkCssNumberParseFlags flags);
char * _gtk_css_parser_read_string (GtkCssParser *parser);
char * _gtk_css_parser_read_value (GtkCssParser *parser);
GtkSymbolicColor *_gtk_css_parser_read_symbolic_color
diff --git a/gtk/gtkcsstypes.c b/gtk/gtkcsstypes.c
index 3962e2fe56..e3519a0173 100644
--- a/gtk/gtkcsstypes.c
+++ b/gtk/gtkcsstypes.c
@@ -78,124 +78,3 @@ _gtk_css_change_for_child (GtkCssChange match)
return gtk_css_change_translate (match, table, G_N_ELEMENTS (table));
}
-void
-_gtk_css_number_init (GtkCssNumber *number,
- double value,
- GtkCssUnit unit)
-{
- number->value = value;
- number->unit = unit;
-}
-
-gboolean
-_gtk_css_number_equal (const GtkCssNumber *one,
- const GtkCssNumber *two)
-{
- return one->unit == two->unit &&
- one->value == two->value;
-}
-
-double
-_gtk_css_number_get (const GtkCssNumber *number,
- double one_hundred_percent)
-{
- if (number->unit == GTK_CSS_PERCENT)
- return number->value * one_hundred_percent * 0.01;
- else
- return number->value;
-}
-
-gboolean
-_gtk_css_number_compute (GtkCssNumber *dest,
- const GtkCssNumber *src,
- GtkStyleContext *context)
-{
- switch (src->unit)
- {
- default:
- g_assert_not_reached();
- /* fall through */
- case GTK_CSS_PERCENT:
- case GTK_CSS_NUMBER:
- case GTK_CSS_PX:
- case GTK_CSS_DEG:
- dest->value = src->value;
- dest->unit = src->unit;
- break;
- case GTK_CSS_PT:
- dest->value = src->value * 96.0 / 72.0;
- dest->unit = GTK_CSS_PX;
- break;
- case GTK_CSS_PC:
- dest->value = src->value * 96.0 / 72.0 * 12.0;
- dest->unit = GTK_CSS_PX;
- break;
- case GTK_CSS_IN:
- dest->value = src->value * 96.0;
- dest->unit = GTK_CSS_PX;
- break;
- case GTK_CSS_CM:
- dest->value = src->value * 96.0 * 0.39370078740157477;
- dest->unit = GTK_CSS_PX;
- break;
- case GTK_CSS_MM:
- dest->value = src->value * 96.0 * 0.039370078740157477;
- dest->unit = GTK_CSS_PX;
- break;
- case GTK_CSS_EM:
- dest->value = src->value * _gtk_css_number_value_get (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_FONT_SIZE), 100);
- dest->unit = GTK_CSS_PX;
- break;
- case GTK_CSS_EX:
- /* for now we pretend ex is half of em */
- dest->value = src->value * _gtk_css_number_value_get (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_FONT_SIZE), 100);
- dest->unit = GTK_CSS_PX;
- break;
- case GTK_CSS_RAD:
- dest->value = 360 * src->value / (2 * G_PI);
- dest->unit = GTK_CSS_DEG;
- break;
- case GTK_CSS_GRAD:
- dest->value = 360 * src->value / 400.0;
- dest->unit = GTK_CSS_DEG;
- break;
- case GTK_CSS_TURN:
- dest->value = 360 * src->value;
- dest->unit = GTK_CSS_DEG;
- break;
- }
-
- return !_gtk_css_number_equal (src, dest);
-}
-
-void
-_gtk_css_number_print (const GtkCssNumber *number,
- GString *string)
-{
- char buf[G_ASCII_DTOSTR_BUF_SIZE];
-
- const char *names[] = {
- /* [GTK_CSS_NUMBER] = */ "",
- /* [GTK_CSS_PERCENT] = */ "%",
- /* [GTK_CSS_PX] = */ "px",
- /* [GTK_CSS_PT] = */ "pt",
- /* [GTK_CSS_EM] = */ "em",
- /* [GTK_CSS_EX] = */ "ex",
- /* [GTK_CSS_PC] = */ "pc",
- /* [GTK_CSS_IN] = */ "in",
- /* [GTK_CSS_CM] = */ "cm",
- /* [GTK_CSS_MM] = */ "mm",
- /* [GTK_CSS_RAD] = */ "rad",
- /* [GTK_CSS_DEG] = */ "deg",
- /* [GTK_CSS_GRAD] = */ "grad",
- /* [GTK_CSS_TURN] = */ "turn",
- };
-
- g_return_if_fail (number != NULL);
- g_return_if_fail (string != NULL);
-
- g_ascii_dtostr (buf, sizeof (buf), number->value);
- g_string_append (string, buf);
- if (number->value != 0.0)
- g_string_append (string, names[number->unit]);
-}
diff --git a/gtk/gtkcsstypesprivate.h b/gtk/gtkcsstypesprivate.h
index 730b2fa8bd..9f2b370f5f 100644
--- a/gtk/gtkcsstypesprivate.h
+++ b/gtk/gtkcsstypesprivate.h
@@ -159,30 +159,9 @@ typedef enum /*< skip >*/ {
GTK_CSS_MS,
} GtkCssUnit;
-typedef struct _GtkCssNumber GtkCssNumber;
-
-struct _GtkCssNumber {
- gdouble value;
- GtkCssUnit unit;
-};
-
GtkCssChange _gtk_css_change_for_sibling (GtkCssChange match);
GtkCssChange _gtk_css_change_for_child (GtkCssChange match);
-#define GTK_CSS_NUMBER_INIT(_value,_unit) { (_value), (_unit) }
-void _gtk_css_number_init (GtkCssNumber *number,
- double value,
- GtkCssUnit unit);
-gboolean _gtk_css_number_equal (const GtkCssNumber *one,
- const GtkCssNumber *two);
-double _gtk_css_number_get (const GtkCssNumber *number,
- double one_hundred_percent);
-gboolean _gtk_css_number_compute (GtkCssNumber *dest,
- const GtkCssNumber *src,
- GtkStyleContext *context);
-void _gtk_css_number_print (const GtkCssNumber *number,
- GString *string);
-
G_END_DECLS