root/apps/opengl_demo/layout.cpp

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. setup
  2. draw_texture
  3. draw_image

#include <string>

#include "opengl_helpers.h"

#include "layout.h"

using namespace Layout;

static const int border_sz = 10; // pixels
static const int header_sz = 20; // pixels

static struct info state;

const struct info &Layout::setup(int image_width, int image_height)
{
    state.window_width = 2*image_width + 3*border_sz;
    state.window_height = 2*image_height + border_sz + 2*header_sz;
    return state;
}


void Layout::draw_texture(enum location location, GLuint texture_id, int width, int height, const std::string &label)
{
    int x0, x1, y0, y1, lx, ly;
    switch (location) { // set X coords
        case LL:
        case UL:
            x0 = border_sz;             x1 = x0 + width;
            lx = x0 + 2;
            break;
        case LR:
        case UR:
            x1 = state.window_width - border_sz;        x0 = x1 - width;
            lx = x0 + 2;
            break;
    }
    switch (location) { // set Y coords
        case LL:
        case LR:
            y0 = header_sz;             y1 = y0 + height;
            ly = 6;
            break;
        case UL:
        case UR:
            y1 = state.window_height - header_sz;        y0 = y1 - height;
            ly = y1 + 6;
            break;
    }

    OpenGLHelpers::display_texture(texture_id, 2.0*x0/state.window_width-1.0, 2.0*x1/state.window_width-1.0, 2.0*y0/state.window_height-1.0, 2.0*y1/state.window_height-1.0);
    OpenGLHelpers::draw_text(label, 2.0*lx/state.window_width-1.0, 2.0*ly/state.window_height-1.0);
}

void Layout::draw_image(enum location location, const uint8_t *data, int width, int height, const std::string &label)
{
    const auto texture_id = OpenGLHelpers::create_texture(width, height, data);
    draw_texture(location, texture_id, width, height, label);
    OpenGLHelpers::delete_texture(texture_id);
}

/* [<][>][^][v][top][bottom][index][help] */