WoWInterface

WoWInterface (https://www.wowinterface.com/forums/index.php)
-   Lua/XML Help (https://www.wowinterface.com/forums/forumdisplay.php?f=16)
-   -   Issue with draggable texture... (https://www.wowinterface.com/forums/showthread.php?t=52819)

TULOA 10-17-15 04:42 PM

Issue with draggable texture...
 
It may just be the way things work but who knows...

I have a texture on a frame one can drag. It will be a bigger image in the future but for now its the height and width of the frame. On drag one can move the texture by the offset of the mouse's coordinates.

Question is why is there lines going to infinity of each edge of the square texture. It also doesnt show anything under that layer of the image. Hiding the image shows the background and the side frame border but I can deal with that later. I just want to figure out the edges of the texture.

Also in advance I am not worried at this time with globals and such as I personally deal with them last.

Lua Code:
  1. function TWM_OnLoad()
  2.     TWM.running = false
  3.    
  4.     --Create the Texture
  5.     local TWMtex = TWM_frame:CreateTexture(nil, "OVERLAY") --Moving Texture
  6.     local TWMtex2 = TWM_frame:CreateTexture(nil, "Background") --Background for drag testing.
  7.     TWMtex:SetTexture("Interface\\Addons\\TWM\\Maps\\AlteracValley.tga", false)
  8.     TWMtex2:SetTexture("Interface\\Addons\\TWM\\Maps\\AlteracValley.tga", false)
  9.     TWMtex:SetAllPoints(TWM_frame)
  10.     TWMtex2:SetAllPoints(TWM_frame)
  11.     TWM_frame.texture = TWMtex
  12.     TWM_frame.texture2 = TWMtex2
  13. end
  14.  
  15. function TWM_OnUpdate(self, elapsed)
  16.     --Only running while Left Mouse Button is down.
  17.     if TWM.running then
  18.         local mouseX,mouseY = GetCursorPosition()
  19.         local screenWidth,screenHeight = GetScreenWidth(), GetScreenHeight()
  20.         local offsetX,offsetY = 0
  21.         widthScale, heightScale. = TWM_frame:GetSize() --Get Width and Height for scale.
  22.        
  23.         --Get the scale of the size of the frame to the size of the screen.
  24.         widthScale = widthScale / screenWidth
  25.         heightScale = heightScale / screenHeight
  26.        
  27.         --Calculate the offset of the mouse cursor and convert it to (Hopefully) frame
  28.         --coordinates while allowing the texture to go out of the frame.
  29.         offsetX = ((mouseX- TWM.mouseStartX) / screenWidth) / widthScale
  30.         offsetY = ((mouseY- TWM.mouseStartY) / screenHeight) / heightScale
  31.        
  32.         --Offset the current texture coordinates by the offset.
  33.         TWM_frame.texture:SetTexCoord(x1 - offsetX, x2 - offsetX, y1 + offsetY, y2 + offsetY)
  34.        
  35.         --For debug: Print the current x,y offset and the starting Upper Left point of the texture.
  36.         print(offsetX, offsetY, x1, y1)
  37.     else
  38.         --Keep track of the mouse for when the user starts to drag on the texture.
  39.         TWM.mouseStartX,TWM.mouseStartY = GetCursorPosition();
  40.         --Get Texture Coordinates.
  41.         x1,y1, _, _, _, _, x2, y2 = TWM_frame.texture:GetTexCoord()
  42.     end
  43. end

The XML does the initial frame creation for a reason I no longer remember as I have been away for a while...
XML Code:
  1. <Ui xmlns="http://www.blizzard.com/wow/ui/"
  2.       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  3.     <Script file="TWM.lua" />
  4.     <Frame name="TWM_frame" parent="UIParent" toplevel="true" enableMouse="true" movable="true">
  5.         <Size>
  6.             <AbsDimension x="300" y="300" />
  7.         </Size>
  8.         <TitleRegion>
  9.             <Size x="300" y="10"/>
  10.             <Anchors><Anchor point="TOP"/></Anchors>
  11.         </TitleRegion>
  12.         <Backdrop bgFile="Interface\DialogFrame\UI-DialogBox-Background"
  13.            edgeFile="Interface\DialogFrame\UI-DialogBox-Border" tile="true">
  14.             <BackgroundInsets>
  15.                 <AbsInset left="-10" right="-10" top="-10" bottom="-10"/>
  16.             </BackgroundInsets>
  17.             <TileSize>
  18.                 <AbsValue val="32"/>
  19.             </TileSize>
  20.             <EdgeSize>
  21.                 <AbsValue val="32"/>
  22.             </EdgeSize>
  23.         </Backdrop>
  24.         <Scripts>
  25.             <OnLoad>
  26.                 TWM_OnLoad();
  27.             </OnLoad>
  28.             <OnMouseDown>
  29.                 if button == "LeftButton" then
  30.                     TWM.running = true;
  31.                     print(TWM.running);
  32.                 elseif button == "RightButton" then
  33.                     self:Hide()
  34.                 end
  35.             </OnMouseDown>
  36.             <OnMouseUp>
  37.                 if button == "LeftButton" then
  38.                     TWM.running = false;
  39.                     print(TWM.running);
  40.                 end
  41.             </OnMouseUp>
  42.             <OnUpdate>
  43.                 TWM_OnUpdate(self, elapsed);
  44.             </OnUpdate>
  45.         </Scripts>
  46.         <Anchors><Anchor point="CENTER" relativeTo="UIParent"/></Anchors>
  47.        
  48.     </Frame>
  49.  </Ui>


Seerah 10-17-15 08:52 PM

OnUpdate? :eek:

http://wow.gamepedia.com/Making_draggable_frames

TULOA 10-17-15 08:58 PM

Yes OnUpdate.

The frame isnt draggable the texture is.

Edit: Well it is but so is the texture. And the code there is for dragging the texture.

TULOA 10-18-15 12:44 AM

Ok so I made an observation playing with adding another layer leaving that map as a background and a test...

Apparently something is broken with the pictures themselves... Can I use anything other than TGAs for textures I wonder otherwise what is wrong with these TGAs that certain(Or All) pixels along the border of the image extend forever?

I have included links to the files: (Remove if an issue.)

https://www.sendspace.com/file/jr0a4b
https://www.sendspace.com/file/xls28a

The above are the files themselves... I dont have any program or know of many that can validate TGAs to find errors.
If anyone does I would love to have it so I can rectify this issue as it appears to be file related.
I hand made the Crest from a JPG into a TGA using Paint.NET

Edit: When using the crest as a layer I only have a few points at the bottom causing issues.

TULOA 10-18-15 12:52 AM

Ok so this problem in case it helps anyone out is just an issue with the files themselves...

When I edited the AlteracValley TGA to have a 1px empty border around it instead of the image filling the whole of the dimensions it worked without the lines. So I am not sure why the image did that however in the first place.

I hope there is a way to get some form of data validator or something to do a better job with TGA images.

Resike 10-18-15 04:34 AM

It only happens if the texture doesn't have at least a 1pixel invisible border AND you made some transition on the texture itself (rotate/textcoord/mirror/etc).

It's not the image is broken, but the transition effect is not suitable for such borderless images.

semlar 10-18-15 05:39 AM

When you set tiling to false (the second argument of SetTexture), it repeats the edge pixel when you set texture coordinates outside the bounds of the image itself. If tiling is set to true then it starts drawing the texture again, neither of which is what you want.

Since you're using your own image here, the simplest solution is to put a transparent border around it so the part that's repeated isn't visible.

If you weren't able to modify the image, you could set the height and width of the texture instead of setting your coordinates outside the boundaries.

In other words, if you have 100px on the side of your texture that are being repeated, you need to dynamically set the width of the texture to be 100px shorter in addition to adjusting your coordinates to avoid drawing outside the lines.

On a related note, instead of screwing with the texture coordinates just to drag an image around, you could just use standard frame dragging techniques and slap it in a scroll frame to clip it.

TULOA 10-18-15 09:53 AM

Ok yea I wasnt aware there had to be at least 1px on the border of the image. It really isnt stated anywhere which is surprising to me.

I suppose with tiling it wouldnt matter but it applies to smaller images too. Anyways I'm just glad it turned out to be something easy to notice because these are the kinds of issues otherwise that dont get fixed because its next to impossible to track.

Thanks guys for the input. I am sure someone else will find it useful some day.


All times are GMT -6. The time now is 09:49 PM.

vBulletin © 2024, Jelsoft Enterprises Ltd
© 2004 - 2022 MMOUI