소스 검색

Merge branch 'dev' into refact-stdren

# Conflicts:
#	oxygine/src/STDMaterial.cpp
dmuratshin 9 년 전
부모
커밋
9cd0c3df39

+ 2 - 1
oxygine/src/TextField.h

@@ -85,7 +85,8 @@ namespace oxygine
         /**Changes text widestring*/
         void setText(const std::wstring& str);
         /**Changes text.
-        Supports html style tags:  <br/> - break line,  <div color='FFFFFF'/>colored text </div>, <div c='FFFFFF'/>colored text</div>
+        Supports pseudo html style tags:  <br/> - break line,  <div color='FFFFFF'/>colored text </div>, <div c='FFFFFF'/>colored text</div>,
+        in pair with oxygine-freetype you may use 'opt': <div opt=123>custom option</div>, <div c='ffffff' opt=123>custom option with color</div>
         example:
         This is <div c='ff0000'/> colored text <div/>supports  <div c='00ff00AA'/>nested tags</div><br/> with broken line.
         */

+ 5 - 3
oxygine/src/core/oxygine.cpp

@@ -433,9 +433,6 @@ namespace oxygine
 
 #endif
 
-#ifndef OX_NO_MT
-            _mainThread = pthread_self();
-#endif
             init2();
 
             return 1;
@@ -444,6 +441,11 @@ namespace oxygine
 
         void init2()
         {
+
+#ifndef OX_NO_MT
+            _mainThread = pthread_self();
+#endif
+
             if (!_dispatcher)
                 _dispatcher = new EventDispatcher;
 

+ 2 - 2
oxygine/src/math/ScalarMath.h

@@ -79,12 +79,12 @@ namespace oxygine
         inline float sqrt(int s)
         {return ::sqrtf((float)s);}
 
-        inline bool equivalent(double a, double b, const double eps = 10e-8)
+        inline bool equal(double a, double b, const double eps = 10e-8)
         {
             return ((a < b + eps) && (a > b - eps)) ? true : false;
         }
 
-        inline bool equivalent(float a, float b, const float eps = (float)(10e-6))
+        inline bool equal(float a, float b, const float eps = (float)(10e-6))
         {
             return ((a < b + eps) && (a > b - eps)) ? true : false;
         }

+ 1 - 0
oxygine/src/text_utils/Aligner.cpp

@@ -13,6 +13,7 @@ namespace oxygine
             //log::messageln("gscale %f, adjScale %f globscale %f, %d %f", gscale, _globalScale, _fontSize, fs);
             _line.reserve(50);
             _lineSkip = (int)(_font->getBaselineDistance() * style.baselineScale) + style.linesOffset;
+            options = Style.options;
         }
 
         Aligner::~Aligner()

+ 1 - 0
oxygine/src/text_utils/Aligner.h

@@ -45,6 +45,7 @@ namespace oxygine
             Rect bounds;
             int width;
             int height;
+            int options;
 
 
             const Font* _font;

+ 27 - 19
oxygine/src/text_utils/Node.cpp

