ruby-sdl2 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1c1ea00e7921cc924cf00e9ac5916ba5eb4aad3a
4
- data.tar.gz: 125ed016e9fd2aefd0c779a11f863dacd0cdc0da
3
+ metadata.gz: 0ba98c59e4cc9e1521e4f521a593f9229f4d3b53
4
+ data.tar.gz: 8b61b2c7a6bd524b5fd54ef7ed7e4ec6df16df3d
5
5
  SHA512:
6
- metadata.gz: e19dba994d4b3e138477595ba17ff9fb323da6b98042d7d872f8b202e3d5164edd090cb6ffb76e88f64a1aa63313b43a60bf383cd047a3ef8fcd6a44e36ccda1
7
- data.tar.gz: 12b3ba4f205a47c4e7c59a0b7961ef97bca6bff8b0bedb306d1477b0ab0c86879682d24aa2f697d8be1c58a9768e07c8e3e1cb475a1d7815a39430ddfb5a7196
6
+ metadata.gz: cda57903640382a7780b8ff43faeaebafbfed416ad9003a49069125485c497ad180b17a9f4d403d08da122fdf2bceda509563119fb5b05d8535000ef62053245
7
+ data.tar.gz: 2b923a1f3e19db9d998040bbbe472798b70b6ae034b838f3fa43990ad7090d441d7567b5cf467216dacf115d0f374863b9b226de18100a32c9fdda07013a034a
data/.gitignore CHANGED
@@ -5,6 +5,9 @@ Makefile
5
5
  key.c
6
6
  video.c
7
7
  gl.c
8
+ ttf.c
9
+ mixer.c
10
+ gamecontroller.c
8
11
  pkg/
9
12
  TAGS
10
13
  local/
data/README.md CHANGED
@@ -5,22 +5,21 @@ The simple ruby extension library for SDL 2.x.
5
5
  # Install
6
6
  Before installing Ruby/SDL2, you need to install:
7
7
 
