rendered paste body/* * groupCreateCairoContext * */void groupCreateCairoContext(GroupSelection *group, CompScreen *s){ GroupTabBar *bar = group->tabBar; GroupCairoContext *cc = (GroupCairoContext*) malloc(sizeof(GroupCairoContext)); cc->surface = NULL; cc->cairo = NULL; cc->texBuf = NULL; cc->texture = 0; int w, h; w = group->tabBar->region->extents.x2 - group->tabBar->region->extents.x1; h = group->tabBar->region->extents.y2 - group->tabBar->region->extents.y1; cc->texBuf = calloc (4 * w * h, sizeof (unsigned char)); glGenTextures(1, &cc->texture); glEnable(GL_TEXTURE_RECTANGLE_ARB); glBindTexture(GL_TEXTURE_RECTANGLE_ARB, cc->texture); glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, cc->texBuf); glDisable(GL_TEXTURE_RECTANGLE_ARB); // creating the surface for cairo cc->surface = cairo_image_surface_create_for_data (cc->texBuf, CAIRO_FORMAT_ARGB32, w, h, 4 * w); if (cairo_surface_status(cc->surface) != CAIRO_STATUS_SUCCESS) { free(cc->texBuf); printf ("create_cairo_context() - Couldn't create surface\n"); return; } // creating the cairo handler cc->cairo = cairo_create(cc->surface); if (cairo_status(cc->cairo) != CAIRO_STATUS_SUCCESS) { free(cc->texBuf); printf ("create_cairo_context() - Couldn't create context\n"); return; } // clean the context groupClearCairoContext(cc); bar->cc = cc;}/* * groupPaintTabBar * */void groupPaintTabBar(GroupSelection * group){ if (!group->topTab || (group->tabBar->state == TabBarOff)) return; CompWindow *topTab = TOP_TAB(group); CompScreen *s = topTab->screen; GROUP_SCREEN(s); glDisableClientState(GL_TEXTURE_COORD_ARRAY); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); int width, height; width = group->tabBar->region->extents.x2 - group->tabBar->region->extents.x1; height = group->tabBar->region->extents.y2 - group->tabBar->region->extents.y1; // text glEnable(GL_TEXTURE_RECTANGLE_ARB); glBindTexture(GL_TEXTURE_RECTANGLE_ARB, group->tabBar->cc->texture); glBegin(GL_QUADS); glTexCoord2i(0, 0); glVertex2i(group->tabBar->region->extents.x1, group->tabBar->region->extents.y1); glTexCoord2i(width, 0); glVertex2i(group->tabBar->region->extents.x2, group->tabBar->region->extents.y1); glTexCoord2i(width, height); glVertex2i(group->tabBar->region->extents.x2, group->tabBar->region->extents.y2); glTexCoord2i(0, height); glVertex2i(group->tabBar->region->extents.x1, group->tabBar->region->extents.y2); glEnd(); glDisable(GL_TEXTURE_RECTANGLE_ARB); glColor4usv(defaultColor); glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); glDisable(GL_BLEND); glEnableClientState(GL_TEXTURE_COORD_ARRAY);}