/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- * vim: set ts=8 sts=4 et sw=4 tw=99: * * glcommon GL code & font stuff * * Copyright (c) 2011-2014 Mark Watkins * * This file is subject to the terms and conditions of the GNU General Public * License. See the file COPYING in the main directory of the Linux * distribution for more details. */ #include #include "glcommon.h" #ifdef BUILD_WITH_MSVC double round(double number) { return number < 0.0 ? ceil(number - 0.5) : floor(number + 0.5); } #endif void RoundedRectangle(int x, int y, int w, int h, int radius, const QColor color) { glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glColor4ub(color.red(), color.green(), color.blue(), color.alpha()); glBegin(GL_POLYGON); glVertex2i(x + radius, y); glVertex2i(x + w - radius, y); for (float i = (float)M_PI * 1.5f; i < M_PI * 2; i += 0.1f) { glVertex2f(x + w - radius + cos(i)*radius, y + radius + sin(i)*radius); } glVertex2i(x + w, y + radius); glVertex2i(x + w, y + h - radius); for (float i = 0; i < (float)M_PI * 0.5f; i += 0.1f) { glVertex2f(x + w - radius + cos(i)*radius, y + h - radius + sin(i)*radius); } glVertex2i(x + w - radius, y + h); glVertex2i(x + radius, y + h); for (float i = (float)M_PI * 0.5f; i < M_PI; i += 0.1f) { glVertex2f(x + radius + cos(i)*radius, y + h - radius + sin(i)*radius); } glVertex2i(x, y + h - radius); glVertex2i(x, y + radius); for (float i = (float)M_PI; i < M_PI * 1.5f; i += 0.1f) { glVertex2f(x + radius + cos(i)*radius, y + radius + sin(i)*radius); } glEnd(); glDisable(GL_BLEND); } void LinedRoundedRectangle(int x, int y, int w, int h, int radius, int lw, QColor color) { //glDisable(GL_TEXTURE_2D); glShadeModel(GL_SMOOTH); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glColor4ub(color.red(), color.green(), color.blue(), color.alpha()); glLineWidth((GLfloat)lw); glBegin(GL_LINE_STRIP); for (float i = (float)M_PI; i <= 1.5f * M_PI; i += 0.1f) { glVertex2f(radius * cos(i) + x + radius, radius * sin(i) + y + radius); } for (float i = 1.5f * (float)M_PI; i <= 2 * M_PI; i += 0.1f) { glVertex2f(radius * cos(i) + x + w - radius, radius * sin(i) + y + radius); } for (float i = 0; i <= 0.5f * M_PI; i += 0.1f) { glVertex2f(radius * cos(i) + x + w - radius, radius * sin(i) + y + h - radius); } for (float i = 0.5f * (float)M_PI; i <= M_PI; i += 0.1f) { glVertex2f(radius * cos(i) + x + radius, radius * sin(i) + y + h - radius); } glVertex2i(x, y + radius); glEnd(); //glEnable(GL_TEXTURE_2D); glDisable(GL_BLEND); }