Browse Source

Restore original 'green', slight update on

auto color selection vs. background
pre-master-46
Holger Vogt 6 years ago
parent
commit
6094769fda
  1. 159
      src/frontend/wdisp/winprint.c
  2. 3
      src/include/ngspice/wincolornames.h

159
src/frontend/wdisp/winprint.c

@ -42,21 +42,23 @@ typedef tPrintData *tpPrintData; /* Zeiger darauf */
#define pPrintData(g) ((tpPrintData)(g->devdep)) #define pPrintData(g) ((tpPrintData)(g->devdep))
/* externals */ /* externals */
void WaitForIdle(void); /* Warte, bis keine Events da */
void WaitForIdle(void); /* wait until no events */
extern void wincolor_init(COLORREF* ColorTable, int noc);
/* lokale Variablen */ /* lokale Variablen */
static HFONT PlotFont = NULL; /* Font-Merker */
static HFONT OldFont = NULL;
#define NumLines 7 /* Anzahl der LineStyles */
static int LineTable[NumLines]; /* Speicher fuer die LineStyles */
static HDC PrinterDC = NULL; /* Device Context */
#define NumPrintColors 2 /* vordef. Farben */
static COLORREF ColorTable[NumPrintColors];/* Speicher fuer die Farben */
static int PrinterWidth = 1000; /* Breite des Papiers */
static int PrinterHeight = 1000; /* Hoehe des Papiers */
static HFONT PlotFont = NULL;
static HFONT OldFont = NULL;
#define NumLines 7 /* number of LineStyles */
static int LineTable[NumLines]; /* LineStyle memory */
static HDC PrinterDC = NULL; /* Device Context */
#define NumPrintColors 23 /* number of pre-defined colors */
static COLORREF ColorTable[NumPrintColors]; /* color memory */
static int PrinterWidth = 1000; /* paper width */
static int PrinterHeight = 1000; /* paper height */
/****************************************************************************** /******************************************************************************
Drucker-Initialisierung
printer initialization
******************************************************************************/ ******************************************************************************/
void WPRINT_PrintInit(HWND hwnd) void WPRINT_PrintInit(HWND hwnd)
@ -156,39 +158,33 @@ int WPRINT_Init(void)
pd.hSetupTemplate = NULL; pd.hSetupTemplate = NULL;
/* Default-Drucker initialisieren */ /* Default-Drucker initialisieren */
(void) PrintDlg(&pd);
(void) PrintDlg( &pd);
/* Speicher freigeben */ /* Speicher freigeben */
if (pd.hDevMode) {
GlobalFree(pd.hDevMode);
}
if (pd.hDevNames) {
GlobalFree(pd.hDevNames);
}
if( pd.hDevMode) GlobalFree( pd.hDevMode);
if( pd.hDevNames) GlobalFree( pd.hDevNames);
/* DC holen */ /* DC holen */
PrinterDC = pd.hDC; PrinterDC = pd.hDC;
if (!PrinterDC) return 1; if (!PrinterDC) return 1;
/* Abmasze bestimmen */ /* Abmasze bestimmen */
PrinterWidth = GetDeviceCaps(PrinterDC, HORZRES);
PrinterHeight = GetDeviceCaps(PrinterDC, VERTRES);
pWidth = GetDeviceCaps(PrinterDC, HORZSIZE);
pHeight = GetDeviceCaps(PrinterDC, VERTSIZE);
PrinterWidth = GetDeviceCaps( PrinterDC, HORZRES);
PrinterHeight = GetDeviceCaps( PrinterDC, VERTRES);
pWidth = GetDeviceCaps( PrinterDC, HORZSIZE);
pHeight = GetDeviceCaps( PrinterDC, VERTSIZE);
/* Mapping Mode setzen (fuer Kreise) */ /* Mapping Mode setzen (fuer Kreise) */
if (pWidth > pHeight) {
if ( pWidth > pHeight)
/* Querformat */ /* Querformat */
PrinterWidth = (PrinterHeight * pWidth) / pHeight; PrinterWidth = (PrinterHeight * pWidth) / pHeight;
}
else {
else
/* Hochformat */ /* Hochformat */
PrinterHeight = (PrinterWidth * pHeight) / pWidth; PrinterHeight = (PrinterWidth * pHeight) / pWidth;
}
SetMapMode(PrinterDC, MM_ISOTROPIC);
SetWindowExtEx(PrinterDC, PrinterWidth, PrinterHeight, NULL);
SetViewportExtEx(PrinterDC, PrinterWidth, PrinterHeight, NULL);
SetMapMode( PrinterDC, MM_ISOTROPIC);
SetWindowExtEx( PrinterDC, PrinterWidth, PrinterHeight, NULL);
SetViewportExtEx( PrinterDC, PrinterWidth, PrinterHeight, NULL);
/* nicht hoeher als breit zeichnen */ /* nicht hoeher als breit zeichnen */
if (pWidth < pHeight) { if (pWidth < pHeight) {
@ -203,8 +199,7 @@ int WPRINT_Init(void)
dispdev->numcolors = NumPrintColors; dispdev->numcolors = NumPrintColors;
/* Farben initialisieren */ /* Farben initialisieren */
ColorTable[0] = RGB(255,255,255); /* Weisz */
ColorTable[1] = RGB(0, 0, 0); /* Schwarz */
wincolor_init(ColorTable, NumPrintColors);
/* LineStyles initialisieren */ /* LineStyles initialisieren */
LineTable[0] = PS_SOLID; LineTable[0] = PS_SOLID;
@ -217,16 +212,16 @@ int WPRINT_Init(void)
/* Font */ /* Font */
if (!PlotFont) { if (!PlotFont) {
PlotFont = CreateFont(0,0,0,0, FW_DONTCARE, FALSE, FALSE, FALSE,
PlotFont = CreateFont( 0,0,0,0, FW_DONTCARE, FALSE, FALSE, FALSE,
ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
PROOF_QUALITY, FIXED_PITCH, NULL); PROOF_QUALITY, FIXED_PITCH, NULL);
} }
/* Abort-Prozedur setzen */ /* Abort-Prozedur setzen */
SetAbortProc(PrinterDC, WPRINT_Abort);
SetAbortProc( PrinterDC, WPRINT_Abort);
} }
/* fertig */ /* fertig */
return 0;
return (0);
} }
@ -239,14 +234,13 @@ int WPRINT_Init(void)
int WPRINT_NewViewport(GRAPH * graph) int WPRINT_NewViewport(GRAPH * graph)
{ {
TEXTMETRIC tm; TEXTMETRIC tm;
tpPrintData pd; tpPrintData pd;
DOCINFO di; DOCINFO di;
/* Parameter testen */ /* Parameter testen */
if (!graph) {
return 1;
}
if (!graph) return 1;
/* Initialisiere, falls noch nicht geschehen */ /* Initialisiere, falls noch nicht geschehen */
if (WPRINT_Init() != 0) { if (WPRINT_Init() != 0) {
@ -258,16 +252,15 @@ int WPRINT_NewViewport(GRAPH * graph)
pd = calloc(1, sizeof(tPrintData)); pd = calloc(1, sizeof(tPrintData));
if (!pd) return 1; if (!pd) return 1;
graph->devdep = pd; graph->devdep = pd;
graph->n_byte_devdep = sizeof(tPrintData);
/* Setze den Color-Index */ /* Setze den Color-Index */
pd->ColorIndex = 0; pd->ColorIndex = 0;
/* Font setzen */ /* Font setzen */
OldFont = SelectObject(PrinterDC, PlotFont);
OldFont = SelectObject( PrinterDC, PlotFont);
/* Font-Parameter abfragen */ /* Font-Parameter abfragen */
if (GetTextMetrics(PrinterDC, &tm)) {
if (GetTextMetrics( PrinterDC, &tm)) {
graph->fontheight = tm.tmHeight; graph->fontheight = tm.tmHeight;
graph->fontwidth = tm.tmAveCharWidth; graph->fontwidth = tm.tmAveCharWidth;
} }
@ -286,28 +279,32 @@ int WPRINT_NewViewport(GRAPH * graph)
graph->absolute.height = PrinterHeight; graph->absolute.height = PrinterHeight;
/* Druckauftrag anmelden */ /* Druckauftrag anmelden */
di.cbSize = sizeof(DOCINFO);
di.cbSize = sizeof( DOCINFO);
di.lpszDocName = graph->plotname; di.lpszDocName = graph->plotname;
di.lpszOutput = NULL; di.lpszOutput = NULL;
if (StartDoc(PrinterDC, &di) <= 0) {
return 1;
}
if (StartPage(PrinterDC) <= 0) {
return 1;
}
if (StartDoc( PrinterDC, &di) <= 0) return 1;
if (StartPage( PrinterDC) <= 0) return 1;
/* titel drucken */ /* titel drucken */
if (graph->plotname) { if (graph->plotname) {
UINT align; UINT align;
align = GetTextAlign(PrinterDC);
SetTextAlign(PrinterDC, TA_RIGHT | TA_TOP | TA_NOUPDATECP);
TextOut(PrinterDC, PrinterWidth-graph->fontwidth, 1, graph->plotname,
(int) strlen(graph->plotname));
SetTextAlign(PrinterDC, align);
align = GetTextAlign( PrinterDC);
SetTextAlign( PrinterDC, TA_RIGHT | TA_TOP | TA_NOUPDATECP);
#ifdef EXT_ASC
TextOut(PrinterDC, PrinterWidth - graph->fontwidth, 1, graph->plotname,
(int)strlen(graph->plotname));
#else
wchar_t* wtext;
wtext = TMALLOC(wchar_t, 2 * strlen(graph->plotname) + 1);
MultiByteToWideChar(CP_UTF8, 0, graph->plotname, -1, wtext, 2 * strlen(graph->plotname) + 1);
TextOutW(PrinterDC, PrinterWidth - graph->fontwidth, 1, wtext, 2 * (int)strlen(graph->plotname) + 1);
tfree(wtext);
#endif
SetTextAlign( PrinterDC, align);
} }
/* fertig */ /* fertig */
return 0;
return(0);
} }
int WPRINT_Close(void) int WPRINT_Close(void)
@ -348,8 +345,6 @@ int WPRINT_DrawLine(int x1, int y1, int x2, int y2, bool isgrid)
/* Farben/Dicke */ /* Farben/Dicke */
ColIndex = pd->ColorIndex; ColIndex = pd->ColorIndex;
if (ColIndex > 1)
ColIndex = 1;
MoveToEx(PrinterDC, x1, PrinterHeight - y1, NULL); MoveToEx(PrinterDC, x1, PrinterHeight - y1, NULL);
NewPen = CreatePen( LineTable[pd->LineIndex], 0, ColorTable[ColIndex] ); NewPen = CreatePen( LineTable[pd->LineIndex], 0, ColorTable[ColIndex] );
@ -380,18 +375,11 @@ int WPRINT_Arc(int x0, int y0, int radius, double theta, double delta_theta)
double dx0; double dx0;
double dy0; double dy0;
if (!currentgraph) {
return 0;
}
if (!currentgraph) return 0;
pd = pPrintData(currentgraph); pd = pPrintData(currentgraph);
if (!pd) {
return 0;
}
if (!pd) return 0;
ColIndex = pd->ColorIndex; ColIndex = pd->ColorIndex;
if (ColIndex > 1) {
ColIndex = 1;
}
direction = AD_COUNTERCLOCKWISE; direction = AD_COUNTERCLOCKWISE;
if (delta_theta < 0) { if (delta_theta < 0) {
@ -399,7 +387,7 @@ int WPRINT_Arc(int x0, int y0, int radius, double theta, double delta_theta)
delta_theta = - delta_theta; delta_theta = - delta_theta;
direction = AD_CLOCKWISE; direction = AD_CLOCKWISE;
} }
SetArcDirection(PrinterDC, direction);
SetArcDirection( PrinterDC, direction);
/* Geometrische Vorueberlegungen */ /* Geometrische Vorueberlegungen */
yb = PrinterHeight; yb = PrinterHeight;
@ -411,17 +399,17 @@ int WPRINT_Arc(int x0, int y0, int radius, double theta, double delta_theta)
r = radius; r = radius;
dx0 = x0; dx0 = x0;
dy0 = y0; dy0 = y0;
xs = (int) (dx0 + (r * cos(theta)));
ys = (int) (dy0 + (r * sin(theta)));
xe = (int) (dx0 + (r * cos(theta + delta_theta)));
ye = (int) (dy0 + (r * sin(theta + delta_theta)));
xs = (int)(dx0 + (r * cos(theta)));
ys = (int)(dy0 + (r * sin(theta)));
xe = (int)(dx0 + (r * cos(theta + delta_theta)));
ye = (int)(dy0 + (r * sin(theta + delta_theta)));
/* Zeichnen */ /* Zeichnen */
NewPen = CreatePen(LineTable[pd->LineIndex], 0, ColorTable[ColIndex] );
NewPen = CreatePen( LineTable[pd->LineIndex], 0, ColorTable[ColIndex] );
OldPen = SelectObject(PrinterDC, NewPen); OldPen = SelectObject(PrinterDC, NewPen);
Arc(PrinterDC, left, yb-top, right, yb-bottom, xs, yb-ys, xe, yb-ye);
Arc( PrinterDC, left, yb-top, right, yb-bottom, xs, yb-ys, xe, yb-ye);
OldPen = SelectObject(PrinterDC, OldPen); OldPen = SelectObject(PrinterDC, OldPen);
DeleteObject(NewPen);
DeleteObject( NewPen);
return 0; return 0;
} }
@ -432,23 +420,24 @@ int WPRINT_Text(char * text, int x, int y, int degrees)
int ColIndex; int ColIndex;
NG_IGNORE(degrees); NG_IGNORE(degrees);
if (!currentgraph) {
return 0;
}
if (!currentgraph) return 0;
pd = pPrintData(currentgraph); pd = pPrintData(currentgraph);
if (!pd) {
return 0;
}
if (!pd) return 0;
ColIndex = pd->ColorIndex; ColIndex = pd->ColorIndex;
if (ColIndex > 1) {
ColIndex = 1;
}
SetTextColor(PrinterDC, ColorTable[ColIndex]);
TextOut(PrinterDC, x, PrinterHeight - y - currentgraph->fontheight,
text, (int) strlen(text));
return 0;
SetTextColor( PrinterDC, ColorTable[ColIndex]);
#ifdef EXT_ASC
TextOut(PrinterDC, x, PrinterHeight - y - currentgraph->fontheight, text, (int)strlen(text));
#else
wchar_t* wtext;
wtext = TMALLOC(wchar_t, 2 * strlen(text) + 1);
MultiByteToWideChar(CP_UTF8, 0, text, -1, wtext, 2 * strlen(text) + 1);
TextOutW(PrinterDC, x, PrinterHeight - y - currentgraph->fontheight, wtext, 2 * (int)strlen(text) + 1);
tfree(wtext);
#endif
return (0);
} }

