X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=c%2B%2B%2Fcursespad.cc;h=a5347137fbbabfa255d36c6d6702fb315e26bfc7;hp=b5690a3e303a2dadba12ef8ce8874cc751cba816;hb=4bbfbf869d8c913cb0f5f30708b0bcb5d1724b96;hpb=f3eb40315f9e5eff503a172aed6d325b4e1f20c6 diff --git a/c++/cursespad.cc b/c++/cursespad.cc index b5690a3e..a5347137 100644 --- a/c++/cursespad.cc +++ b/c++/cursespad.cc @@ -1,6 +1,6 @@ // * this is for making emacs happy: -*-Mode: C++;-*- /**************************************************************************** - * Copyright (c) 1998-2008,2011 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 * @@ -33,10 +33,9 @@ #include "internal.h" -#include #include -MODULE_ID("$Id: cursespad.cc,v 1.14 2011/09/17 22:12:10 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(), @@ -229,25 +228,45 @@ void NCursesFramedPad::OnOperation(int pad_req) 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; - 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; - 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);