• Main Page
  • Related Pages
  • Classes
  • Files
  • File List
  • File Members

win_border.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 
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);//new
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);//new
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 

Generated on Mon Sep 12 2011 for Adonthell by  doxygen 1.7.1