34 unsigned char* pixels;
35 atlas.GetTexDataAsAlpha8(&pixels, &
w, &
h);
43 atlas.TexID = &fontPaint;
48 ImGui::CreateContext();
49 ImGuiIO& io = ImGui::GetIO();
52 io.KeyMap[ImGuiKey_Tab] = (
int)skui::Key::kTab;
53 io.KeyMap[ImGuiKey_LeftArrow] = (
int)skui::Key::kLeft;
54 io.KeyMap[ImGuiKey_RightArrow] = (
int)skui::Key::kRight;
55 io.KeyMap[ImGuiKey_UpArrow] = (
int)skui::Key::kUp;
56 io.KeyMap[ImGuiKey_DownArrow] = (
int)skui::Key::kDown;
57 io.KeyMap[ImGuiKey_PageUp] = (
int)skui::Key::kPageUp;
58 io.KeyMap[ImGuiKey_PageDown] = (
int)skui::Key::kPageDown;
59 io.KeyMap[ImGuiKey_Home] = (
int)skui::Key::kHome;
60 io.KeyMap[ImGuiKey_End] = (
int)skui::Key::kEnd;
61 io.KeyMap[ImGuiKey_Delete] = (
int)skui::Key::kDelete;
62 io.KeyMap[ImGuiKey_Backspace] = (
int)skui::Key::kBack;
63 io.KeyMap[ImGuiKey_Enter] = (
int)skui::Key::kOK;
64 io.KeyMap[ImGuiKey_Escape] = (
int)skui::Key::kEscape;
65 io.KeyMap[ImGuiKey_A] = (
int)skui::Key::kA;
66 io.KeyMap[ImGuiKey_C] = (
int)skui::Key::kC;
67 io.KeyMap[ImGuiKey_V] = (
int)skui::Key::kV;
68 io.KeyMap[ImGuiKey_X] = (
int)skui::Key::kX;
69 io.KeyMap[ImGuiKey_Y] = (
int)skui::Key::kY;
70 io.KeyMap[ImGuiKey_Z] = (
int)skui::Key::kZ;
76 ImGui::DestroyContext();
80 ImGui::GetStyle().ScaleAllSizes(scaleFactor);
82 ImFontAtlas& atlas = *ImGui::GetIO().Fonts;
85 cfg.SizePixels = 13 * scaleFactor;
86 atlas.AddFontDefault(&cfg);
90#if defined(SK_BUILD_FOR_UNIX)
91static const char* get_clipboard_text(
void*
user_data) {
93 return w->getClipboardText();
96static void set_clipboard_text(
void*
user_data,
const char*
text) {
98 w->setClipboardText(
text);
105#if defined(SK_BUILD_FOR_UNIX)
106 ImGuiIO& io = ImGui::GetIO();
107 io.ClipboardUserData = fWindow;
108 io.GetClipboardTextFn = get_clipboard_text;
109 io.SetClipboardTextFn = set_clipboard_text;
114 ImGuiIO& io = ImGui::GetIO();
115 io.MousePos.x =
static_cast<float>(
x);
116 io.MousePos.y =
static_cast<float>(
y);
118 io.MouseDown[0] =
true;
120 io.MouseDown[0] =
false;
122 return io.WantCaptureMouse;
126 ImGuiIO& io = ImGui::GetIO();
127 io.MouseWheel += delta;
128 return io.WantCaptureMouse;
132 intptr_t funcIndex = fSkiaWidgetFuncs.
size();
134 ImGui::Image((ImTextureID)funcIndex, size);
139 ImGuiIO& io = ImGui::GetIO();
141 static double previousTime = 0.0;
143 io.DeltaTime =
static_cast<float>(currentTime - previousTime);
144 previousTime = currentTime;
146 io.DisplaySize.x =
static_cast<float>(fWindow->
width());
147 io.DisplaySize.y =
static_cast<float>(fWindow->
height());
149 io.KeyAlt = io.KeysDown[
static_cast<int>(skui::Key::kOption)];
150 io.KeyCtrl = io.KeysDown[
static_cast<int>(skui::Key::kCtrl)];
151 io.KeyShift = io.KeysDown[
static_cast<int>(skui::Key::kShift)];
152 io.KeySuper = io.KeysDown[
static_cast<int>(skui::Key::kSuper)];
163 const ImDrawData* drawData = ImGui::GetDrawData();
168 auto canvas =
surface->getCanvas();
170 for (
int i = 0; i < drawData->CmdListsCount; ++i) {
171 const ImDrawList* drawList = drawData->CmdLists[i];
175 for (
int j = 0; j < drawList->VtxBuffer.size(); ++j) {
176 const ImDrawVert& vert = drawList->VtxBuffer[j];
179 color.push_back(vert.col);
187 for (
int j = 0; j < drawList->CmdBuffer.size(); ++j) {
188 const ImDrawCmd* drawCmd = &drawList->CmdBuffer[j];
193 if (drawCmd->UserCallback) {
194 drawCmd->UserCallback(drawList, drawCmd);
196 intptr_t idIndex = (intptr_t)drawCmd->TextureId;
197 if (idIndex < fSkiaWidgetFuncs.
size()) {
202 ImDrawIdx rectIndex = drawList->IdxBuffer[indexOffset];
205 canvas->translate(tl.
fX, tl.
fY);
206 fSkiaWidgetFuncs[idIndex](canvas);
212 drawCmd->ClipRect.z, drawCmd->ClipRect.w));
214 drawList->VtxBuffer.size(),
217 drawList->IdxBuffer.begin() + indexOffset);
220 indexOffset += drawCmd->ElemCount;
225 fSkiaWidgetFuncs.
clear();
229 ImGuiIO& io = ImGui::GetIO();
231 return io.WantCaptureKeyboard;
235 ImGuiIO& io = ImGui::GetIO();
236 if (io.WantTextInput) {
237 if (c > 0 && c < 0x10000) {
238 io.AddInputCharacter(c);
static void info(const char *fmt,...) SK_PRINTF_LIKE(1
static void build_ImFontAtlas(ImFontAtlas &atlas, SkPaint &fontPaint)
constexpr SkColor SK_ColorWHITE
SK_API void SkSwapRB(uint32_t *dest, const uint32_t *src, int count)
Type::kYUV Type::kRGBA() int(0.7 *637)
bool onMouse(int x, int y, skui::InputState state, skui::ModifierKey modifiers) override
void onAttach(sk_app::Window *window) override
void onPaint(SkSurface *) override
void onPrePaint() override
bool onMouseWheel(float delta, int x, int y, skui::ModifierKey modifiers) override
std::function< void(SkCanvas *)> SkiaWidgetFunc
void setScaleFactor(float scaleFactor)
bool onKey(skui::Key key, skui::InputState state, skui::ModifierKey modifiers) override
void skiaWidget(const ImVec2 &size, SkiaWidgetFunc func)
bool onChar(SkUnichar c, skui::ModifierKey modifiers) override
static SkMatrix Scale(SkScalar sx, SkScalar sy)
void setColor(SkColor color)
void setShader(sk_sp< SkShader > shader)
void push_back(const T &v)
static sk_sp< SkVertices > MakeCopy(VertexMode mode, int vertexCount, const SkPoint positions[], const SkPoint texs[], const SkColor colors[], int indexCount, const uint16_t indices[])
SK_API sk_sp< SkImage > RasterFromPixmap(const SkPixmap &pixmap, RasterReleaseProc rasterReleaseProc, ReleaseContext releaseContext)
static SkImageInfo MakeA8(int width, int height)
static constexpr SkPoint Make(float x, float y)
static constexpr SkRect MakeLTRB(float l, float t, float r, float b)