FLTK logo

[Library] r9020 - in branches/branch-3.0: include/fltk3 src/fltk3

FLTK matrix user chat room
(using Element browser app)   FLTK gitter user chat room   GitHub FLTK Project   FLTK News RSS Feed  
  FLTK Apps      FLTK Library      Forums      Links     Login 
 All Forums  |  Back to fltk.commit  ]
 
Previous Message ]Next Message ]

[Library] r9020 - in branches/branch-3.0: include/fltk3 src/fltk3 fltk-dev Aug 28, 2011  
 
Author: matt
Date: 2011-08-28 13:40:32 -0700 (Sun, 28 Aug 2011)
New Revision: 9020
Log:
Implemented Styles for two aspcts of a Widget (labelfont and labelsize).

Modified:
   branches/branch-3.0/include/fltk3/Style.h
   branches/branch-3.0/include/fltk3/Widget.h
   branches/branch-3.0/src/fltk3/Style.cxx
   branches/branch-3.0/src/fltk3/Widget.cxx
   branches/branch-3.0/src/fltk3/labeltype.cxx

Modified: branches/branch-3.0/include/fltk3/Style.h
===================================================================
--- branches/branch-3.0/include/fltk3/Style.h	2011-08-28 15:30:35 UTC (rev 9019)
+++ branches/branch-3.0/include/fltk3/Style.h	2011-08-28 20:40:32 UTC (rev 9020)
@@ -32,6 +32,51 @@
 #define FLTK3_STYLE_H
 
 
+#include "enumerations.h"
+
+
+namespace fltk3 {
+  
+  class Style {
+    
+  protected:
+    
+    static unsigned int current_;
+    
+    unsigned int version_;
+    Style *parent_;
+    
+    Font labelfont_;
+    Fontsize labelsize_;
+
+    unsigned int private_:1;
+    unsigned int labelfont_set_:1;
+    unsigned int labelsize_set_:1;
+    
+    void update();
+    void refresh() const { if (version_ != current_) ((Style*)this)->update(); }
+    void invalidate() { if (!private_) current_++; }
+    
+  public:
+    
+    Style();
+    Style(Style *parent);
+    ~Style();
+    
+    Font labelfont() const { refresh(); return labelfont_;}
+    void labelfont(fltk3::Font f) { labelfont_=f; labelfont_set_ = 1; invalidate(); }
+    void clear_labelfont() { labelfont_set_=0; invalidate(); }
+
+    Fontsize labelsize() const { refresh(); return labelsize_;}
+    void labelsize(fltk3::Fontsize s) { labelsize_=s; labelsize_set_ = 1; invalidate(); }
+    void clear_labelsize() { labelsize_set_=0; invalidate(); }
+
+    Style *make_private();
+  };
+
+  extern Style default_style;
+};
+
 #endif
 
 //

Modified: branches/branch-3.0/include/fltk3/Widget.h
===================================================================
--- branches/branch-3.0/include/fltk3/Widget.h	2011-08-28 15:30:35 UTC (rev 9019)
+++ branches/branch-3.0/include/fltk3/Widget.h	2011-08-28 20:40:32 UTC (rev 9020)
@@ -33,6 +33,7 @@
 
 #include "enumerations.h"
 #include "Rectangle.h"
+#include "Style.h"
 
 /**
  \todo	typedef's fl_intptr_t and fl_uintptr_t should be documented.
@@ -56,6 +57,7 @@
   class Window;
   class Image;
   class GLWindow;
+  class Style;
 
   /** Default callback type definition for all fltk widgets (by far the most used) */
   typedef void (Callback)(Widget*, void*);
@@ -74,17 +76,16 @@
    interface for very complex labels, containing html or vector graphics.
    */
   class FLTK3_EXPORT Label : public Rectangle {
+    
   protected:
+    /** use all repeating graphics information from the style - never NULL */
+    Style *style_;
     /** label text */
     const char* labeltext_;
     /** type of label. \see fltk3::Labeltype */
     uchar labeltype_;
     /** text color */
     fltk3::Color labelcolor_;
-    /** label font used in text */
-    fltk3::Font labelfont_;
-    /** size of label font */
-    fltk3::Fontsize labelsize_;
     /** alignment of label */
     fltk3::Align align_;
     /** various flags for the label and derived classes */
@@ -110,6 +111,14 @@
     
     ~Label();
     
+    /** Returns the current style. */
+    Style *style() { return style_; }
+    const Style *style() const { return style_; }
+    Style *private_style() { return (style_ = style_->make_private()); }
+    
+    /** Set the current style. */
+    void style(Style *s) { style_ = s; }
+    
     /** Draws the label aligned to the given box */
     void draw(int,int,int,int, fltk3::Align) const ;
     
@@ -169,7 +178,7 @@
      \return current font used by the label
      \see fltk3::Font
      */
-    fltk3::Font labelfont() const {return labelfont_;}
+    fltk3::Font labelfont() const {return style()->labelfont();}
     
     /** Sets the font to use. 
      Fonts are identified by indexes into a table. The default value
@@ -178,19 +187,19 @@
      \param[in] f the new font for the label
      \see fltk3::Font
      */
-    void labelfont(fltk3::Font f) {labelfont_=f;}
+    void labelfont(fltk3::Font f) {private_style()->labelfont(f);}
     
     /** Gets the font size in pixels. 
      The default size is 14 pixels.
      \return the current font size
      */
-    fltk3::Fontsize labelsize() const {return labelsize_;}
+    fltk3::Fontsize labelsize() const {return style()->labelsize();}
     
     /** Sets the font size in pixels.
      \param[in] pix the new font size
      \see fltk3::Fontsize labelsize()
      */
-    void labelsize(fltk3::Fontsize pix) {labelsize_=pix;}
+    void labelsize(fltk3::Fontsize pix) {private_style()->labelsize(pix);}
     
     /** Gets the label type.
      \return the current label type.

Modified: branches/branch-3.0/src/fltk3/Style.cxx
===================================================================
--- branches/branch-3.0/src/fltk3/Style.cxx	2011-08-28 15:30:35 UTC (rev 9019)
+++ branches/branch-3.0/src/fltk3/Style.cxx	2011-08-28 20:40:32 UTC (rev 9020)
@@ -27,8 +27,67 @@
 
 #include <fltk3/Style.h>
 
-// nothing to see here yet
+unsigned int fltk3::Style::current_ = 0;
 
+fltk3::Style fltk3::default_style;
+
+
+fltk3::Style::Style() :
+  version_(current_),
+  parent_(0),
+  labelfont_(fltk3::HELVETICA),
+  labelsize_(fltk3::NORMAL_SIZE),
+  private_(0),
+  labelfont_set_(1),
+  labelsize_set_(1)
+{
+}
+
+
+fltk3::Style::Style(Style *parent) :
+  version_(current_),
+  parent_(parent),
+  labelfont_(parent->labelfont_),
+  labelsize_(parent->labelsize_),
+  private_(0),
+  labelfont_set_(0),
+  labelsize_set_(0)
+{
+}
+
+
+fltk3::Style::~Style()
+{
+}
+
+
+fltk3::Style *fltk3::Style::make_private() 
+{
+  if (private_)
+    return this;
+  else {
+    Style *s = new Style(this);
+    s->private_ = 1;
+    return s;
+  }
+}
+
+
+void fltk3::Style::update()
+{
+  if (version_==current_ || parent_==0L)
+    return;
+  parent_->refresh();
+  
+  if (!labelfont_set_)
+    labelfont_ = parent_->labelfont_;
+  if (!labelsize_set_)
+    labelsize_ = parent_->labelsize_;
+  
+  version_ = current_;
+}
+
+
 //
 // End of "$Id$".
 //

Modified: branches/branch-3.0/src/fltk3/Widget.cxx
===================================================================
--- branches/branch-3.0/src/fltk3/Widget.cxx	2011-08-28 15:30:35 UTC (rev 9019)
+++ branches/branch-3.0/src/fltk3/Widget.cxx	2011-08-28 20:40:32 UTC (rev 9020)
@@ -106,11 +106,10 @@
 
 fltk3::Label::Label(int X, int Y, int W, int H, const char* L) 
 : fltk3::Rectangle(X, Y, W, H),
+  style_(&fltk3::default_style),
   labeltext_(L),
-labeltype_(fltk3::NORMAL_LABEL),
+  labeltype_(fltk3::NORMAL_LABEL),
   labelcolor_(fltk3::FOREGROUND_COLOR),
-  labelfont_(fltk3::HELVETICA),
-  labelsize_(fltk3::NORMAL_SIZE),
   align_(fltk3::ALIGN_CENTER),
   flags_(0),
   textfont_(0),
@@ -123,11 +122,10 @@
 
 fltk3::Label::Label(const fltk3::Label &s) 
 : fltk3::Rectangle(s),
+  style_(s.style_), // FIXME: do not just link to private styles
   labeltext_(0L),
   labeltype_(s.labeltype_),
   labelcolor_(s.labelcolor_),
-  labelfont_(s.labelfont_),
-  labelsize_(s.labelsize_),
   align_(s.align_),
   flags_(s.flags_),
   textfont_(s.textfont_),
@@ -147,10 +145,9 @@
 
 fltk3::Label::Label() 
 : fltk3::Rectangle(),
+  style_(&fltk3::default_style),
   labeltype_(fltk3::NORMAL_LABEL),
   labelcolor_(fltk3::FOREGROUND_COLOR),
-  labelfont_(fltk3::HELVETICA),
-  labelsize_(fltk3::NORMAL_SIZE),
   align_(fltk3::ALIGN_CENTER),
   flags_(0),
   textfont_(fltk3::HELVETICA),

Modified: branches/branch-3.0/src/fltk3/labeltype.cxx
===================================================================
--- branches/branch-3.0/src/fltk3/labeltype.cxx	2011-08-28 15:30:35 UTC (rev 9019)
+++ branches/branch-3.0/src/fltk3/labeltype.cxx	2011-08-28 20:40:32 UTC (rev 9020)
@@ -144,12 +144,14 @@
  */
 void fltk3::Widget::draw_label(int X, int Y, int W, int H, fltk3::Align a) const {
   if (flags()&SHORTCUT_LABEL) fltk3::draw_shortcut = 1;
-  fltk3::Label l1(*this);
   if (!active_r()) {
+    fltk3::Label l1(*this);
     l1.labelcolor( fltk3::inactive((fltk3::Color)l1.labelcolor()) );
     if (l1.deimage()) l1.image(l1.deimage());
+    l1.draw(X,Y,W,H,a);
+  } else {
+    Label::draw(X,Y,W,H,a);
   }
-  l1.draw(X,Y,W,H,a);
   fltk3::draw_shortcut = 0;
 }
 

Direct Link to Message ]
 
     
Previous Message ]Next Message ]
 
 

Comments are owned by the poster. All other content is copyright 1998-2024 by Bill Spitzak and others. This project is hosted by The FLTK Team. Please report site problems to 'erco@seriss.com'.