From c998b45d3ecf560b40fa92a49658dd476e40e2ae Mon Sep 17 00:00:00 2001
From: Dan Gudmundsson <dgud@erlang.org>
Date: Tue, 24 Nov 2015 14:33:31 +0100
Subject: wx: Add wxOverlay

---
 lib/wx/api_gen/wx_gen_cpp.erl       |  1 +
 lib/wx/api_gen/wxapi.conf           |  6 ++++
 lib/wx/c_src/gen/wxe_derived_dest.h |  8 ++++-
 lib/wx/c_src/gen/wxe_funcs.cpp      | 52 +++++++++++++++++++++++++++
 lib/wx/c_src/gen/wxe_macros.h       |  8 +++++
 lib/wx/examples/demo/ex_canvas.erl  | 47 ++++++++++++++++++++++---
 lib/wx/src/gen/wxDCOverlay.erl      | 70 +++++++++++++++++++++++++++++++++++++
 lib/wx/src/gen/wxOverlay.erl        | 57 ++++++++++++++++++++++++++++++
 lib/wx/src/gen/wxe_debug.hrl        |  7 ++++
 lib/wx/src/gen/wxe_funcs.hrl        |  7 ++++
 10 files changed, 257 insertions(+), 6 deletions(-)
 create mode 100644 lib/wx/src/gen/wxDCOverlay.erl
 create mode 100644 lib/wx/src/gen/wxOverlay.erl

(limited to 'lib')

diff --git a/lib/wx/api_gen/wx_gen_cpp.erl b/lib/wx/api_gen/wx_gen_cpp.erl
index 5649336b5d..f26aa64b2b 100644
--- a/lib/wx/api_gen/wx_gen_cpp.erl
+++ b/lib/wx/api_gen/wx_gen_cpp.erl
@@ -1141,6 +1141,7 @@ gen_macros() ->
     w("#include <wx/html/htmlcell.h>~n"),
     w("#include <wx/filename.h>~n"),
     w("#include <wx/sysopt.h>~n"),
+    w("#include <wx/overlay.h>~n"),
 
     w("~n~n", []),
     w("#ifndef wxICON_DEFAULT_BITMAP_TYPE~n",[]),
diff --git a/lib/wx/api_gen/wxapi.conf b/lib/wx/api_gen/wxapi.conf
index f076323bea..462a4551a9 100644
--- a/lib/wx/api_gen/wxapi.conf
+++ b/lib/wx/api_gen/wxapi.conf
@@ -1975,3 +1975,9 @@
 
 {class, wxMouseCaptureLostEvent, wxEvent,
  [{event,[wxEVT_MOUSE_CAPTURE_LOST]}],[]}.
