#include #include "pui.h" static const int trough1_cut = 15; static const int trough2_cut = 20; static const int pad = 20; float HSlider::GetNewValue(int x, int y) { int x2 = this->x + pad; int w2 = this->w - pad - pad; if (x <= x2) return min; if (x >= x2 + w2) return max; return (x - x2) * (max - min) / w2 + min; } void HSlider::OnPaint(const PUi *pui) const { float m = (value - min) / (max - min); // printf("%d\n", tex[TEX_TROUGH1]); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); glEnable(GL_TEXTURE_2D); int t = big ? TEX_TROUGH1 : TEX_TROUGH1; int w2 = pui->w[t]; int h2 = pui->h[t]; int mx, my; mx = (w - w2) * 0.5f + x; my = (h - h2) * 0.5f + y; int cut = big ? trough2_cut : trough1_cut; float fc = (float)cut / h2; glBindTexture(GL_TEXTURE_2D, pui->tex[t]); glBegin(GL_QUADS); glColor3f(1.0, 1.0, 1.0); glTexCoord2f(0.0, 0.0); glVertex2f( mx, y); glTexCoord2f(0.0, fc); glVertex2f( mx, y + cut); glTexCoord2f(1.0, fc); glVertex2f(w2 + mx, y + cut); glTexCoord2f(1.0, 0.0); glVertex2f(w2 + mx, y); glTexCoord2f(0.0, fc); glVertex2f( mx, y + cut); glTexCoord2f(0.0, 1.0 - fc); glVertex2f( mx, h + y - cut); glTexCoord2f(1.0, 1.0 - fc); glVertex2f(w2 + mx, h + y - cut); glTexCoord2f(1.0, fc); glVertex2f(w2 + mx, y + cut); glTexCoord2f(0.0, 1.0 - fc); glVertex2f( mx, h + y - cut); glTexCoord2f(0.0, 1.0); glVertex2f( mx, h + y); glTexCoord2f(1.0, 1.0); glVertex2f(w2 + mx, h + y); glTexCoord2f(1.0, 1.0 - fc); glVertex2f(w2 + mx, h + y - cut); /* glTexCoord2f(0.0, 0.0); glVertex2f( mx, my); glTexCoord2f(0.0, 1.0); glVertex2f( mx, h2 + my); glTexCoord2f(1.0, 1.0); glVertex2f(w2 + mx, h2 + my); glTexCoord2f(1.0, 0.0); glVertex2f(w2 + mx, my);*/ glEnd(); if (big) { t = active ? TEX_SLIDER2_PRE : TEX_SLIDER2; } else { t = active ? TEX_SLIDER1_PRE : TEX_SLIDER1; } w2 = pui->w[t]; h2 = pui->h[t]; int x3 = this->x + pad; int w3 = this->w - pad - pad; mx = w3 * m + x3 - w2 * 0.5f; my = (h - h2) * 0.5f + y; glBindTexture(GL_TEXTURE_2D, pui->tex[t]); glBegin(GL_QUADS); if (this->colour.a) glColor4f(colour.r, colour.g, colour.b, colour.a); glTexCoord2f(0.0, 0.0); glVertex2f( mx, my); glTexCoord2f(0.0, 1.0); glVertex2f( mx, h2 + my); glTexCoord2f(1.0, 1.0); glVertex2f(w2 + mx, h2 + my); glTexCoord2f(1.0, 0.0); glVertex2f(w2 + mx, my); glEnd(); glDisable(GL_TEXTURE_2D); /* glBegin(GL_QUADS); glColor4f(0.5f, 0.3f, 0.5f, 0.5f); glVertex2f( x, y); glVertex2f( x, h + y); glVertex2f(w + x, h + y); glVertex2f(w + x, y); glEnd();*/ } float VSlider::GetNewValue(int x, int y) { int y2 = this->y + pad; int h2 = this->h - pad - pad; if (y <= y2) return max; if (y >= y2 + h2) return min; return (y2 + h2 - y) * (max - min) / h2 + min; } void VSlider::OnPaint(const PUi *pui) const { float m = (value - min) / (max - min); // printf("%d\n", tex[TEX_TROUGH1]); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); glEnable(GL_TEXTURE_2D); int t = big ? TEX_TROUGH1 : TEX_TROUGH1; int w2 = pui->w[t]; int h2 = pui->h[t]; int mx, my; mx = (w - w2) * 0.5f + x; my = (h - h2) * 0.5f + y; int cut = big ? trough2_cut : trough1_cut; float fc = (float)cut / h2; glBindTexture(GL_TEXTURE_2D, pui->tex[t]); glBegin(GL_QUADS); glColor3f(1.0, 1.0, 1.0); glTexCoord2f(0.0, 0.0); glVertex2f( mx, y); glTexCoord2f(0.0, fc); glVertex2f( mx, y + cut); glTexCoord2f(1.0, fc); glVertex2f(w2 + mx, y + cut); glTexCoord2f(1.0, 0.0); glVertex2f(w2 + mx, y); glTexCoord2f(0.0, fc); glVertex2f( mx, y + cut); glTexCoord2f(0.0, 1.0 - fc); glVertex2f( mx, h + y - cut); glTexCoord2f(1.0, 1.0 - fc); glVertex2f(w2 + mx, h + y - cut); glTexCoord2f(1.0, fc); glVertex2f(w2 + mx, y + cut); glTexCoord2f(0.0, 1.0 - fc); glVertex2f( mx, h + y - cut); glTexCoord2f(0.0, 1.0); glVertex2f( mx, h + y); glTexCoord2f(1.0, 1.0); glVertex2f(w2 + mx, h + y); glTexCoord2f(1.0, 1.0 - fc); glVertex2f(w2 + mx, h + y - cut); /* glTexCoord2f(0.0, 0.0); glVertex2f( mx, my); glTexCoord2f(0.0, 1.0); glVertex2f( mx, h2 + my); glTexCoord2f(1.0, 1.0); glVertex2f(w2 + mx, h2 + my); glTexCoord2f(1.0, 0.0); glVertex2f(w2 + mx, my);*/ glEnd(); if (big) { t = active ? TEX_SLIDER2_PRE : TEX_SLIDER2; } else { t = active ? TEX_SLIDER1_PRE : TEX_SLIDER1; } w2 = pui->w[t]; h2 = pui->h[t]; int y3 = this->y + pad; int h3 = this->h - pad - pad; mx = (w - w2) * 0.5f + x; my = h3 - h3 * m + y3 - h2 * 0.5f; glBindTexture(GL_TEXTURE_2D, pui->tex[t]); glBegin(GL_QUADS); if (this->colour.a) glColor4f(colour.r, colour.g, colour.b, colour.a); glTexCoord2f(0.0, 0.0); glVertex2f( mx, my); glTexCoord2f(0.0, 1.0); glVertex2f( mx, h2 + my); glTexCoord2f(1.0, 1.0); glVertex2f(w2 + mx, h2 + my); glTexCoord2f(1.0, 0.0); glVertex2f(w2 + mx, my); glEnd(); glDisable(GL_TEXTURE_2D); if (this->active) { glBegin(GL_LINE_LOOP); glColor4f(1.f, 1.f, 1.0f, 0.25f); glVertex2f( x + .5f, y + .5f); glVertex2f( x + .5f, h + y - .5f); glVertex2f(w + x - .5f, h + y - .5f); glVertex2f(w + x - .5f, y + .5f); glEnd(); } }