Adonthell 0.4

win_background.cc

00001 /*   
00002    (C) Copyright 2000 Joel Vennin
00003    Part of the Adonthell Project http://adonthell.linuxgames.com
00004    
00005    This program is free software; you can redistribute it and/or modify
00006    it under the terms of the GNU General Public License.
00007    This program is distributed in the hope that it will be useful,
00008    but WITHOUT ANY WARRANTY.
00009 
00010    See the COPYING file for more details
00011 */
00012 #include <string.h>
00013 #include "win_theme.h"
00014 #include "win_background.h"
00015 
00016 win_background::win_background()
00017 {
00018   wb_=NULL;
00019 
00020   init();
00021 
00022   set_visible_background(false);
00023   
00024   set_brightness_background(false);
00025   
00026   set_trans_background(true); 
00027 }
00028 
00029 
00030 win_background::win_background(win_base * wb)
00031 {
00032   wb_=wb;
00033 
00034   init();
00035 
00036   set_visible_background(false);
00037   
00038   set_brightness_background(false);
00039   
00040   set_trans_background(true); 
00041 }
00042 
00043 
00044 win_background::win_background(char *rep)
00045 {
00046   wb_=NULL;
00047  
00048   init();
00049 
00050   set_visible_background(false);
00051   
00052   set_brightness_background(false);
00053   
00054   set_trans_background(true);
00055   
00056   win_background::load(rep);
00057   
00058   refresh();
00059 }
00060 
00061 
00062 win_background::win_background(win_background & wb)
00063 {
00064   wb_=NULL;
00065 
00066   init();
00067   
00068   set_visible_background(false);
00069   
00070   set_brightness_background(false);
00071 
00072   set_trans_background(true);
00073 
00074   *this=wb;
00075   
00076   refresh();
00077 }
00078 
00079 
00080 win_background::~win_background()
00081 {
00082   destroy();
00083 }
00084 
00085 
00086 void win_background::destroy()
00087 {
00088   if(background_template_) delete background_template_;
00089   if(background_) delete background_;
00090   if(background_brightness_) delete background_brightness_;
00091   init();
00092 }
00093 
00094 
00095 void win_background::init()
00096 {
00097   background_template_=NULL;
00098   background_=NULL;
00099   background_brightness_=NULL;
00100   background_draw_=NULL;
00101 }
00102 
00103 
00104 win_background & win_background::operator=(win_background & wb)
00105 {  
00106   destroy();
00107   background_template_=new image();
00108   *background_template_=*(wb.background_template_);
00109   background_=new image();
00110   background_->set_mask(false);
00111   background_brightness_= new image();
00112   background_brightness_->set_mask(true);
00113   
00114   update();
00115   
00116   return *this;
00117   
00118 }
00119 
00120 
00121 void win_background::set_background(win_background & wb)
00122 {
00123   *this=wb;
00124   refresh();
00125 }
00126 
00127 void win_background::set_background(win_theme & wt)
00128 {
00129   *this=*(wt.background);
00130   refresh();
00131 }
00132 
00133 void win_background::set_brightness_background(bool b)
00134 {
00135   brightness_=b;
00136   refresh();
00137 }
00138 
00139 void win_background::refresh()
00140 {
00141   background_draw_=(brightness_)? background_brightness_ : background_ ;
00142 }
00143 
00144 void win_background::load(char *rep)
00145 {
00146   destroy();
00147   char path[255];
00148   strcpy(path,WIN_DIRECTORY);
00149   strcat(path,WIN_BACKGROUND_DIRECTORY);
00150   strcat(path,rep);
00151   strcat(path,WIN_BACKGROUND_FILE);
00152   background_template_=new image();
00153   background_template_->load_pnm(path);//new
00154   
00155   background_=new image();
00156   background_->set_mask(true);
00157   
00158   background_brightness_=new image();
00159   background_brightness_->set_mask(true);
00160 }
00161 
00162 
00163 void win_background::update()
00164 {
00165   if(!background_template_) return ;
00166   
00167   background_->resize(wb_->length(),wb_->height());
00168   background_->tile(*background_template_);
00169   background_brightness_->brightness(*background_,WIN_BRIGHTNESS_LEVEL);
00170 }
00171 
00172 
00173 void win_background::draw(drawing_area * da)
00174 {
00175   if(!visible_ || !background_draw_ || !wb_) return; 
00176   background_draw_->draw(wb_->real_x(),wb_->real_y(),da);
00177 }
00178 
00179 
00180 void win_background::set_trans_background(bool b)
00181 {
00182   if(!background_template_) return;
00183   if(b)
00184     {
00185       background_->set_alpha(130);
00186       background_brightness_->set_alpha(130);
00187     }
00188   else
00189     {
00190       background_->set_alpha(255);
00191       background_brightness_->set_alpha(255);
00192     }
00193 }
00194 
00195 
00196 
00197 
00198 
00199 
00200 
00201