+
+{class, wxOverlay, root, [],
+ ['wxOverlay', '~wxOverlay', 'Reset']}.
+
+{class, wxDCOverlay, root, [],
+ ['wxDCOverlay', '~wxDCOverlay', 'Clear']}.
diff --git a/lib/wx/c_src/gen/wxe_derived_dest.h b/lib/wx/c_src/gen/wxe_derived_dest.h
index 03d1502c2a..d26273fb50 100644
--- a/lib/wx/c_src/gen/wxe_derived_dest.h
+++ b/lib/wx/c_src/gen/wxe_derived_dest.h
@@ -1,7 +1,7 @@
 /*
  * %CopyrightBegin%
  *
- * Copyright Ericsson AB 2008-2014. All Rights Reserved.
+ * Copyright Ericsson AB 2008-2015. All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -787,3 +787,9 @@ class EwxPopupTransientWindow : public wxPopupTransientWindow {
 };
 #endif // wxUSE_POPUPWIN
 
+class EwxDCOverlay : public wxDCOverlay {
+ public: ~EwxDCOverlay() {((WxeApp *)wxTheApp)->clearPtr(this);};
+ EwxDCOverlay(wxOverlay& overlay,wxWindowDC * dc,int x,int y,int width,int height) : wxDCOverlay(overlay,dc,x,y,width,height) {};
+ EwxDCOverlay(wxOverlay& overlay,wxWindowDC * dc) : wxDCOverlay(overlay,dc) {};
+};
+
diff --git a/lib/wx/c_src/gen/wxe_funcs.cpp b/lib/wx/c_src/gen/wxe_funcs.cpp
index 3211664499..9c05ad2cf8 100644
--- a/lib/wx/c_src/gen/wxe_funcs.cpp
+++ b/lib/wx/c_src/gen/wxe_funcs.cpp
@@ -31959,6 +31959,56 @@ case wxPopupTransientWindow_Dismiss: { // wxPopupTransientWindow::Dismiss
  break;
 }
 #endif // wxUSE_POPUPWIN
+case wxOverlay_new: { // wxOverlay::wxOverlay
+ wxOverlay * Result = new wxOverlay();
+ newPtr((void *) Result, 236, memenv);
+ rt.addRef(getRef((void *)Result,memenv), "wxOverlay");
+ break;
+}
+case wxOverlay_destruct: { // wxOverlay::~wxOverlay
+ wxOverlay *This = (wxOverlay *) getPtr(bp,memenv); bp += 4;
+ if(This) {   ((WxeApp *) wxTheApp)->clearPtr((void *) This);
+   delete This;}
+ break;
+}
+case wxOverlay_Reset: { // wxOverlay::Reset
+ wxOverlay *This = (wxOverlay *) getPtr(bp,memenv); bp += 4;
+ if(!This) throw wxe_badarg(0);
+ This->Reset();
+ break;
+}
+case wxDCOverlay_new_6: { // wxDCOverlay::wxDCOverlay
+ wxOverlay *overlay = (wxOverlay *) getPtr(bp,memenv); bp += 4;
+ wxWindowDC *dc = (wxWindowDC *) getPtr(bp,memenv); bp += 4;
+ int * x = (int *) bp; bp += 4;
+ int * y = (int *) bp; bp += 4;
+ int * width = (int *) bp; bp += 4;
+ int * height = (int *) bp; bp += 4;
+ wxDCOverlay * Result = new EwxDCOverlay(*overlay,dc,*x,*y,*width,*height);
+ newPtr((void *) Result, 237, memenv);
+ rt.addRef(getRef((void *)Result,memenv), "wxDCOverlay");
+ break;
+}
+case wxDCOverlay_new_2: { // wxDCOverlay::wxDCOverlay
+ wxOverlay *overlay = (wxOverlay *) getPtr(bp,memenv); bp += 4;
+ wxWindowDC *dc = (wxWindowDC *) getPtr(bp,memenv); bp += 4;
+ wxDCOverlay * Result = new EwxDCOverlay(*overlay,dc);
+ newPtr((void *) Result, 237, memenv);
+ rt.addRef(getRef((void *)Result,memenv), "wxDCOverlay");
+ break;
+}
+case wxDCOverlay_destruct: { // wxDCOverlay::~wxDCOverlay
+ wxDCOverlay *This = (wxDCOverlay *) getPtr(bp,memenv); bp += 4;
+ if(This) {   ((WxeApp *) wxTheApp)->clearPtr((void *) This);
+   delete This;}
+ break;
+}
+case wxDCOverlay_Clear: { // wxDCOverlay::Clear
+ wxDCOverlay *This = (wxDCOverlay *) getPtr(bp,memenv); bp += 4;
+ if(!This) throw wxe_badarg(0);
+ This->Clear();
+ break;
+}
   default: {
     wxeReturn error = wxeReturn(WXE_DRV_PORT, Ecmd.caller, false);    error.addAtom("_wxe_error_");
     error.addInt((int) Ecmd.op);
@@ -32005,6 +32055,8 @@ bool WxeApp::delete_object(void *ptr, wxeRefData *refd) {
   case 215: /* delete (wxBitmapDataObject *) ptr;These objects must be deleted by owner object */ break;
   case 227: delete (wxLogNull *) ptr; break;
   case 231: delete (EwxLocale *) ptr; return false;
+  case 236: delete (wxOverlay *) ptr; break;
+  case 237: delete (EwxDCOverlay *) ptr; return false;
   default: delete (wxObject *) ptr; return false;
   }
   return true;
