Merge branch 'master' of github.com:edubart/otclient

master
Eduardo Bart 13 年前
当前提交 4fa659c26a

@ -23,6 +23,7 @@
#include "engine.h"
#include "fonts.h"
#include "platform.h"
#include "graphics.h"
#include "input.h"
@ -47,6 +48,9 @@ void Engine::init()
// initialize graphics stuff
g_graphics.init();
// load fonts
g_fonts.load();
// finally show the window
onResize(Platform::getWindowWidth(), Platform::getWindowHeight());
}

@ -0,0 +1,22 @@
#include "fonts.h"
#include "resourcemanager.h"
Fonts g_fonts;
Fonts::Fonts()
{
}
Fonts::~Fonts()
{
}
bool Fonts::load()
{
std::list<std::string> files = g_resources.getDirectoryFiles("fonts");
for(std::list<std::string>::iterator it = files.begin(), end = files.end(); it != end; ++it) {
notice("File: %s", (*it).c_str());
}
return true;
}

@ -0,0 +1,27 @@
#ifndef FONTS_H
#define FONTS_H
#include "prerequisites.h"
#include "rect.h"
struct Font
{
Rect textureArea[256];
};
class Fonts
{
public:
Fonts();
~Fonts();
bool load();
private:
std::map<int, Font*> mFonts;
};
extern Fonts g_fonts;
#endif // FONTS_H

@ -117,3 +117,15 @@ bool ResourceManager::saveTextFile(const std::string &fileName, std::string text
{
return saveFile(fileName, (const unsigned char*)text.c_str(), text.size());
}
std::list<std::string> ResourceManager::getDirectoryFiles(const std::string& directory)
{
std::list<std::string> files;
char **rc = PHYSFS_enumerateFiles(directory.c_str());
for(char **i = rc; *i != NULL; i++)
files.push_back(*i);
PHYSFS_freeList(rc);
return files;
}

@ -63,6 +63,9 @@ public:
/// Save a text file into write directory
bool saveTextFile(const std::string &fileName, std::string text);
/// Get a list with all files in a directory
std::list<std::string> getDirectoryFiles(const std::string& directory);
};
extern ResourceManager g_resources;

@ -40,7 +40,7 @@ struct Win32PlatformPrivate {
int x, y;
int width, height;
int minWidth, minHeight;
bool maximized;
bool focused, visible, maximized;
} win32;
void Platform::init(const char *appName)
@ -302,6 +302,16 @@ void Platform::swapBuffers()
SwapBuffers(win32.hdc);
}
bool Platform::isWindowFocused()
{
return win32.focused;
}
bool Platform::isWindowVisible()
{
return win32.visible;
}
int Platform::getWindowX()
{
return win32.x;
@ -348,8 +358,15 @@ const char *Platform::getAppUserDir()
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
static int lastX, lastY;
switch(uMsg)
{
case WM_ACTIVATE:
{
win32.focused = !(wParam == WA_INACTIVE);
break;
}
case WM_CLOSE:
{
g_engine.onClose();
@ -364,6 +381,8 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
}
case WM_MOVE:
{
lastX = win32.x;
lastY = win32.y;
win32.x = LOWORD(lParam);
win32.y = HIWORD(lParam);
break;
@ -373,6 +392,8 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
switch(wParam)
{
case SIZE_MAXIMIZED:
win32.x = lastX;
win32.y = lastY;
win32.maximized = true;
break;
case SIZE_RESTORED:
@ -380,14 +401,19 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
break;
}
win32.width = LOWORD(lParam);
win32.height = HIWORD(lParam);
win32.visible = !(wParam == SIZE_MINIMIZED);
if(!win32.maximized) {
win32.width = LOWORD(lParam);
win32.height = HIWORD(lParam);
}
g_engine.onResize(LOWORD(lParam), HIWORD(lParam));
break;
}
default:
{
return DefWindowProc(hWnd,uMsg,wParam,lParam);
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
}
return 0;

@ -297,20 +297,27 @@ void Platform::poll()
switch(event.type) {
case ConfigureNotify:
// window resize
if(x11.width != event.xconfigure.width || x11.height != event.xconfigure.height) {
static int oldWidth = -1;
static int oldHeight = -1;
if(oldWidth != event.xconfigure.width || oldHeight != event.xconfigure.height) {
g_engine.onResize(event.xconfigure.width, event.xconfigure.height);
oldWidth = event.xconfigure.width;
oldHeight = event.xconfigure.height;
}
if(!isWindowMaximized()) {
x11.width = event.xconfigure.width;
x11.height = event.xconfigure.height;
g_engine.onResize(x11.width, x11.height);
}
// hack to fix x11 windows move gaps
static int gap_x = -1, gap_y = -1;
if(gap_x == -1 && gap_y == -1) {
gap_x = event.xconfigure.x;
gap_y = event.xconfigure.y;
// hack to fix x11 windows move gaps
static int gap_x = -1, gap_y = -1;
if(gap_x == -1 && gap_y == -1) {
gap_x = event.xconfigure.x;
gap_y = event.xconfigure.y;
}
x11.x = event.xconfigure.x - gap_x;
x11.y = event.xconfigure.y - gap_y;
}
x11.x = event.xconfigure.x - gap_x;
x11.y = event.xconfigure.y - gap_y;
break;
case KeyPress:

正在加载...
取消
保存