mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-15 06:05:58 -06:00
.upptst
git-svn-id: svn://ultimatepp.org/upp/trunk@2442 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
parent
abd142db0f
commit
d13f3daaa2
4 changed files with 143 additions and 41 deletions
|
|
@ -1,41 +1,40 @@
|
|||
#include "Fonts.h"
|
||||
|
||||
struct DisplayWithFont : public Display {
|
||||
void Paint(Draw& w, const Rect& r, const Value& q, Color ink, Color paper, dword style) const
|
||||
{
|
||||
ValueArray va = q;
|
||||
String txt = va[0];
|
||||
int face = va[1];
|
||||
Font fnt(face, r.Height() - 4);
|
||||
w.DrawRect(r, paper);
|
||||
w.DrawText(r.left, r.top + (r.Height() - fnt.Info().GetHeight()) / 2, txt, fnt, ink);
|
||||
}
|
||||
};
|
||||
|
||||
void Fonts::Reload()
|
||||
{
|
||||
list.Clear();
|
||||
for(int i = 0; i < Font::GetFaceCount(); i++)
|
||||
list.Add(Font::GetFaceName(i), ~text, i);
|
||||
}
|
||||
|
||||
void Fonts::Copy()
|
||||
{
|
||||
if(list.IsCursor())
|
||||
WriteClipboardText(list.GetKey());
|
||||
}
|
||||
|
||||
Fonts::Fonts()
|
||||
{
|
||||
CtrlLayout(*this, "Font test");
|
||||
text <<= THISBACK(Reload);
|
||||
list.AddColumn("Font");
|
||||
list.AddColumn("Text").AddIndex().SetDisplay(Single<DisplayWithFont>());
|
||||
list.WhenCursor = THISBACK(Copy);
|
||||
}
|
||||
|
||||
GUI_APP_MAIN
|
||||
{
|
||||
Fonts().Run();
|
||||
}
|
||||
|
||||
#include "Fonts.h"
|
||||
|
||||
struct DisplayWithFont : public Display {
|
||||
void Paint(Draw& w, const Rect& r, const Value& q, Color ink, Color paper, dword style) const
|
||||
{
|
||||
ValueArray va = q;
|
||||
String txt = va[0];
|
||||
int face = va[1];
|
||||
Font fnt(face, r.Height() - 4);
|
||||
w.DrawRect(r, paper);
|
||||
w.DrawText(r.left, r.top + (r.Height() - fnt.Info().GetHeight()) / 2, txt, fnt, ink);
|
||||
}
|
||||
};
|
||||
|
||||
void Fonts::Reload()
|
||||
{
|
||||
list.Clear();
|
||||
for(int i = 0; i < Font::GetFaceCount(); i++)
|
||||
list.Add(Font::GetFaceName(i), ~text, i);
|
||||
}
|
||||
|
||||
void Fonts::Copy()
|
||||
{
|
||||
if(list.IsCursor())
|
||||
WriteClipboardText(list.GetKey());
|
||||
}
|
||||
|
||||
Fonts::Fonts()
|
||||
{
|
||||
CtrlLayout(*this, "Font test");
|
||||
text <<= THISBACK(Reload);
|
||||
list.AddColumn("Font");
|
||||
list.AddColumn("Text").AddIndex().SetDisplay(Single<DisplayWithFont>());
|
||||
list.WhenCursor = THISBACK(Copy);
|
||||
}
|
||||
|
||||
GUI_APP_MAIN
|
||||
{
|
||||
Fonts().Run();
|
||||
}
|
||||
|
|
|
|||
12
upptst/ScreenShotter/ScreenShotter.upp
Normal file
12
upptst/ScreenShotter/ScreenShotter.upp
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
uses
|
||||
CtrlLib,
|
||||
plugin\jpg,
|
||||
plugin\gif,
|
||||
plugin\tif;
|
||||
|
||||
file
|
||||
main.cpp;
|
||||
|
||||
mainconfig
|
||||
"" = "GUI DLL";
|
||||
|
||||
8
upptst/ScreenShotter/init
Normal file
8
upptst/ScreenShotter/init
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
#ifndef _ScreenShotter_icpp_init_stub
|
||||
#define _ScreenShotter_icpp_init_stub
|
||||
#include "CtrlLib/init"
|
||||
#include "plugin\jpg/init"
|
||||
#include "plugin\gif/init"
|
||||
#include "plugin\tif/init"
|
||||
#include "plugin\pcx/init"
|
||||
#endif
|
||||
83
upptst/ScreenShotter/main.cpp
Normal file
83
upptst/ScreenShotter/main.cpp
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
#include <CtrlLib/CtrlLib.h>
|
||||
#include <plugin/bmp/bmp.h>
|
||||
#include <plugin/jpg/jpg.h>
|
||||
#include <plugin/gif/gif.h>
|
||||
#include <plugin/tif/tif.h>
|
||||
|
||||
using namespace Upp;
|
||||
|
||||
Image ScreenShot(int x, int y, int cx, int cy)
|
||||
{
|
||||
HDC dcScreen = CreateDC("DISPLAY", NULL, NULL, NULL);
|
||||
|
||||
RGBA *pixels;
|
||||
|
||||
Buffer<byte> data;
|
||||
data.Alloc(sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD)*256);
|
||||
BITMAPINFOHEADER *hi = (BITMAPINFOHEADER *) ~data;;
|
||||
memset(hi, 0, sizeof(BITMAPINFOHEADER));
|
||||
hi->biSize = sizeof(BITMAPINFOHEADER);
|
||||
hi->biPlanes = 1;
|
||||
hi->biBitCount = 32;
|
||||
hi->biCompression = BI_RGB;
|
||||
hi->biSizeImage = 0;
|
||||
hi->biClrUsed = 0;
|
||||
hi->biClrImportant = 0;
|
||||
hi->biWidth = cx;
|
||||
hi->biHeight = -cy;
|
||||
|
||||
HBITMAP hbmp = CreateDIBSection(dcScreen, (BITMAPINFO *)hi, DIB_RGB_COLORS, (void **)&pixels, NULL, 0);
|
||||
HDC dcMem = ::CreateCompatibleDC(dcScreen);
|
||||
HBITMAP hbmpOld = (HBITMAP) ::SelectObject(dcMem, hbmp);
|
||||
HDC hdcCompatible = CreateCompatibleDC(dcScreen);
|
||||
::BitBlt(dcMem, 0, 0, cx, cy, dcScreen, x, y, SRCCOPY);
|
||||
|
||||
ImageBuffer ib(cx, cy);
|
||||
memcpy(~ib, pixels, cx * cy * sizeof(RGBA));
|
||||
|
||||
::DeleteObject(::SelectObject(dcMem, hbmpOld));
|
||||
::DeleteDC(dcMem);
|
||||
::DeleteDC(dcScreen);
|
||||
|
||||
return ib;
|
||||
};
|
||||
|
||||
|
||||
extern "C" __declspec(dllexport) int capture_screen(int x, int y, int cx, int cy, char *filename) {
|
||||
Image m = ScreenShot(x, y, cx, cy);
|
||||
String ext = ToLower(GetFileExt(filename));
|
||||
if(ext == ".png")
|
||||
PNGEncoder().SaveFile(filename, m);
|
||||
if(ext == ".bmp")
|
||||
BMPEncoder().Bpp(32).SaveFile(filename, m);
|
||||
if(ext == ".jpg")
|
||||
JPGEncoder().SaveFile(filename, m);
|
||||
if(ext == ".gif")
|
||||
GIFEncoder().SaveFile(filename, m);
|
||||
if(ext == ".tif" || ext == ".tiff")
|
||||
TIFEncoder().SaveFile(filename, m);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
#define DLL_APP_MAIN \
|
||||
void _DllMainAppInit(); \
|
||||
\
|
||||
BOOL WINAPI DllMain(HINSTANCE hinstDll, DWORD fdwReason, LPVOID lpReserved) \
|
||||
{ \
|
||||
if(fdwReason == DLL_PROCESS_ATTACH) { \
|
||||
Ctrl::InitWin32(AppGetHandle()); \
|
||||
AppInitEnvironment__(); \
|
||||
_DllMainAppInit(); \
|
||||
} \
|
||||
else \
|
||||
if(fdwReason == DLL_PROCESS_DETACH) { \
|
||||
Ctrl::ExitWin32(); \
|
||||
} \
|
||||
return true; \
|
||||
} \
|
||||
\
|
||||
void _DllMainAppInit()
|
||||
|
||||
DLL_APP_MAIN {
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue