]> Dogcows Code - chaz/openbox/commitdiff
working popups for moving/resizing
authorDana Jansens <danakj@orodu.net>
Thu, 30 Jan 2003 21:11:04 +0000 (21:11 +0000)
committerDana Jansens <danakj@orodu.net>
Thu, 30 Jan 2003 21:11:04 +0000 (21:11 +0000)
otk/focuslabel.cc
otk/focuslabel.hh
otk/label.cc
otk/label.hh
scripts/focus.py
src/client.hh

index 6d034794a3973d20847688ab2f5174a085d9c5bf..6d7d5c314cf6d12a21bf7e402e5ccfe1c6ec5c90 100644 (file)
@@ -29,10 +29,37 @@ void FocusLabel::setStyle(RenderStyle *style)
   setUnfocusTexture(style->labelUnfocusBackground());
 }
 
+void FocusLabel::fitString(const std::string &str)
+{
+  const Font *ft = style()->labelFont();
+  fitSize(ft->measureString(str), ft->height());
+}
+
+void FocusLabel::fitSize(int w, int h)
+{
+  unsigned int sidemargin = style()->bevelWidth() * 2;
+  resize(w + sidemargin * 2, h);
+}
+
+void FocusLabel::update()
+{
+  if (_dirty) {
+    int w = _rect.width(), h = _rect.height();
+    const Font *ft = style()->labelFont();
+    unsigned int sidemargin = style()->bevelWidth() * 2;
+    if (!_fixed_width)
+      w = ft->measureString(_text) + sidemargin * 2;
+    if (!_fixed_height)
+      h = ft->height();
+    internalResize(w, h);
+  }
+  FocusWidget::update();
+}
+
 
 void FocusLabel::renderForeground()
 {
-  otk::Widget::renderForeground();
+  FocusWidget::renderForeground();
 
   const Font *ft = style()->labelFont();
   RenderColor *text_color = (isFocused() ? style()->textFocusColor()
index 8db444d36d47cc2cd872425b96394c02c6b9c6b8..c25ab29c95175971c4546e9404b2bb146b352116 100644 (file)
@@ -18,6 +18,11 @@ public:
 
   virtual void renderForeground();
 
+  virtual void update();
+
+  void fitString(const std::string &str);
+  void fitSize(int w, int h);
+
   virtual void setStyle(RenderStyle *style);
   
 private:
index bb8083ab697ebf91e7f61d8bd0e1b8d67ec74878..fa5fefff2484666b9f02f23d121a4f152e5f412e 100644 (file)
@@ -25,10 +25,37 @@ void Label::setStyle(RenderStyle *style)
   setTexture(style->labelUnfocusBackground());
 }
 
+void Label::fitString(const std::string &str)
+{
+  const Font *ft = style()->labelFont();
+  fitSize(ft->measureString(str), ft->height());
+}
+
+void Label::fitSize(int w, int h)
+{
+  unsigned int sidemargin = style()->bevelWidth() * 2;
+  resize(w + sidemargin * 2, h);
+}
+
+void Label::update()
+{
+  if (_dirty) {
+    int w = _rect.width(), h = _rect.height();
+    const Font *ft = style()->labelFont();
+    unsigned int sidemargin = style()->bevelWidth() * 2;
+    if (!_fixed_width)
+      w = ft->measureString(_text) + sidemargin * 2;
+    if (!_fixed_height)
+      h = ft->height();
+    internalResize(w, h);
+  }
+  Widget::update();
+}
+
 
 void Label::renderForeground(void)
 {
-  otk::Widget::renderForeground();
+  Widget::renderForeground();
 
   const Font *ft = style()->labelFont();
   unsigned int sidemargin = style()->bevelWidth() * 2;
index e24858f19fe731ef91db71afae7c6bc04def9a58..9c32e544936ea0ebc414633814572690eec585e4 100644 (file)
@@ -18,6 +18,11 @@ public:
 
   virtual void renderForeground(void);
 
+  virtual void update();
+
+  void fitString(const std::string &str);
+  void fitSize(int w, int h);
+
   virtual void setStyle(RenderStyle *style);
 
 private:
index 5ae40cf273e483aa7cb71295a0d7d8beef15e398..adba37258fb89ed93a885e010b9165c9abad065e 100644 (file)
@@ -203,12 +203,12 @@ def _create_popup_list(data):
                 t = t[:24] + "..." + t[-24:]
             titles.append(t)
             _list_windows.append(c)
-            l = font.measureString(t) + 10 # add margin
+            l = font.measureString(t)
             if l > longest: longest = l
     if len(titles) > 1:
         for t in titles:
             w = otk.FocusLabel(_list_widget)
-            w.resize(longest, height)
+            w.fitSize(longest, height)
             w.setText(t)
             w.unfocus()
             _list_labels.append(w)
index 2a55d992f7fb9b0d9e9a36a8fff2cb11bf157c98..e70dc268b482480a7357e15ffd286ca315d4397a 100644 (file)
@@ -569,6 +569,15 @@ BB    @param window The window id that the Client class should handle
   //! Returns the window's stacking layer
   inline StackLayer layer() const { return _layer; }
 
+  //! Returns the logical size of the window
+  /*!
+    The "logical" size of the window is refers to the user's perception of the
+    size of the window, and is the value that should be displayed to the user.
+    For example, with xterms, this value it the number of characters being
+    displayed in the terminal, instead of the number of pixels.
+  */
+  const otk::Point &logicalSize() const { return _logical_size; }
+
   //! Applies the states requested when the window mapped
   /*!
     This should be called only once, during the window mapping process. It
This page took 0.028431 seconds and 4 git commands to generate.