@@ -41,8 +41,13 @@ namespace oxygine
 
         void Node::resize(Aligner& rd)
         {
-            _resize(rd);
+            xresize(rd);
 
+            resizeChildren(rd);
+        }
+
+        void Node::resizeChildren(Aligner& rd)
+        {
             Node* child = _firstChild;
             while (child)
             {
@@ -53,7 +58,7 @@ namespace oxygine
 
         void Node::finalPass(Aligner& rd)
         {
-            _finalPass(rd);
+            xfinalPass(rd);
 
             Node* child = _firstChild;
             while (child)
@@ -162,13 +167,14 @@ namespace oxygine
             _defMissing = v;
         }
 
-        void TextNode::_resize(Aligner& rd)
+        void TextNode::xresize(Aligner& rd)
         {
             if (!_data.empty())
             {
                 int i = 0;
                 const Font* font = rd._font;
-                glyphOptions opt = rd.getStyle().options;
+
+                const int opt = rd.options;
 
                 while (i != (int)_data.size())
                 {
@@ -206,7 +212,7 @@ namespace oxygine
             return x / sf;
         }
 
-        void TextNode::_finalPass(Aligner& rd)
+        void TextNode::xfinalPass(Aligner& rd)
         {
             float scaleFactor = rd.getScale();
 
@@ -221,30 +227,27 @@ namespace oxygine
                     s.destRect = RectF(mlt(s.x, scaleFactor), mlt(s.y, scaleFactor), mlt(s.gl.sw, scaleFactor), mlt(s.gl.sh, scaleFactor));
                 else
                     s.destRect = RectF(0, 0, 0, 0);
-
-                //s.destRect.size = Vector2(4.26666666f, 7.46666666f);
             }
         }
 
-        void DivNode::_resize(Aligner& rd)
+        void DivNode::resize(Aligner& rd)
         {
+            if (options == -1)
+            {
+                resizeChildren(rd);
+                return;
+            }
 
+            unsigned int prevOpt = rd.options;
+            rd.options = options;
+            resizeChildren(rd);
+            rd.options = prevOpt;
         }
 
         void DivNode::draw(DrawContext& dc)
         {
-            /*
-            Color prevColor = dc.renderer->getPrimaryColor();
-
-            Color blendedColor = color;
-            blendedColor.a = (blendedColor.a * dc.rs->alpha) / 255;
-
-            dc.renderer->setPrimaryColor(blendedColor);
-            drawChildren(dc);
-            dc.renderer->setPrimaryColor(prevColor);
-            */
-
             Color prev = dc.color;
+
             dc.color = color * dc.primary;
             drawChildren(dc);
             dc.color = prev;
@@ -252,6 +255,7 @@ namespace oxygine
 
         DivNode::DivNode(const pugi::xml_node& node)
         {
+            options = -1;
             pugi::xml_attribute attr = node.first_attribute();
             while (attr)
             {
@@ -260,6 +264,10 @@ namespace oxygine
                 {
                     color = hex2color(attr.value());
                 }
+                else if (!strcmp(attr.name(), "opt"))
+                {
+                    options = attr.as_uint();
+                }
                 attr = attr.next_attribute();
             }
         }

+ 11 - 7
oxygine/src/text_utils/Node.h

@@ -45,15 +45,17 @@ namespace oxygine
             virtual ~Node();
 
             void appendNode(Node* tn);
-            void resize(Aligner& rd);
+            virtual void resize(Aligner& rd);
             void finalPass(Aligner& rd);
+
             void drawChildren(DrawContext& dc);
+            void resizeChildren(Aligner& rd);
             virtual Symbol* getSymbol(int& pos);
 
             virtual void draw(DrawContext& dc);
 
-            virtual void _resize(Aligner& rd) {}
-            virtual void _finalPass(Aligner& rd) {}
+            virtual void xresize(Aligner& rd) {}
+            virtual void xfinalPass(Aligner& rd) {}
 
 
             Node* _firstChild;
@@ -69,8 +71,8 @@ namespace oxygine
             TextNode(const char* v);
 
             text_data _data;
-            void _resize(Aligner& rd) override;
-            void _finalPass(Aligner& rd) override;
+            void xresize(Aligner& rd) override;
+            void xfinalPass(Aligner& rd) override;
             void draw(DrawContext& dc) override;
 
             Symbol* getSymbol(int& pos) override;
@@ -84,16 +86,18 @@ namespace oxygine
         {
         public:
             DivNode(const pugi::xml_node& node);
-            void _resize(Aligner& rd) override;
+
+            void resize(Aligner& rd) override;
             void draw(DrawContext& dc) override;
 
             Color color;
+            unsigned int options;
         };
 
         class BrNode: public Node
         {
         public:
-            void _resize(Aligner& rd)
+            void xresize(Aligner& rd)
             {
                 rd.nextLine();
             }