8
+ * [devkit](http://rubyinstaller.org/add-ons/devkit/) (only for windows)
9
+ * M4 (only for installing from git repository)
8
10
  * [SDL 2.x](http://www.libsdl.org/download-2.0.php)
9
11
  * [SDL_image](https://www.libsdl.org/projects/SDL_image/)
10
12
  * [SDL_mixer](https://www.libsdl.org/projects/SDL_mixer/)
11
13
  * [SDL_ttf](https://www.libsdl.org/projects/SDL_ttf/)
12
14
 
13
15
  After installing these libraries, you can install Ruby/SDL2
14
- from github
16
+ from github:
15
17
 
16
18
  git clone https://github.com/ohai/ruby-sdl2.git
17
19
  cd ruby-sdl2
18
- gem build rubysdl2.gem
19
- gem install ruby-sdl2-x.y.z.gem
20
+ rake gem
21
+ gem install pkg/ruby-sdl2-x.y.z.gem
20
22
 
21
- ## Install on Windows
22
- Please write this.
23
-
24
23
  # License
25
24
 
26
25
  LGPL v3 (see {file:COPYING.txt}).
data/Rakefile CHANGED
@@ -10,6 +10,8 @@ RB_FILES = Dir.glob("lib/**/*.rb")
10
10
  POT_SOURCES = RB_FILES + ["main.c"] + (C_FILES - ["main.c"])
11
11
  YARD_SOURCES = "-m markdown --main README.md --files COPYING.txt #{POT_SOURCES.join(" ")}"
12
12
 
13
+ WATCH_TARGETS = (C_FILES - C_FROM_M4_FILES) + C_M4_FILES + ["README.md"]
14
+
13
15
  locale = ENV["YARD_LOCALE"]
14
16
 
15
17
  def extconf_options
@@ -77,6 +79,11 @@ task "doc-all" do
77
79
  raise "Not yet implemented"
78
80
  end
79
81
 
82
+ desc "List undocumented classes/modules/methods/constants"
83
+ task "doc-stat-undocumented" => POT_SOURCES do
84
+ sh "yard stats --list-undoc --compact #{YARD_SOURCES}"
85
+ end
86
+
80
87
  rule ".c" => ".c.m4" do |t|
81
88
  sh "m4 #{t.prerequisites[0]} > #{t.name}"
82
89
  end
@@ -93,3 +100,9 @@ Gem::PackageTask.new(gem_spec) do |pkg|
93
100
  end
94
101
 
95
102
  rule ".gem" => C_FILES
103
+
104
+ task "watch-doc" do
105
+ loop do
106
+ sh "inotifywait -e modify #{WATCH_TARGETS.join(" ")} && rake doc && notify-send -u low \"Ruby/SDL2 build doc OK\""
107
+ end
108
+ end
@@ -1,6 +1,19 @@
1
1
  #include "rubysdl2_internal.h"
2
2
  #include <SDL_clipboard.h>
3
3
 
4
+ /*
5
+ * Document-module: SDL2::Clipboard
6
+ *
7
+ * This module has clipboard manipulating functions.
8
+ *
9
+ */
10
+
11
+ /*
12
+ * Get the text from the clipboard.
13
+ *
14
+ * @return [String] a string in the clipboard
15
+ * @return [nil] if the clipboard is empty
16
+ */
4
17
  static VALUE Clipboard_s_text(VALUE self)
5
18
  {
6
19
  if (SDL_HasClipboardText()) {
@@ -16,12 +29,23 @@ static VALUE Clipboard_s_text(VALUE self)
16
29
  }
17
30
  }
18
31
 
32
+ /*
33
+ * @overload text=(text)
34
+ * Set the text in the clipboard.
35
+ *
36
+ * @param text [String] a new text
37
+ * @return [String] text
38
+ */
19
39
  static VALUE Clipboard_s_set_text(VALUE self, VALUE text)
20
40
  {
21
41
  HANDLE_ERROR(SDL_SetClipboardText(StringValueCStr(text)));
22
42
  return text;
23
43
  }
24
44
 
45
+ /*
46
+ * Return true if the clipboard has any text.
47
+ *
48
+ */
25
49
  static VALUE Clipboard_s_has_text_p(VALUE self)
26
50
  {
27
51
  return INT2BOOL(SDL_HasClipboardText());
data/event.c CHANGED
@@ -33,6 +33,10 @@ static VALUE cEvControllerDevice;
33
33
  static VALUE cEvControllerDeviceAdded;
34
34
  static VALUE cEvControllerDeviceRemoved;
35
35
  static VALUE cEvControllerDeviceRemapped;
36
+ static VALUE cEvTouchFinger;
37
+ static VALUE cEvFingerDown;
38
+ static VALUE cEvFingerUp;
39
+ static VALUE cEvFingerMotion;
36
40
  /* static VALUE cEvUser; */
37
41
  /* static VALUE cEvDrop; */
38
42
 
@@ -137,7 +141,7 @@ static VALUE Event_s_enabled_p(VALUE self)
137
141
  }
138
142
 
139
143
  /*
140
- * @overload enabled=(bool)
144
+ * @overload enable=(bool)
141
145
  * Set wheter the event is enable
142
146
  *
143
147
  * This method is only available for subclasses of SDL2::Event corresponding to
@@ -147,7 +151,7 @@ static VALUE Event_s_enabled_p(VALUE self)
147
151
  * SDL2::Event::MouseWheel.enable = false
148
152
  *
149
153
  * @param [Boolean] bool true for enabling the event.
150
- * @return [bool]
154
+ * @return [Boolean]
151
155
  * @see SDL2::Event.enabled?
152
156
  *
153
157
  */
@@ -198,6 +202,9 @@ static void set_string(char* field, VALUE str, int maxlength)
198
202
  #define EVENT_ACCESSOR_INT(classname, name, field) \
199
203
  EVENT_ACCESSOR(classname, name, field, NUM2INT, INT2NUM)
200
204
 
205
+ #define EVENT_ACCESSOR_DBL(classname, name, field) \
206
+ EVENT_ACCESSOR(classname, name, field, NUM2DBL, DBL2NUM)
207
+
201
208
  #define EVENT_ACCESSOR_BOOL(classname, name, field) \
202
209
  EVENT_ACCESSOR(classname, name, field, RTEST, INT2BOOL)
203
210
 
@@ -635,13 +642,13 @@ static VALUE EvMouseWheel_inspect(VALUE self)
635
642
  *
636
643
  * @attribute pressed
637
644
  * button is pressed or not
638
- * @return [Integer]
645
+ * @return [Boolean]
639
646
  *
640
647
  */
641
648
  EVENT_ACCESSOR_INT(JoyButton, which, jbutton.which);
642
649
  EVENT_ACCESSOR_UINT8(JoyButton, button, jbutton.button);
643
- EVENT_ACCESSOR_BOOL(JoyButton, pressed, jbutton.state)
644
- /* @return [Stirng] inspection string */
650
+ EVENT_ACCESSOR_BOOL(JoyButton, pressed, jbutton.state);
651
+ /* @return [String] inspection string */
645
652
  static VALUE EvJoyButton_inspect(VALUE self)
646
653
  {
647
654
  SDL_Event* ev; Data_Get_Struct(self, SDL_Event, ev);
@@ -765,6 +772,7 @@ static VALUE EvJoyHatMotion_inspect(VALUE self)
765
772
  * {SDL2::Event::JoyDeviceRemoved joystick disconnected events}).
766
773
  */
767
774
  EVENT_ACCESSOR_INT(JoyDevice, which, jdevice.which);
775
+ /* @return [String] inspection string */
768
776
  static VALUE EvJoyDevice_inspect(VALUE self)
769
777
  {
770
778
  SDL_Event* ev; Data_Get_Struct(self, SDL_Event, ev);
@@ -785,9 +793,27 @@ static VALUE EvJoyDevice_inspect(VALUE self)
785
793
  */
786
794
 
787
795
 
796
+ /*
797
+ * Document-class: SDL2::Event::ControllerAxisMotion
798
+ *
799
+ * This class represents the {SDL2::GameController controller} axis motion events.
800
+ *
801
+ * @attribute which
802
+ * the controller index
803
+ * @return [Integer]
804
+ *
805
+ * @attribute axis
806
+ * the axis index
807
+ * @return [Integer]
808
+ *
809
+ * @attribute value
810
+ * the axis value (range: -32768 to -32767, 0 for newtral)
811
+ * @return [Integer]
812
+ */
788
813
  EVENT_ACCESSOR_INT(ControllerAxis, which, caxis.which);
789
814
  EVENT_ACCESSOR_UINT8(ControllerAxis, axis, caxis.axis);
790
815
  EVENT_ACCESSOR_INT(ControllerAxis, value, caxis.value);
816
+ /* @return [String] inspection string */
791
817
  static VALUE ControllerAxis_inspect(VALUE self)
792
818
  {
793
819
  SDL_Event* ev; Data_Get_Struct(self, SDL_Event, ev);
@@ -798,9 +824,33 @@ static VALUE ControllerAxis_inspect(VALUE self)
798
824
  ev->caxis.value);
799
825
  }
800
826
 
827
+ /*
828
+ * Document-class: SDL2::Event::ControllerButton
829
+ *
830
+ * This class represents the {SDL2::GameController controller} button events.
831
+ *
832
+ * You don't handle the instance
833
+ * of this class directly, but you handle the instances of
834
+ * two subclasses of this subclasses:
835
+ * {SDL2::Event::ControllerButtonDown} and {SDL2::Event::ControllerButtonUp}.
836
+ *
837
+ * @attribute which
838
+ * the controller index
839
+ * @return [Integer]
840
+ *
841
+ * @attribute button
842
+ * the controller button index
843
+ * @return [Integer]
844
+ *
845
+ * @attribute pressed
846
+ * button is pressed or not
847
+ * @return [Boolean]
848
+ *
849
+ */
801
850
  EVENT_ACCESSOR_INT(ControllerButton, which, cbutton.which);
802
851
  EVENT_ACCESSOR_UINT8(ControllerButton, button, cbutton.button);
803
852
  EVENT_ACCESSOR_BOOL(ControllerButton, pressed, cbutton.state);
853
+ /* @return [String] inspection string */
804
854
  static VALUE ControllerButton_inspect(VALUE self)
805
855
  {
806
856
  SDL_Event* ev; Data_Get_Struct(self, SDL_Event, ev);
@@ -811,8 +861,36 @@ static VALUE ControllerButton_inspect(VALUE self)
811
861
  SDL_GameControllerGetStringForButton(ev->cbutton.button),
812
862
  INT2BOOLCSTR(ev->cbutton.state));
813
863
  }
864
+ /*
865
+ * Document-class: SDL2::Event::ControllerButtonDown
866
+ *
867
+ * This class represents the {SDL2::GameController controller} button press events.
868
+ */
814
869
 
870
+ /*
871
+ * Document-class: SDL2::Event::ControllerButtonUp
872
+ *
873
+ * This class represents the {SDL2::GameController controller} button release events.
874
+ */
875
+
876
+ /*
877
+ * Document-class: SDL2::Event::ControllerDevice
878
+ *
879
+ * This class represents {SDL2::GameController controller} device events (connected/disconnected/remapped).
880
+ *
881
+ * The event of this event doesn't occur. Only the event of the following subclasses
882
+ * occur in Ruby/SDL2.
883
+ *
884
+ * * {SDL2::Event::ControllerDeviceAdded}
885
+ * * {SDL2::Event::ControllerDeviceRemoved}
886
+ * * {SDL2::Event::ControllerDeviceRemapped}
887
+ *
888
+ * @attribute which
889
+ * the controller index
890
+ * @return [Integer]
891
+ */
815
892
  EVENT_ACCESSOR_INT(ControllerDevice, which, cdevice.which);
893
+ /* @return [String] inspection string */
816
894
  static VALUE ControllerDevice_inspect(VALUE self)
817
895
  {
818
896
  SDL_Event* ev; Data_Get_Struct(self, SDL_Event, ev);
@@ -821,6 +899,119 @@ static VALUE ControllerDevice_inspect(VALUE self)
821
899
  ev->cdevice.which);
822
900
  }
823
901
 
902
+ /*
903
+ * Document-class: SDL2::Event::ControllerDeviceAdded
904
+ *
905
+ * This class represents {SDL2::GameController controller} device connected events.
906
+ */
907
+ /*
908
+ * Document-class: SDL2::Event::ControllerDeviceRemoved
909
+ *
910
+ * This class represents {SDL2::GameController controller} device disconnected events.
911
+ */
912
+ /*
913
+ * Document-class: SDL2::Event::ControllerDeviceRemapped
914
+ *
915
+ * This class represents {SDL2::GameController controller} device remapped events.
916
+ */
917
+
918
+ /*
919
+ * Document-class: SDL2::Event::TouchFinger
920
+ *
921
+ * This class represents touch finger events.
922
+ *
923
+ * You don't handle the instance
924
+ * of this class directly, but you handle the instances of
925
+ * two subclasses of this subclasses:
926
+ * {SDL2::Event::FingerMotion} and {SDL2::Event::MouseButtonUp}.
927
+ *
928
+ * @attribute touch_id
929
+ * the touch device id
930
+ * @return [Integer]
931
+ *
932
+ * @attribute finger_id
933
+ * the finger id
934
+ * @return [Integer]
935
+ *
936
+ * @attribute x
937
+ * the x-axis location of the touch event, normalized (0...1)
938
+ * @return [Float]
939
+ *
940
+ * @attribute y
941
+ * the y-axis location of the touch event, normalized (0...1)
942
+ * @return [Float]
943
+ *
944
+ * @attribute pressure
945
+ * the quantity of pressure applied, normalized (0...1)
946
+ * @return [Float]
947
+ */
948
+ EVENT_ACCESSOR_INT(TouchFinger, touch_id, tfinger.touchId);
949
+ EVENT_ACCESSOR_INT(TouchFinger, finger_id, tfinger.fingerId);
950
+ EVENT_ACCESSOR_DBL(TouchFinger, x, tfinger.x);
951
+ EVENT_ACCESSOR_DBL(TouchFinger, y, tfinger.y);
952
+ EVENT_ACCESSOR_DBL(TouchFinger, pressure, tfinger.pressure);
953
+ /* @return [String] inspection string */
954
+ static VALUE EvTouchFinger_inspect(VALUE self)
955
+ {
956
+ SDL_Event* ev; Data_Get_Struct(self, SDL_Event, ev);
957
+ return rb_sprintf("<%s: type=%u timestamp=%u"
958
+ " touch_id=%d finger_id=%d"
959
+ " x=%f y=%f pressure=%f>",
960
+ rb_obj_classname(self), ev->common.type, ev->common.timestamp,
961
+ (int)ev->tfinger.touchId, (int)ev->tfinger.fingerId,
962
+ ev->tfinger.x, ev->tfinger.y, ev->tfinger.pressure);
963
+ }
964
+
965
+ /*
966
+ * Document-class: SDL2::Event::FingerUp
967
+ * This class represents finger touch events.
968
+ */
969
+ /*
970
+ * Document-class: SDL2::Event::FingerDown
971
+ * This class represents finger release events.
972
+ */
973
+
974
+ /*
975
+ * Document-class: SDL2::Event::FingerMotion
976
+ *
977
+ * This class represents touch move events.
978
+ *
979
+ * @attribute dx
980
+ * the distance moved in the x-axis, normalized (0...1)
981
+ * @return [Float]
982
+ *
983
+ * @attribute dy
984
+ * the distance moved in the x-axis, normalized (0...1)
985
+ * @return [Float]
986
+ *
987
+ */
988
+ EVENT_ACCESSOR_DBL(FingerMotion, dx, tfinger.dx);
989
+ EVENT_ACCESSOR_DBL(FingerMotion, dy, tfinger.dy);
990
+ /* @return [String] inspection string */
991
+ static VALUE EvFingerMotion_inspect(VALUE self)
992
+ {
993
+ SDL_Event* ev; Data_Get_Struct(self, SDL_Event, ev);
994
+ return rb_sprintf("<%s: type=%u timestamp=%u"
995
+ " touch_id=%d finger_id=%d"
996
+ " x=%f y=%f pressure=%f"
997
+ " dy=%f dx=%f>",
998
+ rb_obj_classname(self), ev->common.type, ev->common.timestamp,
999
+ (int) ev->tfinger.touchId, (int) ev->tfinger.fingerId,
1000
+ ev->tfinger.x, ev->tfinger.y, ev->tfinger.pressure,
1001
+ ev->tfinger.dx, ev->tfinger.dx);
1002
+ }
1003
+
1004
+ /*
1005
+ * Document-class: SDL2::Event::SysWM
1006
+ *
1007
+ * This class represents video driver dependent system events.
1008
+ *
1009
+ * This event is disabled by default. You can enable it with {SDL2::Event.enable=}.
1010
+ * This event is now useless because now there is no way to get
1011
+ * driver dependent information from this event class.
1012
+ * You are encouraged to avoid this event.
1013
+ *
1014
+ */
824
1015
  static void connect_event_class(SDL_EventType type, VALUE klass)
825
1016
  {
826
1017
  event_type_to_class[type] = klass;
@@ -856,6 +1047,9 @@ static void init_event_type_to_class(void)
856
1047
  connect_event_class(SDL_CONTROLLERDEVICEADDED, cEvControllerDeviceAdded);
857
1048
  connect_event_class(SDL_CONTROLLERDEVICEREMOVED, cEvControllerDeviceRemoved);
858
1049
  connect_event_class(SDL_CONTROLLERDEVICEREMAPPED, cEvControllerDeviceRemapped);
1050
+ connect_event_class(SDL_FINGERDOWN, cEvFingerDown);
1051
+ connect_event_class(SDL_FINGERUP, cEvFingerUp);
1052
+ connect_event_class(SDL_FINGERMOTION, cEvFingerMotion);
859
1053
  }
860
1054
 
861
1055
  #define DEFINE_EVENT_READER(classname, classvar, name) \
@@ -908,6 +1102,12 @@ void rubysdl2_init_event(void)
908
1102
  cEvControllerDeviceAdded = rb_define_class_under(cEvent, "ControllerDeviceAdded", cEvControllerDevice);
909
1103
  cEvControllerDeviceRemoved = rb_define_class_under(cEvent, "ControllerDeviceRemoved", cEvControllerDevice);
910
1104
  cEvControllerDeviceRemapped = rb_define_class_under(cEvent, "ControllerDeviceRemapped", cEvControllerDevice);
1105
+ cEvTouchFinger = rb_define_class_under(cEvent, "TouchFinger", cEvent);
1106
+ cEvFingerUp = rb_define_class_under(cEvent, "FingerUp", cEvTouchFinger);
1107
+ cEvFingerDown = rb_define_class_under(cEvent, "FingerDown", cEvTouchFinger);
1108
+ cEvFingerMotion = rb_define_class_under(cEvent, "FingerMotion", cEvTouchFinger);
1109
+
1110
+
911
1111
 
912
1112
  DEFINE_EVENT_READER(Event, cEvent, type);
913
1113
  DEFINE_EVENT_ACCESSOR(Event, cEvent, timestamp);
@@ -1022,6 +1222,17 @@ void rubysdl2_init_event(void)
1022
1222
 
1023
1223
  DEFINE_EVENT_ACCESSOR(ControllerDevice, cEvControllerDevice, which);
1024
1224
  rb_define_method(cEvControllerDevice, "inspect", ControllerDevice_inspect, 0);
1225
+
1226
+ DEFINE_EVENT_ACCESSOR(TouchFinger, cEvTouchFinger, touch_id);
1227
+ DEFINE_EVENT_ACCESSOR(TouchFinger, cEvTouchFinger, finger_id);
1228
+ DEFINE_EVENT_ACCESSOR(TouchFinger, cEvTouchFinger, x);
1229
+ DEFINE_EVENT_ACCESSOR(TouchFinger, cEvTouchFinger, y);
1230
+ DEFINE_EVENT_ACCESSOR(TouchFinger, cEvTouchFinger, pressure);
1231
+ rb_define_method(cEvTouchFinger, "inspect", EvTouchFinger_inspect, 0);
1232
+
1233
+ DEFINE_EVENT_ACCESSOR(FingerMotion, cEvFingerMotion, dx);
1234
+ DEFINE_EVENT_ACCESSOR(FingerMotion, cEvFingerMotion, dy);
1235
+ rb_define_method(cEvFingerMotion, "inspect", EvFingerMotion_inspect, 0);
1025
1236
 
1026
1237
  init_event_type_to_class();
1027
1238
  }
@@ -2,6 +2,16 @@
2
2
  #include "rubysdl2_internal.h"
3
3
  #include <SDL_filesystem.h>
4
4
 
5
+ /*
6
+ * Get the directory where the application was run from.
7
+ *
8
+ * In almost all cases, using this method, you will get the directory where ruby executable is in.
9
+ * Probably what you hope is $0 or __FILE__.
10
+ *
11
+ * @return [String] an absolute path in UTF-8 encoding to the application data directory
12
+ * @raise [SDL2::Error] raised if your platform doesn't implement this functionality.
13
+ * @note This method is available since SDL 2.0.1.
14
+ */
5
15
  static VALUE SDL2_s_base_path(VALUE self)
6
16
  {
7
17
  char* path = SDL_GetBasePath();
@@ -13,6 +23,23 @@ static VALUE SDL2_s_base_path(VALUE self)
13
23
  return str;
14
24
  }
15
25
 
26
+ /*
27
+ * @overload preference_path(org, app)
28
+ * Get the "pref dir". You can use the directory to write personal files such as
29
+ * preferences and save games.
30
+ *
31
+ * The directory is unique per user and per application.
32
+ *
33
+ * @param org [String] the name of your organization
34
+ * @param app [String] the name of your application
35
+ * @return [String] a UTF-8 string of the user directory in platform-depnedent notation.
36
+ *
37
+ * @raise [SDL2::Error] raised if your platform doesn't implement this functionality.
38
+ * @note This method is available since SDL 2.0.1.
39
+ *
40
+ * @example
41
+ * SDL2.preference_path("foo", "bar") # => "/home/ohai/.local/share/foo/bar/" (on Linux)
42
+ */
16
43
  static VALUE SDL2_s_preference_path(VALUE self, VALUE org, VALUE app)
17
44
  {
18
45
  char* path = SDL_GetPrefPath(StringValueCStr(org), StringValueCStr(app));