home *** CD-ROM | disk | FTP | other *** search
/ PC PowerPlay 56 / CDPowerplay56Disc2.iso / demos / blade / data1.cab / Program_Executable_Files / Lib / Widgets / DistortFX.py next >
Encoding:
Python Source  |  2000-10-27  |  3.8 KB  |  123 lines

  1.  
  2.  
  3.  
  4. import Raster
  5. import BImagex
  6.  
  7.  
  8. class B_DistortFX:
  9.   def __init__(self,dist_size=45,color=(255,10,10)):
  10.     self.Filter=None
  11.     self.SelectionFilter=None
  12.     self.FilterUpdated=0      # 0 Si hay que recalcular el filtro
  13.     self.SelectionFilterUpdated=0
  14.     self._foc=0               # Indica si tiene el foco
  15.     self.FilterIncX=0
  16.     self.FilterIncY=2
  17.     self.DistSize=dist_size
  18.     self.R=color[0]
  19.     self.G=color[1]
  20.     self.B=color[2]
  21.     
  22.  
  23.   def __del__(self):
  24.     print "B_TextFXWidget.__del__()",self.Name()
  25.     if self.Filter is not None:
  26.       self.Filter.ClearBuffer()
  27.     #if self.SelectionFilter is not None:
  28.     #  self.SelectionFilter.ClearBuffer()
  29.  
  30.  
  31.   def __str__(self):
  32.     print "B_TextFXWidget widget with text",self.GetTextData()
  33.  
  34.   def CreateDistorsion(self,x,y,time=0):
  35.     w,h=self.GetSize()
  36.     self.SelectionFilter=BImagex.B_SideDistortFilter()
  37.     self.SetColor(self.R,self.G,self.B)
  38.     self.FilterIncX=self.FilterIncX+6
  39.     self.FilterIncY=2
  40.     self.SelectionFilter.SetDistance(self.FilterIncX)
  41.     self.DefDraw(x,y,time)
  42.     self.SelectionFilter.SetImageBuffer(w+2*self.FilterIncX,h+2*self.FilterIncY)
  43.  
  44.     bud_address=self.SelectionFilter.GetImageBuffer()
  45.     Raster.GetImage(x-self.FilterIncX,y-self.FilterIncY,w+2*self.FilterIncX,h+2*self.FilterIncY,
  46.                   "RGB","",self.SelectionFilter.GetBufferSize(),bud_address)
  47.  
  48.     self.SelectionFilter.CopyToBuffer2()
  49.     self.SelectionFilter.Apply()
  50.     #self.SelectionFilter.GetFromBuffer2("Substract")
  51.  
  52.  
  53.   def CreateBlur(self,x,y,time=0,width=0,height=0):
  54.     if width!=0 and height!=0:
  55.       w,h=width,height
  56.     else:
  57.       w,h=self.GetSize()
  58.     self.Filter=BImagex.B_GridSubFilter()
  59.  
  60.     if self.AcceptsFocus():
  61.       self.SetColor(self.R,self.G,self.B)
  62.     else:    
  63.       self.SetColor(self.R * 0.23,self.G * 0.23,self.B * 0.23)
  64.  
  65.     self.Filter.SetCoefficients([ 0 , 1 , 1 , 1 , 0 ,
  66.                                   0 , 1 , 1 , 1 , 0 ,
  67.                                   0 , 1 , 1 , 1 , 0 ,
  68.                                   0 , 1 , 1 , 1 , 0 ,
  69.                                   0 , 1 , 1 , 1 , 0])
  70.     self.DefDraw(x,y,time)
  71.     self.Filter.SetImageBuffer(w+4,h+4)
  72.  
  73.     bud_address=self.Filter.GetImageBuffer()
  74.     Raster.GetImage(x-2,y-2,w+4,h+4,"RGB","",self.Filter.GetBufferSize(),bud_address)
  75.     #self.Filter.Apply()
  76.  
  77.  
  78.   def Draw(self,x,y,time):
  79.     if self.GetVisible()==0:
  80.       return
  81.  
  82.     foc=self.GetHasFocus()
  83.     if foc!=self._foc:
  84.       self.SelectionFilterUpdated=0
  85.       self.FilterIncX=0
  86.  
  87.     self._foc=foc
  88.     w,h=self.GetSize()
  89.  
  90.     if not foc:
  91.       if self.SelectionFilterUpdated:
  92.         Raster.SetPosition(x-self.FilterIncX,y-self.FilterIncY)
  93.         Raster.DrawImage(w+2*self.FilterIncX,h+2*self.FilterIncY,"RGB","Native",self.SelectionFilter.GetImageBuffer())
  94.         return
  95.     else:
  96.       if self.FilterUpdated:
  97.         Raster.SetPosition(x-2,y-2)
  98.         Raster.DrawImage(w+4,h+4,"RGB","Native",self.Filter.GetImageBuffer())
  99.         return
  100.  
  101.     self.SetAlpha(1.0)
  102.     if not foc:
  103.       self.CreateDistorsion(x,y,time)
  104.       if self.Filter is None:
  105.         self.CreateBlur(x,y,time)
  106.       sfw,sfh=self.Filter.GetDimension()
  107.       self.SelectionFilter.CopySubBuffer(self.FilterIncX-2,0,sfw,sfh,self.Filter.GetImageBuffer(),"AddInc")
  108.       self.SelectionFilter.GetFromBuffer2("Substract")#AddInc")#
  109.       Raster.SetPosition(x-self.FilterIncX,y-self.FilterIncY)
  110.       Raster.DrawImage(w+2*self.FilterIncX,h+2*self.FilterIncY,"RGB","Native",self.SelectionFilter.GetImageBuffer())
  111.  
  112.       if self.FilterIncX>self.DistSize:
  113.         self.SelectionFilterUpdated=1
  114.       else:
  115.         self.SelectionFilterUpdated=0
  116.  
  117.     else:
  118.       self.CreateBlur(x,y,time)
  119.       Raster.SetPosition(x-2,y-2)
  120.       Raster.DrawImage(w+4,h+4,"RGB","Native",self.Filter.GetImageBuffer())
  121.  
  122.       self.FilterUpdated=1
  123.