diff --git a/lib/wx/c_src/gen/wxe_macros.h b/lib/wx/c_src/gen/wxe_macros.h
index 59f9c7054e..5f51ac5f91 100644
--- a/lib/wx/c_src/gen/wxe_macros.h
+++ b/lib/wx/c_src/gen/wxe_macros.h
@@ -64,6 +64,7 @@
 #include <wx/html/htmlcell.h>
 #include <wx/filename.h>
 #include <wx/sysopt.h>
+#include <wx/overlay.h>
 
 
 #ifndef wxICON_DEFAULT_BITMAP_TYPE
@@ -3411,5 +3412,12 @@
 #define wxPopupTransientWindow_destruct 3583
 #define wxPopupTransientWindow_Popup 3584
 #define wxPopupTransientWindow_Dismiss 3585
+#define wxOverlay_new 3586
+#define wxOverlay_destruct 3587
+#define wxOverlay_Reset 3588
+#define wxDCOverlay_new_6 3589
+#define wxDCOverlay_new_2 3590
+#define wxDCOverlay_destruct 3591
+#define wxDCOverlay_Clear 3592
 
 
diff --git a/lib/wx/examples/demo/ex_canvas.erl b/lib/wx/examples/demo/ex_canvas.erl
index 1cbb96de1f..cdc783055c 100644
--- a/lib/wx/examples/demo/ex_canvas.erl
+++ b/lib/wx/examples/demo/ex_canvas.erl
@@ -35,7 +35,9 @@
 	  parent,
 	  config,
 	  canvas,
-	  bitmap
+	  bitmap,
+	  overlay,
+	  pos
 	}).
 
 start(Config) ->
@@ -60,6 +62,10 @@ do_init(Config) ->
 
     wxPanel:connect(Canvas, paint, [callback]),
     wxPanel:connect(Canvas, size),
+    wxPanel:connect(Canvas, left_down),
+    wxPanel:connect(Canvas, left_up),
+    wxPanel:connect(Canvas, motion),
+
     wxPanel:connect(Button, command_button_clicked),
 
     %% Add to sizers
@@ -78,7 +84,9 @@ do_init(Config) ->
     Bitmap = wxBitmap:new(erlang:max(W,30),erlang:max(30,H)),
     
     {Panel, #state{parent=Panel, config=Config,
-		   canvas = Canvas, bitmap = Bitmap}}.
+		   canvas = Canvas, bitmap = Bitmap,
+		   overlay = wxOverlay:new()
+		  }}.
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %% Sync event from callback events, paint event must be handled in callbacks
@@ -127,11 +135,39 @@ handle_event(#wx{event = #wxCommand{type = command_button_clicked}},
     wxBitmap:destroy(Bmp),
     {noreply, State};
 handle_event(#wx{event = #wxSize{size={W,H}}},
-	     State = #state{bitmap=Prev}) ->
+	     State = #state{bitmap=Prev, canvas=Canvas}) ->
     Bitmap = wxBitmap:new(W,H),
-    draw(State#state.canvas, Bitmap, fun(DC) -> wxDC:clear(DC) end),
+    draw(Canvas, Bitmap, fun(DC) -> wxDC:clear(DC) end),
     wxBitmap:destroy(Prev),
     {noreply, State#state{bitmap = Bitmap}};
+
+handle_event(#wx{event = #wxMouse{type=left_down, x=X, y=Y}}, State) ->
+    {noreply, State#state{pos={X,Y}}};
+handle_event(#wx{event = #wxMouse{type=motion, x=X1, y=Y1}},
+	     #state{pos=Start, overlay=Overlay, canvas=Canvas} = State) ->
+    case Start of
+	undefined -> ignore;
+	{X0,Y0} ->
+	    DC = wxClientDC:new(Canvas),
+	    DCO = wxDCOverlay:new(Overlay, DC),
+	    wxDCOverlay:clear(DCO),
+	    wxDC:setPen(DC, ?wxLIGHT_GREY_PEN),
+	    wxDC:setBrush(DC, ?wxTRANSPARENT_BRUSH),
+	    wxDC:drawRectangle(DC, {X0,Y0, X1-X0, Y1-Y0}),
+	    wxDCOverlay:destroy(DCO),
+	    wxClientDC:destroy(DC)
+    end,
+    {noreply, State};
+handle_event(#wx{event = #wxMouse{type=left_up}},
+	     #state{overlay=Overlay, canvas=Canvas} = State) ->
+    DC = wxClientDC:new(Canvas),
+    DCO = wxDCOverlay:new(Overlay, DC),
+    wxDCOverlay:clear(DCO),
+    wxDCOverlay:destroy(DCO),
+    wxClientDC:destroy(DC),
+    wxOverlay:reset(Overlay),
+    {noreply, State#state{pos=undefined}};
+
 handle_event(Ev = #wx{}, State = #state{}) ->
     demo:format(State#state.config, "Got Event ~p\n", [Ev]),
     {noreply, State}.
@@ -155,7 +191,8 @@ handle_cast(Msg, State) ->
 code_change(_, _, State) ->
     {stop, ignore, State}.
 
-terminate(_Reason, _) ->
+terminate(_Reason, #state{overlay=Overlay}) ->
+    wxOverlay:destroy(Overlay),
     ok.
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/lib/wx/src/gen/wxDCOverlay.erl b/lib/wx/src/gen/wxDCOverlay.erl
new file mode 100644
index 0000000000..f98e310ba6
--- /dev/null
+++ b/lib/wx/src/gen/wxDCOverlay.erl
@@ -0,0 +1,70 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2008-2015. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%%     http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%% This file is generated DO NOT EDIT
+
+%% @doc See external documentation: <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdcoverlay.html">wxDCOverlay</a>.
+%% @type wxDCOverlay().  An object reference, The representation is internal
+%% and can be changed without notice. It can't be used for comparsion
+%% stored on disc or distributed for use on other nodes.
+
+-module(wxDCOverlay).
+-include("wxe.hrl").
+-export([clear/1,destroy/1,new/2,new/6]).
+
+%% inherited exports
+-export([parent_class/1]).
+
+-export_type([wxDCOverlay/0]).
+%% @hidden
+parent_class(_Class) -> erlang:error({badtype, ?MODULE}).
+
+-type wxDCOverlay() :: wx:wx_object().
+%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdcoverlay.html#wxdcoverlaywxdcoverlay">external documentation</a>.
+-spec new(Overlay, Dc) -> wxDCOverlay() when
+	Overlay::wxOverlay:wxOverlay(), Dc::wxWindowDC:wxWindowDC().
+new(#wx_ref{type=OverlayT,ref=OverlayRef},#wx_ref{type=DcT,ref=DcRef}) ->
+  ?CLASS(OverlayT,wxOverlay),
+  ?CLASS(DcT,wxWindowDC),
+  wxe_util:construct(?wxDCOverlay_new_2,
+  <<OverlayRef:32/?UI,DcRef:32/?UI>>).
+
+%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdcoverlay.html#wxdcoverlaywxdcoverlay">external documentation</a>.
+-spec new(Overlay, Dc, X, Y, Width, Height) -> wxDCOverlay() when
+	Overlay::wxOverlay:wxOverlay(), Dc::wxWindowDC:wxWindowDC(), X::integer(), Y::integer(), Width::integer(), Height::integer().
+new(#wx_ref{type=OverlayT,ref=OverlayRef},#wx_ref{type=DcT,ref=DcRef},X,Y,Width,Height)
+ when is_integer(X),is_integer(Y),is_integer(Width),is_integer(Height) ->
+  ?CLASS(OverlayT,wxOverlay),
+  ?CLASS(DcT,wxWindowDC),
+  wxe_util:construct(?wxDCOverlay_new_6,
+  <<OverlayRef:32/?UI,DcRef:32/?UI,X:32/?UI,Y:32/?UI,Width:32/?UI,Height:32/?UI>>).
+
+%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdcoverlay.html#wxdcoverlayclear">external documentation</a>.
+-spec clear(This) -> ok when
+	This::wxDCOverlay().
+clear(#wx_ref{type=ThisT,ref=ThisRef}) ->
+  ?CLASS(ThisT,wxDCOverlay),
+  wxe_util:cast(?wxDCOverlay_Clear,
+  <<ThisRef:32/?UI>>).
+
+%% @doc Destroys this object, do not use object again
+-spec destroy(This::wxDCOverlay()) -> ok.
+destroy(Obj=#wx_ref{type=Type}) ->
+  ?CLASS(Type,wxDCOverlay),
+  wxe_util:destroy(?wxDCOverlay_destruct,Obj),
+  ok.
diff --git a/lib/wx/src/gen/wxOverlay.erl b/lib/wx/src/gen/wxOverlay.erl
new file mode 100644
index 0000000000..7da3ece657
--- /dev/null
+++ b/lib/wx/src/gen/wxOverlay.erl
@@ -0,0 +1,57 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2008-2015. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%%     http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%% This file is generated DO NOT EDIT
+
+%% @doc See external documentation: <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxoverlay.html">wxOverlay</a>.
+%% @type wxOverlay().  An object reference, The representation is internal
+%% and can be changed without notice. It can't be used for comparsion
+%% stored on disc or distributed for use on other nodes.
+
+-module(wxOverlay).
+-include("wxe.hrl").
+-export([destroy/1,new/0,reset/1]).
+
+%% inherited exports
+-export([parent_class/1]).
+
+-export_type([wxOverlay/0]).
+%% @hidden
+parent_class(_Class) -> erlang:error({badtype, ?MODULE}).
+
+-type wxOverlay() :: wx:wx_object().
+%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxoverlay.html#wxoverlaywxoverlay">external documentation</a>.
+-spec new() -> wxOverlay().
+new() ->
+  wxe_util:construct(?wxOverlay_new,
+  <<>>).
+
+%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxoverlay.html#wxoverlayreset">external documentation</a>.
+-spec reset(This) -> ok when
+	This::wxOverlay().
+reset(#wx_ref{type=ThisT,ref=ThisRef}) ->
+  ?CLASS(ThisT,wxOverlay),
+  wxe_util:cast(?wxOverlay_Reset,
+  <<ThisRef:32/?UI>>).
+
+%% @doc Destroys this object, do not use object again
+-spec destroy(This::wxOverlay()) -> ok.
+destroy(Obj=#wx_ref{type=Type}) ->
+  ?CLASS(Type,wxOverlay),
+  wxe_util:destroy(?wxOverlay_destruct,Obj),
+  ok.
diff --git a/lib/wx/src/gen/wxe_debug.hrl b/lib/wx/src/gen/wxe_debug.hrl
index 2cb73c0fed..6c7602acd3 100644
--- a/lib/wx/src/gen/wxe_debug.hrl
+++ b/lib/wx/src/gen/wxe_debug.hrl
@@ -3363,6 +3363,13 @@ wxdebug_table() ->
  {3583, {wxPopupTransientWindow, destruct, 0}},
  {3584, {wxPopupTransientWindow, popup, 1}},
  {3585, {wxPopupTransientWindow, dismiss, 0}},
+ {3586, {wxOverlay, new, 0}},
+ {3587, {wxOverlay, destruct, 0}},
+ {3588, {wxOverlay, reset, 0}},
+ {3589, {wxDCOverlay, new_6, 6}},
+ {3590, {wxDCOverlay, new_2, 2}},
+ {3591, {wxDCOverlay, destruct, 0}},
+ {3592, {wxDCOverlay, clear, 0}},
  {-1, {mod, func, -1}}
 ].
 
diff --git a/lib/wx/src/gen/wxe_funcs.hrl b/lib/wx/src/gen/wxe_funcs.hrl
index d8c2ba9171..3a34cd494d 100644
--- a/lib/wx/src/gen/wxe_funcs.hrl
+++ b/lib/wx/src/gen/wxe_funcs.hrl
@@ -3360,3 +3360,10 @@
 -define(wxPopupTransientWindow_destruct, 3583).
 -define(wxPopupTransientWindow_Popup, 3584).
 -define(wxPopupTransientWindow_Dismiss, 3585).
+-define(wxOverlay_new, 3586).
+-define(wxOverlay_destruct, 3587).
+-define(wxOverlay_Reset, 3588).
+-define(wxDCOverlay_new_6, 3589).
+-define(wxDCOverlay_new_2, 3590).
+-define(wxDCOverlay_destruct, 3591).
+-define(wxDCOverlay_Clear, 3592).
-- 
cgit v1.2.3