Fabric JS Touch Events - fabricjs

I'm working with Fabric js inside a Phonegap application and although the touch events work, the handles are very hard to catch and use. Specifically the rotate and resize handles. If you touch them 90% of the time they just disappear. I tired fingers and styles. Same result. Confirmed the same behavior on ipad pro and my Galaxy note 4. I'm copy/pasting the same demo from their site:
http://fabricjs.com/touch-events
Has anyone experienced this? How can I make those handles easier to touch?

Solved it. All I needed to do was increase the size of the handles. It's a property passed to each object type you make.

Related

Does drawableStart converts to drawableLeft on older devices?

I am getting tons of Lint warning to change layout to better support RTL devices.
If I use drawableStart in XML, what will happen in the devices that came before this attribute was introduced? Will they silently convert it to drawableLeft or the app will break?
I have good experience with using unsupported themes which silently convert to supported theme if my theme is not supported (like usage of Holo theme explicitly). So I wonder if the same will happen with these attributes.
For example, a device with SDK 10 uses this app. Will it crash or not as drawableStart was not known at that time?
PS. I do not have a device with SDK 10 to test the real behaviour, just emulators. That is why I am reluctant to believe what emulator says.
According to this blogpost you should use both start and left.
I have tried to use only start/end on API 16 and the behaved exactly as you would expect -- start got mapped to left and end got mapped to right.

Interactive ePub3 issue: Need advice

I have a technical doubt on an ePub3 job and thought of checking with you all and get your understanding and advise on it.
For one of my German client, I have created a ePub 3.0 re-flow with interactivity, we have used all the interactivities to work on pop-ups (Non-linear content) and it works well on iPad iBooks 3.2, as the initial request from client is to work only for iPad.
I understand that a latest Apple spec (iBooksAssetGuide 5.1 Rev 2) now says that “Develop scripts that perform well on both Mac OS and iOS devices: Interactivity on desktop computers requires input from a mouse while interactivity on iOS devices require touch input”. I’m not sure whether there would be any problem while this job goes into the Apple iBooksstore, due to the latest spec.
It would be of great help, if you all please share your idea’s / view to this problem.
Regards,
John.A
Great question. With the latest version of OSX (Mavericks) running iBooks as well, there are a few things that need to be considered when using touch interactivity in ePub3 books. The most important (and relevant here) of these is making sure you are firing mouse events as well as touch events: because they behave differently.
The most robust solution that I have found to date is using JQuery or Quo's "tap" event: as it will fire with both touch and mouse events! However, if your code digs deeper (IE if you you use events like "touchstart", "touchmove", etc.) you will need to use the corresponding mouse events to insure functionality on the desktop.
Tap.js is a great little library for stuff like this: http://alxgbsn.co.uk/2012/03/12/tap-js-a-lightweight-tap-event-javascript-plugin/.
You should also be aware that iBooks for OSX behaves differently for many features (especially when it comes to external media content and dynamic loading of content), so you should never rely on OSX only when testing...
Good luck!

Modifying the screen of existing Direct2D application

This question is related to: Which API Microsoft Word (Office 2013) is using the paint the screen, which was left unanswered.
I have an Office plug-in (native C++) which is fairly involving with Office. Using hooks I'm modifying the client area of Office application.
Things were working great for me up to Office 2010, hooking WM_NCPAINT, and using GDI method on the Office Window.
But Office 2013 uses Direct2D, DXGI, and DirectWrite. On Windows 7, if I draw something on the screen - it gets erased the next time the cursor blink. On Windows 8 - I don't even have access to the screen.
Currently, my thinking is to hook ID2D1DeviceContext::BeginDraw, ID2D1DeviceContext::EndDraw - and on last function, just before delegating to the real function, I will add my stuff. Another idea is the hook IDXGISwapChain1::Present1. Problem with both these methods that I've hard time identifying what is going on above.
I'm even thinking even a different process (or GDI based window - if possible) on top of the client area I want to decorate, with the majority of the real eastate being 100% transparent. Problem with this solution are issues like keyboard focus and mouse click.
Any tip or suggestion will be appreciated. Any tool (the Spy++ for DirectX) will be appreciated. Does DirectX (specifically Direct2D) has documented extensible or plug-able story, I'm not aware of and could use? Is there anything in Kernel Mode I'm missing?
Hm dont know exactly how that works on Direct Draw, but i hooked once the EndScene function for Direct3D and added some stuff to the scene before the real EndScene could be executed.
I made a little video that shows that:
http://www.youtube.com/watch?v=ZFshqIEaLBc
Here's my advice: don't do that. Any of it. If you find yourself having to hook and hack into the host that deeply, it's a clear sign that you just shouldn't be doing that. Find another way to draw what you need, or change your UI design so that it fits in with what Office already accomodates. Even if you assume it's possible to get this working, every time Office is updated (patch, service pack, new version) you will be at high risk of all your stuff breaking, with no guarantee that you'll be able to get it working again.

Cocos2d - SimpleAudioEngine - Sound is not playing on iPhone

