[gnome-shell] st-theme-node-drawing: Group multiple cogl_rectangle calls
- From: Adel Gadllah <agadllah src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] st-theme-node-drawing: Group multiple cogl_rectangle calls
- Date: Fri, 16 Nov 2012 18:27:20 +0000 (UTC)
commit d8540819af7978b3c244877ddb85109a55278bee
Author: Adel Gadllah <adel gadllah gmail com>
Date: Fri Nov 16 17:17:49 2012 +0100
st-theme-node-drawing: Group multiple cogl_rectangle calls
Calling cogl_rectangles is more efficent then using multiple cogl_rectangle calls.
https://bugzilla.gnome.org/show_bug.cgi?id=688475
src/st/st-theme-node-drawing.c | 67 ++++++++++++++++++++++-----------------
1 files changed, 38 insertions(+), 29 deletions(-)
---
diff --git a/src/st/st-theme-node-drawing.c b/src/st/st-theme-node-drawing.c
index 429cc53..8d13ab7 100644
--- a/src/st/st-theme-node-drawing.c
+++ b/src/st/st-theme-node-drawing.c
@@ -1553,7 +1553,7 @@ st_theme_node_paint_borders (StThemeNode *node,
{
ClutterColor effective_border;
gboolean skip_corner_1, skip_corner_2;
- float x1, y1, x2, y2;
+ float rects[16];
over (&border_color, &node->background_color, &effective_border);
alpha = paint_opacity * effective_border.alpha / 255;
@@ -1569,46 +1569,44 @@ st_theme_node_paint_borders (StThemeNode *node,
skip_corner_1 = border_radius[ST_CORNER_TOPLEFT] > 0;
skip_corner_2 = border_radius[ST_CORNER_TOPRIGHT] > 0;
- x1 = skip_corner_1 ? max_width_radius[ST_CORNER_TOPLEFT] : 0;
- y1 = 0;
- x2 = skip_corner_2 ? width - max_width_radius[ST_CORNER_TOPRIGHT] : width;
- y2 = border_width[ST_SIDE_TOP];
- cogl_rectangle (x1, y1, x2, y2);
+ rects[0] = skip_corner_1 ? max_width_radius[ST_CORNER_TOPLEFT] : 0;
+ rects[1] = 0;
+ rects[2] = skip_corner_2 ? width - max_width_radius[ST_CORNER_TOPRIGHT] : width;
+ rects[3] = border_width[ST_SIDE_TOP];
/* EAST */
skip_corner_1 = border_radius[ST_CORNER_TOPRIGHT] > 0;
skip_corner_2 = border_radius[ST_CORNER_BOTTOMRIGHT] > 0;
- x1 = width - border_width[ST_SIDE_RIGHT];
- y1 = skip_corner_1 ? max_width_radius[ST_CORNER_TOPRIGHT]
+ rects[4] = width - border_width[ST_SIDE_RIGHT];
+ rects[5] = skip_corner_1 ? max_width_radius[ST_CORNER_TOPRIGHT]
: border_width[ST_SIDE_TOP];
- x2 = width;
- y2 = skip_corner_2 ? height - max_width_radius[ST_CORNER_BOTTOMRIGHT]
+ rects[6] = width;
+ rects[7] = skip_corner_2 ? height - max_width_radius[ST_CORNER_BOTTOMRIGHT]
: height - border_width[ST_SIDE_BOTTOM];
- cogl_rectangle (x1, y1, x2, y2);
/* SOUTH */
skip_corner_1 = border_radius[ST_CORNER_BOTTOMLEFT] > 0;
skip_corner_2 = border_radius[ST_CORNER_BOTTOMRIGHT] > 0;
- x1 = skip_corner_1 ? max_width_radius[ST_CORNER_BOTTOMLEFT] : 0;
- y1 = height - border_width[ST_SIDE_BOTTOM];
- x2 = skip_corner_2 ? width - max_width_radius[ST_CORNER_BOTTOMRIGHT]
+ rects[8] = skip_corner_1 ? max_width_radius[ST_CORNER_BOTTOMLEFT] : 0;
+ rects[9] = height - border_width[ST_SIDE_BOTTOM];
+ rects[10] = skip_corner_2 ? width - max_width_radius[ST_CORNER_BOTTOMRIGHT]
: width;
- y2 = height;
- cogl_rectangle (x1, y1, x2, y2);
+ rects[11] = height;
/* WEST */
skip_corner_1 = border_radius[ST_CORNER_TOPLEFT] > 0;
skip_corner_2 = border_radius[ST_CORNER_BOTTOMLEFT] > 0;
- x1 = 0;
- y1 = skip_corner_1 ? max_width_radius[ST_CORNER_TOPLEFT]
+ rects[12] = 0;
+ rects[13] = skip_corner_1 ? max_width_radius[ST_CORNER_TOPLEFT]
: border_width[ST_SIDE_TOP];
- x2 = border_width[ST_SIDE_LEFT];
- y2 = skip_corner_2 ? height - max_width_radius[ST_CORNER_BOTTOMLEFT]
+ rects[14] = border_width[ST_SIDE_LEFT];
+ rects[15] = skip_corner_2 ? height - max_width_radius[ST_CORNER_BOTTOMLEFT]
: height - border_width[ST_SIDE_BOTTOM];
- cogl_rectangle (x1, y1, x2, y2);
+
+ cogl_rectangles (rects, 4);
}
}
@@ -1875,6 +1873,7 @@ st_theme_node_paint_outline (StThemeNode *node,
{
float width, height;
int outline_width;
+ float rects[16];
ClutterColor outline_color, effective_outline;
width = box->x2 - box->x1;
@@ -1899,20 +1898,30 @@ st_theme_node_paint_outline (StThemeNode *node,
*/
/* NORTH */
- cogl_rectangle (-outline_width, -outline_width,
- width + outline_width, 0);
+ rects[0] = -outline_width;
+ rects[1] = -outline_width;
+ rects[2] = width + outline_width;
+ rects[3] = 0;
/* EAST */
- cogl_rectangle (width, 0,
- width + outline_width, height);
+ rects[4] = width;
+ rects[5] = 0;
+ rects[6] = width + outline_width;
+ rects[7] = height;
/* SOUTH */
- cogl_rectangle (-outline_width, height,
- width + outline_width, height + outline_width);
+ rects[8] = -outline_width;
+ rects[9] = height;
+ rects[10] = width + outline_width;
+ rects[11] = height + outline_width;
/* WEST */
- cogl_rectangle (-outline_width, 0,
- 0, height);
+ rects[12] = -outline_width;
+ rects[13] = 0;
+ rects[14] = 0;
+ rects[15] = height;
+
+ cogl_rectangles (rects, 4);
}
void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]