#![allow(clippy::new_ret_no_self)]
use std::{convert::TryInto, os::unix::io::AsRawFd, io::{Read, Write}};
use ncursesw::{ChtypeChar, ComplexChar, WINDOW};
use crate::{Screen, Origin, Size, Pad, NCurseswWinError, gen::HasHandle};
pub trait IsPad: HasHandle<WINDOW> {
fn new(size: Size) -> result!(Pad) {
Ok(Pad::_from(None, ncursesw::newpad(size.try_into()?)?, true))
}
#[deprecated(since = "0.3.1", note = "Use Pad::new() instead")]
fn newpad(size: Size) -> result!(Pad) {
Self::new(size)
}
fn new_sp(screen: &Screen, size: Size) -> result!(Pad) {
Ok(Pad::_from(Some(screen._handle()), ncursesw::newpad_sp(screen._handle(), size.try_into()?)?, true))
}
#[deprecated(since = "0.5.0", note = "Use Pad::new_sp() instead")]
fn newpad_sp(screen: &Screen, size: Size) -> result!(Pad) {
Self::new_sp(screen, size)
}
fn subpad(&self, size: Size, origin: Origin) -> result!(Pad) {
Ok(Pad::_from(self._screen(), ncursesw::subpad(self._handle(), size.try_into()?, origin.try_into()?)?, true))
}
fn getparent(&self) -> Option<Pad> {
ncursesw::wgetparent(self._handle()).map(|ptr| Pad::_from(self._screen(), ptr, false))
}
fn getwin<I: AsRawFd + Read>(file: &I) -> result!(Pad) {
Ok(Pad::_from(None, ncursesw::getwin(file)?, true))
}
fn putwin<O: AsRawFd + Write>(&self, file: &O) -> result!(()) {
Ok(ncursesw::putwin(self._handle(), file)?)
}
fn overlay(&self, srcwin: &Pad) -> result!(()) {
Ok(ncursesw::overlay(srcwin._handle(), self._handle())?)
}
fn overwrite(&self, srcwin: &Pad) -> result!(()) {
Ok(ncursesw::overwrite(srcwin._handle(), self._handle())?)
}
fn pechochar(&self, ch: ChtypeChar) -> result!(()) {
Ok(ncursesw::pechochar(self._handle(), ch)?)
}
fn pecho_wchar(&self, wch: ComplexChar) -> result!(()) {
Ok(ncursesw::pecho_wchar(self._handle(), wch)?)
}
fn pnoutrefresh(&self, pmin: Origin, smin: Origin, smax: Origin) -> result!(()) {
Ok(ncursesw::pnoutrefresh(self._handle(), pmin.try_into()?, smin.try_into()?, smax.try_into()?)?)
}
fn prefresh(&self, pmin: Origin, smin: Origin, smax: Origin) -> result!(()) {
Ok(ncursesw::prefresh(self._handle(), pmin.try_into()?, smin.try_into()?, smax.try_into()?)?)
}
}