Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

144 lines (122 sloc) 3.56 kb
/*
Copyright (C) 2007 by David White <dave@whitevine.net>
Part of the Silver Tree Project
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License version 2 or later.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY.
See the COPYING file for more details.
*/
#include "image_widget.hpp"
#include "raster.hpp"
#include <iostream>
namespace gui {
image_widget::image_widget(const std::string& fname, int w, int h)
: texture_(graphics::texture::get(fname)), rotate_(0.0)
{
set_environment();
init(w, h);
}
image_widget::image_widget(graphics::texture tex, int w, int h)
: texture_(tex), rotate_(0.0)
{
set_environment();
init(w, h);
}
image_widget::image_widget(const variant& v, game_logic::formula_callable* e)
{
set_environment();
texture_ = graphics::texture::get(v["image"].as_string());
rotate_ = v.has_key("rotation") ? v["rotation"].as_decimal().as_float() : 0.0;
init(v["image_width"].as_int(), v["image_height"].as_int());
}
void image_widget::init(int w, int h)
{
if(w < 0) {
w = texture_.width();
}
if(h < 0) {
h = texture_.height();
}
set_dim(w,h);
}
void image_widget::handle_draw() const
{
if(area_.w() == 0) {
graphics::blit_texture(texture_, x(), y(), width(), height(), rotate_);
} else {
graphics::blit_texture(texture_, x(), y(), width(), height(), rotate_,
GLfloat(area_.x())/texture_.width(),
GLfloat(area_.y())/texture_.height(),
GLfloat(area_.x2())/texture_.width(),
GLfloat(area_.y2())/texture_.height());
}
}
void image_widget::set_value(const std::string& key, const variant& v)
{
if(key == "image") {
texture_ = graphics::texture::get(v.as_string());
} else if(key == "rotation") {
rotate_ = v.as_decimal().as_float();
}
return widget::set_value(key, v);
}
variant image_widget::get_value(const std::string& key) const
{
if(key == "image") {
return variant(texture_.get_id());
} else if(key == "rotation") {
return variant(rotate_);
} else if(key == "image_width") {
return variant(texture_.width());
} else if(key == "image_height") {
return variant(texture_.height());
}
return widget::get_value(key);
}
gui_section_widget::gui_section_widget(const std::string& id, int w, int h, int scale)
: section_(gui_section::get(id)), scale_(scale)
{
set_environment();
if(section_ && w == -1) {
set_dim((section_->width()/2)*scale_, (section_->height()/2)*scale_);
} else {
set_dim(w,h);
}
}
gui_section_widget::gui_section_widget(const variant& v, game_logic::formula_callable* e)
: widget(v,e)
{
section_ = gui_section::get(v);
scale_ = v["scale"].as_int(1);
if(!v.has_key("width") && section_) {
set_dim((section_->width()/2)*scale_, (section_->height()/2)*scale_);
}
}
void gui_section_widget::set_gui_section(const std::string& id)
{
section_ = gui_section::get(id);
}
void gui_section_widget::handle_draw() const
{
if(section_) {
section_->blit(x(), y(), width(), height());
}
}
void gui_section_widget::set_value(const std::string& key, const variant& v)
{
if(key == "name") {
set_gui_section(v.as_string());
} else if(key == "scale" && section_) {
set_dim((section_->width()/2)*scale_, (section_->height()/2)*scale_);
}
widget::set_value(key, v);
}
variant gui_section_widget::get_value(const std::string& key) const
{
if(key == "scale") {
return variant(scale_);
}
return widget::get_value(key);
}
}
Jump to Line
Something went wrong with that request. Please try again.