gosu 0.13.3 → 0.14.0.pre2
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 +4 -4
- data/Gosu/Audio.hpp +15 -11
- data/Gosu/Font.hpp +24 -20
- data/Gosu/Fwd.hpp +1 -1
- data/Gosu/Graphics.hpp +8 -9
- data/Gosu/ImageData.hpp +1 -1
- data/Gosu/Input.hpp +1 -1
- data/Gosu/Math.hpp +0 -18
- data/Gosu/Text.hpp +22 -30
- data/Gosu/TextInput.hpp +13 -0
- data/Gosu/Utility.hpp +2 -0
- data/Gosu/Window.hpp +3 -3
- data/README.md +3 -4
- data/ext/gosu/extconf.rb +7 -9
- data/lib/gosu/swig_patches.rb +1 -4
- data/rdoc/gosu.rb +34 -9
- data/src/Audio.cpp +6 -6
- data/src/AudioImpl.cpp +2 -2
- data/src/Bitmap.cpp +1 -2
- data/src/BitmapIO.cpp +21 -2
- data/src/BlockAllocator.cpp +1 -1
- data/src/Channel.cpp +7 -1
- data/src/ClipRectStack.hpp +4 -1
- data/src/Color.cpp +2 -1
- data/src/DirectoriesWin.cpp +1 -1
- data/src/DrawOp.hpp +8 -4
- data/src/DrawOpQueue.hpp +13 -24
- data/src/FileUnix.cpp +3 -1
- data/src/Font.cpp +92 -96
- data/src/GosuGLView.cpp +59 -31
- data/src/GosuGLView.hpp +14 -0
- data/src/GosuViewController.cpp +21 -21
- data/src/{GosuViewController.h → GosuViewController.hpp} +2 -4
- data/src/Graphics.cpp +71 -38
- data/src/GraphicsImpl.hpp +12 -29
- data/src/Image.cpp +5 -7
- data/src/Input.cpp +7 -5
- data/src/InputUIKit.cpp +19 -37
- data/src/Macro.cpp +10 -2
- data/src/MarkupParser.cpp +241 -0
- data/src/MarkupParser.hpp +61 -0
- data/src/Math.cpp +1 -1
- data/src/OffScreenTarget.cpp +99 -0
- data/src/OffScreenTarget.hpp +23 -0
- data/src/OggFile.hpp +10 -0
- data/src/RenderState.hpp +0 -2
- data/src/Resolution.cpp +2 -2
- data/src/RubyGosu.cxx +457 -244
- data/src/TexChunk.cpp +8 -6
- data/src/Text.cpp +58 -345
- data/src/TextBuilder.cpp +138 -0
- data/src/TextBuilder.hpp +55 -0
- data/src/TextInput.cpp +27 -10
- data/src/Texture.cpp +22 -17
- data/src/Texture.hpp +19 -20
- data/src/TimingApple.cpp +5 -7
- data/src/TimingUnix.cpp +1 -4
- data/src/TimingWin.cpp +4 -1
- data/src/TrueTypeFont.cpp +282 -0
- data/src/TrueTypeFont.hpp +66 -0
- data/src/TrueTypeFontApple.cpp +65 -0
- data/src/TrueTypeFontUnix.cpp +91 -0
- data/src/TrueTypeFontWin.cpp +82 -0
- data/src/Utility.cpp +40 -0
- data/src/Window.cpp +7 -6
- data/src/WindowUIKit.cpp +9 -4
- data/src/stb_truetype.h +4589 -0
- data/src/utf8proc.c +755 -0
- data/src/utf8proc.h +699 -0
- data/src/utf8proc_data.h +14386 -0
- metadata +23 -16
- data/src/FormattedString.cpp +0 -237
- data/src/FormattedString.hpp +0 -47
- data/src/GosuAppDelegate.cpp +0 -30
- data/src/GosuAppDelegate.h +0 -8
- data/src/GosuGLView.h +0 -8
- data/src/TextApple.cpp +0 -212
- data/src/TextTTFWin.cpp +0 -197
- data/src/TextUnix.cpp +0 -280
- data/src/TextWin.cpp +0 -191
data/src/TextWin.cpp
DELETED
@@ -1,191 +0,0 @@
|
|
1
|
-
#include <Gosu/Platform.hpp>
|
2
|
-
#if defined(GOSU_IS_WIN)
|
3
|
-
|
4
|
-
#define _WIN32_WINNT 0x0500
|
5
|
-
#include <windows.h>
|
6
|
-
|
7
|
-
#include "WinUtility.hpp"
|
8
|
-
#include <Gosu/Bitmap.hpp>
|
9
|
-
#include <Gosu/Text.hpp>
|
10
|
-
#include <Gosu/Utility.hpp>
|
11
|
-
#include <cstdlib>
|
12
|
-
#include <cwchar>
|
13
|
-
#include <algorithm>
|
14
|
-
#include <map>
|
15
|
-
#include <set>
|
16
|
-
#include <stdexcept>
|
17
|
-
using namespace std;
|
18
|
-
|
19
|
-
string Gosu::default_font_name()
|
20
|
-
{
|
21
|
-
return "Arial";
|
22
|
-
}
|
23
|
-
|
24
|
-
namespace Gosu
|
25
|
-
{
|
26
|
-
string get_name_from_ttf_file(const string& filename);
|
27
|
-
|
28
|
-
namespace
|
29
|
-
{
|
30
|
-
class WinBitmap
|
31
|
-
{
|
32
|
-
WinBitmap(const WinBitmap&);
|
33
|
-
WinBitmap& operator=(const WinBitmap&);
|
34
|
-
|
35
|
-
HDC dc;
|
36
|
-
HBITMAP bitmap;
|
37
|
-
char* pixels;
|
38
|
-
|
39
|
-
public:
|
40
|
-
WinBitmap(unsigned width, unsigned height)
|
41
|
-
{
|
42
|
-
dc = winapi_check(CreateCompatibleDC(0), "creating a device context");
|
43
|
-
|
44
|
-
BITMAPCOREHEADER core_header;
|
45
|
-
core_header.bcSize = sizeof core_header;
|
46
|
-
core_header.bcWidth = width;
|
47
|
-
core_header.bcHeight = height;
|
48
|
-
core_header.bcPlanes = 1;
|
49
|
-
core_header.bcBitCount = 24;
|
50
|
-
|
51
|
-
bitmap = CreateDIBSection(dc, reinterpret_cast<BITMAPINFO*>(&core_header),
|
52
|
-
DIB_RGB_COLORS, reinterpret_cast<VOID**>(&pixels), 0, 0);
|
53
|
-
if (bitmap == 0) {
|
54
|
-
DeleteDC(dc);
|
55
|
-
throw_last_winapi_error("creating a bitmap");
|
56
|
-
}
|
57
|
-
|
58
|
-
SelectObject(dc, bitmap);
|
59
|
-
|
60
|
-
HBRUSH brush = CreateSolidBrush(0x000000);
|
61
|
-
RECT rc = { 0, 0, width, height };
|
62
|
-
FillRect(dc, &rc, brush);
|
63
|
-
DeleteObject(brush);
|
64
|
-
}
|
65
|
-
|
66
|
-
~WinBitmap()
|
67
|
-
{
|
68
|
-
DeleteObject(bitmap);
|
69
|
-
SelectObject(dc, GetStockObject(SYSTEM_FONT));
|
70
|
-
DeleteDC(dc);
|
71
|
-
}
|
72
|
-
|
73
|
-
HDC context() const
|
74
|
-
{
|
75
|
-
return dc;
|
76
|
-
}
|
77
|
-
|
78
|
-
HBITMAP handle() const
|
79
|
-
{
|
80
|
-
return bitmap;
|
81
|
-
}
|
82
|
-
|
83
|
-
void select_font(string font_name, unsigned font_height, unsigned font_flags) const
|
84
|
-
{
|
85
|
-
// TODO for ASYNC support:
|
86
|
-
// Use a lock on both maps.
|
87
|
-
|
88
|
-
// Note:
|
89
|
-
// The caching of opened fonts didn't really show improved text rendering
|
90
|
-
// performance on my test system.
|
91
|
-
// In case of trouble, it can be taken out without worrying too much.
|
92
|
-
|
93
|
-
static map<string, string> custom_fonts;
|
94
|
-
|
95
|
-
if (font_name.find("/") != font_name.npos) {
|
96
|
-
if (custom_fonts.count(font_name) == 0) {
|
97
|
-
AddFontResourceExW(utf8_to_wstring(font_name).c_str(), FR_PRIVATE, 0);
|
98
|
-
font_name = custom_fonts[font_name] = get_name_from_ttf_file(font_name);
|
99
|
-
}
|
100
|
-
else {
|
101
|
-
font_name = custom_fonts[font_name];
|
102
|
-
}
|
103
|
-
}
|
104
|
-
|
105
|
-
static map<pair<string, unsigned>, HFONT> loaded_fonts;
|
106
|
-
|
107
|
-
HFONT font;
|
108
|
-
pair<string, unsigned> key = make_pair(font_name, font_height | font_flags << 16);
|
109
|
-
|
110
|
-
if (loaded_fonts.count(key) == 0) {
|
111
|
-
LOGFONT logfont = {
|
112
|
-
font_height, 0, 0, 0,
|
113
|
-
font_flags & FF_BOLD ? FW_BOLD : FW_NORMAL,
|
114
|
-
font_flags & FF_ITALIC ? TRUE : FALSE,
|
115
|
-
font_flags & FF_UNDERLINE ? TRUE : FALSE, FALSE, DEFAULT_CHARSET,
|
116
|
-
OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, ANTIALIASED_QUALITY,
|
117
|
-
DEFAULT_PITCH | FF_DONTCARE
|
118
|
-
};
|
119
|
-
|
120
|
-
wstring wfont_name = utf8_to_wstring(font_name);
|
121
|
-
wcsncpy(logfont.lfFaceName, wfont_name.c_str(), LF_FACESIZE);
|
122
|
-
logfont.lfFaceName[LF_FACESIZE - 1] = 0;
|
123
|
-
|
124
|
-
font = loaded_fonts[key] = winapi_check(CreateFontIndirect(&logfont),
|
125
|
-
"CreateFontIndirect for " + font_name);
|
126
|
-
}
|
127
|
-
else {
|
128
|
-
font = loaded_fonts[key];
|
129
|
-
}
|
130
|
-
|
131
|
-
SelectObject(dc, font);
|
132
|
-
}
|
133
|
-
};
|
134
|
-
}
|
135
|
-
};
|
136
|
-
|
137
|
-
unsigned Gosu::text_width(const string& text, const string& font_name,
|
138
|
-
unsigned font_height, unsigned font_flags)
|
139
|
-
{
|
140
|
-
if (text.find_first_of("\r\n") != text.npos) {
|
141
|
-
throw invalid_argument("the argument to text_width cannot contain line breaks");
|
142
|
-
}
|
143
|
-
|
144
|
-
WinBitmap helper(1, 1);
|
145
|
-
helper.select_font(font_name, font_height, font_flags);
|
146
|
-
|
147
|
-
wstring wtext = utf8_to_wstring(text);
|
148
|
-
SIZE size;
|
149
|
-
winapi_check(GetTextExtentPoint32W(helper.context(), wtext.c_str(), wtext.length(), &size),
|
150
|
-
"calculating the width of a text");
|
151
|
-
|
152
|
-
return size.cx;
|
153
|
-
}
|
154
|
-
|
155
|
-
void Gosu::draw_text(Bitmap& bitmap, const string& text, int x, int y, Color c,
|
156
|
-
const string& font_name, unsigned font_height, unsigned font_flags)
|
157
|
-
{
|
158
|
-
if (text.find_first_of("\r\n") != text.npos) {
|
159
|
-
throw invalid_argument("the argument to draw_text cannot contain line breaks");
|
160
|
-
}
|
161
|
-
|
162
|
-
unsigned width = text_width(text, font_name, font_height, font_flags);
|
163
|
-
|
164
|
-
WinBitmap helper(width, font_height);
|
165
|
-
helper.select_font(font_name, font_height, font_flags);
|
166
|
-
|
167
|
-
winapi_check(SetTextColor(helper.context(), 0xffffff) != CLR_INVALID,
|
168
|
-
"setting the text color");
|
169
|
-
|
170
|
-
winapi_check(SetBkMode(helper.context(), TRANSPARENT),
|
171
|
-
"setting a bitmap's background mode to TRANSPARENT");
|
172
|
-
|
173
|
-
wstring wtext = utf8_to_wstring(text);
|
174
|
-
ExtTextOutW(helper.context(), 0, 0, 0, 0, wtext.c_str(), wtext.length(), 0);
|
175
|
-
|
176
|
-
for (unsigned rel_y = 0; rel_y < font_height; ++rel_y)
|
177
|
-
for (unsigned rel_x = 0; rel_x < width; ++rel_x) {
|
178
|
-
Color pixel = c;
|
179
|
-
Color::Channel src_alpha = GetPixel(helper.context(), rel_x, rel_y) & 0xff;
|
180
|
-
|
181
|
-
if (src_alpha == 0) continue;
|
182
|
-
|
183
|
-
pixel = multiply(c, Color(src_alpha, 255, 255, 255));
|
184
|
-
if (pixel != 0 && x + rel_x >= 0 && x + rel_x < bitmap.width() &&
|
185
|
-
y + rel_y >= 0 && y + rel_y < bitmap.height()) {
|
186
|
-
bitmap.set_pixel(x + rel_x, y + rel_y, pixel);
|
187
|
-
}
|
188
|
-
}
|
189
|
-
}
|
190
|
-
|
191
|
-
#endif
|