emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 7c50fb248d: Improve display of Haiku font dialog


From: Po Lu
Subject: master 7c50fb248d: Improve display of Haiku font dialog
Date: Sun, 1 May 2022 04:54:59 -0400 (EDT)

branch: master
commit 7c50fb248d83ac02331fa717ebad96f1d56d5575
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>

    Improve display of Haiku font dialog
    
    * src/haiku_support.cc (EmacsFontSelectionDialog)
    (class EmacsFontSelectionDialog, FrameResized): Set minimum size
    based on individual view dimensions and add label to size
    control.
    (BWindow_set_min_size): Delete function.
    * src/haiku_support.h: Update prototypes.
    * src/haikuterm.c (haiku_update_size_hints): Stop setting min
    size, since that doesn't work correctly on Haiku.
---
 src/haiku_support.cc | 35 +++++++++++++++++++----------------
 src/haiku_support.h  |  1 -
 src/haikuterm.c      | 16 ++++------------
 3 files changed, 23 insertions(+), 29 deletions(-)

diff --git a/src/haiku_support.cc b/src/haiku_support.cc
index d8a064ccac..67b7e143bf 100644
--- a/src/haiku_support.cc
+++ b/src/haiku_support.cc
@@ -2565,7 +2565,7 @@ public:
     : BWindow (BRect (0, 0, 500, 500),
               "Select font from list",
               B_TITLED_WINDOW_LOOK,
-              B_NORMAL_WINDOW_FEEL, 0),
+              B_MODAL_APP_WINDOW_FEEL, 0),
       basic_view (NULL, 0),
       font_family_pane (BRect (0, 0, 10, 10), NULL,
                        B_SINGLE_SELECTION_LIST,
@@ -2584,14 +2584,15 @@ public:
       cancel_button ("Cancel", "Cancel",
                     new BMessage (B_CANCEL)),
       ok_button ("OK", "OK", new BMessage (B_OK)),
-      size_entry (NULL, NULL, NULL, NULL),
+      size_entry (NULL, "Size:", NULL, NULL),
       allow_monospace_only (monospace_only)
   {
     BStringItem *family_item;
     int i, n_families;
     font_family name;
-    uint32 flags;
+    uint32 flags, c;
     BMessage *selection;
+    BTextView *size_text;
 
     AddChild (&basic_view);
 
@@ -2638,12 +2639,20 @@ public:
            font_family_pane.AddItem (family_item);
          }
       }
+
+    size_text = size_entry.TextView ();
+
+    for (c = 0; c <= 47; ++c)
+      size_text->DisallowChar (c);
+
+    for (c = 58; c <= 127; ++c)
+      size_text->DisallowChar (c);
   }
 
   void
   FrameResized (float new_width, float new_height)
   {
-    BRect frame = Frame ();
+    BRect frame;
     float ok_height, ok_width;
     float cancel_height, cancel_width;
     float size_width, size_height;
@@ -2658,6 +2667,10 @@ public:
     max_height = std::max (std::max (ok_height, cancel_height),
                           size_height);
 
+    SetSizeLimits (cancel_width + ok_width + size_width + 6,
+                  65535, max_height + 64, 65535);
+    frame = Frame ();
+
     basic_view.ResizeTo (BE_RECT_WIDTH (frame), BE_RECT_HEIGHT (frame));
     split_view.ResizeTo (BE_RECT_WIDTH (frame),
                         BE_RECT_HEIGHT (frame) - 4 - max_height);
@@ -2673,7 +2686,8 @@ public:
 
     ok_button.ResizeTo (ok_width, ok_height);
     cancel_button.ResizeTo (cancel_width, cancel_height);
-    size_entry.ResizeTo (BE_RECT_WIDTH (frame) / 6,
+    size_entry.ResizeTo (std::max (size_width,
+                                  BE_RECT_WIDTH (frame) / 4),
                         size_height);
   }
 
@@ -4405,17 +4419,6 @@ be_get_display_screens (void)
 }
 
 /* Set the minimum width the user can resize WINDOW to.  */
-void
-BWindow_set_min_size (void *window, int width, int height)
-{
-  BWindow *w = (BWindow *) window;
-
-  if (!w->LockLooper ())
-    gui_abort ("Failed to lock window looper setting min size");
-  w->SetSizeLimits (width, -1, height, -1);
-  w->UnlockLooper ();
-}
-
 /* Synchronize WINDOW's connection to the App Server.  */
 void
 BWindow_sync (void *window)
diff --git a/src/haiku_support.h b/src/haiku_support.h
index c9b408589f..5522468fb3 100644
--- a/src/haiku_support.h
+++ b/src/haiku_support.h
@@ -468,7 +468,6 @@ extern void BWindow_change_decoration (void *, int);
 extern void BWindow_set_tooltip_decoration (void *);
 extern void BWindow_set_avoid_focus (void *, int);
 extern void BWindow_zoom (void *);
-extern void BWindow_set_min_size (void *, int, int);
 extern void BWindow_set_size_alignment (void *, int, int);
 extern void BWindow_sync (void *);
 extern void BWindow_send_behind (void *, void *);
diff --git a/src/haikuterm.c b/src/haikuterm.c
index 1dbe3598ff..bdec82db7a 100644
--- a/src/haikuterm.c
+++ b/src/haikuterm.c
@@ -144,23 +144,15 @@ get_string_resource (void *ignored, const char *name, 
const char *class)
 static void
 haiku_update_size_hints (struct frame *f)
 {
-  int base_width, base_height;
-  eassert (FRAME_HAIKU_P (f) && FRAME_HAIKU_WINDOW (f));
-
   if (f->tooltip)
     return;
 
-  base_width = FRAME_TEXT_COLS_TO_PIXEL_WIDTH (f, 0);
-  base_height = FRAME_TEXT_LINES_TO_PIXEL_HEIGHT (f, 0);
-
   block_input ();
   BWindow_set_size_alignment (FRAME_HAIKU_WINDOW (f),
-                             frame_resize_pixelwise ? 1 : FRAME_COLUMN_WIDTH 
(f),
-                             frame_resize_pixelwise ? 1 : FRAME_LINE_HEIGHT 
(f));
-  BWindow_set_min_size (FRAME_HAIKU_WINDOW (f), base_width,
-                       base_height
-                       + FRAME_TOOL_BAR_HEIGHT (f)
-                       + FRAME_MENU_BAR_HEIGHT (f));
+                             (frame_resize_pixelwise
+                              ? 1 : FRAME_COLUMN_WIDTH (f)),
+                             (frame_resize_pixelwise
+                              ? 1 : FRAME_LINE_HEIGHT (f)));
   unblock_input ();
 }
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]