<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Drag/Drop Part 2</title>
		<link>http://www.allegro.cc/forums/view/614931</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Mon, 05 Jan 2015 05:55:26 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>As a continuation from this <a href="https://www.allegro.cc/forums/thread/614921">thread</a>, I been working on adding drag and drop functionality to allegro. Once again, windows only as I can only test on my personal setup.</p><p><a href="http://msdn.microsoft.com/en-us/library/windows/desktop/ms679679%28v=vs.85%29.aspx">MSDN</a> has information about the functions. There are few online examples. I found this <a href="http://www.catch22.net/tuts/drop-target">website</a> with a link to an all &#39;C&#39; source to add drop capability to a Win32 app.</p><p>An edit box is created that you can drag text from one application to the box. </p><p>I even cleaned up the code to remove all extraneous functions that are not needed as a target only app. I also condensed the code into two files (main.c and dropdata.c).  I also changed some function names. </p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="c">// internally defined as an IDropTarget object</span>
<span class="number">  2</span><span class="k1">typedef</span> <span class="k1">struct</span> ALLEGRO_DROP ALLEGRO_DROP<span class="k2">;</span>
<span class="number">  3</span>
<span class="number">  4</span><span class="c">// internally defined as an IDataObject object</span>
<span class="number">  5</span><span class="k1">typedef</span> <span class="k1">struct</span> ALLEGRO_DROP_DATA ALLEGRO_DROP_DATA<span class="k2">;</span>
<span class="number">  6</span>
<span class="number">  7</span><span class="c">// calls the original function RegisterDropWindow(HWND hWnd, IDropTarget **target)</span>
<span class="number">  8</span>ALLEGRO_DROP <span class="k3">*</span>al_create_drop<span class="k2">(</span>HWND hWnd<span class="k2">)</span><span class="k2">;</span>
<span class="number">  9</span>
<span class="number"> 10</span><span class="c">// call the original function UnRegisterDropWindow(HWND hWnd, IDropTarget *target)</span>
<span class="number"> 11</span><span class="k1">void</span> al_destroy_drop<span class="k2">(</span>ALLEGRO_DROP <span class="k3">*</span>drop<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>
<span class="number"> 13</span><span class="c">/* </span>
<span class="number"> 14</span><span class="c">a callback function to verify that a specific point on the window </span>
<span class="number"> 15</span><span class="c">can accept a drop. If not set, any point will be accepted</span>
<span class="number"> 16</span><span class="c">*/</span>
<span class="number"> 17</span><span class="k1">void</span> al_set_drop_validate_position_func<span class="k2">(</span><span class="k1">bool</span><span class="k2">(</span><span class="k3">*</span>func<span class="k2">)</span><span class="k2">(</span>HWND hWnd, <span class="k1">int</span> x, <span class="k1">int</span> y<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>
<span class="number"> 19</span><span class="c">/*</span>
<span class="number"> 20</span><span class="c">a callback function to accept the dropped data. This will eventually be changed to an ALLEGRO_DROP_EVENT under allegro.</span>
<span class="number"> 21</span><span class="c">*/</span>
<span class="number"> 22</span><span class="k1">void</span> al_set_drop_data_func<span class="k2">(</span><span class="k1">void</span><span class="k2">(</span><span class="k3">*</span>func<span class="k2">)</span><span class="k2">(</span>ALLEGRO_DROP <span class="k3">*</span>drop, ALLEGRO_DROP_DATA <span class="k3">*</span>data<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
</div></div><p>

The example app, with the changes, compiles, runs, and behaves as expected. It will accept text from a secondary source.</p><p>I added this file my allegro project compiles and runs. However, the window does not accept the drop. It won&#39;t accept any of the drag/drop functions (drag_enter, drag_over, drop).</p><p>Any thoughts? </p><p>The example source actually loads a dialog with a simple editbox. Is it the type of window that allegro creates that won&#39;t accept drops?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Mon, 29 Dec 2014 23:47:20 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><pre>

I think this could only be a very rudimentary implimentation.
Not even sure this belongs as an addon, 
because once you get into DnD, very quickly you want all the bells and whistles of a full GUI library.

But it would be great example code to donate to the community.

-sorry I couldn&#39;t find the contents of ALLEGRO_DROP or ALLEGRO_DROP_DATA.
 ALLEGRO_DROP_DATA can be anything. why not just have a &quot;void *data;&quot; in 
 your ALLEGRO_DROP struct.

-since you don&#39;t know what is inside of ALLEGRO_DROP_DATA you need a generic way of asking &quot;what am I dragging or what kind of object am I dragging?&quot;
 like a &quot;const char *drag_id_string;&quot; or a simple &quot;int drag_id;&quot; in the DnD struct.

-u should probably keep a copy of the original ALLEGRO_EVENT
 that began the drag in your DnD struct or else copy all the relavant fields
 so they are available to the programmer,

 So when processing your mouse/touch events, you can know if they
 are related to your current DnD operation and compare to origin (position, time, etc.) and update the screen accordingly.

-you need to pass the DnD struct as a parameter in all your callback funcs,
 otherwise at most you can only perform 1 DnD operation at a time which
 would be a very severe limitation to impose.
 worst case: the mouse and each touchscreen finger can all be dragging something simultaneously.
 
-usually drag-and-drop has a configurable movement threshold before kicking in, 
 otherwise it would be too sensitive (especially on high-resolution displays)

-HWND is Windows specific. It needs to be generic across all platforms.
 At worst, pass ALLEGRO_DISPLAY instead 

good luck
</pre><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Pho75_)</author>
		<pubDate>Tue, 30 Dec 2014 08:46:07 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/614931/1008622#target">Pho75_</a> said:</div><div class="quote"><p> Not even sure this belongs as an addon, because once you get into DnD, very quickly you want all the bells and whistles of a full GUI library.</p></div></div><p>Only if by bells and whistles you mean clipboard support <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" />. I think DnD might be useful in some situations.</p><p>Incidentally, just so this doesn&#39;t get lost, I suggest, at your convenience, to make a pull request at the github mirror (<a href="https://github.com/liballeg/allegro5">https://github.com/liballeg/allegro5</a>). It might continue to get ignored (I&#39;m a bit busy and this still seems like it needs some work), but at least it won&#39;t get buried in the forums.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Tue, 30 Dec 2014 10:02:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Pho75_, I think you&#39;re misunderstanding what I&#39;m trying to do. I want to drag data from one application into my application not dragging objects around my screen. </p><p>And, I know it needs to be platform independent. These are generic objects and functions. Each platform will need it&#39;s own implementation of those objects. I&#39;m working on a windows version.</p><p>The callbacks are for testing at the moment. Eventually, when it gets closer to finalization, I plan on instead pushing drag/drop events into a queue.</p><p>At the moment, I&#39;m just trying to get a rudimentary text dragging example running. Here is the code I have.
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="c">// al_drop.h</span>
<span class="number">  2</span><span class="p">#ifndef __al_included_allegro5_aldrop_h</span>
<span class="number">  3</span><span class="p">#define __al_included_allegro5_aldrop_h</span>
<span class="number">  4</span>
<span class="number">  5</span><span class="p">#include &lt;allegro5\allegro.h&gt;</span>
<span class="number">  6</span>
<span class="number">  7</span><span class="p">#ifdef __cplusplus</span>
<span class="number">  8</span><span class="k1">extern</span> <span class="s">"C"</span> <span class="k2">{</span>
<span class="number">  9</span><span class="p">#endif</span>
<span class="number"> 10</span>
<span class="number"> 11</span><span class="k1">typedef</span> <span class="k1">struct</span> ALLEGRO_DROP_DATA ALLEGRO_DROP_DATA<span class="k2">;</span>
<span class="number"> 12</span><span class="k1">typedef</span> <span class="k1">struct</span> ALLEGRO_DROP_TARGET ALLEGRO_DROP_TARGET<span class="k2">;</span>
<span class="number"> 13</span>
<span class="number"> 14</span>ALLEGRO_DROP_TARGET <span class="k3">*</span>al_create_drop_target<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span><span class="k1">void</span> al_destroy_drop_target<span class="k2">(</span>ALLEGRO_DROP_TARGET <span class="k3">*</span>pDropTarget<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>
<span class="number"> 17</span><span class="k1">void</span> al_set_drop_position_function<span class="k2">(</span><span class="k1">bool</span><span class="k2">(</span><span class="k3">*</span>func<span class="k2">)</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display, <span class="k1">int</span> x, <span class="k1">int</span> y<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span><span class="k1">void</span> al_set_drop_target_function<span class="k2">(</span><span class="k1">void</span><span class="k2">(</span><span class="k3">*</span>func<span class="k2">)</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display, <span class="k1">int</span> x, <span class="k1">int</span> y, ALLEGRO_DROP_DATA <span class="k3">*</span>pDropData<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>
<span class="number"> 20</span><span class="p">#ifdef __cplusplus</span>
<span class="number"> 21</span><span class="k2">}</span>
<span class="number"> 22</span><span class="p">#endif</span>
<span class="number"> 23</span>
<span class="number"> 24</span><span class="p">#endif // !__al_included_allegro5_aldrop_h</span>
</div></div><p>

</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">   1</span><span class="c">// al_drop.c</span>
<span class="number">   2</span><span class="p">#define STRICT</span>
<span class="number">   3</span>
<span class="number">   4</span><span class="p">#include &lt;stdint.h&gt;</span>
<span class="number">   5</span><span class="p">#include &lt;allegro5\allegro.h&gt;</span>
<span class="number">   6</span><span class="p">#include &lt;allegro5\allegro_windows.h&gt;</span>
<span class="number">   7</span><span class="p">#include &lt;Ole2.h&gt;</span>
<span class="number">   8</span><span class="p">#include "al_drop.h"</span>
<span class="number">   9</span>
<span class="number">  10</span><span class="k1">static</span> <span class="k1">bool</span><span class="k2">(</span><span class="k3">*</span>_al_drop_validate_func<span class="k2">)</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display, <span class="k1">int</span> x, <span class="k1">int</span> y<span class="k2">)</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  11</span><span class="k1">static</span> <span class="k1">void</span><span class="k2">(</span><span class="k3">*</span>_al_drop_function<span class="k2">)</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display, <span class="k1">int</span> x, <span class="k1">int</span> y, ALLEGRO_DROP_DATA <span class="k3">*</span>pDropData<span class="k2">)</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  12</span>
<span class="number">  13</span><span class="k1">typedef</span> <span class="k1">struct</span> ALLEGRO_DROP_DATA
<span class="number">  14</span><span class="k2">{</span>
<span class="number">  15</span>  IDataObject ido<span class="k2">;</span>
<span class="number">  16</span>  <span class="k1">int</span> ref_count<span class="k2">;</span>
<span class="number">  17</span>  FORMATETC <span class="k3">*</span>m_pFormatEtc<span class="k2">;</span>
<span class="number">  18</span>  STGMEDIUM <span class="k3">*</span>m_pStgMedium<span class="k2">;</span>
<span class="number">  19</span>  LONG     m_nNumFormats<span class="k2">;</span>
<span class="number">  20</span>  LONG m_lRefCount<span class="k2">;</span>
<span class="number">  21</span><span class="k2">}</span> ALLEGRO_DROP_DATA<span class="k2">;</span>
<span class="number">  22</span>
<span class="number">  23</span><span class="k1">typedef</span> <span class="k1">struct</span> ALLEGRO_DROP_TARGET
<span class="number">  24</span><span class="k2">{</span>
<span class="number">  25</span>  IDropTarget idt<span class="k2">;</span>
<span class="number">  26</span>  LONG  m_lRefCount<span class="k2">;</span>
<span class="number">  27</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>m_display<span class="k2">;</span>
<span class="number">  28</span>  BOOL  m_fAllowDrop<span class="k2">;</span>
<span class="number">  29</span>  ALLEGRO_DROP_DATA <span class="k3">*</span>m_pDataObject<span class="k2">;</span>
<span class="number">  30</span><span class="k2">}</span> ALLEGRO_DROP_TARGET<span class="k2">;</span>
<span class="number">  31</span>
<span class="number">  32</span><span class="k1">typedef</span> <span class="k1">struct</span> _al_drop_table_t
<span class="number">  33</span><span class="k2">{</span>
<span class="number">  34</span>  BEGIN_INTERFACE
<span class="number">  35</span>    HRESULT<span class="k2">(</span>STDMETHODCALLTYPE <span class="k3">*</span>QueryInterface<span class="k2">)</span><span class="k2">(</span>__RPC__in ALLEGRO_DROP_TARGET <span class="k3">*</span> pDropTarget, __RPC__in REFIID riid, _COM_Outptr_  <span class="k1">void</span> <span class="k3">*</span><span class="k3">*</span>ppvObject<span class="k2">)</span><span class="k2">;</span>
<span class="number">  36</span>    ULONG<span class="k2">(</span>STDMETHODCALLTYPE <span class="k3">*</span>AddRef<span class="k2">)</span><span class="k2">(</span>__RPC__in ALLEGRO_DROP_TARGET <span class="k3">*</span> pDropTarget<span class="k2">)</span><span class="k2">;</span>
<span class="number">  37</span>    ULONG<span class="k2">(</span>STDMETHODCALLTYPE <span class="k3">*</span>Release<span class="k2">)</span><span class="k2">(</span>__RPC__in ALLEGRO_DROP_TARGET <span class="k3">*</span> pDropTarget<span class="k2">)</span><span class="k2">;</span>
<span class="number">  38</span>    HRESULT<span class="k2">(</span>STDMETHODCALLTYPE <span class="k3">*</span>DragEnter<span class="k2">)</span><span class="k2">(</span>__RPC__in ALLEGRO_DROP_TARGET <span class="k3">*</span> pDropTarget, __RPC__in_opt ALLEGRO_DROP_DATA <span class="k3">*</span>pDataObject, DWORD grfKeyState, POINTL pt, __RPC__inout DWORD <span class="k3">*</span>pdwEffect<span class="k2">)</span><span class="k2">;</span>
<span class="number">  39</span>    HRESULT<span class="k2">(</span>STDMETHODCALLTYPE <span class="k3">*</span>DragOver<span class="k2">)</span><span class="k2">(</span>__RPC__in ALLEGRO_DROP_TARGET <span class="k3">*</span> pDropTarget, DWORD grfKeyState, POINTL pt, __RPC__inout DWORD <span class="k3">*</span>pdwEffect<span class="k2">)</span><span class="k2">;</span>
<span class="number">  40</span>    HRESULT<span class="k2">(</span>STDMETHODCALLTYPE <span class="k3">*</span>DragLeave<span class="k2">)</span><span class="k2">(</span>__RPC__in ALLEGRO_DROP_TARGET <span class="k3">*</span> pDropTarget<span class="k2">)</span><span class="k2">;</span>
<span class="number">  41</span>    HRESULT<span class="k2">(</span>STDMETHODCALLTYPE <span class="k3">*</span>Drop<span class="k2">)</span><span class="k2">(</span>__RPC__in ALLEGRO_DROP_TARGET <span class="k3">*</span> pDropTarget, __RPC__in_opt ALLEGRO_DROP_DATA <span class="k3">*</span>pDataObject, DWORD grfKeyState, POINTL pt, __RPC__inout DWORD <span class="k3">*</span>pdwEffect<span class="k2">)</span><span class="k2">;</span>
<span class="number">  42</span>  END_INTERFACE
<span class="number">  43</span><span class="k2">}</span> _al_drop_table_t<span class="k2">;</span>
<span class="number">  44</span>
<span class="number">  45</span>
<span class="number">  46</span><span class="k1">static</span> BOOL _al_query_data_object<span class="k2">(</span>ALLEGRO_DROP_DATA <span class="k3">*</span>pDataObject<span class="k2">)</span>
<span class="number">  47</span><span class="k2">{</span>
<span class="number">  48</span>  FORMATETC fmtetc <span class="k3">=</span> <span class="k2">{</span> CF_TEXT, <span class="n">0</span>, DVASPECT_CONTENT, <span class="k3">-</span><span class="n">1</span>, TYMED_HGLOBAL <span class="k2">}</span><span class="k2">;</span>
<span class="number">  49</span>
<span class="number">  50</span>  <span class="c">// does the data object support CF_TEXT using a HGLOBAL?</span>
<span class="number">  51</span>  <span class="k1">return</span> <span class="k2">(</span>pDataObject-&gt;ido.lpVtbl-&gt;QueryGetData<span class="k2">(</span><span class="k2">(</span>LPDATAOBJECT<span class="k2">)</span>pDataObject, <span class="k3">&amp;</span>fmtetc<span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> S_OK ? TRUE <span class="k2">:</span> FALSE<span class="k2">)</span><span class="k2">;</span>
<span class="number">  52</span><span class="k2">}</span>
<span class="number">  53</span>
<span class="number">  54</span><span class="k1">static</span> DWORD _al_query_drop_effect<span class="k2">(</span>ALLEGRO_DROP_TARGET <span class="k3">*</span>pDropTarget, DWORD grfKeyState, POINTL pt, DWORD dwAllowed<span class="k2">)</span>
<span class="number">  55</span><span class="k2">{</span>
<span class="number">  56</span>  DWORD dwEffect <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  57</span>
<span class="number">  58</span>  <span class="k1">if</span> <span class="k2">(</span><span class="n">0</span> <span class="k3">!</span><span class="k3">=</span> _al_drop_validate_func<span class="k2">)</span>
<span class="number">  59</span>  <span class="k2">{</span>
<span class="number">  60</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>_al_drop_validate_func<span class="k2">(</span>pDropTarget-&gt;m_display, pt.x, pt.y<span class="k2">)</span><span class="k2">)</span>
<span class="number">  61</span>    <span class="k2">{</span>
<span class="number">  62</span>      <span class="k1">return</span> dwEffect<span class="k2">;</span>
<span class="number">  63</span>    <span class="k2">}</span>
<span class="number">  64</span>  <span class="k2">}</span>
<span class="number">  65</span>
<span class="number">  66</span>  <span class="c">// 2. work out that the drop-effect should be based on grfKeyState</span>
<span class="number">  67</span>  <span class="k1">if</span> <span class="k2">(</span>grfKeyState <span class="k3">&amp;</span> MK_CONTROL<span class="k2">)</span>
<span class="number">  68</span>  <span class="k2">{</span>
<span class="number">  69</span>    dwEffect <span class="k3">=</span> dwAllowed <span class="k3">&amp;</span> DROPEFFECT_COPY<span class="k2">;</span>
<span class="number">  70</span>  <span class="k2">}</span>
<span class="number">  71</span>  <span class="k1">else</span>
<span class="number">  72</span>  <span class="k2">{</span>
<span class="number">  73</span>    <span class="k1">if</span> <span class="k2">(</span>grfKeyState <span class="k3">&amp;</span> MK_SHIFT<span class="k2">)</span>
<span class="number">  74</span>    <span class="k2">{</span>
<span class="number">  75</span>      dwEffect <span class="k3">=</span> dwAllowed <span class="k3">&amp;</span> DROPEFFECT_MOVE<span class="k2">;</span>
<span class="number">  76</span>    <span class="k2">}</span>
<span class="number">  77</span>  <span class="k2">}</span>
<span class="number">  78</span>
<span class="number">  79</span>  <span class="c">// 3. no key-modifiers were specified (or drop effect not allowed), so</span>
<span class="number">  80</span>  <span class="c">//    base the effect on those allowed by the dropsource</span>
<span class="number">  81</span>  <span class="k1">if</span> <span class="k2">(</span>dwEffect <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>
<span class="number">  82</span>  <span class="k2">{</span>
<span class="number">  83</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span>dwAllowed <span class="k3">&amp;</span> DROPEFFECT_COPY<span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> DROPEFFECT_COPY<span class="k2">)</span>
<span class="number">  84</span>    <span class="k2">{</span>
<span class="number">  85</span>      dwEffect <span class="k3">=</span> DROPEFFECT_COPY<span class="k2">;</span>
<span class="number">  86</span>    <span class="k2">}</span>
<span class="number">  87</span>
<span class="number">  88</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span>dwAllowed <span class="k3">&amp;</span> DROPEFFECT_MOVE<span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> DROPEFFECT_MOVE<span class="k2">)</span>
<span class="number">  89</span>    <span class="k2">{</span>
<span class="number">  90</span>      dwEffect <span class="k3">=</span> DROPEFFECT_MOVE<span class="k2">;</span>
<span class="number">  91</span>    <span class="k2">}</span>
<span class="number">  92</span>  <span class="k2">}</span>
<span class="number">  93</span>
<span class="number">  94</span>  <span class="k1">return</span> dwEffect<span class="k2">;</span>
<span class="number">  95</span><span class="k2">}</span>
<span class="number">  96</span>
<span class="number">  97</span><span class="k1">static</span> ULONG STDMETHODCALLTYPE _al_drop_target_add_reference<span class="k2">(</span>__RPC__in ALLEGRO_DROP_TARGET <span class="k3">*</span>pDropTarget<span class="k2">)</span>
<span class="number">  98</span><span class="k2">{</span>
<span class="number">  99</span>  <span class="k1">return</span> InterlockedIncrement<span class="k2">(</span><span class="k3">&amp;</span>pDropTarget-&gt;m_lRefCount<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 100</span><span class="k2">}</span>
<span class="number"> 101</span>
<span class="number"> 102</span><span class="k1">static</span> HRESULT STDMETHODCALLTYPE _al_drop_target_query_interface<span class="k2">(</span>__RPC__in ALLEGRO_DROP_TARGET <span class="k3">*</span> pDropTarget, __RPC__in REFIID riid, _COM_Outptr_  <span class="k1">void</span> <span class="k3">*</span><span class="k3">*</span>ppvObject<span class="k2">)</span>
<span class="number"> 103</span><span class="k2">{</span>
<span class="number"> 104</span>  <span class="k3">*</span>ppvObject <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number"> 105</span>
<span class="number"> 106</span>  <span class="k1">if</span> <span class="k2">(</span>IsEqualIID<span class="k2">(</span>riid, <span class="k3">&amp;</span>IID_IUnknown<span class="k2">)</span> <span class="k3">|</span><span class="k3">|</span> IsEqualIID<span class="k2">(</span>riid, <span class="k3">&amp;</span>IID_IDropTarget<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 107</span>  <span class="k2">{</span>
<span class="number"> 108</span>    _al_drop_target_add_reference<span class="k2">(</span>pDropTarget<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 109</span>    <span class="k3">*</span>ppvObject <span class="k3">=</span> pDropTarget<span class="k2">;</span>
<span class="number"> 110</span>    <span class="k1">return</span> S_OK<span class="k2">;</span>
<span class="number"> 111</span>  <span class="k2">}</span>
<span class="number"> 112</span>
<span class="number"> 113</span>  <span class="k1">return</span> E_NOINTERFACE<span class="k2">;</span>
<span class="number"> 114</span><span class="k2">}</span>
<span class="number"> 115</span>
<span class="number"> 116</span><span class="k1">static</span> ULONG STDMETHODCALLTYPE _al_drop_target_release<span class="k2">(</span>__RPC__in ALLEGRO_DROP_TARGET <span class="k3">*</span> pDropTarget<span class="k2">)</span>
<span class="number"> 117</span><span class="k2">{</span>
<span class="number"> 118</span>  ULONG count <span class="k3">=</span> InterlockedDecrement<span class="k2">(</span><span class="k3">&amp;</span>pDropTarget-&gt;m_lRefCount<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 119</span>
<span class="number"> 120</span>  <span class="k1">if</span> <span class="k2">(</span>count <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 121</span>  <span class="k2">{</span>
<span class="number"> 122</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_350.html" target="_blank">free</a><span class="k2">(</span>pDropTarget<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 123</span>  <span class="k2">}</span>
<span class="number"> 124</span>
<span class="number"> 125</span>  <span class="k1">return</span> count<span class="k2">;</span>
<span class="number"> 126</span><span class="k2">}</span>
<span class="number"> 127</span>
<span class="number"> 128</span><span class="k1">static</span> HRESULT STDMETHODCALLTYPE _al_drop_target_drag_enter<span class="k2">(</span>__RPC__in ALLEGRO_DROP_TARGET <span class="k3">*</span> pDropTarget, __RPC__in_opt ALLEGRO_DROP_DATA <span class="k3">*</span>pDataObject, DWORD grfKeyState, POINTL pt, __RPC__inout DWORD <span class="k3">*</span>pdwEffect<span class="k2">)</span>
<span class="number"> 129</span><span class="k2">{</span>
<span class="number"> 130</span>  pDropTarget-&gt;m_fAllowDrop <span class="k3">=</span> _al_query_data_object<span class="k2">(</span>pDataObject<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 131</span>
<span class="number"> 132</span>  <span class="k1">if</span> <span class="k2">(</span>pDropTarget-&gt;m_fAllowDrop<span class="k2">)</span>
<span class="number"> 133</span>  <span class="k2">{</span>
<span class="number"> 134</span>    <span class="k3">*</span>pdwEffect <span class="k3">=</span> _al_query_drop_effect<span class="k2">(</span>pDropTarget, grfKeyState, pt, <span class="k3">*</span>pdwEffect<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 135</span>  <span class="k2">}</span>
<span class="number"> 136</span>  <span class="k1">else</span>
<span class="number"> 137</span>  <span class="k2">{</span>
<span class="number"> 138</span>    <span class="k3">*</span>pdwEffect <span class="k3">=</span> DROPEFFECT_NONE<span class="k2">;</span>
<span class="number"> 139</span>  <span class="k2">}</span>
<span class="number"> 140</span>
<span class="number"> 141</span>  <span class="k1">return</span> S_OK<span class="k2">;</span>
<span class="number"> 142</span><span class="k2">}</span>
<span class="number"> 143</span>
<span class="number"> 144</span><span class="k1">static</span> HRESULT STDMETHODCALLTYPE _al_drop_target_drag_over<span class="k2">(</span>__RPC__in ALLEGRO_DROP_TARGET <span class="k3">*</span> pDropTarget, DWORD grfKeyState, POINTL pt, __RPC__inout DWORD <span class="k3">*</span>pdwEffect<span class="k2">)</span>
<span class="number"> 145</span><span class="k2">{</span>
<span class="number"> 146</span>  <span class="k1">if</span> <span class="k2">(</span>pDropTarget-&gt;m_fAllowDrop<span class="k2">)</span>
<span class="number"> 147</span>  <span class="k2">{</span>
<span class="number"> 148</span>    <span class="k3">*</span>pdwEffect <span class="k3">=</span> _al_query_drop_effect<span class="k2">(</span>pDropTarget, grfKeyState, pt, <span class="k3">*</span>pdwEffect<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 149</span>  <span class="k2">}</span>
<span class="number"> 150</span>  <span class="k1">else</span>
<span class="number"> 151</span>  <span class="k2">{</span>
<span class="number"> 152</span>    <span class="k3">*</span>pdwEffect <span class="k3">=</span> DROPEFFECT_NONE<span class="k2">;</span>
<span class="number"> 153</span>  <span class="k2">}</span>
<span class="number"> 154</span>
<span class="number"> 155</span>  <span class="k1">return</span> S_OK<span class="k2">;</span>
<span class="number"> 156</span><span class="k2">}</span>
<span class="number"> 157</span>
<span class="number"> 158</span><span class="k1">static</span> HRESULT STDMETHODCALLTYPE _al_drop_target_drag_leave<span class="k2">(</span>__RPC__in ALLEGRO_DROP_TARGET <span class="k3">*</span> pDropTarget<span class="k2">)</span>
<span class="number"> 159</span><span class="k2">{</span>
<span class="number"> 160</span>  <span class="k1">return</span> S_OK<span class="k2">;</span>
<span class="number"> 161</span><span class="k2">}</span>
<span class="number"> 162</span>
<span class="number"> 163</span><span class="k1">static</span> HRESULT STDMETHODCALLTYPE _al_drop_target_drop<span class="k2">(</span>__RPC__in ALLEGRO_DROP_TARGET <span class="k3">*</span> pDropTarget, __RPC__in_opt ALLEGRO_DROP_DATA <span class="k3">*</span>pDataObject, DWORD grfKeyState, POINTL pt, __RPC__inout DWORD <span class="k3">*</span>pdwEffect<span class="k2">)</span>
<span class="number"> 164</span><span class="k2">{</span>
<span class="number"> 165</span>  <span class="k1">if</span> <span class="k2">(</span>pDropTarget-&gt;m_fAllowDrop<span class="k2">)</span>
<span class="number"> 166</span>  <span class="k2">{</span>
<span class="number"> 167</span>    <span class="k1">if</span> <span class="k2">(</span>_al_drop_function<span class="k2">)</span>
<span class="number"> 168</span>    <span class="k2">{</span>
<span class="number"> 169</span>      _al_drop_function<span class="k2">(</span>pDropTarget-&gt;m_display, pt.x, pt.y, pDataObject<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 170</span>    <span class="k2">}</span>
<span class="number"> 171</span>
<span class="number"> 172</span>    <span class="k3">*</span>pdwEffect <span class="k3">=</span> _al_query_drop_effect<span class="k2">(</span>pDropTarget, grfKeyState, pt, <span class="k3">*</span>pdwEffect<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 173</span>  <span class="k2">}</span>
<span class="number"> 174</span>  <span class="k1">else</span>
<span class="number"> 175</span>  <span class="k2">{</span>
<span class="number"> 176</span>    <span class="k3">*</span>pdwEffect <span class="k3">=</span> DROPEFFECT_NONE<span class="k2">;</span>
<span class="number"> 177</span>  <span class="k2">}</span>
<span class="number"> 178</span>
<span class="number"> 179</span>  <span class="k1">return</span> S_OK<span class="k2">;</span>
<span class="number"> 180</span><span class="k2">}</span>
<span class="number"> 181</span>
<span class="number"> 182</span><span class="k1">static</span> _al_drop_table_t idt_vtbl <span class="k3">=</span>
<span class="number"> 183</span><span class="k2">{</span>
<span class="number"> 184</span>  _al_drop_target_query_interface,
<span class="number"> 185</span>  _al_drop_target_add_reference,
<span class="number"> 186</span>  _al_drop_target_release,
<span class="number"> 187</span>  _al_drop_target_drag_enter,
<span class="number"> 188</span>  _al_drop_target_drag_over,
<span class="number"> 189</span>  _al_drop_target_drag_leave,
<span class="number"> 190</span>  _al_drop_target_drop
<span class="number"> 191</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 192</span>
<span class="number"> 193</span>ALLEGRO_DROP_TARGET <span class="k3">*</span>al_create_drop_target<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display<span class="k2">)</span>
<span class="number"> 194</span><span class="k2">{</span>
<span class="number"> 195</span>  ALLEGRO_DROP_TARGET <span class="k3">*</span>pDropTarget <span class="k3">=</span> <span class="k2">(</span>ALLEGRO_DROP_TARGET<span class="k3">*</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_551.html" target="_blank">malloc</a><span class="k2">(</span><span class="k1">sizeof</span><span class="k2">(</span>ALLEGRO_DROP_TARGET<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 196</span>
<span class="number"> 197</span>  <span class="k1">if</span> <span class="k2">(</span><span class="n">0</span> <span class="k3">!</span><span class="k3">=</span> pDropTarget<span class="k2">)</span>
<span class="number"> 198</span>  <span class="k2">{</span>
<span class="number"> 199</span>    pDropTarget-&gt;idt.lpVtbl <span class="k3">=</span> <span class="k2">(</span><span class="k2">(</span>IDropTargetVtbl<span class="k3">*</span><span class="k2">)</span><span class="k3">&amp;</span>idt_vtbl<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 200</span>    pDropTarget-&gt;m_lRefCount <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 201</span>    pDropTarget-&gt;m_display <span class="k3">=</span> display<span class="k2">;</span>
<span class="number"> 202</span>    pDropTarget-&gt;m_fAllowDrop <span class="k3">=</span> FALSE<span class="k2">;</span>
<span class="number"> 203</span>
<span class="number"> 204</span>    <span class="k1">if</span> <span class="k2">(</span>S_OK <span class="k3">!</span><span class="k3">=</span> CoLockObjectExternal<span class="k2">(</span><span class="k2">(</span><span class="k1">struct</span> IUnknown<span class="k3">*</span><span class="k2">)</span>pDropTarget, TRUE, FALSE<span class="k2">)</span> <span class="k3">|</span><span class="k3">|</span>
<span class="number"> 205</span>      S_OK <span class="k3">!</span><span class="k3">=</span> RegisterDragDrop<span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_win_window_handle"><span class="a">al_get_win_window_handle</span></a><span class="k2">(</span>display<span class="k2">)</span>, <span class="k2">(</span>LPDROPTARGET<span class="k2">)</span>pDropTarget<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 206</span>    <span class="k2">{</span>
<span class="number"> 207</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_350.html" target="_blank">free</a><span class="k2">(</span>pDropTarget<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 208</span>      pDropTarget <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number"> 209</span>    <span class="k2">}</span>
<span class="number"> 210</span>  <span class="k2">}</span>
<span class="number"> 211</span>
<span class="number"> 212</span>  <span class="k1">return</span> pDropTarget<span class="k2">;</span>
<span class="number"> 213</span><span class="k2">}</span>
<span class="number"> 214</span>
<span class="number"> 215</span><span class="k1">void</span> al_destroy_drop_target<span class="k2">(</span>ALLEGRO_DROP_TARGET <span class="k3">*</span>pDropTarget<span class="k2">)</span>
<span class="number"> 216</span><span class="k2">{</span>
<span class="number"> 217</span>  <span class="k1">if</span> <span class="k2">(</span><span class="n">0</span> <span class="k3">!</span><span class="k3">=</span> pDropTarget<span class="k2">)</span>
<span class="number"> 218</span>  <span class="k2">{</span>
<span class="number"> 219</span>    <span class="c">// remove drag+drop</span>
<span class="number"> 220</span>    RevokeDragDrop<span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_win_window_handle"><span class="a">al_get_win_window_handle</span></a><span class="k2">(</span>pDropTarget-&gt;m_display<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 221</span>
<span class="number"> 222</span>    <span class="c">// remove the strong lock</span>
<span class="number"> 223</span>    CoLockObjectExternal<span class="k2">(</span><span class="k2">(</span><span class="k1">struct</span> IUnknown<span class="k3">*</span><span class="k2">)</span>pDropTarget, FALSE, TRUE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 224</span>
<span class="number"> 225</span>    <span class="c">// release our own reference</span>
<span class="number"> 226</span>    <span class="k2">(</span><span class="k2">(</span>IDropTarget<span class="k3">*</span><span class="k2">)</span>pDropTarget<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>lpVtbl-&gt;Release<span class="k2">(</span><span class="k2">(</span>IDropTarget<span class="k3">*</span><span class="k2">)</span>pDropTarget<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 227</span>  <span class="k2">}</span>
<span class="number"> 228</span><span class="k2">}</span>
<span class="number"> 229</span>
<span class="number"> 230</span><span class="k1">void</span> al_set_drop_position_function<span class="k2">(</span><span class="k1">bool</span><span class="k2">(</span><span class="k3">*</span>func<span class="k2">)</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display, <span class="k1">int</span> x, <span class="k1">int</span> y<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 231</span><span class="k2">{</span>
<span class="number"> 232</span>  _al_drop_validate_func <span class="k3">=</span> func<span class="k2">;</span>
<span class="number"> 233</span><span class="k2">}</span>
<span class="number"> 234</span>
<span class="number"> 235</span><span class="k1">void</span> al_set_drop_target_function<span class="k2">(</span><span class="k1">void</span><span class="k2">(</span><span class="k3">*</span>func<span class="k2">)</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display, <span class="k1">int</span> x, <span class="k1">int</span> y, ALLEGRO_DROP_DATA <span class="k3">*</span>pDropData<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 236</span><span class="k2">{</span>
<span class="number"> 237</span>  _al_drop_function <span class="k3">=</span> func<span class="k2">;</span>
<span class="number"> 238</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Tue, 30 Dec 2014 10:20:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You have functions to create and destroy ALLEGRO_DROP_TARGET but I don&#39;t see any public functions that use those.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Tue, 30 Dec 2014 11:03:08 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>DanielH,</p><p>Apologies, thanks for clarifying. Cool feature to add.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Pho75_)</author>
		<pubDate>Tue, 30 Dec 2014 14:42:30 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Trent - I originally had this:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">void</span> al_set_drop_position_function<span class="k2">(</span><span class="k1">bool</span><span class="k2">(</span><span class="k3">*</span>func<span class="k2">)</span><span class="k2">(</span>ALLEGRO_DROP_TARGET <span class="k3">*</span>pDropTarget, y, <span class="k1">int</span> x, <span class="k1">int</span> y<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="k1">void</span> al_set_drop_target_function<span class="k2">(</span><span class="k1">void</span><span class="k2">(</span><span class="k3">*</span>func<span class="k2">)</span><span class="k2">(</span>ALLEGRO_DROP_TARGET <span class="k3">*</span>pDropTarget, <span class="k1">int</span> x, <span class="k1">int</span> y, ALLEGRO_DROP_DATA <span class="k3">*</span>pDropData<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
with a separate function to retrieve the display for that target
</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>al_get_display_from_drop_target<span class="k2">(</span>ALLEGRO_DROP_TARGET <span class="k3">*</span>pDropTarget<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

At the moment, I am simplifying the whole process until I get it working.</p><p><b>UPDATE</b>: I finally have a working prototype. The problem was that the drop target had to be created in the same thread that processes windows messages.</p><p>The new code is set up that all you have to do is <b>or</b> another flag when you create a new display (ALLEGRO_ACCEPT_DROP). This will setup the display to generate drag/drop events. Default: any type any where on the screen. There are functions to change this.</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="c">// events.h</span>
<span class="number">  2</span><span class="k1">enum</span>
<span class="number">  3</span><span class="k2">{</span>
<span class="number">  4</span>  ...
<span class="number">  5</span>  ALLEGRO_EVENT_DRAG_ENTER                  <span class="k3">=</span> <span class="n">48</span>,
<span class="number">  6</span>  ALLEGRO_EVENT_DRAG_OVER                   <span class="k3">=</span> <span class="n">49</span>,
<span class="number">  7</span>  ALLEGRO_EVENT_DRAG_LEAVE                  <span class="k3">=</span> <span class="n">50</span>,
<span class="number">  8</span>  ALLEGRO_EVENT_DROP                        <span class="k3">=</span> <span class="n">51</span>
<span class="number">  9</span><span class="k2">}</span>
<span class="number"> 10</span>
<span class="number"> 11</span><span class="k1">typedef</span> <span class="k1">struct</span> ALLEGRO_DROP_EVENT
<span class="number"> 12</span><span class="k2">{</span>
<span class="number"> 13</span>  _AL_EVENT_HEADER<span class="k2">(</span><span class="k1">struct</span> <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a><span class="k2">)</span>
<span class="number"> 14</span>  <span class="k1">int32_t</span> x<span class="k2">;</span>
<span class="number"> 15</span>  <span class="k1">int32_t</span> y<span class="k2">;</span>
<span class="number"> 16</span>  <span class="k1">int32_t</span> data_type<span class="k2">;</span> <span class="c">// text and bitmaps.</span>
<span class="number"> 17</span>  <span class="k1">struct</span> ALLEGRO_DROP_DATA <span class="k3">*</span>data<span class="k2">;</span>
<span class="number"> 18</span><span class="k2">}</span> ALLEGRO_DROP_EVENT<span class="k2">;</span>
</div></div><p>


</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="c">// drop.h</span>
<span class="number">  2</span><span class="p">#ifndef __al_included_allegro5_drop_h</span>
<span class="number">  3</span><span class="p">#define __al_included_allegro5_drop_h</span>
<span class="number">  4</span>
<span class="number">  5</span><span class="p">#ifdef __cplusplus</span>
<span class="number">  6</span><span class="k1">extern</span> <span class="s">"C"</span> <span class="k2">{</span>
<span class="number">  7</span><span class="p">#endif</span>
<span class="number">  8</span>
<span class="number">  9</span>  <span class="k1">enum</span> <span class="k2">{</span>
<span class="number"> 10</span>    ALLEGRO_DROP_TEXT <span class="k3">=</span> <span class="n">1</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">0</span>,
<span class="number"> 11</span>    ALLEGRO_DROP_BITMAP <span class="k3">=</span> <span class="n">1</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">1</span>,
<span class="number"> 12</span>
<span class="number"> 13</span>    ALLEGRO_DROP_DEFAULT <span class="k3">=</span> <span class="n">0xffff</span>
<span class="number"> 14</span>  <span class="k2">}</span><span class="k2">;</span>
<span class="number"> 15</span>
<span class="number"> 16</span>  <span class="k1">typedef</span> <span class="k1">struct</span> ALLEGRO_DROP_DATA ALLEGRO_DROP_DATA<span class="k2">;</span>
<span class="number"> 17</span>
<span class="number"> 18</span>  <span class="c">// creates a corresponding allegro object (ALLEGRO_USTR,ALLEGRO_BITMAP,...)</span>
<span class="number"> 19</span>  AL_FUNC<span class="k2">(</span><span class="k1">void</span><span class="k3">*</span>, al_retrieve_drop_data, <span class="k2">(</span>ALLEGRO_DROP_DATA <span class="k3">*</span>pDropData<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span>
<span class="number"> 21</span>  <span class="c">// set/get where on the display an item can be droppped (-1 on width/height for full display)</span>
<span class="number"> 22</span>  AL_FUNC<span class="k2">(</span><span class="k1">void</span>, al_set_allow_drop_coordinates, <span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display, <span class="k1">int</span> x, <span class="k1">int</span> y, <span class="k1">int</span> w, <span class="k1">int</span> h<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</span>  AL_FUNC<span class="k2">(</span><span class="k1">void</span>, al_get_allow_drop_coordinates, <span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display, <span class="k1">int</span> <span class="k3">*</span>x, <span class="k1">int</span> <span class="k3">*</span>y, <span class="k1">int</span> <span class="k3">*</span>w, <span class="k1">int</span> <span class="k3">*</span>h<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 24</span>
<span class="number"> 25</span>  <span class="c">// set/get which objects can be dropped</span>
<span class="number"> 26</span>  AL_FUNC<span class="k2">(</span><span class="k1">void</span>, al_set_allow_drop_type, <span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display, <span class="k1">int</span> type<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 27</span>  AL_FUNC<span class="k2">(</span><span class="k1">int</span>, al_get_allow_drop_type, <span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 28</span>
<span class="number"> 29</span><span class="p">#ifdef __cplusplus</span>
<span class="number"> 30</span><span class="k2">}</span>
<span class="number"> 31</span><span class="p">#endif</span>
<span class="number"> 32</span>
<span class="number"> 33</span><span class="p">#endif // !__al_included_allegro5_drop_h</span>
</div></div><p>

The function, <b>al_retrieve_drop_data</b>, needs work. Retrieving text is easy. Converting a HBITMAP to an ALLEGRO_BITMAP is needed.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Mon, 05 Jan 2015 05:55:26 +0000</pubDate>
	</item>
</rss>
