Fix error checking on startup

This commit is contained in:
miguel
2018-05-13 22:16:57 -04:00
parent c6a1b92b5a
commit 370c9080c3

View File

@@ -2,6 +2,7 @@
// WindowsDriver.cs: Windows specific driver
//
// Authors:
// Miguel de Icaza (miguel@gnome.org)
// Nick Van Dyck (vandyck.nick@outlook.com)
//
// Copyright (c) 2018
@@ -60,38 +61,24 @@ namespace Terminal.Gui {
1,
IntPtr.Zero
);
if (ScreenBuffer == INVALID_HANDLE_VALUE){
var err = Marshal.GetLastWin32Error ();
var err = Marshal.GetLastWin32Error ();
if (err != 0)
{
if (err != 0)
throw new System.ComponentModel.Win32Exception(err);
}
if (!SetConsoleActiveScreenBuffer (ScreenBuffer))
{
err = Marshal.GetLastWin32Error();
if (!SetConsoleActiveScreenBuffer (ScreenBuffer)){
var err = Marshal.GetLastWin32Error();
throw new System.ComponentModel.Win32Exception(err);
}
OriginalStdOutChars = new CharInfo[Console.WindowHeight * Console.WindowWidth];
ReadConsoleOutput (
OutputHandle,
OriginalStdOutChars,
coords,
new Coord() { X = 0, Y = 0 },
ref window
);
ReadConsoleOutput (OutputHandle, OriginalStdOutChars, coords, new Coord () { X = 0, Y = 0 }, ref window);
}
return WriteConsoleOutput (
ScreenBuffer,
charInfoBuffer,
coords,
new Coord() { X = 0, Y = 0 },
ref window
);
return WriteConsoleOutput (ScreenBuffer, charInfoBuffer, coords, new Coord () { X = 0, Y = 0 }, ref window);
}
public bool SetCursorPosition(Coord position)
@@ -116,12 +103,9 @@ namespace Terminal.Gui {
uint length = 1;
InputRecord[] records = new InputRecord[length];
while (
ContinueListeningForConsoleEvents &&
while (ContinueListeningForConsoleEvents &&
ReadConsoleInput(InputHandle, records, length, out numberEventsRead) &&
numberEventsRead > 0
)
{
numberEventsRead > 0){
inputEventHandler (records[0]);
}
});
@@ -133,8 +117,7 @@ namespace Terminal.Gui {
ConsoleMode = OriginalConsoleMode;
OriginalConsoleMode = 0;
if (!SetConsoleActiveScreenBuffer (OutputHandle))
{
if (!SetConsoleActiveScreenBuffer (OutputHandle)){
var err = Marshal.GetLastWin32Error ();
Console.WriteLine("Error: {0}", err);
}
@@ -412,6 +395,9 @@ namespace Terminal.Gui {
IntPtr screenBufferData
);
internal static IntPtr INVALID_HANDLE_VALUE = new IntPtr (-1);
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool SetConsoleActiveScreenBuffer(IntPtr Handle);
@@ -458,10 +444,8 @@ namespace Terminal.Gui {
LastMouseButtonPressed = null;
}
if (mouseEvent.EventFlags == 0 && LastMouseButtonPressed == null)
{
switch (mouseEvent.ButtonState)
{
if (mouseEvent.EventFlags == 0 && LastMouseButtonPressed == null){
switch (mouseEvent.ButtonState){
case WindowsConsole.ButtonState.Button1Pressed:
mouseFlag = MouseFlags.Button1Pressed;
break;
@@ -475,11 +459,8 @@ namespace Terminal.Gui {
break;
}
LastMouseButtonPressed = mouseEvent.ButtonState;
}
else if (mouseEvent.EventFlags == 0 && LastMouseButtonPressed != null)
{
switch (LastMouseButtonPressed)
{
} else if (mouseEvent.EventFlags == 0 && LastMouseButtonPressed != null){
switch (LastMouseButtonPressed){
case WindowsConsole.ButtonState.Button1Pressed:
mouseFlag = MouseFlags.Button1Clicked;
break;
@@ -493,9 +474,7 @@ namespace Terminal.Gui {
break;
}
LastMouseButtonPressed = null;
}
else if(mouseEvent.EventFlags == WindowsConsole.EventFlags.MouseMoved)
{
} else if(mouseEvent.EventFlags == WindowsConsole.EventFlags.MouseMoved){
mouseFlag = MouseFlags.ReportMousePosition;
}
@@ -597,29 +576,27 @@ namespace Terminal.Gui {
{
WinConsole.PollEvents (inputEvent =>
{
switch(inputEvent.EventType)
{
case WindowsConsole.EventType.Key:
if (inputEvent.KeyEvent.bKeyDown == false)
return;
var map = MapKey (ToConsoleKeyInfo (inputEvent.KeyEvent));
if (map == (Key) 0xffffffff)
return;
keyHandler (new KeyEvent (map));
break;
switch(inputEvent.EventType){
case WindowsConsole.EventType.Key:
if (inputEvent.KeyEvent.bKeyDown == false)
return;
var map = MapKey (ToConsoleKeyInfo (inputEvent.KeyEvent));
if (map == (Key) 0xffffffff)
return;
keyHandler (new KeyEvent (map));
break;
case WindowsConsole.EventType.Mouse:
mouseHandler (ToDriverMouse (inputEvent.MouseEvent));
break;
case WindowsConsole.EventType.WindowBufferSize:
cols = inputEvent.WindowBufferSizeEvent.size.X;
rows = inputEvent.WindowBufferSizeEvent.size.Y - 1;
ResizeScreen ();
UpdateOffScreen ();
TerminalResized ();
break;
case WindowsConsole.EventType.Mouse:
mouseHandler (ToDriverMouse (inputEvent.MouseEvent));
break;
case WindowsConsole.EventType.WindowBufferSize:
cols = inputEvent.WindowBufferSizeEvent.size.X;
rows = inputEvent.WindowBufferSizeEvent.size.Y - 1;
ResizeScreen ();
UpdateOffScreen ();
TerminalResized ();
break;
}
});
}
@@ -677,12 +654,11 @@ namespace Terminal.Gui {
void UpdateOffScreen ()
{
for (int row = 0; row < rows; row++)
for (int col = 0; col < cols; col++)
{
int position = row * cols + col;
OutputBuffer[position].Attributes = (ushort)MakeColor(ConsoleColor.White, ConsoleColor.Blue);
OutputBuffer[position].Char.UnicodeChar = ' ';
}
for (int col = 0; col < cols; col++){
int position = row * cols + col;
OutputBuffer[position].Attributes = (ushort)MakeColor(ConsoleColor.White, ConsoleColor.Blue);
OutputBuffer[position].Char.UnicodeChar = ' ';
}
}
int ccol, crow;
@@ -696,8 +672,7 @@ namespace Terminal.Gui {
{
var position = crow * Cols + ccol;
if (Clip.Contains (ccol, crow))
{
if (Clip.Contains (ccol, crow)){
OutputBuffer[position].Attributes = (ushort)currentAttribute;
OutputBuffer[position].Char.UnicodeChar = (char)rune;
}
@@ -727,22 +702,19 @@ namespace Terminal.Gui {
private Attribute MakeColor (ConsoleColor f, ConsoleColor b)
{
// Encode the colors into the int value.
return new Attribute ()
{
return new Attribute (){
value = ((int)f | (int)b << 4)
};
}
public override void Refresh()
{
var bufferCoords = new WindowsConsole.Coord ()
{
var bufferCoords = new WindowsConsole.Coord (){
X = (short)Clip.Width,
Y = (short)Clip.Height
};
var window = new WindowsConsole.SmallRect ()
{
var window = new WindowsConsole.SmallRect (){
Top = 0,
Left = 0,
Right = (short)Clip.Right,
@@ -755,14 +727,12 @@ namespace Terminal.Gui {
public override void UpdateScreen ()
{
var bufferCoords = new WindowsConsole.Coord ()
{
var bufferCoords = new WindowsConsole.Coord (){
X = (short)Clip.Width,
Y = (short)Clip.Height
};
var window = new WindowsConsole.SmallRect ()
{
var window = new WindowsConsole.SmallRect (){
Top = 0,
Left = 0,
Right = (short)Clip.Right,
@@ -775,8 +745,7 @@ namespace Terminal.Gui {
public override void UpdateCursor()
{
var position = new WindowsConsole.Coord()
{
var position = new WindowsConsole.Coord(){
X = (short)ccol,
Y = (short)crow
};