3
src/include/ngspice/wincolornames.h

@ -66,7 +66,7 @@ static struct colortable ctable[] = {
0, "Gold ",255,215, 0, 0, "Gold ",255,215, 0,
0, "GoldenRod ",218,165, 32, 0, "GoldenRod ",218,165, 32,
0, "Gray ",127,127,127, 0, "Gray ",127,127,127,
0, "Green ", 0,128, 0,
0, "Green ", 0,255, 0,
0, "GreenYellow ",173,255, 47, 0, "GreenYellow ",173,255, 47,
0, "HoneyDew ",240,255,240, 0, "HoneyDew ",240,255,240,
0, "HotPink ",255,105,180, 0, "HotPink ",255,105,180,
@ -152,6 +152,7 @@ static struct colortable ctable[] = {
0, "Tomato ",255, 99, 71, 0, "Tomato ",255, 99, 71,
0, "Turquoise ", 64,224,208, 0, "Turquoise ", 64,224,208,
0, "Violet ",238,130,238, 0, "Violet ",238,130,238,
0, "WebGreen ", 0,128, 0,
0, "Wheat ",245,222,179, 0, "Wheat ",245,222,179,
0, "White ",255,255,255, 0, "White ",255,255,255,
0, "WhiteSmoke ",245,245,245, 0, "WhiteSmoke ",245,245,245,

Loading…
Cancel
Save