add vmenubar to FTerm
This commit is contained in:
parent
07b8c161a0
commit
d37619b5be
|
@ -101,6 +101,7 @@ const FString* FTerm::Sec_DA = 0;
|
||||||
FOptiMove* FTerm::opti = 0;
|
FOptiMove* FTerm::opti = 0;
|
||||||
FTerm::term_area* FTerm::vterm = 0;
|
FTerm::term_area* FTerm::vterm = 0;
|
||||||
FTerm::term_area* FTerm::vdesktop = 0;
|
FTerm::term_area* FTerm::vdesktop = 0;
|
||||||
|
FTerm::term_area* FTerm::vmenubar = 0;
|
||||||
FTerm::term_area* FTerm::vstatusbar = 0;
|
FTerm::term_area* FTerm::vstatusbar = 0;
|
||||||
FTerm::term_area* FTerm::last_area = 0;
|
FTerm::term_area* FTerm::last_area = 0;
|
||||||
std::queue<int>* FTerm::output_buffer = 0;
|
std::queue<int>* FTerm::output_buffer = 0;
|
||||||
|
@ -130,6 +131,7 @@ FTerm::FTerm()
|
||||||
fd_tty = -1;
|
fd_tty = -1;
|
||||||
vterm = 0;
|
vterm = 0;
|
||||||
vdesktop = 0;
|
vdesktop = 0;
|
||||||
|
vmenubar = 0;
|
||||||
vstatusbar = 0;
|
vstatusbar = 0;
|
||||||
last_area = 0;
|
last_area = 0;
|
||||||
fg_color = -1;
|
fg_color = -1;
|
||||||
|
@ -1378,7 +1380,7 @@ void FTerm::init()
|
||||||
resetColorMap();
|
resetColorMap();
|
||||||
saveColorMap();
|
saveColorMap();
|
||||||
|
|
||||||
setPalette (fc::Blue, 0x18, 0x18, 0xb2);
|
setPalette (fc::Blue, 0x22, 0x22, 0xb2);
|
||||||
setPalette (fc::Cyan, 0x4a, 0x4a, 0xe4);
|
setPalette (fc::Cyan, 0x4a, 0x4a, 0xe4);
|
||||||
setPalette (fc::Red, 0xb2, 0x18, 0x18);
|
setPalette (fc::Red, 0xb2, 0x18, 0x18);
|
||||||
setPalette (fc::LightGray, 0xbc, 0xbc, 0xbc);
|
setPalette (fc::LightGray, 0xbc, 0xbc, 0xbc);
|
||||||
|
@ -1678,10 +1680,6 @@ void FTerm::restoreVTerm (int x, int y, int w, int h)
|
||||||
if ( w < 0 || h < 0 )
|
if ( w < 0 || h < 0 )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
widget = static_cast<FWidget*>(this);
|
|
||||||
x = x + widget->getGlobalX() - widget->getX();
|
|
||||||
y = y + widget->getGlobalY() - widget->getY();
|
|
||||||
|
|
||||||
if ( x+w > vterm->width )
|
if ( x+w > vterm->width )
|
||||||
w = vterm->width - x;
|
w = vterm->width - x;
|
||||||
if ( w < 0 )
|
if ( w < 0 )
|
||||||
|
@ -1691,6 +1689,8 @@ void FTerm::restoreVTerm (int x, int y, int w, int h)
|
||||||
if ( h < 0 )
|
if ( h < 0 )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
widget = static_cast<FWidget*>(this);
|
||||||
|
|
||||||
for (register int ty=0; ty < h; ty++)
|
for (register int ty=0; ty < h; ty++)
|
||||||
{
|
{
|
||||||
for (register int tx=0; tx < w; tx++)
|
for (register int tx=0; tx < w; tx++)
|
||||||
|
@ -1718,6 +1718,20 @@ void FTerm::restoreVTerm (int x, int y, int w, int h)
|
||||||
++iter;
|
++iter;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// menubar is always on top
|
||||||
|
FWidget* menubar;
|
||||||
|
menubar = reinterpret_cast<FWidget*>(FWidget::menuBar());
|
||||||
|
|
||||||
|
if ( vmenubar && menubar
|
||||||
|
&& menubar->getGeometryGlobal().contains(x+tx+1, y+ty+1) )
|
||||||
|
{
|
||||||
|
int bar_x = menubar->getGlobalX() - 1;
|
||||||
|
int bar_y = menubar->getGlobalY() - 1;
|
||||||
|
sc = &vmenubar->text[(y+ty-bar_y) * vmenubar->width + (x+tx-bar_x)];
|
||||||
|
}
|
||||||
|
|
||||||
|
// statusbar is always on top
|
||||||
FWidget* statusbar;
|
FWidget* statusbar;
|
||||||
statusbar = reinterpret_cast<FWidget*>(FWidget::statusBar());
|
statusbar = reinterpret_cast<FWidget*>(FWidget::statusBar());
|
||||||
|
|
||||||
|
@ -1728,6 +1742,7 @@ void FTerm::restoreVTerm (int x, int y, int w, int h)
|
||||||
int bar_y = statusbar->getGlobalY() - 1;
|
int bar_y = statusbar->getGlobalY() - 1;
|
||||||
sc = &vstatusbar->text[(y+ty-bar_y) * vstatusbar->width + (x+tx-bar_x)];
|
sc = &vstatusbar->text[(y+ty-bar_y) * vstatusbar->width + (x+tx-bar_x)];
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy (tc, sc, sizeof(FTerm::char_data));
|
memcpy (tc, sc, sizeof(FTerm::char_data));
|
||||||
|
|
||||||
if ( short(vterm->changes[y+ty].xmin) > x )
|
if ( short(vterm->changes[y+ty].xmin) > x )
|
||||||
|
@ -1786,6 +1801,19 @@ bool FTerm::isCovered(int x, int y, FTerm::term_area* area) const
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// menubar is always on top
|
||||||
|
FWidget* menubar;
|
||||||
|
if ( vmenubar )
|
||||||
|
menubar = reinterpret_cast<FWidget*>(vmenubar->widget);
|
||||||
|
else
|
||||||
|
menubar = 0;
|
||||||
|
|
||||||
|
if ( area != vmenubar && menubar
|
||||||
|
&& menubar->getGeometryGlobal().contains(x,y) )
|
||||||
|
{
|
||||||
|
covered = true;
|
||||||
|
}
|
||||||
|
|
||||||
// statusbar is always on top
|
// statusbar is always on top
|
||||||
FWidget* statusbar;
|
FWidget* statusbar;
|
||||||
if ( vstatusbar )
|
if ( vstatusbar )
|
||||||
|
@ -1860,7 +1888,7 @@ void FTerm::updateVTerm (FTerm::term_area* area)
|
||||||
continue;
|
continue;
|
||||||
line_len = aw + rsh;
|
line_len = aw + rsh;
|
||||||
|
|
||||||
ac = &area->text[y * line_len + x];
|
ac = &area->text[y * line_len + x];
|
||||||
tc = &vterm->text[gy * vterm->width + gx - ol];
|
tc = &vterm->text[gy * vterm->width + gx - ol];
|
||||||
|
|
||||||
if ( ! isCovered(gx-ol, gy, area) )
|
if ( ! isCovered(gx-ol, gy, area) )
|
||||||
|
@ -2008,7 +2036,7 @@ void FTerm::putArea (int ax, int ay, FTerm::term_area* area)
|
||||||
ah = area->height;
|
ah = area->height;
|
||||||
rsh = area->right_shadow;
|
rsh = area->right_shadow;
|
||||||
bsh = area->bottom_shadow;
|
bsh = area->bottom_shadow;
|
||||||
ol = 0; // outside left
|
ol = 0; // outside left
|
||||||
sbar = 0; // statusbar distance
|
sbar = 0; // statusbar distance
|
||||||
|
|
||||||
if ( ax < 0 )
|
if ( ax < 0 )
|
||||||
|
@ -2017,9 +2045,10 @@ void FTerm::putArea (int ax, int ay, FTerm::term_area* area)
|
||||||
ax = 0;
|
ax = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( vstatusbar && vstatusbar->widget && area != vstatusbar)
|
if ( vstatusbar && vstatusbar->widget && area != vstatusbar )
|
||||||
sbar = 1;
|
sbar = 1;
|
||||||
if ( ah + bsh + ay + sbar > vterm->height )
|
|
||||||
|
if ( ay + ah + bsh + sbar > vterm->height )
|
||||||
y_end = vterm->height - ay - sbar;
|
y_end = vterm->height - ay - sbar;
|
||||||
else
|
else
|
||||||
y_end = ah + bsh;
|
y_end = ah + bsh;
|
||||||
|
@ -2057,22 +2086,26 @@ FTerm::char_data FTerm::getCoveredCharacter (const FPoint& pos, FTerm* obj)
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
FTerm::char_data FTerm::getCoveredCharacter (int x, int y, FTerm* obj)
|
FTerm::char_data FTerm::getCoveredCharacter (int x, int y, FTerm* obj)
|
||||||
{
|
{
|
||||||
|
int xx,yy;
|
||||||
FTerm::char_data* cc; // covered character
|
FTerm::char_data* cc; // covered character
|
||||||
FWidget* w;
|
FWidget* w;
|
||||||
|
|
||||||
x--;
|
x--;
|
||||||
y--;
|
y--;
|
||||||
|
xx = x;
|
||||||
|
yy = y;
|
||||||
|
|
||||||
if ( x < 0 )
|
if ( xx < 0 )
|
||||||
x = 0;
|
xx = 0;
|
||||||
if ( y < 0 )
|
if ( yy < 0 )
|
||||||
y = 0;
|
yy = 0;
|
||||||
if ( x >= vterm->width )
|
|
||||||
x = vterm->width - 1;
|
|
||||||
if ( y >= vterm->height )
|
|
||||||
y = vterm->height - 1;
|
|
||||||
|
|
||||||
cc = &vdesktop->text[y * vdesktop->width + x];
|
if ( xx >= vterm->width )
|
||||||
|
xx = vterm->width - 1;
|
||||||
|
if ( yy >= vterm->height )
|
||||||
|
yy = vterm->height - 1;
|
||||||
|
|
||||||
|
cc = &vdesktop->text[yy * vdesktop->width + xx];
|
||||||
w = static_cast<FWidget*>(obj);
|
w = static_cast<FWidget*>(obj);
|
||||||
|
|
||||||
if ( w->window_list && ! w->window_list->empty() )
|
if ( w->window_list && ! w->window_list->empty() )
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
#include <linux/fb.h> // Linux framebuffer console
|
#include <linux/fb.h> // Linux framebuffer console
|
||||||
|
|
||||||
#include <sys/io.h>
|
#include <sys/io.h>
|
||||||
|
#include <sys/ioctl.h>
|
||||||
#include <sys/kd.h>
|
#include <sys/kd.h>
|
||||||
#include <sys/stat.h> // <asm/io.h> is deprecated, use <sys/io.h> instead
|
#include <sys/stat.h> // <asm/io.h> is deprecated, use <sys/io.h> instead
|
||||||
|
|
||||||
|
@ -188,6 +189,7 @@ class FTerm
|
||||||
|
|
||||||
static term_area* vterm; // virtual terminal
|
static term_area* vterm; // virtual terminal
|
||||||
static term_area* vdesktop; // virtual desktop
|
static term_area* vdesktop; // virtual desktop
|
||||||
|
static term_area* vmenubar; // virtual menubar
|
||||||
static term_area* vstatusbar; // virtual statusbar
|
static term_area* vstatusbar; // virtual statusbar
|
||||||
static term_area* last_area; // last used area
|
static term_area* last_area; // last used area
|
||||||
term_area* vwin; // virtual window
|
term_area* vwin; // virtual window
|
||||||
|
|
Loading…
Reference in New Issue