#include "TuningContext.h" #include "TuningCanvas.h" #include "ColorTheme.h" // http://stackoverflow.com/questions/7276826/c-format-number-with-commas class comma_numpunct: public std::numpunct { protected: virtual char do_thousands_sep() const { return ','; } virtual std::string do_grouping() const { return "\03"; } }; TuningContext::TuningContext(TuningCanvas *canvas, wxGLContext *sharedContext) : PrimaryGLContext(canvas, sharedContext) { glDisable(GL_CULL_FACE); glDisable(GL_DEPTH_TEST); glMatrixMode(GL_PROJECTION); glLoadIdentity(); comma_locale = std::locale(std::locale(), new comma_numpunct()); freqStr.imbue(comma_locale); } void TuningContext::DrawBegin() { glClearColor(ThemeMgr::mgr.currentTheme->generalBackground.r, ThemeMgr::mgr.currentTheme->generalBackground.g, ThemeMgr::mgr.currentTheme->generalBackground.b, 1.0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glDisable(GL_TEXTURE_2D); } void TuningContext::Draw(float r, float g, float b, float a, float p1, float p2) { glEnable(GL_BLEND); glBlendFunc(GL_ONE, GL_ONE); glBegin(GL_QUADS); glColor4f(r*0.5, g*0.5, b*0.5, a); glVertex2f(-1.0+p2*2.0, 1.0); glVertex2f(-1.0+p1*2.0, 1.0); glColor4f(r, g, b, a); glVertex2f(-1.0+p1*2.0, 0.0); glVertex2f(-1.0+p2*2.0, 0.0); glVertex2f(-1.0+p2*2.0, 0.0); glVertex2f(-1.0+p1*2.0, 0.0); glColor4f(r*0.5, g*0.5, b*0.5, a); glVertex2f(-1.0+p1*2.0, -1.0); glVertex2f(-1.0+p2*2.0, -1.0); glEnd(); glDisable(GL_BLEND); } void TuningContext::DrawEnd() { glFlush(); CheckGLError(); } void TuningContext::DrawDemodFreqBw(long long freq, unsigned int bw, long long center) { GLint vp[4]; glGetIntegerv( GL_VIEWPORT, vp); float viewHeight = (float) vp[3]; float viewWidth = (float) vp[2]; PrimaryGLContext::GLFontSize fontSize = GLFONT_SIZE16; int fontHeight = 16; if (viewWidth < 400) { fontSize = GLFONT_SIZE12; fontHeight = 12; } glColor3f(ThemeMgr::mgr.currentTheme->text.r, ThemeMgr::mgr.currentTheme->text.g, ThemeMgr::mgr.currentTheme->text.b); getFont(fontSize).drawString("Freq: ", -0.75, 0, fontHeight, GLFont::GLFONT_ALIGN_RIGHT, GLFont::GLFONT_ALIGN_CENTER); if (freq) { freqStr.str(""); freqStr << std::fixed << freq << " Hz"; } else { freqStr.str("---"); } getFont(fontSize).drawString(freqStr.str(), -0.75, 0, fontHeight, GLFont::GLFONT_ALIGN_LEFT, GLFont::GLFONT_ALIGN_CENTER); getFont(fontSize).drawString("BW: ", -0.10, 0, fontHeight, GLFont::GLFONT_ALIGN_RIGHT, GLFont::GLFONT_ALIGN_CENTER); if (bw) { freqStr.str(""); freqStr << std::fixed << bw << " Hz"; } else { freqStr.str("---"); } getFont(fontSize).drawString(freqStr.str(), -0.10, 0, fontHeight, GLFont::GLFONT_ALIGN_LEFT, GLFont::GLFONT_ALIGN_CENTER); getFont(fontSize).drawString("CTR: ", 0.50, 0, fontHeight, GLFont::GLFONT_ALIGN_RIGHT, GLFont::GLFONT_ALIGN_CENTER); if (center) { freqStr.str(""); freqStr << std::fixed << center << " Hz"; } else { freqStr.str("---"); } getFont(fontSize).drawString(freqStr.str(), 0.50, 0, fontHeight, GLFont::GLFONT_ALIGN_LEFT, GLFont::GLFONT_ALIGN_CENTER); glColor3f(0.65, 0.65, 0.65); glBegin(GL_LINES); glVertex2f(-0.275, -1.0); glVertex2f(-0.275, 1.0); glVertex2f(0.275, -1.0); glVertex2f(0.275, 1.0); glEnd(); }