]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - c++/cursespad.cc
ncurses 5.9 - patch 20130406
[ncurses.git] / c++ / cursespad.cc
index 3685c5e5b35fc4c4977a6130ba2703c7d238d546..a5347137fbbabfa255d36c6d6702fb315e26bfc7 100644 (file)
@@ -1,6 +1,6 @@
 // * this is for making emacs happy: -*-Mode: C++;-*-
 /****************************************************************************
 // * this is for making emacs happy: -*-Mode: C++;-*-
 /****************************************************************************
- * Copyright (c) 1998-2005,2007 Free Software Foundation, Inc.              *
+ * Copyright (c) 1998-2012,2013 Free Software Foundation, Inc.              *
  *                                                                          *
  * Permission is hereby granted, free of charge, to any person obtaining a  *
  * copy of this software and associated documentation files (the            *
  *                                                                          *
  * Permission is hereby granted, free of charge, to any person obtaining a  *
  * copy of this software and associated documentation files (the            *
 
 #include "internal.h"
 
 
 #include "internal.h"
 
-#include <etip.h>
 #include <cursesw.h>
 
 #include <cursesw.h>
 
-MODULE_ID("$Id: cursespad.cc,v 1.12 2007/04/07 18:43:54 tom Exp $")
+MODULE_ID("$Id: cursespad.cc,v 1.17 2013/03/30 19:45:36 tom Exp $")
 
 NCursesPad::NCursesPad(int nlines, int ncols)
   : NCursesWindow(),
 
 NCursesPad::NCursesPad(int nlines, int ncols)
   : NCursesWindow(),
@@ -212,6 +211,7 @@ void NCursesPad::setSubWindow(NCursesWindow& sub)
 {
   if (static_cast<NCursesWindow*>(0) == viewWin)
     err_handler("Pad has no viewport");
 {
   if (static_cast<NCursesWindow*>(0) == viewWin)
     err_handler("Pad has no viewport");
+  assert(viewWin != 0);
   if (!viewWin->isDescendant(sub))
     THROW(new NCursesException("NCursesFramePad", E_SYSTEM_ERROR));
   viewSub = &sub;
   if (!viewWin->isDescendant(sub))
     THROW(new NCursesException("NCursesFramePad", E_SYSTEM_ERROR));
   viewSub = &sub;
@@ -219,6 +219,7 @@ void NCursesPad::setSubWindow(NCursesWindow& sub)
 
 void NCursesFramedPad::OnOperation(int pad_req)
 {
 
 void NCursesFramedPad::OnOperation(int pad_req)
 {
+  (void) pad_req;
   NCursesWindow* W = Win();
   NCursesWindow* W2 = getWindow();
 
   NCursesWindow* W = Win();
   NCursesWindow* W2 = getWindow();
 
@@ -227,25 +228,45 @@ void NCursesFramedPad::OnOperation(int pad_req)
     int Height = W->height();
     int i, row, col, h_len, v_len;
 
     int Height = W->height();
     int i, row, col, h_len, v_len;
 
-    h_len = (Width*Width + width() - 1)/width();
-    if (h_len==0)
+    int my_width = width();
+
+    if (my_width != 0) {
+      h_len = (Width*Width + my_width - 1) / my_width;
+      if (h_len==0)
+       h_len = 1;
+      if (h_len > Width)
+       h_len = Width;
+    } else {
       h_len = 1;
       h_len = 1;
-    if (h_len > Width)
-      h_len = Width;
+    }
+
+    int my_height = height();
 
 
-    v_len = (Height*Height + height() - 1)/height();
-    if (v_len==0)
+    if (my_height != 0) {
+      v_len = (Height*Height + my_height - 1) / my_height;
+      if (v_len==0)
+       v_len = 1;
+      if (v_len > Height)
+       v_len = Height;
+    } else {
       v_len = 1;
       v_len = 1;
-    if (v_len > Height)
-      v_len = Height;
+    }
 
 
-    col  = (min_col * Width + width() - 1)  / width();
-    if (col + h_len > Width)
-      col = Width - h_len;
+    if (my_width != 0) {
+      col  = (min_col * Width + my_width - 1) / my_width;
+      if (col + h_len > Width)
+        col = Width - h_len;
+    } else {
+      col = 0;
+    }
 
 
-    row  = (min_row * Height + height() - 1) / height();
-    if (row + v_len > Height)
-      row = Height - v_len;
+    if (my_height != 0) {
+      row  = (min_row * Height + my_height - 1) / my_height;
+      if (row + v_len > Height)
+        row = Height - v_len;
+    } else {
+      row = 0;
+    }
 
     W2->vline(1,Width+1,Height);
     W2->attron(A_REVERSE);
 
     W2->vline(1,Width+1,Height);
     W2->attron(A_REVERSE);