00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #include "win_theme.h"
00014 #include "win_border.h"
00015
00016
00017 win_border::win_border()
00018 {
00019 wb_=NULL;
00020
00021 init();
00022
00023 set_trans_border(false);
00024
00025 set_visible_border( false );
00026
00027 set_brightness_border( false );
00028
00029 }
00030
00031
00032 win_border::win_border(win_base *wb)
00033 {
00034 wb_=wb;
00035
00036 init();
00037
00038 set_trans_border(false);
00039
00040 set_visible_border( false );
00041
00042 set_brightness_border( false );
00043 }
00044
00045 win_border::win_border(char * rep,const char * size)
00046 {
00047 wb_=NULL;
00048
00049 init();
00050
00051 set_visible_border( false );
00052
00053 set_trans_border(false);
00054
00055 set_brightness_border( false );
00056
00057 win_border::load(rep,size);
00058
00059 refresh();
00060 }
00061
00062
00063 win_border::win_border(win_border & wb)
00064 {
00065 wb_=NULL;
00066
00067 init();
00068
00069 set_visible_border( false );
00070
00071 set_trans_border(false);
00072
00073 set_brightness_border( false );
00074
00075 *this=wb;
00076
00077 refresh();
00078 }
00079
00080 win_border::~win_border()
00081 {
00082 destroy();
00083 }
00084
00085
00086 void win_border::set_border(win_border & wb)
00087 {
00088 *this=wb;
00089
00090 refresh();
00091 }
00092
00093
00094 void win_border::set_border(win_theme & wt, u_int8 size)
00095 {
00096 switch(size)
00097 {
00098 case NORMAL:
00099 *this=*(wt.normal);
00100 break;
00101
00102 case MINI:
00103 *this=*(wt.mini);
00104 break;
00105 }
00106 refresh();
00107 }
00108
00109
00110 void win_border::init()
00111 {
00112 h_border_template_=NULL;
00113 v_border_template_=NULL;
00114 for(u_int8 i=0;i<NB_BORDER_IMAGE;i++)
00115 border_[i]=border_brightness_[i]=NULL;
00116 }
00117
00118 win_border & win_border::operator=(win_border & wb)
00119 {
00120
00121 destroy();
00122 h_border_template_=new image();
00123 *h_border_template_=*(wb.h_border_template_);
00124 v_border_template_=new image();
00125 *v_border_template_=*(wb.v_border_template_);
00126
00127 for(u_int8 i=0;i<NB_BORDER_IMAGE-2;i++)
00128 {
00129 border_[i]=new image();
00130 border_brightness_[i]=new image();
00131 *(border_[i])=*(wb.border_[i]);
00132 *(border_brightness_[i])=*(wb.border_brightness_[i]);
00133 border_[i]->set_mask(true);
00134 border_brightness_[i]->set_mask(true);
00135 }
00136
00137 for(u_int8 i=NB_BORDER_IMAGE-2;i<NB_BORDER_IMAGE;i++)
00138 {
00139 border_[i]=new image();
00140 border_brightness_[i]=new image();
00141 border_[i]->set_mask(true);
00142 border_brightness_[i]->set_mask(true);
00143 }
00144 update();
00145 return *this;
00146 }
00147
00148 void win_border::destroy()
00149 {
00150 if(h_border_template_) delete h_border_template_;
00151 if(v_border_template_) delete v_border_template_;
00152
00153 for(u_int8 i = 0; i< NB_BORDER_IMAGE; i++)
00154 {delete border_[i];delete border_brightness_[i];}
00155
00156 init();
00157 }
00158
00159 void win_border::load(char * rep,const char *size)
00160 {
00161 destroy();
00162
00163 char path[255];char tmp[255];
00164 strcpy(path,WIN_DIRECTORY);
00165 strcat(path,WIN_BORDER_DIRECTORY);
00166 strcat(path,rep);
00167 strcat(path,size);
00168
00169 h_border_template_=new image();
00170 strcpy(tmp,path);
00171 strcat(tmp,WIN_H_BORDER_TEMPLATE_FILE);
00172 h_border_template_->load_pnm(tmp);
00173
00174
00175 v_border_template_=new image();
00176 strcpy(tmp,path);
00177 strcat(tmp,WIN_V_BORDER_TEMPLATE_FILE);
00178 v_border_template_->load_pnm(tmp);
00179
00180
00181 border_[0]=new image();
00182 strcpy(tmp,path);
00183 strcat(tmp,WIN_CORNER_TOP_LEFT_FILE);
00184 border_[0]->load_pnm(tmp);
00185 border_brightness_[0]=new image();
00186 border_brightness_[0]->brightness(*(border_[0]),WIN_BRIGHTNESS_LEVEL);
00187 border_[0]->set_mask(true);
00188 border_brightness_[0]->set_mask(true);
00189
00190 border_[1]=new image();
00191 strcpy(tmp,path);
00192 strcat(tmp,WIN_CORNER_TOP_RIGHT_FILE);
00193 border_[1]->load_pnm(tmp);
00194 border_brightness_[1]=new image();
00195 border_brightness_[1]->brightness(*(border_[1]),WIN_BRIGHTNESS_LEVEL);
00196 border_[1]->set_mask(true);
00197 border_brightness_[1]->set_mask(true);
00198
00199
00200 border_[2]=new image();
00201 strcpy(tmp,path);
00202 strcat(tmp,WIN_CORNER_BOTTOM_LEFT_FILE);
00203 border_[2]->load_pnm(tmp);
00204 border_brightness_[2]=new image();
00205 border_brightness_[2]->brightness(*(border_[2]),WIN_BRIGHTNESS_LEVEL);
00206 border_[2]->set_mask(true);
00207 border_brightness_[2]->set_mask(true);
00208
00209
00210 border_[3]=new image();
00211 strcpy(tmp,path);
00212 strcat(tmp,WIN_CORNER_BOTTOM_RIGHT_FILE);
00213 border_[3]->load_pnm(tmp);
00214 border_brightness_[3]=new image();
00215 border_brightness_[3]->brightness(*(border_[3]),WIN_BRIGHTNESS_LEVEL);
00216 border_[3]->set_mask(true);
00217 border_brightness_[3]->set_mask(true);
00218
00219 for(u_int8 i=NB_BORDER_IMAGE-2;i<NB_BORDER_IMAGE;i++)
00220 {
00221 border_[i]=new image();
00222 border_brightness_[i]=new image();
00223 border_[i]->set_mask(true);
00224 border_brightness_[i]->set_mask(true);
00225 }
00226 }
00227
00228
00229 void win_border::update()
00230 {
00231 if(!h_border_template_ || !v_border_template_ || !wb_) return;
00232
00233 border_[4]->resize(v_border_template_->length(),wb_->height());
00234 border_[4]->tile(*v_border_template_);
00235 border_brightness_[4]->brightness(*(border_[4]),WIN_BRIGHTNESS_LEVEL);
00236
00237 border_[5]->resize(wb_->length(),h_border_template_->height());
00238 border_[5]->tile(*h_border_template_);
00239 border_brightness_[5]->brightness(*(border_[5]),WIN_BRIGHTNESS_LEVEL);
00240 }
00241
00242 u_int16 win_border::height_border()
00243 {
00244 if(h_border_template_) return h_border_template_->height();
00245 return 0;
00246 }
00247
00248 u_int16 win_border::length_border()
00249 {
00250 if(v_border_template_) return v_border_template_->length();
00251 return 0;
00252 }
00253
00254
00255 void win_border::set_trans_border(bool b)
00256 {
00257 if(!h_border_template_) return;
00258 if(b)
00259 for(u_int8 i=0; i<NB_BORDER_IMAGE;i++)
00260 {
00261 border_[i]->set_alpha(130);
00262 border_brightness_[i]->set_alpha(130);
00263 }
00264 else
00265 for(u_int8 i=0; i<NB_BORDER_IMAGE;i++)
00266 {
00267 border_[i]->set_alpha(255);
00268 border_brightness_[i]->set_alpha(255);
00269 }
00270 }
00271
00272
00273 void win_border::draw(drawing_area * da)
00274 {
00275 if(!h_border_template_ || !visible_border_ || !wb_) return;
00276
00277 u_int8 xodd = (border_draw_[0]->length () % 2);
00278 u_int8 yodd = (border_draw_[0]->length () % 2);
00279
00280 border_draw_[5]->draw(wb_->real_x(), wb_->real_y() - height_border(),da);
00281
00282 border_draw_[5]->draw(wb_->real_x(), wb_->real_y() + wb_->height(),da);
00283
00284 border_draw_[4]->draw(wb_->real_x() - length_border() , wb_->real_y(),da);
00285
00286 border_draw_[4]->draw(wb_->real_x() + wb_->length(), wb_->real_y(),da);
00287
00288 border_draw_[0]->draw(wb_->real_x() - (border_draw_[0]->length()>>1) - (length_border()>>1) - xodd,
00289 wb_->real_y() - (border_draw_[0]->height()>>1) - (height_border()>>1) - yodd, da);
00290
00291 border_draw_[1]->draw(wb_->real_x() + wb_->length() - (border_draw_[0]->length()>>1) + (length_border()>>1),
00292 wb_->real_y() - (border_draw_[0]->height()>>1) - (height_border()>>1) - yodd, da);
00293
00294 border_draw_[2]->draw(wb_->real_x() - (border_draw_[0]->length()>>1) - (length_border()>>1) - xodd ,
00295 wb_->real_y() + wb_->height() - (border_draw_[0]->height()>>1) + (height_border()>>1), da);
00296
00297 border_draw_[3]->draw(wb_->real_x() + wb_->length() - (border_draw_[0]->length()>>1) + (length_border()>>1),
00298 wb_->real_y() + wb_->height() - (border_draw_[0]->height()>>1) + (height_border()>>1), da);
00299 }
00300
00301
00302 void win_border::set_brightness_border(bool b)
00303 {
00304 brightness_=b;
00305 refresh();
00306 }
00307
00308
00309 void win_border::refresh()
00310 {
00311 border_draw_ = (brightness_) ? border_brightness_ : border_;
00312 }
00313
00314
00315
00316
00317
00318
00319
00320