UIImageView, fixes to minimap

This commit is contained in:
Henrique Santiago 2013-01-31 14:20:04 -02:00
parent cb7f855fd8
commit 546007f1df
7 changed files with 130 additions and 15 deletions

View File

@ -0,0 +1,6 @@
ImageView < UIImageView
image-smooth: false
image-fixed-ratio: true
draggable: true
border-width: 2
border-color: #000000

View File

@ -248,13 +248,15 @@ MinimapFlagWindow < MainWindow
// Minimap Full Panel // Minimap Full Panel
MinimapFullPanel < UIWidget MinimapFullPanel < FlatPanel
image-smooth: true phantom: false
border-width: 2
border-color: #000000
anchors.fill: parent anchors.fill: parent
anchors.top: topMenu.bottom anchors.top: topMenu.bottom
ImageView
id: image
anchors.fill: parent
Button Button
!text: tr('Close') !text: tr('Close')
margin-right: 4 margin-right: 4

View File

@ -0,0 +1,96 @@
-- @docclass
UIImageView = extends(UIWidget)
function UIImageView.create()
local imageView = UIImageView.internalCreate()
imageView.zoom = 1
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)
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

View File

@ -27,7 +27,7 @@ function init()
}) })
if g_game.isOnline() then if g_game.isOnline() then
loadMap() online()
end end
end end
@ -77,7 +77,6 @@ end
function loadMap() function loadMap()
local protocolVersion = g_game.getProtocolVersion() local protocolVersion = g_game.getProtocolVersion()
g_map.clean()
g_minimap.clean() g_minimap.clean()
if otmm then if otmm then

View File

@ -146,18 +146,24 @@ function UIMinimap:updateFlags()
end end
end end
UIMinimap.realZoomIn = UIMinimap.zoomIn UIMinimap.realZoomIn = UIMinimap.realZoomIn or UIMinimap.zoomIn
function UIMinimap:zoomIn() function UIMinimap:zoomIn()
self:realZoomIn() self:realZoomIn()
self:updateFlags() self:updateFlags()
end end
UIMinimap.realZoomOut = UIMinimap.zoomOut UIMinimap.realZoomOut = UIMinimap.realZoomOut or UIMinimap.zoomOut
function UIMinimap:zoomOut() function UIMinimap:zoomOut()
self:realZoomOut() self:realZoomOut()
self:updateFlags() self:updateFlags()
end end
UIMinimap.realSetZoom = UIMinimap.realSetZoom or UIMinimap.setZoom
function UIMinimap:setZoom(zoom)
self:realSetZoom(zoom)
self:updateFlags()
end
function UIMinimap:floorUp(floors) function UIMinimap:floorUp(floors)
local pos = self:getCameraPosition() local pos = self:getCameraPosition()
pos.z = pos.z - floors pos.z = pos.z - floors
@ -177,9 +183,11 @@ function UIMinimap:floorDown(floors)
end end
function UIMinimap:followLocalPlayer() function UIMinimap:followLocalPlayer()
local player = g_game.getLocalPlayer() if not self:isDragging() then
self:followCreature(player) local player = g_game.getLocalPlayer()
self:updateFlags() self:followCreature(player)
self:updateFlags()
end
end end
function UIMinimap:reset() function UIMinimap:reset()
@ -231,8 +239,9 @@ function UIMinimap:onMouseRelease(pos, button)
if button == MouseLeftButton then if button == MouseLeftButton then
local player = g_game.getLocalPlayer() local player = g_game.getLocalPlayer()
if self.autowalk and not player:autoWalk(mapPos) then if self.autowalk then
player.onAutoWalkFail = function() modules.game_textmessage.displayFailureMessage(tr('There is no way.')) end player.onAutoWalkFail = function() modules.game_textmessage.displayFailureMessage(tr('There is no way.')) end
player:autoWalk(mapPos)
end end
return true return true
elseif button == MouseRightButton then elseif button == MouseRightButton then
@ -260,8 +269,9 @@ end
function UIMinimap:createFullPanel() function UIMinimap:createFullPanel()
self.fullPanel = g_ui.createWidget('MinimapFullPanel', rootWidget) self.fullPanel = g_ui.createWidget('MinimapFullPanel', rootWidget)
self.fullPanel:setImageSource(self.fullImage)
self.fullPanel.onDestroy = function() self.fullPanel = nil end self.fullPanel.onDestroy = function() self.fullPanel = nil end
local image = self.fullPanel:getChildById('image')
image:setImage(self.fullImage)
end end
function UIMinimap:destroyFullPanel() function UIMinimap:destroyFullPanel()
@ -316,5 +326,3 @@ function UIMinimap:getArea()
local bottomRight = self:getPosition({ x = self:getX() + self:getWidth() - 2, y = self:getY() + self:getHeight() - 2 }) local bottomRight = self:getPosition({ x = self:getX() + self:getWidth() - 2, y = self:getY() + self:getHeight() - 2 })
return topLeft, bottomRight return topLeft, bottomRight
end end

View File

@ -581,6 +581,8 @@ void Application::registerLuaFunctions()
g_lua.bindClassMemberFunction<UIWidget>("getImageBorderRight", &UIWidget::getImageBorderRight); g_lua.bindClassMemberFunction<UIWidget>("getImageBorderRight", &UIWidget::getImageBorderRight);
g_lua.bindClassMemberFunction<UIWidget>("getImageBorderBottom", &UIWidget::getImageBorderBottom); g_lua.bindClassMemberFunction<UIWidget>("getImageBorderBottom", &UIWidget::getImageBorderBottom);
g_lua.bindClassMemberFunction<UIWidget>("getImageBorderLeft", &UIWidget::getImageBorderLeft); g_lua.bindClassMemberFunction<UIWidget>("getImageBorderLeft", &UIWidget::getImageBorderLeft);
g_lua.bindClassMemberFunction<UIWidget>("getImageTextureWidth", &UIWidget::getImageTextureWidth);
g_lua.bindClassMemberFunction<UIWidget>("getImageTextureHeight", &UIWidget::getImageTextureHeight);
g_lua.bindClassMemberFunction<UIWidget>("resizeToText", &UIWidget::resizeToText); g_lua.bindClassMemberFunction<UIWidget>("resizeToText", &UIWidget::resizeToText);
g_lua.bindClassMemberFunction<UIWidget>("clearText", &UIWidget::clearText); g_lua.bindClassMemberFunction<UIWidget>("clearText", &UIWidget::clearText);
g_lua.bindClassMemberFunction<UIWidget>("setText", &UIWidget::setText); g_lua.bindClassMemberFunction<UIWidget>("setText", &UIWidget::setText);

View File

@ -455,6 +455,8 @@ public:
int getImageBorderRight() { return m_imageBorder.right; } int getImageBorderRight() { return m_imageBorder.right; }
int getImageBorderBottom() { return m_imageBorder.bottom; } int getImageBorderBottom() { return m_imageBorder.bottom; }
int getImageBorderLeft() { return m_imageBorder.left; } int getImageBorderLeft() { return m_imageBorder.left; }
int getImageTextureWidth() { return m_imageTexture ? m_imageTexture->getWidth() : 0; }
int getImageTextureHeight() { return m_imageTexture ? m_imageTexture->getHeight() : 0; }
// text related // text related
private: private: