mirror of
				https://github.com/ErikasKontenis/SabrehavenServer.git
				synced 2025-10-31 03:56:22 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			100 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| -- @docclass
 | |
| UIImageView = extends(UIWidget, "UIImageView")
 | |
| 
 | |
| function UIImageView.create()
 | |
|   local imageView = UIImageView.internalCreate()
 | |
|   imageView.zoom = 1
 | |
|   imageView.minZoom = math.pow(10, -2)
 | |
|   imageView.maxZoom = math.pow(10,  2)
 | |
|   imageView:setClipping(true)
 | |
|   return imageView
 | |
| end
 | |
| 
 | |
| function UIImageView:getDefaultZoom()
 | |
|   local width = self:getWidth()
 | |
|   local height = self:getHeight()
 | |
|   local textureWidth = self:getImageTextureWidth()
 | |
|   local textureHeight = self:getImageTextureHeight()
 | |
|   local zoomX = width / textureWidth
 | |
|   local zoomY = height / textureHeight
 | |
|   return math.min(zoomX, zoomY)
 | |
| end
 | |
| 
 | |
| function UIImageView:getImagePosition(x, y)
 | |
|   x = x or self:getWidth() / 2
 | |
|   y = y or self:getHeight() / 2
 | |
|   local offsetX = self:getImageOffsetX()
 | |
|   local offsetY = self:getImageOffsetY()
 | |
|   local posX = (x - offsetX) / self.zoom
 | |
|   local posY = (y - offsetY) / self.zoom
 | |
|   return posX, posY
 | |
| end
 | |
| 
 | |
| function UIImageView:setImage(image)
 | |
|   self:setImageSource(image)
 | |
|   local zoom = self:getDefaultZoom()
 | |
|   self:setZoom(zoom)
 | |
|   self:center()
 | |
| end
 | |
| 
 | |
| function UIImageView:setZoom(zoom, x, y)
 | |
|   zoom = math.max(math.min(zoom, self.maxZoom), self.minZoom)
 | |
|   local posX, posY = self:getImagePosition(x, y)
 | |
|   local textureWidth = self:getImageTextureWidth()
 | |
|   local textureHeight = self:getImageTextureHeight()
 | |
|   local imageWidth = textureWidth * zoom
 | |
|   local imageHeight = textureHeight * zoom
 | |
|   self:setImageWidth(imageWidth)
 | |
|   self:setImageHeight(imageHeight)
 | |
|   self.zoom = zoom
 | |
|   self:move(posX, posY, x, y)
 | |
| end
 | |
| 
 | |
| function UIImageView:zoomIn(x, y)
 | |
|   local zoom = self.zoom * 1.1
 | |
|   self:setZoom(zoom, x, y)
 | |
| end
 | |
| 
 | |
| function UIImageView:zoomOut(x, y)
 | |
|   local zoom = self.zoom / 1.1
 | |
|   self:setZoom(zoom, x, y)
 | |
| end
 | |
| 
 | |
| function UIImageView:center()
 | |
|   self:move(self:getImageTextureWidth() / 2, self:getImageTextureHeight() / 2)
 | |
| end
 | |
| 
 | |
| function UIImageView:move(x, y, centerX, centerY)
 | |
|   x = math.max(math.min(x, self:getImageTextureWidth()), 0)
 | |
|   y = math.max(math.min(y, self:getImageTextureHeight()), 0)
 | |
|   local centerX = centerX or self:getWidth() / 2
 | |
|   local centerY = centerY or self:getHeight() / 2
 | |
|   local offsetX = centerX - x * self.zoom
 | |
|   local offsetY = centerY - y * self.zoom
 | |
|   self:setImageOffset({x=offsetX, y=offsetY})
 | |
| end
 | |
| 
 | |
| function UIImageView:onDragEnter(pos)
 | |
|   return true
 | |
| end
 | |
| 
 | |
| function UIImageView:onDragMove(pos, moved)
 | |
|   local posX, posY = self:getImagePosition()
 | |
|   self:move(posX - moved.x / self.zoom, posY - moved.y / self.zoom)
 | |
|   return true
 | |
| end
 | |
| 
 | |
| function UIImageView:onDragLeave(widget, pos)
 | |
|   return true
 | |
| end
 | |
| 
 | |
| function UIImageView:onMouseWheel(mousePos, direction)
 | |
|   local x = mousePos.x - self:getX()
 | |
|   local y = mousePos.y - self:getY()
 | |
|   if direction == MouseWheelUp then
 | |
|     self:zoomIn(x, y)
 | |
|   elseif direction == MouseWheelDown then
 | |
|     self:zoomOut(x, y)
 | |
|   end
 | |
| end
 | 
