gosu 0.13.3 → 0.14.0.pre2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|