Adonthell 0.4
|
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