mirror of
https://github.com/ZDoom/Raze.git
synced 2024-11-22 12:11:17 +00:00
updated the game picker code.
This commit is contained in:
parent
48977265ae
commit
21db5d33c2
54 changed files with 3132 additions and 2819 deletions
|
@ -10,8 +10,8 @@ set(ZWIDGET_SOURCES
|
|||
src/core/widget.cpp
|
||||
src/core/utf8reader.cpp
|
||||
src/core/pathfill.cpp
|
||||
src/core/schrift/schrift.cpp
|
||||
src/core/schrift/schrift.h
|
||||
src/core/truetypefont.cpp
|
||||
src/core/truetypefont.h
|
||||
src/core/picopng/picopng.cpp
|
||||
src/core/picopng/picopng.h
|
||||
src/core/nanosvg/nanosvg.cpp
|
||||
|
@ -30,6 +30,7 @@ set(ZWIDGET_SOURCES
|
|||
src/widgets/pushbutton/pushbutton.cpp
|
||||
src/widgets/checkboxlabel/checkboxlabel.cpp
|
||||
src/widgets/listview/listview.cpp
|
||||
src/widgets/tabwidget/tabwidget.cpp
|
||||
src/window/window.cpp
|
||||
)
|
||||
|
||||
|
@ -58,6 +59,7 @@ set(ZWIDGET_INCLUDES
|
|||
include/zwidget/widgets/pushbutton/pushbutton.h
|
||||
include/zwidget/widgets/checkboxlabel/checkboxlabel.h
|
||||
include/zwidget/widgets/listview/listview.h
|
||||
include/zwidget/widgets/tabwidget/tabwidget.h
|
||||
include/zwidget/window/window.h
|
||||
)
|
||||
|
||||
|
@ -76,7 +78,6 @@ set(ZWIDGET_SDL2_SOURCES
|
|||
|
||||
source_group("src" REGULAR_EXPRESSION "${CMAKE_CURRENT_SOURCE_DIR}/src/.+")
|
||||
source_group("src\\core" REGULAR_EXPRESSION "${CMAKE_CURRENT_SOURCE_DIR}/src/core/.+")
|
||||
source_group("src\\core\\schrift" REGULAR_EXPRESSION "${CMAKE_CURRENT_SOURCE_DIR}/src/core/schrift/.+")
|
||||
source_group("src\\core\\picopng" REGULAR_EXPRESSION "${CMAKE_CURRENT_SOURCE_DIR}/src/core/picopng/.+")
|
||||
source_group("src\\core\\nanosvg" REGULAR_EXPRESSION "${CMAKE_CURRENT_SOURCE_DIR}/src/core/nanosvg/.+")
|
||||
source_group("src\\widgets" REGULAR_EXPRESSION "${CMAKE_CURRENT_SOURCE_DIR}/src/widgets/.+")
|
||||
|
@ -92,6 +93,7 @@ source_group("src\\widgets\\textlabel" REGULAR_EXPRESSION "${CMAKE_CURRENT_SOURC
|
|||
source_group("src\\widgets\\pushbutton" REGULAR_EXPRESSION "${CMAKE_CURRENT_SOURCE_DIR}/src/widgets/pushbutton/.+")
|
||||
source_group("src\\widgets\\checkboxlabel" REGULAR_EXPRESSION "${CMAKE_CURRENT_SOURCE_DIR}/src/widgets/checkboxlabel/.+")
|
||||
source_group("src\\widgets\\listview" REGULAR_EXPRESSION "${CMAKE_CURRENT_SOURCE_DIR}/src/widgets/listview/.+")
|
||||
source_group("src\\widgets\\tabwidget" REGULAR_EXPRESSION "${CMAKE_CURRENT_SOURCE_DIR}/src/widgets/tabwidget/.+")
|
||||
source_group("src\\window" REGULAR_EXPRESSION "${CMAKE_CURRENT_SOURCE_DIR}/src/window/.+")
|
||||
source_group("include" REGULAR_EXPRESSION "${CMAKE_CURRENT_SOURCE_DIR}/include/zwidget/.+")
|
||||
source_group("include\\core" REGULAR_EXPRESSION "${CMAKE_CURRENT_SOURCE_DIR}/include/zwidget/core/.+")
|
||||
|
@ -108,6 +110,7 @@ source_group("include\\widgets\\textlabel" REGULAR_EXPRESSION "${CMAKE_CURRENT_S
|
|||
source_group("include\\widgets\\pushbutton" REGULAR_EXPRESSION "${CMAKE_CURRENT_SOURCE_DIR}/include/zwidget/widgets/pushbutton/.+")
|
||||
source_group("include\\widgets\\checkboxlabel" REGULAR_EXPRESSION "${CMAKE_CURRENT_SOURCE_DIR}/include/zwidget/widgets/checkboxlabel/.+")
|
||||
source_group("include\\widgets\\listview" REGULAR_EXPRESSION "${CMAKE_CURRENT_SOURCE_DIR}/include/zwidget/widgets/listview/.+")
|
||||
source_group("include\\widgets\\tabwidget" REGULAR_EXPRESSION "${CMAKE_CURRENT_SOURCE_DIR}/include/zwidget/widgets/tabwidget/.+")
|
||||
source_group("include\\window" REGULAR_EXPRESSION "${CMAKE_CURRENT_SOURCE_DIR}/include/zwidget/window/.+")
|
||||
source_group("include\\window\\win32" REGULAR_EXPRESSION "${CMAKE_CURRENT_SOURCE_DIR}/include/zwidget/window/win32/.+")
|
||||
source_group("include\\window\\sdl2" REGULAR_EXPRESSION "${CMAKE_CURRENT_SOURCE_DIR}/include/zwidget/window/sdl2/.+")
|
||||
|
|
|
@ -7,9 +7,8 @@
|
|||
struct SingleFontData
|
||||
{
|
||||
std::vector<uint8_t> fontdata;
|
||||
std::vector<std::pair<uint32_t, uint32_t>> ranges;
|
||||
int language = -1; // mainly useful if we start supporting Chinese so that we can use another font there than for Japanese.
|
||||
std::string language;
|
||||
};
|
||||
|
||||
std::vector<SingleFontData> LoadWidgetFontData(const std::string& name);
|
||||
std::vector<uint8_t> LoadWidgetImageData(const std::string& name);
|
||||
std::vector<uint8_t> LoadWidgetData(const std::string& name);
|
||||
|
|
|
@ -39,6 +39,10 @@ public:
|
|||
|
||||
// Widget noncontent area
|
||||
void SetNoncontentSizes(double left, double top, double right, double bottom);
|
||||
double GetNoncontentLeft() const { return Noncontent.Left; }
|
||||
double GetNoncontentTop() const { return Noncontent.Top; }
|
||||
double GetNoncontentRight() const { return Noncontent.Right; }
|
||||
double GetNoncontentBottom() const { return Noncontent.Bottom; }
|
||||
|
||||
// Widget frame box
|
||||
Rect GetFrameGeometry() const;
|
||||
|
@ -68,6 +72,7 @@ public:
|
|||
bool HasFocus();
|
||||
bool IsEnabled();
|
||||
bool IsVisible();
|
||||
bool IsHidden();
|
||||
|
||||
void SetFocus();
|
||||
void SetEnabled(bool value);
|
||||
|
@ -86,7 +91,7 @@ public:
|
|||
void SetClipboardText(const std::string& text);
|
||||
|
||||
Widget* Window();
|
||||
Canvas* GetCanvas();
|
||||
Canvas* GetCanvas() const;
|
||||
Widget* ChildAt(double x, double y) { return ChildAt(Point(x, y)); }
|
||||
Widget* ChildAt(const Point& pos);
|
||||
|
||||
|
@ -109,11 +114,11 @@ public:
|
|||
protected:
|
||||
virtual void OnPaintFrame(Canvas* canvas) { }
|
||||
virtual void OnPaint(Canvas* canvas) { }
|
||||
virtual bool OnMouseDown(const Point& pos, int key) { return false; }
|
||||
virtual bool OnMouseDoubleclick(const Point& pos, int key) { return false; }
|
||||
virtual bool OnMouseUp(const Point& pos, int key) { return false; }
|
||||
virtual bool OnMouseWheel(const Point& pos, EInputKey key) { return false; }
|
||||
virtual void OnMouseMove(const Point& pos) { }
|
||||
virtual void OnMouseDown(const Point& pos, int key) { }
|
||||
virtual void OnMouseDoubleclick(const Point& pos, int key) { }
|
||||
virtual void OnMouseUp(const Point& pos, int key) { }
|
||||
virtual void OnMouseWheel(const Point& pos, EInputKey key) { }
|
||||
virtual void OnMouseLeave() { }
|
||||
virtual void OnRawMouseMove(int dx, int dy) { }
|
||||
virtual void OnKeyChar(std::string chars) { }
|
||||
|
@ -176,6 +181,7 @@ private:
|
|||
Widget* FocusWidget = nullptr;
|
||||
Widget* CaptureWidget = nullptr;
|
||||
Widget* HoverWidget = nullptr;
|
||||
bool HiddenFlag = false;
|
||||
|
||||
StandardCursor CurrentCursor = StandardCursor::arrow;
|
||||
|
||||
|
|
|
@ -21,8 +21,8 @@ public:
|
|||
|
||||
protected:
|
||||
void OnPaint(Canvas* canvas) override;
|
||||
void OnMouseDown(const Point& pos, int key) override;
|
||||
void OnMouseUp(const Point& pos, int key) override;
|
||||
bool OnMouseDown(const Point& pos, int key) override;
|
||||
bool OnMouseUp(const Point& pos, int key) override;
|
||||
void OnMouseLeave() override;
|
||||
void OnKeyUp(EInputKey key) override;
|
||||
|
||||
|
|
|
@ -72,9 +72,9 @@ protected:
|
|||
void OnPaintFrame(Canvas* canvas) override;
|
||||
void OnPaint(Canvas* canvas) override;
|
||||
void OnMouseMove(const Point& pos) override;
|
||||
void OnMouseDown(const Point& pos, int key) override;
|
||||
void OnMouseDoubleclick(const Point& pos, int key) override;
|
||||
void OnMouseUp(const Point& pos, int key) override;
|
||||
bool OnMouseDown(const Point& pos, int key) override;
|
||||
bool OnMouseDoubleclick(const Point& pos, int key) override;
|
||||
bool OnMouseUp(const Point& pos, int key) override;
|
||||
void OnKeyChar(std::string chars) override;
|
||||
void OnKeyDown(EInputKey key) override;
|
||||
void OnKeyUp(EInputKey key) override;
|
||||
|
|
|
@ -19,14 +19,15 @@ public:
|
|||
|
||||
void Activate();
|
||||
|
||||
std::function<void(int)> OnChanged;
|
||||
std::function<void()> OnActivated;
|
||||
|
||||
protected:
|
||||
void OnPaint(Canvas* canvas) override;
|
||||
void OnPaintFrame(Canvas* canvas) override;
|
||||
void OnMouseDown(const Point& pos, int key) override;
|
||||
void OnMouseDoubleclick(const Point& pos, int key) override;
|
||||
void OnMouseWheel(const Point& pos, EInputKey key) override;
|
||||
bool OnMouseDown(const Point& pos, int key) override;
|
||||
bool OnMouseDoubleclick(const Point& pos, int key) override;
|
||||
bool OnMouseWheel(const Point& pos, EInputKey key) override;
|
||||
void OnKeyDown(EInputKey key) override;
|
||||
void OnGeometryChanged() override;
|
||||
void OnScrollbarScroll();
|
||||
|
|
|
@ -21,9 +21,9 @@ public:
|
|||
protected:
|
||||
void OnPaintFrame(Canvas* canvas) override;
|
||||
void OnPaint(Canvas* canvas) override;
|
||||
bool OnMouseDown(const Point& pos, int key) override;
|
||||
bool OnMouseUp(const Point& pos, int key) override;
|
||||
void OnMouseMove(const Point& pos) override;
|
||||
void OnMouseDown(const Point& pos, int key) override;
|
||||
void OnMouseUp(const Point& pos, int key) override;
|
||||
void OnMouseLeave() override;
|
||||
void OnKeyDown(EInputKey key) override;
|
||||
void OnKeyUp(EInputKey key) override;
|
||||
|
|
|
@ -47,9 +47,9 @@ public:
|
|||
std::function<void()> FuncScrollEnd;
|
||||
|
||||
protected:
|
||||
bool OnMouseDown(const Point& pos, int key) override;
|
||||
bool OnMouseUp(const Point& pos, int key) override;
|
||||
void OnMouseMove(const Point& pos) override;
|
||||
void OnMouseDown(const Point& pos, int key) override;
|
||||
void OnMouseUp(const Point& pos, int key) override;
|
||||
void OnMouseLeave() override;
|
||||
void OnPaint(Canvas* canvas) override;
|
||||
void OnEnableChanged() override;
|
||||
|
|
124
libraries/ZWidget/include/zwidget/widgets/tabwidget/tabwidget.h
Normal file
124
libraries/ZWidget/include/zwidget/widgets/tabwidget/tabwidget.h
Normal file
|
@ -0,0 +1,124 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include "../../core/widget.h"
|
||||
#include <vector>
|
||||
#include <functional>
|
||||
#include <string>
|
||||
|
||||
class TabBar;
|
||||
class TabBarTab;
|
||||
class TabWidgetStack;
|
||||
class TextLabel;
|
||||
class ImageBox;
|
||||
class Image;
|
||||
|
||||
class TabWidget : public Widget
|
||||
{
|
||||
public:
|
||||
TabWidget(Widget* parent);
|
||||
|
||||
int AddTab(Widget* page, const std::string& label);
|
||||
int AddTab(Widget* page, const std::shared_ptr<Image>& icon, const std::string& label);
|
||||
|
||||
void SetTabText(int index, const std::string& text);
|
||||
void SetTabText(Widget* page, const std::string& text);
|
||||
void SetTabIcon(int index, const std::shared_ptr<Image>& icon);
|
||||
void SetTabIcon(Widget* page, const std::shared_ptr<Image>& icon);
|
||||
|
||||
int GetCurrentIndex() const;
|
||||
Widget* GetCurrentWidget() const;
|
||||
|
||||
int GetPageIndex(Widget* pageWidget) const;
|
||||
|
||||
void SetCurrentIndex(int pageIndex);
|
||||
void SetCurrentWidget(Widget* pageWidget);
|
||||
|
||||
std::function<void()> OnCurrentChanged;
|
||||
|
||||
protected:
|
||||
void OnPaintFrame(Canvas* canvas) override;
|
||||
void OnGeometryChanged() override;
|
||||
|
||||
private:
|
||||
void OnBarCurrentChanged();
|
||||
|
||||
TabBar* Bar = nullptr;
|
||||
TabWidgetStack* PageStack = nullptr;
|
||||
std::vector<Widget*> Pages;
|
||||
};
|
||||
|
||||
class TabBar : public Widget
|
||||
{
|
||||
public:
|
||||
TabBar(Widget* parent);
|
||||
|
||||
int AddTab(const std::string& label);
|
||||
int AddTab(const std::shared_ptr<Image>& icon, const std::string& label);
|
||||
|
||||
void SetTabText(int index, const std::string& text);
|
||||
void SetTabIcon(int index, const std::shared_ptr<Image>& icon);
|
||||
|
||||
int GetCurrentIndex() const;
|
||||
void SetCurrentIndex(int pageIndex);
|
||||
|
||||
double GetPreferredHeight() const { return 30.0; }
|
||||
|
||||
std::function<void()> OnCurrentChanged;
|
||||
|
||||
protected:
|
||||
void OnPaintFrame(Canvas* canvas) override;
|
||||
void OnGeometryChanged() override;
|
||||
|
||||
private:
|
||||
void OnTabClicked(TabBarTab* tab);
|
||||
int GetTabIndex(TabBarTab* tab);
|
||||
|
||||
int CurrentIndex = -1;
|
||||
std::vector<TabBarTab*> Tabs;
|
||||
};
|
||||
|
||||
class TabBarTab : public Widget
|
||||
{
|
||||
public:
|
||||
TabBarTab(Widget* parent);
|
||||
|
||||
void SetText(const std::string& text);
|
||||
void SetIcon(const std::shared_ptr<Image>& icon);
|
||||
void SetCurrent(bool value);
|
||||
|
||||
double GetPreferredWidth() const;
|
||||
|
||||
std::function<void()> OnClick;
|
||||
|
||||
protected:
|
||||
void OnPaintFrame(Canvas* canvas) override;
|
||||
void OnGeometryChanged() override;
|
||||
bool OnMouseDown(const Point& pos, int key) override;
|
||||
bool OnMouseUp(const Point& pos, int key) override;
|
||||
void OnMouseMove(const Point& pos) override;
|
||||
void OnMouseLeave() override;
|
||||
|
||||
private:
|
||||
bool IsCurrent = false;
|
||||
|
||||
ImageBox* Icon = nullptr;
|
||||
TextLabel* Label = nullptr;
|
||||
bool hot = false;
|
||||
};
|
||||
|
||||
class TabWidgetStack : public Widget
|
||||
{
|
||||
public:
|
||||
TabWidgetStack(Widget* parent);
|
||||
|
||||
void SetCurrentWidget(Widget* widget);
|
||||
Widget* GetCurrentWidget() const { return CurrentWidget; }
|
||||
|
||||
protected:
|
||||
void OnPaintFrame(Canvas* canvas) override;
|
||||
void OnGeometryChanged() override;
|
||||
|
||||
private:
|
||||
Widget* CurrentWidget = nullptr;
|
||||
};
|
|
@ -56,9 +56,9 @@ protected:
|
|||
void OnPaintFrame(Canvas* canvas) override;
|
||||
void OnPaint(Canvas* canvas) override;
|
||||
void OnMouseMove(const Point& pos) override;
|
||||
void OnMouseDown(const Point& pos, int key) override;
|
||||
void OnMouseDoubleclick(const Point& pos, int key) override;
|
||||
void OnMouseUp(const Point& pos, int key) override;
|
||||
bool OnMouseDown(const Point& pos, int key) override;
|
||||
bool OnMouseDoubleclick(const Point& pos, int key) override;
|
||||
bool OnMouseUp(const Point& pos, int key) override;
|
||||
void OnKeyChar(std::string chars) override;
|
||||
void OnKeyDown(EInputKey key) override;
|
||||
void OnKeyUp(EInputKey key) override;
|
||||
|
|
|
@ -21,6 +21,7 @@ public:
|
|||
void SetTextAlignment(TextLabelAlignment alignment);
|
||||
TextLabelAlignment GetTextAlignment() const;
|
||||
|
||||
double GetPreferredWidth() const;
|
||||
double GetPreferredHeight() const;
|
||||
|
||||
protected:
|
||||
|
|
|
@ -5,8 +5,9 @@
|
|||
#include "core/utf8reader.h"
|
||||
#include "core/resourcedata.h"
|
||||
#include "core/image.h"
|
||||
#include "core/truetypefont.h"
|
||||
#include "core/pathfill.h"
|
||||
#include "window/window.h"
|
||||
#include "schrift/schrift.h"
|
||||
#include <vector>
|
||||
#include <unordered_map>
|
||||
#include <stdexcept>
|
||||
|
@ -23,8 +24,12 @@ public:
|
|||
class CanvasGlyph
|
||||
{
|
||||
public:
|
||||
SFT_Glyph id;
|
||||
SFT_GMetrics metrics;
|
||||
struct
|
||||
{
|
||||
double leftSideBearing = 0.0;
|
||||
double yOffset = 0.0;
|
||||
double advanceWidth = 0.0;
|
||||
} metrics;
|
||||
|
||||
double u = 0.0;
|
||||
double v = 0.0;
|
||||
|
@ -38,68 +43,39 @@ class CanvasFont
|
|||
public:
|
||||
CanvasFont(const std::string& fontname, double height, std::vector<uint8_t>& _data) : fontname(fontname), height(height)
|
||||
{
|
||||
data = std::move(_data);
|
||||
loadFont(data.data(), data.size());
|
||||
|
||||
try
|
||||
{
|
||||
if (sft_lmetrics(&sft, &textmetrics) < 0)
|
||||
throw std::runtime_error("Could not get truetype font metrics");
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
sft_freefont(sft.font);
|
||||
throw;
|
||||
}
|
||||
auto tdata = std::make_shared<TrueTypeFontFileData>(_data);
|
||||
ttf = std::make_unique<TrueTypeFont>(tdata);
|
||||
textmetrics = ttf->GetTextMetrics(height);
|
||||
}
|
||||
|
||||
~CanvasFont()
|
||||
{
|
||||
sft_freefont(sft.font);
|
||||
sft.font = nullptr;
|
||||
}
|
||||
|
||||
CanvasGlyph* getGlyph(uint32_t utfchar)
|
||||
{
|
||||
auto& glyph = glyphs[utfchar];
|
||||
uint32_t glyphIndex = ttf->GetGlyphIndex(utfchar);
|
||||
if (glyphIndex == 0) return nullptr;
|
||||
|
||||
auto& glyph = glyphs[glyphIndex];
|
||||
if (glyph)
|
||||
return glyph.get();
|
||||
|
||||
glyph = std::make_unique<CanvasGlyph>();
|
||||
|
||||
if (sft_lookup(&sft, utfchar, &glyph->id) < 0)
|
||||
return glyph.get();
|
||||
|
||||
if (sft_gmetrics(&sft, glyph->id, &glyph->metrics) < 0)
|
||||
return glyph.get();
|
||||
|
||||
glyph->metrics.advanceWidth /= 3.0;
|
||||
glyph->metrics.leftSideBearing /= 3.0;
|
||||
|
||||
if (glyph->metrics.minWidth <= 0 || glyph->metrics.minHeight <= 0)
|
||||
return glyph.get();
|
||||
|
||||
int w = (glyph->metrics.minWidth + 3) & ~3;
|
||||
int h = glyph->metrics.minHeight;
|
||||
TrueTypeGlyph ttfglyph = ttf->LoadGlyph(glyphIndex, height);
|
||||
|
||||
// Create final subpixel version
|
||||
int w = ttfglyph.width;
|
||||
int h = ttfglyph.height;
|
||||
int destwidth = (w + 2) / 3;
|
||||
|
||||
auto texture = std::make_shared<CanvasTexture>();
|
||||
texture->Width = destwidth;
|
||||
texture->Height = h;
|
||||
texture->Data.resize(destwidth * h);
|
||||
|
||||
uint8_t* grayscale = ttfglyph.grayscale.get();
|
||||
uint32_t* dest = (uint32_t*)texture->Data.data();
|
||||
|
||||
std::unique_ptr<uint8_t[]> grayscalebuffer(new uint8_t[w * h]);
|
||||
uint8_t* grayscale = grayscalebuffer.get();
|
||||
|
||||
SFT_Image img = {};
|
||||
img.width = w;
|
||||
img.height = h;
|
||||
img.pixels = grayscale;
|
||||
if (sft_render(&sft, glyph->id, img) < 0)
|
||||
return glyph.get();
|
||||
|
||||
for (int y = 0; y < h; y++)
|
||||
{
|
||||
uint8_t* sline = grayscale + y * w;
|
||||
|
@ -130,26 +106,20 @@ public:
|
|||
glyph->uvheight = h;
|
||||
glyph->texture = std::move(texture);
|
||||
|
||||
glyph->metrics.advanceWidth = (ttfglyph.advanceWidth + 2) / 3;
|
||||
glyph->metrics.leftSideBearing = (ttfglyph.leftSideBearing + 2) / 3;
|
||||
glyph->metrics.yOffset = ttfglyph.yOffset;
|
||||
|
||||
return glyph.get();
|
||||
}
|
||||
|
||||
std::unique_ptr<TrueTypeFont> ttf;
|
||||
|
||||
std::string fontname;
|
||||
double height = 0.0;
|
||||
|
||||
SFT_LMetrics textmetrics = {};
|
||||
TrueTypeTextMetrics textmetrics;
|
||||
std::unordered_map<uint32_t, std::unique_ptr<CanvasGlyph>> glyphs;
|
||||
|
||||
private:
|
||||
void loadFont(const void* data, size_t size)
|
||||
{
|
||||
sft.xScale = height * 3;
|
||||
sft.yScale = height;
|
||||
sft.flags = SFT_DOWNWARD_Y;
|
||||
sft.font = sft_loadmem(data, size);
|
||||
}
|
||||
|
||||
SFT sft = {};
|
||||
std::vector<uint8_t> data;
|
||||
};
|
||||
|
||||
class CanvasFontGroup
|
||||
|
@ -158,8 +128,7 @@ public:
|
|||
struct SingleFont
|
||||
{
|
||||
std::unique_ptr<CanvasFont> font;
|
||||
std::vector<std::pair<uint32_t, uint32_t>> ranges;
|
||||
int language; // mainly useful if we start supporting Chinese so that we can use another font there than for Japanese.
|
||||
std::string language;
|
||||
};
|
||||
CanvasFontGroup(const std::string& fontname, double height) : height(height)
|
||||
{
|
||||
|
@ -168,40 +137,28 @@ public:
|
|||
for (size_t i = 0; i < fonts.size(); i++)
|
||||
{
|
||||
fonts[i].font = std::make_unique<CanvasFont>(fontname, height, fontdata[i].fontdata);
|
||||
fonts[i].ranges = std::move(fontdata[i].ranges);
|
||||
fonts[i].language = fontdata[i].language;
|
||||
}
|
||||
}
|
||||
|
||||
CanvasGlyph* getGlyph(uint32_t utfchar)
|
||||
CanvasGlyph* getGlyph(uint32_t utfchar, const char* lang = nullptr)
|
||||
{
|
||||
if (utfchar >= 0x530 && utfchar < 0x590)
|
||||
for (int i = 0; i < 2; i++)
|
||||
{
|
||||
int a = 0;
|
||||
}
|
||||
for (auto& fd : fonts)
|
||||
{
|
||||
bool get = false;
|
||||
if (fd.ranges.size() == 0) get = true;
|
||||
else for (auto r : fd.ranges)
|
||||
{
|
||||
if (utfchar >= r.first && utfchar <= r.second)
|
||||
{
|
||||
get = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (get)
|
||||
if (i == 1 || lang == nullptr || *lang == 0 || fd.language.empty() || fd.language == lang)
|
||||
{
|
||||
auto g = fd.font->getGlyph(utfchar);
|
||||
if (g) return g;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
SFT_LMetrics& GetTextMetrics()
|
||||
TrueTypeTextMetrics& GetTextMetrics()
|
||||
{
|
||||
return fonts[0].font->textmetrics;
|
||||
}
|
||||
|
@ -263,6 +220,8 @@ public:
|
|||
int getClipMaxX() const;
|
||||
int getClipMaxY() const;
|
||||
|
||||
void setLanguage(const char* lang) { language = lang; }
|
||||
|
||||
std::unique_ptr<CanvasTexture> createTexture(int width, int height, const void* pixels, ImageFormat format = ImageFormat::B8G8R8A8);
|
||||
|
||||
template<typename T>
|
||||
|
@ -282,6 +241,7 @@ public:
|
|||
std::vector<uint32_t> pixels;
|
||||
|
||||
std::unordered_map<std::shared_ptr<Image>, std::unique_ptr<CanvasTexture>> imageTextures;
|
||||
std::string language;
|
||||
};
|
||||
|
||||
BitmapCanvas::BitmapCanvas(DisplayWindow* window) : window(window)
|
||||
|
@ -289,7 +249,7 @@ BitmapCanvas::BitmapCanvas(DisplayWindow* window) : window(window)
|
|||
uiscale = window->GetDpiScale();
|
||||
uint32_t white = 0xffffffff;
|
||||
whiteTexture = createTexture(1, 1, &white);
|
||||
font = std::make_unique<CanvasFontGroup>("NotoSans", 16.0 * uiscale);
|
||||
font = std::make_unique<CanvasFontGroup>("NotoSans", 13.0 * uiscale);
|
||||
}
|
||||
|
||||
BitmapCanvas::~BitmapCanvas()
|
||||
|
@ -449,8 +409,8 @@ void BitmapCanvas::drawText(const Point& pos, const Colorf& color, const std::st
|
|||
UTF8Reader reader(text.data(), text.size());
|
||||
while (!reader.is_end())
|
||||
{
|
||||
CanvasGlyph* glyph = font->getGlyph(reader.character());
|
||||
if (!glyph->texture)
|
||||
CanvasGlyph* glyph = font->getGlyph(reader.character(), language.c_str());
|
||||
if (!glyph || !glyph->texture)
|
||||
{
|
||||
glyph = font->getGlyph(32);
|
||||
}
|
||||
|
@ -475,8 +435,8 @@ Rect BitmapCanvas::measureText(const std::string& text)
|
|||
UTF8Reader reader(text.data(), text.size());
|
||||
while (!reader.is_end())
|
||||
{
|
||||
CanvasGlyph* glyph = font->getGlyph(reader.character());
|
||||
if (!glyph->texture)
|
||||
CanvasGlyph* glyph = font->getGlyph(reader.character(), language.c_str());
|
||||
if (!glyph || !glyph->texture)
|
||||
{
|
||||
glyph = font->getGlyph(32);
|
||||
}
|
||||
|
|
|
@ -62,7 +62,7 @@ std::shared_ptr<Image> Image::LoadResource(const std::string& resourcename, doub
|
|||
|
||||
if (extension == "png")
|
||||
{
|
||||
auto filedata = LoadWidgetImageData(resourcename);
|
||||
auto filedata = LoadWidgetData(resourcename);
|
||||
|
||||
std::vector<unsigned char> pixels;
|
||||
unsigned long width = 0, height = 0;
|
||||
|
@ -74,7 +74,7 @@ std::shared_ptr<Image> Image::LoadResource(const std::string& resourcename, doub
|
|||
}
|
||||
else if (extension == "svg")
|
||||
{
|
||||
auto filedata = LoadWidgetImageData(resourcename);
|
||||
auto filedata = LoadWidgetData(resourcename);
|
||||
filedata.push_back(0);
|
||||
|
||||
NSVGimage* svgimage = nsvgParse((char*)filedata.data(), "px", (float)(96.0 * dpiscale));
|
||||
|
|
|
@ -193,7 +193,7 @@ void nsvgDelete(NSVGimage* image);
|
|||
#include <math.h>
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning(push);
|
||||
#pragma warning(push)
|
||||
#pragma warning(disable:4244)
|
||||
#endif
|
||||
|
||||
|
@ -3099,7 +3099,7 @@ void nsvgDelete(NSVGimage* image)
|
|||
}
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning(pop);
|
||||
#pragma warning(pop)
|
||||
#endif
|
||||
|
||||
#endif // NANOSVG_IMPLEMENTATION
|
||||
|
|
|
@ -122,6 +122,12 @@ private:
|
|||
|
||||
void PathFillDesc::Rasterize(uint8_t* dest, int width, int height, bool blend)
|
||||
{
|
||||
if (!blend)
|
||||
{
|
||||
memset(dest, 0, width * height);
|
||||
}
|
||||
PathFillRasterizer rasterizer;
|
||||
rasterizer.Rasterize(*this, dest, width, height);
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -131,15 +137,15 @@ void PathFillRasterizer::Rasterize(const PathFillDesc& path, uint8_t* dest, int
|
|||
Clear();
|
||||
|
||||
// For simplicity of the code, ensure the mask is always a multiple of MaskBlockSize
|
||||
int block_width = MaskBlockSize * ((dest_width + MaskBlockSize - 1) / MaskBlockSize);
|
||||
int block_height = MaskBlockSize * ((dest_height + MaskBlockSize - 1) / MaskBlockSize);
|
||||
int block_width = ScanlineBlockSize * ((dest_width + MaskBlockSize - 1) / MaskBlockSize);
|
||||
int block_height = ScanlineBlockSize * ((dest_height + MaskBlockSize - 1) / MaskBlockSize);
|
||||
|
||||
if (width != block_width || height != block_height)
|
||||
{
|
||||
width = block_width;
|
||||
height = block_height;
|
||||
|
||||
scanlines.resize(block_height * AntialiasLevel);
|
||||
scanlines.resize(block_height);
|
||||
first_scanline = scanlines.size();
|
||||
last_scanline = 0;
|
||||
}
|
||||
|
@ -209,7 +215,7 @@ void PathFillRasterizer::Fill(PathFillMode mode, uint8_t* dest, int dest_width,
|
|||
{
|
||||
for (int i = 0; i < count_y; i++)
|
||||
{
|
||||
uint8_t* dline = dest + (dest_y + i) * dest_width;
|
||||
uint8_t* dline = dest + dest_x + (dest_y + i) * dest_width;
|
||||
memset(dline, 255, count_x);
|
||||
}
|
||||
}
|
||||
|
@ -218,7 +224,7 @@ void PathFillRasterizer::Fill(PathFillMode mode, uint8_t* dest, int dest_width,
|
|||
for (int i = 0; i < count_y; i++)
|
||||
{
|
||||
const uint8_t* sline = mask_blocks.MaskBufferData + i * MaskBlockSize;
|
||||
uint8_t* dline = dest + (dest_y + i) * dest_width;
|
||||
uint8_t* dline = dest + dest_x + (dest_y + i) * dest_width;
|
||||
for (int j = 0; j < count_x; j++)
|
||||
{
|
||||
dline[j] = std::min((int)dline[j] + (int)sline[j], 255);
|
||||
|
@ -238,16 +244,11 @@ PathFillRasterizer::Extent PathFillRasterizer::FindExtent(const PathScanline* sc
|
|||
if (scanline->edges.empty())
|
||||
continue;
|
||||
|
||||
if (scanline->edges[0].x < extent.left)
|
||||
extent.left = scanline->edges[0].x;
|
||||
|
||||
if (scanline->edges[scanline->edges.size() - 1].x > extent.right)
|
||||
extent.right = scanline->edges[scanline->edges.size() - 1].x;
|
||||
extent.left = std::min(extent.left, (int)scanline->edges.front().x);
|
||||
extent.right = std::max(extent.right, (int)scanline->edges.back().x);
|
||||
}
|
||||
if (extent.left < 0)
|
||||
extent.left = 0;
|
||||
if (extent.right > max_width)
|
||||
extent.right = max_width;
|
||||
extent.left = std::max(extent.left, 0);
|
||||
extent.right = std::min(extent.right, max_width);
|
||||
|
||||
return extent;
|
||||
}
|
||||
|
@ -397,7 +398,7 @@ void PathFillRasterizer::Line(double x1, double y1)
|
|||
int end_y = static_cast<int>(std::floor(std::max(y0, y1) - 0.5f)) + 1;
|
||||
|
||||
start_y = std::max(start_y, 0);
|
||||
end_y = std::min(end_y, height * AntialiasLevel);
|
||||
end_y = std::min(end_y, height);
|
||||
|
||||
double rcp_dy = 1.0 / dy;
|
||||
|
||||
|
|
|
@ -1,16 +0,0 @@
|
|||
ISC License
|
||||
|
||||
© 2019-2022 Thomas Oltmann and contributors
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any
|
||||
purpose with or without fee is hereby granted, provided that the above
|
||||
copyright notice and this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
|
File diff suppressed because it is too large
Load diff
|
@ -1,95 +0,0 @@
|
|||
/* This file is part of libschrift.
|
||||
*
|
||||
* © 2019-2022 Thomas Oltmann and contributors
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
|
||||
|
||||
#ifndef SCHRIFT_H
|
||||
#define SCHRIFT_H 1
|
||||
|
||||
#include <stddef.h> /* size_t */
|
||||
#include <stdint.h> /* uint_fast32_t, uint_least32_t */
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define SFT_DOWNWARD_Y 0x01
|
||||
|
||||
typedef struct SFT SFT;
|
||||
typedef struct SFT_Font SFT_Font;
|
||||
typedef uint_least32_t SFT_UChar; /* Guaranteed to be compatible with char32_t. */
|
||||
typedef uint_fast32_t SFT_Glyph;
|
||||
typedef struct SFT_LMetrics SFT_LMetrics;
|
||||
typedef struct SFT_GMetrics SFT_GMetrics;
|
||||
typedef struct SFT_Kerning SFT_Kerning;
|
||||
typedef struct SFT_Image SFT_Image;
|
||||
|
||||
struct SFT
|
||||
{
|
||||
SFT_Font *font;
|
||||
double xScale;
|
||||
double yScale;
|
||||
double xOffset;
|
||||
double yOffset;
|
||||
int flags;
|
||||
};
|
||||
|
||||
struct SFT_LMetrics
|
||||
{
|
||||
double ascender;
|
||||
double descender;
|
||||
double lineGap;
|
||||
};
|
||||
|
||||
struct SFT_GMetrics
|
||||
{
|
||||
double advanceWidth;
|
||||
double leftSideBearing;
|
||||
int yOffset;
|
||||
int minWidth;
|
||||
int minHeight;
|
||||
};
|
||||
|
||||
struct SFT_Kerning
|
||||
{
|
||||
double xShift;
|
||||
double yShift;
|
||||
};
|
||||
|
||||
struct SFT_Image
|
||||
{
|
||||
void *pixels;
|
||||
int width;
|
||||
int height;
|
||||
};
|
||||
|
||||
const char *sft_version(void);
|
||||
|
||||
SFT_Font *sft_loadmem (const void *mem, size_t size);
|
||||
SFT_Font *sft_loadfile(const char *filename);
|
||||
void sft_freefont(SFT_Font *font);
|
||||
|
||||
int sft_lmetrics(const SFT *sft, SFT_LMetrics *metrics);
|
||||
int sft_lookup (const SFT *sft, SFT_UChar codepoint, SFT_Glyph *glyph);
|
||||
int sft_gmetrics(const SFT *sft, SFT_Glyph glyph, SFT_GMetrics *metrics);
|
||||
int sft_kerning (const SFT *sft, SFT_Glyph leftGlyph, SFT_Glyph rightGlyph,
|
||||
SFT_Kerning *kerning);
|
||||
int sft_render (const SFT *sft, SFT_Glyph glyph, SFT_Image image);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
1201
libraries/ZWidget/src/core/truetypefont.cpp
Normal file
1201
libraries/ZWidget/src/core/truetypefont.cpp
Normal file
File diff suppressed because it is too large
Load diff
527
libraries/ZWidget/src/core/truetypefont.h
Normal file
527
libraries/ZWidget/src/core/truetypefont.h
Normal file
|
@ -0,0 +1,527 @@
|
|||
#pragma once
|
||||
|
||||
#include <cstdint>
|
||||
#include <array>
|
||||
#include <vector>
|
||||
#include <stdexcept>
|
||||
#include <memory>
|
||||
#include <cstring>
|
||||
#include <string>
|
||||
|
||||
typedef uint8_t ttf_uint8;
|
||||
typedef uint16_t ttf_uint16;
|
||||
typedef uint32_t ttf_uint24; // 24-bit unsigned integer
|
||||
typedef uint32_t ttf_uint32;
|
||||
|
||||
typedef int8_t ttf_int8;
|
||||
typedef int16_t ttf_int16;
|
||||
typedef int32_t ttf_int32;
|
||||
|
||||
typedef uint32_t ttf_Fixed; // 32-bit signed fixed-point number (16.16)
|
||||
typedef uint16_t ttf_UFWORD; // uint16 that describes a quantity in font design units
|
||||
typedef int16_t ttf_FWORD; // int16 that describes a quantity in font design units
|
||||
typedef uint16_t ttf_F2DOT14; // 16-bit signed fixed number with the low 14 bits of fraction (2.14)
|
||||
typedef uint64_t ttf_LONGDATETIME; // number of seconds since 12:00 midnight, January 1, 1904, UTC
|
||||
|
||||
typedef std::array<uint8_t, 4> ttf_Tag; // 4 byte identifier
|
||||
|
||||
typedef uint16_t ttf_Offset16; // Short offset to a table, same as uint16, NULL offset = 0x0000
|
||||
typedef uint32_t ttf_Offset24; // 24-bit offset to a table, same as uint24, NULL offset = 0x000000
|
||||
typedef uint32_t ttf_Offset32; // Long offset to a table, same as uint32, NULL offset = 0x00000000
|
||||
|
||||
typedef uint32_t ttf_Version16Dot16; // Packed 32-bit value with major and minor version numbers
|
||||
|
||||
class TrueTypeFileReader
|
||||
{
|
||||
public:
|
||||
TrueTypeFileReader() = default;
|
||||
TrueTypeFileReader(const void* data, size_t size) : data(static_cast<const uint8_t*>(data)), size(size) { }
|
||||
|
||||
bool IsEndOfData() const { return pos == size; }
|
||||
|
||||
ttf_uint8 ReadUInt8();
|
||||
ttf_uint16 ReadUInt16();
|
||||
ttf_uint24 ReadUInt24();
|
||||
ttf_uint32 ReadUInt32();
|
||||
ttf_int8 ReadInt8();
|
||||
ttf_int16 ReadInt16();
|
||||
ttf_int32 ReadInt32();
|
||||
ttf_Fixed ReadFixed();
|
||||
ttf_UFWORD ReadUFWORD();
|
||||
ttf_FWORD ReadFWORD();
|
||||
ttf_F2DOT14 ReadF2DOT14();
|
||||
ttf_LONGDATETIME ReadLONGDATETIME();
|
||||
ttf_Tag ReadTag();
|
||||
ttf_Offset16 ReadOffset16();
|
||||
ttf_Offset24 ReadOffset24();
|
||||
ttf_Offset32 ReadOffset32();
|
||||
ttf_Version16Dot16 ReadVersion16Dot16();
|
||||
|
||||
void Seek(size_t newpos);
|
||||
void Read(void* output, size_t count);
|
||||
|
||||
private:
|
||||
const uint8_t* data = nullptr;
|
||||
size_t size = 0;
|
||||
size_t pos = 0;
|
||||
};
|
||||
|
||||
struct TTF_TableRecord
|
||||
{
|
||||
ttf_Tag tableTag = {};
|
||||
ttf_uint32 checksum = {};
|
||||
ttf_Offset32 offset = {};
|
||||
ttf_uint32 length = {};
|
||||
|
||||
void Load(TrueTypeFileReader& reader);
|
||||
|
||||
TrueTypeFileReader GetReader(const void* filedata, size_t filesize) const
|
||||
{
|
||||
if ((size_t)offset + length > filesize)
|
||||
throw std::runtime_error("Invalid TTF table directory record");
|
||||
|
||||
return TrueTypeFileReader((uint8_t*)filedata + offset, length);
|
||||
}
|
||||
};
|
||||
|
||||
struct TTF_TableDirectory
|
||||
{
|
||||
ttf_uint32 sfntVersion = {};
|
||||
ttf_uint16 numTables = {};
|
||||
std::vector<TTF_TableRecord> tableRecords;
|
||||
|
||||
// To do: Apple TTF fonts allow 'true' and 'typ1' for sfntVersion as well.
|
||||
bool ContainsTTFOutlines() const { return sfntVersion == 0x00010000; }
|
||||
bool ContainsCFFData() const { return sfntVersion == 0x4F54544F; }
|
||||
|
||||
void Load(TrueTypeFileReader& reader);
|
||||
|
||||
const TTF_TableRecord& GetRecord(const char* tag) const
|
||||
{
|
||||
for (const auto& record : tableRecords)
|
||||
{
|
||||
if (memcmp(record.tableTag.data(), tag, 4) == 0)
|
||||
{
|
||||
return record;
|
||||
}
|
||||
}
|
||||
throw std::runtime_error(std::string("Could not find required '") + tag + "' table entry");
|
||||
}
|
||||
|
||||
TrueTypeFileReader GetReader(const void* filedata, size_t filesize, const char* tag) const
|
||||
{
|
||||
return GetRecord(tag).GetReader(filedata, filesize);
|
||||
}
|
||||
};
|
||||
|
||||
struct TTC_Header
|
||||
{
|
||||
ttf_Tag ttcTag = {};
|
||||
ttf_uint16 majorVersion = {};
|
||||
ttf_uint16 minorVersion = {};
|
||||
ttf_uint32 numFonts = {};
|
||||
std::vector<ttf_Offset32> tableDirectoryOffsets;
|
||||
|
||||
// majorVersion = 2, minorVersion = 0:
|
||||
ttf_uint32 dsigTag = {};
|
||||
ttf_uint32 dsigLength = {};
|
||||
ttf_uint32 dsigOffset = {};
|
||||
|
||||
void Load(TrueTypeFileReader& reader);
|
||||
};
|
||||
|
||||
struct TTF_EncodingRecord
|
||||
{
|
||||
ttf_uint16 platformID = {};
|
||||
ttf_uint16 encodingID = {};
|
||||
ttf_Offset32 subtableOffset = {};
|
||||
};
|
||||
|
||||
struct TTF_CMap // 'cmap' Character to glyph mapping
|
||||
{
|
||||
ttf_uint16 version = {};
|
||||
ttf_uint16 numTables = {};
|
||||
std::vector<TTF_EncodingRecord> encodingRecords; // [numTables]
|
||||
|
||||
void Load(TrueTypeFileReader& reader);
|
||||
|
||||
TTF_EncodingRecord GetEncoding(ttf_uint16 platformID, ttf_uint16 encodingID) const
|
||||
{
|
||||
for (const TTF_EncodingRecord& record : encodingRecords)
|
||||
{
|
||||
if (record.platformID == platformID && record.encodingID == encodingID)
|
||||
{
|
||||
return record;
|
||||
}
|
||||
}
|
||||
return {};
|
||||
}
|
||||
};
|
||||
|
||||
struct TTF_GlyphRange
|
||||
{
|
||||
ttf_uint32 startCharCode = 0;
|
||||
ttf_uint32 endCharCode = 0;
|
||||
ttf_uint32 startGlyphID = 0;
|
||||
};
|
||||
|
||||
struct TTF_CMapSubtable0 // Byte encoding table
|
||||
{
|
||||
ttf_uint16 length = {};
|
||||
ttf_uint16 language = {};
|
||||
std::vector<ttf_uint8> glyphIdArray;
|
||||
|
||||
void Load(TrueTypeFileReader& reader);
|
||||
};
|
||||
|
||||
struct TTF_CMapSubtable4 // Segment mapping to delta values (U+0000 to U+FFFF)
|
||||
{
|
||||
ttf_uint16 length = {};
|
||||
ttf_uint16 language = {};
|
||||
ttf_uint16 segCount = {};
|
||||
std::vector<ttf_uint16> endCode;
|
||||
ttf_uint16 reservedPad = {};
|
||||
std::vector<ttf_uint16> startCode;
|
||||
std::vector<ttf_int16> idDelta;
|
||||
std::vector<ttf_uint16> idRangeOffsets;
|
||||
std::vector<ttf_uint16> glyphIdArray;
|
||||
|
||||
void Load(TrueTypeFileReader& reader);
|
||||
};
|
||||
|
||||
struct TTF_CMapSubtable12 // Segmented coverage (U+0000 to U+10FFFF)
|
||||
{
|
||||
ttf_uint16 reserved;
|
||||
ttf_uint32 length;
|
||||
ttf_uint32 language;
|
||||
ttf_uint32 numGroups;
|
||||
std::vector<TTF_GlyphRange> groups;
|
||||
|
||||
void Load(TrueTypeFileReader& reader);
|
||||
};
|
||||
|
||||
typedef TTF_CMapSubtable12 TTF_CMapSubtable13; // Many-to-one range mappings
|
||||
|
||||
struct TTF_FontHeader // 'head' Font header
|
||||
{
|
||||
ttf_uint16 majorVersion = {};
|
||||
ttf_uint16 minorVersion = {};
|
||||
ttf_Fixed fontRevision = {};
|
||||
ttf_uint32 checksumAdjustment = {};
|
||||
ttf_uint32 magicNumber = {};
|
||||
ttf_uint16 flags = {};
|
||||
ttf_uint16 unitsPerEm = {};
|
||||
ttf_LONGDATETIME created = {};
|
||||
ttf_LONGDATETIME modified = {};
|
||||
ttf_int16 xMin = {};
|
||||
ttf_int16 yMin = {};
|
||||
ttf_int16 xMax = {};
|
||||
ttf_int16 yMax = {};
|
||||
ttf_uint16 macStyle = {};
|
||||
ttf_uint16 lowestRecPPEM = {};
|
||||
ttf_int16 fontDirectionHint = {};
|
||||
ttf_int16 indexToLocFormat = {};
|
||||
ttf_int16 glyphDataFormat = {};
|
||||
|
||||
void Load(TrueTypeFileReader& reader);
|
||||
};
|
||||
|
||||
struct TTF_HorizontalHeader // 'hhea' Horizontal header
|
||||
{
|
||||
ttf_uint16 majorVersion = {};
|
||||
ttf_uint16 minorVersion = {};
|
||||
ttf_FWORD ascender = {};
|
||||
ttf_FWORD descender = {};
|
||||
ttf_FWORD lineGap = {};
|
||||
ttf_UFWORD advanceWidthMax = {};
|
||||
ttf_FWORD minLeftSideBearing = {};
|
||||
ttf_FWORD minRightSideBearing = {};
|
||||
ttf_FWORD xMaxExtent = {};
|
||||
ttf_int16 caretSlopeRise = {};
|
||||
ttf_int16 caretSlopeRun = {};
|
||||
ttf_int16 caretOffset = {};
|
||||
ttf_int16 reserved0 = {};
|
||||
ttf_int16 reserved1 = {};
|
||||
ttf_int16 reserved2 = {};
|
||||
ttf_int16 reserved3 = {};
|
||||
ttf_int16 metricDataFormat = {};
|
||||
ttf_uint16 numberOfHMetrics = {};
|
||||
|
||||
void Load(TrueTypeFileReader& reader);
|
||||
};
|
||||
|
||||
struct TTF_MaximumProfile;
|
||||
|
||||
struct TTF_HorizontalMetrics // 'hmtx' Horizontal metrics
|
||||
{
|
||||
struct longHorMetric
|
||||
{
|
||||
ttf_uint16 advanceWidth = {};
|
||||
ttf_int16 lsb = {};
|
||||
};
|
||||
std::vector<longHorMetric> hMetrics; // [hhea.numberOfHMetrics]
|
||||
std::vector<ttf_int16> leftSideBearings; // [maxp.numGlyphs - hhea.numberOfHMetrics]
|
||||
|
||||
void Load(const TTF_HorizontalHeader& hhea, const TTF_MaximumProfile& maxp, TrueTypeFileReader& reader);
|
||||
};
|
||||
|
||||
struct TTF_MaximumProfile // 'maxp' Maximum profile
|
||||
{
|
||||
// v0.5 and v1:
|
||||
ttf_Version16Dot16 version = {};
|
||||
ttf_uint16 numGlyphs = {};
|
||||
|
||||
// v1 only:
|
||||
ttf_uint16 maxPoints = {};
|
||||
ttf_uint16 maxContours = {};
|
||||
ttf_uint16 maxCompositePoints = {};
|
||||
ttf_uint16 maxCompositeContours = {};
|
||||
ttf_uint16 maxZones = {};
|
||||
ttf_uint16 maxTwilightPoints = {};
|
||||
ttf_uint16 maxStorage = {};
|
||||
ttf_uint16 maxFunctionDefs = {};
|
||||
ttf_uint16 maxInstructionDefs = {};
|
||||
ttf_uint16 maxStackElements = {};
|
||||
ttf_uint16 maxSizeOfInstructions = {};
|
||||
ttf_uint16 maxComponentElements = {};
|
||||
ttf_uint16 maxComponentDepth = {};
|
||||
|
||||
void Load(TrueTypeFileReader& reader);
|
||||
};
|
||||
|
||||
class TTCFontName
|
||||
{
|
||||
public:
|
||||
std::string FamilyName; // Arial
|
||||
std::string SubfamilyName; // Regular
|
||||
std::string FullName; // Arial Regular
|
||||
std::string UniqueID;
|
||||
std::string VersionString;
|
||||
std::string PostscriptName;
|
||||
};
|
||||
|
||||
struct TTF_NamingTable // 'name' Naming table
|
||||
{
|
||||
struct NameRecord
|
||||
{
|
||||
ttf_uint16 platformID = {};
|
||||
ttf_uint16 encodingID = {};
|
||||
ttf_uint16 languageID = {};
|
||||
ttf_uint16 nameID = {};
|
||||
ttf_uint16 length = {};
|
||||
ttf_Offset16 stringOffset = {};
|
||||
std::string text;
|
||||
};
|
||||
|
||||
struct LangTagRecord
|
||||
{
|
||||
ttf_uint16 length = {};
|
||||
ttf_Offset16 langTagOffset = {};
|
||||
};
|
||||
|
||||
// v0 and v1:
|
||||
ttf_uint16 version = {};
|
||||
ttf_uint16 count = {};
|
||||
ttf_Offset16 storageOffset = {};
|
||||
std::vector<NameRecord> nameRecord; // [count]
|
||||
|
||||
// v1 only:
|
||||
ttf_uint16 langTagCount = {};
|
||||
std::vector<LangTagRecord> langTagRecord; // [langTagCount]
|
||||
|
||||
void Load(TrueTypeFileReader& reader);
|
||||
|
||||
TTCFontName GetFontName() const;
|
||||
};
|
||||
|
||||
struct TTF_OS2Windows // 'OS/2' Windows specific metrics
|
||||
{
|
||||
ttf_uint16 version = {};
|
||||
ttf_int16 xAvgCharWidth = {};
|
||||
ttf_uint16 usWeightClass = {};
|
||||
ttf_uint16 usWidthClass = {};
|
||||
ttf_uint16 fsType = {};
|
||||
ttf_int16 ySubscriptXSize = {};
|
||||
ttf_int16 ySubscriptYSize = {};
|
||||
ttf_int16 ySubscriptXOffset = {};
|
||||
ttf_int16 ySubscriptYOffset = {};
|
||||
ttf_int16 ySuperscriptXSize = {};
|
||||
ttf_int16 ySuperscriptYSize = {};
|
||||
ttf_int16 ySuperscriptXOffset = {};
|
||||
ttf_int16 ySuperscriptYOffset = {};
|
||||
ttf_int16 yStrikeoutSize = {};
|
||||
ttf_int16 yStrikeoutPosition = {};
|
||||
ttf_int16 sFamilyClass = {};
|
||||
ttf_uint8 panose[10] = {};
|
||||
ttf_uint32 ulUnicodeRange1 = {};
|
||||
ttf_uint32 ulUnicodeRange2 = {};
|
||||
ttf_uint32 ulUnicodeRange3 = {};
|
||||
ttf_uint32 ulUnicodeRange4 = {};
|
||||
ttf_Tag achVendID = {};
|
||||
ttf_uint16 fsSelection = {};
|
||||
ttf_uint16 usFirstCharIndex = {};
|
||||
ttf_uint16 usLastCharIndex = {};
|
||||
ttf_int16 sTypoAscender = {};
|
||||
ttf_int16 sTypoDescender = {};
|
||||
ttf_int16 sTypoLineGap = {};
|
||||
ttf_uint16 usWinAscent = {}; // may be missing in v0 due to bugs in Apple docs
|
||||
ttf_uint16 usWinDescent = {}; // may be missing in v0 due to bugs in Apple docs
|
||||
ttf_uint32 ulCodePageRange1 = {}; // v1
|
||||
ttf_uint32 ulCodePageRange2 = {};
|
||||
ttf_int16 sxHeight = {}; // v2, v3 and v4
|
||||
ttf_int16 sCapHeight = {};
|
||||
ttf_uint16 usDefaultChar = {};
|
||||
ttf_uint16 usBreakChar = {};
|
||||
ttf_uint16 usMaxContext = {};
|
||||
ttf_uint16 usLowerOpticalPointSize = {}; // v5
|
||||
ttf_uint16 usUpperOpticalPointSize = {};
|
||||
|
||||
void Load(TrueTypeFileReader& reader);
|
||||
};
|
||||
|
||||
// Simple glyph flags:
|
||||
#define TTF_ON_CURVE_POINT 0x01
|
||||
#define TTF_X_SHORT_VECTOR 0x02
|
||||
#define TTF_Y_SHORT_VECTOR 0x04
|
||||
#define TTF_REPEAT_FLAG 0x08
|
||||
#define TTF_X_IS_SAME_OR_POSITIVE_X_SHORT_VECTOR 0x10
|
||||
#define TTF_Y_IS_SAME_OR_POSITIVE_Y_SHORT_VECTOR 0x20
|
||||
#define TTF_OVERLAP_SIMPLE = 0x40
|
||||
|
||||
// Composite glyph flags:
|
||||
#define TTF_ARG_1_AND_2_ARE_WORDS 0x0001
|
||||
#define TTF_ARGS_ARE_XY_VALUES 0x0002
|
||||
#define TTF_ROUND_XY_TO_GRID 0x0004
|
||||
#define TTF_WE_HAVE_A_SCALE 0x0008
|
||||
#define TTF_MORE_COMPONENTS 0x0020
|
||||
#define TTF_WE_HAVE_AN_X_AND_Y_SCALE 0x0040
|
||||
#define TTF_WE_HAVE_A_TWO_BY_TWO 0x0080
|
||||
#define TTF_WE_HAVE_INSTRUCTIONS 0x0100
|
||||
#define TTF_USE_MY_METRICS 0x0200
|
||||
#define TTF_OVERLAP_COMPOUND 0x0400
|
||||
#define TTF_SCALED_COMPONENT_OFFSET 0x0800
|
||||
#define TTF_UNSCALED_COMPONENT_OFFSET 0x1000
|
||||
|
||||
struct TTF_IndexToLocation // 'loca' Index to location
|
||||
{
|
||||
std::vector<ttf_Offset32> offsets;
|
||||
|
||||
void Load(const TTF_FontHeader& head, const TTF_MaximumProfile& maxp, TrueTypeFileReader& reader);
|
||||
};
|
||||
|
||||
struct TTF_Point
|
||||
{
|
||||
float x;
|
||||
float y;
|
||||
};
|
||||
|
||||
struct TTF_SimpleGlyph
|
||||
{
|
||||
std::vector<int> endPtsOfContours;
|
||||
std::vector<ttf_uint8> flags;
|
||||
std::vector<TTF_Point> points;
|
||||
};
|
||||
|
||||
class TrueTypeGlyph
|
||||
{
|
||||
public:
|
||||
int advanceWidth = 0;
|
||||
int leftSideBearing = 0;
|
||||
int yOffset = 0;
|
||||
|
||||
int width = 0;
|
||||
int height = 0;
|
||||
std::unique_ptr<uint8_t[]> grayscale;
|
||||
};
|
||||
|
||||
class TrueTypeTextMetrics
|
||||
{
|
||||
public:
|
||||
double ascender = 0.0;
|
||||
double descender = 0.0;
|
||||
double lineGap = 0.0;
|
||||
};
|
||||
|
||||
class TrueTypeFontFileData
|
||||
{
|
||||
public:
|
||||
TrueTypeFontFileData(std::vector<uint8_t>& data) : dataVector(std::move(data))
|
||||
{
|
||||
dataPtr = dataVector.data();
|
||||
dataSize = dataVector.size();
|
||||
}
|
||||
|
||||
TrueTypeFontFileData(const void* data, size_t size, bool copyData = true)
|
||||
{
|
||||
dataSize = size;
|
||||
if (copyData)
|
||||
{
|
||||
dataPtr = new uint8_t[size];
|
||||
deleteDataPtr = true;
|
||||
memcpy(const_cast<void*>(dataPtr), data, size);
|
||||
}
|
||||
else
|
||||
{
|
||||
dataPtr = data;
|
||||
}
|
||||
}
|
||||
|
||||
~TrueTypeFontFileData()
|
||||
{
|
||||
if (deleteDataPtr)
|
||||
{
|
||||
delete[](uint8_t*)dataPtr;
|
||||
}
|
||||
dataPtr = nullptr;
|
||||
}
|
||||
|
||||
const void* data() const { return dataPtr; }
|
||||
size_t size() const { return dataSize; }
|
||||
|
||||
private:
|
||||
std::vector<uint8_t> dataVector;
|
||||
const void* dataPtr = nullptr;
|
||||
size_t dataSize = 0;
|
||||
bool deleteDataPtr = false;
|
||||
|
||||
TrueTypeFontFileData(const TrueTypeFontFileData&) = delete;
|
||||
TrueTypeFontFileData& operator=(const TrueTypeFontFileData&) = delete;
|
||||
};
|
||||
|
||||
class TrueTypeFont
|
||||
{
|
||||
public:
|
||||
TrueTypeFont(std::shared_ptr<TrueTypeFontFileData>& data, int ttcFontIndex = 0);
|
||||
|
||||
static std::vector<TTCFontName> GetFontNames(const std::shared_ptr<TrueTypeFontFileData>& data);
|
||||
|
||||
TrueTypeTextMetrics GetTextMetrics(double height) const;
|
||||
uint32_t GetGlyphIndex(uint32_t codepoint) const;
|
||||
TrueTypeGlyph LoadGlyph(uint32_t glyphIndex, double height) const;
|
||||
|
||||
private:
|
||||
void LoadCharacterMapEncoding(TrueTypeFileReader& reader);
|
||||
void LoadGlyph(TTF_SimpleGlyph& glyph, uint32_t glyphIndex, int compositeDepth = 0) const;
|
||||
static float F2DOT14_ToFloat(ttf_F2DOT14 v);
|
||||
|
||||
std::shared_ptr<TrueTypeFontFileData> data;
|
||||
|
||||
TTC_Header ttcHeader;
|
||||
TTF_TableDirectory directory;
|
||||
|
||||
// Required for all OpenType fonts:
|
||||
TTF_CMap cmap;
|
||||
TTF_FontHeader head;
|
||||
TTF_HorizontalHeader hhea;
|
||||
TTF_HorizontalMetrics hmtx;
|
||||
TTF_MaximumProfile maxp;
|
||||
TTF_NamingTable name;
|
||||
TTF_OS2Windows os2;
|
||||
|
||||
// TrueType outlines:
|
||||
TTF_TableRecord glyf; // Parsed on a per glyph basis using offsets from other tables
|
||||
TTF_IndexToLocation loca;
|
||||
|
||||
std::vector<TTF_GlyphRange> Ranges;
|
||||
std::vector<TTF_GlyphRange> ManyToOneRanges;
|
||||
};
|
|
@ -172,6 +172,11 @@ void Widget::Show()
|
|||
{
|
||||
DispWindow->Show();
|
||||
}
|
||||
else if (HiddenFlag)
|
||||
{
|
||||
HiddenFlag = false;
|
||||
Update();
|
||||
}
|
||||
}
|
||||
|
||||
void Widget::ShowFullscreen()
|
||||
|
@ -213,6 +218,11 @@ void Widget::Hide()
|
|||
if (DispWindow)
|
||||
DispWindow->Hide();
|
||||
}
|
||||
else if (!HiddenFlag)
|
||||
{
|
||||
HiddenFlag = true;
|
||||
Update();
|
||||
}
|
||||
}
|
||||
|
||||
void Widget::ActivateWindow()
|
||||
|
@ -299,7 +309,7 @@ void Widget::Paint(Canvas* canvas)
|
|||
OnPaint(canvas);
|
||||
for (Widget* w = FirstChild(); w != nullptr; w = w->NextSibling())
|
||||
{
|
||||
if (w->Type == WidgetType::Child)
|
||||
if (w->Type == WidgetType::Child && !w->HiddenFlag)
|
||||
w->Paint(canvas);
|
||||
}
|
||||
canvas->setOrigin(oldOrigin);
|
||||
|
@ -323,9 +333,21 @@ bool Widget::IsEnabled()
|
|||
return true;
|
||||
}
|
||||
|
||||
bool Widget::IsHidden()
|
||||
{
|
||||
return !IsVisible();
|
||||
}
|
||||
|
||||
bool Widget::IsVisible()
|
||||
{
|
||||
return true;
|
||||
if (Type != WidgetType::Child)
|
||||
{
|
||||
return true; // DispWindow->IsVisible();
|
||||
}
|
||||
else
|
||||
{
|
||||
return !HiddenFlag;
|
||||
}
|
||||
}
|
||||
|
||||
void Widget::SetFocus()
|
||||
|
@ -427,9 +449,9 @@ Widget* Widget::Window()
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
Canvas* Widget::GetCanvas()
|
||||
Canvas* Widget::GetCanvas() const
|
||||
{
|
||||
for (Widget* w = this; w != nullptr; w = w->Parent())
|
||||
for (const Widget* w = this; w != nullptr; w = w->Parent())
|
||||
{
|
||||
if (w->DispCanvas)
|
||||
return w->DispCanvas.get();
|
||||
|
@ -441,7 +463,7 @@ Widget* Widget::ChildAt(const Point& pos)
|
|||
{
|
||||
for (Widget* cur = LastChild(); cur != nullptr; cur = cur->PrevSibling())
|
||||
{
|
||||
if (cur->FrameGeometry.contains(pos))
|
||||
if (!cur->HiddenFlag && cur->FrameGeometry.contains(pos))
|
||||
{
|
||||
Widget* cur2 = cur->ChildAt(pos - cur->ContentGeometry.topLeft());
|
||||
return cur2 ? cur2 : cur;
|
||||
|
@ -523,12 +545,26 @@ void Widget::OnWindowMouseMove(const Point& pos)
|
|||
if (HoverWidget != widget)
|
||||
{
|
||||
if (HoverWidget)
|
||||
HoverWidget->OnMouseLeave();
|
||||
{
|
||||
for (Widget* w = HoverWidget; w != widget && w != this; w = w->Parent())
|
||||
{
|
||||
Widget* p = w->Parent();
|
||||
if (!w->FrameGeometry.contains(p->MapFrom(this, pos)))
|
||||
{
|
||||
w->OnMouseLeave();
|
||||
}
|
||||
}
|
||||
}
|
||||
HoverWidget = widget;
|
||||
}
|
||||
|
||||
DispWindow->SetCursor(widget->CurrentCursor);
|
||||
|
||||
do
|
||||
{
|
||||
widget->OnMouseMove(widget->MapFrom(this, pos));
|
||||
widget = widget->Parent();
|
||||
} while (widget != this);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -543,7 +579,13 @@ void Widget::OnWindowMouseDown(const Point& pos, EInputKey key)
|
|||
Widget* widget = ChildAt(pos);
|
||||
if (!widget)
|
||||
widget = this;
|
||||
widget->OnMouseDown(widget->MapFrom(this, pos), key);
|
||||
while (widget)
|
||||
{
|
||||
bool stopPropagation = widget->OnMouseDown(widget->MapFrom(this, pos), key);
|
||||
if (stopPropagation || widget == this)
|
||||
break;
|
||||
widget = widget->Parent();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -558,7 +600,13 @@ void Widget::OnWindowMouseDoubleclick(const Point& pos, EInputKey key)
|
|||
Widget* widget = ChildAt(pos);
|
||||
if (!widget)
|
||||
widget = this;
|
||||
widget->OnMouseDoubleclick(widget->MapFrom(this, pos), key);
|
||||
while (widget)
|
||||
{
|
||||
bool stopPropagation = widget->OnMouseDoubleclick(widget->MapFrom(this, pos), key);
|
||||
if (stopPropagation || widget == this)
|
||||
break;
|
||||
widget = widget->Parent();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -573,7 +621,13 @@ void Widget::OnWindowMouseUp(const Point& pos, EInputKey key)
|
|||
Widget* widget = ChildAt(pos);
|
||||
if (!widget)
|
||||
widget = this;
|
||||
widget->OnMouseUp(widget->MapFrom(this, pos), key);
|
||||
while (widget)
|
||||
{
|
||||
bool stopPropagation = widget->OnMouseUp(widget->MapFrom(this, pos), key);
|
||||
if (stopPropagation || widget == this)
|
||||
break;
|
||||
widget = widget->Parent();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -588,7 +642,13 @@ void Widget::OnWindowMouseWheel(const Point& pos, EInputKey key)
|
|||
Widget* widget = ChildAt(pos);
|
||||
if (!widget)
|
||||
widget = this;
|
||||
widget->OnMouseWheel(widget->MapFrom(this, pos), key);
|
||||
while (widget)
|
||||
{
|
||||
bool stopPropagation = widget->OnMouseWheel(widget->MapFrom(this, pos), key);
|
||||
if (stopPropagation || widget == this)
|
||||
break;
|
||||
widget = widget->Parent();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -56,19 +56,21 @@ void CheckboxLabel::OnPaint(Canvas* canvas)
|
|||
canvas->drawText(Point(14.0, GetHeight() - 5.0), Colorf::fromRgba8(255, 255, 255), text);
|
||||
}
|
||||
|
||||
void CheckboxLabel::OnMouseDown(const Point& pos, int key)
|
||||
bool CheckboxLabel::OnMouseDown(const Point& pos, int key)
|
||||
{
|
||||
mouseDownActive = true;
|
||||
SetFocus();
|
||||
return true;
|
||||
}
|
||||
|
||||
void CheckboxLabel::OnMouseUp(const Point& pos, int key)
|
||||
bool CheckboxLabel::OnMouseUp(const Point& pos, int key)
|
||||
{
|
||||
if (mouseDownActive)
|
||||
{
|
||||
Toggle();
|
||||
}
|
||||
mouseDownActive = false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void CheckboxLabel::OnMouseLeave()
|
||||
|
|
|
@ -123,11 +123,11 @@ void LineEdit::SetReadOnly(bool enable)
|
|||
}
|
||||
}
|
||||
|
||||
void LineEdit::SetAlignment(Alignment alignment)
|
||||
void LineEdit::SetAlignment(Alignment newalignment)
|
||||
{
|
||||
if (alignment != alignment)
|
||||
if (alignment != newalignment)
|
||||
{
|
||||
alignment = alignment;
|
||||
alignment = newalignment;
|
||||
Update();
|
||||
}
|
||||
}
|
||||
|
@ -301,7 +301,7 @@ void LineEdit::OnMouseMove(const Point& pos)
|
|||
}
|
||||
}
|
||||
|
||||
void LineEdit::OnMouseDown(const Point& pos, int key)
|
||||
bool LineEdit::OnMouseDown(const Point& pos, int key)
|
||||
{
|
||||
if (key == IK_LeftMouse)
|
||||
{
|
||||
|
@ -318,13 +318,15 @@ void LineEdit::OnMouseDown(const Point& pos, int key)
|
|||
}
|
||||
Update();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void LineEdit::OnMouseDoubleclick(const Point& pos, int key)
|
||||
bool LineEdit::OnMouseDoubleclick(const Point& pos, int key)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
void LineEdit::OnMouseUp(const Point& pos, int key)
|
||||
bool LineEdit::OnMouseUp(const Point& pos, int key)
|
||||
{
|
||||
if (mouse_selecting && key == IK_LeftMouse)
|
||||
{
|
||||
|
@ -346,6 +348,7 @@ void LineEdit::OnMouseUp(const Point& pos, int key)
|
|||
Update();
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void LineEdit::OnKeyChar(std::string chars)
|
||||
|
|
|
@ -27,6 +27,7 @@ void ListView::SetSelectedItem(int index)
|
|||
if (selectedItem != index && index >= 0 && index < items.size())
|
||||
{
|
||||
selectedItem = index;
|
||||
if (OnChanged) OnChanged(selectedItem);
|
||||
Update();
|
||||
}
|
||||
}
|
||||
|
@ -95,7 +96,7 @@ void ListView::OnPaintFrame(Canvas* canvas)
|
|||
canvas->fillRect(Rect::xywh(w - 1.0, 0.0, 1.0, h - 0.0), bordercolor);
|
||||
}
|
||||
|
||||
void ListView::OnMouseDown(const Point& pos, int key)
|
||||
bool ListView::OnMouseDown(const Point& pos, int key)
|
||||
{
|
||||
SetFocus();
|
||||
|
||||
|
@ -108,17 +109,19 @@ void ListView::OnMouseDown(const Point& pos, int key)
|
|||
ScrollToItem(selectedItem);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void ListView::OnMouseDoubleclick(const Point& pos, int key)
|
||||
bool ListView::OnMouseDoubleclick(const Point& pos, int key)
|
||||
{
|
||||
if (key == IK_LeftMouse)
|
||||
{
|
||||
Activate();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void ListView::OnMouseWheel(const Point& pos, EInputKey key)
|
||||
bool ListView::OnMouseWheel(const Point& pos, EInputKey key)
|
||||
{
|
||||
if (key == IK_MouseWheelUp)
|
||||
{
|
||||
|
@ -126,8 +129,9 @@ void ListView::OnMouseWheel(const Point& pos, EInputKey key)
|
|||
}
|
||||
else if (key == IK_MouseWheelDown)
|
||||
{
|
||||
scrollbar->SetPosition(std::max(scrollbar->GetPosition() + 20.0, scrollbar->GetMax()));
|
||||
scrollbar->SetPosition(std::min(scrollbar->GetPosition() + 20.0, scrollbar->GetMax()));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void ListView::OnKeyDown(EInputKey key)
|
||||
|
|
|
@ -57,14 +57,15 @@ void PushButton::OnMouseMove(const Point& pos)
|
|||
}
|
||||
}
|
||||
|
||||
void PushButton::OnMouseDown(const Point& pos, int key)
|
||||
bool PushButton::OnMouseDown(const Point& pos, int key)
|
||||
{
|
||||
SetFocus();
|
||||
buttonDown = true;
|
||||
Update();
|
||||
return true;
|
||||
}
|
||||
|
||||
void PushButton::OnMouseUp(const Point& pos, int key)
|
||||
bool PushButton::OnMouseUp(const Point& pos, int key)
|
||||
{
|
||||
if (buttonDown)
|
||||
{
|
||||
|
@ -73,6 +74,7 @@ void PushButton::OnMouseUp(const Point& pos, int key)
|
|||
Repaint();
|
||||
Click();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void PushButton::OnMouseLeave()
|
||||
|
|
|
@ -169,7 +169,7 @@ void Scrollbar::OnMouseMove(const Point& pos)
|
|||
Update();
|
||||
}
|
||||
|
||||
void Scrollbar::OnMouseDown(const Point& pos, int key)
|
||||
bool Scrollbar::OnMouseDown(const Point& pos, int key)
|
||||
{
|
||||
mouse_drag_start_pos = pos;
|
||||
|
||||
|
@ -254,9 +254,10 @@ void Scrollbar::OnMouseDown(const Point& pos, int key)
|
|||
|
||||
Update();
|
||||
CaptureMouse();
|
||||
return true;
|
||||
}
|
||||
|
||||
void Scrollbar::OnMouseUp(const Point& pos, int key)
|
||||
bool Scrollbar::OnMouseUp(const Point& pos, int key)
|
||||
{
|
||||
if (mouse_down_mode == mouse_down_thumb_drag)
|
||||
{
|
||||
|
@ -269,6 +270,7 @@ void Scrollbar::OnMouseUp(const Point& pos, int key)
|
|||
|
||||
Update();
|
||||
ReleaseMouseCapture();
|
||||
return true;
|
||||
}
|
||||
|
||||
void Scrollbar::OnMouseLeave()
|
||||
|
|
358
libraries/ZWidget/src/widgets/tabwidget/tabwidget.cpp
Normal file
358
libraries/ZWidget/src/widgets/tabwidget/tabwidget.cpp
Normal file
|
@ -0,0 +1,358 @@
|
|||
|
||||
#include "widgets/tabwidget/tabwidget.h"
|
||||
#include "widgets/textlabel/textlabel.h"
|
||||
#include "widgets/imagebox/imagebox.h"
|
||||
#include <algorithm>
|
||||
|
||||
TabWidget::TabWidget(Widget* parent) : Widget(parent)
|
||||
{
|
||||
Bar = new TabBar(this);
|
||||
PageStack = new TabWidgetStack(this);
|
||||
|
||||
Bar->OnCurrentChanged = [=]() { OnBarCurrentChanged(); };
|
||||
}
|
||||
|
||||
int TabWidget::AddTab(Widget* page, const std::string& label)
|
||||
{
|
||||
return AddTab(page, nullptr, label);
|
||||
}
|
||||
|
||||
int TabWidget::AddTab(Widget* page, const std::shared_ptr<Image>& icon, const std::string& label)
|
||||
{
|
||||
int pageIndex = Bar->AddTab(label);
|
||||
page->SetParent(PageStack);
|
||||
page->SetVisible(false);
|
||||
Pages.push_back(page);
|
||||
if (Pages.size() == 1)
|
||||
{
|
||||
PageStack->SetCurrentWidget(page);
|
||||
}
|
||||
return pageIndex;
|
||||
}
|
||||
|
||||
void TabWidget::SetTabText(int index, const std::string& text)
|
||||
{
|
||||
Bar->SetTabText(index, text);
|
||||
}
|
||||
|
||||
void TabWidget::SetTabText(Widget* page, const std::string& text)
|
||||
{
|
||||
int index = GetPageIndex(page);
|
||||
if (index != -1)
|
||||
SetTabText(index, text);
|
||||
}
|
||||
|
||||
void TabWidget::SetTabIcon(int index, const std::shared_ptr<Image>& icon)
|
||||
{
|
||||
Bar->SetTabIcon(index, icon);
|
||||
}
|
||||
|
||||
void TabWidget::SetTabIcon(Widget* page, const std::shared_ptr<Image>& icon)
|
||||
{
|
||||
int index = GetPageIndex(page);
|
||||
if (index != -1)
|
||||
SetTabIcon(index, icon);
|
||||
}
|
||||
|
||||
int TabWidget::GetCurrentIndex() const
|
||||
{
|
||||
return Bar->GetCurrentIndex();
|
||||
}
|
||||
|
||||
Widget* TabWidget::GetCurrentWidget() const
|
||||
{
|
||||
return Pages[Bar->GetCurrentIndex()];
|
||||
}
|
||||
|
||||
void TabWidget::SetCurrentIndex(int pageIndex)
|
||||
{
|
||||
if (Bar->GetCurrentIndex() != pageIndex)
|
||||
{
|
||||
Bar->SetCurrentIndex(pageIndex);
|
||||
PageStack->SetCurrentWidget(Pages[pageIndex]);
|
||||
}
|
||||
}
|
||||
|
||||
void TabWidget::SetCurrentWidget(Widget* pageWidget)
|
||||
{
|
||||
int pageIndex = GetPageIndex(pageWidget);
|
||||
if (pageIndex != -1)
|
||||
SetCurrentIndex(pageIndex);
|
||||
}
|
||||
|
||||
int TabWidget::GetPageIndex(Widget* pageWidget) const
|
||||
{
|
||||
for (size_t i = 0; i < Pages.size(); i++)
|
||||
{
|
||||
if (Pages[i] == pageWidget)
|
||||
return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
void TabWidget::OnBarCurrentChanged()
|
||||
{
|
||||
int pageIndex = Bar->GetCurrentIndex();
|
||||
PageStack->SetCurrentWidget(Pages[pageIndex]);
|
||||
if (OnCurrentChanged)
|
||||
OnCurrentChanged();
|
||||
}
|
||||
|
||||
void TabWidget::OnPaintFrame(Canvas* canvas)
|
||||
{
|
||||
}
|
||||
|
||||
void TabWidget::OnGeometryChanged()
|
||||
{
|
||||
double w = GetWidth();
|
||||
double h = GetHeight();
|
||||
double barHeight = Bar->GetPreferredHeight();
|
||||
Bar->SetFrameGeometry(Rect::xywh(0.0, 0.0, w, barHeight));
|
||||
PageStack->SetFrameGeometry(Rect::xywh(0.0, barHeight, w, std::max(h - barHeight, 0.0)));
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
TabBar::TabBar(Widget* parent) : Widget(parent)
|
||||
{
|
||||
SetNoncontentSizes(20.0, 0.0, 20.0, 0.0);
|
||||
}
|
||||
|
||||
int TabBar::AddTab(const std::string& label)
|
||||
{
|
||||
return AddTab(nullptr, label);
|
||||
}
|
||||
|
||||
int TabBar::AddTab(const std::shared_ptr<Image>& icon, const std::string& label)
|
||||
{
|
||||
TabBarTab* tab = new TabBarTab(this);
|
||||
tab->SetIcon(icon);
|
||||
tab->SetText(label);
|
||||
tab->OnClick = [=]() { OnTabClicked(tab); };
|
||||
int pageIndex = Tabs.size();
|
||||
Tabs.push_back(tab);
|
||||
if (CurrentIndex == -1)
|
||||
SetCurrentIndex(pageIndex);
|
||||
OnGeometryChanged();
|
||||
return pageIndex;
|
||||
}
|
||||
|
||||
void TabBar::SetTabText(int index, const std::string& text)
|
||||
{
|
||||
Tabs[index]->SetText(text);
|
||||
OnGeometryChanged();
|
||||
}
|
||||
|
||||
void TabBar::SetTabIcon(int index, const std::shared_ptr<Image>& icon)
|
||||
{
|
||||
Tabs[index]->SetIcon(icon);
|
||||
OnGeometryChanged();
|
||||
}
|
||||
|
||||
int TabBar::GetCurrentIndex() const
|
||||
{
|
||||
return CurrentIndex;
|
||||
}
|
||||
|
||||
void TabBar::SetCurrentIndex(int pageIndex)
|
||||
{
|
||||
if (CurrentIndex != pageIndex)
|
||||
{
|
||||
if (CurrentIndex != -1)
|
||||
Tabs[CurrentIndex]->SetCurrent(false);
|
||||
CurrentIndex = pageIndex;
|
||||
if (CurrentIndex != -1)
|
||||
Tabs[CurrentIndex]->SetCurrent(true);
|
||||
}
|
||||
}
|
||||
|
||||
void TabBar::OnTabClicked(TabBarTab* tab)
|
||||
{
|
||||
int pageIndex = GetTabIndex(tab);
|
||||
if (CurrentIndex != pageIndex)
|
||||
{
|
||||
SetCurrentIndex(pageIndex);
|
||||
if (OnCurrentChanged)
|
||||
OnCurrentChanged();
|
||||
}
|
||||
}
|
||||
|
||||
int TabBar::GetTabIndex(TabBarTab* tab)
|
||||
{
|
||||
for (size_t i = 0; i < Tabs.size(); i++)
|
||||
{
|
||||
if (Tabs[i] == tab)
|
||||
return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
void TabBar::OnPaintFrame(Canvas* canvas)
|
||||
{
|
||||
double w = GetFrameGeometry().width;
|
||||
double h = GetFrameGeometry().height;
|
||||
canvas->fillRect(Rect::xywh(0.0, 0.0, w, h), Colorf::fromRgba8(38, 38, 38));
|
||||
}
|
||||
|
||||
void TabBar::OnGeometryChanged()
|
||||
{
|
||||
double w = GetWidth();
|
||||
double h = GetHeight();
|
||||
double x = 0.0;
|
||||
for (TabBarTab* tab : Tabs)
|
||||
{
|
||||
double tabWidth = tab->GetNoncontentLeft() + tab->GetPreferredWidth() + tab->GetNoncontentRight();
|
||||
tab->SetFrameGeometry(Rect::xywh(x, 0.0, tabWidth, h));
|
||||
x += tabWidth;
|
||||
}
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
TabBarTab::TabBarTab(Widget* parent) : Widget(parent)
|
||||
{
|
||||
SetNoncontentSizes(15.0, 0.0, 15.0, 0.0);
|
||||
}
|
||||
|
||||
void TabBarTab::SetText(const std::string& text)
|
||||
{
|
||||
if (!text.empty())
|
||||
{
|
||||
if (!Label)
|
||||
{
|
||||
Label = new TextLabel(this);
|
||||
OnGeometryChanged();
|
||||
}
|
||||
Label->SetText(text);
|
||||
}
|
||||
else
|
||||
{
|
||||
delete Label;
|
||||
Label = nullptr;
|
||||
OnGeometryChanged();
|
||||
}
|
||||
}
|
||||
|
||||
void TabBarTab::SetIcon(const std::shared_ptr<Image>& image)
|
||||
{
|
||||
if (image)
|
||||
{
|
||||
if (!Icon)
|
||||
{
|
||||
Icon = new ImageBox(this);
|
||||
OnGeometryChanged();
|
||||
}
|
||||
Icon->SetImage(image);
|
||||
}
|
||||
else
|
||||
{
|
||||
delete Icon;
|
||||
Icon = nullptr;
|
||||
OnGeometryChanged();
|
||||
}
|
||||
}
|
||||
|
||||
void TabBarTab::SetCurrent(bool value)
|
||||
{
|
||||
if (IsCurrent != value)
|
||||
{
|
||||
IsCurrent = value;
|
||||
Update();
|
||||
}
|
||||
}
|
||||
|
||||
double TabBarTab::GetPreferredWidth() const
|
||||
{
|
||||
double x = Icon ? 32.0 + 5.0 : 0.0;
|
||||
if (Label) x += Label->GetPreferredWidth();
|
||||
return x;
|
||||
}
|
||||
|
||||
void TabBarTab::OnPaintFrame(Canvas* canvas)
|
||||
{
|
||||
double w = GetFrameGeometry().width;
|
||||
double h = GetFrameGeometry().height;
|
||||
if (IsCurrent)
|
||||
{
|
||||
canvas->fillRect(Rect::xywh(0.0, 0.0, w, h), Colorf::fromRgba8(51, 51, 51));
|
||||
}
|
||||
else if (hot)
|
||||
{
|
||||
canvas->fillRect(Rect::xywh(0.0, 0.0, w, h), Colorf::fromRgba8(45, 45, 45));
|
||||
}
|
||||
}
|
||||
|
||||
void TabBarTab::OnGeometryChanged()
|
||||
{
|
||||
double x = 0.0;
|
||||
double w = GetWidth();
|
||||
double h = GetHeight();
|
||||
if (Icon)
|
||||
{
|
||||
Icon->SetFrameGeometry(Rect::xywh(x, (h - 32.0) * 0.5, 32.0, 32.0));
|
||||
x = 32.0 + 5.0;
|
||||
}
|
||||
if (Label)
|
||||
{
|
||||
Label->SetFrameGeometry(Rect::xywh(x, (h - Label->GetPreferredHeight()) * 0.5, std::max(w - x, 0.0), Label->GetPreferredHeight()));
|
||||
}
|
||||
}
|
||||
|
||||
void TabBarTab::OnMouseMove(const Point& pos)
|
||||
{
|
||||
if (!hot)
|
||||
{
|
||||
hot = true;
|
||||
Update();
|
||||
}
|
||||
}
|
||||
|
||||
bool TabBarTab::OnMouseDown(const Point& pos, int key)
|
||||
{
|
||||
if (OnClick)
|
||||
OnClick();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TabBarTab::OnMouseUp(const Point& pos, int key)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
void TabBarTab::OnMouseLeave()
|
||||
{
|
||||
hot = false;
|
||||
Update();
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
TabWidgetStack::TabWidgetStack(Widget* parent) : Widget(parent)
|
||||
{
|
||||
SetNoncontentSizes(20.0, 5.0, 20.0, 5.0);
|
||||
}
|
||||
|
||||
void TabWidgetStack::SetCurrentWidget(Widget* widget)
|
||||
{
|
||||
if (widget != CurrentWidget)
|
||||
{
|
||||
if (CurrentWidget)
|
||||
CurrentWidget->SetVisible(false);
|
||||
CurrentWidget = widget;
|
||||
if (CurrentWidget)
|
||||
{
|
||||
CurrentWidget->SetVisible(true);
|
||||
OnGeometryChanged();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void TabWidgetStack::OnPaintFrame(Canvas* canvas)
|
||||
{
|
||||
}
|
||||
|
||||
void TabWidgetStack::OnGeometryChanged()
|
||||
{
|
||||
if (CurrentWidget)
|
||||
CurrentWidget->SetFrameGeometry(Rect::xywh(0.0, 0.0, GetWidth(), GetHeight()));
|
||||
}
|
|
@ -286,7 +286,7 @@ void TextEdit::OnMouseMove(const Point& pos)
|
|||
}
|
||||
}
|
||||
|
||||
void TextEdit::OnMouseDown(const Point& pos, int key)
|
||||
bool TextEdit::OnMouseDown(const Point& pos, int key)
|
||||
{
|
||||
if (key == IK_LeftMouse)
|
||||
{
|
||||
|
@ -298,13 +298,15 @@ void TextEdit::OnMouseDown(const Point& pos, int key)
|
|||
|
||||
Update();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void TextEdit::OnMouseDoubleclick(const Point& pos, int key)
|
||||
bool TextEdit::OnMouseDoubleclick(const Point& pos, int key)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
void TextEdit::OnMouseUp(const Point& pos, int key)
|
||||
bool TextEdit::OnMouseUp(const Point& pos, int key)
|
||||
{
|
||||
if (mouse_selecting && key == IK_LeftMouse)
|
||||
{
|
||||
|
@ -326,6 +328,7 @@ void TextEdit::OnMouseUp(const Point& pos, int key)
|
|||
Update();
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void TextEdit::OnKeyChar(std::string chars)
|
||||
|
|
|
@ -33,6 +33,12 @@ TextLabelAlignment TextLabel::GetTextAlignment() const
|
|||
return textAlignment;
|
||||
}
|
||||
|
||||
double TextLabel::GetPreferredWidth() const
|
||||
{
|
||||
Canvas* canvas = GetCanvas();
|
||||
return canvas->measureText(text).width;
|
||||
}
|
||||
|
||||
double TextLabel::GetPreferredHeight() const
|
||||
{
|
||||
return 20.0;
|
||||
|
|
|
@ -1022,6 +1022,10 @@ set (PCH_SOURCES
|
|||
core/console/c_notifybuffer.cpp
|
||||
core/console/d_event.cpp
|
||||
launcher/launcherwindow.cpp
|
||||
launcher/launcherbanner.cpp
|
||||
launcher/launcherbuttonbar.cpp
|
||||
launcher/playgamepage.cpp
|
||||
launcher/settingspage.cpp
|
||||
|
||||
common/audio/sound/i_sound.cpp
|
||||
common/audio/sound/oalsound.cpp
|
||||
|
|
|
@ -1,643 +0,0 @@
|
|||
/**
|
||||
* OpenAL cross platform audio library
|
||||
* Copyright (C) 2008 by authors.
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
* Or go to http://www.gnu.org/copyleft/lgpl.html
|
||||
*/
|
||||
|
||||
#ifndef AL_ALEXT_H
|
||||
#define AL_ALEXT_H
|
||||
|
||||
#include <stddef.h>
|
||||
/* Define int64 and uint64 types */
|
||||
#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \
|
||||
(defined(__cplusplus) && __cplusplus >= 201103L)
|
||||
#include <stdint.h>
|
||||
typedef int64_t _alsoft_int64_t;
|
||||
typedef uint64_t _alsoft_uint64_t;
|
||||
#elif defined(_WIN32)
|
||||
typedef __int64 _alsoft_int64_t;
|
||||
typedef unsigned __int64 _alsoft_uint64_t;
|
||||
#else
|
||||
/* Fallback if nothing above works */
|
||||
#include <stdint.h>
|
||||
typedef int64_t _alsoft_int64_t;
|
||||
typedef uint64_t _alsoft_uint64_t;
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifndef AL_LOKI_IMA_ADPCM_format
|
||||
#define AL_LOKI_IMA_ADPCM_format 1
|
||||
#define AL_FORMAT_IMA_ADPCM_MONO16_EXT 0x10000
|
||||
#define AL_FORMAT_IMA_ADPCM_STEREO16_EXT 0x10001
|
||||
#endif
|
||||
|
||||
#ifndef AL_LOKI_WAVE_format
|
||||
#define AL_LOKI_WAVE_format 1
|
||||
#define AL_FORMAT_WAVE_EXT 0x10002
|
||||
#endif
|
||||
|
||||
#ifndef AL_EXT_vorbis
|
||||
#define AL_EXT_vorbis 1
|
||||
#define AL_FORMAT_VORBIS_EXT 0x10003
|
||||
#endif
|
||||
|
||||
#ifndef AL_LOKI_quadriphonic
|
||||
#define AL_LOKI_quadriphonic 1
|
||||
#define AL_FORMAT_QUAD8_LOKI 0x10004
|
||||
#define AL_FORMAT_QUAD16_LOKI 0x10005
|
||||
#endif
|
||||
|
||||
#ifndef AL_EXT_float32
|
||||
#define AL_EXT_float32 1
|
||||
#define AL_FORMAT_MONO_FLOAT32 0x10010
|
||||
#define AL_FORMAT_STEREO_FLOAT32 0x10011
|
||||
#endif
|
||||
|
||||
#ifndef AL_EXT_double
|
||||
#define AL_EXT_double 1
|
||||
#define AL_FORMAT_MONO_DOUBLE_EXT 0x10012
|
||||
#define AL_FORMAT_STEREO_DOUBLE_EXT 0x10013
|
||||
#endif
|
||||
|
||||
#ifndef AL_EXT_MULAW
|
||||
#define AL_EXT_MULAW 1
|
||||
#define AL_FORMAT_MONO_MULAW_EXT 0x10014
|
||||
#define AL_FORMAT_STEREO_MULAW_EXT 0x10015
|
||||
#endif
|
||||
|
||||
#ifndef AL_EXT_ALAW
|
||||
#define AL_EXT_ALAW 1
|
||||
#define AL_FORMAT_MONO_ALAW_EXT 0x10016
|
||||
#define AL_FORMAT_STEREO_ALAW_EXT 0x10017
|
||||
#endif
|
||||
|
||||
#ifndef ALC_LOKI_audio_channel
|
||||
#define ALC_LOKI_audio_channel 1
|
||||
#define ALC_CHAN_MAIN_LOKI 0x500001
|
||||
#define ALC_CHAN_PCM_LOKI 0x500002
|
||||
#define ALC_CHAN_CD_LOKI 0x500003
|
||||
#endif
|
||||
|
||||
#ifndef AL_EXT_MCFORMATS
|
||||
#define AL_EXT_MCFORMATS 1
|
||||
/* Provides support for surround sound buffer formats with 8, 16, and 32-bit
|
||||
* samples.
|
||||
*
|
||||
* QUAD8: Unsigned 8-bit, Quadraphonic (Front Left, Front Right, Rear Left,
|
||||
* Rear Right).
|
||||
* QUAD16: Signed 16-bit, Quadraphonic.
|
||||
* QUAD32: 32-bit float, Quadraphonic.
|
||||
* REAR8: Unsigned 8-bit, Rear Stereo (Rear Left, Rear Right).
|
||||
* REAR16: Signed 16-bit, Rear Stereo.
|
||||
* REAR32: 32-bit float, Rear Stereo.
|
||||
* 51CHN8: Unsigned 8-bit, 5.1 Surround (Front Left, Front Right, Front Center,
|
||||
* LFE, Side Left, Side Right). Note that some audio systems may label
|
||||
* 5.1's Side channels as Rear or Surround; they are equivalent for the
|
||||
* purposes of this extension.
|
||||
* 51CHN16: Signed 16-bit, 5.1 Surround.
|
||||
* 51CHN32: 32-bit float, 5.1 Surround.
|
||||
* 61CHN8: Unsigned 8-bit, 6.1 Surround (Front Left, Front Right, Front Center,
|
||||
* LFE, Rear Center, Side Left, Side Right).
|
||||
* 61CHN16: Signed 16-bit, 6.1 Surround.
|
||||
* 61CHN32: 32-bit float, 6.1 Surround.
|
||||
* 71CHN8: Unsigned 8-bit, 7.1 Surround (Front Left, Front Right, Front Center,
|
||||
* LFE, Rear Left, Rear Right, Side Left, Side Right).
|
||||
* 71CHN16: Signed 16-bit, 7.1 Surround.
|
||||
* 71CHN32: 32-bit float, 7.1 Surround.
|
||||
*/
|
||||
#define AL_FORMAT_QUAD8 0x1204
|
||||
#define AL_FORMAT_QUAD16 0x1205
|
||||
#define AL_FORMAT_QUAD32 0x1206
|
||||
#define AL_FORMAT_REAR8 0x1207
|
||||
#define AL_FORMAT_REAR16 0x1208
|
||||
#define AL_FORMAT_REAR32 0x1209
|
||||
#define AL_FORMAT_51CHN8 0x120A
|
||||
#define AL_FORMAT_51CHN16 0x120B
|
||||
#define AL_FORMAT_51CHN32 0x120C
|
||||
#define AL_FORMAT_61CHN8 0x120D
|
||||
#define AL_FORMAT_61CHN16 0x120E
|
||||
#define AL_FORMAT_61CHN32 0x120F
|
||||
#define AL_FORMAT_71CHN8 0x1210
|
||||
#define AL_FORMAT_71CHN16 0x1211
|
||||
#define AL_FORMAT_71CHN32 0x1212
|
||||
#endif
|
||||
|
||||
#ifndef AL_EXT_MULAW_MCFORMATS
|
||||
#define AL_EXT_MULAW_MCFORMATS 1
|
||||
#define AL_FORMAT_MONO_MULAW 0x10014
|
||||
#define AL_FORMAT_STEREO_MULAW 0x10015
|
||||
#define AL_FORMAT_QUAD_MULAW 0x10021
|
||||
#define AL_FORMAT_REAR_MULAW 0x10022
|
||||
#define AL_FORMAT_51CHN_MULAW 0x10023
|
||||
#define AL_FORMAT_61CHN_MULAW 0x10024
|
||||
#define AL_FORMAT_71CHN_MULAW 0x10025
|
||||
#endif
|
||||
|
||||
#ifndef AL_EXT_IMA4
|
||||
#define AL_EXT_IMA4 1
|
||||
#define AL_FORMAT_MONO_IMA4 0x1300
|
||||
#define AL_FORMAT_STEREO_IMA4 0x1301
|
||||
#endif
|
||||
|
||||
#ifndef AL_EXT_STATIC_BUFFER
|
||||
#define AL_EXT_STATIC_BUFFER 1
|
||||
typedef void (AL_APIENTRY*PFNALBUFFERDATASTATICPROC)(const ALint,ALenum,ALvoid*,ALsizei,ALsizei);
|
||||
#ifdef AL_ALEXT_PROTOTYPES
|
||||
AL_API void AL_APIENTRY alBufferDataStatic(const ALint buffer, ALenum format, ALvoid *data, ALsizei len, ALsizei freq);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef ALC_EXT_EFX
|
||||
#define ALC_EXT_EFX 1
|
||||
#include "efx.h"
|
||||
#endif
|
||||
|
||||
#ifndef ALC_EXT_disconnect
|
||||
#define ALC_EXT_disconnect 1
|
||||
#define ALC_CONNECTED 0x313
|
||||
#endif
|
||||
|
||||
#ifndef ALC_EXT_thread_local_context
|
||||
#define ALC_EXT_thread_local_context 1
|
||||
typedef ALCboolean (ALC_APIENTRY*PFNALCSETTHREADCONTEXTPROC)(ALCcontext *context);
|
||||
typedef ALCcontext* (ALC_APIENTRY*PFNALCGETTHREADCONTEXTPROC)(void);
|
||||
#ifdef AL_ALEXT_PROTOTYPES
|
||||
ALC_API ALCboolean ALC_APIENTRY alcSetThreadContext(ALCcontext *context);
|
||||
ALC_API ALCcontext* ALC_APIENTRY alcGetThreadContext(void);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef AL_EXT_source_distance_model
|
||||
#define AL_EXT_source_distance_model 1
|
||||
#define AL_SOURCE_DISTANCE_MODEL 0x200
|
||||
#endif
|
||||
|
||||
#ifndef AL_SOFT_buffer_sub_data
|
||||
#define AL_SOFT_buffer_sub_data 1
|
||||
#define AL_BYTE_RW_OFFSETS_SOFT 0x1031
|
||||
#define AL_SAMPLE_RW_OFFSETS_SOFT 0x1032
|
||||
typedef void (AL_APIENTRY*PFNALBUFFERSUBDATASOFTPROC)(ALuint,ALenum,const ALvoid*,ALsizei,ALsizei);
|
||||
#ifdef AL_ALEXT_PROTOTYPES
|
||||
AL_API void AL_APIENTRY alBufferSubDataSOFT(ALuint buffer,ALenum format,const ALvoid *data,ALsizei offset,ALsizei length);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef AL_SOFT_loop_points
|
||||
#define AL_SOFT_loop_points 1
|
||||
#define AL_LOOP_POINTS_SOFT 0x2015
|
||||
#endif
|
||||
|
||||
#ifndef AL_EXT_FOLDBACK
|
||||
#define AL_EXT_FOLDBACK 1
|
||||
#define AL_EXT_FOLDBACK_NAME "AL_EXT_FOLDBACK"
|
||||
#define AL_FOLDBACK_EVENT_BLOCK 0x4112
|
||||
#define AL_FOLDBACK_EVENT_START 0x4111
|
||||
#define AL_FOLDBACK_EVENT_STOP 0x4113
|
||||
#define AL_FOLDBACK_MODE_MONO 0x4101
|
||||
#define AL_FOLDBACK_MODE_STEREO 0x4102
|
||||
typedef void (AL_APIENTRY*LPALFOLDBACKCALLBACK)(ALenum,ALsizei);
|
||||
typedef void (AL_APIENTRY*LPALREQUESTFOLDBACKSTART)(ALenum,ALsizei,ALsizei,ALfloat*,LPALFOLDBACKCALLBACK);
|
||||
typedef void (AL_APIENTRY*LPALREQUESTFOLDBACKSTOP)(void);
|
||||
#ifdef AL_ALEXT_PROTOTYPES
|
||||
AL_API void AL_APIENTRY alRequestFoldbackStart(ALenum mode,ALsizei count,ALsizei length,ALfloat *mem,LPALFOLDBACKCALLBACK callback);
|
||||
AL_API void AL_APIENTRY alRequestFoldbackStop(void);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef ALC_EXT_DEDICATED
|
||||
#define ALC_EXT_DEDICATED 1
|
||||
#define AL_DEDICATED_GAIN 0x0001
|
||||
#define AL_EFFECT_DEDICATED_DIALOGUE 0x9001
|
||||
#define AL_EFFECT_DEDICATED_LOW_FREQUENCY_EFFECT 0x9000
|
||||
#endif
|
||||
|
||||
#ifndef AL_SOFT_buffer_samples
|
||||
#define AL_SOFT_buffer_samples 1
|
||||
/* Channel configurations */
|
||||
#define AL_MONO_SOFT 0x1500
|
||||
#define AL_STEREO_SOFT 0x1501
|
||||
#define AL_REAR_SOFT 0x1502
|
||||
#define AL_QUAD_SOFT 0x1503
|
||||
#define AL_5POINT1_SOFT 0x1504
|
||||
#define AL_6POINT1_SOFT 0x1505
|
||||
#define AL_7POINT1_SOFT 0x1506
|
||||
|
||||
/* Sample types */
|
||||
#define AL_BYTE_SOFT 0x1400
|
||||
#define AL_UNSIGNED_BYTE_SOFT 0x1401
|
||||
#define AL_SHORT_SOFT 0x1402
|
||||
#define AL_UNSIGNED_SHORT_SOFT 0x1403
|
||||
#define AL_INT_SOFT 0x1404
|
||||
#define AL_UNSIGNED_INT_SOFT 0x1405
|
||||
#define AL_FLOAT_SOFT 0x1406
|
||||
#define AL_DOUBLE_SOFT 0x1407
|
||||
#define AL_BYTE3_SOFT 0x1408
|
||||
#define AL_UNSIGNED_BYTE3_SOFT 0x1409
|
||||
|
||||
/* Storage formats */
|
||||
#define AL_MONO8_SOFT 0x1100
|
||||
#define AL_MONO16_SOFT 0x1101
|
||||
#define AL_MONO32F_SOFT 0x10010
|
||||
#define AL_STEREO8_SOFT 0x1102
|
||||
#define AL_STEREO16_SOFT 0x1103
|
||||
#define AL_STEREO32F_SOFT 0x10011
|
||||
#define AL_QUAD8_SOFT 0x1204
|
||||
#define AL_QUAD16_SOFT 0x1205
|
||||
#define AL_QUAD32F_SOFT 0x1206
|
||||
#define AL_REAR8_SOFT 0x1207
|
||||
#define AL_REAR16_SOFT 0x1208
|
||||
#define AL_REAR32F_SOFT 0x1209
|
||||
#define AL_5POINT1_8_SOFT 0x120A
|
||||
#define AL_5POINT1_16_SOFT 0x120B
|
||||
#define AL_5POINT1_32F_SOFT 0x120C
|
||||
#define AL_6POINT1_8_SOFT 0x120D
|
||||
#define AL_6POINT1_16_SOFT 0x120E
|
||||
#define AL_6POINT1_32F_SOFT 0x120F
|
||||
#define AL_7POINT1_8_SOFT 0x1210
|
||||
#define AL_7POINT1_16_SOFT 0x1211
|
||||
#define AL_7POINT1_32F_SOFT 0x1212
|
||||
|
||||
/* Buffer attributes */
|
||||
#define AL_INTERNAL_FORMAT_SOFT 0x2008
|
||||
#define AL_BYTE_LENGTH_SOFT 0x2009
|
||||
#define AL_SAMPLE_LENGTH_SOFT 0x200A
|
||||
#define AL_SEC_LENGTH_SOFT 0x200B
|
||||
|
||||
typedef void (AL_APIENTRY*LPALBUFFERSAMPLESSOFT)(ALuint,ALuint,ALenum,ALsizei,ALenum,ALenum,const ALvoid*);
|
||||
typedef void (AL_APIENTRY*LPALBUFFERSUBSAMPLESSOFT)(ALuint,ALsizei,ALsizei,ALenum,ALenum,const ALvoid*);
|
||||
typedef void (AL_APIENTRY*LPALGETBUFFERSAMPLESSOFT)(ALuint,ALsizei,ALsizei,ALenum,ALenum,ALvoid*);
|
||||
typedef ALboolean (AL_APIENTRY*LPALISBUFFERFORMATSUPPORTEDSOFT)(ALenum);
|
||||
#ifdef AL_ALEXT_PROTOTYPES
|
||||
AL_API void AL_APIENTRY alBufferSamplesSOFT(ALuint buffer, ALuint samplerate, ALenum internalformat, ALsizei samples, ALenum channels, ALenum type, const ALvoid *data);
|
||||
AL_API void AL_APIENTRY alBufferSubSamplesSOFT(ALuint buffer, ALsizei offset, ALsizei samples, ALenum channels, ALenum type, const ALvoid *data);
|
||||
AL_API void AL_APIENTRY alGetBufferSamplesSOFT(ALuint buffer, ALsizei offset, ALsizei samples, ALenum channels, ALenum type, ALvoid *data);
|
||||
AL_API ALboolean AL_APIENTRY alIsBufferFormatSupportedSOFT(ALenum format);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef AL_SOFT_direct_channels
|
||||
#define AL_SOFT_direct_channels 1
|
||||
#define AL_DIRECT_CHANNELS_SOFT 0x1033
|
||||
#endif
|
||||
|
||||
#ifndef ALC_SOFT_loopback
|
||||
#define ALC_SOFT_loopback 1
|
||||
#define ALC_FORMAT_CHANNELS_SOFT 0x1990
|
||||
#define ALC_FORMAT_TYPE_SOFT 0x1991
|
||||
|
||||
/* Sample types */
|
||||
#define ALC_BYTE_SOFT 0x1400
|
||||
#define ALC_UNSIGNED_BYTE_SOFT 0x1401
|
||||
#define ALC_SHORT_SOFT 0x1402
|
||||
#define ALC_UNSIGNED_SHORT_SOFT 0x1403
|
||||
#define ALC_INT_SOFT 0x1404
|
||||
#define ALC_UNSIGNED_INT_SOFT 0x1405
|
||||
#define ALC_FLOAT_SOFT 0x1406
|
||||
|
||||
/* Channel configurations */
|
||||
#define ALC_MONO_SOFT 0x1500
|
||||
#define ALC_STEREO_SOFT 0x1501
|
||||
#define ALC_QUAD_SOFT 0x1503
|
||||
#define ALC_5POINT1_SOFT 0x1504
|
||||
#define ALC_6POINT1_SOFT 0x1505
|
||||
#define ALC_7POINT1_SOFT 0x1506
|
||||
|
||||
typedef ALCdevice* (ALC_APIENTRY*LPALCLOOPBACKOPENDEVICESOFT)(const ALCchar*);
|
||||
typedef ALCboolean (ALC_APIENTRY*LPALCISRENDERFORMATSUPPORTEDSOFT)(ALCdevice*,ALCsizei,ALCenum,ALCenum);
|
||||
typedef void (ALC_APIENTRY*LPALCRENDERSAMPLESSOFT)(ALCdevice*,ALCvoid*,ALCsizei);
|
||||
#ifdef AL_ALEXT_PROTOTYPES
|
||||
ALC_API ALCdevice* ALC_APIENTRY alcLoopbackOpenDeviceSOFT(const ALCchar *deviceName);
|
||||
ALC_API ALCboolean ALC_APIENTRY alcIsRenderFormatSupportedSOFT(ALCdevice *device, ALCsizei freq, ALCenum channels, ALCenum type);
|
||||
ALC_API void ALC_APIENTRY alcRenderSamplesSOFT(ALCdevice *device, ALCvoid *buffer, ALCsizei samples);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef AL_EXT_STEREO_ANGLES
|
||||
#define AL_EXT_STEREO_ANGLES 1
|
||||
#define AL_STEREO_ANGLES 0x1030
|
||||
#endif
|
||||
|
||||
#ifndef AL_EXT_SOURCE_RADIUS
|
||||
#define AL_EXT_SOURCE_RADIUS 1
|
||||
#define AL_SOURCE_RADIUS 0x1031
|
||||
#endif
|
||||
|
||||
#ifndef AL_SOFT_source_latency
|
||||
#define AL_SOFT_source_latency 1
|
||||
#define AL_SAMPLE_OFFSET_LATENCY_SOFT 0x1200
|
||||
#define AL_SEC_OFFSET_LATENCY_SOFT 0x1201
|
||||
typedef _alsoft_int64_t ALint64SOFT;
|
||||
typedef _alsoft_uint64_t ALuint64SOFT;
|
||||
typedef void (AL_APIENTRY*LPALSOURCEDSOFT)(ALuint,ALenum,ALdouble);
|
||||
typedef void (AL_APIENTRY*LPALSOURCE3DSOFT)(ALuint,ALenum,ALdouble,ALdouble,ALdouble);
|
||||
typedef void (AL_APIENTRY*LPALSOURCEDVSOFT)(ALuint,ALenum,const ALdouble*);
|
||||
typedef void (AL_APIENTRY*LPALGETSOURCEDSOFT)(ALuint,ALenum,ALdouble*);
|
||||
typedef void (AL_APIENTRY*LPALGETSOURCE3DSOFT)(ALuint,ALenum,ALdouble*,ALdouble*,ALdouble*);
|
||||
typedef void (AL_APIENTRY*LPALGETSOURCEDVSOFT)(ALuint,ALenum,ALdouble*);
|
||||
typedef void (AL_APIENTRY*LPALSOURCEI64SOFT)(ALuint,ALenum,ALint64SOFT);
|
||||
typedef void (AL_APIENTRY*LPALSOURCE3I64SOFT)(ALuint,ALenum,ALint64SOFT,ALint64SOFT,ALint64SOFT);
|
||||
typedef void (AL_APIENTRY*LPALSOURCEI64VSOFT)(ALuint,ALenum,const ALint64SOFT*);
|
||||
typedef void (AL_APIENTRY*LPALGETSOURCEI64SOFT)(ALuint,ALenum,ALint64SOFT*);
|
||||
typedef void (AL_APIENTRY*LPALGETSOURCE3I64SOFT)(ALuint,ALenum,ALint64SOFT*,ALint64SOFT*,ALint64SOFT*);
|
||||
typedef void (AL_APIENTRY*LPALGETSOURCEI64VSOFT)(ALuint,ALenum,ALint64SOFT*);
|
||||
#ifdef AL_ALEXT_PROTOTYPES
|
||||
AL_API void AL_APIENTRY alSourcedSOFT(ALuint source, ALenum param, ALdouble value);
|
||||
AL_API void AL_APIENTRY alSource3dSOFT(ALuint source, ALenum param, ALdouble value1, ALdouble value2, ALdouble value3);
|
||||
AL_API void AL_APIENTRY alSourcedvSOFT(ALuint source, ALenum param, const ALdouble *values);
|
||||
AL_API void AL_APIENTRY alGetSourcedSOFT(ALuint source, ALenum param, ALdouble *value);
|
||||
AL_API void AL_APIENTRY alGetSource3dSOFT(ALuint source, ALenum param, ALdouble *value1, ALdouble *value2, ALdouble *value3);
|
||||
AL_API void AL_APIENTRY alGetSourcedvSOFT(ALuint source, ALenum param, ALdouble *values);
|
||||
AL_API void AL_APIENTRY alSourcei64SOFT(ALuint source, ALenum param, ALint64SOFT value);
|
||||
AL_API void AL_APIENTRY alSource3i64SOFT(ALuint source, ALenum param, ALint64SOFT value1, ALint64SOFT value2, ALint64SOFT value3);
|
||||
AL_API void AL_APIENTRY alSourcei64vSOFT(ALuint source, ALenum param, const ALint64SOFT *values);
|
||||
AL_API void AL_APIENTRY alGetSourcei64SOFT(ALuint source, ALenum param, ALint64SOFT *value);
|
||||
AL_API void AL_APIENTRY alGetSource3i64SOFT(ALuint source, ALenum param, ALint64SOFT *value1, ALint64SOFT *value2, ALint64SOFT *value3);
|
||||
AL_API void AL_APIENTRY alGetSourcei64vSOFT(ALuint source, ALenum param, ALint64SOFT *values);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef ALC_EXT_DEFAULT_FILTER_ORDER
|
||||
#define ALC_EXT_DEFAULT_FILTER_ORDER 1
|
||||
#define ALC_DEFAULT_FILTER_ORDER 0x1100
|
||||
#endif
|
||||
|
||||
#ifndef AL_SOFT_deferred_updates
|
||||
#define AL_SOFT_deferred_updates 1
|
||||
#define AL_DEFERRED_UPDATES_SOFT 0xC002
|
||||
typedef void (AL_APIENTRY*LPALDEFERUPDATESSOFT)(void);
|
||||
typedef void (AL_APIENTRY*LPALPROCESSUPDATESSOFT)(void);
|
||||
#ifdef AL_ALEXT_PROTOTYPES
|
||||
AL_API void AL_APIENTRY alDeferUpdatesSOFT(void);
|
||||
AL_API void AL_APIENTRY alProcessUpdatesSOFT(void);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef AL_SOFT_block_alignment
|
||||
#define AL_SOFT_block_alignment 1
|
||||
#define AL_UNPACK_BLOCK_ALIGNMENT_SOFT 0x200C
|
||||
#define AL_PACK_BLOCK_ALIGNMENT_SOFT 0x200D
|
||||
#endif
|
||||
|
||||
#ifndef AL_SOFT_MSADPCM
|
||||
#define AL_SOFT_MSADPCM 1
|
||||
#define AL_FORMAT_MONO_MSADPCM_SOFT 0x1302
|
||||
#define AL_FORMAT_STEREO_MSADPCM_SOFT 0x1303
|
||||
#endif
|
||||
|
||||
#ifndef AL_SOFT_source_length
|
||||
#define AL_SOFT_source_length 1
|
||||
/*#define AL_BYTE_LENGTH_SOFT 0x2009*/
|
||||
/*#define AL_SAMPLE_LENGTH_SOFT 0x200A*/
|
||||
/*#define AL_SEC_LENGTH_SOFT 0x200B*/
|
||||
#endif
|
||||
|
||||
#ifndef ALC_SOFT_pause_device
|
||||
#define ALC_SOFT_pause_device 1
|
||||
typedef void (ALC_APIENTRY*LPALCDEVICEPAUSESOFT)(ALCdevice *device);
|
||||
typedef void (ALC_APIENTRY*LPALCDEVICERESUMESOFT)(ALCdevice *device);
|
||||
#ifdef AL_ALEXT_PROTOTYPES
|
||||
ALC_API void ALC_APIENTRY alcDevicePauseSOFT(ALCdevice *device);
|
||||
ALC_API void ALC_APIENTRY alcDeviceResumeSOFT(ALCdevice *device);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef AL_EXT_BFORMAT
|
||||
#define AL_EXT_BFORMAT 1
|
||||
/* Provides support for B-Format ambisonic buffers (first-order, FuMa scaling
|
||||
* and layout).
|
||||
*
|
||||
* BFORMAT2D_8: Unsigned 8-bit, 3-channel non-periphonic (WXY).
|
||||
* BFORMAT2D_16: Signed 16-bit, 3-channel non-periphonic (WXY).
|
||||
* BFORMAT2D_FLOAT32: 32-bit float, 3-channel non-periphonic (WXY).
|
||||
* BFORMAT3D_8: Unsigned 8-bit, 4-channel periphonic (WXYZ).
|
||||
* BFORMAT3D_16: Signed 16-bit, 4-channel periphonic (WXYZ).
|
||||
* BFORMAT3D_FLOAT32: 32-bit float, 4-channel periphonic (WXYZ).
|
||||
*/
|
||||
#define AL_FORMAT_BFORMAT2D_8 0x20021
|
||||
#define AL_FORMAT_BFORMAT2D_16 0x20022
|
||||
#define AL_FORMAT_BFORMAT2D_FLOAT32 0x20023
|
||||
#define AL_FORMAT_BFORMAT3D_8 0x20031
|
||||
#define AL_FORMAT_BFORMAT3D_16 0x20032
|
||||
#define AL_FORMAT_BFORMAT3D_FLOAT32 0x20033
|
||||
#endif
|
||||
|
||||
#ifndef AL_EXT_MULAW_BFORMAT
|
||||
#define AL_EXT_MULAW_BFORMAT 1
|
||||
#define AL_FORMAT_BFORMAT2D_MULAW 0x10031
|
||||
#define AL_FORMAT_BFORMAT3D_MULAW 0x10032
|
||||
#endif
|
||||
|
||||
#ifndef ALC_SOFT_HRTF
|
||||
#define ALC_SOFT_HRTF 1
|
||||
#define ALC_HRTF_SOFT 0x1992
|
||||
#define ALC_DONT_CARE_SOFT 0x0002
|
||||
#define ALC_HRTF_STATUS_SOFT 0x1993
|
||||
#define ALC_HRTF_DISABLED_SOFT 0x0000
|
||||
#define ALC_HRTF_ENABLED_SOFT 0x0001
|
||||
#define ALC_HRTF_DENIED_SOFT 0x0002
|
||||
#define ALC_HRTF_REQUIRED_SOFT 0x0003
|
||||
#define ALC_HRTF_HEADPHONES_DETECTED_SOFT 0x0004
|
||||
#define ALC_HRTF_UNSUPPORTED_FORMAT_SOFT 0x0005
|
||||
#define ALC_NUM_HRTF_SPECIFIERS_SOFT 0x1994
|
||||
#define ALC_HRTF_SPECIFIER_SOFT 0x1995
|
||||
#define ALC_HRTF_ID_SOFT 0x1996
|
||||
typedef const ALCchar* (ALC_APIENTRY*LPALCGETSTRINGISOFT)(ALCdevice *device, ALCenum paramName, ALCsizei index);
|
||||
typedef ALCboolean (ALC_APIENTRY*LPALCRESETDEVICESOFT)(ALCdevice *device, const ALCint *attribs);
|
||||
#ifdef AL_ALEXT_PROTOTYPES
|
||||
ALC_API const ALCchar* ALC_APIENTRY alcGetStringiSOFT(ALCdevice *device, ALCenum paramName, ALCsizei index);
|
||||
ALC_API ALCboolean ALC_APIENTRY alcResetDeviceSOFT(ALCdevice *device, const ALCint *attribs);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef AL_SOFT_gain_clamp_ex
|
||||
#define AL_SOFT_gain_clamp_ex 1
|
||||
#define AL_GAIN_LIMIT_SOFT 0x200E
|
||||
#endif
|
||||
|
||||
#ifndef AL_SOFT_source_resampler
|
||||
#define AL_SOFT_source_resampler
|
||||
#define AL_NUM_RESAMPLERS_SOFT 0x1210
|
||||
#define AL_DEFAULT_RESAMPLER_SOFT 0x1211
|
||||
#define AL_SOURCE_RESAMPLER_SOFT 0x1212
|
||||
#define AL_RESAMPLER_NAME_SOFT 0x1213
|
||||
typedef const ALchar* (AL_APIENTRY*LPALGETSTRINGISOFT)(ALenum pname, ALsizei index);
|
||||
#ifdef AL_ALEXT_PROTOTYPES
|
||||
AL_API const ALchar* AL_APIENTRY alGetStringiSOFT(ALenum pname, ALsizei index);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef AL_SOFT_source_spatialize
|
||||
#define AL_SOFT_source_spatialize
|
||||
#define AL_SOURCE_SPATIALIZE_SOFT 0x1214
|
||||
#define AL_AUTO_SOFT 0x0002
|
||||
#endif
|
||||
|
||||
#ifndef ALC_SOFT_output_limiter
|
||||
#define ALC_SOFT_output_limiter
|
||||
#define ALC_OUTPUT_LIMITER_SOFT 0x199A
|
||||
#endif
|
||||
|
||||
#ifndef ALC_SOFT_device_clock
|
||||
#define ALC_SOFT_device_clock 1
|
||||
typedef _alsoft_int64_t ALCint64SOFT;
|
||||
typedef _alsoft_uint64_t ALCuint64SOFT;
|
||||
#define ALC_DEVICE_CLOCK_SOFT 0x1600
|
||||
#define ALC_DEVICE_LATENCY_SOFT 0x1601
|
||||
#define ALC_DEVICE_CLOCK_LATENCY_SOFT 0x1602
|
||||
#define AL_SAMPLE_OFFSET_CLOCK_SOFT 0x1202
|
||||
#define AL_SEC_OFFSET_CLOCK_SOFT 0x1203
|
||||
typedef void (ALC_APIENTRY*LPALCGETINTEGER64VSOFT)(ALCdevice *device, ALCenum pname, ALsizei size, ALCint64SOFT *values);
|
||||
#ifdef AL_ALEXT_PROTOTYPES
|
||||
ALC_API void ALC_APIENTRY alcGetInteger64vSOFT(ALCdevice *device, ALCenum pname, ALsizei size, ALCint64SOFT *values);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef AL_SOFT_direct_channels_remix
|
||||
#define AL_SOFT_direct_channels_remix 1
|
||||
#define AL_DROP_UNMATCHED_SOFT 0x0001
|
||||
#define AL_REMIX_UNMATCHED_SOFT 0x0002
|
||||
#endif
|
||||
|
||||
#ifndef AL_SOFT_bformat_ex
|
||||
#define AL_SOFT_bformat_ex 1
|
||||
#define AL_AMBISONIC_LAYOUT_SOFT 0x1997
|
||||
#define AL_AMBISONIC_SCALING_SOFT 0x1998
|
||||
|
||||
/* Ambisonic layouts */
|
||||
#define AL_FUMA_SOFT 0x0000
|
||||
#define AL_ACN_SOFT 0x0001
|
||||
|
||||
/* Ambisonic scalings (normalization) */
|
||||
/*#define AL_FUMA_SOFT*/
|
||||
#define AL_SN3D_SOFT 0x0001
|
||||
#define AL_N3D_SOFT 0x0002
|
||||
#endif
|
||||
|
||||
#ifndef ALC_SOFT_loopback_bformat
|
||||
#define ALC_SOFT_loopback_bformat 1
|
||||
#define ALC_AMBISONIC_LAYOUT_SOFT 0x1997
|
||||
#define ALC_AMBISONIC_SCALING_SOFT 0x1998
|
||||
#define ALC_AMBISONIC_ORDER_SOFT 0x1999
|
||||
#define ALC_MAX_AMBISONIC_ORDER_SOFT 0x199B
|
||||
|
||||
#define ALC_BFORMAT3D_SOFT 0x1507
|
||||
|
||||
/* Ambisonic layouts */
|
||||
#define ALC_FUMA_SOFT 0x0000
|
||||
#define ALC_ACN_SOFT 0x0001
|
||||
|
||||
/* Ambisonic scalings (normalization) */
|
||||
/*#define ALC_FUMA_SOFT*/
|
||||
#define ALC_SN3D_SOFT 0x0001
|
||||
#define ALC_N3D_SOFT 0x0002
|
||||
#endif
|
||||
|
||||
#ifndef AL_SOFT_effect_target
|
||||
#define AL_SOFT_effect_target
|
||||
#define AL_EFFECTSLOT_TARGET_SOFT 0x199C
|
||||
#endif
|
||||
|
||||
#ifndef AL_SOFT_events
|
||||
#define AL_SOFT_events 1
|
||||
#define AL_EVENT_CALLBACK_FUNCTION_SOFT 0x19A2
|
||||
#define AL_EVENT_CALLBACK_USER_PARAM_SOFT 0x19A3
|
||||
#define AL_EVENT_TYPE_BUFFER_COMPLETED_SOFT 0x19A4
|
||||
#define AL_EVENT_TYPE_SOURCE_STATE_CHANGED_SOFT 0x19A5
|
||||
#define AL_EVENT_TYPE_DISCONNECTED_SOFT 0x19A6
|
||||
typedef void (AL_APIENTRY*ALEVENTPROCSOFT)(ALenum eventType, ALuint object, ALuint param,
|
||||
ALsizei length, const ALchar *message,
|
||||
void *userParam);
|
||||
typedef void (AL_APIENTRY*LPALEVENTCONTROLSOFT)(ALsizei count, const ALenum *types, ALboolean enable);
|
||||
typedef void (AL_APIENTRY*LPALEVENTCALLBACKSOFT)(ALEVENTPROCSOFT callback, void *userParam);
|
||||
typedef void* (AL_APIENTRY*LPALGETPOINTERSOFT)(ALenum pname);
|
||||
typedef void (AL_APIENTRY*LPALGETPOINTERVSOFT)(ALenum pname, void **values);
|
||||
#ifdef AL_ALEXT_PROTOTYPES
|
||||
AL_API void AL_APIENTRY alEventControlSOFT(ALsizei count, const ALenum *types, ALboolean enable);
|
||||
AL_API void AL_APIENTRY alEventCallbackSOFT(ALEVENTPROCSOFT callback, void *userParam);
|
||||
AL_API void* AL_APIENTRY alGetPointerSOFT(ALenum pname);
|
||||
AL_API void AL_APIENTRY alGetPointervSOFT(ALenum pname, void **values);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef ALC_SOFT_reopen_device
|
||||
#define ALC_SOFT_reopen_device
|
||||
typedef ALCboolean (ALC_APIENTRY*LPALCREOPENDEVICESOFT)(ALCdevice *device,
|
||||
const ALCchar *deviceName, const ALCint *attribs);
|
||||
#ifdef AL_ALEXT_PROTOTYPES
|
||||
ALCboolean ALC_APIENTRY alcReopenDeviceSOFT(ALCdevice *device, const ALCchar *deviceName,
|
||||
const ALCint *attribs);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef AL_SOFT_callback_buffer
|
||||
#define AL_SOFT_callback_buffer
|
||||
#define AL_BUFFER_CALLBACK_FUNCTION_SOFT 0x19A0
|
||||
#define AL_BUFFER_CALLBACK_USER_PARAM_SOFT 0x19A1
|
||||
typedef ALsizei (AL_APIENTRY*ALBUFFERCALLBACKTYPESOFT)(ALvoid *userptr, ALvoid *sampledata, ALsizei numbytes);
|
||||
typedef void (AL_APIENTRY*LPALBUFFERCALLBACKSOFT)(ALuint buffer, ALenum format, ALsizei freq, ALBUFFERCALLBACKTYPESOFT callback, ALvoid *userptr);
|
||||
typedef void (AL_APIENTRY*LPALGETBUFFERPTRSOFT)(ALuint buffer, ALenum param, ALvoid **value);
|
||||
typedef void (AL_APIENTRY*LPALGETBUFFER3PTRSOFT)(ALuint buffer, ALenum param, ALvoid **value1, ALvoid **value2, ALvoid **value3);
|
||||
typedef void (AL_APIENTRY*LPALGETBUFFERPTRVSOFT)(ALuint buffer, ALenum param, ALvoid **values);
|
||||
#ifdef AL_ALEXT_PROTOTYPES
|
||||
AL_API void AL_APIENTRY alBufferCallbackSOFT(ALuint buffer, ALenum format, ALsizei freq, ALBUFFERCALLBACKTYPESOFT callback, ALvoid *userptr);
|
||||
AL_API void AL_APIENTRY alGetBufferPtrSOFT(ALuint buffer, ALenum param, ALvoid **ptr);
|
||||
AL_API void AL_APIENTRY alGetBuffer3PtrSOFT(ALuint buffer, ALenum param, ALvoid **ptr0, ALvoid **ptr1, ALvoid **ptr2);
|
||||
AL_API void AL_APIENTRY alGetBufferPtrvSOFT(ALuint buffer, ALenum param, ALvoid **ptr);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef AL_SOFT_UHJ
|
||||
#define AL_SOFT_UHJ
|
||||
#define AL_FORMAT_UHJ2CHN8_SOFT 0x19A2
|
||||
#define AL_FORMAT_UHJ2CHN16_SOFT 0x19A3
|
||||
#define AL_FORMAT_UHJ2CHN_FLOAT32_SOFT 0x19A4
|
||||
#define AL_FORMAT_UHJ3CHN8_SOFT 0x19A5
|
||||
#define AL_FORMAT_UHJ3CHN16_SOFT 0x19A6
|
||||
#define AL_FORMAT_UHJ3CHN_FLOAT32_SOFT 0x19A7
|
||||
#define AL_FORMAT_UHJ4CHN8_SOFT 0x19A8
|
||||
#define AL_FORMAT_UHJ4CHN16_SOFT 0x19A9
|
||||
#define AL_FORMAT_UHJ4CHN_FLOAT32_SOFT 0x19AA
|
||||
|
||||
#define AL_STEREO_MODE_SOFT 0x19B0
|
||||
#define AL_NORMAL_SOFT 0x0000
|
||||
#define AL_SUPER_STEREO_SOFT 0x0001
|
||||
#define AL_SUPER_STEREO_WIDTH_SOFT 0x19B1
|
||||
#endif
|
||||
|
||||
#ifndef ALC_SOFT_output_mode
|
||||
#define ALC_SOFT_output_mode
|
||||
#define ALC_OUTPUT_MODE_SOFT 0x19AC
|
||||
#define ALC_ANY_SOFT 0x19AD
|
||||
/*#define ALC_MONO_SOFT 0x1500*/
|
||||
/*#define ALC_STEREO_SOFT 0x1501*/
|
||||
#define ALC_STEREO_BASIC_SOFT 0x19AE
|
||||
#define ALC_STEREO_UHJ_SOFT 0x19AF
|
||||
#define ALC_STEREO_HRTF_SOFT 0x19B2
|
||||
/*#define ALC_QUAD_SOFT 0x1503*/
|
||||
#define ALC_SURROUND_5_1_SOFT 0x1504
|
||||
#define ALC_SURROUND_6_1_SOFT 0x1505
|
||||
#define ALC_SURROUND_7_1_SOFT 0x1506
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -47,27 +47,29 @@
|
|||
//
|
||||
//==========================================================================
|
||||
|
||||
void FStringTable::LoadStrings (const char *language)
|
||||
void FStringTable::LoadStrings (FileSys::FileSystem& fileSystem_, const char *language)
|
||||
{
|
||||
int lastlump, lump;
|
||||
|
||||
fileSystem = &fileSystem_;
|
||||
allStrings.Clear();
|
||||
lastlump = 0;
|
||||
while ((lump = fileSystem.FindLump("LMACROS", &lastlump)) != -1)
|
||||
while ((lump = fileSystem->FindLump("LMACROS", &lastlump)) != -1)
|
||||
{
|
||||
readMacros(lump);
|
||||
}
|
||||
|
||||
lastlump = 0;
|
||||
while ((lump = fileSystem.FindLump ("LANGUAGE", &lastlump)) != -1)
|
||||
while ((lump = fileSystem->FindLump ("LANGUAGE", &lastlump)) != -1)
|
||||
{
|
||||
auto lumpdata = fileSystem.ReadFile(lump);
|
||||
auto lumpdata = fileSystem->ReadFile(lump);
|
||||
|
||||
if (!ParseLanguageCSV(lump, lumpdata.string(), lumpdata.size()))
|
||||
LoadLanguage (lump, lumpdata.string(), lumpdata.size());
|
||||
}
|
||||
UpdateLanguage(language);
|
||||
allMacros.Clear();
|
||||
fileSystem = nullptr;
|
||||
}
|
||||
|
||||
|
||||
|
@ -159,9 +161,10 @@ TArray<TArray<FString>> FStringTable::parseCSV(const char* buffer, size_t size)
|
|||
|
||||
bool FStringTable::readMacros(int lumpnum)
|
||||
{
|
||||
auto lumpdata = fileSystem.ReadFile(lumpnum);
|
||||
auto lumpdata = fileSystem->ReadFile(lumpnum);
|
||||
auto data = parseCSV(lumpdata.string(), lumpdata.size());
|
||||
|
||||
allMacros.Clear();
|
||||
for (unsigned i = 1; i < data.Size(); i++)
|
||||
{
|
||||
auto macroname = data[i][0];
|
||||
|
@ -410,7 +413,7 @@ void FStringTable::DeleteForLabel(int lumpnum, FName label)
|
|||
{
|
||||
decltype(allStrings)::Iterator it(allStrings);
|
||||
decltype(allStrings)::Pair *pair;
|
||||
auto filenum = fileSystem.GetFileContainer(lumpnum);
|
||||
auto filenum = fileSystem->GetFileContainer(lumpnum);
|
||||
|
||||
while (it.NextPair(pair))
|
||||
{
|
||||
|
@ -432,7 +435,7 @@ void FStringTable::DeleteForLabel(int lumpnum, FName label)
|
|||
void FStringTable::InsertString(int lumpnum, int langid, FName label, const FString &string)
|
||||
{
|
||||
const char *strlangid = (const char *)&langid;
|
||||
TableElement te = { fileSystem.GetFileContainer(lumpnum), { string, string, string, string } };
|
||||
TableElement te = { fileSystem->GetFileContainer(lumpnum), { string, string, string, string } };
|
||||
ptrdiff_t index;
|
||||
while ((index = te.strings[0].IndexOf("@[")) >= 0)
|
||||
{
|
||||
|
|
|
@ -84,7 +84,7 @@ public:
|
|||
using LangMap = TMap<uint32_t, StringMap>;
|
||||
using StringMacroMap = TMap<FName, StringMacro>;
|
||||
|
||||
void LoadStrings(const char *language);
|
||||
void LoadStrings(FileSys::FileSystem& fileSystem, const char *language);
|
||||
void UpdateLanguage(const char* language);
|
||||
StringMap GetDefaultStrings() { return allStrings[default_table]; } // Dehacked needs these for comparison
|
||||
void SetOverrideStrings(StringMap & map)
|
||||
|
@ -108,6 +108,7 @@ public:
|
|||
|
||||
private:
|
||||
|
||||
FileSys::FileSystem* fileSystem;
|
||||
FString activeLanguage;
|
||||
StringMacroMap allMacros;
|
||||
LangMap allStrings;
|
||||
|
|
|
@ -252,7 +252,7 @@ bool FileSystem::InitMultipleFiles (std::vector<std::string>& filenames, LumpFil
|
|||
stringpool->shared = true; // will be used by all owned resource files.
|
||||
|
||||
// first, check for duplicates
|
||||
if (allowduplicates)
|
||||
if (!allowduplicates)
|
||||
{
|
||||
for (size_t i=0;i<filenames.size(); i++)
|
||||
{
|
||||
|
|
|
@ -69,7 +69,6 @@
|
|||
|
||||
#ifndef NO_GTK
|
||||
bool I_GtkAvailable ();
|
||||
int I_PickIWad_Gtk (WadStuff *wads, int numwads, bool showwin, int defaultiwad, int& autoloadflags);
|
||||
void I_ShowFatalError_Gtk(const char* errortext);
|
||||
#elif defined(__APPLE__)
|
||||
int I_PickIWad_Cocoa (WadStuff *wads, int numwads, bool showwin, int defaultiwad);
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#pragma once
|
||||
|
||||
#include <cstddef>
|
||||
#include "tarray.h"
|
||||
|
||||
enum class ETextureType : uint8_t
|
||||
{
|
||||
|
@ -66,3 +67,11 @@ public:
|
|||
constexpr FSetTextureID(int v) : FTextureID(v) {}
|
||||
};
|
||||
|
||||
template<> struct THashTraits<FTextureID>
|
||||
{
|
||||
|
||||
hash_t Hash(const FTextureID key) { return (hash_t)key.GetIndex(); }
|
||||
|
||||
// Compares two keys, returning zero if they are the same.
|
||||
int Compare(const FTextureID left, const FTextureID right) { return left != right; }
|
||||
};
|
||||
|
|
|
@ -212,7 +212,7 @@ void LogViewer::OnPaint(Canvas* canvas)
|
|||
}
|
||||
}
|
||||
|
||||
void LogViewer::OnMouseWheel(const Point& pos, EInputKey key)
|
||||
bool LogViewer::OnMouseWheel(const Point& pos, EInputKey key)
|
||||
{
|
||||
if (key == IK_MouseWheelUp)
|
||||
{
|
||||
|
@ -222,6 +222,7 @@ void LogViewer::OnMouseWheel(const Point& pos, EInputKey key)
|
|||
{
|
||||
ScrollDown(4);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void LogViewer::OnKeyDown(EInputKey key)
|
||||
|
|
|
@ -43,7 +43,7 @@ public:
|
|||
protected:
|
||||
void OnPaintFrame(Canvas* canvas) override;
|
||||
void OnPaint(Canvas* canvas) override;
|
||||
void OnMouseWheel(const Point& pos, EInputKey key) override;
|
||||
bool OnMouseWheel(const Point& pos, EInputKey key) override;
|
||||
void OnKeyDown(EInputKey key) override;
|
||||
void OnGeometryChanged() override;
|
||||
|
||||
|
|
|
@ -2,6 +2,12 @@
|
|||
#include <zwidget/core/resourcedata.h>
|
||||
#include "filesystem.h"
|
||||
#include "printf.h"
|
||||
#include "zstring.h"
|
||||
|
||||
#ifdef _WIN32
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <windows.h>
|
||||
#endif
|
||||
|
||||
FResourceFile* WidgetResources;
|
||||
|
||||
|
@ -17,11 +23,11 @@ void CloseWidgetResources()
|
|||
if (WidgetResources) delete WidgetResources;
|
||||
}
|
||||
|
||||
static std::vector<uint8_t> LoadFile(const std::string& name)
|
||||
static std::vector<uint8_t> LoadFile(const char* name)
|
||||
{
|
||||
auto lump = WidgetResources->FindEntry(name.c_str());
|
||||
auto lump = WidgetResources->FindEntry(name);
|
||||
if (lump == -1)
|
||||
I_FatalError("Unable to find %s", name.c_str());
|
||||
I_FatalError("Unable to find %s", name);
|
||||
|
||||
auto reader = WidgetResources->GetEntryReader(lump, FileSys::READER_SHARED);
|
||||
std::vector<uint8_t> buffer(reader.GetLength());
|
||||
|
@ -29,6 +35,19 @@ static std::vector<uint8_t> LoadFile(const std::string& name)
|
|||
return buffer;
|
||||
}
|
||||
|
||||
// this must be allowed to fail without throwing.
|
||||
static std::vector<uint8_t> LoadDiskFile(const char* name)
|
||||
{
|
||||
std::vector<uint8_t> buffer;
|
||||
FileSys::FileReader lump;
|
||||
if (lump.OpenFile(name))
|
||||
{
|
||||
buffer.resize(lump.GetLength());
|
||||
lump.Read(buffer.data(), buffer.size());
|
||||
}
|
||||
return buffer;
|
||||
}
|
||||
|
||||
// This interface will later require some significant redesign.
|
||||
std::vector<SingleFontData> LoadWidgetFontData(const std::string& name)
|
||||
{
|
||||
|
@ -36,24 +55,34 @@ std::vector<SingleFontData> LoadWidgetFontData(const std::string& name)
|
|||
if (!stricmp(name.c_str(), "notosans"))
|
||||
{
|
||||
returnv.resize(3);
|
||||
returnv[2].fontdata = LoadFile("widgets/noto/notosans-regular.ttf");
|
||||
returnv[0].fontdata = LoadFile("widgets/noto/notosansarmenian-regular.ttf");
|
||||
returnv[1].fontdata = LoadFile("widgets/noto/notosansgeorgian-regular.ttf");
|
||||
returnv[0].ranges.push_back(std::make_pair(0x531, 0x58f));
|
||||
returnv[1].ranges.push_back(std::make_pair(0x10a0, 0x10ff));
|
||||
returnv[1].ranges.push_back(std::make_pair(0x1c90, 0x1cbf));
|
||||
returnv[1].ranges.push_back(std::make_pair(0x2d00, 0x2d2f));
|
||||
// todo: load system CJK fonts here
|
||||
returnv[0].fontdata = LoadFile("widgets/noto/notosans-regular.ttf");
|
||||
returnv[1].fontdata = LoadFile("widgets/noto/notosansarmenian-regular.ttf");
|
||||
returnv[2].fontdata = LoadFile("widgets/noto/notosansgeorgian-regular.ttf");
|
||||
#ifdef _WIN32
|
||||
wchar_t wbuffer[256];
|
||||
if (GetWindowsDirectoryW(wbuffer, 256))
|
||||
{
|
||||
returnv.resize(5);
|
||||
FString windir(wbuffer);
|
||||
returnv[3].fontdata = LoadDiskFile((windir + "/fonts/yugothm.ttc").GetChars());
|
||||
returnv[3].language = "ja";
|
||||
returnv[4].fontdata = LoadDiskFile((windir + "/fonts/malgun.ttf").GetChars());
|
||||
returnv[4].language = "ko";
|
||||
// Don't fail if these cannot be found
|
||||
if (returnv[4].fontdata.size() == 0) returnv.erase(returnv.begin() + 4);
|
||||
if (returnv[3].fontdata.size() == 0) returnv.erase(returnv.begin() + 3);
|
||||
}
|
||||
#endif
|
||||
return returnv;
|
||||
|
||||
}
|
||||
returnv.resize(1);
|
||||
std::string fn = "widgets/font/" +name + ".ttf";
|
||||
returnv[0].fontdata = LoadFile(fn);
|
||||
returnv[0].fontdata = LoadFile(fn.c_str());
|
||||
return returnv;
|
||||
}
|
||||
|
||||
std::vector<uint8_t> LoadWidgetImageData(const std::string& name)
|
||||
std::vector<uint8_t> LoadWidgetData(const std::string& name)
|
||||
{
|
||||
return LoadFile(name);
|
||||
return LoadFile(name.c_str());
|
||||
}
|
||||
|
|
|
@ -903,12 +903,6 @@ static TArray<GrpEntry> SetupGame()
|
|||
//
|
||||
//==========================================================================
|
||||
|
||||
void InitLanguages()
|
||||
{
|
||||
GStrings.LoadStrings(language);
|
||||
}
|
||||
|
||||
|
||||
void CreateStatusBar()
|
||||
{
|
||||
auto stbarclass = PClass::FindClass(globalCutscenes.StatusBarClass);
|
||||
|
@ -1034,6 +1028,12 @@ int RunGame()
|
|||
LoadHexFont(wad); // load hex font early so we have it during startup.
|
||||
InitWidgetResources(wad);
|
||||
|
||||
// load strings for picker window.
|
||||
FileSys::FileSystem lang_fs;
|
||||
std::vector<std::string> base_fn = { wad };
|
||||
lang_fs.InitMultipleFiles(base_fn);
|
||||
GStrings.LoadStrings(lang_fs, language);
|
||||
|
||||
// Set up the console before anything else so that it can receive text.
|
||||
C_InitConsole(1024, 768, true);
|
||||
|
||||
|
@ -1107,7 +1107,7 @@ int RunGame()
|
|||
G_ReadConfig(currentGame.GetChars());
|
||||
|
||||
V_InitFontColors();
|
||||
InitLanguages();
|
||||
GStrings.LoadStrings(fileSystem, language);
|
||||
|
||||
|
||||
CheckCPUID(&CPU);
|
||||
|
|
34
source/launcher/launcherbanner.cpp
Normal file
34
source/launcher/launcherbanner.cpp
Normal file
|
@ -0,0 +1,34 @@
|
|||
|
||||
#include "launcherbanner.h"
|
||||
#include "gstrings.h"
|
||||
#include "version.h"
|
||||
#include <zwidget/widgets/imagebox/imagebox.h>
|
||||
#include <zwidget/widgets/textlabel/textlabel.h>
|
||||
#include <zwidget/core/image.h>
|
||||
|
||||
LauncherBanner::LauncherBanner(Widget* parent) : Widget(parent)
|
||||
{
|
||||
Logo = new ImageBox(this);
|
||||
VersionLabel = new TextLabel(this);
|
||||
VersionLabel->SetTextAlignment(TextLabelAlignment::Right);
|
||||
|
||||
Logo->SetImage(Image::LoadResource("widgets/banner.png"));
|
||||
}
|
||||
|
||||
void LauncherBanner::UpdateLanguage()
|
||||
{
|
||||
FString versionText = GStrings("PICKER_VERSION");
|
||||
versionText.Substitute("%s", GetVersionString());
|
||||
VersionLabel->SetText(versionText.GetChars());
|
||||
}
|
||||
|
||||
double LauncherBanner::GetPreferredHeight() const
|
||||
{
|
||||
return Logo->GetPreferredHeight();
|
||||
}
|
||||
|
||||
void LauncherBanner::OnGeometryChanged()
|
||||
{
|
||||
Logo->SetFrameGeometry(0.0, 0.0, GetWidth(), Logo->GetPreferredHeight());
|
||||
VersionLabel->SetFrameGeometry(20.0, GetHeight() - 10.0 - VersionLabel->GetPreferredHeight(), GetWidth() - 40.0, VersionLabel->GetPreferredHeight());
|
||||
}
|
21
source/launcher/launcherbanner.h
Normal file
21
source/launcher/launcherbanner.h
Normal file
|
@ -0,0 +1,21 @@
|
|||
#pragma once
|
||||
|
||||
#include <zwidget/core/widget.h>
|
||||
|
||||
class ImageBox;
|
||||
class TextLabel;
|
||||
|
||||
class LauncherBanner : public Widget
|
||||
{
|
||||
public:
|
||||
LauncherBanner(Widget* parent);
|
||||
void UpdateLanguage();
|
||||
|
||||
double GetPreferredHeight() const;
|
||||
|
||||
private:
|
||||
void OnGeometryChanged() override;
|
||||
|
||||
ImageBox* Logo = nullptr;
|
||||
TextLabel* VersionLabel = nullptr;
|
||||
};
|
46
source/launcher/launcherbuttonbar.cpp
Normal file
46
source/launcher/launcherbuttonbar.cpp
Normal file
|
@ -0,0 +1,46 @@
|
|||
|
||||
#include "launcherbuttonbar.h"
|
||||
#include "launcherwindow.h"
|
||||
#include "gstrings.h"
|
||||
#include <zwidget/widgets/pushbutton/pushbutton.h>
|
||||
|
||||
LauncherButtonbar::LauncherButtonbar(LauncherWindow* parent) : Widget(parent)
|
||||
{
|
||||
PlayButton = new PushButton(this);
|
||||
ExitButton = new PushButton(this);
|
||||
|
||||
PlayButton->OnClick = [=]() { OnPlayButtonClicked(); };
|
||||
ExitButton->OnClick = [=]() { OnExitButtonClicked(); };
|
||||
}
|
||||
|
||||
void LauncherButtonbar::UpdateLanguage()
|
||||
{
|
||||
PlayButton->SetText(GStrings("PICKER_PLAY"));
|
||||
ExitButton->SetText(GStrings("PICKER_EXIT"));
|
||||
}
|
||||
|
||||
double LauncherButtonbar::GetPreferredHeight() const
|
||||
{
|
||||
return 20.0 + std::max(PlayButton->GetPreferredHeight(), ExitButton->GetPreferredHeight());
|
||||
}
|
||||
|
||||
void LauncherButtonbar::OnGeometryChanged()
|
||||
{
|
||||
PlayButton->SetFrameGeometry(20.0, 10.0, 120.0, PlayButton->GetPreferredHeight());
|
||||
ExitButton->SetFrameGeometry(GetWidth() - 20.0 - 120.0, 10.0, 120.0, PlayButton->GetPreferredHeight());
|
||||
}
|
||||
|
||||
void LauncherButtonbar::OnPlayButtonClicked()
|
||||
{
|
||||
GetLauncher()->Start();
|
||||
}
|
||||
|
||||
void LauncherButtonbar::OnExitButtonClicked()
|
||||
{
|
||||
GetLauncher()->Exit();
|
||||
}
|
||||
|
||||
LauncherWindow* LauncherButtonbar::GetLauncher() const
|
||||
{
|
||||
return static_cast<LauncherWindow*>(Parent());
|
||||
}
|
25
source/launcher/launcherbuttonbar.h
Normal file
25
source/launcher/launcherbuttonbar.h
Normal file
|
@ -0,0 +1,25 @@
|
|||
#pragma once
|
||||
|
||||
#include <zwidget/core/widget.h>
|
||||
|
||||
class LauncherWindow;
|
||||
class PushButton;
|
||||
|
||||
class LauncherButtonbar : public Widget
|
||||
{
|
||||
public:
|
||||
LauncherButtonbar(LauncherWindow* parent);
|
||||
void UpdateLanguage();
|
||||
|
||||
double GetPreferredHeight() const;
|
||||
|
||||
private:
|
||||
void OnGeometryChanged() override;
|
||||
void OnPlayButtonClicked();
|
||||
void OnExitButtonClicked();
|
||||
|
||||
LauncherWindow* GetLauncher() const;
|
||||
|
||||
PushButton* PlayButton = nullptr;
|
||||
PushButton* ExitButton = nullptr;
|
||||
};
|
|
@ -1,28 +1,21 @@
|
|||
#include "launcherwindow.h"
|
||||
#include "launcherbanner.h"
|
||||
#include "launcherbuttonbar.h"
|
||||
#include "playgamepage.h"
|
||||
#include "settingspage.h"
|
||||
#include "v_video.h"
|
||||
#include "version.h"
|
||||
#include "i_interface.h"
|
||||
#include <zwidget/core/image.h>
|
||||
#include "gstrings.h"
|
||||
#include <zwidget/core/resourcedata.h>
|
||||
#include <zwidget/window/window.h>
|
||||
#include <zwidget/widgets/textedit/textedit.h>
|
||||
#include <zwidget/widgets/listview/listview.h>
|
||||
#include <zwidget/widgets/imagebox/imagebox.h>
|
||||
#include <zwidget/widgets/textlabel/textlabel.h>
|
||||
#include <zwidget/widgets/pushbutton/pushbutton.h>
|
||||
#include <zwidget/widgets/checkboxlabel/checkboxlabel.h>
|
||||
#include <zwidget/widgets/lineedit/lineedit.h>
|
||||
|
||||
#ifdef RENDER_BACKENDS
|
||||
EXTERN_CVAR(Int, vid_preferbackend);
|
||||
#endif
|
||||
|
||||
EXTERN_CVAR(Bool, queryiwad);
|
||||
#include <zwidget/widgets/tabwidget/tabwidget.h>
|
||||
|
||||
int LauncherWindow::ExecModal(WadStuff* wads, int numwads, int defaultiwad, int* autoloadflags)
|
||||
{
|
||||
Size screenSize = GetScreenSize();
|
||||
double windowWidth = 615.0;
|
||||
double windowHeight = 668.0;
|
||||
double windowHeight = 700.0;
|
||||
|
||||
auto launcher = std::make_unique<LauncherWindow>(wads, numwads, defaultiwad, autoloadflags);
|
||||
launcher->SetFrameGeometry((screenSize.width - windowWidth) * 0.5, (screenSize.height - windowHeight) * 0.5, windowWidth, windowHeight);
|
||||
|
@ -33,7 +26,7 @@ int LauncherWindow::ExecModal(WadStuff* wads, int numwads, int defaultiwad, int*
|
|||
return launcher->ExecResult;
|
||||
}
|
||||
|
||||
LauncherWindow::LauncherWindow(WadStuff* wads, int numwads, int defaultiwad, int* autoloadflags) : Widget(nullptr, WidgetType::Window), AutoloadFlags(autoloadflags)
|
||||
LauncherWindow::LauncherWindow(WadStuff* wads, int numwads, int defaultiwad, int* autoloadflags) : Widget(nullptr, WidgetType::Window)
|
||||
{
|
||||
SetWindowBackground(Colorf::fromRgba8(51, 51, 51));
|
||||
SetWindowBorderColor(Colorf::fromRgba8(51, 51, 51));
|
||||
|
@ -41,242 +34,67 @@ LauncherWindow::LauncherWindow(WadStuff* wads, int numwads, int defaultiwad, int
|
|||
SetWindowCaptionTextColor(Colorf::fromRgba8(226, 223, 219));
|
||||
SetWindowTitle(GAMENAME);
|
||||
|
||||
Logo = new ImageBox(this);
|
||||
WelcomeLabel = new TextLabel(this);
|
||||
VersionLabel = new TextLabel(this);
|
||||
SelectLabel = new TextLabel(this);
|
||||
GeneralLabel = new TextLabel(this);
|
||||
//ExtrasLabel = new TextLabel(this);
|
||||
ParametersLabel = new TextLabel(this);
|
||||
FullscreenCheckbox = new CheckboxLabel(this);
|
||||
DisableAutoloadCheckbox = new CheckboxLabel(this);
|
||||
DontAskAgainCheckbox = new CheckboxLabel(this);
|
||||
/*
|
||||
LightsCheckbox = new CheckboxLabel(this);
|
||||
BrightmapsCheckbox = new CheckboxLabel(this);
|
||||
WidescreenCheckbox = new CheckboxLabel(this);
|
||||
*/
|
||||
PlayButton = new PushButton(this);
|
||||
ExitButton = new PushButton(this);
|
||||
GamesList = new ListView(this);
|
||||
ParametersEdit = new LineEdit(this);
|
||||
Banner = new LauncherBanner(this);
|
||||
Pages = new TabWidget(this);
|
||||
Buttonbar = new LauncherButtonbar(this);
|
||||
|
||||
PlayButton->OnClick = [=]() { OnPlayButtonClicked(); };
|
||||
ExitButton->OnClick = [=]() { OnExitButtonClicked(); };
|
||||
GamesList->OnActivated = [=]() { OnGamesListActivated(); };
|
||||
PlayGame = new PlayGamePage(this, wads, numwads, defaultiwad);
|
||||
Settings = new SettingsPage(this, autoloadflags);
|
||||
|
||||
SelectLabel->SetText("Select which game file to run.");
|
||||
PlayButton->SetText("Play Game");
|
||||
ExitButton->SetText("Exit");
|
||||
Pages->AddTab(PlayGame, "Play");
|
||||
Pages->AddTab(Settings, "Settings");
|
||||
|
||||
GeneralLabel->SetText("General");
|
||||
//ExtrasLabel->SetText("Extra Graphics");
|
||||
FullscreenCheckbox->SetText("Fullscreen");
|
||||
DisableAutoloadCheckbox->SetText("Disable autoload");
|
||||
DontAskAgainCheckbox->SetText("Don't ask me again");
|
||||
/*
|
||||
LightsCheckbox->SetText("Lights");
|
||||
BrightmapsCheckbox->SetText("Brightmaps");
|
||||
WidescreenCheckbox->SetText("Widescreen");
|
||||
*/
|
||||
ParametersLabel->SetText("Additional Parameters:");
|
||||
UpdateLanguage();
|
||||
|
||||
#ifdef RENDER_BACKENDS
|
||||
BackendLabel = new TextLabel(this);
|
||||
VulkanCheckbox = new CheckboxLabel(this);
|
||||
OpenGLCheckbox = new CheckboxLabel(this);
|
||||
GLESCheckbox = new CheckboxLabel(this);
|
||||
BackendLabel->SetText("Render Backend");
|
||||
VulkanCheckbox->SetText("Vulkan");
|
||||
OpenGLCheckbox->SetText("OpenGL");
|
||||
GLESCheckbox->SetText("OpenGL ES");
|
||||
#endif
|
||||
|
||||
FString welcomeText, versionText;
|
||||
welcomeText.Format("Welcome to %s!", GAMENAME);
|
||||
versionText.Format("Version %s.", GetVersionString());
|
||||
WelcomeLabel->SetText(welcomeText.GetChars());
|
||||
VersionLabel->SetText(versionText.GetChars());
|
||||
|
||||
FullscreenCheckbox->SetChecked(vid_fullscreen);
|
||||
DontAskAgainCheckbox->SetChecked(!queryiwad);
|
||||
|
||||
int flags = *autoloadflags;
|
||||
DisableAutoloadCheckbox->SetChecked(flags & 1);
|
||||
/*
|
||||
LightsCheckbox->SetChecked(flags & 2);
|
||||
BrightmapsCheckbox->SetChecked(flags & 4);
|
||||
WidescreenCheckbox->SetChecked(flags & 8);
|
||||
*/
|
||||
|
||||
#ifdef RENDER_BACKENDS
|
||||
OpenGLCheckbox->SetRadioStyle(true);
|
||||
VulkanCheckbox->SetRadioStyle(true);
|
||||
GLESCheckbox->SetRadioStyle(true);
|
||||
OpenGLCheckbox->FuncChanged = [this](bool on) { if (on) { VulkanCheckbox->SetChecked(false); GLESCheckbox->SetChecked(false); }};
|
||||
VulkanCheckbox->FuncChanged = [this](bool on) { if (on) { OpenGLCheckbox->SetChecked(false); GLESCheckbox->SetChecked(false); }};
|
||||
GLESCheckbox->FuncChanged = [this](bool on) { if (on) { VulkanCheckbox->SetChecked(false); OpenGLCheckbox->SetChecked(false); }};
|
||||
switch (vid_preferbackend)
|
||||
{
|
||||
case 0:
|
||||
OpenGLCheckbox->SetChecked(true);
|
||||
break;
|
||||
case 1:
|
||||
VulkanCheckbox->SetChecked(true);
|
||||
break;
|
||||
case 2:
|
||||
GLESCheckbox->SetChecked(true);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
for (int i = 0; i < numwads; i++)
|
||||
{
|
||||
const char* filepart = strrchr(wads[i].Path.GetChars(), '/');
|
||||
if (filepart == NULL)
|
||||
filepart = wads[i].Path.GetChars();
|
||||
else
|
||||
filepart++;
|
||||
|
||||
FString work;
|
||||
if (*filepart) work.Format("%s (%s)", wads[i].Name.GetChars(), filepart);
|
||||
else work = wads[i].Name.GetChars();
|
||||
|
||||
GamesList->AddItem(work.GetChars());
|
||||
Pages->SetCurrentWidget(PlayGame);
|
||||
PlayGame->SetFocus();
|
||||
}
|
||||
|
||||
if (defaultiwad >= 0 && defaultiwad < numwads)
|
||||
void LauncherWindow::Start()
|
||||
{
|
||||
GamesList->SetSelectedItem(defaultiwad);
|
||||
GamesList->ScrollToItem(defaultiwad);
|
||||
}
|
||||
Settings->Save();
|
||||
|
||||
Logo->SetImage(Image::LoadResource("widgets/banner.png"));
|
||||
|
||||
GamesList->SetFocus();
|
||||
}
|
||||
|
||||
void LauncherWindow::OnClose()
|
||||
{
|
||||
OnExitButtonClicked();
|
||||
}
|
||||
|
||||
void LauncherWindow::OnPlayButtonClicked()
|
||||
{
|
||||
vid_fullscreen = FullscreenCheckbox->GetChecked();
|
||||
queryiwad = !DontAskAgainCheckbox->GetChecked();
|
||||
|
||||
int flags = 0;
|
||||
if (DisableAutoloadCheckbox->GetChecked()) flags |= 1;
|
||||
/*
|
||||
if (LightsCheckbox->GetChecked()) flags |= 2;
|
||||
if (BrightmapsCheckbox->GetChecked()) flags |= 4;
|
||||
if (WidescreenCheckbox->GetChecked()) flags |= 8;
|
||||
*/
|
||||
*AutoloadFlags = flags;
|
||||
|
||||
#ifdef RENDER_BACKENDS
|
||||
int v = 1;
|
||||
if (OpenGLCheckbox->GetChecked()) v = 0;
|
||||
else if (VulkanCheckbox->GetChecked()) v = 1;
|
||||
else if (GLESCheckbox->GetChecked()) v = 2;
|
||||
if (v != vid_preferbackend) vid_preferbackend = v;
|
||||
#endif
|
||||
|
||||
std::string extraargs = ParametersEdit->GetText();
|
||||
std::string extraargs = PlayGame->GetExtraArgs();
|
||||
if (!extraargs.empty())
|
||||
{
|
||||
// To do: restart the process like the cocoa backend is doing?
|
||||
}
|
||||
|
||||
ExecResult = GamesList->GetSelectedItem();
|
||||
ExecResult = PlayGame->GetSelectedGame();
|
||||
DisplayWindow::ExitLoop();
|
||||
}
|
||||
|
||||
void LauncherWindow::OnExitButtonClicked()
|
||||
void LauncherWindow::Exit()
|
||||
{
|
||||
ExecResult = -1;
|
||||
DisplayWindow::ExitLoop();
|
||||
}
|
||||
|
||||
void LauncherWindow::OnGamesListActivated()
|
||||
void LauncherWindow::UpdateLanguage()
|
||||
{
|
||||
OnPlayButtonClicked();
|
||||
Pages->SetTabText(PlayGame, GStrings("PICKER_TAB_PLAY"));
|
||||
Pages->SetTabText(Settings, GStrings("OPTMNU_TITLE"));
|
||||
Banner->UpdateLanguage();
|
||||
PlayGame->UpdateLanguage();
|
||||
Settings->UpdateLanguage();
|
||||
Buttonbar->UpdateLanguage();
|
||||
}
|
||||
|
||||
void LauncherWindow::OnClose()
|
||||
{
|
||||
Exit();
|
||||
}
|
||||
|
||||
void LauncherWindow::OnGeometryChanged()
|
||||
{
|
||||
double y = 0.0;
|
||||
double top = 0.0;
|
||||
double bottom = GetHeight();
|
||||
|
||||
Logo->SetFrameGeometry(0.0, y, GetWidth(), Logo->GetPreferredHeight());
|
||||
y += Logo->GetPreferredHeight();
|
||||
Banner->SetFrameGeometry(0.0, top, GetWidth(), Banner->GetPreferredHeight());
|
||||
top += Banner->GetPreferredHeight();
|
||||
|
||||
y += 10.0;
|
||||
bottom -= Buttonbar->GetPreferredHeight();
|
||||
Buttonbar->SetFrameGeometry(0.0, bottom, GetWidth(), Buttonbar->GetPreferredHeight());
|
||||
|
||||
WelcomeLabel->SetFrameGeometry(20.0, y, GetWidth() - 40.0, WelcomeLabel->GetPreferredHeight());
|
||||
y += WelcomeLabel->GetPreferredHeight();
|
||||
|
||||
VersionLabel->SetFrameGeometry(20.0, y, GetWidth() - 40.0, VersionLabel->GetPreferredHeight());
|
||||
y += VersionLabel->GetPreferredHeight();
|
||||
|
||||
y += 10.0;
|
||||
|
||||
SelectLabel->SetFrameGeometry(20.0, y, GetWidth() - 40.0, SelectLabel->GetPreferredHeight());
|
||||
y += SelectLabel->GetPreferredHeight();
|
||||
|
||||
double listViewTop = y + 10.0;
|
||||
|
||||
y = GetHeight() - 15.0 - PlayButton->GetPreferredHeight();
|
||||
PlayButton->SetFrameGeometry(20.0, y, 120.0, PlayButton->GetPreferredHeight());
|
||||
ExitButton->SetFrameGeometry(GetWidth() - 20.0 - 120.0, y, 120.0, PlayButton->GetPreferredHeight());
|
||||
|
||||
y -= 20.0;
|
||||
|
||||
double editHeight = 24.0;
|
||||
y -= editHeight;
|
||||
ParametersEdit->SetFrameGeometry(20.0, y, GetWidth() - 40.0, editHeight);
|
||||
y -= 5.0;
|
||||
|
||||
double labelHeight = ParametersLabel->GetPreferredHeight();
|
||||
y -= labelHeight;
|
||||
ParametersLabel->SetFrameGeometry(20.0, y, GetWidth() - 40.0, labelHeight);
|
||||
y -= 10.0;
|
||||
|
||||
double panelWidth = 150.0;
|
||||
|
||||
#ifdef RENDER_BACKENDS
|
||||
auto yy = y;
|
||||
y -= GLESCheckbox->GetPreferredHeight();
|
||||
double x = GetWidth() - 20.0 - panelWidth;
|
||||
GLESCheckbox->SetFrameGeometry(x, y, 190.0, GLESCheckbox->GetPreferredHeight());
|
||||
|
||||
y -= OpenGLCheckbox->GetPreferredHeight();
|
||||
OpenGLCheckbox->SetFrameGeometry(x, y, 190.0, OpenGLCheckbox->GetPreferredHeight());
|
||||
|
||||
y -= VulkanCheckbox->GetPreferredHeight();
|
||||
VulkanCheckbox->SetFrameGeometry(x, y, 190.0, VulkanCheckbox->GetPreferredHeight());
|
||||
|
||||
y -= BackendLabel->GetPreferredHeight();
|
||||
BackendLabel->SetFrameGeometry(x, y, 190.0, BackendLabel->GetPreferredHeight());
|
||||
|
||||
y = yy;
|
||||
#endif
|
||||
y -= DontAskAgainCheckbox->GetPreferredHeight();
|
||||
DontAskAgainCheckbox->SetFrameGeometry(20.0, y, 190.0, DontAskAgainCheckbox->GetPreferredHeight());
|
||||
//WidescreenCheckbox->SetFrameGeometry(GetWidth() - 20.0 - panelWidth, y, panelWidth, WidescreenCheckbox->GetPreferredHeight());
|
||||
|
||||
y -= DisableAutoloadCheckbox->GetPreferredHeight();
|
||||
DisableAutoloadCheckbox->SetFrameGeometry(20.0, y, 190.0, DisableAutoloadCheckbox->GetPreferredHeight());
|
||||
//BrightmapsCheckbox->SetFrameGeometry(GetWidth() - 20.0 - panelWidth, y, panelWidth, BrightmapsCheckbox->GetPreferredHeight());
|
||||
|
||||
y -= FullscreenCheckbox->GetPreferredHeight();
|
||||
FullscreenCheckbox->SetFrameGeometry(20.0, y, 190.0, FullscreenCheckbox->GetPreferredHeight());
|
||||
//LightsCheckbox->SetFrameGeometry(GetWidth() - 20.0 - panelWidth, y, panelWidth, LightsCheckbox->GetPreferredHeight());
|
||||
|
||||
y -= GeneralLabel->GetPreferredHeight();
|
||||
GeneralLabel->SetFrameGeometry(20.0, y, 190.0, GeneralLabel->GetPreferredHeight());
|
||||
//ExtrasLabel->SetFrameGeometry(GetWidth() - 20.0 - panelWidth, y, panelWidth, ExtrasLabel->GetPreferredHeight());
|
||||
|
||||
double listViewBottom = y - 10.0;
|
||||
GamesList->SetFrameGeometry(20.0, listViewTop, GetWidth() - 40.0, std::max(listViewBottom - listViewTop, 0.0));
|
||||
Pages->SetFrameGeometry(0.0, top, GetWidth(), std::max(bottom - top, 0.0));
|
||||
}
|
||||
|
|
|
@ -1,16 +1,14 @@
|
|||
#pragma once
|
||||
|
||||
#include <zwidget/core/widget.h>
|
||||
#include "tarray.h"
|
||||
#include "zstring.h"
|
||||
|
||||
|
||||
#define RENDER_BACKENDS
|
||||
|
||||
class ImageBox;
|
||||
class TextLabel;
|
||||
class CheckboxLabel;
|
||||
class PushButton;
|
||||
class ListView;
|
||||
class LineEdit;
|
||||
class TabWidget;
|
||||
class LauncherBanner;
|
||||
class LauncherButtonbar;
|
||||
class PlayGamePage;
|
||||
class SettingsPage;
|
||||
struct WadStuff;
|
||||
|
||||
class LauncherWindow : public Widget
|
||||
|
@ -19,39 +17,21 @@ public:
|
|||
static int ExecModal(WadStuff* wads, int numwads, int defaultiwad, int* autoloadflags);
|
||||
|
||||
LauncherWindow(WadStuff* wads, int numwads, int defaultiwad, int* autoloadflags);
|
||||
void UpdateLanguage();
|
||||
|
||||
void Start();
|
||||
void Exit();
|
||||
|
||||
private:
|
||||
void OnPlayButtonClicked();
|
||||
void OnExitButtonClicked();
|
||||
void OnGamesListActivated();
|
||||
|
||||
void OnClose() override;
|
||||
void OnGeometryChanged() override;
|
||||
|
||||
ImageBox* Logo = nullptr;
|
||||
TextLabel* WelcomeLabel = nullptr;
|
||||
TextLabel* VersionLabel = nullptr;
|
||||
TextLabel* SelectLabel = nullptr;
|
||||
TextLabel* GeneralLabel = nullptr;
|
||||
TextLabel* ExtrasLabel = nullptr;
|
||||
TextLabel* ParametersLabel = nullptr;
|
||||
CheckboxLabel* FullscreenCheckbox = nullptr;
|
||||
CheckboxLabel* DisableAutoloadCheckbox = nullptr;
|
||||
CheckboxLabel* DontAskAgainCheckbox = nullptr;
|
||||
CheckboxLabel* LightsCheckbox = nullptr;
|
||||
CheckboxLabel* BrightmapsCheckbox = nullptr;
|
||||
CheckboxLabel* WidescreenCheckbox = nullptr;
|
||||
#ifdef RENDER_BACKENDS
|
||||
TextLabel* BackendLabel = nullptr;
|
||||
CheckboxLabel* VulkanCheckbox = nullptr;
|
||||
CheckboxLabel* OpenGLCheckbox = nullptr;
|
||||
CheckboxLabel* GLESCheckbox = nullptr;
|
||||
#endif
|
||||
PushButton* PlayButton = nullptr;
|
||||
PushButton* ExitButton = nullptr;
|
||||
ListView* GamesList = nullptr;
|
||||
LineEdit* ParametersEdit = nullptr;
|
||||
LauncherBanner* Banner = nullptr;
|
||||
TabWidget* Pages = nullptr;
|
||||
LauncherButtonbar* Buttonbar = nullptr;
|
||||
|
||||
PlayGamePage* PlayGame = nullptr;
|
||||
SettingsPage* Settings = nullptr;
|
||||
|
||||
int* AutoloadFlags = nullptr;
|
||||
int ExecResult = -1;
|
||||
};
|
||||
|
|
100
source/launcher/playgamepage.cpp
Normal file
100
source/launcher/playgamepage.cpp
Normal file
|
@ -0,0 +1,100 @@
|
|||
|
||||
#include "playgamepage.h"
|
||||
#include "launcherwindow.h"
|
||||
#include "i_interface.h"
|
||||
#include "gstrings.h"
|
||||
#include "version.h"
|
||||
#include <zwidget/widgets/textlabel/textlabel.h>
|
||||
#include <zwidget/widgets/listview/listview.h>
|
||||
#include <zwidget/widgets/lineedit/lineedit.h>
|
||||
|
||||
PlayGamePage::PlayGamePage(LauncherWindow* launcher, WadStuff* wads, int numwads, int defaultiwad) : Widget(nullptr), Launcher(launcher)
|
||||
{
|
||||
WelcomeLabel = new TextLabel(this);
|
||||
SelectLabel = new TextLabel(this);
|
||||
ParametersLabel = new TextLabel(this);
|
||||
GamesList = new ListView(this);
|
||||
ParametersEdit = new LineEdit(this);
|
||||
|
||||
for (int i = 0; i < numwads; i++)
|
||||
{
|
||||
const char* filepart = strrchr(wads[i].Path.GetChars(), '/');
|
||||
if (filepart == NULL)
|
||||
filepart = wads[i].Path.GetChars();
|
||||
else
|
||||
filepart++;
|
||||
|
||||
FString work;
|
||||
if (*filepart) work.Format("%s (%s)", wads[i].Name.GetChars(), filepart);
|
||||
else work = wads[i].Name.GetChars();
|
||||
|
||||
GamesList->AddItem(work.GetChars());
|
||||
}
|
||||
|
||||
if (defaultiwad >= 0 && defaultiwad < numwads)
|
||||
{
|
||||
GamesList->SetSelectedItem(defaultiwad);
|
||||
GamesList->ScrollToItem(defaultiwad);
|
||||
}
|
||||
|
||||
GamesList->OnActivated = [=]() { OnGamesListActivated(); };
|
||||
}
|
||||
|
||||
std::string PlayGamePage::GetExtraArgs()
|
||||
{
|
||||
return ParametersEdit->GetText();
|
||||
}
|
||||
|
||||
int PlayGamePage::GetSelectedGame()
|
||||
{
|
||||
return GamesList->GetSelectedItem();
|
||||
}
|
||||
|
||||
void PlayGamePage::UpdateLanguage()
|
||||
{
|
||||
SelectLabel->SetText(GStrings("PICKER_SELECT"));
|
||||
ParametersLabel->SetText(GStrings("PICKER_ADDPARM"));
|
||||
FString welcomeText = GStrings("PICKER_WELCOME");
|
||||
welcomeText.Substitute("%s", GAMENAME);
|
||||
WelcomeLabel->SetText(welcomeText.GetChars());
|
||||
}
|
||||
|
||||
void PlayGamePage::OnGamesListActivated()
|
||||
{
|
||||
Launcher->Start();
|
||||
}
|
||||
|
||||
void PlayGamePage::OnSetFocus()
|
||||
{
|
||||
GamesList->SetFocus();
|
||||
}
|
||||
|
||||
void PlayGamePage::OnGeometryChanged()
|
||||
{
|
||||
double y = 10.0;
|
||||
|
||||
WelcomeLabel->SetFrameGeometry(0.0, y, GetWidth(), WelcomeLabel->GetPreferredHeight());
|
||||
y += WelcomeLabel->GetPreferredHeight();
|
||||
|
||||
y += 10.0;
|
||||
|
||||
SelectLabel->SetFrameGeometry(0.0, y, GetWidth(), SelectLabel->GetPreferredHeight());
|
||||
y += SelectLabel->GetPreferredHeight();
|
||||
|
||||
double listViewTop = y;
|
||||
|
||||
y = GetHeight() - 10.0;
|
||||
|
||||
double editHeight = 24.0;
|
||||
y -= editHeight;
|
||||
ParametersEdit->SetFrameGeometry(0.0, y, GetWidth(), editHeight);
|
||||
y -= 5.0;
|
||||
|
||||
double labelHeight = ParametersLabel->GetPreferredHeight();
|
||||
y -= labelHeight;
|
||||
ParametersLabel->SetFrameGeometry(0.0, y, GetWidth(), labelHeight);
|
||||
y -= 10.0;
|
||||
|
||||
double listViewBottom = y - 10.0;
|
||||
GamesList->SetFrameGeometry(0.0, listViewTop, GetWidth(), std::max(listViewBottom - listViewTop, 0.0));
|
||||
}
|
32
source/launcher/playgamepage.h
Normal file
32
source/launcher/playgamepage.h
Normal file
|
@ -0,0 +1,32 @@
|
|||
#pragma once
|
||||
|
||||
#include <zwidget/core/widget.h>
|
||||
|
||||
class LauncherWindow;
|
||||
class TextLabel;
|
||||
class ListView;
|
||||
class LineEdit;
|
||||
struct WadStuff;
|
||||
|
||||
class PlayGamePage : public Widget
|
||||
{
|
||||
public:
|
||||
PlayGamePage(LauncherWindow* launcher, WadStuff* wads, int numwads, int defaultiwad);
|
||||
void UpdateLanguage();
|
||||
|
||||
std::string GetExtraArgs();
|
||||
int GetSelectedGame();
|
||||
|
||||
private:
|
||||
void OnGeometryChanged() override;
|
||||
void OnSetFocus() override;
|
||||
void OnGamesListActivated();
|
||||
|
||||
LauncherWindow* Launcher = nullptr;
|
||||
|
||||
TextLabel* WelcomeLabel = nullptr;
|
||||
TextLabel* SelectLabel = nullptr;
|
||||
TextLabel* ParametersLabel = nullptr;
|
||||
ListView* GamesList = nullptr;
|
||||
LineEdit* ParametersEdit = nullptr;
|
||||
};
|
215
source/launcher/settingspage.cpp
Normal file
215
source/launcher/settingspage.cpp
Normal file
|
@ -0,0 +1,215 @@
|
|||
|
||||
#include "settingspage.h"
|
||||
#include "launcherwindow.h"
|
||||
#include "gstrings.h"
|
||||
#include "i_interface.h"
|
||||
#include "v_video.h"
|
||||
#include <zwidget/core/resourcedata.h>
|
||||
#include <zwidget/widgets/listview/listview.h>
|
||||
#include <zwidget/widgets/textlabel/textlabel.h>
|
||||
#include <zwidget/widgets/checkboxlabel/checkboxlabel.h>
|
||||
|
||||
#ifdef RENDER_BACKENDS
|
||||
EXTERN_CVAR(Int, vid_preferbackend);
|
||||
#endif
|
||||
|
||||
EXTERN_CVAR(String, language)
|
||||
EXTERN_CVAR(Bool, queryiwad);
|
||||
|
||||
SettingsPage::SettingsPage(LauncherWindow* launcher, int* autoloadflags) : Widget(nullptr), Launcher(launcher), AutoloadFlags(autoloadflags)
|
||||
{
|
||||
LangLabel = new TextLabel(this);
|
||||
GeneralLabel = new TextLabel(this);
|
||||
//ExtrasLabel = new TextLabel(this);
|
||||
FullscreenCheckbox = new CheckboxLabel(this);
|
||||
DisableAutoloadCheckbox = new CheckboxLabel(this);
|
||||
DontAskAgainCheckbox = new CheckboxLabel(this);
|
||||
/*
|
||||
LightsCheckbox = new CheckboxLabel(this);
|
||||
BrightmapsCheckbox = new CheckboxLabel(this);
|
||||
WidescreenCheckbox = new CheckboxLabel(this);
|
||||
*/
|
||||
|
||||
#ifdef RENDER_BACKENDS
|
||||
BackendLabel = new TextLabel(this);
|
||||
VulkanCheckbox = new CheckboxLabel(this);
|
||||
OpenGLCheckbox = new CheckboxLabel(this);
|
||||
GLESCheckbox = new CheckboxLabel(this);
|
||||
#endif
|
||||
|
||||
FullscreenCheckbox->SetChecked(vid_fullscreen);
|
||||
DontAskAgainCheckbox->SetChecked(!queryiwad);
|
||||
|
||||
int flags = *autoloadflags;
|
||||
DisableAutoloadCheckbox->SetChecked(flags & 1);
|
||||
/*
|
||||
LightsCheckbox->SetChecked(flags & 2);
|
||||
BrightmapsCheckbox->SetChecked(flags & 4);
|
||||
WidescreenCheckbox->SetChecked(flags & 8);
|
||||
*/
|
||||
|
||||
#ifdef RENDER_BACKENDS
|
||||
OpenGLCheckbox->SetRadioStyle(true);
|
||||
VulkanCheckbox->SetRadioStyle(true);
|
||||
GLESCheckbox->SetRadioStyle(true);
|
||||
OpenGLCheckbox->FuncChanged = [this](bool on) { if (on) { VulkanCheckbox->SetChecked(false); GLESCheckbox->SetChecked(false); }};
|
||||
VulkanCheckbox->FuncChanged = [this](bool on) { if (on) { OpenGLCheckbox->SetChecked(false); GLESCheckbox->SetChecked(false); }};
|
||||
GLESCheckbox->FuncChanged = [this](bool on) { if (on) { VulkanCheckbox->SetChecked(false); OpenGLCheckbox->SetChecked(false); }};
|
||||
switch (vid_preferbackend)
|
||||
{
|
||||
case 0:
|
||||
OpenGLCheckbox->SetChecked(true);
|
||||
break;
|
||||
case 1:
|
||||
VulkanCheckbox->SetChecked(true);
|
||||
break;
|
||||
case 2:
|
||||
GLESCheckbox->SetChecked(true);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
LangList = new ListView(this);
|
||||
|
||||
try
|
||||
{
|
||||
auto data = LoadWidgetData("menudef.txt");
|
||||
FScanner sc;
|
||||
sc.OpenMem("menudef.txt", data);
|
||||
while (sc.GetString())
|
||||
{
|
||||
if (sc.Compare("OptionString"))
|
||||
{
|
||||
sc.MustGetString();
|
||||
if (sc.Compare("LanguageOptions"))
|
||||
{
|
||||
sc.MustGetStringName("{");
|
||||
while (!sc.CheckString("}"))
|
||||
{
|
||||
sc.MustGetString();
|
||||
FString iso = sc.String;
|
||||
sc.MustGetStringName(",");
|
||||
sc.MustGetString();
|
||||
if(iso.CompareNoCase("auto"))
|
||||
languages.push_back(std::make_pair(iso, FString(sc.String)));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (const std::exception& ex)
|
||||
{
|
||||
hideLanguage = true;
|
||||
}
|
||||
int i = 0;
|
||||
for (auto& l : languages)
|
||||
{
|
||||
LangList->AddItem(l.second.GetChars());
|
||||
if (!l.first.CompareNoCase(::language))
|
||||
LangList->SetSelectedItem(i);
|
||||
i++;
|
||||
}
|
||||
|
||||
LangList->OnChanged = [=](int i) { OnLanguageChanged(i); };
|
||||
}
|
||||
|
||||
void SettingsPage::Save()
|
||||
{
|
||||
vid_fullscreen = FullscreenCheckbox->GetChecked();
|
||||
queryiwad = !DontAskAgainCheckbox->GetChecked();
|
||||
|
||||
int flags = 0;
|
||||
if (DisableAutoloadCheckbox->GetChecked()) flags |= 1;
|
||||
/*
|
||||
if (LightsCheckbox->GetChecked()) flags |= 2;
|
||||
if (BrightmapsCheckbox->GetChecked()) flags |= 4;
|
||||
if (WidescreenCheckbox->GetChecked()) flags |= 8;
|
||||
*/
|
||||
*AutoloadFlags = flags;
|
||||
|
||||
#ifdef RENDER_BACKENDS
|
||||
int v = 1;
|
||||
if (OpenGLCheckbox->GetChecked()) v = 0;
|
||||
else if (VulkanCheckbox->GetChecked()) v = 1;
|
||||
else if (GLESCheckbox->GetChecked()) v = 2;
|
||||
if (v != vid_preferbackend) vid_preferbackend = v;
|
||||
#endif
|
||||
}
|
||||
|
||||
void SettingsPage::UpdateLanguage()
|
||||
{
|
||||
LangLabel->SetText(GStrings("OPTMNU_LANGUAGE"));
|
||||
GeneralLabel->SetText(GStrings("PICKER_GENERAL"));
|
||||
// ExtrasLabel->SetText(GStrings("PICKER_EXTRA"));
|
||||
FullscreenCheckbox->SetText(GStrings("PICKER_FULLSCREEN"));
|
||||
DisableAutoloadCheckbox->SetText(GStrings("PICKER_NOAUTOLOAD"));
|
||||
DontAskAgainCheckbox->SetText(GStrings("PICKER_DONTASK"));
|
||||
/*
|
||||
LightsCheckbox->SetText(GStrings("PICKER_LIGHTS"));
|
||||
BrightmapsCheckbox->SetText(GStrings("PICKER_BRIGHTMAPS"));
|
||||
WidescreenCheckbox->SetText(GStrings("PICKER_WIDESCREEN"));
|
||||
*/
|
||||
|
||||
#ifdef RENDER_BACKENDS
|
||||
BackendLabel->SetText(GStrings("PICKER_PREFERBACKEND"));
|
||||
VulkanCheckbox->SetText(GStrings("OPTVAL_VULKAN"));
|
||||
OpenGLCheckbox->SetText(GStrings("OPTVAL_OPENGL"));
|
||||
GLESCheckbox->SetText(GStrings("OPTVAL_OPENGLES"));
|
||||
#endif
|
||||
}
|
||||
|
||||
void SettingsPage::OnLanguageChanged(int i)
|
||||
{
|
||||
::language = languages[i].first.GetChars();
|
||||
GStrings.UpdateLanguage(::language); // CVAR callbacks are not active yet.
|
||||
UpdateLanguage();
|
||||
Update();
|
||||
Launcher->UpdateLanguage();
|
||||
}
|
||||
|
||||
void SettingsPage::OnGeometryChanged()
|
||||
{
|
||||
double panelWidth = 200.0;
|
||||
double y = 0.0;
|
||||
double w = GetWidth();
|
||||
double h = GetHeight();
|
||||
|
||||
GeneralLabel->SetFrameGeometry(0.0, y, 190.0, GeneralLabel->GetPreferredHeight());
|
||||
//ExtrasLabel->SetFrameGeometry(w - panelWidth, y, panelWidth, ExtrasLabel->GetPreferredHeight());
|
||||
y += GeneralLabel->GetPreferredHeight();
|
||||
|
||||
FullscreenCheckbox->SetFrameGeometry(0.0, y, 190.0, FullscreenCheckbox->GetPreferredHeight());
|
||||
//LightsCheckbox->SetFrameGeometry(w - panelWidth, y, panelWidth, LightsCheckbox->GetPreferredHeight());
|
||||
y += FullscreenCheckbox->GetPreferredHeight();
|
||||
|
||||
DisableAutoloadCheckbox->SetFrameGeometry(0.0, y, 190.0, DisableAutoloadCheckbox->GetPreferredHeight());
|
||||
//BrightmapsCheckbox->SetFrameGeometry(w - panelWidth, y, panelWidth, BrightmapsCheckbox->GetPreferredHeight());
|
||||
y += DisableAutoloadCheckbox->GetPreferredHeight();
|
||||
|
||||
DontAskAgainCheckbox->SetFrameGeometry(0.0, y, 190.0, DontAskAgainCheckbox->GetPreferredHeight());
|
||||
//WidescreenCheckbox->SetFrameGeometry(w - panelWidth, y, panelWidth, WidescreenCheckbox->GetPreferredHeight());
|
||||
y += DontAskAgainCheckbox->GetPreferredHeight();
|
||||
|
||||
#ifdef RENDER_BACKENDS
|
||||
double x = GetWidth() - 20.0 - panelWidth;
|
||||
y = 0;
|
||||
BackendLabel->SetFrameGeometry(x, y, 190.0, BackendLabel->GetPreferredHeight());
|
||||
y += BackendLabel->GetPreferredHeight();
|
||||
|
||||
VulkanCheckbox->SetFrameGeometry(x, y, 190.0, VulkanCheckbox->GetPreferredHeight());
|
||||
y += VulkanCheckbox->GetPreferredHeight();
|
||||
|
||||
OpenGLCheckbox->SetFrameGeometry(x, y, 190.0, OpenGLCheckbox->GetPreferredHeight());
|
||||
y += OpenGLCheckbox->GetPreferredHeight();
|
||||
|
||||
GLESCheckbox->SetFrameGeometry(x, y, 190.0, GLESCheckbox->GetPreferredHeight());
|
||||
y += GLESCheckbox->GetPreferredHeight();
|
||||
#endif
|
||||
|
||||
if (!hideLanguage)
|
||||
{
|
||||
LangLabel->SetFrameGeometry(0.0, y, w, LangLabel->GetPreferredHeight());
|
||||
y += LangLabel->GetPreferredHeight();
|
||||
LangList->SetFrameGeometry(0.0, y, w, std::max(h - y, 0.0));
|
||||
}
|
||||
}
|
47
source/launcher/settingspage.h
Normal file
47
source/launcher/settingspage.h
Normal file
|
@ -0,0 +1,47 @@
|
|||
#pragma once
|
||||
|
||||
#include <zwidget/core/widget.h>
|
||||
|
||||
#define RENDER_BACKENDS
|
||||
|
||||
class LauncherWindow;
|
||||
class TextLabel;
|
||||
class CheckboxLabel;
|
||||
class ListView;
|
||||
|
||||
class SettingsPage : public Widget
|
||||
{
|
||||
public:
|
||||
SettingsPage(LauncherWindow* launcher, int* autoloadflags);
|
||||
void UpdateLanguage();
|
||||
|
||||
void Save();
|
||||
|
||||
private:
|
||||
void OnLanguageChanged(int i);
|
||||
void OnGeometryChanged() override;
|
||||
|
||||
LauncherWindow* Launcher = nullptr;
|
||||
|
||||
TextLabel* LangLabel = nullptr;
|
||||
TextLabel* GeneralLabel = nullptr;
|
||||
TextLabel* ExtrasLabel = nullptr;
|
||||
CheckboxLabel* FullscreenCheckbox = nullptr;
|
||||
CheckboxLabel* DisableAutoloadCheckbox = nullptr;
|
||||
CheckboxLabel* DontAskAgainCheckbox = nullptr;
|
||||
CheckboxLabel* LightsCheckbox = nullptr;
|
||||
CheckboxLabel* BrightmapsCheckbox = nullptr;
|
||||
CheckboxLabel* WidescreenCheckbox = nullptr;
|
||||
#ifdef RENDER_BACKENDS
|
||||
TextLabel* BackendLabel = nullptr;
|
||||
CheckboxLabel* VulkanCheckbox = nullptr;
|
||||
CheckboxLabel* OpenGLCheckbox = nullptr;
|
||||
CheckboxLabel* GLESCheckbox = nullptr;
|
||||
#endif
|
||||
ListView* LangList = nullptr;
|
||||
|
||||
int* AutoloadFlags = nullptr;
|
||||
|
||||
TArray<std::pair<FString, FString>> languages;
|
||||
bool hideLanguage = false;
|
||||
};
|
|
@ -601,7 +601,7 @@ DMX (Without AM voice bug),ADLVLMODEL_DMX_FIXED,,,,DMX (Bez AM hlasové chyby),D
|
|||
Apogee (Without AM voice bug),ADLVLMODEL_APOGEE_FIXED,,,,Apogee (Bez AM hlasové chyby),Apogee (uden AM-stemmefejl),Apogee (Ohne AM-Stimmenfehler),,Apogee (Sen cimo de AM-voĉo),Apogee (Sin bug de voz AM),,Apogee (ilman AM-äänivikaa),Apogee (avec bug canaux AM),Apogee (AM hanghiba nélkül),,Apogee(AMボイスバグ無し),,Apogee (zonder AM voice bug),Apogee (uten AM-stemmefeil),Apogee (bez głosowego błędu AM),Apogee (sem bug de voz de AM),,Apogee (Fără probleme în AM),Apogee (Без ошибки АМ),,Apogee (utan AM-röstfel),Apogee (AM ses hatası olmadan),Apogee (Без помилки АМ),
|
||||
IBM Audio Library Interface,ADLVLMODEL_AIL,,,,,,,,IBM Aŭdbibiloteka Interfaco,,,,,IBM Hang Könyvtár Interfész,,,,,,Interfejs Biblioteki Dźwięków IBM,Interface de Biblioteca de Áudio IBM,,Interfață de Bibliotecă IBM,IBM AIL,,IBM Audio Library Interface (gränssnitt för ljudbibliotek),IBM Ses Kitaplığı Arayüzü,,
|
||||
HMI Sound Operating System,ADLVLMODEL_HMI,,,,,,,,HMI Sonoperaciumo,,,,,HMI Hang Operációs Rendszer,,,,,,System Operacyjny Dźwięków HMI,Sistema Operacional de Som HMI,,Sistem Sonor HMI,HMI SOS,,HMI-ljud Operativsystem,HMI Ses İşletim Sistemi,,
|
||||
"HMI SOS (Old, with bugs)",ADLVLMODEL_HMIOLD,,,,"HMI SOS (Starý, s chybami)","HMI SOS (gammelt, med fejl)","HMI SOS (alt, mit Fehlern)",,"HMI SOS (Malnova, kun cimoj)","HMI SOS (Viejo, con bugs)",,"HMI SOS (vanha, vikainen)",HMI SOS (vieux et buggé),"HMI SOS (Régi, bugokkal)",,"HMI SOS(旧式,バグ含む)",,"HMI SOS (oud, met bugs)","HMI SOS (gammel, med feil)","HMI SOS (Stare, z błędami)","SOS HMI (antigo, com bugs)",,"HMI SOS (Vechi, cu probleme)",HMI SOS (Старый вариант с ошибками),,"HMI SOS (gammalt, med fel)","HMI SOS (Eski, hatalı)",HMI SOS (Старий варіант з помилками),
|
||||
"HMI SOS (Old, with bugs)",ADLVLMODEL_HMIOLD,,,,"HMI SOS (Starý, s chybami)","HMI SOS (gammelt, med fejl)","HMI SOS (alt, mit Fehlern)",,"HMI SOS (Malnova, kun cimoj)","HMI SOS (Viejo, con bugs)",,"HMI SOS (vanha, vikainen)",HMI SOS (vieux et buggé),"HMI SOS (Régi, bugokkal)",,HMI SOS(旧式、バグ含む),,"HMI SOS (oud, met bugs)","HMI SOS (gammel, med feil)","HMI SOS (Stare, z błędami)","SOS HMI (antigo, com bugs)",,"HMI SOS (Vechi, cu probleme)",HMI SOS (Старый вариант с ошибками),,"HMI SOS (gammalt, med fel)","HMI SOS (Eski, hatalı)",HMI SOS (Старий варіант з помилками),
|
||||
Unlimited,OPTVAL_UNLIMITED,,,,Neomezené,Ubegrænset,Unlimitiert,,Senlima,Ilimitado,,Rajoittamaton,Illimité,Végtelen,Illimitato,無制限,무제한,Onbeperkt,Ubegrenset,Nieskończone,Sem limites,,Nelimitat,Без ограничений,Бескрајно,Obegränsad,Sınırsız,Безмежно,
|
||||
256K,OPTVAL_256K,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
512K,OPTVAL_512K,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
|
@ -657,10 +657,10 @@ Enable hires textures,GLTEXMNU_ENABLEHIRES,,,,Povolit textury ve vysokém rozli
|
|||
High Quality Resize mode,GLTEXMNU_HQRESIZE,,,,Režim zvětšovače textur,Tilstand til ændring af størrelse i høj kvalitet,Texturskalierungsmodus,,Reĝimo de Altdistingivigo-Skalilo,Modo de ajuste de alta calidad,,Korkealaatuinen kuvakoon muutostapa,Mise à l'échelle haute résolution,Magas minőségű újraméretező mód,Modalità resize alta qualità,高品質リサイズ モード,고퀄리티 리사이즈 모드,Textuurschaalmodus,Høy kvalitet Endre størrelse-modus,Tryb Wysokiej Jakości Zmieniania Rozmiaru,Modo de Redimensionamento de Alta Qualidade,,Mod Redimensionare de Înaltă Calitate,Режим высококачественного масштабирования текстур,Промена величине високог квалитета мод,Högkvalitativt storleksanpassningsläge,Yüksek Kalite Yeniden Boyutlandırma modu,Масштабування текстур,
|
||||
High Quality Resize multiplier,GLTEXMNU_HQRESIZEMULT,,,,Faktor zvětšovače textur,Multiplikator for ændring af størrelse i høj kvalitet,Texturskaluerungsfaktor,,Obligilo de Altdistingivigo-Skalilo,Multiplicador de ajuste de alta calidad,,Korkealaatuisen kuvakokomuutoksen kerroin,Multiplicateur de mise à l'échelle,Magas minőségű újraméretezés szorzó,Moltiplicatore resize alta qualità,高品質リサイズ乗数,고퀄리티 리사이징 승수,Textuurschaalfactor,Multiplikator for størrelsesendring av høy kvalitet,Mnożnik Wysokiej Jakośći Rozmiaru,Multiplicador de Redimensionamento de Alta Qualidade,,Factor de Scalare,Множитель высококачественного масштабирования,Промена величине високог квалитета мултипликатор,Multiplikator för storleksändring av hög kvalitet,Yüksek Kalite Yeniden Boyutlandırma çarpanı,Множник масштабування,
|
||||
This mode requires %d times more video memory,GLTEXMNU_HQRESIZEWARN,,,,Tento režim potřebuje %dkrát více paměti,Denne tilstand kræver %d gange mere videohukommelse,Dieser Modus benötigt das %d-fache an Videospeicher,Αυτή η λειτουργία χρειάζετε %d περισσότερες φορές μνήμη βίντεο,Ĉi tiu reĝimo bezonas %d-oble pli da ekranmemoro.,Este modo requiere %d veces más memoria de vídeo,,Tämä tila vaatii %d kertaa enemmän videomuistia,Ce mode nécessite %d fois plus de mémoire vidéo,Ez a mód a jelenlegi videó memória %d-szeresét igényli,Questa modalità richiede %d volte la memoria video,このモードでは %d 倍以上のビデオメモリが必要です!,이 설정은 비디오 메모리의 %d 배가 더 필요합니다.,Deze modus vereist %d keer meer videogeheugen.,Denne modusen krever %d ganger mer videominne,Ten tryb wymaga %d razy więcej pamięci wideo,Este modo precisa de %d vezes mais memória de vídeo,,Acest mod necesită de %d mai multă memorie video,Данный режим требует в %d раз больше видеопамяти,Овај мод тражи %d пута више видео меморије,Det här läget kräver %d gånger mer videominne,Bu mod %d kat daha fazla video belleği gerektirir,Цьому типу потрібно в %d більше відеопам'яті,
|
||||
Resize textures,GLTEXMNU_RESIZETEX,,,,Škálovat textury,Ændre størrelse på teksturer,Texturen skalieren,,Regrandigi teksturojn,Ajustar texturas,,Muuta pintakuviointien kokoa,Mise à l'échelle textures,Textúrák újraméretezése,Resize delle texture,リサイズ テクスチャー,텍스쳐 리사이징,Texturen schalen,Endre størrelse på teksturer,Zmień rozmiar tekstur,Redimensionar texturas,,Redimensionare texturi,Масштабирование текстур,Промена величине текстура,Ändra storlek på texturer,Dokuları yeniden boyutlandırma,Масштабування текстур,
|
||||
Resize sprites,GLTEXMNU_RESIZESPR,,,,Škálovat sprity,Ændre størrelse på sprites,Sprites skalieren,,Regrandigi mov-rastrumojn,Ajustar sprites,,Muuta spritejen kokoa,Mise à l'échelle sprites,Sprite-ok újraméretezése,Resize degli sprite,リサイズ スプライト,스프라이트 리사이징,Sprites schalen,Endre størrelse på sprites,Zmień rozmiar sprite'ów,Redimensionar sprites,,Redimensionare sprite-uri,Масштабирование спрайтов,Промена величине спрајтова,Ändra storlek på sprites,Sprite'ları yeniden boyutlandırma,Масштабування спрайтів,
|
||||
Resize fonts,GLTEXMNU_RESIZEFNT,,,,Škálovat fonty,Ændre størrelse på skrifttyper,Zeichensätze skalieren,,Regrandigi tiparojn,Ajustar fuentes,,Muuta kirjasinten kokoa,Mise à l'échelle texte,Betűk újraméretezése,Resize dei font,リサイズ フォント,폰트 리사이징,Lettertypen schalen,Endre størrelse på skrifter,Zmień rozmiar czcionek,Redimensionar fontes,,Redimensionare fonturi,Масштабирование шрифтов,Промена величине фонта,Ändra storlek på teckensnitt,Yazı tiplerini yeniden boyutlandırma,Масштабування шрифтів,
|
||||
Resize model skins,GLTEXMNU_RESIZESKN,,,,Škálovat skiny modelů,Ændre størrelsen på modelskins,,,Regrandigi haŭtojn de modeloj,Ajustar texturas de modelo,,Muuta ulkoasujen kokoa,Mise à l'échelle des skins des modèles 3D,Model fazon újraméretezése,Ridimensiona skin modello,リサイズ モデルスキン,,,Endre størrelse på modellskinn,Zmień rozmiar modelu,Redimensionar skins de modelos,,Redimensionare modele,Масштабирование обликов моделей,,Ändra storlek på modellskinn,Model kaplamalarını yeniden boyutlandırma,Масштабування текстур моделей,
|
||||
Resize textures,GLTEXMNU_RESIZETEX,,,,Škálovat textury,Ændre størrelse på teksturer,Texturen skalieren,,Regrandigi teksturojn,Ajustar texturas,,Muuta pintakuviointien kokoa,Mise à l'échelle textures,Textúrák újraméretezése,Resize delle texture,テクスチャー類のリサイズ,텍스쳐 리사이징,Texturen schalen,Endre størrelse på teksturer,Zmień rozmiar tekstur,Redimensionar texturas,,Redimensionare texturi,Масштабирование текстур,Промена величине текстура,Ändra storlek på texturer,Dokuları yeniden boyutlandırma,Масштабування текстур,
|
||||
Resize sprites,GLTEXMNU_RESIZESPR,,,,Škálovat sprity,Ændre størrelse på sprites,Sprites skalieren,,Regrandigi mov-rastrumojn,Ajustar sprites,,Muuta spritejen kokoa,Mise à l'échelle sprites,Sprite-ok újraméretezése,Resize degli sprite,スプライト類のリサイズ,스프라이트 리사이징,Sprites schalen,Endre størrelse på sprites,Zmień rozmiar sprite'ów,Redimensionar sprites,,Redimensionare sprite-uri,Масштабирование спрайтов,Промена величине спрајтова,Ändra storlek på sprites,Sprite'ları yeniden boyutlandırma,Масштабування спрайтів,
|
||||
Resize fonts,GLTEXMNU_RESIZEFNT,,,,Škálovat fonty,Ændre størrelse på skrifttyper,Zeichensätze skalieren,,Regrandigi tiparojn,Ajustar fuentes,,Muuta kirjasinten kokoa,Mise à l'échelle texte,Betűk újraméretezése,Resize dei font,フォント類のリサイズ,폰트 리사이징,Lettertypen schalen,Endre størrelse på skrifter,Zmień rozmiar czcionek,Redimensionar fontes,,Redimensionare fonturi,Масштабирование шрифтов,Промена величине фонта,Ändra storlek på teckensnitt,Yazı tiplerini yeniden boyutlandırma,Масштабування шрифтів,
|
||||
Resize model skins,GLTEXMNU_RESIZESKN,,,,Škálovat skiny modelů,Ændre størrelsen på modelskins,,,Regrandigi haŭtojn de modeloj,Ajustar texturas de modelo,,Muuta ulkoasujen kokoa,Mise à l'échelle des skins des modèles 3D,Model fazon újraméretezése,Ridimensiona skin modello,モデルスキン類のリサイズ,,,Endre størrelse på modellskinn,Zmień rozmiar modelu,Redimensionar skins de modelos,,Redimensionare modele,Масштабирование обликов моделей,,Ändra storlek på modellskinn,Model kaplamalarını yeniden boyutlandırma,Масштабування текстур моделей,
|
||||
Precache GL textures,GLTEXMNU_PRECACHETEX,,,,Přednačíst GL textury do cache,Precache GL-teksturer,GL Texturen zwischenspeichern,,Antaŭkaŝmemorigi GL-teksturojn,Precaché de texturas GL,,Kirjoita GL-pintakuvioinnit välimuistiin,Mise en cache des textures,Előcachelt GL textúrák,Precache texture GL,プリキャッシュGLテクスチャー,지엘 텍스쳐 미리 캐싱함,Precache GL texturen,Precache GL-teksturer,Tekstury GL pamięci podręcznej,Precachê de texturas GL,,Preîncărcarcă texturile GL,Кэшировать GL-текстуры,Прикеширане GL текстуре,Precache GL-texturer,GL dokularını önceden önbelleğe alma,Кешувати GL-текстури,
|
||||
Video Mode,VIDMNU_TITLE,,,,Režim displeje,Videotilstand,Videomodus,Λειτουργία βίντεο,Video-reĝimo,Modos de vídeo,Modos de video,Videotila,Mode Vidéo,Videó mód,Modalità video,ビデオ調整,화면 설정,Videomodus,Videomodus,Tryb Wideo,Modo de vídeo,,Mod Video,Настройки видеорежима,Видео мод,Videoläge,Video Modu,Налаштування відеорежиму,
|
||||
Scaled (Nearest),OPTVAL_SCALENEAREST,,,,Škálován (nejbližší),Skaleret (Nærmeste),Skaliert (nächster Nachbar),,Skalita (Plej proksime),Escalado (Lo más cerca),,Skaalattu (läheisin),Mis à l'échelle (Proche Voisin),Átméretezett (Közeli),Scalato (più vicino),スケーリング (最寄り),확대 (가깝게),Geschaald (Dichtstbijzijnd),Skalert (nærmeste),Przeskalowany (Najbliższy),Redimensionado (mais próximo),Redimensionado (Apróximado),Redimensionat (Cel mai aproape),Масштабировать (ближайшее),Скалиран (најближи),Skalad (närmast),Ölçeklendirilmiş (En Yakın),Збільшення (ближнє),
|
||||
|
@ -843,7 +843,7 @@ Simple options menu,OPTMNU_SIMPLEON,,,,Zjednodušená nastavení,Enkel menu med
|
|||
Browse Game Config,OPTMNU_OPENCONFIG,,,,Procházet konfigurační soubory,Gennemse spilkonfiguration,Konfigurationsdatei anzeigen,,Foliumi agordojn de ludo,Abrir carpeta de configuración de juego,,Selaa pelin asetuksia,Parcourir configuration,Játék konfiguráció böngészése,Apri le Configurazioni di Gioco,ゲームコンフィグ参照,게임 환경설정 찾아보기,Door gameconfiguratie bladeren,Bla gjennom spillkonfigurasjon,Przeglądaj Ustawienia Gry,Abrir pasta de configuração de jogo,,Caută Configurația Jocului,Открыть файл настроек игры,,Bläddra i spelkonfigurationen,Oyun Yapılandırmasına Gözat,Перегляд налаштувань гри,
|
||||
Browse Screenshots,OPTMNU_OPENSCREENSHOTS,,,,Procházet snímky obrazovky,Gennemse skærmbilleder,Screenshots anzeigen,,Foliumi ekrankopiojn,Abrir carpeta de capturas de pantalla,,Selaa kuvakaappauksia,Parcourir les captures d'écran,Képernyőképek böngészése,Apri gli Screenshot,クリーンショット参照,스크린샷 찾아보기,Door schermafbeeldingen bladeren,Bla gjennom skjermbilder,Przeglądaj Zrzuty Ekranu,Abrir pasta de capturas de tela,,Caută Capturi de Ecran,Просмотр снимков экрана,,Bläddra bland skärmdumpar,Ekran Görüntülerine Gözat,Перегляд скріншотів,
|
||||
Browse Saved Games,OPTMNU_OPENSAVES,,,,Procházet uložené hry,Gennemse gemte spil,Spielstände anzeigen,,Foliumi konservitajn ludadojn,Abrir carpeta de partidas guardadas,,Selaa tallennettuja pelejä,Parcourir sauvegardes,Elmentett játékok böngészése,Apri i Giochi Salvati,セーブしたゲーム参照,저장된 게임 찾아보기,Door opgeslagen games bladeren,Bla gjennom lagrede spill,Przeglądaj Zapisy Gry,Abrir pasta de jogos salvos,,Caută Salvări,Просмотр сохранённых игр,,Bläddra bland sparade spel,Kaydedilen Oyunlara Gözat,Перегляд збережень ігр,
|
||||
Swap mouse buttons,MOUSEMNU_SWAPBUTTONS,,,,Prohodit tlačítka myši,Udskift museknapper,Maustasten vertauschen,,Permuti musbutonojn,Alternar botones de ratón,,Vaihda hiiren painikkeita,Permuter les boutons de la souris,Egérgombok felcserélése,Inverti i comandi del mouse,マウスボタンを反転,마우스 버튼 바꾸기,Muisknoppen verwisselen,Bytt museknapper,Zamień Przyciski Myszki,Trocar botões do mouse,,Schimbă Butoanele Mouse-ului între Ele,Поменять местами кнопки мыши,,Byta musknappar,Fare düğmelerini değiştirme,Поміняти місцями кнопки миші,
|
||||
Swap mouse buttons,MOUSEMNU_SWAPBUTTONS,,,,Prohodit tlačítka myši,Udskift museknapper,Maustasten vertauschen,,Permuti musbutonojn,Alternar botones de ratón,,Vaihda hiiren painikkeita,Permuter les boutons de la souris,Egérgombok felcserélése,Inverti i comandi del mouse,マウスボタンを反転,마우스 버튼 바꾸기,Muisknoppen verwisselen,Bytt museknapper,Zamień Przyciski Myszki,Trocar botões do mouse,,Schimbă Butoanele Mouse-ului între Ele,Поменять местами кнопки мыши,Замените дугмад миша,Byta musknappar,Fare düğmelerini değiştirme,Поміняти місцями кнопки миші,
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
Only modified,OPTVAL_ONLYMODIFIED,,,,Pouze upravené,Kun ændret,Nur modfizierte,,Nur modifitaj,Solo modificados,,Vain muunneltu,Modifié seulement,Csak módosított,Solo modificato,モディファイのみ,수정된 것만,Alleen gewijzigd,Bare endret,Tylko zmodyfikowane,Somente modificado,,Numai modificat,Только изменённый,Само модификовано,Endast ändrat,Yalnızca değiştirilmiş,Тільки в модифікаціях,
|
||||
Unknown,TXT_UNKNOWN,,,,Neznámé,Ukendt,Unbekannt,Άχνωστο,Nekonata,Desconocido,,Tuntematon,Inconnue,Ismeretlen,Sconosciuto,不明,알 수 없음,Onbekend,Ukjent,Nieznane,Desconhecido,,Necunoscut,Неизвестно,Непознат,Okänd,Bilinmiyor,Невідомо,
|
||||
|
@ -851,11 +851,27 @@ HUD,OPTVAL_HUD,,,,,,,,,,,,ATH,,,,,,,,,,,Отображение информац
|
|||
Automap,OPTVAL_AUTOMAP,,,,Automapa,,,,Aŭtomata mapo,Automapa,,,Carte,Auto-térkép,Automappa,オートマップ,오토맵,,,Automapa,Automapa,,Hartă Computerizată,Автокарта,Аутомап,,,Автокарта,
|
||||
HUD + Automap,OPTVAL_HUDANDMAP,,,,HUD + Automapa,,,,HUD + Aŭtomata mapo,HUD + Automapa,,,ATH + Carte,HUD + Auto-térkép,HUD + Automappa,HUD+オートマップ,HUD + 오토맵,,,HUD + Automapa,HUD + Automapa,,Interfață + Hartă Computerizată,Интерфейс + автокарта,HUD + Аутомап,,,Інтерфейс + Автокарта,
|
||||
This savegame needs these files,TXT_SAVEGAMENEEDS,,,,Uložená hra potřebuje tyto soubory,Dette savegame har brug for disse filer,Dieser Spielstand benötigt die folgenden Dateien,Το αρχείο αποθήκευσης χριάζετε αυτά τα αρχεία,Ĉi tiu konservita ludo bezonas ĉi tiujn dosierojn,Esta partida guardada necesita los siguientes archivos,,Tämä pelitallenne tarvitsee nämä tiedostot,Cette sauvegarde nécessite les fichiers suivants:,Ehhez a mentéshez a következő fájlok kellenek:,Questo salvataggio ha bisogno di questi file,このセーブデータには 必要なファイルがある,이 저장 된 게임은 해당 파일이 필요합니다.,Dit spel heeft de volgende bestanden nodig,Dette lagringsspillet trenger disse filene,Ten zapis gry potrzebuje tych plików,Este jogo salvo precisa destes arquivos,Este jogo guardado precisa destes arquivos,Acest joc salvat necesită următoarele fișiere,Данное сохранение требует следующие файлы,Овој сачуваној игри требају ови фајлови,Detta sparande behöver dessa filer,Bu kayıt oyunu şu dosyalara ihtiyaç duyar,Цій грі потрібні такі файли,
|
||||
Multiplayer Options,OPTMNU_MULTIPLAYER,,,,Multiplayer,Multiplayer-indstillinger,Mehrspieleroptionen,,Agordoj de la plurludanta reĝimo,Opciones del multijugador,,,,,,,,Multiplayer Opties,Alternativer for flerspiller,,Opções de multijogador,,,Настройки сетевой игры,,Alternativ för flera spelare,Çok Oyunculu Seçenekler,Параметри багатокористувацької гри,
|
||||
Input Options,OPTMNU_INPUT,,,,Vstupní zařízení,Input-indstillinger,Eingabeoptionen,,Enig-agordoj,Opciones de entrada (input),,,,,,,,In1voeropties,Alternativer for inndata,,Opções de entrada,,,Настройки ввода,,Inmatningsalternativ,Girdi Seçenekleri,Параметри введення,
|
||||
System Options,OPTMNU_SYSTEM,,,,Systém,Systemindstillinger,Systemoptionen,,Agordoj de la sistemo,Opciones del sistema,,,,,,,,Systeem Opties,Systemalternativer,,Opções de sistema,,,Настройки системы,,Systemalternativ,Sistem Seçenekleri,Системні налаштування,
|
||||
Light Options,OPTMNU_LIGHT,,,,Osvětlení,Lysindstillinger,Beleuchtungsoptionen,,Lum-agordoj,Opciones de iluminación,,,,,,,,Licht Opties,Alternativer for lys,,Opções de iluminação,,,Настройки освещения,,Alternativ för ljus,Işık Seçenekleri,Параметри освітлення,
|
||||
Sprite Options,OPTMNU_SPRITE,,,,Sprity,Sprite-indstillinger,Spriteoptionen,,Agordoj de la mov-rastrumoj,Opciones de los «sprites»,,,,,,,,Sprite-opties,Sprite-alternativer,,Opções de sprite,,,Настройки спрайтов,,Alternativ för sprite,Sprite Seçenekleri,Параметри спрайтів,
|
||||
Coronas,GLPREFMNU_CORONAS,,,,Záře,Coronas,,,Lum-ampoloj,Focos de luz,,,,,,,,Corona's,Koronaer,,,,,Лампы,,Koronor,Koronalar,Корони,
|
||||
Appearance,DSPLYMNU_APPEARANCE,,,,Vzhled,Udseende,Spieldarstellung,,Aspekto,Apariencia,,,,,,,,Uiterlijk,Utseende,,Aparência,,,Внешность,,Utseende,Görünüş,Зовнішній вигляд,
|
||||
Advanced Display Options,DSPLYMNU_ADVANCED,,,,Grafika (pokročilé),Avancerede visningsindstillinger,Erweiterte Anzeigeoptionen,,Altnivelaj ekran-agordoj,Opciones avanzadas de visualización,,,,,,,,Geavanceerde Weergave Opties,Avanserte visningsalternativer,,Opções avançadas de vídeo,,,Расширенные настройки экрана,,Avancerade visningsalternativ,Gelişmiş Görüntüleme Seçenekleri,Додаткові параметри відображення,
|
||||
Multiplayer Options,OPTMNU_MULTIPLAYER,,,,Multiplayer,Multiplayer-indstillinger,Mehrspieleroptionen,,Agordoj de la plurludanta reĝimo,Opciones del multijugador,,,Options multijoueurs,,,マルチプレイ オプション,,Multiplayer Opties,Alternativer for flerspiller,Opcje Trybu Wielu Graczy,Opções de multijogador,,,Настройки сетевой игры,Опције за више играча,Alternativ för flera spelare,Çok Oyunculu Seçenekler,Параметри багатокористувацької гри,
|
||||
Input Options,OPTMNU_INPUT,,,,Vstupní zařízení,Input-indstillinger,Eingabeoptionen,,Enig-agordoj,Opciones de entrada (input),,,Options d'entrée,,,入力オプション,,In1voeropties,Alternativer for inndata,Opcje Sterowania,Opções de entrada,,,Настройки ввода,Опције уноса,Inmatningsalternativ,Girdi Seçenekleri,Параметри введення,
|
||||
System Options,OPTMNU_SYSTEM,,,,Systém,Systemindstillinger,Systemoptionen,,Agordoj de la sistemo,Opciones del sistema,,,Options du système,,,システムオプション,,Systeem Opties,Systemalternativer,Opcje Systemowe,Opções de sistema,,,Настройки системы,Системске опције,Systemalternativ,Sistem Seçenekleri,Системні налаштування,
|
||||
Light Options,OPTMNU_LIGHT,,,,Osvětlení,Lysindstillinger,Beleuchtungsoptionen,,Lum-agordoj,Opciones de iluminación,,,Options de lumière,,,光源オプション,,Licht Opties,Alternativer for lys,Opcje Oświetlenia,Opções de iluminação,,,Настройки освещения,Опције осветљења,Alternativ för ljus,Işık Seçenekleri,Параметри освітлення,
|
||||
Sprite Options,OPTMNU_SPRITE,,,,Sprity,Sprite-indstillinger,Spriteoptionen,,Agordoj de la mov-rastrumoj,Opciones de los «sprites»,,,Options des sprites,,,スプライトオプション,,Sprite-opties,Sprite-alternativer,Opcje Sprite'ów,Opções de sprite,,,Настройки спрайтов,Сприте опције,Alternativ för sprite,Sprite Seçenekleri,Параметри спрайтів,
|
||||
Coronas,GLPREFMNU_CORONAS,,,,Záře,Coronas,,,Lum-ampoloj,Focos de luz,,,Corons,,,光冠,,Corona's,Koronaer,Korony,,,,Короны,Цоронас,Koronor,Koronalar,Корони,
|
||||
Appearance,DSPLYMNU_APPEARANCE,,,,Vzhled,Udseende,Spieldarstellung,,Aspekto,Apariencia,,,Apparence,,,アピアランス,,Uiterlijk,Utseende,Wygląd,Aparência,,,Внешность,Изглед,Utseende,Görünüş,Зовнішній вигляд,
|
||||
Advanced Display Options,DSPLYMNU_ADVANCED,,,,Grafika (pokročilé),Avancerede visningsindstillinger,Erweiterte Anzeigeoptionen,,Altnivelaj ekran-agordoj,Opciones avanzadas de visualización,,,Options d'affichage avancées,,,高度なディスプレイオプション,,Geavanceerde Weergave Opties,Avanserte visningsalternativer,Zaawansowane Opcje Wyświetlania,Opções de vídeo avançadas,,,Расширенные настройки экрана,Напредне опције приказа,Avancerade visningsalternativ,Gelişmiş Görüntüleme Seçenekleri,Додаткові параметри відображення,
|
||||
Select which game file to run.,PICKER_SELECT,,,,,"Vælg, hvilket spil du vil spille",Bitte wähle ein Spiel aus.,,,,,,Sélectionner le jeu à jouer,,,,,Selecteer welk spel je wilt spelen,Velg hvilket spill du vil spille,,Selecione o arquivo de jogo para rodar.,,,Выбор файла игры для запуска.,Изаберите коју датотеку игре желите да покренете.,Välj vilket spel du vill spela,Hangi oyunu oynayacağınızı seçin,,
|
||||
Play Game,PICKER_PLAY,,,,,Start spil,Spielen,,,,,,Démarrer le jeu,,,,,Spel starten,Start spill,,Jogar,,,Играть,Играј игру,Starta spel,Oyunu Başlat,,
|
||||
Exit,PICKER_EXIT,,,,,Afslut,Verlassen,,,,,,Quitter,,,,,Verlaten,Avslutt,,Sair,,,Выход,Изађи,Avsluta,Çıkış,,
|
||||
General,PICKER_GENERAL,,,,,Generelt,Allgemein,,,,,,Général,,,,,Algemeen,Generelt,,Geral,,,Общее,Генерал,Allmänt,Genel,,
|
||||
Extra Graphics,PICKER_EXTRA,,,,,Ekstra grafik,Extragrafiken,,,,,,Graphiques supplémentaires,,,,,Extra afbeeldingen,Ekstra grafikk,,Gráficos extra,,,Доп. графика,Ектра Грапхицс,Extra grafik,Ekstra Grafikler,,
|
||||
Fullscreen,PICKER_FULLSCREEN,,,,,Fuld skærm,Vollbild,,,,,,Plein écran,,,,,Volledig scherm,Fullskjerm,,Tela cheia,,,Полный экран,Цео екран,Fullskärm,Tam Ekran,,
|
||||
Disable autoload,PICKER_NOAUTOLOAD,,,,,Deaktiver autoload,Autoload deaktivieren,,,,,,Désactiver le chargement automatique,,,,,Autoload uitschakelen,Deaktiver autolading,,Desativar autocarregamento,,,Отключить автозагрузку,Онемогући аутоматско учитавање,Inaktivera autoload,Otomatik yükleme yok,,
|
||||
Don't ask me again,PICKER_DONTASK,,,,,Spørg mig ikke igen,Nicht nochmal fragen,,,,,,Ne me demandez plus rien,,,,,Vraag me niet opnieuw,Ikke spør meg igjen,,Não me pergunte de novo,,,Не спрашивать снова,Не питај ме поново,Fråga mig inte igen,Bir daha sorma.,,
|
||||
Lights,PICKER_LIGHTS,,,,,Lys,Lichtdefinitionen,,,,,,Lumières,,,,,Verlichting,Lysdefinisjoner,,Luzes,,,Освещение,Светла,Definitioner av ljus,Işık tanımları,,
|
||||
Brightmaps,PICKER_BRIGHTMAPS,,,,,,,,,,,,Cartes lumineuses,,,,,Heldermaps,Lyskart,,,,,Карты освещения,Бригхтмапс,Ljuskartor,Brightmaps,,
|
||||
Widescreen,PICKER_WIDESCREEN,,,,,,Breitbildunterstützung,,,,,,Écran large,,,,,Breedbeeld,Bredskjerm,,,,,Широкий экран,Широки екран,Bredbildsskärm,Geniş Ekran,,
|
||||
Additional Parameters:,PICKER_ADDPARM,,,,,Yderligere parametre:,Zusätzliche Parameter,,,,,,Paramètres supplémentaires :,,,,,Extra parameters:,Ytterligere parametere:,,Parâmetros adicionais:,,,Доп. параметры:,Додатни параметри:,Ytterligare parametrar:,Ek Parametreler:,,
|
||||
Welcome to %s!,PICKER_WELCOME,,,,,Velkommen til %s!,Willkommen bei %s!,,,,,,Bienvenue à %s !,,,,,Welkom bij %s!,Velkommen til %s!,,Boas vindas ao %s!,,,Добро пожаловать в %s!,Добродошли у %s!,Välkommen till %s!,S'ye hoş geldiniz!,,
|
||||
Version %s,PICKER_VERSION,,,,,,,,,,,,,,,,,Versie %s,Versjon %s,,Versão %s,,,Версия %s,Верзија %s,,Sürüm %s,,
|
||||
Rendering API,PICKER_PREFERBACKEND,,,,API vykreslování,,Render API,,Preferita bildigado de API,API de renderizado,,Renderöinti API,API de rendu,Renderelő API,API di rendering,優先レンダリングAPI,기본적인 API 랜더링,,,API renderowania,API de renderização,,API Video Preferat,API для рендеринга,АПИ приказивања,API för rendering,,API для візуалізації,
|
||||
Game,PICKER_TAB_PLAY,,,,Hra,Spil,Spiel,,Ludo,Juego,,Peli,Jeu,Játék,Gioco,ゲーム,게임,Spel,Spill,Gra,Jogo,,Joc,Игра,Игра,Spel,Oyun,Гра,
|
|
@ -402,7 +402,7 @@ versão demo de Blood.",,Salvarea și încărcarea jocului nu este suportată de
|
|||
не поддерживается
|
||||
в данной демо-версии игры Blood.",,"Laddning och sparande av spel stöds
|
||||
inte i denna demoversion av Blood.",Blood'ın bu demo sürümünde oyun yükleme ve kaydetme desteklenmiyor.
|
||||
Are you sure you want to quit this game?,CONFIRM_QUITMSG,,,,"Jsi si jistý, že chceš z této hry odejít?","Er du sikker på, at du vil stoppe med dette spil?","Bist du dir sicher, dass du gehen willst?",,"Ĉu vi certas, ke vi volas forlasi ĉi tiun ludon?",¿Estás segur@[ao_esp] de que quieres salir de este juego?,,Haluatko varmasti lopettaa?,Êtes vous sûr de vouloir quitter ?,Biztos vagy benne hogy ki akarsz lépni?,Sei sicuro di voler uscire?,本当に終了するのか?,정말 종료하시겠습니까?,Weet je zeker dat je wilt stoppen?,Er du sikker på at du vil avslutte dette spillet?,Czy jesteś pewien że chcesz wyjść?,Tem certeza que quer sair?,Tens a certeza que queres sair?,Ești sigur că vrei să ieși din joc?,Вы действительно желаете выйти?,Да ли сте сигурни да желите да одустанеш?,Är du säker på att du vill avsluta det här spelet?,Bu oyundan çıkmak istediğinizden emin misiniz?
|
||||
Are you sure you want to quit this game?,CONFIRM_QUITMSG,,,,"Jsi si jistý, že chceš z této hry odejít?","Er du sikker på, at du vil stoppe med dette spil?","Bist du dir sicher, dass du gehen willst?",,"Ĉu vi certas, ke vi volas forlasi ĉi tiun ludon?",¿Estás segur@[ao_esp] de que quieres salir de este juego?,,Haluatko varmasti lopettaa?,Êtes vous sûr de vouloir quitter ?,Biztos vagy benne hogy ki akarsz lépni?,Sei sicuro di voler uscire?,本当に終了するのか?,정말 종료하시겠습니까?,Weet je zeker dat je wilt stoppen?,Er du sikker på at du vil avslutte dette spillet?,Czy jesteś pewien że chcesz wyjść?,Deseja mesmo sair deste jogo?,Tens a certeza que queres sair?,Ești sigur că vrei să ieși din joc?,Вы действительно желаете выйти?,Да ли сте сигурни да желите да одустанеш?,Är du säker på att du vill avsluta det här spelet?,Bu oyundan çıkmak istediğinizden emin misiniz?
|
||||
Reset controls to defaults?,CONFIRM_CTRL1,,,,Obnovit ovládání na výchozí?,Nulstille kontrollen til standardindstillingerne?,Steuerung auf Standard zurücksetzen?,,,¿Resetear controles por defecto?,,Haluatko palauttaa oletusohjaukset?,Remettre les contrôles à zéro?,Vissza akarod állítani a billentyű kiosztást az alapra?,Ripristinare i controlli alle impostazioni predefinite?,,,Besturingen terugzetten naar standaard?,Tilbakestille kontrollene til standardinnstillingene?,Przywrócić domyślne sterowanie?,Redefinir controles para o modo padrão?,,Revenire la schema de control implicită?,Сбросить настройки управления по умолчанию?,,Återställa kontrollerna till standardvärdena?,Kontrolleri varsayılanlara sıfırla?
|
||||
Reset controls to classic defaults?,CONFIRM_CTRL2,,,,Obnovit ovládání na klasické?,Nulstille kontrollen til de klassiske standardindstillinger?,Steuerung auf klassischen Standard zurücksetzen?,,,¿Resetear controles clásicos por defecto?,,Haluatko palauttaa alkuperäiset oletusohjaukset?,Remettre les contrôles à zéro mode classique?,Vissza akarod állítani a billentyű kiosztást a klasszikus alapra?,Ripristinare i controlli alle impostazioni predefinite classiche?,,,Besturingen terugzetten naar klassieke standaard?,Tilbakestill kontroller til klassiske standardinnstillinger?,Przywrócić klasyczne sterowanie?,Redefinir controles para o modo padrão clássico?,,Revenire la schema de control clasică?,Сбросить настройки управления по умолчанию классических?,,Återställa kontrollerna till klassiska standardvärden?,Kontrolleri klasik varsayılanlara sıfırla?
|
||||
Reset controls to left-handed defaults?,CONFIRM_CTRL3,,,,Obnovit ovládání na výchozí pro leváky?,Nulstille kontrol til standardindstillingerne for venstrehåndede?,Steuerung auf linkshändigen Standard zurücksetzen?,,,¿Resetear controles zurdos por defecto?,,Haluatko palauttaa vasenkätisen oletusohjaukset?,Remettre les contrôles à zéro mode gaucher?,Vissza akarod állítani a billentyű kiosztást a balkezes alapra?,Ripristinare i comandi alle impostazioni predefinite per i mancini?,,,Besturingen terugzetten naar standaard voor linkshandigen?,Tilbakestill kontroller til venstrehendt standard?,Przywrócić sterowanie dla leworęcznych?,Redefinir controles para o modo padrão canhoto?,,Revenire la schema de control pentru stângaci?,Сбросить настройки управления по умолчанию левши?,,Återställa kontrollerna till standardinställningar för vänsterhänta?,Kontrolleri sol el varsayılanlarına sıfırla?
|
||||
|
@ -628,7 +628,7 @@ Derelict,DERELICT,,,,Derelikt,Vraget,Wrack,,Ŝippereo,Barco Abandonado,,Hylky,En
|
|||
The Queen,THE QUEEN,,,,Královna,Dronningen,Die Königin,,La Reĝino,La Reina,,Kuningatar,La Reine,A Királynő,La Regina,ザ・クィーン,,De Koningin,Dronningen,Królowa,A Rainha,,Regina,Королева,,Drottningen,Kraliçe
|
||||
Area 51,AREA 51,,,,Oblast 51,,,,Areo 51,Área 51,,Alue 51,Zone 51,51-es Körzet,,エリア51,,,,Strefa 51,Área 51,,Zona 51,Зона №51,,,51. Bölge
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
High Times,#E5L1,,,,Dobrý časy,Store tider,Hochgefühl,,Altfojoj,Un Bong Momento,,Korkeat ajat,Le Bong Moment,Fűre tépni szabad,Un Pò di Sballo,ハイ・タイムズ,,Hoge Tijden,Høye tider,Na Haju,Altas Horas,,E Timpul,Кайфовое время,,Högtidliga tider,Harika Zamanlar
|
||||
High Times,#E5L1,,,,Dobrý časy,Store tider,Hochgefühl,,Altfojoj,Un Bong Momento,,Korkeat ajat,Le Bong Moment,Fűre tépni szabad,Un Po' di Sballo,ハイ・タイムズ,,Hoge Tijden,Høye tider,Na Haju,Altas Horas,,E Timpul,Кайфовое время,,Högtidliga tider,Harika Zamanlar
|
||||
Red Ruckus,#E5L2,,,,Rudý rozruch,Rødt brag,Roter Krawall,,Ruĝa Tumulto,Jaleo Rojo,,Punainen hälinä,Boucan Sanglant,Ruszki Ricsaj,Rissa Rossa,赤い騒動,,Rood Vuur,Rød rabalder,Czerwony Jazgot,Baderna Vermelha,,Confuzie Sângeroasă,Кровавый кавардак,,Röd ruckus,Kırmızı Patırtı
|
||||
Bloody Hell,#E5L3,,,,K čertu,Blodigt helvede,Zur Hölle,,Sanga Infero,Infierno Sangriento,,Hurmehorna,Bon Sang,Angol Őrület,Inferno di Sangue,なんてこった,,Bloedige hel,Blodig helvete,Kurczę Blaszka,Que Inferno,,Lumea Interlopă,В сердце преисподней,,Blodigt helvete,Kanlı Cehennem
|
||||
Mirage Barrage,#E5L4,,,,Fata záplava,,Trügerischer Prügelhagel,,Miraĝa Batado,Descarga Milagrosa,,Kangastuskangistus,Barrage Mirage,Megtévesztő Zárótűz,Sbarramento Miraggio,ミラージュ・バラージ,,,Fata Morgana,Fatamorgana,Barragem de Miragem,,Baraj Miraj,Опасный мираж,,,Mirage Barajı
|
||||
|
@ -674,10 +674,10 @@ Nuclear Winter,NUCLEAR WINTER,,,,Jaderná zima,Nuklear vinter,Nuklearer Winter,,
|
|||
Deja Vu,DEJA VU,,,,,,,,Deĵavuo,Déjà vu,,Entiselämys,Déjà Vu,Deja Vu,Deja Vu,,,,Déjà Vu,,,,,Опыт прошлого,,,Deja Vu
|
||||
Where It All Began,WHERE IT ALL BEGAN,,,,Kde to všechno začalo,Hvor det hele begyndte,Wo es alles anfing,,,Donde Todo Comenzó,,Missä kaikki alkoi,Où Tout A Commencé,Ahol az Egész Kezdődött,Dove Tutto è Cominciato,,,Waar het allemaal begon,Der det hele begynte,Gdzie się Wszystko Zaczęło,Onde Tudo Começou,,Unde A Început Totul,С чего всё началось,,Där allting började,Her Şeyin Başladığı Yer
|
||||
Land Of Forgotten Toys,LAND OF FORGOTTEN TOYS,,,,Země ztracených hraček,Landet med det glemte legetøj,Land der vergessenen Spielzeuge,,,Tierra de los Juguetes Perdidos,,Unohdettujen lelujen maa,Pays des Jouets Perdus,Az Elfelejtett Játékok Földje,La terra dei giocattoli dimenticati,,,Land van Vergeten Speelgoed,De glemte lekenes land,Kraina Zapomnianych Zabawek,Terra dos Brinquedos Esquecidos,,Tărâmul Jucăriilor Uitate,Сказка о забытых игрушках,,Landet med bortglömda leksaker,Unutulmuş Oyuncaklar Ülkesi
|
||||
Santa's Corporate HQ,SANTA'S CORPORATE HQ,,,,Santovo firemní sídlo,Julemandens hovedkvarter,Santas Hauptquartier,,,Cuartel Corporativo de Santa,,Pukin firman päämaja,QG du Père Noël,A Télapó Székhelye,Quartier generale di Babbo Natale,,,Kerstman's bedrijfshoofdkwartier,Julenissens hovedkvarter,Korporacja Mikołaja,QG Corporativo do Papai Noel,,Sediul Moșului,Штаб-квартира Санты,,Jultomtens högkvarter,Noel Baba'nın Şirket Merkezi
|
||||
Santa's Corporate HQ,SANTA'S CORPORATE HQ,,,,Santovo firemní sídlo,Julemandens hovedkvarter,Santas Hauptquartier,,,Cuartel Corporativo de Santa,,Pukin firman päämaja,QG du Père Noël,A Télapó Székhelye,Quartier generale di Babbo Natale,,,Kerstman's bedrijfshoofdkwartier,Julenissens hovedkvarter,Siedziba Mikołaja,QG Corporativo do Papai Noel,,Sediul Moșului,Штаб-квартира Санты,,Jultomtens högkvarter,Noel Baba'nın Şirket Merkezi
|
||||
The Backdoor,THE BACKDOOR,,,,Zadní vrátka,Bagdøren,Die Hintertür,,,La Puerta Trasera,,Takaovi,L'entrée de derrière,A Hátsó Bejárat,La porta sul retro,,,De achterdeur,Bakdøren,Tylne Wejście,A Porta dos Fundos,,Ușa din Spate,Чёрный ход,,Bakdörren,Arka Kapı
|
||||
Christmas Village,CHRISTMAS VILLAGE,,,,Vánoční vesnička,Julebyen,Weihnchtsdorf,,,Aldea de la Navidad,,Joulukylä,Village de Noël,Karácsonyi Falu,Villaggio di Natale,,,Kerstdorp,Julelandsbyen,Świąteczna Wioska,Vilarejo Natalino,,Sat de Crăciun,Рождественская деревня,,Julbyn,Noel Köyü
|
||||
Here Comes Santa Claws,HERE COMES SANTA CLAWS,,,,Satan Klaus přichází,Her kommer julemandens kløer,Hier kommt Santas Klaue,,,Aquí viene Santa Clavos,,Joulupukki puskuun jo käy,Voilà la Peur Noël,Itt Jön Rémapó,Arriva Babbo Letale,,,Hier komt de Kerstman,Her kommer julenisseklørne,Pazurki Mikołaja,Lá Vem o Mau Velhinho,,Vine Moș Gheare,Когти Санты,,Här kommer tomteklorna,İşte Noel Baba Geliyor
|
||||
Here Comes Santa Claws,HERE COMES SANTA CLAWS,,,,Satan Klaus přichází,Her kommer julemandens kløer,Hier kommt Santas Klaue,,,Aquí viene Santa Clavos,,Joulupukki puskuun jo käy,Voilà la Peur Noël,Itt Jön Rémapó,Arriva Babbo Letale,,,Hier komt de Kerstman,Her kommer julenisseklørne,Nadchodzi Walnięty Mikołaj,Lá Vem o Mau Velhinho,,Vine Moș Gheare,Когти Санты,,Här kommer tomteklorna,İşte Noel Baba Geliyor
|
||||
Santamatch,SANTAMATCH,,,,,,,,,,,Pukkimatsi,,,Match di Babbo Natale,,,,,Mecz Mikołajów,Natalmatch,,,Матч Санты,,,Noel Baba Maçı
|
||||
,,NAM,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
Inventory Item,INVENTORY ITEM,Looks like a placeholder,,,Předmět inventáře,Inventargenstand,Inventar,,,Objeto de Inventario,,Varuste,Objet Inventaire,Leltári Tárgy,Oggetto dell'inventario,Inventario,,Inventaris Item,Inventargjenstand,Przedmiot w Ekwipunku,Item de inventário,,Obiect de Inventar,Предмет инвентаря,,Inventarieobjekt,Envanter Öğesi
|
||||
|
@ -1303,7 +1303,7 @@ Dead Reckoning,Dead Reckoning,https://www.imdb.com/title/tt0039305,Blood,,Zúčt
|
|||
BloodBath,BloodBath,,Blood,,Krvavá koupel,Blodbad,Blutbad,,,Baño de Sangre,,,Bain de sang,Vérfürdő,Bagno di sangue,,,Bloedbad,,Rozlew Krwi,Banho de Sangue,,Baie de Sânge,Кровавая баня,,Blodbad,Kan Banyosu
|
||||
Post Mortem,Post Mortem,,Blood,,,,,,,,,,,Halottszemle,,,,,,,,,,Пост Мортем,,,
|
||||
Cradle to Grave,Cradle to Grave,,Blood,,Z kolébky do rakve,Vugge til grav,Von der Wiege bis zum Grabe,,,De la Cuna a la Tumba,,Kehto haudasta hautaan,Du berceau à la tombe,Bölcsőtöl a Koporsóig,Dalla culla alla tomba,,,Wieg tot Graf,Fra vugge til grav,Od Kołyski aż po Grób,Do Berço à Cova,,Lumânare la Mormânt,От колыбели до могилы,,Från vagga till grav,Beşikten Mezara
|
||||
Hit the switch to end the level.,Hit the switch to end the level.,,Blood,,Stiskni páku pro ukončení úrovně.,Tryk på kontakten for at afslutte niveauet.,Drücke den Schalter um das Level zu beenden.,,,Dale al interruptor para terminar el nivel.,,Paina kytkintä tason päättämiseksi.,Appuyez sur le bouton pour terminer le niveau.,Húzd meg a kart a továbblépéshez.,Premi l'interruttore per terminare il livello.,,,Druk op de schakelaar om het level te beëindigen.,Trykk på bryteren for å avslutte nivået.,Wciśnij przycisk by ukończyć poziom.,Aperte para terminar a fase,,Apasă butonul pentru a încheia nivelul.,"Нажмите на переключатель, чтобы закончить уровень.",,Tryck på knappen för att avsluta nivån.,Seviyeyi bitirmek için düğmeye basın.
|
||||
Hit the switch to end the level.,Hit the switch to end the level.,,Blood,,Stiskni páku pro ukončení úrovně.,Tryk på kontakten for at afslutte niveauet.,Drücke den Schalter um das Level zu beenden.,,,Dale al interruptor para terminar el nivel.,,Paina kytkintä tason päättämiseksi.,Appuyez sur le bouton pour terminer le niveau.,Húzd meg a kart a továbblépéshez.,Premi l'interruttore per terminare il livello.,,,Druk op de schakelaar om het level te beëindigen.,Trykk på bryteren for å avslutte nivået.,Wciśnij przycisk by ukończyć poziom.,Aperte o botão para terminar a fase.,,Apasă butonul pentru a încheia nivelul.,"Нажмите на переключатель, чтобы закончить уровень.",,Tryck på knappen för att avsluta nivån.,Seviyeyi bitirmek için düğmeye basın.
|
||||
"Slurp, slurp . . .","Slurp, slurp . . .",,Blood,,"Hlt, hlt...","Slurp, slurp . . .","Schlürf, schlürf...",,,,,"Slurp, slurp...","Slurp, slurp...","Szürcs, szürcs . . .","Slurp, slurp...",,,"Slurp, slurp...",,"Siorb, siorb . . .",,,"Soarbe, soarbe . . .",Хлюп-хлюп . . .,,,"Slurp, slurp ..."
|
||||
OUT! OUT! DAMN SPOT!,OUT! OUT! DAMN SPOT!,http://shakespeare.mit.edu/macbeth/macbeth.5.1.html,Blood,,"PRYČ S TEBOU, PROKLETÁ SKVRNO!",UD! UD! FANDME SPOT!,RAUS! RAUS! VERDAMMT!!,,,"¡FUERA, MANCHA MALDITA! ¡FUERA, TE DIGO!",,ULOS! OUT! PERKELEEN PAIKKA!,OUSTE ! DEHORS ! MAUDIT POINT !,"El, átkozott folt! Mondom el!",FUORI! FUORI! DANNATO SPOT!,,,OUT! UIT! DAMN SPOT!,UT! UT! JÆVLA FLEKK!,"PRECZ STĄD, PRZEKLĘTA PLAMO!",SAI! SAI! MANCHA MALDITA!,,IEȘI! IEȘI! PATĂ AFURISITĂ!,"УБИРАЙСЯ ОТСЮДА, ЧЁРТОВО ПЯТНО!",,UT! UT! JÄVLA PLATS!,ÇIK! ÇIK! LANET NOKTA!
|
||||
They'll need more of these.,They'll need more of these.,,Blood,,Těch budou potřebovat víc.,De får brug for flere af disse.,Die werden mehr davon brauchen.,,,Necesitarán más de eso.,,Näitä tarvitaan lisää.,Ils vont avoir besoin de plus de ça.,Többre lesz szükségük.,Ne serviranno altri.,,,Hiervan hebben ze er meer nodig.,De trenger flere av disse.,Będą potrzebować ich więcej.,Vão precisar de mais destes.,,Vor avea nevoie de mai multe.,Им понадобится больше этих штук.,,De kommer att behöva fler sådana här.,Bunlardan daha çok lazım olacak.
|
||||
|
@ -1410,8 +1410,8 @@ Four levels (Shareware Version),TXTS_EPD1,,,,Čtyři úrovně (shareware verze),
|
|||
Eighteen levels (Full Version Only),TXTS_EPD2,,,,Osmnáct úrovní (plná verze),Atten niveauer (kun den fulde version),Achtzehn Level (Vollversion),,,Dieciocho niveles (Solo en la versión completa),,Kahdeksantoista tasoa (Vain täysversio),Dix-huit niveaux (version complète uniquement),Tizennyolc Pálya (Csak Teljes Verzió),Diciotto livelli (versione Completa),,,Achttien levels (Alleen volledige versie),Atten nivåer (kun fullversjon),Osiemnaście Poziomów (Tylko Pełna Wersja),Dezoito fases (somente na versão completa),,Optsprezece nivele (Doar Versiunea Completă),Восемнадцать уровней (только в полной версии),,Arton nivåer (endast den fullständiga versionen),On sekiz seviye (Sadece Tam Sürüm)
|
||||
Tiny Grasshopper,TXTS_SK1,,,,Malá kobylka,Lille græshoppe,Kleiner Grashüpfer,,Saltuleto,Pequeño saltamontes,,Pieni heinäsirkka,Petite Sauterelle,Kicsiny Szöcske,Piccola Cavalletta,,,Kleine sprinkhaan,Liten gresshoppe,Tyci Pasikonik,Pequeno Gafanhoto,,Lăcustă Mititică,Маленький кузнечик,,Liten gräshoppa,Minik Çekirge
|
||||
I Have No Fear,TXTS_SK2,,,,Nebojím se,Jeg har ingen frygt,Ich habe keine Angst,,Mi ne timas,No tengo miedo,,En pelkää,Je n'ai pas peur,Nincs bennem félelem,Non Conosco la Paura,,,Ik heb geen angst,Jeg har ingen frykt,Nie Wiem Co To Strach,Não Tenho Medo,,Nu Am Nicio Teamă,Я ничего не боюсь,,Jag är inte rädd,Korkum Yok
|
||||
Who Wants Wang,TXTS_SK3,,,,Kdo chce Wanga,Hvem vil have Wang,Wer will Wang,,Kiu volas Lo-Vangon?,¿Quién quiere Wang?,,Kuka haluaa Wangin,Qui veut Wang,Kinek kell egy kis Wang,Chi Vuole un Pò di Wang,,,Wie wil er Wang,Hvem vil ha Wang,Kto Chce Wanga,Quem Quer Wang,,Cine Vrea Niște Wang,Кто хочет Ванга,,Vem vill ha Wang,Wang'ı Kim İstiyor
|
||||
No Pain No Gain,TXTS_SK4,,,,Bez bolesti to nejde,Ingen smerte ingen gevinst,Kein Schmerz kein Gewinn,,"Kiu ne riskas, tiu ne gajnas",El que no arriesga no gana,,Ei kipua ei voittoa,"Pas de Souffrance, pas de Succès",A Siker Titka a Kemény Munka,Nessun Dolore Nessun Guadagno,,,"Geen pijn, geen winst","Ingen smerte, ingen gevinst",Bez Pracy Nie Ma Kołaczy,Só Se Vence com Garra,,Nu Riști Nu Câștigi,"Нет боли, нет выгоды",,No Pain No Gain,Acı Yok Kazanç Var
|
||||
Who Wants Wang,TXTS_SK3,,,,Kdo chce Wanga,Hvem vil have Wang,Wer will Wang,,Kiu volas Lo-Vangon?,¿Quién quiere Wang?,,Kuka haluaa Wangin,Qui veut Wang,Kinek kell egy kis Wang,Chi Vuole un Po' di Wang,,,Wie wil er Wang,Hvem vil ha Wang,Kto Chce Wanga,Quem Quer Wang,,Cine Vrea Niște Wang,Кто хочет Ванга,,Vem vill ha Wang,Wang'ı Kim İstiyor
|
||||
No Pain No Gain,TXTS_SK4,,,,Bez bolesti to nejde,Ingen smerte ingen gevinst,Kein Schmerz kein Gewinn,,"Kiu ne riskas, tiu ne gajnas",El que no arriesga no gana,,Ei kipua ei voittoa,"Pas de Souffrance, pas de Succès",A Siker Titka a Kemény Munka,Nessun Dolore Nessun Guadagno,,,"Geen pijn, geen winst","Ingen smerte, ingen gevinst",Bez Pracy Nie Ma Kołaczy,Sofrer para Vencer,,Nu Riști Nu Câștigi,"Нет боли, нет выгоды",,No Pain No Gain,Acı Yok Kazanç Var
|
||||
Got the RED key!,TXTS_KEY1,,,,ČERVENÝ klíč!,Du fik den RØDE nøgle!,Der ROTE Schlüssel!,,,¡Tienes la llave ROJA!,,Sain PUNAISEN avaimen!,Ramassé la clé ROUGE !,Megszerezted a PIROS kulcsot!,Hai ottenuto la chiave ROSSA!,,,Je hebt de RODE sleutel!,Har den RØDE nøkkelen!,Zdobyto CZERWONY klucz!,Pegou a chave VERMELHA!,,Ai cheia ROȘIE!,Получен КРАСНЫЙ ключ!,,Du har den RÖDA nyckeln!,KIRMIZI anahtarı aldım!
|
||||
Got the BLUE key!,TXTS_KEY2,,,,MODRÝ klíč!,Du fik den BLÅ nøgle!,Der BLAUE Schlüssel!,,,¡Tienes la llave AZUL!,,Sain SINISEN avaimen!,Ramassé la clé BLEUE !,Megszerezted a KÉK kulcsot!,Hai ottenuto la chiave BLU!,,,Je hebt de BLAUWE sleutel!,Har den BLÅ nøkkelen!,Zdobyto NIEBIESKI klucz!,Pegou a chave AZUL!,,Ai cheia ALBASTRĂ!,Получен СИНИЙ ключ!,,Du har den BLÅ nyckeln!,MAVİ anahtarı aldım!
|
||||
Got the GREEN key!,TXTS_KEY3,,,,ZELENÝ klíč!,Du fik den GRØNNE nøgle!,Der GRÜNE Schlüssel!,,,¡Tienes la llave VERDE!,,Sain VIHREÄN avaimen!,Ramassé la clé VERTE !,Megszerezted a ZÖLD kulcsot!,Hai ottenuto la chiave VERDE!,,,Je hebt de GROENE sleutel!,Har den GRØNNE nøkkelen!,Zdobyto ZIELONY klucz!,Pegou a chave VERDE!,,AI cheia VERDE!,Получен ЗЕЛЁНЫЙ ключ!,,Du har den GRÖNA nyckeln!,YEŞİL anahtarı aldım!
|
||||
|
@ -1564,12 +1564,12 @@ Serpent God Protector,Serpent God Protector,,ShadowWarrior,,Ochránce Zmijího b
|
|||
Flames,Flames,,ShadowWarrior,,Plameny,Flammer,Flammen,,,Llamas,,Liekit,Flammes,Lángok,Fiamme,,,Vlammen,Flammer,Płomienie,Chamas,,Flăcări,Огонь,,Flames,Alevler
|
||||
Radiation,Radiation,,ShadowWarrior,,Radiace,Stråling,Strahlung,,,Radiación,,Säteily,Rayonnement,Sugárzás,Radiazioni,,,Straling,Stråling,Promieniowanie,Radiação,,Radiație,Радиация,,Strålning,Radyasyon
|
||||
Caltrops,Caltrops,,ShadowWarrior,,Rozsocháče,,Krähenfüße,,,Trampas,,,,Vassúlyom,Piedi di corvo,,,,Caltrops,Kolczatki,Estrepes,,Ciulini de Fier,Шипы,,Caltrops,Caltrops
|
||||
Seppuku Station,TXTS_MAP01,https://en.wikipedia.org/wiki/Seppuku,,,Stanice Seppuku,Seppuku-station,,,Stacio de harakiro,Estación de seppuku,,Seppuku Station,,Szeppuku Szállás,Stazione Seppuku,,,Seppuku Station,Seppuku-stasjonen,Stacja Seppuku,Estação Seppuku,,Stația Seppuku,Станция Сеппуку,,,Seppuku İstasyonu
|
||||
Seppuku Station,TXTS_MAP01,https://en.wikipedia.org/wiki/Seppuku,,,Stanice Seppuku,Seppuku-station,,,Stacio de harakiro,Estación de harakiri,,Seppuku Station,,Szeppuku Szállás,Stazione Seppuku,,,Seppuku Station,Seppuku-stasjonen,Stacja Seppuku,Estação Seppuku,,Stația Seppuku,Станция Сеппуку,,,Seppuku İstasyonu
|
||||
Zilla Construction,TXTS_MAP02,,,,Staveniště Zilly,Zilla-konstruktion,Zilla Bauunternehmen,,Konstruaĵo Zilla,Construcción Zilla,,Zilla Construction,,Zilla Építkezés,Cantiere Zilla,,,Zilla Bouw,Zilla Byggefirma,Gmach Zilli,Zilla Construções,,Șantierul Zilla,Здание Зилла,,,Zilla İnşaat
|
||||
Master Leep's Temple,TXTS_MAP03,,,,Chrám mistra Skoka,Mester Leeps tempel,Meister Leeps Tempel,,Templo de la Mastro Leep,Templo del Maestro Leep,,Mestari Leepin temppeli,Le temple de Maître Leep,Leep Mester Temploma,Tempio del Maestro Leep,,,Meester Leep's Tempel,Mester Leeps tempel,Świątynia Mistrza Leep'a,Templo do Mestre Leep,,Templul Maestrului Leep,Храм мастера Липа,,Mästare Leeps tempel,Usta Leep'in Tapınağı
|
||||
Dark Woods of the Serpent,TXTS_MAP04,,,,Temný hvozd zmijí,Slangens mørke skove,Dunkler Schlangenwald,,Malhela Arbaro de la Serpento,Bosque Oscuro de la Serpiente,,Käärmeen pimeät metsät,Bois sombres du serpent,A Kígyó Sötét Erdelye,Bosco Oscuro del Serpente,,,Donkere bossen van de slang,Slangens mørke skog,Las Węża,Floresta Negra da Serpente,,Pădurile Tenebroase ale Șarpelui,Тёмные леса змея,,Ormens mörka skogar,Yılanın Karanlık Ormanı
|
||||
Rising Son,TXTS_MAP05,Reference to Japan's nickname: Land of the Rising Sun,,,Synovo povstání,Stigende søn,Aufstrebender Sohn,,Origino de la Puno,Tierra del Lo Wang-ciente,,Nouseva poika,Le Sordide Levant,A Felkelő Nap Fia,Figlio Nascente,,,Rijzende zoon,Zilla Byggefirma,Zew Wojownika,Filho Nascente,,Fiul Renaște,Зов воина,,Den uppstigande sonen,Yükselen Oğul
|
||||
Killing Fields,TXTS_MAP06,https://en.wikipedia.org/wiki/Killing_Fields,,,Pole smrti,Drabsmarker,Schlachtfelder,,Ruĝa buĉejo,Campos de la Muerte,,Tappavat kentät,Champs de la mort,Öldöklés Mezeje,Campi di Sterminio,,,Dodende Velden,Dødsmarker,Pola Śmierci,Campos de Execução,,Câmpiile de Execuție,Поля смерти,,Dödande fält,Ölüm Tarlaları
|
||||
Killing Fields,TXTS_MAP06,https://en.wikipedia.org/wiki/Killing_Fields,,,Pole smrti,Drabsmarker,Schlachtfelder,,Ruĝaj murdokampoj,Campos de la Muerte,,Tappavat kentät,Champs de la mort,Öldöklés Mezeje,Campi di Sterminio,,,Dodende Velden,Dødsmarker,Pola Śmierci,Campos de Execução,,Câmpiile de Execuție,Поля смерти,,Dödande fält,Ölüm Tarlaları
|
||||
Hara-Kiri Harbor,TXTS_MAP07,hara-kiri = seppuku,,,Přístav Hara-Kiri,Hara-Kiri-havnen,Hara-Kiri Hafen,,Haveno de harakiro,Puerto de harakiri,,Hara-Kirin satama,Port de Hara-Kiri,Hara-Kiri Hajópihenő,Porto di Hara-Kiri,,,Hara-Kiri haven,Hara-Kiri havn,Port Hara-Kiri,Porto Harakiri,,Portul Hara-Kiri,Гавань Харакири,,Hara-Kiri-hamnen,Hara-Kiri Limanı
|
||||
Zilla's Villa,TXTS_MAP08,,,,Zillova vila,Zillas villa,Zillas Villa,,Vilaĝo de Zilla-ĝo,Villa de Zilla,,Zillan huvila,Villa de Zilla,Zilla Villája,Villa di Zilla,,,Zilla's Villa,Zillas villa,Willa Zilli,Mansão Zilla,,Complexul lui Zilla,Вилла Зилла,,Zillas villa,Zilla'nın Villası
|
||||
Monastery,TXTS_MAP09,,,,Klášter,Kloster,Kloster,,Monaĥejo,Monasterio,,Luostari,Monastère,Apátság,Monastero,,,Klooster,Klosteret,Klasztor,Mosteiro,,Mănăstirea,Монастырь,,Klostret,Manastır
|
||||
|
@ -1579,7 +1579,7 @@ Bath House,TXTS_MAP12,,,,Lázně,Badehus,Badehaus,,Banejo,Baños públicos,,Kylp
|
|||
Unfriendly Skies,TXTS_MAP13,,,,Nevlídné nebe,Uvenlige himmelstrøg,Unfreundlicher Himmel,,Malamikaj ĉieloj,Cielos hostiles,,Epäystävällinen taivas,Ciel hostile,Barátságtalan Égbolt,Cieli Ostili,,,Onvriendelijke hemel,Uvennlig himmel,Wróg Na Horyzoncie,Céus Nada Amigáveis,,Orizonturi Ostile,Враг на горизонте,,Ovänlig himmel,Düşmanca Gökyüzü
|
||||
Crude Oil,TXTS_MAP14,,,,Surová ropa,Råolie,Rohöl,,Nafto,Petróleo,,Raakaöljy,Huile Noire,Kőolaj,Petrolio grezzo,,,Ruwe olie,Råolje,Ropa,Puro Petróleo,,Ulei Nerafinat,Нефть,,Råolja,Ham Petrol
|
||||
Coolie Mines,TXTS_MAP15,,,,Důl kuliů,Coolie Miner,Kuli Minen,,Minejo de Coolie,Minas Coolie,,Koolien kaivokset,Champs de la mort,Csíkszem Bányák,Miniere di Coolie,,,Coolie Mijnen,Coolie-gruver,Kopalnie Kulisów,Minas dos Coolies,,Minele Coolie,Шахты Кули,,Coolie gruvor,Coolie Madenleri
|
||||
Subpen 7,TXTS_MAP16,,,,Ponorkový bunkr 7,,Gebäude 7,,,,,Subpen 7,Enclos Sous Marin 7,7-es Tengeralattjáró Kikötő,Base Sottomarina,,,,Subpen 7,Podwodna Baza 7,Base de Submarinos 7,,Baza de Submarine 7,Подводная база №7,,Ubåtsbrygga 7,Denizaltı rıhtımı 7
|
||||
Subpen 7,TXTS_MAP16,,,,Ponorkový bunkr 7,,Gebäude 7,,,,,Subpen 7,Enclos Sous Marin 7,7-es Tengeralattjáró Kikötő,Base Sottomarina,,,,Subpen 7,Podwodna Baza Nr 7,Base de Submarinos 7,,Baza de Submarine 7,Подводная база №7,,Ubåtsbrygga 7,Denizaltı rıhtımı 7
|
||||
The Great Escape,TXTS_MAP17,https://www.imdb.com/title/tt0057115/,,,Velký útěk,Den store flugt,Die große Flucht,,,La gran evasión,El gran escape,Suuri pako,La Grande évasion,A Nagy Szökés,La Grande Fuga,,,De grote ontsnapping,Den store flukten,Wielka Ucieczka,Fugindo do Inferno,,Marea Evadare,Большой побег,,Den stora flykten,Büyük Kaçış
|
||||
Floating Fortress,TXTS_MAP18,,,,Létající pevnost,Flydende fæstning,Schwebende Festung,,Ŝvebanta fortreso,Fortaleza flotante,,Kelluva linnoitus,Forteresse flottante,Lebegő Erőd,Fortezza Galleggiante,,,Drijvend fort,Flytende festning,Latająca Forteca,Fortaleza Flutuante,,Fortăreața Plutitoare,Парящая крепость,,Flytande fästning,Yüzen Kale
|
||||
Water Torture,TXTS_MAP19,,,,Vodní mučení,Vandtortur,Wasserfolter,,Akva torturo,Tortura de agua,,Vesikidutus,Torture par l'eau,Vizes Kínzás,Tortura dell'Acqua,,,Watermarteling,Vanntortur,Wodna Tortura,Tortura d'Água,,Tortura Apei,Пытка водой,,Vatten tortyr,Su İşkencesi
|
||||
|
@ -1629,7 +1629,7 @@ Twin Dragon,TXTS_T_TITLE,https://www.imdb.com/title/tt0105399/,,,Dračí dvojče
|
|||
Lo Wang is waiting for other players...,TXTS_NETWAIT1,currently unused,,,Lo Wang čeká na ostatní hráče...,Lo Wang venter på andre spillere...,,,Lo-Vango atendas pliajn ludontojn...,Lo Wang está esperando otros jugadores...,,Lo Wang odottaa muita pelaajia...,Lo Wang attend les autres joueurs...,Lo Wang a többi játékosra vár...,Lo Wang sta aspettando gli altri giocatori...,,,Lo Wang wacht op andere spelers...,Lo Wang venter på andre spillere...,Lo Wang czeka na innych graczy...,Lo Wang está esperando os outros jogadores...,,Lo Wang așteaptă restul jucătorilor...,Ло Ванг ожидает других игроков...,,Lo Wang väntar på andra spelare...,Lo Wang diğer oyuncuları bekliyor...
|
||||
They are afraid!,TXTS_NETWAIT2,currently unused,,,Oni se bojí!,De er bange!,,,Ili timas!,¡Tienen miedo!,,He pelkäävät!,Ils ont peur !,Be vannak szarva!,Hanno paura!,,,Ze zijn bang!,De er redde!,Boją się!,Eles estão com medo!,,Sunt lași!,Они боятся!,,De är rädda!,Korkuyorlar!
|
||||
,,Exhumed,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
Training,TXT_EX_MAP00,,,,Výcvik,Uddannelse,,,,Entrenamiento,,Koulutus,Entraînement,Kiképzés,Formazione,,,Opleiding,Trening,Trening,Treinamento,,Antrenament,Обучение,,Utbildning,Eğitim
|
||||
Training,TXT_EX_MAP00,,,,Výcvik,Uddannelse,,,Trejnejo,Entrenamiento,,Koulutus,Entraînement,Kiképzés,Formazione,,,Opleiding,Trening,Trening,Treinamento,,Antrenament,Обучение,,Utbildning,Eğitim
|
||||
Abu Simbel,TXT_EX_MAP01,,,,Abú Simbel,,,,,,,,,,,,,,,,,,,Абу-Симбел,,,Ebu Simbel
|
||||
Dendur,TXT_EX_MAP02,,,,Dendúr,,,,,,,,,,,,,,,,,,,Дендур,,,Dendur
|
||||
Kalabsh,TXT_EX_MAP03,,,,Kalabš,,,,,,,,,,,,,,,,,,,Калабаш,,,Kalabsh
|
||||
|
@ -2104,7 +2104,7 @@ lykkes, kan jeg ikke beskytte
|
|||
sivilisasjonen, og kaos vil råde.
|
||||
Jeg slites mellom to verdener,
|
||||
og dette indre eksperimentet
|
||||
må stoppes.","Złe siły zwane też Kilmaatem
|
||||
må stoppes.","Złe siły zwane Kilmaatem
|
||||
zbeszcześciły mój święty pałac
|
||||
i łaszą się na to co pozostało
|
||||
po mojej śmierci.
|
||||
|
@ -3070,7 +3070,7 @@ Explosions Behavior,EXPLOS_BEHAVIOR,,,,Chování při výbuchu,Adfærd ved ekspl
|
|||
Torch is lit,TXT_EX_TORCHLIT,,,,Pochodeň plane,Faklen er tændt,Die Fackel leuchtet,,,Antorcha encendida,,Soihtu syttyy,La torche est allumée,Fáklya ég,La torcia è accesa,,,Zaklamp brandt,Fakkel er tent,Rozpalono pochodnię,Tocha acesa,,Torța e aprinsă,Факел зажжён,,Facklan är tänd,Meşale yanıyor
|
||||
Torch is out,TXT_EX_TORCHOUT,,,,Pochodeň vyhasla,Faklen er slukket,Die Fackel ist erloschen,,,Antorcha apagada,,Soihtu on sammunut,La torche est éteinte,Fáklya nem ég,La torcia è spenta,,,Fakkel is uit,Fakkelen er slukket,Pochodnia zgasła,Tocha apagada,,Torța e stinsă,Факел потух,,Facklan är släckt,Meşale çıktı
|
||||
Natural,GLPREFMNU_NATURAL,,,,Přirozené,Naturlig,Natürlich,,,,,Luonnollinen,Naturel,Természetes,Naturale,,,Natuurlijk,Naturlig,Naturalne,,,,Естественная,,Naturlig,Doğal
|
||||
High Contrast,GLPREFMNU_HIGHCONTRAST,,,,Vysoký kontrast,Høj kontrast,Hoher Kontrast,,,Alto contraste,,Korkea kontrasti,Contraste élevé,Magas Kontrasztú,Alto contrasto,,,Hoog contrast,Høy kontrast,Duży Kontrast,Alto Contraste,,De Înalt Contrast,Высокая контрастность,,Hög kontrast,Yüksek Kontrast
|
||||
High Contrast,GLPREFMNU_HIGHCONTRAST,,,,Vysoký kontrast,Høj kontrast,Hoher Kontrast,,,Alto contraste,,Korkea kontrasti,Contraste élevé,Magas Kontrasztú,Alto contrasto,,,Hoog contrast,Høy kontrast,Duży Kontrast,Alto contraste,,De Înalt Contrast,Высокая контрастность,,Hög kontrast,Yüksek Kontrast
|
||||
Original,GLPREFMNU_ORIGINAL,,,,Původní,,,,,,,Alkuperäinen,,Eredeti,Originale,,,Origineel,,Oryginalne,,,,Обычная,,,Orijinal
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
You need the key for this door,TXT_EX_NEEDKEY,,,,K těmto dveřím potřebuješ klíč,Du skal bruge nøglen til denne dør,Du brauchst einen Schlüssel für diese Tür,,,Necesitas la llave para esta puerta,,Tarvitset avaimen tähän oveen,Vous avez besoin de la clé pour cette porte,Kell egy kulcs az ajtóhoz,Ti serve la chiave per questa porta,,,Je hebt de sleutel nodig voor deze deur.,Du trenger nøkkelen til denne døren,Potrzebujesz klucza do tych drzwi,Você precisa da chave para esta porta,,Ai nevoie de cheie pentru ușa asta,Нужен ключ от этой двери,,Du behöver nyckeln till den här dörren,Bu kapının anahtarına ihtiyacın var.
|
||||
|
@ -3080,18 +3080,18 @@ Invisibility is about to expire,TXT_EX_INVISEX,,,,Neviditelnost brzy vyprchá,Us
|
|||
Invincibility is about to expire,TXT_EX_INVINCEX,,,,Nesmrtelnost brzy vyprchá,Uovervindelighed er ved at udløbe,Unverwundbarkeit läuft bald ab,,,Invencibilidad a punto de expirar,,Näkymättömyys on päättymässä.,L'invincibilité est sur le point d'expirer,Sérthetetlenség hamarosan lejár,L'invincibilità sta per scadere,,,Onoverwinnelijkheid is bijna voorbij.,Uovervinnelighet er i ferd med å utløpe.,Nietykalność kończy się,Invencibilidade está prestes a expirar,,Invincibilitatea expiră curând,Неуязвимость скоро закончится,,Oövervinnbarhet är på väg att upphöra,Yenilmezlik sona ermek üzere
|
||||
Weapon power is about to expire,TXT_EX_WEAPONEX,,,,Síla zbraně brzy vyprchá,Våbenkraft er ved at udløbe,Waffenenergie läuft bald ab,,,El poder de las armas está a punto de expirar,,Aseiden teho on päättymässä,La puissance de l'arme est sur le point d'expirer,Fegyver túlerő hamarosan lejár,Il potere delle armi sta per scadere,,,Wapen kracht is bijna verlopen.,Våpenkraft er i ferd med å utløpe,Wzmocnienie broni kończy się,Poder da arma está prestes a expirar,,Puterea armei expiră curând,Сила оружия скоро иссякнет,,Vapenkraften är snart slut,Silah gücü sona ermek üzere
|
||||
Mask is about to expire,TXT_EX_MASKEX,,,,Maska brzy vyprchá,Maske er ved at udløbe,Maske läuft bald ab,,,La máscara está a punto de caducar,,Naamio on päättymässä,Le masque est sur le point d'expirer,Maszk hamarosan lejár,La maschera sta per scadere,,,Masker gaat vervallen,Mask er i ferd med å utløpe,Maska traci swą moc,Máscara está prestes a expirar,,Masca expiră curând,Действие маски скоро закончится,,Masken är på väg att upphöra att gälla.,Maskenin süresi dolmak üzere
|
||||
Full Viewing Pitch (Experimental),PLRMNU_FULLVIEWPITCH,,,,Plný pohled nahoru/dolů (experimentální),Fuld visningsafstand (eksperimentelt),Volles Sichtfeld (experimentell),,,Campo de visión completo (Experimental),,Täysi näkökenttä (kokeellinen),Angle de vue complet (expérimental),Teljes szabad egér nézet (Kísérleti),Visuale completa (sperimentale),,,Volledige kijkhoogte (experimenteel),Full visningshøyde (eksperimentell),Pełny Widok w Pionie (Eksperymentalne),Inclinação total de visão (experimental),,Privire Sus-Jos la 90° (Prototip),Полный угол обзора (экспериментальные),,Full sikt (experimentell),Tam Görüntüleme Aralığı (Deneysel)
|
||||
Full Viewing Pitch (Experimental),PLRMNU_FULLVIEWPITCH,,,,Plný pohled nahoru/dolů (experimentální),Fuld visningsafstand (eksperimentelt),Volles Sichtfeld (experimentell),,,Campo de visión completo (Experimental),,Täysi näkökenttä (kokeellinen),Angle de vue complet (expérimental),Teljes szabad egér nézet (Kísérleti),Visuale completa (sperimentale),,,Volledige kijkhoogte (experimenteel),Full visningshøyde (eksperimentell),Pełny Widok w Pionie (Eksperymentalne),Inclinação total da visão (experimental),,Privire Sus-Jos la 90° (Prototip),Полный угол обзора (экспериментальные),,Full sikt (experimentell),Tam Görüntüleme Aralığı (Deneysel)
|
||||
Lock pitch while centering view,PLRMNU_DUKEPITCHLOCKRET,,,,Uzamknout pohled nahoru/dolů při vycentrování pohledu,"Lås banen, mens du centrerer visningen",Neigung während der Zentrierung der Ansicht sperren,,,Bloqueo del cabeceo al centrar la vista,,Lukitse sävelkorkeus keskittäessäsi näkymää,Verrouiller l'assiette pendant le centrage de la vue,A nézet központosítása közbeni állás rögzítése,Blocca l'inclinazione mentre centra la visuale,,,Vergrendel toonhoogte tijdens centreren zicht,Lås pitch mens du sentrerer visningen,Blokada nachylenia podczas centrowania widoku,Travar inclinação ao centralizar visão,,Blocați pasul în timp ce centrați vederea,Фиксировать угол обзора при отцентрированном взгляде,,Låsa tonhöjden medan du centrerar vyn,Görünümü ortalarken eğimi kilitleme
|
||||
Adjust pitch upon hard landing,PLRMNU_DUKEPITCHHARDLAND,,,,Upravit pohled při tvrdém přistání,Juster banen ved hård landing,Neigung bei harter Landung anpassen,,,Ajustar el cabeceo tras un aterrizaje duro,,Säädä korkeutta kovan laskeutumisen yhteydessä,Ajuster l'assiette en cas d'atterrissage brutal,Állítsa be a dőlésszöget kemény leszálláskor,Regola l'inclinazione in caso di atterraggio brusco,,,Pas toonhoogte aan bij harde landing,Juster pitch ved hard landing,Regulacja nachylenia po lądowaniu,Ajustar ângulo após cair,,Reglați pasul la aterizarea bruscă,Отрегулировать угол обзора при жёстком приземлении,,Justera lutningen vid hård landning,Sert inişte eğimi ayarlayın
|
||||
Return to center after a hard landing,PLRMNU_DUKEPITCHLANDRET,,,,Vystředit pohled po tvrdém přistání,Tilbage til centrum efter en hård landing,Zentrieren nach harter Landung,,,Volver al centro después de un aterrizaje duro,,Palaa keskelle kovan laskeutumisen jälkeen,Retour au centre après un atterrissage brutal,Visszatérés a középpontba kemény leszállás után,Ritorna al centro dopo un atterraggio difficile,,,Terugkeren naar het midden na een harde landing,Gå tilbake til senter etter en hard landing,Wycentruj po lądowaniu,Voltar ao centro após cair,,Revenirea la centru după o aterizare bruscă,Возврат угла обзора в центр после жёсткого приземления,,Återgå till centrum efter en hård landning,Sert bir inişten sonra merkeze dönüş
|
||||
Jump rebounding effect,PLRMNU_EXJUMPREBOUND,,,,Efekt zpětného rázu při skoku,Effekt af springrebounding,Sprung-Rückprall-Effekt,,,Efecto de rebote de salto,,Hyppyjen palautusvaikutus,Effet de rebond des sauts,Ugrás visszapattanó hatás,Effetto rimbalzo del salto,,,Spring rebound effect,Hopp tilbakevirkende effekt,Efekt odbicia skoku,Efeito de ricochete de saltos,,Efectul de ricoșeu de salt,Эффект отскока в прыжке,,Effekten av hopprebounding,Sıçrama geri tepme etkisi
|
||||
Jump rebounding effect,PLRMNU_EXJUMPREBOUND,,,,Efekt zpětného rázu při skoku,Effekt af springrebounding,Sprung-Rückprall-Effekt,,,Efecto de rebote de salto,,Hyppyjen palautusvaikutus,Effet de rebond des sauts,Ugrás visszapattanó hatás,Effetto rimbalzo del salto,,,Spring rebound effect,Hopp tilbakevirkende effekt,Efekt odbijania się skoku,Efeito de ricochete de saltos,,Efectul de ricoșeu de salt,Эффект отскока в прыжке,,Effekten av hopprebounding,Sıçrama geri tepme etkisi
|
||||
Powerslave Exhumed,DSPLYMNU_VIEWBOBPSE,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
Duke 3D,DSPLYMNU_VIEWBOBDUKE,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
View Bobbing Speed,DSPLYMNU_VIEWBOBSPEED,,,,Rychlost pohupování pohledu,,,,,,,,Vitesse du chaloupage,,,,,,,Szybkość bujania kamery,Velocidade do balanço da visão,,Viteză Oscilare Perspectivă,Скорость покачивания камеры,,,
|
||||
View Bobbing Height,DSPLYMNU_VIEWBOBHEIGHT,,,,Výška pohupování pohledu,,,,,,,,Hauteur du chaloupage,,,,,,,Wysokość bujania kamery,Altura do balanço da visão,,Înălțime Oscilare Perspectivă,Высота покачивания камеры,,,
|
||||
Turn tilting (Powerslave Exhumed),DSPLYMNU_VIEWTILTTURN,,,,Naklánět při otáčení (Powerslave Exhumed),Drejning af hældning (Powerslave Exhumed),Neigen beim Drehen (Powerslave Exhumed),,,Inclinación de giro (Powerslave Exhumed),,Kääntökallistus (Powerslave Exhumed),Inclinaison en virage (Powerslave Exhumed),Fordulás billenés (Powerslave Exhumed),Inclinazione dei turni (Powerslave Exhumed),,,Kantelen (Powerslave Exhumed),Slå vipping (Powerslave Exhumed),Odchylanie przy rozglądaniu (Powerslave Exhumed),Giro de inclinação (Powerslave Exhumed),Virar inclinado (Powerslave Exhumed),Înclinare de întoarcere (Powerslave Exhumed),Наклон при повороте (Powerslave Exhumed),,Vändning med lutning (Powerslave Exhumed),Devirme (Powerslave Exhumed)
|
||||
Strafe tilting (Quake),DSPLYMNU_VIEWTILTSTRAFE,,,,Naklánět při úkroku (Quake),Strafe tilting (Quake),Neigen bei Seitwärtsbewegung (Quake),,,Inclinación de Strafe (Quake),,Strafe-kallistus (Quake),Inclinaison en pas de côté (Quake),Strafe billenés (Quake),Inclinazione della strafe (Quake),,,Strafe kantelen (Quake),Strafe vipping (Quake),Odchylanie przy chodzeniu w bok (Quake),Inclinação de Strafe (Quake),,Înclinare Strafe (Quake),Наклон при движении боком (Quake),,Vändning av strafe (Quake),Strafe eğme (Quake)
|
||||
Strafe tilting (Quake),DSPLYMNU_VIEWTILTSTRAFE,,,,Naklánět při úkroku (Quake),Strafe tilting (Quake),Neigen bei Seitwärtsbewegung (Quake),,,Inclinación de Strafe (Quake),,Strafe-kallistus (Quake),Inclinaison en pas de côté (Quake),Strafe billenés (Quake),Inclinazione della strafe (Quake),,,Strafe kantelen (Quake),Strafe vipping (Quake),Odchylanie przy uniku (Quake),Inclinação de movimento lateral (Quake),,Înclinare Strafe (Quake),Наклон при движении боком (Quake),,Vändning av strafe (Quake),Strafe eğme (Quake)
|
||||
Movement tilting,DSPLYMNU_VIEWTILTMOVEMENT,,,,Naklánět při pohybu,Bevægelse tilting,Neigen beim Bewegen,,,Movimiento basculante,,Liikkeen kallistaminen,Inclinaison du mouvement,Mozgás billenés,Inclinazione del movimento,,,Beweging kantelen,Bevegelse vipping,Odchylanie przy poruszaniu się,Inclinação do movimento,,Înclinarea mișcării,Наклон при движении,,Rörelsestyrning,Hareket devirme
|
||||
View tilting mode,DSPLYMNU_VIEWTILTING,,,,Režim naklánění pohledu,Tilstand til vending af visningen,Neigungsmodus,,,Modo de inclinación de la vista,,Näkymän kallistustila,Mode de basculement de la vue,Nézet-dőlés mód,Modalità di inclinazione della vista,,,Kantelmodus,Modus for vippevisning,Tryb odchylania widoku,Modo de inclinação da vista,,Modul de înclinare a vederii,Режим наклона обзора,,Läge för lutning av vyn,Görünüm eğme modu
|
||||
View tilting scale,DSPLYMNU_VIEWTILTSCALE,,,,Měřítko naklánění pohledu,Skala til vipning af visningen,Neigungsfaktor,,,Escala de inclinación de la vista,,Näkymän kallistusasteikko,Échelle de basculement de la vue,Nézet-dőlés skála,Scala di inclinazione della vista,,,Kantelschaal,Skala for vippevisning,Skala odchylenia widoku,Escala de inclinação da vista,,Scala de înclinare a vederii,Масштабирование наклона обзора,,Skala för lutning av vyn,Görünüm eğme ölçeği
|
||||
Vehicle tilting,DSPLYMNU_VEHTILTING,,,,Naklánět vozidla,,Fahrzeugneigung,,,,,Ajoneuvon kallistaminen,,,,,,,,,Inclinação do veículo,,Înclinare vehicul,Наклон в транспорте,,Fordonets lutning,
|
||||
View tilting mode,DSPLYMNU_VIEWTILTING,,,,Režim naklánění pohledu,Tilstand til vending af visningen,Neigungsmodus,,,Modo de inclinación de la vista,,Näkymän kallistustila,Mode de basculement de la vue,Nézet-dőlés mód,Modalità di inclinazione della vista,,,Kantelmodus,Modus for vippevisning,Tryb odchylania widoku,Modo de inclinação da visão,,Modul de înclinare a vederii,Режим наклона обзора,,Läge för lutning av vyn,Görünüm eğme modu
|
||||
View tilting scale,DSPLYMNU_VIEWTILTSCALE,,,,Měřítko naklánění pohledu,Skala til vipning af visningen,Neigungsfaktor,,,Escala de inclinación de la vista,,Näkymän kallistusasteikko,Échelle de basculement de la vue,Nézet-dőlés skála,Scala di inclinazione della vista,,,Kantelschaal,Skala for vippevisning,Skala odchylenia widoku,Escala de inclinação da visão,,Scala de înclinare a vederii,Масштабирование наклона обзора,,Skala för lutning av vyn,Görünüm eğme ölçeği
|
||||
Vehicle tilting,DSPLYMNU_VEHTILTING,,,,Naklánět vozidla,,Fahrzeugneigung,,,,,Ajoneuvon kallistaminen,,,,,,,,Odchylanie w pojazdach,Inclinação de veículo,,Înclinare vehicul,Наклон в транспорте,,Fordonets lutning,
|
Can't render this file because it is too large.
|
BIN
wadsrc/static/widgets/banner_1.png
Normal file
BIN
wadsrc/static/widgets/banner_1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 103 KiB |
BIN
wadsrc/static/widgets/banner_3.png
Normal file
BIN
wadsrc/static/widgets/banner_3.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 119 KiB |
Loading…
Reference in a new issue