Recently I have a problem with playing my soundeffects using CocosDenshion. The sound is playing on the iPhone Simulator, but not on my own device. I am not sure what I am doing wrong. Off course I checked if my speakers are still working, but they do while using other apps or the iPod Library.
I just use this simple code:
[[SimpleAudioEngine sharedEngine] playEffect:#"button.wav"];
I double checked the name of the file and it indeed is button.wav.
I hope someone can help me out.
I had the same problem recently and I've figured it out.
I' m using Xcode 4.3.2 and there seems to be a bug.
Not all resources you add (drag) to the project are by default added to the target.
When you add a resource, make sure that (apart from checking the copy items into destination checkbox) you also check the add to target checkbox.
You can check if the resources has been added to the bundle by clicking on the target icon. In the Build Phases tab, check if the sound files are included in the Copy Bundle Resources.
If not, add them manually (+add target)
You might try preloading the sound effects, at some earlier point in the program, as otherwise it has to load the sound effect before it can play it. You could create a splashScreen scene that is the first scene and loads all your assets and then transitions to the first "actual" scene.
SimpleAudioEngine *engine = [SimpleAudioEngine sharedEngine];
[engine preloadEffect:#"Example-Sound.caf"];
Not sure whether it is the case here, but you should keep in mind that if your file name is "Button.wav" and you are asking to playEffect:#"button.wav" it will play on simulator, but will not on the device. This effect takes place because filesystem on your desktop is case-insensative, and on iOS devices it is not.
I have the same problem and find here. But I fix it by myself.
If you reinstall ios for ipad. the default switch(upon the volume) is default as "mute volume" method. Maybe I change it to "rotation" method when it is mute. It lead to all cocos2d can't play sound any more. So I turn the method back and set mute off. And then SimpleAudioEngine works well. It is ios system's bug.
Make sure to check your audio file itself. A Mono 16 Bit, Uncompressed wave with a sample rate of 441000 should 'just work'. I recommend grabbing a sample .wav from an online Cocos2D example, like the Cowbell.wav and try to play that file.

Screen capture doesn't work on MFC application in Vista

We've got some in-house applications built in MFC, with OpenGL drawing routines. They all use the same code to draw on the screen and either print the screen or save it to a JPEG file. Everything's been working fine in Windows XP, and I need to find a way to make them work on Vista.
In three of our applications, everything works. In the remaining one, I can get the window border, title bar, menus, and task bar, but the interior never shows up. As I said, these applications use the exact same code to write to the screen and capture the window image, and the only difference I see that looks like it might be relevant is that the problem application uses the MFC multiple document interface, while the ones that work use the single document interface.
Either the answer isn't on the net, or I'm worse at Googling than I thought. I asked on the MSDN forums, and the only practical suggestion I got was to use GDI+ rather than GDI, and that did nothing different. I have tried different things with every part of the code that captures and prints or save, given a pointer to the window, so apparently it's a matter of the window itself. I haven't rebuilt the offending application using SDI yet, and I really don't have any other ideas.
Has anybody seen anything like this?
What I've got is four applications. They use a lot of common code, and share the actual .h and .cpp files, so I know the drawing and screen capture code is identical.
There is a WindowtoDIB() routine that takes a *pWnd, and a source rectangle and destination size. It looks like very slightly adapted Microsoft code, and I've found other functions in this file on the Microsoft website. Of my four applications, three handle this just fine, but one doesn't. The most obvious difference is that the problem one is MDI.
It looks to me like the *pWnd is the problem. I'm not a MFC guru by a long shot, and it seems to me that the problem may be that we've got one window setup in the SDIs, and more than one in the MDI. I may be passing the wrong *pWnd to the function.
In the meantime, it has started working properly on the 64-bit Vista test machine, although it still doesn't work on the 32-bit Vista machine. I have no idea why. I haven't changed anything since the last tests, and I didn't think anybody else had. (On the 32-bit version, the Print Screen key works as expected, but it does not save the screen as a JPEG.)
Your question title mentions screen capture but your actual question doesn't. Please elaborate more clearly. Is the problem that you can do screen capture of three of your applications, but not the fourth one? You can use different screen capture software that can capture OpenGL/DirectX windows. Those surfaces are handled directly by the Window Manager and won't show up with a simple 'PrtScn'.
Switching to GDI+ won't solve it, nor will switching to SDI.
If it's the content of the CView that you want, then yes, that should be right one. If it's the content of the whole screen (at least the content, without the toolbar(s) and status bar), then you should pass it the CMainFrame (that's the default name which may have been changed, the one that is derived from CMDIFrameWnd).
Can you post the code of WindowToDIB()? I've just tried it and It Works For Me (TM), but without OpenGL code in the view. Try passing the following windows to your WindowToDIB() function:
CMainFrame* mainfrm = static_cast<CMainFrame*>(::AfxGetMainWnd());
- mainfrm
- mainfrm->MDIGetActive()
- mainfrm->MDIGetActive()->GetActiveView()
and see what you get.
The contents of each window are directX surfaces and are only assembled by the window manager in the graphics card. You'd not be able to capture this unless you switch off the new interface (DWM) or code specifically for screen capture from the DWM.
Wikipedia has a good description of the Desktop Window Manager (DWM)
Sorry, I still don't understand. You're trying to get the Print Screen key to work on all four applications? Or you're trying to get the WindowtoDIB() function to work, which takes a 'screenshot' (from within your own application) of the application itself, so that it can be saved as an image file?
Also, what do you mean with 'he Print Screen key works as expected, but it does not save the screen as a JPEG.'? Print Screen only copies to the clipboard, what happens when you paste in Paint?
If your WindowtoDIB() function only 'captures' the window you pass to it, then yes, your MDI child windows are not going to show up.
We eventually solved this by creating a different OpenGL context, and drawing everything to that. We gave up on the screen capture.

Resources