From fdf9da706f1f7fd3df4b66042e207e5208862bdc Mon Sep 17 00:00:00 2001 From: nkorslund Date: Mon, 2 Feb 2009 13:07:38 +0000 Subject: [PATCH] More work on the GUI. Tried (and failed) to make the fonts work. git-svn-id: https://openmw.svn.sourceforge.net/svnroot/openmw/trunk@85 ea6a568a-9f4f-0410-981a-c910a81bb256 --- core/config.d | 2 + fonts/fntfile.d | 146 ------------------ {MyGUI_Media => media_mygui}/Comic.TTF | Bin {MyGUI_Media => media_mygui}/black.png | Bin {MyGUI_Media => media_mygui}/core.font | 2 +- {MyGUI_Media => media_mygui}/core.lang | 0 {MyGUI_Media => media_mygui}/core.layer | 0 {MyGUI_Media => media_mygui}/core.png | Bin {MyGUI_Media => media_mygui}/core.pointer | 0 {MyGUI_Media => media_mygui}/core.skin | 0 {MyGUI_Media => media_mygui}/core.xml | 4 +- media_mygui/mwpointer.png | Bin 0 -> 4810 bytes media_mygui/openmw.font | 43 ++++++ media_mygui/openmw.pointer | 13 ++ media_mygui/openmw_button.skin | 71 +++++++++ .../openmw_windows.skin | 119 ++++++++++---- mscripts/gameobjects/inventoryitem.mn | 3 + ogre/bindings.d | 5 + ogre/cpp_interface.cpp | 77 ++++----- ogre/cpp_mygui.cpp | 29 ++-- ogre/ogre.d | 3 + 21 files changed, 280 insertions(+), 237 deletions(-) delete mode 100644 fonts/fntfile.d rename {MyGUI_Media => media_mygui}/Comic.TTF (100%) rename {MyGUI_Media => media_mygui}/black.png (100%) rename {MyGUI_Media => media_mygui}/core.font (80%) rename {MyGUI_Media => media_mygui}/core.lang (100%) rename {MyGUI_Media => media_mygui}/core.layer (100%) rename {MyGUI_Media => media_mygui}/core.png (100%) rename {MyGUI_Media => media_mygui}/core.pointer (100%) rename {MyGUI_Media => media_mygui}/core.skin (100%) rename {MyGUI_Media => media_mygui}/core.xml (67%) create mode 100644 media_mygui/mwpointer.png create mode 100644 media_mygui/openmw.font create mode 100644 media_mygui/openmw.pointer create mode 100644 media_mygui/openmw_button.skin rename {MyGUI_Media => media_mygui}/openmw_windows.skin (68%) diff --git a/core/config.d b/core/config.d index 8c0f877e4..ae07e6100 100644 --- a/core/config.d +++ b/core/config.d @@ -90,6 +90,7 @@ struct ConfigManager char[] esmDir; char[] bsaDir; char[] sndDir; + char[] fontDir; char[] musDir; // Explore music char[] musDir2; // Battle music @@ -266,6 +267,7 @@ struct ConfigManager bsaDir = dataDir; esmDir = dataDir; sndDir = dataDir ~ "Sound/"; + fontDir = dataDir ~ "Fonts/"; musDir = dataDir ~ "Music/Explore/"; musDir2 = dataDir ~ "Music/Battle/"; diff --git a/fonts/fntfile.d b/fonts/fntfile.d deleted file mode 100644 index 798095374..000000000 --- a/fonts/fntfile.d +++ /dev/null @@ -1,146 +0,0 @@ - -/* - Font loader for the Morrowind .FNT/.TEX font file pair. The current - code has just been used for testing purposes and to decode the file - format. To make it work with MyGUI, we will have to cooperate with a - custom sub-class of the MyGUI::Font class in C++. - */ -module fonts.fntfile; - -import std.stream; - -import monster.util.string; - -align(1) -struct FntEntry -{ - // Positions, as fractions of the entire texture surface. The - // xstart2 etc values are just repeated information. The reason for - // this is that the characters are stored as four points, with an - // (x,y) coordinate each. Since all the rectangles are aligned with - // the image however, this is pretty redundant information. - - float xstart, ystart; - float xend; - float ystart2, xstart2; - float yend; - float xend2, yend2; - - float width; - float height; - int zero1; // Empty heigth? (always zero) - float emptyWidth; // Width for empty characters - float unk2; // Vertical displacement? - int zero2; // Horizontal displacement? - - bool isUsed() { return width != 0; } -} -static assert(FntEntry.sizeof == 56); - -align(1) -struct FntFile -{ - float size; - int unk2, unk3; - char[128] texname; - - ubyte[160] filler; // Makes the header exactly 300 bytes long - - FntEntry[255] chars; -} - -align(1) -union Color -{ - ubyte[4] rgba; - uint val; -} -static assert(Color.sizeof == 4); - -// One character -struct Char -{ - Color[][] pixels; - bool isUsed; - int width, height; - char chr; -} - -FntFile fnt; -Char[255] chars; - -// Load a fnt-file -void loadFont(char[] fntFile) -{ - assert(iEnds(fntFile, ".fnt"), - "loadFont() can only load .fnt files"); - - File s = new File(fntFile); - s.readExact(&fnt, fnt.sizeof); - s.close(); - - // Load the .tex file - int texWidth, texHeight; - char[] tfile = stripz(fnt.texname)~".tex"; - // DIRTY hack since we can't do case-insensitive file searching yet - if(tfile[0] == 'D') tfile[0] = 'd'; - s.open(tfile); - s.read(texWidth); - s.read(texHeight); - assert(s.size() == 4*(texWidth*texHeight + 2)); - - ubyte[] buf; - buf.length = s.size - s.position; - s.readExact(buf.ptr, buf.length); - delete s; - - // Get the pixel buffer as a series of ints - uint[] pixelBuf = cast(uint[]) buf; - - foreach(i, ch; fnt.chars) - with(chars[i]) - { - // Store the char, if it is printable - if(i > 33 && i < 127) - chr = i; - else chr = ' '; - - // Store the pixel dimensions - isUsed = ch.isUsed; - height = cast(int)ch.height; - if(isUsed) - width = cast(int)ch.width; - else - width = cast(int)ch.emptyWidth; - - assert(ch.emptyWidth == 0 || ch.emptyWidth == -1 || !isUsed); - assert(ch.zero1 == 0); - assert(ch.zero2 == 0); - assert(ch.xstart2 == ch.xstart); - assert(ch.ystart2 == ch.ystart); - assert(ch.xend2 == ch.xend); - assert(ch.yend2 == ch.yend); - - // If the character is not present, skip to the next one now. - if(!isUsed) continue; - - // Get the pixel coordinates of this character - int startX = cast(int) (ch.xstart * texWidth); - int startY = cast(int) (ch.ystart * texHeight); - int endX = cast(int) (ch.xend * texWidth); - int endY = cast(int) (ch.yend * texHeight); - - assert(endX-startX == width); - assert(endY-startY == height); - - // Set up the pixel array - pixels.length = height; - foreach(line, ref slice; pixels) - { - // First pixel in the line - int strt = texWidth*(startY+line) + startX; - // Get a slice of the pixel data - slice = cast(Color[])pixelBuf[strt..strt+width]; - } - } -} diff --git a/MyGUI_Media/Comic.TTF b/media_mygui/Comic.TTF similarity index 100% rename from MyGUI_Media/Comic.TTF rename to media_mygui/Comic.TTF diff --git a/MyGUI_Media/black.png b/media_mygui/black.png similarity index 100% rename from MyGUI_Media/black.png rename to media_mygui/black.png diff --git a/MyGUI_Media/core.font b/media_mygui/core.font similarity index 80% rename from MyGUI_Media/core.font rename to media_mygui/core.font index 36da17b0a..3ff0c3be6 100644 --- a/MyGUI_Media/core.font +++ b/media_mygui/core.font @@ -1,7 +1,7 @@  - + diff --git a/MyGUI_Media/core.lang b/media_mygui/core.lang similarity index 100% rename from MyGUI_Media/core.lang rename to media_mygui/core.lang diff --git a/MyGUI_Media/core.layer b/media_mygui/core.layer similarity index 100% rename from MyGUI_Media/core.layer rename to media_mygui/core.layer diff --git a/MyGUI_Media/core.png b/media_mygui/core.png similarity index 100% rename from MyGUI_Media/core.png rename to media_mygui/core.png diff --git a/MyGUI_Media/core.pointer b/media_mygui/core.pointer similarity index 100% rename from MyGUI_Media/core.pointer rename to media_mygui/core.pointer diff --git a/MyGUI_Media/core.skin b/media_mygui/core.skin similarity index 100% rename from MyGUI_Media/core.skin rename to media_mygui/core.skin diff --git a/MyGUI_Media/core.xml b/media_mygui/core.xml similarity index 67% rename from MyGUI_Media/core.xml rename to media_mygui/core.xml index ee4c539f5..f7439be0b 100644 --- a/MyGUI_Media/core.xml +++ b/media_mygui/core.xml @@ -7,10 +7,12 @@ - + + + diff --git a/media_mygui/mwpointer.png b/media_mygui/mwpointer.png new file mode 100644 index 0000000000000000000000000000000000000000..90bc19b5e2c7ea4f30b895cc5b8cde00ce460e98 GIT binary patch literal 4810 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 literal 0 HcmV?d00001 diff --git a/media_mygui/openmw.font b/media_mygui/openmw.font new file mode 100644 index 000000000..9baccc7c5 --- /dev/null +++ b/media_mygui/openmw.font @@ -0,0 +1,43 @@ + + + + + diff --git a/media_mygui/openmw.pointer b/media_mygui/openmw.pointer new file mode 100644 index 000000000..0d77c878d --- /dev/null +++ b/media_mygui/openmw.pointer @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/media_mygui/openmw_button.skin b/media_mygui/openmw_button.skin new file mode 100644 index 000000000..036202485 --- /dev/null +++ b/media_mygui/openmw_button.skin @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/MyGUI_Media/openmw_windows.skin b/media_mygui/openmw_windows.skin similarity index 68% rename from MyGUI_Media/openmw_windows.skin rename to media_mygui/openmw_windows.skin index 769f428f1..10ea2bec9 100644 --- a/MyGUI_Media/openmw_windows.skin +++ b/media_mygui/openmw_windows.skin @@ -10,28 +10,28 @@ - + - + - + - + @@ -39,30 +39,73 @@ - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -116,20 +159,24 @@ - - - - - - - - - + + + + + + + + + - + @@ -141,22 +188,28 @@ - - - - - - + + + + + + + + - + - + @@ -187,6 +240,14 @@ + + + + + + + + @@ -202,13 +263,9 @@ - -