rendered paste bodyvoid GLSingleView::loadImage()
{
loadingImage = true;
ThumbItem *item = m_itemList.at(m_pos);
if (!item) {
std::cerr << "GLSingleView: The impossible happened. No item at "
<< m_pos << std::endl;
return;
}
QImage image(item->path);
if (!image.isNull()) {
// get screen aspect
Display *display;
display = XOpenDisplay(NULL);
int scr = DefaultScreen(display);
int s_height_mm = DisplayHeightMM(display,scr);
int s_width_mm = DisplayWidthMM(display,scr);
int s_height_px = DisplayHeight(display,scr);
int s_width_px = DisplayWidth(display,scr);
XCloseDisplay(display);
double aspect_h = (double)s_height_px/(double)s_height_mm;
double aspect_w = (double)s_width_px/(double)s_width_mm;
double scale_factor_w = 1;
scale_factor_w = aspect_w / aspect_h;
int a = m_tex1First ? 0 : 1;
TexItem& t = m_texItem[a];
t.item = item;
t.angle = 0;
QString queryStr = "SELECT angle FROM gallerymetadata WHERE "
"image=\"" + item->path + "\";";
QSqlQuery query = m_db->exec(queryStr);
if (query.isActive() && query.numRowsAffected() > 0)
{
query.next();
t.angle = query.value(0).toInt();
}
t.width = (int)round(image.width() * scale_factor_w);
t.height = (int)round(image.height());
if (t.angle%180 != 0) {
int tmp = t.width;
t.width = t.height;
t.height = tmp;
}
QSize sz(t.width,t.height);
sz.scale(screenwidth, screenheight, QSize::ScaleMin);
t.cx = (float)sz.width()/(float)screenwidth;
t.cy = (float)sz.height()/(float)screenheight;
image = image.smoothScale(m_w, m_h);
QImage tex = convertToGLFormat(image);
if (t.tex) {
glDeleteTextures(1, &t.tex);
}
/* create the texture */
glGenTextures(1, &t.tex);
glBindTexture(GL_TEXTURE_2D, t.tex);
/* actually generate the texture */
glTexImage2D( GL_TEXTURE_2D, 0, 3, tex.width(), tex.height(), 0,
GL_RGBA, GL_UNSIGNED_BYTE, tex.bits() );
/* enable linear filtering */
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
}
loadingImage = false;
}